summaryrefslogtreecommitdiff
path: root/packages/create-astro/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/create-astro/src')
-rw-r--r--packages/create-astro/src/config.ts38
-rw-r--r--packages/create-astro/src/frameworks.ts30
-rw-r--r--packages/create-astro/src/index.ts34
-rw-r--r--packages/create-astro/src/templates.ts11
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: [],
},
];