From ce1e4288e0cb4db2caf0216e6828d0f08f6ea549 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 30 Jul 2026 18:04:36 -0400 Subject: [PATCH 1/2] fix: add a default `"include": []` array to generated tsconfig.json, and warn if not populated by user config --- .changeset/green-balloons-draw.md | 5 +++++ packages/kit/src/core/sync/write_tsconfig/index.js | 13 ++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 .changeset/green-balloons-draw.md diff --git a/.changeset/green-balloons-draw.md b/.changeset/green-balloons-draw.md new file mode 100644 index 000000000000..539c8880adb1 --- /dev/null +++ b/.changeset/green-balloons-draw.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: add a default `"include": []` array to generated tsconfig.json, and warn if not populated by user config diff --git a/packages/kit/src/core/sync/write_tsconfig/index.js b/packages/kit/src/core/sync/write_tsconfig/index.js index d7d944926917..eb5a2171dfd9 100644 --- a/packages/kit/src/core/sync/write_tsconfig/index.js +++ b/packages/kit/src/core/sync/write_tsconfig/index.js @@ -47,6 +47,7 @@ export function write_tsconfig(kit, root) { ...ESSENTIAL_OPTIONS, ...RECOMMENDED_OPTIONS }, + include: [], exclude: [kit.files.serviceWorker] }, { @@ -100,13 +101,15 @@ function write_parent_tsconfig(root, dir, id, config, example, transform) { const user_config = load_user_tsconfig(dir); if (user_config && modified_since_last_check(user_config.file)) { + const relative = path.relative(process.cwd(), user_config.file); + // now that we've written the parent config, we can resolve the // user config and validate that nothing important was overwritten if (!extends_id(user_config.options, id)) { console.warn( styleText( ['bold', 'yellow'], - `${path.relative(process.cwd(), user_config.file)} should extend SvelteKit's built-in configuration:` + `${relative} should extend SvelteKit's built-in configuration:` ) ); @@ -115,8 +118,12 @@ function write_parent_tsconfig(root, dir, id, config, example, transform) { return; } - const resolved = ts.parseJsonConfigFileContent(user_config.options, ts.sys, dir).options; - const warnings = validate_resolved_config(resolved, config.compilerOptions); + const resolved = ts.parseJsonConfigFileContent(user_config.options, ts.sys, dir); + const warnings = validate_resolved_config(resolved.options, config.compilerOptions); + + if (resolved.raw.include?.length === 0) { + warnings.push(`Missing "include" array`); + } if (warnings.length > 0) { console.warn( From f38741024077e9e5342d5dda8f502978121c8018 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 30 Jul 2026 18:39:26 -0400 Subject: [PATCH 2/2] fix tsconfigs --- packages/kit/test/apps/amp/tsconfig.json | 8 ++------ packages/kit/test/apps/async/tsconfig.json | 7 ------- packages/kit/test/apps/basics/tsconfig.json | 8 +------- packages/kit/test/apps/basics/vite.config.js | 8 +++++++- packages/kit/test/apps/dev-only/tsconfig.json | 9 ++------- packages/kit/test/apps/embed/tsconfig.json | 10 ++-------- .../test/apps/hash-based-routing/tsconfig.json | 10 ++-------- packages/kit/test/apps/no-ssr/tsconfig.json | 10 ++-------- packages/kit/test/apps/options-2/tsconfig.json | 8 ++------ packages/kit/test/apps/options-3/tsconfig.json | 8 ++------ packages/kit/test/apps/options/tsconfig.json | 5 ----- .../prerendered-app-error-pages/jsconfig.json | 16 +--------------- packages/kit/test/apps/writes/tsconfig.json | 10 ++-------- .../apps/env-private-dynamic/tsconfig.json | 10 +--------- .../env-private-service-worker/tsconfig.json | 10 +--------- .../build-errors/apps/env-private/tsconfig.json | 10 +--------- .../tsconfig.json | 8 ++------ .../tsconfig.json | 9 ++------- .../tsconfig.json | 8 ++------ .../prerenderable-not-prerendered/tsconfig.json | 8 ++------ .../remote-function-without-flag/tsconfig.json | 10 +--------- .../tsconfig.json | 10 +--------- .../apps/server-only-folder/tsconfig.json | 10 +--------- .../tsconfig.json | 10 +--------- .../apps/server-only-module/tsconfig.json | 10 +--------- .../apps/server-only-shared/tsconfig.json | 10 +--------- .../build-errors/apps/syntax-error/tsconfig.json | 10 +--------- 27 files changed, 43 insertions(+), 207 deletions(-) diff --git a/packages/kit/test/apps/amp/tsconfig.json b/packages/kit/test/apps/amp/tsconfig.json index a14103c5fc1b..8e210f5f6f5d 100644 --- a/packages/kit/test/apps/amp/tsconfig.json +++ b/packages/kit/test/apps/amp/tsconfig.json @@ -1,8 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "test", "*.js"] } diff --git a/packages/kit/test/apps/async/tsconfig.json b/packages/kit/test/apps/async/tsconfig.json index a453d154033b..bf752ac1baf8 100644 --- a/packages/kit/test/apps/async/tsconfig.json +++ b/packages/kit/test/apps/async/tsconfig.json @@ -1,11 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "rewriteRelativeImportExtensions": true - }, "include": ["src", "unit-test", "test", "playwright.config.js"], "extends": "$app/tsconfig" } diff --git a/packages/kit/test/apps/basics/tsconfig.json b/packages/kit/test/apps/basics/tsconfig.json index 9c01fc02941d..9b4c932cb3c1 100644 --- a/packages/kit/test/apps/basics/tsconfig.json +++ b/packages/kit/test/apps/basics/tsconfig.json @@ -1,10 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "resolveJsonModule": true - }, "extends": "$app/tsconfig", - "include": ["src", "unit-test", "test"] + "include": ["src", "unit-test", "test", "*.js"] } diff --git a/packages/kit/test/apps/basics/vite.config.js b/packages/kit/test/apps/basics/vite.config.js index 4cc5c2465d0c..ebd707d1009d 100644 --- a/packages/kit/test/apps/basics/vite.config.js +++ b/packages/kit/test/apps/basics/vite.config.js @@ -101,7 +101,13 @@ export default defineConfig({ browser: { enabled: true, provider: playwright(), - instances: [{ browser: process.env.KIT_E2E_BROWSER || 'chromium' }], + instances: [ + { + browser: + /** @type {"chromium" | "firefox" | "webkit"} */ (process.env.KIT_E2E_BROWSER) || + 'chromium' + } + ], headless: true }, include: ['unit-test/**/*.spec.js'] diff --git a/packages/kit/test/apps/dev-only/tsconfig.json b/packages/kit/test/apps/dev-only/tsconfig.json index 947c9ce5579f..8e210f5f6f5d 100644 --- a/packages/kit/test/apps/dev-only/tsconfig.json +++ b/packages/kit/test/apps/dev-only/tsconfig.json @@ -1,9 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "resolveJsonModule": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "test", "*.js"] } diff --git a/packages/kit/test/apps/embed/tsconfig.json b/packages/kit/test/apps/embed/tsconfig.json index 5dd124a3b02a..8e210f5f6f5d 100644 --- a/packages/kit/test/apps/embed/tsconfig.json +++ b/packages/kit/test/apps/embed/tsconfig.json @@ -1,10 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "noEmit": true, - "resolveJsonModule": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "test", "*.js"] } diff --git a/packages/kit/test/apps/hash-based-routing/tsconfig.json b/packages/kit/test/apps/hash-based-routing/tsconfig.json index 5dd124a3b02a..8e210f5f6f5d 100644 --- a/packages/kit/test/apps/hash-based-routing/tsconfig.json +++ b/packages/kit/test/apps/hash-based-routing/tsconfig.json @@ -1,10 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "noEmit": true, - "resolveJsonModule": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "test", "*.js"] } diff --git a/packages/kit/test/apps/no-ssr/tsconfig.json b/packages/kit/test/apps/no-ssr/tsconfig.json index 5dd124a3b02a..8e210f5f6f5d 100644 --- a/packages/kit/test/apps/no-ssr/tsconfig.json +++ b/packages/kit/test/apps/no-ssr/tsconfig.json @@ -1,10 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "noEmit": true, - "resolveJsonModule": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "test", "*.js"] } diff --git a/packages/kit/test/apps/options-2/tsconfig.json b/packages/kit/test/apps/options-2/tsconfig.json index a14103c5fc1b..8e210f5f6f5d 100644 --- a/packages/kit/test/apps/options-2/tsconfig.json +++ b/packages/kit/test/apps/options-2/tsconfig.json @@ -1,8 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "test", "*.js"] } diff --git a/packages/kit/test/apps/options-3/tsconfig.json b/packages/kit/test/apps/options-3/tsconfig.json index a14103c5fc1b..8e210f5f6f5d 100644 --- a/packages/kit/test/apps/options-3/tsconfig.json +++ b/packages/kit/test/apps/options-3/tsconfig.json @@ -1,8 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "test", "*.js"] } diff --git a/packages/kit/test/apps/options/tsconfig.json b/packages/kit/test/apps/options/tsconfig.json index 6e016144f94c..89944218c56a 100644 --- a/packages/kit/test/apps/options/tsconfig.json +++ b/packages/kit/test/apps/options/tsconfig.json @@ -1,9 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true - }, "extends": "$app/tsconfig", "include": ["source", "test", "vite.custom.config.js", "playwright.config.js"] } diff --git a/packages/kit/test/apps/prerendered-app-error-pages/jsconfig.json b/packages/kit/test/apps/prerendered-app-error-pages/jsconfig.json index 726d608e639d..8e210f5f6f5d 100644 --- a/packages/kit/test/apps/prerendered-app-error-pages/jsconfig.json +++ b/packages/kit/test/apps/prerendered-app-error-pages/jsconfig.json @@ -1,18 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "moduleResolution": "bundler" - } - // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias - // except #lib which is handled by the package.json imports field - // - // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes - // from the referenced tsconfig.json - TypeScript does not merge them in + "include": ["src", "test", "*.js"] } diff --git a/packages/kit/test/apps/writes/tsconfig.json b/packages/kit/test/apps/writes/tsconfig.json index 5dd124a3b02a..8e210f5f6f5d 100644 --- a/packages/kit/test/apps/writes/tsconfig.json +++ b/packages/kit/test/apps/writes/tsconfig.json @@ -1,10 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "noEmit": true, - "resolveJsonModule": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "test", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/env-private-dynamic/tsconfig.json b/packages/kit/test/build-errors/apps/env-private-dynamic/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/env-private-dynamic/tsconfig.json +++ b/packages/kit/test/build-errors/apps/env-private-dynamic/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/env-private-service-worker/tsconfig.json b/packages/kit/test/build-errors/apps/env-private-service-worker/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/env-private-service-worker/tsconfig.json +++ b/packages/kit/test/build-errors/apps/env-private-service-worker/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/env-private/tsconfig.json b/packages/kit/test/build-errors/apps/env-private/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/env-private/tsconfig.json +++ b/packages/kit/test/build-errors/apps/env-private/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/tsconfig.json b/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/tsconfig.json index a14103c5fc1b..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/tsconfig.json +++ b/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/tsconfig.json @@ -1,8 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/prerender-remote-function-error/tsconfig.json b/packages/kit/test/build-errors/apps/prerender-remote-function-error/tsconfig.json index 4ab2e9e5330d..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/prerender-remote-function-error/tsconfig.json +++ b/packages/kit/test/build-errors/apps/prerender-remote-function-error/tsconfig.json @@ -1,9 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "rewriteRelativeImportExtensions": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/tsconfig.json b/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/tsconfig.json index a14103c5fc1b..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/tsconfig.json +++ b/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/tsconfig.json @@ -1,8 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/tsconfig.json b/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/tsconfig.json index a14103c5fc1b..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/tsconfig.json +++ b/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/tsconfig.json @@ -1,8 +1,4 @@ { - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true - }, - "extends": "$app/tsconfig" + "extends": "$app/tsconfig", + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/remote-function-without-flag/tsconfig.json b/packages/kit/test/build-errors/apps/remote-function-without-flag/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/remote-function-without-flag/tsconfig.json +++ b/packages/kit/test/build-errors/apps/remote-function-without-flag/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/tsconfig.json b/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/tsconfig.json +++ b/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/server-only-folder/tsconfig.json b/packages/kit/test/build-errors/apps/server-only-folder/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/server-only-folder/tsconfig.json +++ b/packages/kit/test/build-errors/apps/server-only-folder/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/tsconfig.json b/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/tsconfig.json +++ b/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/server-only-module/tsconfig.json b/packages/kit/test/build-errors/apps/server-only-module/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/server-only-module/tsconfig.json +++ b/packages/kit/test/build-errors/apps/server-only-module/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/server-only-shared/tsconfig.json b/packages/kit/test/build-errors/apps/server-only-shared/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/server-only-shared/tsconfig.json +++ b/packages/kit/test/build-errors/apps/server-only-shared/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] } diff --git a/packages/kit/test/build-errors/apps/syntax-error/tsconfig.json b/packages/kit/test/build-errors/apps/syntax-error/tsconfig.json index ff33d4b1df33..320f6a5d7ff2 100644 --- a/packages/kit/test/build-errors/apps/syntax-error/tsconfig.json +++ b/packages/kit/test/build-errors/apps/syntax-error/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "$app/tsconfig", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "sourceMap": true, - "noEmit": true - } + "include": ["src", "*.js"] }