refactor: move ts-circular-dependencies tool to dev-infra (#35647)
PR Close #35647
This commit is contained in:

committed by
Andrew Kushnir

parent
9ea53803f7
commit
7aab399c84
58
dev-infra/ts-circular-dependencies/golden.ts
Normal file
58
dev-infra/ts-circular-dependencies/golden.ts
Normal file
@ -0,0 +1,58 @@
|
||||
/**
|
||||
* @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
|
||||
*/
|
||||
|
||||
import {relative} from 'path';
|
||||
|
||||
import {ReferenceChain} from './analyzer';
|
||||
import {convertPathToForwardSlash} from './file_system';
|
||||
|
||||
export type CircularDependency = ReferenceChain<string>;
|
||||
export type Golden = CircularDependency[];
|
||||
|
||||
/**
|
||||
* Converts a list of reference chains to a JSON-compatible golden object. Reference chains
|
||||
* by default use TypeScript source file objects. In order to make those chains printable,
|
||||
* the source file objects are mapped to their relative file names.
|
||||
*/
|
||||
export function convertReferenceChainToGolden(refs: ReferenceChain[], baseDir: string): Golden {
|
||||
return refs.map(
|
||||
chain => chain.map(({fileName}) => convertPathToForwardSlash(relative(baseDir, fileName))));
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares the specified goldens and returns two lists that describe newly
|
||||
* added circular dependencies, or fixed circular dependencies.
|
||||
*/
|
||||
export function compareGoldens(actual: Golden, expected: Golden) {
|
||||
const newCircularDeps: CircularDependency[] = [];
|
||||
const fixedCircularDeps: CircularDependency[] = [];
|
||||
actual.forEach(a => {
|
||||
if (!expected.find(e => isSameCircularDependency(a, e))) {
|
||||
newCircularDeps.push(a);
|
||||
}
|
||||
});
|
||||
expected.forEach(e => {
|
||||
if (!actual.find(a => isSameCircularDependency(e, a))) {
|
||||
fixedCircularDeps.push(e);
|
||||
}
|
||||
});
|
||||
return {newCircularDeps, fixedCircularDeps};
|
||||
}
|
||||
|
||||
/** Checks whether the specified circular dependencies are equal. */
|
||||
function isSameCircularDependency(actual: CircularDependency, expected: CircularDependency) {
|
||||
if (actual.length !== expected.length) {
|
||||
return false;
|
||||
}
|
||||
for (let i = 0; i < actual.length; i++) {
|
||||
if (actual[i] !== expected[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
Reference in New Issue
Block a user