diff --git a/packages/create-astro/src/index.ts b/packages/create-astro/src/index.ts index 5bf16e490..c42a1942c 100644 --- a/packages/create-astro/src/index.ts +++ b/packages/create-astro/src/index.ts @@ -9,79 +9,78 @@ const args = yargs(process.argv); prompts.override(args); export function mkdirp(dir: string) { - try { - fs.mkdirSync(dir, { recursive: true }); - } catch (e) { - if (e.code === 'EEXIST') return; - throw e; - } + try { + fs.mkdirSync(dir, { recursive: true }); + } catch (e) { + if (e.code === 'EEXIST') return; + throw e; + } } - const { version } = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf-8')); export async function main() { - console.log('\n' + bold('Welcome to Astro!') + gray(` (create-astro v${version})`)); - console.log(`If you encounter a problem, visit ${cyan('https://github.com/snowpack/astro/issues')} to search or file a new issue.\n`); - - console.log(green(`>`) + gray(` Prepare for liftoff.`)); - console.log(green(`>`) + gray(` Gathering mission details...`)); + console.log('\n' + bold('Welcome to Astro!') + gray(` (create-astro v${version})`)); + console.log(`If you encounter a problem, visit ${cyan('https://github.com/snowpack/astro/issues')} to search or file a new issue.\n`); - const cwd = args['_'][2] || '.'; - if (fs.existsSync(cwd)) { - if (fs.readdirSync(cwd).length > 0) { - const response = await prompts({ - type: 'confirm', - name: 'forceOverwrite', - message: 'Directory not empty. Continue?', - initial: false - }); - if (!response.forceOverwrite) { - process.exit(1); - } - } - } else { - mkdirp(cwd); - } + console.log(green(`>`) + gray(` Prepare for liftoff.`)); + console.log(green(`>`) + gray(` Gathering mission details...`)); - const options = /** @type {import('./types/internal').Options} */ (await prompts([ - { - type: 'select', - name: 'template', - message: 'Which app template would you like to use?', - choices: TEMPLATES - }, - ])); + const cwd = args['_'][2] || '.'; + if (fs.existsSync(cwd)) { + if (fs.readdirSync(cwd).length > 0) { + const response = await prompts({ + type: 'confirm', + name: 'forceOverwrite', + message: 'Directory not empty. Continue?', + initial: false, + }); + if (!response.forceOverwrite) { + process.exit(1); + } + } + } else { + mkdirp(cwd); + } - const emitter = degit(`snowpackjs/astro/examples/${options.template}`, { - cache: false, - force: true, - verbose: false, - }); - - try { - // emitter.on('info', info => { console.log(info.message) }); - await emitter.clone(cwd); - } catch (err) { - // degit is compiled, so the stacktrace is pretty noisy. Just report the message. - console.error(red(err.message)); - process.exit(1); - } + const options = /** @type {import('./types/internal').Options} */ await prompts([ + { + type: 'select', + name: 'template', + message: 'Which app template would you like to use?', + choices: TEMPLATES, + }, + ]); - console.log(bold(green('✔ Copied project files'))); + const emitter = degit(`snowpackjs/astro/examples/${options.template}`, { + cache: false, + force: true, + verbose: false, + }); - console.log('\nNext steps:'); - let i = 1; + try { + // emitter.on('info', info => { console.log(info.message) }); + await emitter.clone(cwd); + } catch (err) { + // degit is compiled, so the stacktrace is pretty noisy. Just report the message. + console.error(red(err.message)); + process.exit(1); + } - const relative = path.relative(process.cwd(), cwd); - if (relative !== '') { - console.log(` ${i++}: ${bold(cyan(`cd ${relative}`))}`); - } + console.log(bold(green('✔ Copied project files'))); - console.log(` ${i++}: ${bold(cyan('npm install'))} (or pnpm install, yarn, etc)`); - console.log(` ${i++}: ${bold(cyan('git init && git add -A && git commit -m "Initial commit"'))} (optional step)`); - console.log(` ${i++}: ${bold(cyan('npm start'))} (or pnpm, yarn, etc)`); + console.log('\nNext steps:'); + let i = 1; - console.log(`\nTo close the dev server, hit ${bold(cyan('Ctrl-C'))}`); - console.log('\nStuck? Visit us at https://astro.build/chat\n'); -} \ No newline at end of file + const relative = path.relative(process.cwd(), cwd); + if (relative !== '') { + console.log(` ${i++}: ${bold(cyan(`cd ${relative}`))}`); + } + + console.log(` ${i++}: ${bold(cyan('npm install'))} (or pnpm install, yarn, etc)`); + console.log(` ${i++}: ${bold(cyan('git init && git add -A && git commit -m "Initial commit"'))} (optional step)`); + console.log(` ${i++}: ${bold(cyan('npm start'))} (or pnpm, yarn, etc)`); + + console.log(`\nTo close the dev server, hit ${bold(cyan('Ctrl-C'))}`); + console.log('\nStuck? Visit us at https://astro.build/chat\n'); +} diff --git a/packages/create-astro/src/templates.ts b/packages/create-astro/src/templates.ts index 63254a311..dce085314 100644 --- a/packages/create-astro/src/templates.ts +++ b/packages/create-astro/src/templates.ts @@ -1,16 +1,19 @@ -export const TEMPLATES = [, - { - title: 'Starter Kit (Generic)', - value: 'starter' - }, { - title: 'Blog', - value: 'blog' - }, - { - title: 'Documentation', - value: 'docs' - }, - { - title: 'Portfolio', - value: 'portfolio' - }]; \ No newline at end of file +export const TEMPLATES = [ + , + { + title: 'Starter Kit (Generic)', + value: 'starter', + }, + { + title: 'Blog', + value: 'blog', + }, + { + title: 'Documentation', + value: 'docs', + }, + { + title: 'Portfolio', + value: 'portfolio', + }, +]; diff --git a/packages/create-astro/test/create-astro.test.js b/packages/create-astro/test/create-astro.test.js index b83d4f4a6..3b9e4f013 100644 --- a/packages/create-astro/test/create-astro.test.js +++ b/packages/create-astro/test/create-astro.test.js @@ -5,7 +5,7 @@ import { suite } from 'uvu'; import execa from 'execa'; import del from 'del'; import * as assert from 'uvu/assert'; -import {TEMPLATES} from '../dist/templates.js'; +import { TEMPLATES } from '../dist/templates.js'; const CreateAstro = suite('npm init astro'); @@ -17,14 +17,14 @@ CreateAstro.before(async () => { await fs.promises.mkdir(fixturesDir); }); -for (const {value: template} of TEMPLATES) { +for (const { value: template } of TEMPLATES) { // TODO: Unskip once repo is made public. Because the repo is private, the templates can't yet be downloaded. CreateAstro.skip(template, async () => { const testDirectory = path.join(fixturesDir, template); const { stdout } = await execa('../../create-astro.mjs', [testDirectory, '--template', template, '--force-overwrite'], { cwd: path.join(cwd, 'fixtures') }); - console.log(stdout); - // test: path should formatted as './{dirName}' + console.log(stdout); + // test: path should formatted as './{dirName}' assert.not.match(stdout, '././'); const DOES_HAVE = ['.gitignore', 'package.json', 'public', 'src'];