diff --git a/.changeset/wild-rats-sell.md b/.changeset/wild-rats-sell.md
new file mode 100644
index 000000000000..8fca26bbf87d
--- /dev/null
+++ b/.changeset/wild-rats-sell.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/package': patch
+---
+
+fix: overwrite nodenext option when transpiling
diff --git a/packages/kit/package.json b/packages/kit/package.json
index 1fda9be29140..0f24837e370b 100644
--- a/packages/kit/package.json
+++ b/packages/kit/package.json
@@ -34,7 +34,7 @@
"dts-buddy": "^0.2.4",
"rollup": "^3.29.4",
"svelte": "^4.2.7",
- "svelte-preprocess": "^5.0.4",
+ "svelte-preprocess": "^5.1.1",
"typescript": "^4.9.4",
"vite": "^4.4.9",
"vitest": "^0.34.5"
diff --git a/packages/package/package.json b/packages/package/package.json
index d88c3a25e539..5667e98d61c7 100644
--- a/packages/package/package.json
+++ b/packages/package/package.json
@@ -21,7 +21,7 @@
"@types/node": "^16.18.6",
"@types/semver": "^7.5.0",
"svelte": "^4.2.7",
- "svelte-preprocess": "^5.0.4",
+ "svelte-preprocess": "^5.1.1",
"typescript": "^4.9.4",
"uvu": "^0.5.6"
},
diff --git a/packages/package/src/typescript.js b/packages/package/src/typescript.js
index 7c02e63ffc5a..5d1e79878f57 100644
--- a/packages/package/src/typescript.js
+++ b/packages/package/src/typescript.js
@@ -67,8 +67,15 @@ export async function emit_dts(input, output, cwd, alias, files) {
*/
export async function transpile_ts(filename, source) {
const ts = await try_load_ts();
+ const options = load_tsconfig(filename, ts);
+ // transpileModule treats NodeNext as CommonJS because it doesn't read the package.json. Therefore we need to override it.
+ // Also see https://github.com/microsoft/TypeScript/issues/53022 (the filename workaround doesn't work).
return ts.transpileModule(source, {
- compilerOptions: load_tsconfig(filename, ts),
+ compilerOptions: {
+ ...options,
+ module: ts.ModuleKind.ESNext,
+ moduleResolution: ts.ModuleResolutionKind.NodeJs // switch this to bundler in the next major, although it probably doesn't make a difference
+ },
fileName: filename
}).outputText;
}
diff --git a/packages/package/test/fixtures/typescript/expected/Plain.svelte b/packages/package/test/fixtures/typescript-esnext/expected/Plain.svelte
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/Plain.svelte
rename to packages/package/test/fixtures/typescript-esnext/expected/Plain.svelte
diff --git a/packages/package/test/fixtures/typescript/expected/Plain.svelte.d.ts b/packages/package/test/fixtures/typescript-esnext/expected/Plain.svelte.d.ts
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/Plain.svelte.d.ts
rename to packages/package/test/fixtures/typescript-esnext/expected/Plain.svelte.d.ts
diff --git a/packages/package/test/fixtures/typescript/expected/Test.svelte b/packages/package/test/fixtures/typescript-esnext/expected/Test.svelte
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/Test.svelte
rename to packages/package/test/fixtures/typescript-esnext/expected/Test.svelte
diff --git a/packages/package/test/fixtures/typescript/expected/Test.svelte.d.ts b/packages/package/test/fixtures/typescript-esnext/expected/Test.svelte.d.ts
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/Test.svelte.d.ts
rename to packages/package/test/fixtures/typescript-esnext/expected/Test.svelte.d.ts
diff --git a/packages/package/test/fixtures/typescript/expected/Test2.svelte b/packages/package/test/fixtures/typescript-esnext/expected/Test2.svelte
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/Test2.svelte
rename to packages/package/test/fixtures/typescript-esnext/expected/Test2.svelte
diff --git a/packages/package/test/fixtures/typescript/expected/Test2.svelte.d.ts b/packages/package/test/fixtures/typescript-esnext/expected/Test2.svelte.d.ts
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/Test2.svelte.d.ts
rename to packages/package/test/fixtures/typescript-esnext/expected/Test2.svelte.d.ts
diff --git a/packages/package/test/fixtures/typescript/expected/foo.d.ts b/packages/package/test/fixtures/typescript-esnext/expected/foo.d.ts
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/foo.d.ts
rename to packages/package/test/fixtures/typescript-esnext/expected/foo.d.ts
diff --git a/packages/package/test/fixtures/typescript/expected/index.d.ts b/packages/package/test/fixtures/typescript-esnext/expected/index.d.ts
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/index.d.ts
rename to packages/package/test/fixtures/typescript-esnext/expected/index.d.ts
diff --git a/packages/package/test/fixtures/typescript/expected/index.js b/packages/package/test/fixtures/typescript-esnext/expected/index.js
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/index.js
rename to packages/package/test/fixtures/typescript-esnext/expected/index.js
diff --git a/packages/package/test/fixtures/typescript/expected/utils.d.ts b/packages/package/test/fixtures/typescript-esnext/expected/utils.d.ts
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/utils.d.ts
rename to packages/package/test/fixtures/typescript-esnext/expected/utils.d.ts
diff --git a/packages/package/test/fixtures/typescript/expected/utils.js b/packages/package/test/fixtures/typescript-esnext/expected/utils.js
similarity index 100%
rename from packages/package/test/fixtures/typescript/expected/utils.js
rename to packages/package/test/fixtures/typescript-esnext/expected/utils.js
diff --git a/packages/package/test/fixtures/typescript/package.json b/packages/package/test/fixtures/typescript-esnext/package.json
similarity index 81%
rename from packages/package/test/fixtures/typescript/package.json
rename to packages/package/test/fixtures/typescript-esnext/package.json
index 3d104f4558c7..6dac2ac90c18 100644
--- a/packages/package/test/fixtures/typescript/package.json
+++ b/packages/package/test/fixtures/typescript-esnext/package.json
@@ -2,7 +2,7 @@
"name": "typescript",
"private": true,
"version": "1.0.0",
- "description": "standard typescript package",
+ "description": "typescript package using esnext",
"type": "module",
"peerDependencies": {
"svelte": "^4.0.0"
diff --git a/packages/package/test/fixtures/typescript/src/lib/Plain.svelte b/packages/package/test/fixtures/typescript-esnext/src/lib/Plain.svelte
similarity index 100%
rename from packages/package/test/fixtures/typescript/src/lib/Plain.svelte
rename to packages/package/test/fixtures/typescript-esnext/src/lib/Plain.svelte
diff --git a/packages/package/test/fixtures/typescript/src/lib/Test.svelte b/packages/package/test/fixtures/typescript-esnext/src/lib/Test.svelte
similarity index 100%
rename from packages/package/test/fixtures/typescript/src/lib/Test.svelte
rename to packages/package/test/fixtures/typescript-esnext/src/lib/Test.svelte
diff --git a/packages/package/test/fixtures/typescript/src/lib/Test2.svelte b/packages/package/test/fixtures/typescript-esnext/src/lib/Test2.svelte
similarity index 100%
rename from packages/package/test/fixtures/typescript/src/lib/Test2.svelte
rename to packages/package/test/fixtures/typescript-esnext/src/lib/Test2.svelte
diff --git a/packages/package/test/fixtures/typescript/src/lib/foo.d.ts b/packages/package/test/fixtures/typescript-esnext/src/lib/foo.d.ts
similarity index 100%
rename from packages/package/test/fixtures/typescript/src/lib/foo.d.ts
rename to packages/package/test/fixtures/typescript-esnext/src/lib/foo.d.ts
diff --git a/packages/package/test/fixtures/typescript/src/lib/index.ts b/packages/package/test/fixtures/typescript-esnext/src/lib/index.ts
similarity index 100%
rename from packages/package/test/fixtures/typescript/src/lib/index.ts
rename to packages/package/test/fixtures/typescript-esnext/src/lib/index.ts
diff --git a/packages/package/test/fixtures/typescript/src/lib/utils.ts b/packages/package/test/fixtures/typescript-esnext/src/lib/utils.ts
similarity index 100%
rename from packages/package/test/fixtures/typescript/src/lib/utils.ts
rename to packages/package/test/fixtures/typescript-esnext/src/lib/utils.ts
diff --git a/packages/package/test/fixtures/typescript/svelte.config.js b/packages/package/test/fixtures/typescript-esnext/svelte.config.js
similarity index 100%
rename from packages/package/test/fixtures/typescript/svelte.config.js
rename to packages/package/test/fixtures/typescript-esnext/svelte.config.js
diff --git a/packages/package/test/fixtures/typescript/tsconfig.json b/packages/package/test/fixtures/typescript-esnext/tsconfig.json
similarity index 100%
rename from packages/package/test/fixtures/typescript/tsconfig.json
rename to packages/package/test/fixtures/typescript-esnext/tsconfig.json
diff --git a/packages/package/test/fixtures/typescript-nodenext/expected/Test.svelte b/packages/package/test/fixtures/typescript-nodenext/expected/Test.svelte
new file mode 100644
index 000000000000..661b1b8276b0
--- /dev/null
+++ b/packages/package/test/fixtures/typescript-nodenext/expected/Test.svelte
@@ -0,0 +1,8 @@
+
+
+
diff --git a/packages/package/test/fixtures/typescript-nodenext/expected/Test.svelte.d.ts b/packages/package/test/fixtures/typescript-nodenext/expected/Test.svelte.d.ts
new file mode 100644
index 000000000000..c390c41778f5
--- /dev/null
+++ b/packages/package/test/fixtures/typescript-nodenext/expected/Test.svelte.d.ts
@@ -0,0 +1,23 @@
+import { SvelteComponent } from 'svelte';
+declare const __propDef: {
+ props: {
+ astring?: string;
+ };
+ events: {
+ event: CustomEvent;
+ } & {
+ [evt: string]: CustomEvent;
+ };
+ slots: {
+ default: {
+ astring: string;
+ };
+ };
+};
+export type TestProps = typeof __propDef.props;
+export type TestEvents = typeof __propDef.events;
+export type TestSlots = typeof __propDef.slots;
+export default class Test extends SvelteComponent {
+ get astring(): string;
+}
+export {};
diff --git a/packages/package/test/fixtures/typescript-nodenext/expected/index.d.ts b/packages/package/test/fixtures/typescript-nodenext/expected/index.d.ts
new file mode 100644
index 000000000000..4c44188c3648
--- /dev/null
+++ b/packages/package/test/fixtures/typescript-nodenext/expected/index.d.ts
@@ -0,0 +1 @@
+export { default as Test } from './Test.svelte';
diff --git a/packages/package/test/fixtures/typescript-nodenext/expected/index.js b/packages/package/test/fixtures/typescript-nodenext/expected/index.js
new file mode 100644
index 000000000000..4c44188c3648
--- /dev/null
+++ b/packages/package/test/fixtures/typescript-nodenext/expected/index.js
@@ -0,0 +1 @@
+export { default as Test } from './Test.svelte';
diff --git a/packages/package/test/fixtures/typescript-nodenext/package.json b/packages/package/test/fixtures/typescript-nodenext/package.json
new file mode 100644
index 000000000000..d55abe5867ee
--- /dev/null
+++ b/packages/package/test/fixtures/typescript-nodenext/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "typescript-nodenext",
+ "private": true,
+ "version": "1.0.0",
+ "description": "typescript package using nodenext",
+ "type": "module",
+ "peerDependencies": {
+ "svelte": "^4.0.0"
+ },
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "svelte": "./dist/index.js"
+ }
+ }
+}
diff --git a/packages/package/test/fixtures/typescript-nodenext/src/lib/Test.svelte b/packages/package/test/fixtures/typescript-nodenext/src/lib/Test.svelte
new file mode 100644
index 000000000000..9ad736f2323d
--- /dev/null
+++ b/packages/package/test/fixtures/typescript-nodenext/src/lib/Test.svelte
@@ -0,0 +1,9 @@
+
+
+
diff --git a/packages/package/test/fixtures/typescript-nodenext/src/lib/index.ts b/packages/package/test/fixtures/typescript-nodenext/src/lib/index.ts
new file mode 100644
index 000000000000..4c44188c3648
--- /dev/null
+++ b/packages/package/test/fixtures/typescript-nodenext/src/lib/index.ts
@@ -0,0 +1 @@
+export { default as Test } from './Test.svelte';
diff --git a/packages/package/test/fixtures/typescript-nodenext/svelte.config.js b/packages/package/test/fixtures/typescript-nodenext/svelte.config.js
new file mode 100644
index 000000000000..6998f839a272
--- /dev/null
+++ b/packages/package/test/fixtures/typescript-nodenext/svelte.config.js
@@ -0,0 +1,5 @@
+import preprocess from 'svelte-preprocess';
+
+export default {
+ preprocess: preprocess({})
+};
diff --git a/packages/package/test/fixtures/typescript-nodenext/tsconfig.json b/packages/package/test/fixtures/typescript-nodenext/tsconfig.json
new file mode 100644
index 000000000000..b2f060f0d1e8
--- /dev/null
+++ b/packages/package/test/fixtures/typescript-nodenext/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext"
+ }
+}
diff --git a/packages/package/test/index.js b/packages/package/test/index.js
index 3128aa73962c..ec323577817b 100644
--- a/packages/package/test/index.js
+++ b/packages/package/test/index.js
@@ -117,14 +117,18 @@ for (const dir of fs.readdirSync(join(__dirname, 'errors'))) {
});
}
-test('create standard package with javascript', async () => {
+test('create package with javascript', async () => {
// should also preserve filename casing
// should also correctly handle nested folders
await test_make_package('javascript');
});
-test('create standard package with typescript', async () => {
- await test_make_package('typescript');
+test('create package with typescript using esnext', async () => {
+ await test_make_package('typescript-esnext');
+});
+
+test('create package with typescript using nodenext', async () => {
+ await test_make_package('typescript-nodenext');
});
test('create package and assets are not tampered', async () => {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2e9ad476aa30..2cc5c66f0a57 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -460,8 +460,8 @@ importers:
specifier: ^4.2.7
version: 4.2.7
svelte-preprocess:
- specifier: ^5.0.4
- version: 5.0.4(postcss@8.4.31)(svelte@4.2.7)(typescript@4.9.4)
+ specifier: ^5.1.1
+ version: 5.1.1(postcss@8.4.31)(svelte@4.2.7)(typescript@4.9.4)
typescript:
specifier: ^4.9.4
version: 4.9.4
@@ -996,8 +996,8 @@ importers:
specifier: ^4.2.7
version: 4.2.7
svelte-preprocess:
- specifier: ^5.0.4
- version: 5.0.4(postcss@8.4.31)(svelte@4.2.7)(typescript@4.9.4)
+ specifier: ^5.1.1
+ version: 5.1.1(postcss@8.4.31)(svelte@4.2.7)(typescript@4.9.4)
typescript:
specifier: ^4.9.4
version: 4.9.4
@@ -5801,7 +5801,7 @@ packages:
svelte: 4.2.7
dev: false
- /svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.7)(typescript@4.9.4):
+ /svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.7)(typescript@5.0.4):
resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==}
engines: {node: '>= 14.10.0'}
requiresBuild: true
@@ -5846,11 +5846,11 @@ packages:
sorcery: 0.11.0
strip-indent: 3.0.0
svelte: 4.2.7
- typescript: 4.9.4
+ typescript: 5.0.4
dev: true
- /svelte-preprocess@5.0.4(postcss@8.4.31)(svelte@4.2.7)(typescript@5.0.4):
- resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==}
+ /svelte-preprocess@5.1.1(postcss@8.4.31)(svelte@4.2.7)(typescript@4.9.4):
+ resolution: {integrity: sha512-p/Dp4hmrBW5mrCCq29lEMFpIJT2FZsRlouxEc5qpbOmXRbaFs7clLs8oKPwD3xCFyZfv1bIhvOzpQkhMEVQdMw==}
engines: {node: '>= 14.10.0'}
requiresBuild: true
peerDependencies:
@@ -5863,7 +5863,7 @@ packages:
sass: ^1.26.8
stylus: ^0.55.0
sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
- svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0
+ svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0'
peerDependenciesMeta:
'@babel/core':
@@ -5894,7 +5894,7 @@ packages:
sorcery: 0.11.0
strip-indent: 3.0.0
svelte: 4.2.7
- typescript: 5.0.4
+ typescript: 4.9.4
dev: true
/svelte2tsx@0.6.19(svelte@4.2.7)(typescript@4.9.4):