diff --git a/src/utils.ts b/src/utils.ts index 85988cc..1c96edd 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -421,7 +421,7 @@ export function parseTsAliases(basePath: string, paths: ts.MapLike) { for (const [pathWithAsterisk, replacements] of Object.entries(paths)) { const find = new RegExp( - `^${pathWithAsterisk.replace(regexpSymbolRE, '\\$1').replace(asteriskRE, '(.+)')}$` + `^${pathWithAsterisk.replace(regexpSymbolRE, '\\$1').replace(asteriskRE, '(?!\\.\\/)([^*]+)')}$` ) let index = 1 diff --git a/tests/transform.spec.ts b/tests/transform.spec.ts index bf7df1d..5b46301 100644 --- a/tests/transform.spec.ts +++ b/tests/transform.spec.ts @@ -83,11 +83,14 @@ describe('transform tests', () => { it('test: transformCode (process aliases)', () => { const aliases: Alias[] = [ - { find: /^@\/(.+)/, replacement: resolve(__dirname, '../$1') }, - { find: /^@components\/(.+)/, replacement: resolve(__dirname, '../src/components/$1') }, + { find: /^@\/(?!\.\/)([^*]+)/, replacement: resolve(__dirname, '../$1') }, + { + find: /^@components\/(?!\.\/)([^*]+)/, + replacement: resolve(__dirname, '../src/components/$1') + }, { find: /^~\//, replacement: resolve(__dirname, '../src/') }, { find: '$src', replacement: resolve(__dirname, '../src') }, - { find: /^(.+)$/, replacement: resolve(__dirname, '../src/$1') } + { find: /^(?!\.\/)([^*]+)$/, replacement: resolve(__dirname, '../src/$1') } ] const filePath = resolve(__dirname, '../src/index.ts') @@ -124,10 +127,22 @@ describe('transform tests', () => { }, { // https://github.com/qmhc/vite-plugin-dts/issues/330 - description: 'dynamic import with inside subfolder with wildcard alias at root level', + description: 'wildcard alias at root level with relative import', + filePath: './src/components/Sample/index.ts', + content: 'import { Sample } from "./Sample";', + output: "import { Sample } from './Sample';\n" + }, + { + description: 'wildcard alias at root level with relative import and dot in name', + filePath: './src/components/Sample/index.ts', + content: 'import { Sample } from "./test.data";', + output: "import { Sample } from './test.data';\n" + }, + { + description: 'wildcard alias at root level with relative import and dot in name', filePath: './src/components/Sample/index.ts', - content: 'import {Sample} from "./test";', - output: "import {Sample} from './test';" + content: 'import { Sample } from "utils/test.data";', + output: "import { Sample } from '../../utils/test.data';\n" }, { description: 'import inside folder with named alias at subfolder', @@ -220,8 +235,20 @@ describe('transform tests', () => { ) expect(transformCode(options('import { TestBase } from "./test";')).content).toEqual( + "import { TestBase } from './test';\n" + ) + + expect(transformCode(options('import { TestBase } from "test";')).content).toEqual( "import { TestBase } from './utils/test';\n" ) + + expect(transformCode(options('import { TestBase } from "test.path";')).content).toEqual( + "import { TestBase } from './utils/test.path';\n" + ) + + expect(transformCode(options('import { TestBase } from "./test.path";')).content).toEqual( + "import { TestBase } from './test.path';\n" + ) }) it('test: transformCode (remove pure imports)', () => { diff --git a/tests/utils.spec.ts b/tests/utils.spec.ts index 259eb10..794785c 100644 --- a/tests/utils.spec.ts +++ b/tests/utils.spec.ts @@ -168,14 +168,14 @@ describe('utils tests', () => { }) ).toStrictEqual([ { - find: /^@\/(.+)$/, + find: /^@\/(?!\.\/)([^*]+)$/, replacement: expect.stringMatching(maybeWindowsPath('/tmp/fake/project/root/at/$1')) } ]) expect(parseTsAliases('/tmp/fake/project/root', { '~/*': ['./tilde/*'] })).toStrictEqual([ { - find: /^~\/(.+)$/, + find: /^~\/(?!\.\/)([^*]+)$/, replacement: expect.stringMatching(maybeWindowsPath('/tmp/fake/project/root/tilde/$1')) } ]) @@ -184,7 +184,7 @@ describe('utils tests', () => { parseTsAliases('/tmp/fake/project/root', { '@/no-dot-prefix/*': ['no-dot-prefix/*'] }) ).toStrictEqual([ { - find: /^@\/no-dot-prefix\/(.+)$/, + find: /^@\/no-dot-prefix\/(?!\.\/)([^*]+)$/, replacement: expect.stringMatching( maybeWindowsPath('/tmp/fake/project/root/no-dot-prefix/$1') ) @@ -195,7 +195,7 @@ describe('utils tests', () => { parseTsAliases('/tmp/fake/project/root', { '@/components/*': ['./at/components/*'] }) ).toStrictEqual([ { - find: /^@\/components\/(.+)$/, + find: /^@\/components\/(?!\.\/)([^*]+)$/, replacement: expect.stringMatching( maybeWindowsPath('/tmp/fake/project/root/at/components/$1') ) @@ -204,7 +204,7 @@ describe('utils tests', () => { expect(parseTsAliases('/tmp/fake/project/root', { 'top/*': ['./top/*'] })).toStrictEqual([ { - find: /^top\/(.+)$/, + find: /^top\/(?!\.\/)([^*]+)$/, replacement: expect.stringMatching(maybeWindowsPath('/tmp/fake/project/root/top/$1')) } ]) @@ -219,7 +219,7 @@ describe('utils tests', () => { // https://github.com/qmhc/vite-plugin-dts/issues/330 expect(parseTsAliases('/tmp/fake/project/root', { '*': ['./src/*'] })).toStrictEqual([ { - find: /^(.+)$/, + find: /^(?!\.\/)([^*]+)$/, replacement: expect.stringMatching(maybeWindowsPath('/tmp/fake/project/root/src/$1')) } ]) @@ -227,7 +227,7 @@ describe('utils tests', () => { // https://github.com/qmhc/vite-plugin-dts/issues/290#issuecomment-1872495764 expect(parseTsAliases('/tmp/fake/project/root', { '#*': ['./hashed/*'] })).toStrictEqual([ { - find: /^#(.+)$/, + find: /^#(?!\.\/)([^*]+)$/, replacement: expect.stringMatching(maybeWindowsPath('/tmp/fake/project/root/hashed/$1')) } ])