From e82978dbaff8929a1a4dd91a6a9b76f93bc4da45 Mon Sep 17 00:00:00 2001 From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com> Date: Sun, 2 Aug 2026 18:34:56 -0400 Subject: [PATCH 1/3] remove sade from svelte-package cli --- .changeset/calm-otters-package.md | 5 ++ packages/package/package.json | 1 - packages/package/src/cli.js | 122 +++++++++++++++++++----------- 3 files changed, 83 insertions(+), 45 deletions(-) create mode 100644 .changeset/calm-otters-package.md diff --git a/.changeset/calm-otters-package.md b/.changeset/calm-otters-package.md new file mode 100644 index 000000000000..36d842d4cca8 --- /dev/null +++ b/.changeset/calm-otters-package.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/package': patch +--- + +chore: remove dependency on sade diff --git a/packages/package/package.json b/packages/package/package.json index a3844c24809a..e4c1ed8bcaf0 100644 --- a/packages/package/package.json +++ b/packages/package/package.json @@ -21,7 +21,6 @@ "type": "module", "dependencies": { "chokidar": "^5.0.0", - "sade": "^1.8.1", "semver": "^7.8.5", "svelte2tsx": "~0.7.56" }, diff --git a/packages/package/src/cli.js b/packages/package/src/cli.js index 9cca67d4005a..1cef2b439d15 100644 --- a/packages/package/src/cli.js +++ b/packages/package/src/cli.js @@ -1,7 +1,6 @@ import fs from 'node:fs'; import process from 'node:process'; -import { styleText } from 'node:util'; -import sade from 'sade'; +import { parseArgs, styleText } from 'node:util'; import { load_config } from './config.js'; /** @param {Error} error */ @@ -17,47 +16,82 @@ function handle_error(error) { } const pkg = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf-8')); -const prog = sade('svelte-package', true).version(pkg.version); - -prog - .describe('Create a package') - .option('-i, --input', 'Input directory') - .option('-o, --output', 'Output directory', 'dist') - .option('-p, --preserve-output', 'Do not delete the output directory before packaging', false) - .option('-t, --types', 'Emit type declarations', true) - .option('-w, --watch', 'Rerun when files change', false) - .option( - '--tsconfig', - 'A path to a tsconfig or jsconfig file. When not provided, searches for the next upper tsconfig/jsconfig in the workspace path.' - ) - .action(async (args) => { - try { - const config = await load_config(); - - // @ts-expect-error - if (config.package) { - throw new Error( - 'config.package is no longer supported. See https://github.com/sveltejs/kit/pull/8922 for more information and how to migrate.' - ); - } - - const packaging = await import('./index.js'); - - /** @type {import('./types.js').Options} */ - const options = { - cwd: process.cwd(), - input: args.input ?? config.kit?.files?.lib ?? 'src/lib', - output: args.output, - preserve_output: args['preserve-output'], - tsconfig: args.tsconfig, - types: args.types, - config - }; - - await (args.watch ? packaging.watch(options) : packaging.build(options)); - } catch (error) { - handle_error(/** @type {Error} */ (error)); - } + +const help = ` + Usage: svelte-package [options] + + Options: + --input, -i Input directory + --output, -o Output directory (default: dist) + --preserve-output, -p Do not delete the output directory before packaging + --types, -t Emit type declarations (default: true) + --watch, -w Rerun when files change + --tsconfig A path to a tsconfig or jsconfig file. When not provided, searches + for the next upper tsconfig/jsconfig in the workspace path. + --version, -v Show version number + --help, -h Show this help message +`; + +let parsed; +try { + parsed = parseArgs({ + options: { + input: { type: 'string', short: 'i' }, + output: { type: 'string', short: 'o', default: 'dist' }, + 'preserve-output': { type: 'boolean', short: 'p', default: false }, + types: { type: 'boolean', short: 't', default: true }, + watch: { type: 'boolean', short: 'w', default: false }, + tsconfig: { type: 'string' }, + version: { type: 'boolean', short: 'v' }, + help: { type: 'boolean', short: 'h' } + }, + allowPositionals: false, + allowNegative: true, + strict: true }); +} catch (err) { + const error = /** @type {Error} */ (err); + console.error(styleText(['bold', 'red'], `> ${error.message}`)); + console.log(help); + process.exit(1); +} + +const { values } = parsed; + +if (values.version) { + console.log(pkg.version); + process.exit(0); +} -prog.parse(process.argv, { unknown: (arg) => `Unknown option: ${arg}` }); +if (values.help) { + console.log(help); + process.exit(0); +} + +try { + const config = await load_config(); + + // @ts-expect-error + if (config.package) { + throw new Error( + 'config.package is no longer supported. See https://github.com/sveltejs/kit/pull/8922 for more information and how to migrate.' + ); + } + + const packaging = await import('./index.js'); + + /** @type {import('./types.js').Options} */ + const options = { + cwd: process.cwd(), + input: values.input ?? config.kit?.files?.lib ?? 'src/lib', + output: values.output, + preserve_output: values['preserve-output'], + tsconfig: values.tsconfig, + types: values.types, + config + }; + + await (values.watch ? packaging.watch(options) : packaging.build(options)); +} catch (error) { + handle_error(/** @type {Error} */ (error)); +} From 43098515ec16d9316fd61902d5d5196269841388 Mon Sep 17 00:00:00 2001 From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com> Date: Sun, 2 Aug 2026 19:57:30 -0400 Subject: [PATCH 2/3] update lockfile --- pnpm-lock.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef91f2258c1b..39215935af8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1415,9 +1415,6 @@ importers: chokidar: specifier: ^5.0.0 version: 5.0.0 - sade: - specifier: ^1.8.1 - version: 1.8.1 semver: specifier: ^7.8.5 version: 7.8.5 From d80f6118abf19cc76f9d3bacc64845e328ee6103 Mon Sep 17 00:00:00 2001 From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com> Date: Sun, 2 Aug 2026 19:57:30 -0400 Subject: [PATCH 3/3] align help text --- packages/package/src/cli.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/package/src/cli.js b/packages/package/src/cli.js index 1cef2b439d15..8f9e36344baa 100644 --- a/packages/package/src/cli.js +++ b/packages/package/src/cli.js @@ -21,7 +21,7 @@ const help = ` Usage: svelte-package [options] Options: - --input, -i Input directory + --input, -i Input directory --output, -o Output directory (default: dist) --preserve-output, -p Do not delete the output directory before packaging --types, -t Emit type declarations (default: true)