fix: resolve aliases before transpiling for `rewriteRelativeImportExtensions` (#14673)
authorRyan Atkinson <mail@ryanatkn.com>
Thu, 20 Nov 2025 12:15:05 +0000 (07:15 -0500)
committerGitHub <noreply@github.com>
Thu, 20 Nov 2025 12:15:05 +0000 (13:15 +0100)
This swaps the order of TypeScript transpilation and alias resolution in `@sveltejs/package` to fix #13044. TypeScript sees aliases like `$lib/` as bare imports and does not apply `rewriteRelativeImportExtensions`, and resolving aliases first seems like the correct fix. For more see https://github.com/microsoft/TypeScript/issues/61991#issuecomment-3046150782

12 files changed:
.changeset/slick-queens-laugh.md [new file with mode: 0644]
packages/package/src/index.js
packages/package/test/fixtures/typescript-alias-rewrites/expected/helper.d.ts [new file with mode: 0644]
packages/package/test/fixtures/typescript-alias-rewrites/expected/helper.js [new file with mode: 0644]
packages/package/test/fixtures/typescript-alias-rewrites/expected/index.d.ts [new file with mode: 0644]
packages/package/test/fixtures/typescript-alias-rewrites/expected/index.js [new file with mode: 0644]
packages/package/test/fixtures/typescript-alias-rewrites/package.json [new file with mode: 0644]
packages/package/test/fixtures/typescript-alias-rewrites/src/lib/helper.ts [new file with mode: 0644]
packages/package/test/fixtures/typescript-alias-rewrites/src/lib/index.ts [new file with mode: 0644]
packages/package/test/fixtures/typescript-alias-rewrites/svelte.config.js [new file with mode: 0644]
packages/package/test/fixtures/typescript-alias-rewrites/tsconfig.json [new file with mode: 0644]
packages/package/test/index.spec.js

diff --git a/.changeset/slick-queens-laugh.md b/.changeset/slick-queens-laugh.md
new file mode 100644 (file)
index 0000000..3cfe9fa
--- /dev/null
@@ -0,0 +1,5 @@
+---
+'@sveltejs/package': patch
+---
+
+fix: resolve aliases before transpiling for `rewriteRelativeImportExtensions`
index fb540e7bae5125f481e6afc6aab8f8027d3d6303..8d66e5fdb914cdea763c6260423b751e81dd00c9 100644 (file)
@@ -224,11 +224,14 @@ async function process_file(input, output, file, preprocessor, aliases, tsconfig
                        }
                }
 
+               // _before_ transpilining TS, that way TS will apply rewriteRelativeImportExtensions
+               // to these now-resolved path aliases, too
+               contents = resolve_aliases(input, file.name, contents, aliases);
+
                if (file.name.endsWith('.ts') && !file.name.endsWith('.d.ts')) {
                        contents = await transpile_ts(tsconfig, filename, contents);
                }
 
-               contents = resolve_aliases(input, file.name, contents, aliases);
                analyse_code(file.name, contents);
                write(dest, contents);
        } else {
diff --git a/packages/package/test/fixtures/typescript-alias-rewrites/expected/helper.d.ts b/packages/package/test/fixtures/typescript-alias-rewrites/expected/helper.d.ts
new file mode 100644 (file)
index 0000000..3a064fc
--- /dev/null
@@ -0,0 +1 @@
+export declare const helper: () => string;
diff --git a/packages/package/test/fixtures/typescript-alias-rewrites/expected/helper.js b/packages/package/test/fixtures/typescript-alias-rewrites/expected/helper.js
new file mode 100644 (file)
index 0000000..0d53972
--- /dev/null
@@ -0,0 +1 @@
+export const helper = () => '';
diff --git a/packages/package/test/fixtures/typescript-alias-rewrites/expected/index.d.ts b/packages/package/test/fixtures/typescript-alias-rewrites/expected/index.d.ts
new file mode 100644 (file)
index 0000000..2084a6d
--- /dev/null
@@ -0,0 +1,2 @@
+import { helper } from "./helper.ts";
+export { helper };
diff --git a/packages/package/test/fixtures/typescript-alias-rewrites/expected/index.js b/packages/package/test/fixtures/typescript-alias-rewrites/expected/index.js
new file mode 100644 (file)
index 0000000..aab5a9a
--- /dev/null
@@ -0,0 +1,2 @@
+import { helper } from "./helper.js";
+export { helper };
diff --git a/packages/package/test/fixtures/typescript-alias-rewrites/package.json b/packages/package/test/fixtures/typescript-alias-rewrites/package.json
new file mode 100644 (file)
index 0000000..00c471f
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "name": "typescript-alias-rewrites",
+       "private": true,
+       "version": "1.0.0",
+       "description": "typescript package with extension rewrites to aliased import paths",
+       "type": "module",
+       "peerDependencies": {
+               "svelte": "^5.0.0"
+       },
+       "exports": {
+               ".": {
+                       "types": "./dist/index.d.ts",
+                       "svelte": "./dist/index.js"
+               }
+       }
+}
diff --git a/packages/package/test/fixtures/typescript-alias-rewrites/src/lib/helper.ts b/packages/package/test/fixtures/typescript-alias-rewrites/src/lib/helper.ts
new file mode 100644 (file)
index 0000000..0d53972
--- /dev/null
@@ -0,0 +1 @@
+export const helper = () => '';
diff --git a/packages/package/test/fixtures/typescript-alias-rewrites/src/lib/index.ts b/packages/package/test/fixtures/typescript-alias-rewrites/src/lib/index.ts
new file mode 100644 (file)
index 0000000..94afe21
--- /dev/null
@@ -0,0 +1,2 @@
+import { helper } from '$lib/helper.ts';
+export { helper };
diff --git a/packages/package/test/fixtures/typescript-alias-rewrites/svelte.config.js b/packages/package/test/fixtures/typescript-alias-rewrites/svelte.config.js
new file mode 100644 (file)
index 0000000..6bd253b
--- /dev/null
@@ -0,0 +1,5 @@
+import preprocess from 'svelte-preprocess';
+
+export default {
+       preprocess: preprocess()
+};
diff --git a/packages/package/test/fixtures/typescript-alias-rewrites/tsconfig.json b/packages/package/test/fixtures/typescript-alias-rewrites/tsconfig.json
new file mode 100644 (file)
index 0000000..c1f291b
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "compilerOptions": {
+               "target": "ESNext",
+               "module": "ESNext",
+               "allowImportingTsExtensions": true,
+               "rewriteRelativeImportExtensions": true
+       }
+}
index 564eceb30681aa56e8da8f2e545e3694048b6205..228c40cc7026d232fab7d54d00c62de0e1585c1b 100644 (file)
@@ -135,6 +135,10 @@ test('create package with typescript using nodenext', async () => {
        await test_make_package('typescript-nodenext');
 });
 
+test('create package with typescript alias extension rewrites', async () => {
+       await test_make_package('typescript-alias-rewrites');
+});
+
 // only run this test in newer Node versions
 // TODO: remove after dropping support for Node < 22.18
 const [major, minor] = process.versions.node.split('.', 2).map((str) => +str);