diff --git a/.changeset/ready-mirrors-sneeze.md b/.changeset/ready-mirrors-sneeze.md new file mode 100644 index 00000000..3836acf8 --- /dev/null +++ b/.changeset/ready-mirrors-sneeze.md @@ -0,0 +1,5 @@ +--- +"eslint-import-resolver-typescript": patch +--- + +fix: always sort projects by affinity before iterating diff --git a/README.md b/README.md index c7bd7e50..4405eee3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # eslint-import-resolver-typescript [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/import-js/eslint-import-resolver-typescript/ci.yml?branch=master)](https://github.com/import-js/eslint-import-resolver-typescript/actions/workflows/ci.yml?query=branch%3Amaster) +[![Codecov](https://img.shields.io/codecov/c/github/import-js/eslint-import-resolver-typescript.svg)](https://codecov.io/gh/import-js/eslint-import-resolver-typescript) [![type-coverage](https://img.shields.io/badge/dynamic/json.svg?label=type-coverage&prefix=%E2%89%A5&suffix=%&query=$.typeCoverage.atLeast&uri=https%3A%2F%2Fraw.githubusercontent.com%2Fimport-js%2Feslint-import-resolver-typescript%2Fmaster%2Fpackage.json)](https://github.com/plantain-00/type-coverage) [![npm](https://img.shields.io/npm/v/eslint-import-resolver-typescript.svg)](https://www.npmjs.com/package/eslint-import-resolver-typescript) [![GitHub Release](https://img.shields.io/github/release/import-js/eslint-import-resolver-typescript)](https://github.com/import-js/eslint-import-resolver-typescript/releases) diff --git a/src/index.ts b/src/index.ts index 60db5ec0..fb16fb18 100644 --- a/src/index.ts +++ b/src/index.ts @@ -95,9 +95,9 @@ export const resolve = ( // eslint-disable-next-line sonarjs/label-position, sonarjs/no-labels createResolver: if (!resolver) { - // must be a array with 2+ items here already ensured by `normalizeOptions` - const project = options.project as string[] - for (const tsconfigPath of project) { + // 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 @@ -135,24 +135,23 @@ export const resolve = ( }, } resolver = new ResolverFactory(options) - resolverCache.set(tsconfigPath, resolver) - break createResolver + const resolved = resolve(source, file, options, resolver) + if (resolved.found) { + resolverCache.set(tsconfigPath, resolver) + return resolved + } } log( 'no tsconfig matched', file, 'with', - ...project, - ', trying from the the nearest one', + ...projects, + ', trying from the the nearest one instead', ) - for (const p of sortProjectsByAffinity(project, file)) { - const resolved = resolve( - source, - file, - { ...options, project: p }, - resolver, - ) + + for (const project of projects) { + const resolved = resolve(source, file, { ...options, project }, resolver) if (resolved.found) { return resolved }