Skip to content

Commit b915dfe

Browse files
fix: tsconfig includes being a level higher than they should be (#8880)
closes #8872 closes #8898 --------- Co-authored-by: Simon H <[email protected]> Co-authored-by: Simon Holthausen <[email protected]>
1 parent 1beb19c commit b915dfe

File tree

3 files changed

+52
-10
lines changed

3 files changed

+52
-10
lines changed

.changeset/happy-boats-shave.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
fix: deduplicate paths in tsconfig

packages/kit/src/core/sync/write_tsconfig.js

+20-10
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,29 @@ export function get_tsconfig(kit, include_base_url) {
8585
/** @param {string} file */
8686
const config_relative = (file) => posixify(path.relative(kit.outDir, file));
8787

88-
const include = ['ambient.d.ts', './types/**/$types.d.ts', config_relative('vite.config.ts')];
89-
for (const dir of [kit.files.routes, kit.files.lib]) {
90-
const relative = project_relative(path.dirname(dir));
91-
include.push(config_relative(`${relative}/**/*.js`));
92-
include.push(config_relative(`${relative}/**/*.ts`));
93-
include.push(config_relative(`${relative}/**/*.svelte`));
88+
const include = new Set([
89+
'ambient.d.ts',
90+
'./types/**/$types.d.ts',
91+
config_relative('vite.config.ts')
92+
]);
93+
// TODO(v2): find a better way to include all src files. We can't just use routes/lib only because
94+
// people might have other folders/files in src that they want included.
95+
const src_includes = [kit.files.routes, kit.files.lib, path.resolve('src')].filter((dir) => {
96+
const relative = path.relative(path.resolve('src'), dir);
97+
return !relative || relative.startsWith('..');
98+
});
99+
for (const dir of src_includes) {
100+
include.add(config_relative(`${dir}/**/*.js`));
101+
include.add(config_relative(`${dir}/**/*.ts`));
102+
include.add(config_relative(`${dir}/**/*.svelte`));
94103
}
104+
95105
// Test folder is a special case - we advocate putting tests in a top-level test folder
96106
// and it's not configurable (should we make it?)
97107
const test_folder = project_relative('tests');
98-
include.push(config_relative(`${test_folder}/**/*.js`));
99-
include.push(config_relative(`${test_folder}/**/*.ts`));
100-
include.push(config_relative(`${test_folder}/**/*.svelte`));
108+
include.add(config_relative(`${test_folder}/**/*.js`));
109+
include.add(config_relative(`${test_folder}/**/*.ts`));
110+
include.add(config_relative(`${test_folder}/**/*.svelte`));
101111

102112
const exclude = [config_relative('node_modules/**'), './[!ambient.d.ts]**'];
103113
if (path.extname(kit.files.serviceWorker)) {
@@ -135,7 +145,7 @@ export function get_tsconfig(kit, include_base_url) {
135145
// TODO(v2): use the new flag verbatimModuleSyntax instead (requires support by Vite/Esbuild)
136146
ignoreDeprecations: ts && Number(ts.version.split('.')[0]) >= 5 ? '5.0' : undefined
137147
},
138-
include,
148+
include: [...include],
139149
exclude
140150
};
141151

packages/kit/src/core/sync/write_tsconfig.spec.js

+27
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,31 @@ test('Allows generated tsconfig to be replaced', () => {
8686
assert.equal(config.extends, 'some/other/tsconfig.json');
8787
});
8888

89+
test('Creates tsconfig include from kit.files', () => {
90+
const { kit } = validate_config({
91+
kit: {
92+
files: {
93+
lib: 'app'
94+
}
95+
}
96+
});
97+
98+
const { include } = get_tsconfig(kit, false);
99+
100+
assert.equal(include, [
101+
'ambient.d.ts',
102+
'./types/**/$types.d.ts',
103+
'../vite.config.ts',
104+
'../app/**/*.js',
105+
'../app/**/*.ts',
106+
'../app/**/*.svelte',
107+
'../src/**/*.js',
108+
'../src/**/*.ts',
109+
'../src/**/*.svelte',
110+
'../tests/**/*.js',
111+
'../tests/**/*.ts',
112+
'../tests/**/*.svelte'
113+
]);
114+
});
115+
89116
test.run();

0 commit comments

Comments
 (0)