@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/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";
@@ -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;AAGvD,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"}
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;AAEvD,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"}
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"}
@@ -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;AAqLlK;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,eASG,CAAC;eAEb,SAAS;AAExB;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,iBAAsC,GAAG,IAAI,CAE5F"}
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]);
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
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;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAqC9G;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAuDnG"}
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 visit = (name) => {
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
- for (const next of edges.get(name) ?? []) {
32
- if (!index.has(next)) {
33
- visit(next);
34
- low.set(name, Math.min(low.get(name), low.get(next)));
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
- else if (onStack.has(next)) {
37
- low.set(name, Math.min(low.get(name), index.get(next)));
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
- if (low.get(name) === index.get(name)) {
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":"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"}
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