From c926080bde8ecf7aa5a970662c757cd67bdbc4ca Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 20 Jan 2022 16:54:14 -0500 Subject: [PATCH] various create-svelte improvements (#3472) --- .changeset/lemon-camels-brush.md | 5 + .changeset/popular-hounds-love.md | 5 + .changeset/unlucky-otters-tickle.md | 5 + packages/create-svelte/bin.js | 101 +++++++++++------- packages/create-svelte/index.js | 6 +- .../scripts/update-template-repo-contents.js | 1 + packages/create-svelte/types/internal.d.ts | 1 + 7 files changed, 81 insertions(+), 43 deletions(-) create mode 100644 .changeset/lemon-camels-brush.md create mode 100644 .changeset/popular-hounds-love.md create mode 100644 .changeset/unlucky-otters-tickle.md diff --git a/.changeset/lemon-camels-brush.md b/.changeset/lemon-camels-brush.md new file mode 100644 index 000000000000..1146afc557c2 --- /dev/null +++ b/.changeset/lemon-camels-brush.md @@ -0,0 +1,5 @@ +--- +'create-svelte': patch +--- + +Respect Ctrl-C when running create-svelte diff --git a/.changeset/popular-hounds-love.md b/.changeset/popular-hounds-love.md new file mode 100644 index 000000000000..ea2aeea26dee --- /dev/null +++ b/.changeset/popular-hounds-love.md @@ -0,0 +1,5 @@ +--- +'create-svelte': patch +--- + +Make project name an explicit option' diff --git a/.changeset/unlucky-otters-tickle.md b/.changeset/unlucky-otters-tickle.md new file mode 100644 index 000000000000..2731924d5ad5 --- /dev/null +++ b/.changeset/unlucky-otters-tickle.md @@ -0,0 +1,5 @@ +--- +'create-svelte': patch +--- + +Prompt for directory when running create-svelte without argument diff --git a/packages/create-svelte/bin.js b/packages/create-svelte/bin.js index 4ffb87a33eb0..6eadd82e9f70 100755 --- a/packages/create-svelte/bin.js +++ b/packages/create-svelte/bin.js @@ -21,7 +21,21 @@ async function main() { console.log(gray(`\ncreate-svelte version ${version}`)); console.log(disclaimer); - const cwd = process.argv[2] || '.'; + let cwd = process.argv[2] || '.'; + + if (cwd === '.') { + const opts = await prompts([ + { + type: 'text', + name: 'dir', + message: 'Where should we create your project?\n (leave blank to use current directory)' + } + ]); + + if (opts.dir) { + cwd = opts.dir; + } + } if (fs.existsSync(cwd)) { if (fs.readdirSync(cwd).length > 0) { @@ -39,48 +53,57 @@ async function main() { } const options = /** @type {import('./types/internal').Options} */ ( - await prompts([ - { - type: 'select', - name: 'template', - message: 'Which Svelte app template?', - choices: fs.readdirSync(dist('templates')).map((dir) => { - const meta_file = dist(`templates/${dir}/meta.json`); - const meta = JSON.parse(fs.readFileSync(meta_file, 'utf8')); - - return { - title: meta.description, - value: dir - }; - }) - }, - { - type: 'toggle', - name: 'typescript', - message: 'Use TypeScript?', - initial: false, - active: 'Yes', - inactive: 'No' - }, + await prompts( + [ + { + type: 'select', + name: 'template', + message: 'Which Svelte app template?', + choices: fs.readdirSync(dist('templates')).map((dir) => { + const meta_file = dist(`templates/${dir}/meta.json`); + const meta = JSON.parse(fs.readFileSync(meta_file, 'utf8')); + + return { + title: meta.description, + value: dir + }; + }) + }, + { + type: 'toggle', + name: 'typescript', + message: 'Use TypeScript?', + initial: false, + active: 'Yes', + inactive: 'No' + }, + { + type: 'toggle', + name: 'eslint', + message: 'Add ESLint for code linting?', + initial: false, + active: 'Yes', + inactive: 'No' + }, + { + type: 'toggle', + name: 'prettier', + message: 'Add Prettier for code formatting?', + initial: false, + active: 'Yes', + inactive: 'No' + } + ], { - type: 'toggle', - name: 'eslint', - message: 'Add ESLint for code linting?', - initial: false, - active: 'Yes', - inactive: 'No' - }, - { - type: 'toggle', - name: 'prettier', - message: 'Add Prettier for code formatting?', - initial: false, - active: 'Yes', - inactive: 'No' + onCancel: () => { + process.exit(1); + } } - ]) + ) ); + options.name = path.basename(path.resolve(cwd)); + await create(cwd, options); console.log(bold(green('\nYour project is ready!'))); diff --git a/packages/create-svelte/index.js b/packages/create-svelte/index.js index d6f599c078be..65802ad11048 100755 --- a/packages/create-svelte/index.js +++ b/packages/create-svelte/index.js @@ -11,10 +11,8 @@ import { mkdirp, copy, dist } from './utils.js'; export async function create(cwd, options) { mkdirp(cwd); - const name = path.basename(path.resolve(cwd)); - - write_template_files(options.template, options.typescript, name, cwd); - write_common_files(cwd, options, name); + write_template_files(options.template, options.typescript, options.name, cwd); + write_common_files(cwd, options, options.name); } /** diff --git a/packages/create-svelte/scripts/update-template-repo-contents.js b/packages/create-svelte/scripts/update-template-repo-contents.js index bd30fc881289..0cf14aa24880 100644 --- a/packages/create-svelte/scripts/update-template-repo-contents.js +++ b/packages/create-svelte/scripts/update-template-repo-contents.js @@ -14,6 +14,7 @@ fs.readdirSync(repo).forEach((file) => { }); await create(repo, { + name: 'kit-template-default', template: 'default', eslint: false, typescript: false, diff --git a/packages/create-svelte/types/internal.d.ts b/packages/create-svelte/types/internal.d.ts index d7f03e7e279c..8be632663fd4 100644 --- a/packages/create-svelte/types/internal.d.ts +++ b/packages/create-svelte/types/internal.d.ts @@ -1,4 +1,5 @@ export type Options = { + name: string; template: 'default' | 'skeleton'; typescript: boolean; prettier: boolean;