From f284dc97d70e1dd0ac5d5965923f87f8c568dadd Mon Sep 17 00:00:00 2001 From: Gautier Ben Aim Date: Tue, 26 Nov 2024 11:40:45 +0100 Subject: [PATCH 1/8] feat(package): added --preserve-output flag --- packages/package/src/cli.js | 2 ++ packages/package/src/index.js | 7 ++++++- packages/package/src/types.d.ts | 1 + .../preserve-output/expected/assets/theme.css | 1 + .../fixtures/preserve-output/expected/index.d.ts | 1 + .../fixtures/preserve-output/expected/index.js | 1 + .../test/fixtures/preserve-output/package.json | 16 ++++++++++++++++ .../fixtures/preserve-output/src/lib/index.ts | 1 + .../test/fixtures/preserve-output/tsconfig.json | 5 +++++ packages/package/test/index.js | 16 +++++++++++++++- 10 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 packages/package/test/fixtures/preserve-output/expected/assets/theme.css create mode 100644 packages/package/test/fixtures/preserve-output/expected/index.d.ts create mode 100644 packages/package/test/fixtures/preserve-output/expected/index.js create mode 100644 packages/package/test/fixtures/preserve-output/package.json create mode 100644 packages/package/test/fixtures/preserve-output/src/lib/index.ts create mode 100644 packages/package/test/fixtures/preserve-output/tsconfig.json diff --git a/packages/package/src/cli.js b/packages/package/src/cli.js index 6deffa3c20a6..ca28b1ee1464 100644 --- a/packages/package/src/cli.js +++ b/packages/package/src/cli.js @@ -23,6 +23,7 @@ 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( @@ -47,6 +48,7 @@ prog 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 diff --git a/packages/package/src/index.js b/packages/package/src/index.js index 05d3d3d7116b..d46ec960a9b5 100644 --- a/packages/package/src/index.js +++ b/packages/package/src/index.js @@ -41,7 +41,10 @@ async function do_build(options, analyse_code) { await process_file(input, temp, file, options.config.preprocess, alias, tsconfig, analyse_code); } - rimraf(output); + if (!options.preserve_output) { + rimraf(output); + } + mkdirp(output); copy(temp, output); @@ -172,6 +175,7 @@ export async function watch(options) { function normalize_options(options) { const input = path.resolve(options.cwd, options.input); const output = path.resolve(options.cwd, options.output); + const preserve_output = options.preserve_output; const temp = path.resolve( options.cwd, options.config.kit?.outDir ?? '.svelte-kit', @@ -188,6 +192,7 @@ function normalize_options(options) { return { input, output, + preserve_output, temp, extensions, alias, diff --git a/packages/package/src/types.d.ts b/packages/package/src/types.d.ts index f575d4627cee..f04ae6744d52 100644 --- a/packages/package/src/types.d.ts +++ b/packages/package/src/types.d.ts @@ -4,6 +4,7 @@ export interface Options { cwd: string; input: string; output: string; + preserve_output: boolean; types: boolean; tsconfig?: string; config: { diff --git a/packages/package/test/fixtures/preserve-output/expected/assets/theme.css b/packages/package/test/fixtures/preserve-output/expected/assets/theme.css new file mode 100644 index 000000000000..4f6c32c064b0 --- /dev/null +++ b/packages/package/test/fixtures/preserve-output/expected/assets/theme.css @@ -0,0 +1 @@ +:root { color: red } \ No newline at end of file diff --git a/packages/package/test/fixtures/preserve-output/expected/index.d.ts b/packages/package/test/fixtures/preserve-output/expected/index.d.ts new file mode 100644 index 000000000000..de88fd2dcd89 --- /dev/null +++ b/packages/package/test/fixtures/preserve-output/expected/index.d.ts @@ -0,0 +1 @@ +export declare const foo = 'bar'; diff --git a/packages/package/test/fixtures/preserve-output/expected/index.js b/packages/package/test/fixtures/preserve-output/expected/index.js new file mode 100644 index 000000000000..c155820bf773 --- /dev/null +++ b/packages/package/test/fixtures/preserve-output/expected/index.js @@ -0,0 +1 @@ +export const foo = 'bar'; diff --git a/packages/package/test/fixtures/preserve-output/package.json b/packages/package/test/fixtures/preserve-output/package.json new file mode 100644 index 000000000000..1ecf036afa15 --- /dev/null +++ b/packages/package/test/fixtures/preserve-output/package.json @@ -0,0 +1,16 @@ +{ + "name": "preserve-output", + "private": true, + "type": "module", + "description": "with additional things running before svelte-package", + "peerDependencies": { + "svelte": "^4.0.0" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "svelte": "./dist/index.js" + }, + "./theme.css": "./dist/assets/theme.css" + } +} diff --git a/packages/package/test/fixtures/preserve-output/src/lib/index.ts b/packages/package/test/fixtures/preserve-output/src/lib/index.ts new file mode 100644 index 000000000000..c155820bf773 --- /dev/null +++ b/packages/package/test/fixtures/preserve-output/src/lib/index.ts @@ -0,0 +1 @@ +export const foo = 'bar'; diff --git a/packages/package/test/fixtures/preserve-output/tsconfig.json b/packages/package/test/fixtures/preserve-output/tsconfig.json new file mode 100644 index 000000000000..c24ac80d1521 --- /dev/null +++ b/packages/package/test/fixtures/preserve-output/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "target": "ESNext" + } +} diff --git a/packages/package/test/index.js b/packages/package/test/index.js index 45903ecb0b23..89b7c1c8a0f0 100644 --- a/packages/package/test/index.js +++ b/packages/package/test/index.js @@ -32,6 +32,7 @@ async function test_make_package(path, options) { cwd, input, output, + preserve_output: false, types: true, config, ...options @@ -90,7 +91,7 @@ for (const dir of fs.readdirSync(join(__dirname, 'errors'))) { const input = resolve(cwd, config.kit?.files?.lib ?? 'src/lib'); try { - await build({ cwd, input, output, types: true, config }); + await build({ cwd, input, output, types: true, config, preserve_output: false }); assert.unreachable('Must not pass build'); } catch (/** @type {any} */ error) { assert.instance(error, Error); @@ -167,6 +168,7 @@ if (!process.env.CI) { cwd, input: 'src/lib', output: 'package', + preserve_output: false, types: true, config }); @@ -256,6 +258,7 @@ test('validates package (1)', () => { cwd: '', input: '', output: '', + preserve_output: false, types: true }); analyse_code('src/lib/index.js', 'export const a = 1;import.meta.env;'); @@ -275,6 +278,7 @@ test('validates package (2)', () => { cwd: '', input: '', output: '', + preserve_output: false, types: true }); analyse_code('src/lib/C.svelte', ''); @@ -294,6 +298,7 @@ test('validates package (all ok 1)', () => { cwd: '', input: '', output: '', + preserve_output: false, types: true }); analyse_code('src/lib/C.svelte', ''); @@ -311,6 +316,7 @@ test('validates package (all ok 2)', () => { cwd: '', input: '', output: '', + preserve_output: false, types: true }); analyse_code('src/lib/C.svelte', ''); @@ -323,4 +329,12 @@ test('validates package (all ok 2)', () => { assert.equal(warnings.length, 0); }); +test('create package with preserved output', async () => { + const output = join(__dirname, 'fixtures', 'preserve-output', 'dist'); + rimraf(output); + fs.mkdirSync(join(output, 'assets'), { recursive: true }); + fs.writeFileSync(join(output, 'assets', 'theme.css'), ':root { color: red }'); + await test_make_package('preserve-output', { preserve_output: true }); +}); + test.run(); From d129157909bb8d237db21a323014007fb3192964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gautier=20Ben=20A=C3=AFm?= <48261497+GauBen@users.noreply.github.com> Date: Tue, 26 Nov 2024 11:44:15 +0100 Subject: [PATCH 2/8] Create mean-ladybugs-sparkle.md --- .changeset/mean-ladybugs-sparkle.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/mean-ladybugs-sparkle.md diff --git a/.changeset/mean-ladybugs-sparkle.md b/.changeset/mean-ladybugs-sparkle.md new file mode 100644 index 000000000000..93dab07d3084 --- /dev/null +++ b/.changeset/mean-ladybugs-sparkle.md @@ -0,0 +1,5 @@ +--- +"@sveltejs/package": patch +--- + +Added `--preserve-output` flag to prevent deletion of the output directory before packaging From 3b4c0f164e5037eb8c4aee99d4909c61b9aaad63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gautier=20Ben=20A=C3=AFm?= <48261497+GauBen@users.noreply.github.com> Date: Tue, 26 Nov 2024 11:56:21 +0100 Subject: [PATCH 3/8] Update 70-packaging.md --- documentation/docs/30-advanced/70-packaging.md | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/docs/30-advanced/70-packaging.md b/documentation/docs/30-advanced/70-packaging.md index e0c17a311b5a..e9b7797709b0 100644 --- a/documentation/docs/30-advanced/70-packaging.md +++ b/documentation/docs/30-advanced/70-packaging.md @@ -225,6 +225,7 @@ You should think carefully about whether or not the changes you make to your pac - `-w`/`--watch` — watch files in `src/lib` for changes and rebuild the package - `-i`/`--input` — the input directory which contains all the files of the package. Defaults to `src/lib` - `-o`/`--output` — the output directory where the processed files are written to. Your `package.json`'s `exports` should point to files inside there, and the `files` array should include that folder. Defaults to `dist` +- `-p`/`--preserve-output` — prevent deletion of the output directory before packaging. Defaults to `false`, which means that the output directory will be emptied first - `-t`/`--types` — whether or not to create type definitions (`d.ts` files). We strongly recommend doing this as it fosters ecosystem library quality. Defaults to `true` - `--tsconfig` - the path to a tsconfig or jsconfig. When not provided, searches for the next upper tsconfig/jsconfig in the workspace path. From 23af430117a77e2493ad47c7828baba2f8a8c48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gautier=20Ben=20A=C3=AFm?= <48261497+GauBen@users.noreply.github.com> Date: Tue, 26 Nov 2024 12:06:12 +0100 Subject: [PATCH 4/8] Update .changeset/mean-ladybugs-sparkle.md --- .changeset/mean-ladybugs-sparkle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/mean-ladybugs-sparkle.md b/.changeset/mean-ladybugs-sparkle.md index 93dab07d3084..c87769cc5058 100644 --- a/.changeset/mean-ladybugs-sparkle.md +++ b/.changeset/mean-ladybugs-sparkle.md @@ -1,5 +1,5 @@ --- -"@sveltejs/package": patch +"@sveltejs/package": minor --- Added `--preserve-output` flag to prevent deletion of the output directory before packaging From 9b1afb7691dfed1b1705cfc94bee5924b951d347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gautier=20Ben=20A=C3=AFm?= <48261497+GauBen@users.noreply.github.com> Date: Sat, 8 Feb 2025 09:51:00 +0100 Subject: [PATCH 5/8] Update .changeset/mean-ladybugs-sparkle.md --- .changeset/mean-ladybugs-sparkle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/mean-ladybugs-sparkle.md b/.changeset/mean-ladybugs-sparkle.md index c87769cc5058..0b625a9390e3 100644 --- a/.changeset/mean-ladybugs-sparkle.md +++ b/.changeset/mean-ladybugs-sparkle.md @@ -2,4 +2,4 @@ "@sveltejs/package": minor --- -Added `--preserve-output` flag to prevent deletion of the output directory before packaging +Add `--preserve-output` flag to prevent deletion of the output directory before packaging From bcd0b25f25b052dedc0bda9da56f6097e132ba82 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 20 Aug 2025 09:31:57 -0400 Subject: [PATCH 6/8] Update .changeset/mean-ladybugs-sparkle.md --- .changeset/mean-ladybugs-sparkle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/mean-ladybugs-sparkle.md b/.changeset/mean-ladybugs-sparkle.md index 0b625a9390e3..8c2c81b70972 100644 --- a/.changeset/mean-ladybugs-sparkle.md +++ b/.changeset/mean-ladybugs-sparkle.md @@ -2,4 +2,4 @@ "@sveltejs/package": minor --- -Add `--preserve-output` flag to prevent deletion of the output directory before packaging +feat: add `--preserve-output` flag to prevent deletion of the output directory before packaging From 5c454c35e717ec2764cb33d57bfb1c16c7fc51f3 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 20 Aug 2025 12:18:55 -0400 Subject: [PATCH 7/8] oops --- packages/package/test/index.spec.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/package/test/index.spec.js b/packages/package/test/index.spec.js index 5db20b2d4bb4..95ef73b676fc 100644 --- a/packages/package/test/index.spec.js +++ b/packages/package/test/index.spec.js @@ -343,7 +343,6 @@ test('validates package (all ok 2)', () => { expect(warnings.length).toEqual(0); }); -<<<<<<< HEAD:packages/package/test/index.js test('create package with preserved output', async () => { const output = join(__dirname, 'fixtures', 'preserve-output', 'dist'); @@ -354,5 +353,3 @@ test('create package with preserved output', async () => { }); test.run(); -======= ->>>>>>> main:packages/package/test/index.spec.js From 6976513b4177d0ba542f776ebdad20065a510a07 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 20 Aug 2025 12:29:35 -0400 Subject: [PATCH 8/8] goddammit --- packages/package/test/index.spec.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/package/test/index.spec.js b/packages/package/test/index.spec.js index 95ef73b676fc..0b1cc9b2dccb 100644 --- a/packages/package/test/index.spec.js +++ b/packages/package/test/index.spec.js @@ -351,5 +351,3 @@ test('create package with preserved output', async () => { fs.writeFileSync(join(output, 'assets', 'theme.css'), ':root { color: red }'); await test_make_package('preserve-output', { preserve_output: true }); }); - -test.run();