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.ts16
-rw-r--r--packages/create-astro/src/frameworks.ts12
-rw-r--r--packages/create-astro/src/index.ts98
-rw-r--r--packages/create-astro/src/templates.ts6
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'],
},
];