diff --git a/.changeset/large-insects-kiss.md b/.changeset/large-insects-kiss.md new file mode 100644 index 00000000..efaff828 --- /dev/null +++ b/.changeset/large-insects-kiss.md @@ -0,0 +1,5 @@ +--- +"eslint-import-resolver-typescript": patch +--- + +fix: check tsconfig matching before using resolver diff --git a/src/index.ts b/src/index.ts index 486bc8f0..81e6f49f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -98,11 +98,6 @@ export const resolve = ( // must be an array with 2+ items here already ensured by `normalizeOptions` const projects = sortProjectsByAffinity(options.project as string[], file) for (const tsconfigPath of projects) { - const resolverCached = resolverCache.get(tsconfigPath) - if (resolverCached) { - resolver = resolverCached - break createResolver - } let tsconfigCached = tsconfigCache.get(tsconfigPath) if (!tsconfigCached) { tsconfigCache.set( @@ -126,6 +121,13 @@ export const resolve = ( continue } log('matched tsconfig at:', tsconfigPath, 'for', file) + + const resolverCached = resolverCache.get(tsconfigPath) + if (resolverCached) { + resolver = resolverCached + break createResolver + } + options = { ...options, tsconfig: { diff --git a/tests/e2e/__snapshots__/e2e.spec.ts.snap b/tests/e2e/__snapshots__/e2e.spec.ts.snap index b48beee6..5d9526fe 100644 --- a/tests/e2e/__snapshots__/e2e.spec.ts.snap +++ b/tests/e2e/__snapshots__/e2e.spec.ts.snap @@ -64,6 +64,14 @@ exports[`e2e cases > should exec eslint successfully > multipleTsconfigs 1`] = ` } `; +exports[`e2e cases > should exec eslint successfully > multipleTsconfigsWithReferences 1`] = ` +{ + "exitCode": 0, + "stderr": "", + "stdout": "", +} +`; + exports[`e2e cases > should exec eslint successfully > nearestTsconfig 1`] = ` { "exitCode": 0, diff --git a/tests/e2e/multipleTsconfigsWithReferences/.eslintrc.cjs b/tests/e2e/multipleTsconfigsWithReferences/.eslintrc.cjs new file mode 100644 index 00000000..49247ccd --- /dev/null +++ b/tests/e2e/multipleTsconfigsWithReferences/.eslintrc.cjs @@ -0,0 +1,8 @@ +const path = require('node:path') + +const project = [ + path.resolve(__dirname, 'tsconfig.node.json'), + path.resolve(__dirname, 'tsconfig.web.json'), +] + +module.exports = require('../base.eslintrc.cjs')(project) diff --git a/tests/e2e/multipleTsconfigsWithReferences/backend/index.ts b/tests/e2e/multipleTsconfigsWithReferences/backend/index.ts new file mode 100644 index 00000000..174f8c66 --- /dev/null +++ b/tests/e2e/multipleTsconfigsWithReferences/backend/index.ts @@ -0,0 +1,10 @@ +// import relative +import './utils' + +// import using tsconfig path mapping +import '@backend/utils' +import '@shared/helper' + +// import from node_module +import 'typescript' +import 'dummy.js' diff --git a/tests/e2e/multipleTsconfigsWithReferences/backend/utils.ts b/tests/e2e/multipleTsconfigsWithReferences/backend/utils.ts new file mode 100644 index 00000000..8d1db709 --- /dev/null +++ b/tests/e2e/multipleTsconfigsWithReferences/backend/utils.ts @@ -0,0 +1,3 @@ +export const utilA = () => { + return 'backend utility' +} diff --git a/tests/e2e/multipleTsconfigsWithReferences/frontend/component.tsx b/tests/e2e/multipleTsconfigsWithReferences/frontend/component.tsx new file mode 100644 index 00000000..e500b41b --- /dev/null +++ b/tests/e2e/multipleTsconfigsWithReferences/frontend/component.tsx @@ -0,0 +1 @@ +export default 'React Component' diff --git a/tests/e2e/multipleTsconfigsWithReferences/frontend/index.tsx b/tests/e2e/multipleTsconfigsWithReferences/frontend/index.tsx new file mode 100644 index 00000000..c3cbd772 --- /dev/null +++ b/tests/e2e/multipleTsconfigsWithReferences/frontend/index.tsx @@ -0,0 +1,10 @@ +// import relative +import './component' + +// import using tsconfig path mapping +import '@frontend/component' +import '@shared/helper' + +// import from node_module +import 'typescript' +import 'dummy.js' diff --git a/tests/e2e/multipleTsconfigsWithReferences/shared-utils/helper.ts b/tests/e2e/multipleTsconfigsWithReferences/shared-utils/helper.ts new file mode 100644 index 00000000..0d3e66e1 --- /dev/null +++ b/tests/e2e/multipleTsconfigsWithReferences/shared-utils/helper.ts @@ -0,0 +1,3 @@ +export const helperB = () => { + return 'shared helper' +} diff --git a/tests/e2e/multipleTsconfigsWithReferences/tsconfig.json b/tests/e2e/multipleTsconfigsWithReferences/tsconfig.json new file mode 100644 index 00000000..155ebaa6 --- /dev/null +++ b/tests/e2e/multipleTsconfigsWithReferences/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.node.json" }, + { "path": "./tsconfig.web.json" } + ] +} diff --git a/tests/e2e/multipleTsconfigsWithReferences/tsconfig.node.json b/tests/e2e/multipleTsconfigsWithReferences/tsconfig.node.json new file mode 100644 index 00000000..3a51d992 --- /dev/null +++ b/tests/e2e/multipleTsconfigsWithReferences/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "baseUrl": ".", + "paths": { + "@backend/*": ["backend/*"], + "@shared/*": ["shared-utils/*"] + } + }, + "include": ["backend/**/*", "shared-utils/**/*"] +} diff --git a/tests/e2e/multipleTsconfigsWithReferences/tsconfig.web.json b/tests/e2e/multipleTsconfigsWithReferences/tsconfig.web.json new file mode 100644 index 00000000..9a0257e6 --- /dev/null +++ b/tests/e2e/multipleTsconfigsWithReferences/tsconfig.web.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "composite": true, + "jsx": "react", + "baseUrl": ".", + "paths": { + "@frontend/*": ["frontend/*"], + "@shared/*": ["shared-utils/*"] + } + }, + "include": ["frontend/**/*", "shared-utils/**/*"] +}