diff --git a/.changeset/many-gorillas-shout.md b/.changeset/many-gorillas-shout.md new file mode 100644 index 000000000000..50f23660ae7f --- /dev/null +++ b/.changeset/many-gorillas-shout.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/package': patch +--- + +fix: resolve aliases more robustly diff --git a/packages/package/src/utils.js b/packages/package/src/utils.js index 0c5f25736620..7262a32ba9b5 100644 --- a/packages/package/src/utils.js +++ b/packages/package/src/utils.js @@ -17,10 +17,9 @@ const is_svelte_5_plus = Number(VERSION.split('.')[0]) >= 5; export function resolve_aliases(input, file, content, aliases) { /** * @param {string} match - * @param {string} _ * @param {string} import_path */ - const replace_import_path = (match, _, import_path) => { + const replace_import_path = (match, import_path) => { for (const [alias, value] of Object.entries(aliases)) { if (!import_path.startsWith(alias)) continue; @@ -33,8 +32,26 @@ export function resolve_aliases(input, file, content, aliases) { return match; }; - content = content.replace(/from\s+('|")([^"';,]+?)\1/g, replace_import_path); - content = content.replace(/import\s*\(\s*('|")([^"';,]+?)\1\s*\)/g, replace_import_path); + // import/export ... from ... + content = content.replace( + /\b(import|export)\s+([\w*\s{},]*)\s+from\s+(['"])([^'";]+)\3/g, + (_, keyword, specifier, quote, import_path) => + replace_import_path( + `${keyword} ${specifier} from ${quote}${import_path}${quote}`, + import_path + ) + ); + + // import(...) + content = content.replace(/\bimport\s*\(\s*(['"])([^'";]+)\1\s*\)/g, (_, quote, import_path) => + replace_import_path(`import(${quote}${import_path}${quote})`, import_path) + ); + + // import '...' + content = content.replace(/\bimport\s+(['"])([^'";]+)\1/g, (_, quote, import_path) => + replace_import_path(`import ${quote}${import_path}${quote}`, import_path) + ); + return content; } diff --git a/packages/package/test/fixtures/resolve-alias/expected/not.d.ts b/packages/package/test/fixtures/resolve-alias/expected/not.d.ts new file mode 100644 index 000000000000..24bce3e70b9b --- /dev/null +++ b/packages/package/test/fixtures/resolve-alias/expected/not.d.ts @@ -0,0 +1 @@ +export declare const notImportFromLib: () => string; diff --git a/packages/package/test/fixtures/resolve-alias/expected/not.js b/packages/package/test/fixtures/resolve-alias/expected/not.js new file mode 100644 index 000000000000..ebb522bcef22 --- /dev/null +++ b/packages/package/test/fixtures/resolve-alias/expected/not.js @@ -0,0 +1 @@ +export const notImportFromLib = () => " from '$lib/Test.svelte'"; diff --git a/packages/package/test/fixtures/resolve-alias/expected/sub/bar.d.ts b/packages/package/test/fixtures/resolve-alias/expected/sub/bar.d.ts index 9f1a49e9dfd6..fac8707fc2ad 100644 --- a/packages/package/test/fixtures/resolve-alias/expected/sub/bar.d.ts +++ b/packages/package/test/fixtures/resolve-alias/expected/sub/bar.d.ts @@ -1,2 +1,3 @@ +export declare const dynamic: () => Promise; export declare const bar1: import('./foo').Foo; export declare const bar2: import('../baz').Baz; diff --git a/packages/package/test/fixtures/resolve-alias/expected/sub/bar.js b/packages/package/test/fixtures/resolve-alias/expected/sub/bar.js index 17941b746387..6c2ec176b703 100644 --- a/packages/package/test/fixtures/resolve-alias/expected/sub/bar.js +++ b/packages/package/test/fixtures/resolve-alias/expected/sub/bar.js @@ -1,4 +1,5 @@ import { baz } from '../baz'; import { foo } from './foo'; +export const dynamic = () => import('../Test.svelte'); export const bar1 = foo; export const bar2 = baz; diff --git a/packages/package/test/fixtures/resolve-alias/src/lib/not.ts b/packages/package/test/fixtures/resolve-alias/src/lib/not.ts new file mode 100644 index 000000000000..ebb522bcef22 --- /dev/null +++ b/packages/package/test/fixtures/resolve-alias/src/lib/not.ts @@ -0,0 +1 @@ +export const notImportFromLib = () => " from '$lib/Test.svelte'"; diff --git a/packages/package/test/fixtures/resolve-alias/src/lib/sub/bar.ts b/packages/package/test/fixtures/resolve-alias/src/lib/sub/bar.ts index 335e08c551d3..c1d073daa6d0 100644 --- a/packages/package/test/fixtures/resolve-alias/src/lib/sub/bar.ts +++ b/packages/package/test/fixtures/resolve-alias/src/lib/sub/bar.ts @@ -1,5 +1,6 @@ import { baz } from '$lib/baz'; import { foo } from '$lib/sub/foo'; +export const dynamic = () => import('$lib/Test.svelte'); export const bar1 = foo; export const bar2 = baz;