The out-of-repo import guard (`isOutOfRepoImport`) never fired in two
setups:
- A catch-all `paths` key. The guard started with `isExternalImport`,
which treats an import as local when it starts with a root alias's
prefix, and a `"*"` key's prefix is empty. On cord-field
(`"*": ["./typings/*"]`), 169 imports of `Typography` from
`@mui/material` bound to the project's own `Typography`.
- An alias that lands on disk but outside the index. `fileExists` falls
back to `fs.existsSync`, which also answers for a directory or a file
under `node_modules`. home-assistant's
`"lit/decorators": ["./node_modules/lit/decorators.js"]` bound 4,916
`@property()` decorators to an unrelated `property` field, and
topcoder's `config` package landed on its `config/` folder.
The guard now skips the alias-prefix test (it already asks
`resolveImportPath` whether an alias maps the import to a file) and
counts that resolution only when it lands on an indexed file. Other
callers of `isExternalImport` are unchanged: resolving an import still
needs the prefix test so `"*": ["src/*"]` aliases resolve at all.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>