diff --git a/.changeset/curly-wolves-watch.md b/.changeset/curly-wolves-watch.md new file mode 100644 index 000000000000..da4164a20287 --- /dev/null +++ b/.changeset/curly-wolves-watch.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: ignore nested outDir files outside generated diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index e83e01538806..aaad4be04eb9 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -410,8 +410,9 @@ function kit({ svelte_config }) { sourcemapIgnoreList, watch: { ignored: [ - // Ignore all siblings of config.outDir/generated - `${out_dir}/!(generated)` + // Ignore all siblings of config.outDir/generated, at any depth + `${out_dir}/!(generated)`, + `${out_dir}/!(generated)/**` ] } }, diff --git a/packages/kit/test/apps/options/unit-test/vite.spec.js b/packages/kit/test/apps/options/unit-test/vite.spec.js index 2dd2b1b93c04..811c82493cc2 100644 --- a/packages/kit/test/apps/options/unit-test/vite.spec.js +++ b/packages/kit/test/apps/options/unit-test/vite.spec.js @@ -1,11 +1,28 @@ import { test, expect } from 'vitest'; import { spawnSync } from 'node:child_process'; import path from 'node:path'; +import { createFilter, resolveConfig } from 'vite'; const timeout = 60_000; const cwd = path.resolve(import.meta.dirname, '..'); +test('ignores all outDir files except generated files', async () => { + const config = await resolveConfig( + { configFile: path.join(cwd, 'vite.custom.config.js') }, + 'serve' + ); + const is_ignored = createFilter(config.server.watch.ignored); + const out_dir = path.resolve(cwd, '.custom-out-dir').replaceAll('\\', '/'); + + expect(is_ignored(`${out_dir}/tsconfig.json`)).toBe(true); + expect(is_ignored(`${out_dir}/.svelte-check/tsconfig.json`)).toBe(true); + expect(is_ignored(`${out_dir}/types/a/$types.d.ts`)).toBe(true); + expect(is_ignored(`${out_dir}/generated`)).toBe(false); + expect(is_ignored(`${out_dir}/generated/root.js`)).toBe(false); + expect(is_ignored(`${out_dir}/generated/client/app.js`)).toBe(false); +}); + test('no overridden options warning', { timeout }, () => { const result = spawnSync( 'pnpm',