* feat(linter): optimize containsFile function
related to #5210
* feat(linter): optimize find project function
related to #5210
* feat(core): cleanup target project locator
* fix(core): fix false positive match on resolvedModule
* chore(core): mark old code for removal
* feat(linter): move npm check before expensive typescript resolution
* feat(linter): improve performance of extension removal
* feat(linter): improve I/O operations
* feat(linter): read ts config only once in project locator
* feat(linter): remove double path normalization from rule
normalization is already part of getSourceFilePath function
* feat(linter): run find source only once
* feat(linter): defer source file path calculation will after whitelist check
* feat(linter): map project graph node files to hash map
* fix(linter): map projectGraph only once per runtime
* feat(linter): introduce mapped project graph type
* fix(linter): disable absolute paths within project
* fix(linter): add missing colon before the import path
* feat(linter): add flag to disable self circular check
* fix(core): use typescript module resolution only for linting
* fix(core): fix unit tests
* fix(core): pass npm scope to target project locator for fallback
* chore(core): move comment about npmscope
* Revert "Revert "fix(core): sort node names for module resolution""
This reverts commit 0b77072fcfe63f8d02fccb73ba138aca99cb7f66.
* fix(core): add target project locator
This will sort nodes by length of the root (high to low) then nodes that have no root.
It also uses TypeScript to first try and resolve a module. If it is not found via TypeScript, it will
fall back to using a string match.
buildable libraries should only be able to import other buildable libraries
to avoid confusion. Importing non-buildable libs would effectively
mean embedding their src into the buildable libs, even potentially
multiple times.