@procedures/lib 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +23 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +21 -0
- package/dist/module.js.map +1 -1
- package/dist/procedures/lib/graph.d.ts +2 -0
- package/dist/procedures/lib/graph.d.ts.map +1 -1
- package/dist/procedures/lib/graph.js +39 -23
- package/dist/procedures/lib/graph.js.map +1 -1
- package/dist/procedures/lib/import-cycles.d.ts +55 -0
- package/dist/procedures/lib/import-cycles.d.ts.map +1 -0
- package/dist/procedures/lib/import-cycles.js +217 -0
- package/dist/procedures/lib/import-cycles.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -1
- package/package.json +7 -7
- package/src/index.ts +1 -0
- package/src/module.ts +23 -0
- package/src/procedures/lib/graph.ts +36 -22
- package/src/procedures/lib/import-cycles.ts +246 -0
- package/src/types.ts +61 -0
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export * from "./module.js";
|
|
|
7
7
|
export * from "./types.js";
|
|
8
8
|
export { libScan, libRename, libNew, libAudit, libGraph, } from "./procedures/lib/index.js";
|
|
9
9
|
export { findCycles } from "./procedures/lib/graph.js";
|
|
10
|
+
export { importCycles, importGraph, ANGULAR_DI_DECORATORS, DEFAULT_IMPORT_EXCLUDE, DEFAULT_IMPORT_CYCLE_LIMITS, type ImportCycleLimits, type ImportCycles, type ImportGraphOptions } from "./procedures/lib/import-cycles.js";
|
|
10
11
|
export { ecosystemProcedures, EcosystemProceduresInputSchema, } from "./procedures/ecosystem/index.js";
|
|
11
12
|
export type { EcosystemProceduresInput, EcosystemProceduresOutput, ProcedureInfo, PackageProcedures, } from "./procedures/ecosystem/index.js";
|
|
12
13
|
export { buildDAGNodes, filterDAGFromRoot, getAncestors, getDescendants, buildLeveledDAG, getTopologicalOrder, visualizeDAG, executeDAG, executeDAGSequential, createProcessor, } from "./dag/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAG9N,OAAO,EACL,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export * from "./types.js";
|
|
|
9
9
|
// Re-export procedures
|
|
10
10
|
export { libScan, libRename, libNew, libAudit, libGraph, } from "./procedures/lib/index.js";
|
|
11
11
|
export { findCycles } from "./procedures/lib/graph.js";
|
|
12
|
+
export { importCycles, importGraph, ANGULAR_DI_DECORATORS, DEFAULT_IMPORT_EXCLUDE, DEFAULT_IMPORT_CYCLE_LIMITS } from "./procedures/lib/import-cycles.js";
|
|
12
13
|
// Re-export ecosystem procedures
|
|
13
14
|
export { ecosystemProcedures, EcosystemProceduresInputSchema, } from "./procedures/ecosystem/index.js";
|
|
14
15
|
// Re-export DAG utilities (ecosystem-specific)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAE5B,kBAAkB;AAClB,cAAc,YAAY,CAAC;AAE3B,uBAAuB;AACvB,OAAO,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAE5B,kBAAkB;AAClB,cAAc,YAAY,CAAC;AAE3B,uBAAuB;AACvB,OAAO,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAsE,MAAM,mCAAmC,CAAC;AAE9N,iCAAiC;AACjC,OAAO,EACL,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,iCAAiC,CAAC;AAQzC,+CAA+C;AAC/C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,0BAA0B;AAC1B,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,+FAA+F;AAC/F,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAsB,MAAM,gBAAgB,CAAC"}
|
package/dist/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA6C,KAAK,eAAe,EAAuC,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA6C,KAAK,eAAe,EAAuC,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA2MlK;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,eAUG,CAAC;eAEb,SAAS;AAExB;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,iBAAsC,GAAG,IAAI,CAE5F"}
|
package/dist/module.js
CHANGED
|
@@ -13,6 +13,8 @@ import { libScan, libRename, libNew, libAudit, libGraph, } from "./procedures/li
|
|
|
13
13
|
import { ecosystemProcedures, EcosystemProceduresInputSchema, EcosystemProceduresOutputSchema, } from "./procedures/ecosystem/index.js";
|
|
14
14
|
import { LibScanInputSchema, LibRenameInputSchema, LibNewInputSchema, LibAuditInputSchema, LibScanOutputSchema, LibRenameOutputSchema, LibNewOutputSchema, LibAuditOutputSchema, } from "./types.js";
|
|
15
15
|
import { LibGraphInputSchema, LibGraphOutputSchema } from "./types.js";
|
|
16
|
+
import { LibImportCyclesInputSchema, LibImportCyclesOutputSchema } from "./types.js";
|
|
17
|
+
import { libImportCycles } from "./procedures/lib/import-cycles.js";
|
|
16
18
|
// =============================================================================
|
|
17
19
|
// The rules under a root of the files (roadmap R33)
|
|
18
20
|
// =============================================================================
|
|
@@ -23,6 +25,8 @@ import { LibGraphInputSchema, LibGraphOutputSchema } from "./types.js";
|
|
|
23
25
|
* finds no repository above the root.
|
|
24
26
|
*/
|
|
25
27
|
const WORKSPACE_IN_A_ROOT = { cwd: "rootPath" };
|
|
28
|
+
/** `lib.importCycles`: the folder of the sources stays in the root. */
|
|
29
|
+
const SOURCES_IN_A_ROOT = { paths: ["path"] };
|
|
26
30
|
/** `lib.new`: a root refuses it. */
|
|
27
31
|
const NEW_UNDER_A_ROOT = { refuse: "it starts the cue program of the workspace, and that program is code of the project" };
|
|
28
32
|
// =============================================================================
|
|
@@ -119,6 +123,22 @@ const libGraphProcedure = createProcedure()
|
|
|
119
123
|
})
|
|
120
124
|
.handler(async (input, ctx) => libGraph(input, ctx))
|
|
121
125
|
.build();
|
|
126
|
+
// lib.importCycles (Graph's split, wave 2, W7)
|
|
127
|
+
const libImportCyclesProcedure = createProcedure()
|
|
128
|
+
.path(["lib", "importCycles"])
|
|
129
|
+
.input(zodAdapter(LibImportCyclesInputSchema))
|
|
130
|
+
.output(zodAdapter(LibImportCyclesOutputSchema))
|
|
131
|
+
.meta({
|
|
132
|
+
description: "The import cycles of a tree of TypeScript sources: the cycles at runtime (after the import elision), of the declared imports, or of each import",
|
|
133
|
+
calls: ["fs.glob", "fs.stat", "fs.read"],
|
|
134
|
+
effects: { reads: ["fs"], writes: [] },
|
|
135
|
+
fsRoot: SOURCES_IN_A_ROOT,
|
|
136
|
+
args: ["path"],
|
|
137
|
+
shorts: {},
|
|
138
|
+
output: "json",
|
|
139
|
+
})
|
|
140
|
+
.handler(async (input, ctx) => libImportCycles(input, ctx))
|
|
141
|
+
.build();
|
|
122
142
|
// =============================================================================
|
|
123
143
|
// ecosystem.* Procedures
|
|
124
144
|
// =============================================================================
|
|
@@ -154,6 +174,7 @@ export const libModule = defineModule("@procedures/lib", [
|
|
|
154
174
|
libNewProcedure,
|
|
155
175
|
libAuditProcedure,
|
|
156
176
|
libGraphProcedure,
|
|
177
|
+
libImportCyclesProcedure,
|
|
157
178
|
// ecosystem.* procedures
|
|
158
179
|
ecosystemProceduresProcedure,
|
|
159
180
|
], [fsModule, gitModule]);
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAwB,kBAAkB,EAAE,eAAe,EAA0B,MAAM,oBAAoB,CAAC;AAClK,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,+BAA+B,GAGhC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EASnB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAA2C,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ import type { LibGraphInput, LibGraphOutput } from "../../types.js";
|
|
|
12
12
|
/**
|
|
13
13
|
* The cycles of a graph: each strongly connected component with more than one node, and each
|
|
14
14
|
* node with an edge to itself (Tarjan's algorithm). Each cycle and the list are in name order.
|
|
15
|
+
* The search keeps its own stack, so a long chain of edges (the imports of a large source tree)
|
|
16
|
+
* does not overflow the call stack.
|
|
15
17
|
*/
|
|
16
18
|
export declare function findCycles(names: readonly string[], edges: ReadonlyMap<string, readonly string[]>): string[][];
|
|
17
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/procedures/lib/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAgC,aAAa,EAAgB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAmBhH
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/procedures/lib/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAgC,aAAa,EAAgB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAmBhH;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAiD9G;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAuDnG"}
|
|
@@ -14,6 +14,8 @@ const KINDS = ["dependencies", "devDependencies", "peerDependencies", "optionalD
|
|
|
14
14
|
/**
|
|
15
15
|
* The cycles of a graph: each strongly connected component with more than one node, and each
|
|
16
16
|
* node with an edge to itself (Tarjan's algorithm). Each cycle and the list are in name order.
|
|
17
|
+
* The search keeps its own stack, so a long chain of edges (the imports of a large source tree)
|
|
18
|
+
* does not overflow the call stack.
|
|
17
19
|
*/
|
|
18
20
|
export function findCycles(names, edges) {
|
|
19
21
|
let counter = 0;
|
|
@@ -22,37 +24,51 @@ export function findCycles(names, edges) {
|
|
|
22
24
|
const stack = [];
|
|
23
25
|
const onStack = new Set();
|
|
24
26
|
const cycles = [];
|
|
25
|
-
const
|
|
27
|
+
const open = (name) => {
|
|
26
28
|
index.set(name, counter);
|
|
27
29
|
low.set(name, counter);
|
|
28
30
|
counter++;
|
|
29
31
|
stack.push(name);
|
|
30
32
|
onStack.add(name);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
};
|
|
34
|
+
for (const start of names) {
|
|
35
|
+
if (index.has(start))
|
|
36
|
+
continue;
|
|
37
|
+
open(start);
|
|
38
|
+
// Each frame: a node, and the position of its next edge
|
|
39
|
+
const work = [{ name: start, next: 0 }];
|
|
40
|
+
while (work.length > 0) {
|
|
41
|
+
const frame = work[work.length - 1];
|
|
42
|
+
const targets = edges.get(frame.name) ?? [];
|
|
43
|
+
if (frame.next < targets.length) {
|
|
44
|
+
const target = targets[frame.next++];
|
|
45
|
+
if (!index.has(target)) {
|
|
46
|
+
open(target);
|
|
47
|
+
work.push({ name: target, next: 0 });
|
|
48
|
+
}
|
|
49
|
+
else if (onStack.has(target)) {
|
|
50
|
+
low.set(frame.name, Math.min(low.get(frame.name), index.get(target)));
|
|
51
|
+
}
|
|
52
|
+
continue;
|
|
35
53
|
}
|
|
36
|
-
|
|
37
|
-
|
|
54
|
+
work.pop();
|
|
55
|
+
const parent = work[work.length - 1];
|
|
56
|
+
if (parent)
|
|
57
|
+
low.set(parent.name, Math.min(low.get(parent.name), low.get(frame.name)));
|
|
58
|
+
if (low.get(frame.name) === index.get(frame.name)) {
|
|
59
|
+
const component = [];
|
|
60
|
+
let member;
|
|
61
|
+
do {
|
|
62
|
+
member = stack.pop();
|
|
63
|
+
onStack.delete(member);
|
|
64
|
+
component.push(member);
|
|
65
|
+
} while (member !== frame.name);
|
|
66
|
+
const selfEdge = component.length === 1 && targets.includes(frame.name);
|
|
67
|
+
if (component.length > 1 || selfEdge)
|
|
68
|
+
cycles.push(component.sort());
|
|
38
69
|
}
|
|
39
70
|
}
|
|
40
|
-
|
|
41
|
-
const component = [];
|
|
42
|
-
let member;
|
|
43
|
-
do {
|
|
44
|
-
member = stack.pop();
|
|
45
|
-
onStack.delete(member);
|
|
46
|
-
component.push(member);
|
|
47
|
-
} while (member !== name);
|
|
48
|
-
const selfEdge = component.length === 1 && (edges.get(name) ?? []).includes(name);
|
|
49
|
-
if (component.length > 1 || selfEdge)
|
|
50
|
-
cycles.push(component.sort());
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
for (const name of names)
|
|
54
|
-
if (!index.has(name))
|
|
55
|
-
visit(name);
|
|
71
|
+
}
|
|
56
72
|
return cycles.sort((a, b) => a[0].localeCompare(b[0]));
|
|
57
73
|
}
|
|
58
74
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/procedures/lib/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAgB,MAAM,iBAAiB,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,KAAK,GAA8B,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;AAgBzH
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/procedures/lib/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ProcedureContext } from "@procedures/client";
|
|
2
|
+
import type { ImportMode, LibImportCyclesInput, LibImportCyclesOutput } from "../../types.js";
|
|
3
|
+
/** The decorators of Angular whose class keeps the types of its constructor parameters at runtime. */
|
|
4
|
+
export declare const ANGULAR_DI_DECORATORS: readonly string[];
|
|
5
|
+
/** The files that the procedure leaves out by default: the tests, the declarations and node_modules. */
|
|
6
|
+
export declare const DEFAULT_IMPORT_EXCLUDE: readonly string[];
|
|
7
|
+
/** The limits of `lib.importCycles`. The defaults are the ceiling: a caller can only ask for lower limits. */
|
|
8
|
+
export interface ImportCycleLimits {
|
|
9
|
+
/** The most files that one call reads. A call with more files is refused before it reads a file. The default is 20000. */
|
|
10
|
+
readonly maxFiles: number;
|
|
11
|
+
/** The largest file that the call reads, in bytes. A larger file is skipped, and the result lists it. The default is 1 MiB. */
|
|
12
|
+
readonly maxFileBytes: number;
|
|
13
|
+
}
|
|
14
|
+
/** The default limits of `lib.importCycles`. */
|
|
15
|
+
export declare const DEFAULT_IMPORT_CYCLE_LIMITS: ImportCycleLimits;
|
|
16
|
+
/** The options of `importGraph` and `importCycles`. */
|
|
17
|
+
export interface ImportGraphOptions {
|
|
18
|
+
/** `runtime` (the default), `declared` or `raw`. */
|
|
19
|
+
readonly mode?: ImportMode | undefined;
|
|
20
|
+
/** The decorators whose class keeps the types of its constructor parameters at runtime. The default is none. */
|
|
21
|
+
readonly diDecorators?: readonly string[] | undefined;
|
|
22
|
+
/** An abort signal: the functions examine it before each file, and stop with its reason. */
|
|
23
|
+
readonly signal?: AbortSignal | undefined;
|
|
24
|
+
}
|
|
25
|
+
/** The result of `importCycles`. */
|
|
26
|
+
export interface ImportCycles {
|
|
27
|
+
/** The number of files. */
|
|
28
|
+
readonly files: number;
|
|
29
|
+
/** The number of import edges between the files. */
|
|
30
|
+
readonly edges: number;
|
|
31
|
+
/** Each cycle: the files of a strongly connected component, in name order. The largest cycle comes first. */
|
|
32
|
+
readonly components: string[][];
|
|
33
|
+
/** The number of files in a cycle. */
|
|
34
|
+
readonly filesInCycles: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* This function gives the import graph of the sources: for each file, the files that it imports in the mode. The
|
|
38
|
+
* paths are POSIX paths, relative to one root. Only relative imports make edges.
|
|
39
|
+
*/
|
|
40
|
+
export declare function importGraph(sources: ReadonlyMap<string, string>, options?: ImportGraphOptions): Map<string, string[]>;
|
|
41
|
+
/**
|
|
42
|
+
* This function gives the import cycles of the sources: the strongly connected components of `importGraph`.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const sources = new Map([["src/a.ts", "import { b } from './b';"], ["src/b.ts", "import { a } from './a';"]]);
|
|
47
|
+
* importCycles(sources).components; // [["src/a.ts", "src/b.ts"]]
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare function importCycles(sources: ReadonlyMap<string, string>, options?: ImportGraphOptions): ImportCycles;
|
|
51
|
+
/**
|
|
52
|
+
* The import cycles of the TypeScript sources under a folder
|
|
53
|
+
*/
|
|
54
|
+
export declare function libImportCycles(input: LibImportCyclesInput, ctx: ProcedureContext): Promise<LibImportCyclesOutput>;
|
|
55
|
+
//# sourceMappingURL=import-cycles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-cycles.d.ts","sourceRoot":"","sources":["../../../src/procedures/lib/import-cycles.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAG9F,sGAAsG;AACtG,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAAgF,CAAC;AAEpI,wGAAwG;AACxG,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAAyF,CAAC;AAE9I,8GAA8G;AAC9G,MAAM,WAAW,iBAAiB;IAChC,0HAA0H;IAC1H,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+HAA+H;IAC/H,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,gDAAgD;AAChD,eAAO,MAAM,2BAA2B,EAAE,iBAAkF,CAAC;AAE7H,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACvC,gHAAgH;IAChH,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtD,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C;AAED,oCAAoC;AACpC,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,6GAA6G;IAC7G,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IAChC,sCAAsC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAwGD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE,kBAAuB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAUzH;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE,kBAAuB,GAAG,YAAY,CAOjH;AAaD;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAgCxH"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lib.importCycles procedure (Graph's split, wave 2, W7)
|
|
3
|
+
*
|
|
4
|
+
* The import cycles of a tree of TypeScript sources. The default mode counts the cycles that exist
|
|
5
|
+
* at runtime: TypeScript's own import elision drops an import whose bindings are only types, as the
|
|
6
|
+
* build drops it. Then the strongly connected components of the graph are the cycles that can break
|
|
7
|
+
* the order of the module initialization.
|
|
8
|
+
*
|
|
9
|
+
* - `runtime` (the default): the imports that survive the elision, and the dependency-injection
|
|
10
|
+
* tokens of the decorators in `diDecorators` (Angular: a decorated class keeps the types of its
|
|
11
|
+
* constructor parameters at runtime).
|
|
12
|
+
* - `declared`: each import that the source does not declare type-only (`import type`). A cycle of
|
|
13
|
+
* this mode holds only because the elision catches an import of types.
|
|
14
|
+
* - `raw`: each import statement. This is the count of a tool such as madge.
|
|
15
|
+
*
|
|
16
|
+
* The procedure reads the files with `fs.glob` and `fs.read`, so a root of the host confines it. The
|
|
17
|
+
* functions `importGraph` and `importCycles` take the sources as text, for a caller with its own files.
|
|
18
|
+
*/
|
|
19
|
+
import { posix } from "node:path";
|
|
20
|
+
import { ts } from "ts-morph";
|
|
21
|
+
import { findCycles } from "./graph.js";
|
|
22
|
+
/** The decorators of Angular whose class keeps the types of its constructor parameters at runtime. */
|
|
23
|
+
export const ANGULAR_DI_DECORATORS = Object.freeze(["Injectable", "Component", "Directive", "Pipe", "NgModule"]);
|
|
24
|
+
/** The files that the procedure leaves out by default: the tests, the declarations and node_modules. */
|
|
25
|
+
export const DEFAULT_IMPORT_EXCLUDE = Object.freeze(["**/node_modules/**", "**/*.d.ts", "**/*.{spec,test,unit}.{ts,tsx}"]);
|
|
26
|
+
/** The default limits of `lib.importCycles`. */
|
|
27
|
+
export const DEFAULT_IMPORT_CYCLE_LIMITS = Object.freeze({ maxFiles: 20_000, maxFileBytes: 1024 * 1024 });
|
|
28
|
+
/** True when the source declares the import or export type-only: `import type`, or only `type` names. */
|
|
29
|
+
function declaredTypeOnly(statement) {
|
|
30
|
+
if (ts.isImportDeclaration(statement)) {
|
|
31
|
+
const clause = statement.importClause;
|
|
32
|
+
if (!clause)
|
|
33
|
+
return false; // an import for its side effects runs
|
|
34
|
+
if (clause.isTypeOnly)
|
|
35
|
+
return true;
|
|
36
|
+
if (clause.name)
|
|
37
|
+
return false;
|
|
38
|
+
const bindings = clause.namedBindings;
|
|
39
|
+
return !!bindings && ts.isNamedImports(bindings) && bindings.elements.length > 0 && bindings.elements.every((element) => element.isTypeOnly);
|
|
40
|
+
}
|
|
41
|
+
return statement.isTypeOnly;
|
|
42
|
+
}
|
|
43
|
+
/** The module specifiers of the statements of a source. */
|
|
44
|
+
function specifiersOf(source, skip) {
|
|
45
|
+
const specifiers = new Set();
|
|
46
|
+
for (const statement of source.statements) {
|
|
47
|
+
if ((ts.isImportDeclaration(statement) || ts.isExportDeclaration(statement)) && statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier)) {
|
|
48
|
+
if (!skip(statement))
|
|
49
|
+
specifiers.add(statement.moduleSpecifier.text);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return specifiers;
|
|
53
|
+
}
|
|
54
|
+
/** The specifiers of the dependency-injection tokens: the types of the constructor parameters of a decorated class. */
|
|
55
|
+
function diSpecifiers(source, decorators) {
|
|
56
|
+
const importOf = new Map();
|
|
57
|
+
for (const statement of source.statements) {
|
|
58
|
+
if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier) || !statement.importClause || statement.importClause.isTypeOnly)
|
|
59
|
+
continue;
|
|
60
|
+
const bindings = statement.importClause.namedBindings;
|
|
61
|
+
if (bindings && ts.isNamedImports(bindings)) {
|
|
62
|
+
for (const element of bindings.elements)
|
|
63
|
+
if (!element.isTypeOnly)
|
|
64
|
+
importOf.set(element.name.text, statement.moduleSpecifier.text);
|
|
65
|
+
}
|
|
66
|
+
if (statement.importClause.name)
|
|
67
|
+
importOf.set(statement.importClause.name.text, statement.moduleSpecifier.text);
|
|
68
|
+
}
|
|
69
|
+
const out = new Set();
|
|
70
|
+
const visit = (node) => {
|
|
71
|
+
if (ts.isClassDeclaration(node)) {
|
|
72
|
+
const decorated = (ts.getDecorators(node) ?? []).some((decorator) => {
|
|
73
|
+
const expression = decorator.expression;
|
|
74
|
+
return ts.isCallExpression(expression) && ts.isIdentifier(expression.expression) && decorators.has(expression.expression.text);
|
|
75
|
+
});
|
|
76
|
+
if (decorated) {
|
|
77
|
+
for (const member of node.members) {
|
|
78
|
+
if (!ts.isConstructorDeclaration(member))
|
|
79
|
+
continue;
|
|
80
|
+
for (const parameter of member.parameters) {
|
|
81
|
+
const type = parameter.type;
|
|
82
|
+
if (type && ts.isTypeReferenceNode(type) && ts.isIdentifier(type.typeName)) {
|
|
83
|
+
const specifier = importOf.get(type.typeName.text);
|
|
84
|
+
if (specifier)
|
|
85
|
+
out.add(specifier);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
ts.forEachChild(node, visit);
|
|
92
|
+
};
|
|
93
|
+
visit(source);
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
/** The file of a relative specifier among the known files, or undefined. A `.js` specifier of an ES module maps to its `.ts` source. */
|
|
97
|
+
function resolveSpecifier(from, specifier, files) {
|
|
98
|
+
if (!specifier.startsWith("."))
|
|
99
|
+
return undefined; // a package import cannot make a cycle of the tree
|
|
100
|
+
const base = posix.normalize(posix.join(posix.dirname(from), specifier));
|
|
101
|
+
const candidates = [base, `${base}.ts`, `${base}.tsx`, `${base}/index.ts`, `${base}/index.tsx`];
|
|
102
|
+
if (base.endsWith(".js"))
|
|
103
|
+
candidates.push(`${base.slice(0, -3)}.ts`, `${base.slice(0, -3)}.tsx`);
|
|
104
|
+
return candidates.find((candidate) => files.has(candidate));
|
|
105
|
+
}
|
|
106
|
+
/** The edges of one source in a mode. */
|
|
107
|
+
function edgesOf(file, text, files, mode, decorators) {
|
|
108
|
+
const kind = file.endsWith("x") ? ts.ScriptKind.TSX : ts.ScriptKind.TS;
|
|
109
|
+
let specifiers;
|
|
110
|
+
if (mode === "runtime") {
|
|
111
|
+
// The elision of TypeScript: an import whose bindings are only types leaves the output
|
|
112
|
+
const output = ts.transpileModule(text, {
|
|
113
|
+
fileName: file,
|
|
114
|
+
compilerOptions: {
|
|
115
|
+
module: ts.ModuleKind.ESNext,
|
|
116
|
+
target: ts.ScriptTarget.ES2022,
|
|
117
|
+
jsx: ts.JsxEmit.ReactJSX,
|
|
118
|
+
experimentalDecorators: true,
|
|
119
|
+
useDefineForClassFields: false,
|
|
120
|
+
verbatimModuleSyntax: false,
|
|
121
|
+
isolatedModules: true,
|
|
122
|
+
},
|
|
123
|
+
}).outputText;
|
|
124
|
+
specifiers = specifiersOf(ts.createSourceFile("out.js", output, ts.ScriptTarget.ES2022, false, ts.ScriptKind.JS), () => false);
|
|
125
|
+
if (decorators.size > 0)
|
|
126
|
+
for (const specifier of diSpecifiers(ts.createSourceFile(file, text, ts.ScriptTarget.ES2022, true, kind), decorators))
|
|
127
|
+
specifiers.add(specifier);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
const source = ts.createSourceFile(file, text, ts.ScriptTarget.ES2022, false, kind);
|
|
131
|
+
specifiers = specifiersOf(source, mode === "declared" ? declaredTypeOnly : () => false);
|
|
132
|
+
}
|
|
133
|
+
const edges = [];
|
|
134
|
+
for (const specifier of specifiers) {
|
|
135
|
+
const target = resolveSpecifier(file, specifier, files);
|
|
136
|
+
if (target && !edges.includes(target))
|
|
137
|
+
edges.push(target);
|
|
138
|
+
}
|
|
139
|
+
return edges;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* This function gives the import graph of the sources: for each file, the files that it imports in the mode. The
|
|
143
|
+
* paths are POSIX paths, relative to one root. Only relative imports make edges.
|
|
144
|
+
*/
|
|
145
|
+
export function importGraph(sources, options = {}) {
|
|
146
|
+
const files = new Set(sources.keys());
|
|
147
|
+
const decorators = new Set(options.diDecorators ?? []);
|
|
148
|
+
const mode = options.mode ?? "runtime";
|
|
149
|
+
const graph = new Map();
|
|
150
|
+
for (const [file, text] of sources) {
|
|
151
|
+
options.signal?.throwIfAborted();
|
|
152
|
+
graph.set(file, edgesOf(file, text, files, mode, decorators));
|
|
153
|
+
}
|
|
154
|
+
return graph;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* This function gives the import cycles of the sources: the strongly connected components of `importGraph`.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* const sources = new Map([["src/a.ts", "import { b } from './b';"], ["src/b.ts", "import { a } from './a';"]]);
|
|
162
|
+
* importCycles(sources).components; // [["src/a.ts", "src/b.ts"]]
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export function importCycles(sources, options = {}) {
|
|
166
|
+
const graph = importGraph(sources, options);
|
|
167
|
+
// The largest cycle first, then the order of the code units of the first file
|
|
168
|
+
const components = findCycles([...graph.keys()], graph).sort((a, b) => b.length - a.length || (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
|
|
169
|
+
let edges = 0;
|
|
170
|
+
for (const targets of graph.values())
|
|
171
|
+
edges += targets.length;
|
|
172
|
+
return { files: graph.size, edges, components, filesInCycles: components.reduce((n, component) => n + component.length, 0) };
|
|
173
|
+
}
|
|
174
|
+
function tooManyFiles(count, maxFiles) {
|
|
175
|
+
return Object.assign(new Error(`The folder has ${count} source files, more than the limit of ${maxFiles}. Give a narrower path or exclude patterns.`), {
|
|
176
|
+
code: "PAYLOAD_TOO_LARGE",
|
|
177
|
+
retryable: false,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* The import cycles of the TypeScript sources under a folder
|
|
182
|
+
*/
|
|
183
|
+
export async function libImportCycles(input, ctx) {
|
|
184
|
+
const exclude = input.exclude ?? [...DEFAULT_IMPORT_EXCLUDE];
|
|
185
|
+
// The meet of the caller's limits and the ceiling, for each field: a caller only narrows them (the schema
|
|
186
|
+
// also refuses a higher value)
|
|
187
|
+
const limits = {
|
|
188
|
+
maxFiles: Math.min(input.limits?.maxFiles ?? Infinity, DEFAULT_IMPORT_CYCLE_LIMITS.maxFiles),
|
|
189
|
+
maxFileBytes: Math.min(input.limits?.maxFileBytes ?? Infinity, DEFAULT_IMPORT_CYCLE_LIMITS.maxFileBytes),
|
|
190
|
+
};
|
|
191
|
+
const { matches } = await ctx.client.call(["fs", "glob"], {
|
|
192
|
+
pattern: "**/*.{ts,tsx}",
|
|
193
|
+
cwd: input.path,
|
|
194
|
+
ignore: exclude,
|
|
195
|
+
});
|
|
196
|
+
// The limit comes before any read: a call cannot make the host read a whole node_modules
|
|
197
|
+
if (matches.length > limits.maxFiles)
|
|
198
|
+
throw tooManyFiles(matches.length, limits.maxFiles);
|
|
199
|
+
const root = input.path.split("\\").join("/");
|
|
200
|
+
const sources = new Map();
|
|
201
|
+
const skipped = [];
|
|
202
|
+
for (const match of matches.map((m) => m.split("\\").join("/")).sort()) {
|
|
203
|
+
ctx.signal?.throwIfAborted();
|
|
204
|
+
const path = posix.join(root, match);
|
|
205
|
+
const { size } = await ctx.client.call(["fs", "stat"], { path });
|
|
206
|
+
if (size > limits.maxFileBytes) {
|
|
207
|
+
skipped.push({ path: match, bytes: size });
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
const { content } = await ctx.client.call(["fs", "read"], { path });
|
|
211
|
+
sources.set(match, content);
|
|
212
|
+
}
|
|
213
|
+
const mode = input.mode ?? "runtime";
|
|
214
|
+
const result = importCycles(sources, { mode, diDecorators: input.diDecorators, signal: ctx.signal });
|
|
215
|
+
return { path: input.path, mode, ...result, acyclic: result.components.length === 0, skipped };
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=import-cycles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-cycles.js","sourceRoot":"","sources":["../../../src/procedures/lib/import-cycles.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -206,6 +206,43 @@ export declare const LibNewOutputSchema: z.ZodType<LibNewOutput>;
|
|
|
206
206
|
export declare const LibAuditOutputSchema: z.ZodType<LibAuditOutput>;
|
|
207
207
|
/** The fields of package.json that give the edges of the graph. */
|
|
208
208
|
export type DependencyKind = "dependencies" | "devDependencies" | "peerDependencies" | "optionalDependencies";
|
|
209
|
+
/** The edges that `lib.importCycles` counts: `runtime` (after the elision of TypeScript), `declared` or `raw`. */
|
|
210
|
+
export type ImportMode = "runtime" | "declared" | "raw";
|
|
211
|
+
export interface LibImportCyclesInput {
|
|
212
|
+
/** The folder of the sources, for example `packages/web/src` */
|
|
213
|
+
path: string;
|
|
214
|
+
/** The edges to count. The default is `runtime`. */
|
|
215
|
+
mode?: ImportMode | undefined;
|
|
216
|
+
/** The decorators whose class keeps the types of its constructor parameters at runtime, for example the Angular ones */
|
|
217
|
+
diDecorators?: string[] | undefined;
|
|
218
|
+
/** The glob patterns of the files to leave out. The default leaves out node_modules, declarations and tests. */
|
|
219
|
+
exclude?: string[] | undefined;
|
|
220
|
+
/** Lower limits than the defaults: the most files of a call (20000), and the largest file that it reads (1 MiB) */
|
|
221
|
+
limits?: {
|
|
222
|
+
maxFiles?: number | undefined;
|
|
223
|
+
maxFileBytes?: number | undefined;
|
|
224
|
+
} | undefined;
|
|
225
|
+
}
|
|
226
|
+
export interface LibImportCyclesOutput {
|
|
227
|
+
/** The folder of the sources */
|
|
228
|
+
path: string;
|
|
229
|
+
mode: ImportMode;
|
|
230
|
+
/** The number of files */
|
|
231
|
+
files: number;
|
|
232
|
+
/** The number of import edges between the files */
|
|
233
|
+
edges: number;
|
|
234
|
+
/** True when the graph has no cycle */
|
|
235
|
+
acyclic: boolean;
|
|
236
|
+
/** Each cycle: the files of a strongly connected component, in name order. The largest cycle comes first. */
|
|
237
|
+
components: string[][];
|
|
238
|
+
/** The number of files in a cycle */
|
|
239
|
+
filesInCycles: number;
|
|
240
|
+
/** The files larger than limits.maxFileBytes: the call did not read them */
|
|
241
|
+
skipped: Array<{
|
|
242
|
+
path: string;
|
|
243
|
+
bytes: number;
|
|
244
|
+
}>;
|
|
245
|
+
}
|
|
209
246
|
export interface LibGraphInput {
|
|
210
247
|
/** The workspace root (default: the pnpm workspace that contains client-lib) */
|
|
211
248
|
rootPath?: string | undefined;
|
|
@@ -244,6 +281,8 @@ export interface LibGraphOutput {
|
|
|
244
281
|
issue: string;
|
|
245
282
|
}>;
|
|
246
283
|
}
|
|
284
|
+
export declare const LibImportCyclesInputSchema: z.ZodType<LibImportCyclesInput>;
|
|
285
|
+
export declare const LibImportCyclesOutputSchema: z.ZodType<LibImportCyclesOutput>;
|
|
247
286
|
export declare const LibGraphInputSchema: z.ZodType<LibGraphInput>;
|
|
248
287
|
export declare const LibGraphOutputSchema: z.ZodType<LibGraphOutput>;
|
|
249
288
|
//# sourceMappingURL=types.d.ts.map
|