diff options
Diffstat (limited to 'packages/create-astro/src')
-rw-r--r-- | packages/create-astro/src/config.ts | 38 | ||||
-rw-r--r-- | packages/create-astro/src/frameworks.ts | 30 | ||||
-rw-r--r-- | packages/create-astro/src/index.ts | 34 | ||||
-rw-r--r-- | packages/create-astro/src/templates.ts | 11 |
4 files changed, 49 insertions, 64 deletions
diff --git a/packages/create-astro/src/config.ts b/packages/create-astro/src/config.ts index d9f0cb28d..f8e63d24c 100644 --- a/packages/create-astro/src/config.ts +++ b/packages/create-astro/src/config.ts @@ -1,23 +1,21 @@ -export const createConfig = ({ renderers }: { renderers: string[] }) => { +export const createConfig = ({ integrations }: { integrations: string[] }) => { + if (integrations.length === 0) { + return `import { defineConfig } from 'astro/config'; +// https://astro.build/config +export default defineConfig({}); +`; + } + + const rendererImports = integrations.map((r: string) => ` import ${r} from '@astrojs/${r === 'solid' ? 'solid-js' : r}';`); + const rendererIntegrations = integrations.map((r: string) => ` ${r}(),`); 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 - // public: './public', // A folder of static files Astro will copy to the root. Useful for favicons, images, and other files that don’t need processing. - buildOptions: { - // site: 'http://example.com', // Your public domain, e.g.: https://my-site.dev/. Used to generate sitemaps and canonical URLs. - sitemap: true, // Generate sitemap (set to "false" to disable) - }, - devOptions: { - // hostname: 'localhost', // The hostname to run the dev server on. - // port: 3000, // The port to run the dev server on. - },`, - ` renderers: ${JSON.stringify(renderers, undefined, 2) - .split('\n') - .map((ln, i) => (i !== 0 ? ` ${ln}` : ln)) - .join('\n')},`, - `}; -`, + `import { defineConfig } from 'astro/config';`, + ...rendererImports, + `// https://astro.build/config`, + `export default defineConfig({`, + ` integrations: [`, + ...rendererIntegrations, + ` ]`, + `});`, ].join('\n'); }; diff --git a/packages/create-astro/src/frameworks.ts b/packages/create-astro/src/frameworks.ts index 22a53a296..0290c1c96 100644 --- a/packages/create-astro/src/frameworks.ts +++ b/packages/create-astro/src/frameworks.ts @@ -1,5 +1,5 @@ export const COUNTER_COMPONENTS = { - '@astrojs/renderer-preact': { + preact: { filename: `src/components/PreactCounter.jsx`, content: `import { useState } from 'preact/hooks'; @@ -18,7 +18,7 @@ export default function PreactCounter() { } `, }, - '@astrojs/renderer-react': { + react: { filename: `src/components/ReactCounter.jsx`, content: `import { useState } from 'react'; @@ -37,7 +37,7 @@ export default function ReactCounter() { } `, }, - '@astrojs/renderer-solid': { + solid: { filename: `src/components/SolidCounter.jsx`, content: `import { createSignal } from "solid-js"; @@ -56,7 +56,7 @@ export default function SolidCounter() { } `, }, - '@astrojs/renderer-svelte': { + svelte: { filename: `src/components/SvelteCounter.svelte`, content: `<script> let count = 0; @@ -77,7 +77,7 @@ export default function SolidCounter() { </div> `, }, - '@astrojs/renderer-vue': { + vue: { filename: `src/components/VueCounter.vue`, content: `<template> <div id="vue" class="counter"> @@ -109,23 +109,23 @@ export default { export const FRAMEWORKS = [ { - title: 'Preact', - value: '@astrojs/renderer-preact', + title: 'preact', + value: '@astrojs/preact', }, { - title: 'React', - value: '@astrojs/renderer-react', + title: 'react', + value: 'react', }, { - title: 'Solid', - value: '@astrojs/renderer-solid', + title: 'solid', + value: 'solid', }, { - title: 'Svelte', - value: '@astrojs/renderer-svelte', + title: 'svelte', + value: 'svelte', }, { - title: 'Vue', - value: '@astrojs/renderer-vue', + title: 'vue', + value: 'vue', }, ]; diff --git a/packages/create-astro/src/index.ts b/packages/create-astro/src/index.ts index a1f5b3b5b..2f4f59e88 100644 --- a/packages/create-astro/src/index.ts +++ b/packages/create-astro/src/index.ts @@ -15,7 +15,7 @@ import { logger, defaultLogLevel } from './logger.js'; // broke our arg parser, since `--` is a special kind of flag. Filtering for `--` here // fixes the issue so that create-astro now works on all npm version. const cleanArgv = process.argv.filter((arg) => arg !== '--'); -const args = yargs(cleanArgv, { array: ['renderers'] }); +const args = yargs(cleanArgv); prompts.override(args); export function mkdirp(dir: string) { @@ -87,22 +87,18 @@ export async function main() { }); const selectedTemplate = TEMPLATES.find((template) => template.value === options.template); - let renderers: string[] = []; + let integrations: string[] = []; - if (selectedTemplate?.renderers === true) { + if (selectedTemplate?.integrations === true) { const result = /** @type {import('./types/internal').Options} */ await prompts([ { type: 'multiselect', - name: 'renderers', + name: 'integrations', message: 'Which frameworks would you like to use?', choices: FRAMEWORKS, }, ]); - renderers = result.renderers; - } else if (selectedTemplate?.renderers && Array.isArray(selectedTemplate.renderers) && selectedTemplate.renderers.length) { - renderers = selectedTemplate.renderers; - const titles = renderers.map((renderer) => FRAMEWORKS.find((item) => item.value === renderer)?.title).join(', '); - console.log(`${green(`✔`)} ${bold(`Using template's default renderers`)} ${gray('›')} ${titles}`); + integrations = result.integrations; } // Copy @@ -148,24 +144,24 @@ export async function main() { break; } case 'astro.config.mjs': { - if (selectedTemplate?.renderers !== true) { + if (selectedTemplate?.integrations !== true) { break; } - await fs.promises.writeFile(fileLoc, createConfig({ renderers })); + await fs.promises.writeFile(fileLoc, createConfig({ integrations })); 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`) + // Fetch latest versions of selected integrations + const integrationEntries = (await Promise.all( + ['astro', ...integrations].map((integration: string) => + fetch(`https://registry.npmjs.org/@astrojs/${integration === 'solid' ? 'solid-js' : integration}/latest`) .then((res: any) => res.json()) - .then((res: any) => [renderer, `^${res['version']}`]) + .then((res: any) => [res['name'], `^${res['version']}`]) ) )) as any; - packageJSON.devDependencies = { ...(packageJSON.devDependencies ?? {}), ...Object.fromEntries(rendererEntries) }; + packageJSON.devDependencies = { ...(packageJSON.devDependencies ?? {}), ...Object.fromEntries(integrationEntries) }; await fs.promises.writeFile(fileLoc, JSON.stringify(packageJSON, undefined, 2)); break; } @@ -178,8 +174,8 @@ export async function main() { let importStatements: string[] = []; let components: string[] = []; await Promise.all( - renderers.map(async (renderer) => { - const component = COUNTER_COMPONENTS[renderer as keyof typeof COUNTER_COMPONENTS]; + integrations.map(async (integrations) => { + const component = COUNTER_COMPONENTS[integrations 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/, '..')}';`); diff --git a/packages/create-astro/src/templates.ts b/packages/create-astro/src/templates.ts index c4eef854b..d3982f6c6 100644 --- a/packages/create-astro/src/templates.ts +++ b/packages/create-astro/src/templates.ts @@ -2,31 +2,22 @@ export const TEMPLATES = [ { title: 'Starter Kit (Generic)', value: 'starter', - renderers: true, + integrations: true, }, { title: 'Blog', value: 'blog', - renderers: ['@astrojs/renderer-preact'], }, { title: 'Documentation', value: 'docs', - renderers: ['@astrojs/renderer-preact'], }, { title: 'Portfolio', value: 'portfolio', - renderers: ['@astrojs/renderer-preact'], - }, - { - title: 'Portfolio Svelte', - value: 'portfolio-svelte', - renderers: ['@astrojs/renderer-svelte'], }, { title: 'Minimal', value: 'minimal', - renderers: [], }, ]; |