diff options
Diffstat (limited to 'packages/create-astro/src')
-rw-r--r-- | packages/create-astro/src/config.ts | 16 | ||||
-rw-r--r-- | packages/create-astro/src/frameworks.ts | 12 | ||||
-rw-r--r-- | packages/create-astro/src/index.ts | 98 | ||||
-rw-r--r-- | packages/create-astro/src/templates.ts | 6 |
4 files changed, 77 insertions, 55 deletions
diff --git a/packages/create-astro/src/config.ts b/packages/create-astro/src/config.ts index 6a2b3cb64..40e6653a0 100644 --- a/packages/create-astro/src/config.ts +++ b/packages/create-astro/src/config.ts @@ -1,5 +1,6 @@ export const createConfig = ({ renderers }: { renderers: string[] }) => { - return [`export default { + return [ + `export default { // projectRoot: '.', // Where to resolve all URLs relative to. Useful if you have a monorepo project. // pages: './src/pages', // Path to Astro components, pages, and data // dist: './dist', // When running \`astro build\`, path to final static output @@ -12,8 +13,11 @@ export const createConfig = ({ renderers }: { renderers: string[] }) => { // port: 3000, // The port to run the dev server on. // tailwindConfig: '', // Path to tailwind.config.js if used, e.g. './tailwind.config.js' },`, - ` renderers: ${JSON.stringify(renderers, undefined, 2).split('\n').map((ln, i) => i !== 0 ? ` ${ln}` : ln).join('\n')},`, -`}; -`].join('\n') -} - + ` renderers: ${JSON.stringify(renderers, undefined, 2) + .split('\n') + .map((ln, i) => (i !== 0 ? ` ${ln}` : ln)) + .join('\n')},`, + `}; +`, + ].join('\n'); +}; diff --git a/packages/create-astro/src/frameworks.ts b/packages/create-astro/src/frameworks.ts index f7db2e0f6..440dc067b 100644 --- a/packages/create-astro/src/frameworks.ts +++ b/packages/create-astro/src/frameworks.ts @@ -17,7 +17,7 @@ export default function PreactCounter({ children }) { </div> ); } -` +`, }, '@astrojs/renderer-react': { filename: `src/components/ReactCounter.jsx`, @@ -36,7 +36,7 @@ export default function ReactCounter({ children }) { </div> ); } -` +`, }, '@astrojs/renderer-svelte': { filename: `src/components/SvelteCounter.svelte`, @@ -57,7 +57,7 @@ export default function ReactCounter({ children }) { <pre>{ count }</pre> <button on:click={add}>+</button> </div> -` +`, }, '@astrojs/renderer-vue': { filename: `src/components/VueCounter.vue`, @@ -85,8 +85,8 @@ export default { } } </script> -` - } +`, + }, }; export const FRAMEWORKS = [ @@ -105,5 +105,5 @@ export const FRAMEWORKS = [ { title: 'Vue', value: '@astrojs/renderer-vue', - } + }, ]; diff --git a/packages/create-astro/src/index.ts b/packages/create-astro/src/index.ts index dcb87086e..73410d6e3 100644 --- a/packages/create-astro/src/index.ts +++ b/packages/create-astro/src/index.ts @@ -66,9 +66,7 @@ export async function main() { const hash = args.commit ? `#${args.commit}` : ''; - const templateTarget = options.template.includes('/') ? - options.template : - `snowpackjs/astro/examples/${options.template}`; + const templateTarget = options.template.includes('/') ? options.template : `snowpackjs/astro/examples/${options.template}`; const emitter = degit(`${templateTarget}${hash}`, { cache: false, @@ -76,9 +74,9 @@ export async function main() { verbose: false, }); - const selectedTemplate = TEMPLATES.find(template => template.value === options.template); + const selectedTemplate = TEMPLATES.find((template) => template.value === options.template); let renderers: string[] = []; - + if (selectedTemplate?.renderers === true) { const result = /** @type {import('./types/internal').Options} */ await prompts([ { @@ -91,7 +89,7 @@ export async function main() { renderers = result.renderers; } else if (selectedTemplate?.renderers && Array.isArray(selectedTemplate.renderers)) { renderers = selectedTemplate.renderers; - const titles = renderers.map(renderer => FRAMEWORKS.find(item => item.value === renderer)?.title).join(', '); + const titles = renderers.map((renderer) => FRAMEWORKS.find((item) => item.value === renderer)?.title).join(', '); console.log(green(`✔`) + bold(` Using template's default renderers`) + gray(' › ') + titles); } @@ -107,47 +105,57 @@ export async function main() { } // Post-process in parallel - await Promise.all(POSTPROCESS_FILES.map(async (file) => { - const fileLoc = path.resolve(path.join(cwd, file)); - - switch (file) { - case 'CHANGELOG.md': { - if (fs.existsSync(fileLoc)) { - await fs.promises.rm(fileLoc); + await Promise.all( + POSTPROCESS_FILES.map(async (file) => { + const fileLoc = path.resolve(path.join(cwd, file)); + + switch (file) { + case 'CHANGELOG.md': { + if (fs.existsSync(fileLoc)) { + await fs.promises.rm(fileLoc); + } + break; } - break; - } - case 'astro.config.mjs': { - if (selectedTemplate?.renderers !== true) { + case 'astro.config.mjs': { + if (selectedTemplate?.renderers !== true) { + break; + } + await fs.promises.writeFile(fileLoc, createConfig({ renderers })); + break; + } + case 'package.json': { + const packageJSON = JSON.parse(await fs.promises.readFile(fileLoc, 'utf8')); + delete packageJSON.snowpack; // delete snowpack config only needed in monorepo (can mess up projects) + // Fetch latest versions of selected renderers + const rendererEntries = (await Promise.all( + ['astro', ...renderers].map((renderer: string) => + fetch(`https://registry.npmjs.org/${renderer}/latest`) + .then((res: any) => res.json()) + .then((res: any) => [renderer, `^${res['version']}`]) + ) + )) as any; + packageJSON.devDependencies = { ...(packageJSON.devDependencies ?? {}), ...Object.fromEntries(rendererEntries) }; + await fs.promises.writeFile(fileLoc, JSON.stringify(packageJSON, undefined, 2)); break; } - await fs.promises.writeFile(fileLoc, createConfig({ renderers })); - break; - } - case 'package.json': { - const packageJSON = JSON.parse(await fs.promises.readFile(fileLoc, 'utf8')); - delete packageJSON.snowpack; // delete snowpack config only needed in monorepo (can mess up projects) - // Fetch latest versions of selected renderers - const rendererEntries = await Promise.all(['astro', ...renderers].map((renderer: string) => fetch(`https://registry.npmjs.org/${renderer}/latest`).then((res: any) => res.json()).then((res: any) => [renderer, `^${res['version']}`]))) as any; - packageJSON.devDependencies = { ...packageJSON.devDependencies ?? {}, ...Object.fromEntries(rendererEntries) } - await fs.promises.writeFile(fileLoc, JSON.stringify(packageJSON, undefined, 2)); - break; } - } - })); + }) + ); // Inject framework components into starter template if (selectedTemplate?.value === 'starter') { let importStatements: string[] = []; let components: string[] = []; - await Promise.all(renderers.map(async renderer => { - const component = COUNTER_COMPONENTS[renderer as keyof typeof COUNTER_COMPONENTS]; - const componentName = path.basename(component.filename, path.extname(component.filename)); - const absFileLoc = path.resolve(cwd, component.filename); - importStatements.push(`import ${componentName} from '${component.filename.replace(/^src/, '..')}';`); - components.push(`<${componentName}:visible />`); - await fs.promises.writeFile(absFileLoc, component.content); - })); + await Promise.all( + renderers.map(async (renderer) => { + const component = COUNTER_COMPONENTS[renderer as keyof typeof COUNTER_COMPONENTS]; + const componentName = path.basename(component.filename, path.extname(component.filename)); + const absFileLoc = path.resolve(cwd, component.filename); + importStatements.push(`import ${componentName} from '${component.filename.replace(/^src/, '..')}';`); + components.push(`<${componentName}:visible />`); + await fs.promises.writeFile(absFileLoc, component.content); + }) + ); const pageFileLoc = path.resolve(path.join(cwd, 'src', 'pages', 'index.astro')); const content = (await fs.promises.readFile(pageFileLoc)).toString(); @@ -162,9 +170,19 @@ export async function main() { - See https://github.com/snowpackjs/astro/blob/main/docs/core-concepts/component-hydration.md --> `; - lines.splice(41, 0, importStatements.length > 0 ? doc.split('\n').map(ln => `${indent}${ln}`).join('\n') : '', ...components.map(ln => `${indent}${ln}`)); + lines.splice( + 41, + 0, + importStatements.length > 0 + ? doc + .split('\n') + .map((ln) => `${indent}${ln}`) + .join('\n') + : '', + ...components.map((ln) => `${indent}${ln}`) + ); lines.splice(3, 0, importStatements.length > 0 ? `// Framework Component Imports` : '', ...importStatements); - await fs.promises.writeFile(pageFileLoc, lines.join('\n')) + await fs.promises.writeFile(pageFileLoc, lines.join('\n')); } console.log(bold(green('✔') + ' Done!')); diff --git a/packages/create-astro/src/templates.ts b/packages/create-astro/src/templates.ts index 6852aafb0..e4d9cefc4 100644 --- a/packages/create-astro/src/templates.ts +++ b/packages/create-astro/src/templates.ts @@ -7,16 +7,16 @@ export const TEMPLATES = [ { title: 'Blog', value: 'blog', - renderers: ['@astrojs/renderer-preact'] + renderers: ['@astrojs/renderer-preact'], }, { title: 'Documentation', value: 'docs', - renderers: ['@astrojs/renderer-preact'] + renderers: ['@astrojs/renderer-preact'], }, { title: 'Portfolio', value: 'portfolio', - renderers: ['@astrojs/renderer-preact'] + renderers: ['@astrojs/renderer-preact'], }, ]; |