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