build: allow custom module resolution for ts-circular-deps tests (#36226)
Currently the `ts-circular-deps` tool uses a hard-coded module resolver that only works in the `angular/angular` repository. If the tool is consumed in other repositories through the shared dev-infra package, the module resolution won't work, and a few resolvable imports (usually cross-entry-points) are accidentally skipped. For each test, the resolution might differ, so tests can now configure their module resolution in a configuration file. Note that we intentionally don't rely on tsconfig's for module resolution as parsing their mappings rather complicates the circular dependency tool. Additionally, not every test has a corresponding tsconfig file. Also, hard-coding mappings to `@angular/*` while accepting a path to the packages folder would work, but it would mean that the circular deps tool is no longer self-contained. Rather, and also for better flexibility, a custom resolver should be specified. PR Close #36226
This commit is contained in:

committed by
Alex Rickabaugh

parent
ac17142001
commit
024cc3b84a
31
packages/circular-deps-test.conf.js
Normal file
31
packages/circular-deps-test.conf.js
Normal file
@ -0,0 +1,31 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
const path = require('path');
|
||||
|
||||
module.exports = {
|
||||
baseDir: '../',
|
||||
goldenFile: '../goldens/packages-circular-deps.json',
|
||||
// The test should not capture deprecated packages such as `http`, or the `webworker` platform.
|
||||
glob: `./!(http|platform-webworker|platform-webworker-dynamic)/**/*.ts`,
|
||||
// Command that will be displayed if the golden needs to be updated.
|
||||
approveCommand: 'yarn ts-circular-deps:approve',
|
||||
resolveModule: resolveModule
|
||||
};
|
||||
|
||||
/**
|
||||
* Custom module resolver that maps specifiers starting with `@angular/` to the
|
||||
* local packages folder. This ensures that cross package/entry-point dependencies
|
||||
* can be detected.
|
||||
*/
|
||||
function resolveModule(specifier) {
|
||||
if (specifier.startsWith('@angular/')) {
|
||||
return path.join(__dirname, specifier.substr('@angular/'.length));
|
||||
}
|
||||
return null;
|
||||
}
|
Reference in New Issue
Block a user