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):