From 38f7f1825900789e632661992eb64a1b7e6b0669 Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Wed, 24 Jan 2024 18:22:29 +0100 Subject: [PATCH 1/4] fix(create-astro): @astrojs/check and typescript addition --- .changeset/seven-kiwis-join.md | 5 +++ .../create-astro/src/actions/typescript.ts | 32 +++++++++++++++---- packages/create-astro/src/messages.ts | 4 +-- 3 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 .changeset/seven-kiwis-join.md diff --git a/.changeset/seven-kiwis-join.md b/.changeset/seven-kiwis-join.md new file mode 100644 index 000000000000..328d9a342a4f --- /dev/null +++ b/.changeset/seven-kiwis-join.md @@ -0,0 +1,5 @@ +--- +"create-astro": patch +--- + +Fixes `@astrojs/check` and `typescript` addition to `package.json` dependencies when the user has decided not to auto-install dependencies diff --git a/packages/create-astro/src/actions/typescript.ts b/packages/create-astro/src/actions/typescript.ts index 0ac1c753d50c..14e6e08b51c0 100644 --- a/packages/create-astro/src/actions/typescript.ts +++ b/packages/create-astro/src/actions/typescript.ts @@ -4,7 +4,7 @@ import { color } from '@astrojs/cli-kit'; import { readFile, rm, writeFile } from 'node:fs/promises'; import path from 'node:path'; import stripJsonComments from 'strip-json-comments'; -import { error, info, title, typescriptByDefault } from '../messages.js'; +import { error, getVersion, info, title, typescriptByDefault } from '../messages.js'; import { shell } from '../shell.js'; type PickedTypeScriptContext = Pick< @@ -90,11 +90,18 @@ const FILES_TO_UPDATE = { ) => { try { // add required dependencies for astro check - if (options.ctx.install) - await shell(options.ctx.packageManager, ['add', '@astrojs/check', 'typescript'], { - cwd: path.dirname(file), - stdio: 'ignore', - }); + let installSucceeded = true; + if (options.ctx.install) { + const { exitCode } = await shell( + options.ctx.packageManager, + ['add', '@astrojs/check', 'typescript'], + { + cwd: path.dirname(file), + stdio: 'ignore', + } + ); + installSucceeded = exitCode === 0; + } // inject additional command to build script const data = await readFile(file, { encoding: 'utf-8' }); @@ -107,8 +114,19 @@ const FILES_TO_UPDATE = { if (typeof buildScript === 'string' && !buildScript.includes('astro check')) { // Mutate the existing object to avoid changing user-defined script order parsedPackageJson.scripts.build = `astro check && ${buildScript}`; - await writeFile(file, JSON.stringify(parsedPackageJson, null, indent), 'utf-8'); } + + if (!options.ctx.install || !installSucceeded) { + const [astroCheckVersion, typescriptVersion] = await Promise.all([ + getVersion(options.ctx.packageManager, '@astrojs/check'), + getVersion(options.ctx.packageManager, 'typescript'), + ]); + parsedPackageJson.dependencies ??= {} + parsedPackageJson.dependencies['@astrojs/check'] = astroCheckVersion; + parsedPackageJson.dependencies.typescript = typescriptVersion; + } + + await writeFile(file, JSON.stringify(parsedPackageJson, null, indent), 'utf-8'); } catch (err) { // if there's no package.json (which is very unlikely), then do nothing if (err && (err as any).code === 'ENOENT') return; diff --git a/packages/create-astro/src/messages.ts b/packages/create-astro/src/messages.ts index e912e757d88f..ad2b03945f5a 100644 --- a/packages/create-astro/src/messages.ts +++ b/packages/create-astro/src/messages.ts @@ -55,11 +55,11 @@ export const getName = () => }); let v: string; -export const getVersion = (packageManager: string) => +export const getVersion = (packageManager: string, packageName = 'astro') => new Promise(async (resolve) => { if (v) return resolve(v); let registry = await getRegistry(packageManager); - const { version } = await fetch(`${registry}/astro/latest`, { redirect: 'follow' }).then( + const { version } = await fetch(`${registry}/${packageName}/latest`, { redirect: 'follow' }).then( (res) => res.json(), () => ({ version: '' }) ); From c9f3d4a65b9aa41daa280d1b1538e18231a2cd88 Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Wed, 24 Jan 2024 20:49:21 +0100 Subject: [PATCH 2/4] Update packages/create-astro/src/actions/typescript.ts Co-authored-by: Nate Moore --- packages/create-astro/src/actions/typescript.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/create-astro/src/actions/typescript.ts b/packages/create-astro/src/actions/typescript.ts index 14e6e08b51c0..599b94303a60 100644 --- a/packages/create-astro/src/actions/typescript.ts +++ b/packages/create-astro/src/actions/typescript.ts @@ -122,8 +122,8 @@ const FILES_TO_UPDATE = { getVersion(options.ctx.packageManager, 'typescript'), ]); parsedPackageJson.dependencies ??= {} - parsedPackageJson.dependencies['@astrojs/check'] = astroCheckVersion; - parsedPackageJson.dependencies.typescript = typescriptVersion; + parsedPackageJson.dependencies['@astrojs/check'] = `^${astroCheckVersion}`; + parsedPackageJson.dependencies.typescript = `^${typescriptVersion}`; } await writeFile(file, JSON.stringify(parsedPackageJson, null, indent), 'utf-8'); From 870458e0e536fe46e80fd77b5b934e8462791067 Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Wed, 24 Jan 2024 20:50:41 +0100 Subject: [PATCH 3/4] Update packages/create-astro/src/messages.ts Co-authored-by: Nate Moore --- packages/create-astro/src/messages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-astro/src/messages.ts b/packages/create-astro/src/messages.ts index ad2b03945f5a..c9006b292e47 100644 --- a/packages/create-astro/src/messages.ts +++ b/packages/create-astro/src/messages.ts @@ -55,7 +55,7 @@ export const getName = () => }); let v: string; -export const getVersion = (packageManager: string, packageName = 'astro') => +export const getVersion = (packageManager: string, packageName: string) => new Promise(async (resolve) => { if (v) return resolve(v); let registry = await getRegistry(packageManager); From 55e345e67bc5e257cb21d746d197366b461f4ca2 Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Wed, 24 Jan 2024 20:51:55 +0100 Subject: [PATCH 4/4] fix: remove useless block --- packages/create-astro/src/actions/context.ts | 2 +- .../create-astro/src/actions/typescript.ts | 30 +++++-------------- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/packages/create-astro/src/actions/context.ts b/packages/create-astro/src/actions/context.ts index 51ee6280bc89..8c173191db39 100644 --- a/packages/create-astro/src/actions/context.ts +++ b/packages/create-astro/src/actions/context.ts @@ -93,7 +93,7 @@ export async function getContext(argv: string[]): Promise { prompt, packageManager, username: getName(), - version: getVersion(packageManager), + version: getVersion(packageManager, 'astro'), skipHouston, fancy, dryRun, diff --git a/packages/create-astro/src/actions/typescript.ts b/packages/create-astro/src/actions/typescript.ts index 599b94303a60..886a005c9e17 100644 --- a/packages/create-astro/src/actions/typescript.ts +++ b/packages/create-astro/src/actions/typescript.ts @@ -89,20 +89,6 @@ const FILES_TO_UPDATE = { options: { value: string; ctx: PickedTypeScriptContext } ) => { try { - // add required dependencies for astro check - let installSucceeded = true; - if (options.ctx.install) { - const { exitCode } = await shell( - options.ctx.packageManager, - ['add', '@astrojs/check', 'typescript'], - { - cwd: path.dirname(file), - stdio: 'ignore', - } - ); - installSucceeded = exitCode === 0; - } - // inject additional command to build script const data = await readFile(file, { encoding: 'utf-8' }); const indent = /(^\s+)/m.exec(data)?.[1] ?? '\t'; @@ -116,15 +102,13 @@ const FILES_TO_UPDATE = { parsedPackageJson.scripts.build = `astro check && ${buildScript}`; } - if (!options.ctx.install || !installSucceeded) { - const [astroCheckVersion, typescriptVersion] = await Promise.all([ - getVersion(options.ctx.packageManager, '@astrojs/check'), - getVersion(options.ctx.packageManager, 'typescript'), - ]); - parsedPackageJson.dependencies ??= {} - parsedPackageJson.dependencies['@astrojs/check'] = `^${astroCheckVersion}`; - parsedPackageJson.dependencies.typescript = `^${typescriptVersion}`; - } + const [astroCheckVersion, typescriptVersion] = await Promise.all([ + getVersion(options.ctx.packageManager, '@astrojs/check'), + getVersion(options.ctx.packageManager, 'typescript'), + ]); + parsedPackageJson.dependencies ??= {}; + parsedPackageJson.dependencies['@astrojs/check'] = `^${astroCheckVersion}`; + parsedPackageJson.dependencies.typescript = `^${typescriptVersion}`; await writeFile(file, JSON.stringify(parsedPackageJson, null, indent), 'utf-8'); } catch (err) {