summaryrefslogtreecommitdiff
path: root/packages/create-astro/src/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/create-astro/src/index.ts')
-rw-r--r--packages/create-astro/src/index.ts98
1 files changed, 58 insertions, 40 deletions
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!'));