From 42ff5e469fb5d315b92e85eee105e5a040949c01 Mon Sep 17 00:00:00 2001 From: Ahn Date: Wed, 4 Aug 2021 00:02:26 +0200 Subject: [PATCH] fix(config): handle `./` in tsconfig `paths` for `pathsToModuleNameMapper` (#2797) Closes #2709 --- .../paths-to-module-name-mapper.spec.ts.snap | 2 + .../paths-to-module-name-mapper.spec.ts | 44 ++++++++++--------- src/config/paths-to-module-name-mapper.ts | 4 +- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/config/__snapshots__/paths-to-module-name-mapper.spec.ts.snap b/src/config/__snapshots__/paths-to-module-name-mapper.spec.ts.snap index 9338f77cb9..c0d20c8e40 100644 --- a/src/config/__snapshots__/paths-to-module-name-mapper.spec.ts.snap +++ b/src/config/__snapshots__/paths-to-module-name-mapper.spec.ts.snap @@ -3,6 +3,7 @@ exports[`pathsToModuleNameMapper should convert tsconfig mapping with given prefix: / 1`] = ` Object { "^@foo\\\\-bar/common$": "/../common/dist/library", + "^@pkg/(.*)$": "/packages/$1", "^api/(.*)$": "/src/api/$1", "^client$": Array [ "/src/client", @@ -23,6 +24,7 @@ Object { exports[`pathsToModuleNameMapper should convert tsconfig mapping with given prefix: foo 1`] = ` Object { "^@foo\\\\-bar/common$": "foo/../common/dist/library", + "^@pkg/(.*)$": "foo/packages/$1", "^api/(.*)$": "foo/src/api/$1", "^client$": Array [ "foo/src/client", diff --git a/src/config/paths-to-module-name-mapper.spec.ts b/src/config/paths-to-module-name-mapper.spec.ts index 22caa6fafc..670c42974e 100644 --- a/src/config/paths-to-module-name-mapper.spec.ts +++ b/src/config/paths-to-module-name-mapper.spec.ts @@ -12,36 +12,38 @@ const tsconfigMap = { 'mocks/*': ['test/mocks/*'], 'test/*/mock': ['test/mocks/*', 'test/__mocks__/*'], '@foo-bar/common': ['../common/dist/library'], + '@pkg/*': ['./packages/*'], } describe('pathsToModuleNameMapper', () => { - it('should convert tsconfig mapping with no given prefix', () => { + test('should convert tsconfig mapping with no given prefix', () => { expect(pathsToModuleNameMapper(tsconfigMap)).toMatchInlineSnapshot(` - Object { - "^@foo\\\\-bar/common$": "../common/dist/library", - "^api/(.*)$": "src/api/$1", - "^client$": Array [ - "src/client", - "src/client/index", - ], - "^log$": "src/utils/log", - "^mocks/(.*)$": "test/mocks/$1", - "^server$": "src/server", - "^test/(.*)$": "test/$1", - "^test/(.*)/mock$": Array [ - "test/mocks/$1", - "test/__mocks__/$1", - ], - "^util/(.*)$": "src/utils/$1", - } - `) +Object { + "^@foo\\\\-bar/common$": "../common/dist/library", + "^@pkg/(.*)$": "./packages/$1", + "^api/(.*)$": "src/api/$1", + "^client$": Array [ + "src/client", + "src/client/index", + ], + "^log$": "src/utils/log", + "^mocks/(.*)$": "test/mocks/$1", + "^server$": "src/server", + "^test/(.*)$": "test/$1", + "^test/(.*)/mock$": Array [ + "test/mocks/$1", + "test/__mocks__/$1", + ], + "^util/(.*)$": "src/utils/$1", +} +`) }) - it.each(['/', 'foo'])('should convert tsconfig mapping with given prefix', (prefix) => { + test.each(['/', 'foo'])('should convert tsconfig mapping with given prefix', (prefix) => { expect(pathsToModuleNameMapper(tsconfigMap, { prefix })).toMatchSnapshot(prefix) }) - it('should warn about mapping it cannot handle', () => { + test('should warn about mapping it cannot handle', () => { const log = logTargetMock() log.clear() expect( diff --git a/src/config/paths-to-module-name-mapper.ts b/src/config/paths-to-module-name-mapper.ts index fc03983fe3..73d0744c88 100644 --- a/src/config/paths-to-module-name-mapper.ts +++ b/src/config/paths-to-module-name-mapper.ts @@ -41,9 +41,11 @@ export const pathsToModuleNameMapper = ( jestMap[pattern] = paths.length === 1 ? paths[0] : paths } else if (segments.length === 2) { const paths = toPaths.map((target) => { + const enrichedTarget = + target.startsWith('./') && prefix !== '' ? target.substring(target.indexOf('/') + 1) : target const enrichedPrefix = prefix !== '' && !prefix.endsWith('/') ? `${prefix}/` : prefix - return `${enrichedPrefix}${target.replace(/\*/g, '$1')}` + return `${enrichedPrefix}${enrichedTarget.replace(/\*/g, '$1')}` }) pattern = `^${escapeRegex(segments[0])}(.*)${escapeRegex(segments[1])}$` jestMap[pattern] = paths.length === 1 ? paths[0] : paths