circle-ir 4.17.0 → 4.18.1
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/analysis/advisories.d.ts +186 -0
- package/dist/analysis/advisories.d.ts.map +1 -0
- package/dist/analysis/advisories.js +391 -0
- package/dist/analysis/advisories.js.map +1 -0
- package/dist/analysis/comment-lines.d.ts +14 -0
- package/dist/analysis/comment-lines.d.ts.map +1 -0
- package/dist/analysis/comment-lines.js +34 -0
- package/dist/analysis/comment-lines.js.map +1 -0
- package/dist/analysis/config-loader.d.ts.map +1 -1
- package/dist/analysis/config-loader.js +59 -5
- package/dist/analysis/config-loader.js.map +1 -1
- package/dist/analysis/constant-caller-gate.d.ts +2 -2
- package/dist/analysis/constant-caller-gate.d.ts.map +1 -1
- package/dist/analysis/constant-caller-gate.js +205 -29
- package/dist/analysis/constant-caller-gate.js.map +1 -1
- package/dist/analysis/constant-propagation/propagator.d.ts +4 -0
- package/dist/analysis/constant-propagation/propagator.d.ts.map +1 -1
- package/dist/analysis/constant-propagation/propagator.js +99 -0
- package/dist/analysis/constant-propagation/propagator.js.map +1 -1
- package/dist/analysis/entry-point-detection.d.ts.map +1 -1
- package/dist/analysis/entry-point-detection.js +72 -0
- package/dist/analysis/entry-point-detection.js.map +1 -1
- package/dist/analysis/interprocedural.d.ts.map +1 -1
- package/dist/analysis/interprocedural.js +75 -8
- package/dist/analysis/interprocedural.js.map +1 -1
- package/dist/analysis/maven-declared.d.ts +72 -0
- package/dist/analysis/maven-declared.d.ts.map +1 -0
- package/dist/analysis/maven-declared.js +216 -0
- package/dist/analysis/maven-declared.js.map +1 -0
- package/dist/analysis/maven-version.d.ts +28 -0
- package/dist/analysis/maven-version.d.ts.map +1 -0
- package/dist/analysis/maven-version.js +172 -0
- package/dist/analysis/maven-version.js.map +1 -0
- package/dist/analysis/passes/constant-propagation-pass.d.ts.map +1 -1
- package/dist/analysis/passes/constant-propagation-pass.js +29 -1
- package/dist/analysis/passes/constant-propagation-pass.js.map +1 -1
- package/dist/analysis/passes/cross-file-pass.d.ts.map +1 -1
- package/dist/analysis/passes/cross-file-pass.js +81 -1
- package/dist/analysis/passes/cross-file-pass.js.map +1 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.d.ts +7 -0
- package/dist/analysis/passes/csharp-sanitizer-credit.d.ts.map +1 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.js +44 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.js.map +1 -1
- package/dist/analysis/passes/insecure-cookie-pass.d.ts +2 -0
- package/dist/analysis/passes/insecure-cookie-pass.d.ts.map +1 -1
- package/dist/analysis/passes/insecure-cookie-pass.js +25 -3
- package/dist/analysis/passes/insecure-cookie-pass.js.map +1 -1
- package/dist/analysis/passes/interprocedural-pass.d.ts +11 -14
- package/dist/analysis/passes/interprocedural-pass.d.ts.map +1 -1
- package/dist/analysis/passes/interprocedural-pass.js +562 -0
- package/dist/analysis/passes/interprocedural-pass.js.map +1 -1
- package/dist/analysis/passes/language-sources-pass.d.ts +18 -1
- package/dist/analysis/passes/language-sources-pass.d.ts.map +1 -1
- package/dist/analysis/passes/language-sources-pass.js +1057 -14
- package/dist/analysis/passes/language-sources-pass.js.map +1 -1
- package/dist/analysis/passes/param-source-flow-gate-pass.d.ts.map +1 -1
- package/dist/analysis/passes/param-source-flow-gate-pass.js +66 -3
- package/dist/analysis/passes/param-source-flow-gate-pass.js.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.d.ts +44 -2
- package/dist/analysis/passes/sink-filter-pass.d.ts.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.js +690 -12
- package/dist/analysis/passes/sink-filter-pass.js.map +1 -1
- package/dist/analysis/passes/taint-propagation-pass.d.ts.map +1 -1
- package/dist/analysis/passes/taint-propagation-pass.js +133 -10
- package/dist/analysis/passes/taint-propagation-pass.js.map +1 -1
- package/dist/analysis/passes/tls-verify-disabled-pass.d.ts +18 -0
- package/dist/analysis/passes/tls-verify-disabled-pass.d.ts.map +1 -1
- package/dist/analysis/passes/tls-verify-disabled-pass.js +161 -0
- package/dist/analysis/passes/tls-verify-disabled-pass.js.map +1 -1
- package/dist/analysis/passes/weak-random-pass.d.ts +6 -0
- package/dist/analysis/passes/weak-random-pass.d.ts.map +1 -1
- package/dist/analysis/passes/weak-random-pass.js +29 -0
- package/dist/analysis/passes/weak-random-pass.js.map +1 -1
- package/dist/analysis/promote-cross-file-flows.d.ts +17 -0
- package/dist/analysis/promote-cross-file-flows.d.ts.map +1 -0
- package/dist/analysis/promote-cross-file-flows.js +32 -0
- package/dist/analysis/promote-cross-file-flows.js.map +1 -0
- package/dist/analysis/sbom.d.ts +100 -0
- package/dist/analysis/sbom.d.ts.map +1 -1
- package/dist/analysis/sbom.js +514 -3
- package/dist/analysis/sbom.js.map +1 -1
- package/dist/analysis/semver-version.d.ts +30 -0
- package/dist/analysis/semver-version.d.ts.map +1 -0
- package/dist/analysis/semver-version.js +76 -0
- package/dist/analysis/semver-version.js.map +1 -0
- package/dist/analysis/taint-matcher.d.ts +5 -0
- package/dist/analysis/taint-matcher.d.ts.map +1 -1
- package/dist/analysis/taint-matcher.js +225 -4
- package/dist/analysis/taint-matcher.js.map +1 -1
- package/dist/analyzer.d.ts +57 -0
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +69 -6
- package/dist/analyzer.js.map +1 -1
- package/dist/browser/circle-ir.js +2936 -291
- package/dist/core/circle-ir-core.cjs +634 -203
- package/dist/core/circle-ir-core.js +634 -203
- package/dist/core/extractors/dfg.js +205 -2
- package/dist/core/extractors/dfg.js.map +1 -1
- package/dist/core/extractors/ts-declaration-detail.d.ts +39 -0
- package/dist/core/extractors/ts-declaration-detail.d.ts.map +1 -0
- package/dist/core/extractors/ts-declaration-detail.js +266 -0
- package/dist/core/extractors/ts-declaration-detail.js.map +1 -0
- package/dist/graph/analysis-pass.d.ts +4 -1
- package/dist/graph/analysis-pass.d.ts.map +1 -1
- package/dist/graph/analysis-pass.js +4 -1
- package/dist/graph/analysis-pass.js.map +1 -1
- package/dist/graph-facts/dead-code.d.ts +62 -0
- package/dist/graph-facts/dead-code.d.ts.map +1 -0
- package/dist/graph-facts/dead-code.js +90 -0
- package/dist/graph-facts/dead-code.js.map +1 -0
- package/dist/graph-facts/dependency-calls.d.ts +86 -0
- package/dist/graph-facts/dependency-calls.d.ts.map +1 -0
- package/dist/graph-facts/dependency-calls.js +93 -0
- package/dist/graph-facts/dependency-calls.js.map +1 -0
- package/dist/graph-facts/index.d.ts +10 -0
- package/dist/graph-facts/index.d.ts.map +1 -0
- package/dist/graph-facts/index.js +10 -0
- package/dist/graph-facts/index.js.map +1 -0
- package/dist/graph-facts/maven-packages.d.ts +42 -0
- package/dist/graph-facts/maven-packages.d.ts.map +1 -0
- package/dist/graph-facts/maven-packages.js +133 -0
- package/dist/graph-facts/maven-packages.js.map +1 -0
- package/dist/graph-facts/reach.d.ts +203 -0
- package/dist/graph-facts/reach.d.ts.map +1 -0
- package/dist/graph-facts/reach.js +219 -0
- package/dist/graph-facts/reach.js.map +1 -0
- package/dist/graph-facts/removal-reach.d.ts +73 -0
- package/dist/graph-facts/removal-reach.d.ts.map +1 -0
- package/dist/graph-facts/removal-reach.js +64 -0
- package/dist/graph-facts/removal-reach.js.map +1 -0
- package/dist/index.d.ts +21 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -3
- package/dist/index.js.map +1 -1
- package/dist/navigation/go-graph.d.ts +68 -0
- package/dist/navigation/go-graph.d.ts.map +1 -0
- package/dist/navigation/go-graph.js +753 -0
- package/dist/navigation/go-graph.js.map +1 -0
- package/dist/navigation/index.d.ts +7 -1
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js +6 -0
- package/dist/navigation/index.js.map +1 -1
- package/dist/navigation/java-entry-tables.d.ts +43 -0
- package/dist/navigation/java-entry-tables.d.ts.map +1 -0
- package/dist/navigation/java-entry-tables.js +56 -0
- package/dist/navigation/java-entry-tables.js.map +1 -0
- package/dist/navigation/java-graph.d.ts +64 -0
- package/dist/navigation/java-graph.d.ts.map +1 -0
- package/dist/navigation/java-graph.js +466 -0
- package/dist/navigation/java-graph.js.map +1 -0
- package/dist/navigation/navigation-index.d.ts +51 -1
- package/dist/navigation/navigation-index.d.ts.map +1 -1
- package/dist/navigation/navigation-index.js +72 -0
- package/dist/navigation/navigation-index.js.map +1 -1
- package/dist/navigation/python-graph.d.ts +73 -0
- package/dist/navigation/python-graph.d.ts.map +1 -0
- package/dist/navigation/python-graph.js +867 -0
- package/dist/navigation/python-graph.js.map +1 -0
- package/dist/navigation/ts-call-edges.d.ts +193 -0
- package/dist/navigation/ts-call-edges.d.ts.map +1 -0
- package/dist/navigation/ts-call-edges.js +2089 -0
- package/dist/navigation/ts-call-edges.js.map +1 -0
- package/dist/navigation/ts-entry-tables.d.ts +88 -0
- package/dist/navigation/ts-entry-tables.d.ts.map +1 -0
- package/dist/navigation/ts-entry-tables.js +50 -0
- package/dist/navigation/ts-entry-tables.js.map +1 -0
- package/dist/path-set/branches.d.ts +52 -0
- package/dist/path-set/branches.d.ts.map +1 -0
- package/dist/path-set/branches.js +124 -0
- package/dist/path-set/branches.js.map +1 -0
- package/dist/path-set/finding-diff.d.ts +63 -0
- package/dist/path-set/finding-diff.d.ts.map +1 -0
- package/dist/path-set/finding-diff.js +150 -0
- package/dist/path-set/finding-diff.js.map +1 -0
- package/dist/path-set/index.d.ts +18 -0
- package/dist/path-set/index.d.ts.map +1 -0
- package/dist/path-set/index.js +12 -0
- package/dist/path-set/index.js.map +1 -0
- package/dist/path-set/line-diff.d.ts +19 -0
- package/dist/path-set/line-diff.d.ts.map +1 -0
- package/dist/path-set/line-diff.js +98 -0
- package/dist/path-set/line-diff.js.map +1 -0
- package/dist/path-set/path-set.d.ts +88 -0
- package/dist/path-set/path-set.d.ts.map +1 -0
- package/dist/path-set/path-set.js +716 -0
- package/dist/path-set/path-set.js.map +1 -0
- package/dist/path-set/templates.d.ts +42 -0
- package/dist/path-set/templates.d.ts.map +1 -0
- package/dist/path-set/templates.js +119 -0
- package/dist/path-set/templates.js.map +1 -0
- package/dist/path-set/types.d.ts +195 -0
- package/dist/path-set/types.d.ts.map +1 -0
- package/dist/path-set/types.js +8 -0
- package/dist/path-set/types.js.map +1 -0
- package/dist/remedy-class/index.d.ts +12 -0
- package/dist/remedy-class/index.d.ts.map +1 -0
- package/dist/remedy-class/index.js +9 -0
- package/dist/remedy-class/index.js.map +1 -0
- package/dist/remedy-class/match.d.ts +165 -0
- package/dist/remedy-class/match.d.ts.map +1 -0
- package/dist/remedy-class/match.js +705 -0
- package/dist/remedy-class/match.js.map +1 -0
- package/dist/remedy-class/output-context.d.ts +25 -0
- package/dist/remedy-class/output-context.d.ts.map +1 -0
- package/dist/remedy-class/output-context.js +150 -0
- package/dist/remedy-class/output-context.js.map +1 -0
- package/dist/remedy-class/sha256.d.ts +18 -0
- package/dist/remedy-class/sha256.d.ts.map +1 -0
- package/dist/remedy-class/sha256.js +89 -0
- package/dist/remedy-class/sha256.js.map +1 -0
- package/dist/remedy-class/table.d.ts +130 -0
- package/dist/remedy-class/table.d.ts.map +1 -0
- package/dist/remedy-class/table.js +457 -0
- package/dist/remedy-class/table.js.map +1 -0
- package/dist/resolution/cross-file.d.ts +9 -0
- package/dist/resolution/cross-file.d.ts.map +1 -1
- package/dist/resolution/cross-file.js +60 -5
- package/dist/resolution/cross-file.js.map +1 -1
- package/dist/stable-ids/builder.d.ts +20 -0
- package/dist/stable-ids/builder.d.ts.map +1 -0
- package/dist/stable-ids/builder.js +65 -0
- package/dist/stable-ids/builder.js.map +1 -0
- package/dist/stable-ids/diff.d.ts +18 -0
- package/dist/stable-ids/diff.d.ts.map +1 -0
- package/dist/stable-ids/diff.js +37 -0
- package/dist/stable-ids/diff.js.map +1 -0
- package/dist/stable-ids/go.d.ts +28 -0
- package/dist/stable-ids/go.d.ts.map +1 -0
- package/dist/stable-ids/go.js +160 -0
- package/dist/stable-ids/go.js.map +1 -0
- package/dist/stable-ids/hash.d.ts +22 -0
- package/dist/stable-ids/hash.d.ts.map +1 -0
- package/dist/stable-ids/hash.js +167 -0
- package/dist/stable-ids/hash.js.map +1 -0
- package/dist/stable-ids/index.d.ts +30 -0
- package/dist/stable-ids/index.d.ts.map +1 -0
- package/dist/stable-ids/index.js +59 -0
- package/dist/stable-ids/index.js.map +1 -0
- package/dist/stable-ids/java.d.ts +28 -0
- package/dist/stable-ids/java.d.ts.map +1 -0
- package/dist/stable-ids/java.js +224 -0
- package/dist/stable-ids/java.js.map +1 -0
- package/dist/stable-ids/moves.d.ts +87 -0
- package/dist/stable-ids/moves.d.ts.map +1 -0
- package/dist/stable-ids/moves.js +222 -0
- package/dist/stable-ids/moves.js.map +1 -0
- package/dist/stable-ids/nodes.d.ts +32 -0
- package/dist/stable-ids/nodes.d.ts.map +1 -0
- package/dist/stable-ids/nodes.js +92 -0
- package/dist/stable-ids/nodes.js.map +1 -0
- package/dist/stable-ids/normalize.d.ts +35 -0
- package/dist/stable-ids/normalize.d.ts.map +1 -0
- package/dist/stable-ids/normalize.js +174 -0
- package/dist/stable-ids/normalize.js.map +1 -0
- package/dist/stable-ids/parse-errors.d.ts +24 -0
- package/dist/stable-ids/parse-errors.d.ts.map +1 -0
- package/dist/stable-ids/parse-errors.js +46 -0
- package/dist/stable-ids/parse-errors.js.map +1 -0
- package/dist/stable-ids/python.d.ts +27 -0
- package/dist/stable-ids/python.d.ts.map +1 -0
- package/dist/stable-ids/python.js +212 -0
- package/dist/stable-ids/python.js.map +1 -0
- package/dist/stable-ids/ts-parse-errors.d.ts +27 -0
- package/dist/stable-ids/ts-parse-errors.d.ts.map +1 -0
- package/dist/stable-ids/ts-parse-errors.js +75 -0
- package/dist/stable-ids/ts-parse-errors.js.map +1 -0
- package/dist/stable-ids/types.d.ts +106 -0
- package/dist/stable-ids/types.d.ts.map +1 -0
- package/dist/stable-ids/types.js +16 -0
- package/dist/stable-ids/types.js.map +1 -0
- package/dist/stable-ids/typescript.d.ts +30 -0
- package/dist/stable-ids/typescript.d.ts.map +1 -0
- package/dist/stable-ids/typescript.js +362 -0
- package/dist/stable-ids/typescript.js.map +1 -0
- package/dist/types/config.d.ts +9 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/index.d.ts +35 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript/JavaScript declaration detail, added to `ir.types` and
|
|
3
|
+
* `ir.exports` only under `AnalyzerOptions.declarationDetail`.
|
|
4
|
+
*
|
|
5
|
+
* The default extraction leaves TypeScript declarations without their
|
|
6
|
+
* `export`, access modifiers, return types, class decorators and decorator
|
|
7
|
+
* arguments, and lists every declaration in `ir.exports`. This pass fills
|
|
8
|
+
* those in after the default extraction, matching declarations by name and
|
|
9
|
+
* line, so the default output is byte-identical when the option is off.
|
|
10
|
+
*
|
|
11
|
+
* Added, all optional or appended:
|
|
12
|
+
* - `TypeInfo.modifiers` — `export`, `default`, `abstract`, `declare`
|
|
13
|
+
* - `TypeInfo.decorators`, `MethodInfo.decorators`, `FieldInfo.decorators`,
|
|
14
|
+
* `ParameterInfo.decorators` — name plus arguments (source text, and the
|
|
15
|
+
* value of a string literal)
|
|
16
|
+
* - `MethodInfo.modifiers` gains `export`/`default` (module functions) and
|
|
17
|
+
* `public`/`private`/`protected`/`readonly`/`abstract`/`override`
|
|
18
|
+
* (members; a `#name` is `private`)
|
|
19
|
+
* - `MethodInfo.return_type` from the annotation, without the leading `:`
|
|
20
|
+
* - `FieldInfo.modifiers` gains access modifiers and `readonly`;
|
|
21
|
+
* `FieldInfo.type` from the annotation
|
|
22
|
+
*/
|
|
23
|
+
import type { Node, Tree } from 'web-tree-sitter';
|
|
24
|
+
import type { DecoratorInfo, ExportInfo, TypeInfo } from '../../types/index.js';
|
|
25
|
+
/** A decorator's name and arguments. */
|
|
26
|
+
export declare function decoratorInfo(node: Node): DecoratorInfo | null;
|
|
27
|
+
/**
|
|
28
|
+
* Fill in TypeScript/JavaScript declaration detail on the types the default
|
|
29
|
+
* extraction produced. Mutates `types` in place.
|
|
30
|
+
*/
|
|
31
|
+
export declare function enrichTsDeclarations(tree: Tree, types: TypeInfo[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* `ir.exports` for a TypeScript/JavaScript file under declaration detail: a
|
|
34
|
+
* file with ES exports exports only what it marks `export`; a member is
|
|
35
|
+
* exported with its class unless `private`, as `protected` when protected.
|
|
36
|
+
* A file without any ES export keeps every declaration (CommonJS).
|
|
37
|
+
*/
|
|
38
|
+
export declare function extractTsExports(types: readonly TypeInfo[]): ExportInfo[] | null;
|
|
39
|
+
//# sourceMappingURL=ts-declaration-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-declaration-detail.d.ts","sourceRoot":"","sources":["../../../src/core/extractors/ts-declaration-detail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAyB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAyBvG,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,GAAG,IAAI,CAoB9D;AAoGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAqCxE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAuBhF"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript/JavaScript declaration detail, added to `ir.types` and
|
|
3
|
+
* `ir.exports` only under `AnalyzerOptions.declarationDetail`.
|
|
4
|
+
*
|
|
5
|
+
* The default extraction leaves TypeScript declarations without their
|
|
6
|
+
* `export`, access modifiers, return types, class decorators and decorator
|
|
7
|
+
* arguments, and lists every declaration in `ir.exports`. This pass fills
|
|
8
|
+
* those in after the default extraction, matching declarations by name and
|
|
9
|
+
* line, so the default output is byte-identical when the option is off.
|
|
10
|
+
*
|
|
11
|
+
* Added, all optional or appended:
|
|
12
|
+
* - `TypeInfo.modifiers` — `export`, `default`, `abstract`, `declare`
|
|
13
|
+
* - `TypeInfo.decorators`, `MethodInfo.decorators`, `FieldInfo.decorators`,
|
|
14
|
+
* `ParameterInfo.decorators` — name plus arguments (source text, and the
|
|
15
|
+
* value of a string literal)
|
|
16
|
+
* - `MethodInfo.modifiers` gains `export`/`default` (module functions) and
|
|
17
|
+
* `public`/`private`/`protected`/`readonly`/`abstract`/`override`
|
|
18
|
+
* (members; a `#name` is `private`)
|
|
19
|
+
* - `MethodInfo.return_type` from the annotation, without the leading `:`
|
|
20
|
+
* - `FieldInfo.modifiers` gains access modifiers and `readonly`;
|
|
21
|
+
* `FieldInfo.type` from the annotation
|
|
22
|
+
*/
|
|
23
|
+
function named(node) {
|
|
24
|
+
const out = [];
|
|
25
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
26
|
+
const c = node.namedChild(i);
|
|
27
|
+
if (c && c.type !== 'comment')
|
|
28
|
+
out.push(c);
|
|
29
|
+
}
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
function tokens(node) {
|
|
33
|
+
const out = [];
|
|
34
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
35
|
+
const c = node.child(i);
|
|
36
|
+
if (c && !c.isNamed)
|
|
37
|
+
out.push(c.text);
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
function stringLiteral(node) {
|
|
42
|
+
if (node.type !== 'string')
|
|
43
|
+
return undefined;
|
|
44
|
+
return named(node).map(c => c.text).join('');
|
|
45
|
+
}
|
|
46
|
+
/** A decorator's name and arguments. */
|
|
47
|
+
export function decoratorInfo(node) {
|
|
48
|
+
const expr = named(node)[0];
|
|
49
|
+
if (!expr)
|
|
50
|
+
return null;
|
|
51
|
+
let callee = expr;
|
|
52
|
+
let args = [];
|
|
53
|
+
if (expr.type === 'call_expression') {
|
|
54
|
+
callee = expr.childForFieldName('function');
|
|
55
|
+
const a = expr.childForFieldName('arguments');
|
|
56
|
+
args = a ? named(a) : [];
|
|
57
|
+
}
|
|
58
|
+
if (!callee)
|
|
59
|
+
return null;
|
|
60
|
+
const name = callee.type === 'member_expression' ? callee.childForFieldName('property')?.text : callee.text;
|
|
61
|
+
if (!name)
|
|
62
|
+
return null;
|
|
63
|
+
return {
|
|
64
|
+
name,
|
|
65
|
+
arguments: args.map(a => {
|
|
66
|
+
const value = stringLiteral(a);
|
|
67
|
+
return value === undefined ? { text: a.text } : { text: a.text, value };
|
|
68
|
+
}),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function decoratorsOf(nodes) {
|
|
72
|
+
return nodes.filter(n => n.type === 'decorator').map(decoratorInfo).filter((d) => d !== null);
|
|
73
|
+
}
|
|
74
|
+
/** `export` / `default` for a declaration whose statement is exported. */
|
|
75
|
+
function exportModifiers(holder) {
|
|
76
|
+
const stmt = holder.parent?.type === 'export_statement' ? holder.parent : null;
|
|
77
|
+
if (!stmt)
|
|
78
|
+
return [];
|
|
79
|
+
return tokens(stmt).includes('default') ? ['export', 'default'] : ['export'];
|
|
80
|
+
}
|
|
81
|
+
const MEMBER_WORDS = ['readonly', 'abstract', 'override', 'static', 'declare'];
|
|
82
|
+
/** Access and other member modifiers, in source order. */
|
|
83
|
+
function memberModifiers(member) {
|
|
84
|
+
const out = [];
|
|
85
|
+
for (let i = 0; i < member.childCount; i++) {
|
|
86
|
+
const c = member.child(i);
|
|
87
|
+
if (!c)
|
|
88
|
+
continue;
|
|
89
|
+
if (c.type === 'accessibility_modifier')
|
|
90
|
+
out.push(c.text);
|
|
91
|
+
else if (c.type === 'override_modifier')
|
|
92
|
+
out.push('override');
|
|
93
|
+
else if (!c.isNamed && MEMBER_WORDS.includes(c.text))
|
|
94
|
+
out.push(c.text);
|
|
95
|
+
}
|
|
96
|
+
const name = member.childForFieldName('name') ?? member.childForFieldName('property');
|
|
97
|
+
if (name?.type === 'private_property_identifier' && !out.includes('private'))
|
|
98
|
+
out.push('private');
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
function annotationText(node) {
|
|
102
|
+
return node ? node.text.replace(/^:\s*/, '') : null;
|
|
103
|
+
}
|
|
104
|
+
function addModifiers(target, extra) {
|
|
105
|
+
for (const m of extra)
|
|
106
|
+
if (!target.includes(m))
|
|
107
|
+
target.push(m);
|
|
108
|
+
}
|
|
109
|
+
/** Exported local names from `export { a, b as c }` and `export default a`. */
|
|
110
|
+
function clauseExports(root) {
|
|
111
|
+
const names = new Set();
|
|
112
|
+
let defaultName = null;
|
|
113
|
+
for (const stmt of named(root)) {
|
|
114
|
+
if (stmt.type !== 'export_statement' || stmt.childForFieldName('source'))
|
|
115
|
+
continue;
|
|
116
|
+
const clause = named(stmt).find(c => c.type === 'export_clause');
|
|
117
|
+
for (const s of clause ? named(clause) : []) {
|
|
118
|
+
const name = s.childForFieldName('name')?.text;
|
|
119
|
+
const alias = s.childForFieldName('alias')?.text;
|
|
120
|
+
if (!name)
|
|
121
|
+
continue;
|
|
122
|
+
if (alias === 'default')
|
|
123
|
+
defaultName = name;
|
|
124
|
+
else
|
|
125
|
+
names.add(name);
|
|
126
|
+
}
|
|
127
|
+
const value = stmt.childForFieldName('value');
|
|
128
|
+
if (value?.type === 'identifier')
|
|
129
|
+
defaultName = value.text;
|
|
130
|
+
}
|
|
131
|
+
return { names, defaultName };
|
|
132
|
+
}
|
|
133
|
+
function enrichMethod(m, fn, decorators, extra) {
|
|
134
|
+
addModifiers(m.modifiers, extra);
|
|
135
|
+
const ret = fn.childForFieldName('return_type');
|
|
136
|
+
if (ret && m.return_type === null)
|
|
137
|
+
m.return_type = annotationText(ret);
|
|
138
|
+
const decs = decoratorsOf(decorators);
|
|
139
|
+
if (decs.length > 0)
|
|
140
|
+
m.decorators = decs;
|
|
141
|
+
const params = fn.childForFieldName('parameters');
|
|
142
|
+
for (const p of params ? named(params) : []) {
|
|
143
|
+
const pd = decoratorsOf(named(p));
|
|
144
|
+
if (pd.length === 0)
|
|
145
|
+
continue;
|
|
146
|
+
const line = p.startPosition.row + 1;
|
|
147
|
+
const info = m.parameters.find(x => x.line === line && !x.decorators && p.text.includes(x.name.replace(/^\.\.\./, '')));
|
|
148
|
+
if (info)
|
|
149
|
+
info.decorators = pd;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function enrichClassBody(type, body) {
|
|
153
|
+
let pending = [];
|
|
154
|
+
for (const member of named(body)) {
|
|
155
|
+
if (member.type === 'decorator') {
|
|
156
|
+
pending.push(member);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const line = member.startPosition.row + 1;
|
|
160
|
+
const nameNode = member.childForFieldName('name') ?? member.childForFieldName('property');
|
|
161
|
+
const name = nameNode?.text;
|
|
162
|
+
if (member.type === 'method_definition' && name) {
|
|
163
|
+
const m = type.methods.find(x => x.name === name && x.start_line === line);
|
|
164
|
+
if (m)
|
|
165
|
+
enrichMethod(m, member, pending, memberModifiers(member));
|
|
166
|
+
}
|
|
167
|
+
else if ((member.type === 'public_field_definition' || member.type === 'field_definition') && name) {
|
|
168
|
+
const f = type.fields.find(x => x.name === name);
|
|
169
|
+
if (f) {
|
|
170
|
+
addModifiers(f.modifiers, memberModifiers(member));
|
|
171
|
+
if (f.type === null)
|
|
172
|
+
f.type = annotationText(member.childForFieldName('type'));
|
|
173
|
+
const decs = decoratorsOf(pending);
|
|
174
|
+
if (decs.length > 0)
|
|
175
|
+
f.decorators = decs;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
pending = [];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Fill in TypeScript/JavaScript declaration detail on the types the default
|
|
183
|
+
* extraction produced. Mutates `types` in place.
|
|
184
|
+
*/
|
|
185
|
+
export function enrichTsDeclarations(tree, types) {
|
|
186
|
+
const root = tree.rootNode;
|
|
187
|
+
const { names, defaultName } = clauseExports(root);
|
|
188
|
+
const clauseMods = (name) => name === defaultName ? ['export', 'default'] : names.has(name) ? ['export'] : [];
|
|
189
|
+
const visit = (node) => {
|
|
190
|
+
const t = node.type;
|
|
191
|
+
if (t === 'class_declaration' || t === 'abstract_class_declaration' || t === 'interface_declaration') {
|
|
192
|
+
const line = node.startPosition.row + 1;
|
|
193
|
+
const name = node.childForFieldName('name')?.text;
|
|
194
|
+
const type = types.find(x => x.name === name && x.start_line === line);
|
|
195
|
+
if (type && name) {
|
|
196
|
+
const mods = [...exportModifiers(node), ...clauseMods(name)];
|
|
197
|
+
if (t === 'abstract_class_declaration')
|
|
198
|
+
mods.push('abstract');
|
|
199
|
+
if (node.parent?.type === 'ambient_declaration')
|
|
200
|
+
mods.push('declare');
|
|
201
|
+
type.modifiers = [...new Set(mods)];
|
|
202
|
+
const decs = decoratorsOf([...(node.parent?.type === 'export_statement' ? named(node.parent) : []), ...named(node)]);
|
|
203
|
+
if (decs.length > 0)
|
|
204
|
+
type.decorators = decs;
|
|
205
|
+
const body = node.childForFieldName('body');
|
|
206
|
+
if (body && t !== 'interface_declaration')
|
|
207
|
+
enrichClassBody(type, body);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else if (t === 'function_declaration' || t === 'generator_function_declaration') {
|
|
211
|
+
const module = types.find(x => x.name === '<module>');
|
|
212
|
+
const name = node.childForFieldName('name')?.text;
|
|
213
|
+
const m = module?.methods.find(x => x.name === name && x.start_line === node.startPosition.row + 1);
|
|
214
|
+
if (m && name)
|
|
215
|
+
enrichMethod(m, node, [], [...exportModifiers(node), ...clauseMods(name)]);
|
|
216
|
+
}
|
|
217
|
+
else if (t === 'variable_declarator') {
|
|
218
|
+
const value = node.childForFieldName('value');
|
|
219
|
+
const name = node.childForFieldName('name')?.text;
|
|
220
|
+
const decl = node.parent;
|
|
221
|
+
const module = types.find(x => x.name === '<module>');
|
|
222
|
+
const m = module?.methods.find(x => x.name === name && x.start_line === node.startPosition.row + 1);
|
|
223
|
+
if (m && name && value?.type === 'arrow_function' && decl)
|
|
224
|
+
enrichMethod(m, value, [], [...exportModifiers(decl), ...clauseMods(name)]);
|
|
225
|
+
}
|
|
226
|
+
for (const c of named(node))
|
|
227
|
+
visit(c);
|
|
228
|
+
};
|
|
229
|
+
visit(root);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* `ir.exports` for a TypeScript/JavaScript file under declaration detail: a
|
|
233
|
+
* file with ES exports exports only what it marks `export`; a member is
|
|
234
|
+
* exported with its class unless `private`, as `protected` when protected.
|
|
235
|
+
* A file without any ES export keeps every declaration (CommonJS).
|
|
236
|
+
*/
|
|
237
|
+
export function extractTsExports(types) {
|
|
238
|
+
const esm = types.some(t => t.modifiers?.includes('export') || t.methods.some(m => m.modifiers.includes('export')));
|
|
239
|
+
if (!esm)
|
|
240
|
+
return null;
|
|
241
|
+
const out = [];
|
|
242
|
+
const visibility = (mods) => mods.includes('private') ? null : mods.includes('protected') ? 'protected' : 'public';
|
|
243
|
+
for (const t of types) {
|
|
244
|
+
if (t.name === '<module>') {
|
|
245
|
+
for (const m of t.methods)
|
|
246
|
+
if (m.modifiers.includes('export'))
|
|
247
|
+
out.push({ symbol: m.name, kind: 'method', visibility: 'public' });
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
if (!t.modifiers?.includes('export'))
|
|
251
|
+
continue;
|
|
252
|
+
out.push({ symbol: t.name, kind: t.kind === 'enum' ? 'class' : t.kind, visibility: 'public' });
|
|
253
|
+
for (const m of t.methods) {
|
|
254
|
+
const v = visibility(m.modifiers);
|
|
255
|
+
if (v)
|
|
256
|
+
out.push({ symbol: `${t.name}.${m.name}`, kind: 'method', visibility: v });
|
|
257
|
+
}
|
|
258
|
+
for (const f of t.fields) {
|
|
259
|
+
const v = visibility(f.modifiers);
|
|
260
|
+
if (v)
|
|
261
|
+
out.push({ symbol: `${t.name}.${f.name}`, kind: 'field', visibility: v });
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return out;
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=ts-declaration-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-declaration-detail.js","sourceRoot":"","sources":["../../../src/core/extractors/ts-declaration-detail.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,6 +79,9 @@ export interface PipelineRunResult {
|
|
|
79
79
|
export declare class AnalysisPipeline {
|
|
80
80
|
private readonly passes;
|
|
81
81
|
add<T>(pass: AnalysisPass<T>): this;
|
|
82
|
-
run(graph: CodeGraph, code: string, language: string, config: TaintConfig, resources?: ReadonlyMap<string, string
|
|
82
|
+
run(graph: CodeGraph, code: string, language: string, config: TaintConfig, resources?: ReadonlyMap<string, string>, limit?: {
|
|
83
|
+
deadline: number;
|
|
84
|
+
onExpired: (phase: string) => Error;
|
|
85
|
+
}): PipelineRunResult;
|
|
83
86
|
}
|
|
84
87
|
//# sourceMappingURL=analysis-pass.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-pass.d.ts","sourceRoot":"","sources":["../../src/graph/analysis-pass.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjD;;;OAGG;IACH,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;IAElC,oEAAoE;IACpE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAErC;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAEvC;;;;;;;;OAQG;IACH,WAAW,CAAC,IAAI,SAAS,WAAW,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,OAAO,GAAG,OAAO;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;CACpC;AAED,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAE7C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAGlC;IAED,GAAG,CACD,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"analysis-pass.d.ts","sourceRoot":"","sources":["../../src/graph/analysis-pass.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjD;;;OAGG;IACH,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;IAElC,oEAAoE;IACpE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAErC;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAEvC;;;;;;;;OAQG;IACH,WAAW,CAAC,IAAI,SAAS,WAAW,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,OAAO,GAAG,OAAO;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;CACpC;AAED,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAE7C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAGlC;IAED,GAAG,CACD,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,KAAK,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAA;KAAE,GAChE,iBAAiB,CAqDnB;CACF"}
|
|
@@ -20,7 +20,7 @@ export class AnalysisPipeline {
|
|
|
20
20
|
this.passes.push(pass);
|
|
21
21
|
return this;
|
|
22
22
|
}
|
|
23
|
-
run(graph, code, language, config, resources) {
|
|
23
|
+
run(graph, code, language, config, resources, limit) {
|
|
24
24
|
const results = new Map();
|
|
25
25
|
const findings = [];
|
|
26
26
|
const context = {
|
|
@@ -50,6 +50,9 @@ export class AnalysisPipeline {
|
|
|
50
50
|
// — browser-safe (no `process` access). Used by #141 investigation.
|
|
51
51
|
const timingEnabled = globalThis.__circleIrPassTiming === true;
|
|
52
52
|
for (const pass of this.passes) {
|
|
53
|
+
// cognium-dev#1007: opt-in per-file time limit, checked between passes.
|
|
54
|
+
if (limit && Date.now() > limit.deadline)
|
|
55
|
+
throw limit.onExpired(pass.name);
|
|
53
56
|
if (timingEnabled) {
|
|
54
57
|
// eslint-disable-next-line no-console
|
|
55
58
|
console.error(`[pass-start] ${pass.name} file=${graph.ir.meta.file}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-pass.js","sourceRoot":"","sources":["../../src/graph/analysis-pass.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwEH;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IACV,MAAM,GAAmB,EAAE,CAAC;IAE7C,GAAG,CAAI,IAAqB;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CACD,KAAgB,EAChB,IAAY,EACZ,QAAgB,EAChB,MAAmB,EACnB,SAAuC;
|
|
1
|
+
{"version":3,"file":"analysis-pass.js","sourceRoot":"","sources":["../../src/graph/analysis-pass.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwEH;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IACV,MAAM,GAAmB,EAAE,CAAC;IAE7C,GAAG,CAAI,IAAqB;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CACD,KAAgB,EAChB,IAAY,EACZ,QAAgB,EAChB,MAAmB,EACnB,SAAuC,EACvC,KAAiE;QAEjE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC3C,MAAM,QAAQ,GAAkB,EAAE,CAAC;QAEnC,MAAM,OAAO,GAAgB;YAC3B,KAAK;YACL,IAAI;YACJ,QAAQ;YACR,MAAM;YACN,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,SAAS,CAAI,QAAgB;gBAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,8CAA8C,CAChE,CAAC;gBACJ,CAAC;gBACD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAM,CAAC;YACpC,CAAC;YACD,SAAS,CAAC,QAAgB;gBACxB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YACD,UAAU,CAAC,OAAoB;gBAC7B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;YACD,WAAW;gBACT,OAAO,QAAQ,CAAC;YAClB,CAAC;SACF,CAAC;QAEF,4CAA4C;QAC5C,4EAA4E;QAC5E,oEAAoE;QACpE,MAAM,aAAa,GAChB,UAAiD,CAAC,oBAAoB,KAAK,IAAI,CAAC;QAEnF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,wEAAwE;YACxE,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ;gBAAE,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3E,IAAI,aAAa,EAAE,CAAC;gBAClB,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC3B,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,IAAI,EAAE,WAAW,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dead-code answer (`dead-code@0.1`): per declaration, whether any
|
|
3
|
+
* entry point can reach it, how strongly, and whether a test does.
|
|
4
|
+
*
|
|
5
|
+
* - `live` — a strong path exists.
|
|
6
|
+
* - `may-be-live` — no strong path, but a weak path, an unresolved site that
|
|
7
|
+
* could reach it, or a file that did not parse and could reach it (its
|
|
8
|
+
* calls are missing: anything in it, in a module it imports, or reachable
|
|
9
|
+
* from those over any edge).
|
|
10
|
+
* `reasons` says which; the paths and sites are on the fact.
|
|
11
|
+
* - `dead` — none of these. Only this verdict claims anything.
|
|
12
|
+
*
|
|
13
|
+
* Test reach is computed separately from `test` roots: code that only tests
|
|
14
|
+
* reach is dead product code (`reachedByTest` tells the caller which tests
|
|
15
|
+
* exercise it). Declarations in test files, and declarations that exist only
|
|
16
|
+
* for the type checker, are left out of the answer.
|
|
17
|
+
*/
|
|
18
|
+
import type { EntryKind } from '../navigation/ts-entry-tables.js';
|
|
19
|
+
import { ReachGraph, type PartialFile, type ReachFact, type ReachInput } from './reach.js';
|
|
20
|
+
export declare const DEAD_CODE_SCHEME: 'dead-code@0.1';
|
|
21
|
+
export type DeadCodeVerdict = 'live' | 'may-be-live' | 'dead';
|
|
22
|
+
export type MayBeLiveReason = 'weak-path' | 'unresolved-sites' | 'partial-files';
|
|
23
|
+
export interface DeadCodeFact extends ReachFact {
|
|
24
|
+
verdict: DeadCodeVerdict;
|
|
25
|
+
reasons: MayBeLiveReason[];
|
|
26
|
+
reachedByTest: boolean;
|
|
27
|
+
/** The test entry whose walk first reached it (shortest), when `reachedByTest`. */
|
|
28
|
+
test?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface DeadCodeOptions {
|
|
31
|
+
/** Product roots. Default: every entry kind except `test`. */
|
|
32
|
+
rootKinds?: readonly EntryKind[];
|
|
33
|
+
/** Files that are tests; their declarations are not reported. Default: none beyond `testFiles` of the input. */
|
|
34
|
+
testFile?: RegExp;
|
|
35
|
+
/** Declaration ids that exist only for the type checker; not reported. */
|
|
36
|
+
typeOnly?: readonly string[];
|
|
37
|
+
/** Most unresolved sites listed per declaration. Default 5. */
|
|
38
|
+
maxUnresolved?: number;
|
|
39
|
+
}
|
|
40
|
+
export interface DeadCodeResult {
|
|
41
|
+
scheme: typeof DEAD_CODE_SCHEME;
|
|
42
|
+
ids: 'ids@0.1';
|
|
43
|
+
rootKinds: EntryKind[];
|
|
44
|
+
partial: string[];
|
|
45
|
+
/** One row per `partial` file: where its first blocking parse error is. */
|
|
46
|
+
partialFiles: PartialFile[];
|
|
47
|
+
facts: DeadCodeFact[];
|
|
48
|
+
summary: Record<DeadCodeVerdict, number> & {
|
|
49
|
+
reachedByTestOnly: number;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export declare function deadCode(input: ReachInput & {
|
|
53
|
+
typeOnly?: readonly string[];
|
|
54
|
+
}, options?: DeadCodeOptions): DeadCodeResult;
|
|
55
|
+
/**
|
|
56
|
+
* What files that did not parse could reach: their own declarations, the
|
|
57
|
+
* modules they import or load, and everything reachable from those over any
|
|
58
|
+
* edge. A missing call site can only run what its file can name, so the rest
|
|
59
|
+
* of the tree keeps its verdict.
|
|
60
|
+
*/
|
|
61
|
+
export declare function partialScope(g: ReachGraph, input: ReachInput): Set<string>;
|
|
62
|
+
//# sourceMappingURL=dead-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-code.d.ts","sourceRoot":"","sources":["../../src/graph-facts/dead-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAmB,UAAU,EAA+B,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzI,eAAO,MAAM,gBAAgB,EAAG,eAAwB,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAEjF,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACjC,gHAAgH;IAChH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAChC,GAAG,EAAE,SAAS,CAAC;IACf,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2EAA2E;IAC3E,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EAAE,OAAO,GAAE,eAAoB,GAAG,cAAc,CAmC5H;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAc1E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dead-code answer (`dead-code@0.1`): per declaration, whether any
|
|
3
|
+
* entry point can reach it, how strongly, and whether a test does.
|
|
4
|
+
*
|
|
5
|
+
* - `live` — a strong path exists.
|
|
6
|
+
* - `may-be-live` — no strong path, but a weak path, an unresolved site that
|
|
7
|
+
* could reach it, or a file that did not parse and could reach it (its
|
|
8
|
+
* calls are missing: anything in it, in a module it imports, or reachable
|
|
9
|
+
* from those over any edge).
|
|
10
|
+
* `reasons` says which; the paths and sites are on the fact.
|
|
11
|
+
* - `dead` — none of these. Only this verdict claims anything.
|
|
12
|
+
*
|
|
13
|
+
* Test reach is computed separately from `test` roots: code that only tests
|
|
14
|
+
* reach is dead product code (`reachedByTest` tells the caller which tests
|
|
15
|
+
* exercise it). Declarations in test files, and declarations that exist only
|
|
16
|
+
* for the type checker, are left out of the answer.
|
|
17
|
+
*/
|
|
18
|
+
import { ALL_ENTRY_KINDS, ReachGraph, reach, reachedIds, walkFrom } from './reach.js';
|
|
19
|
+
export const DEAD_CODE_SCHEME = 'dead-code@0.1';
|
|
20
|
+
export function deadCode(input, options = {}) {
|
|
21
|
+
const product = reach(input, { rootKinds: options.rootKinds ?? ALL_ENTRY_KINDS.filter(k => k !== 'test'), maxUnresolved: options.maxUnresolved });
|
|
22
|
+
// Test reach: every path class counts — a test that reaches it only through an inferred call still exercises it.
|
|
23
|
+
const g = new ReachGraph(input);
|
|
24
|
+
const testRoots = input.entries.filter(e => e.kind === 'test');
|
|
25
|
+
const testVisits = walkFrom(g, testRoots.map(e => ({ id: e.id, weak: e.certainty === 'inferred' })));
|
|
26
|
+
const byTest = reachedIds(testVisits);
|
|
27
|
+
const firstTest = (id) => {
|
|
28
|
+
const v = testVisits.get(`0${id}`) ?? testVisits.get(`1${id}`);
|
|
29
|
+
return v ? testRoots[v.root].id : undefined;
|
|
30
|
+
};
|
|
31
|
+
const typeOnly = new Set([...(options.typeOnly ?? []), ...(input.typeOnly ?? [])]);
|
|
32
|
+
const testFiles = new Set(input.entries.filter(e => e.kind === 'test').map(e => e.file));
|
|
33
|
+
const isTestFile = (file) => testFiles.has(file) || (options.testFile?.test(file) ?? false);
|
|
34
|
+
const partialReach = partialScope(g, input);
|
|
35
|
+
const facts = [];
|
|
36
|
+
const summary = { live: 0, 'may-be-live': 0, dead: 0, reachedByTestOnly: 0 };
|
|
37
|
+
for (const f of product.facts) {
|
|
38
|
+
if (typeOnly.has(f.id) || isTestFile(f.file))
|
|
39
|
+
continue;
|
|
40
|
+
const reasons = [];
|
|
41
|
+
if (!f.strong) {
|
|
42
|
+
if (f.weak)
|
|
43
|
+
reasons.push('weak-path');
|
|
44
|
+
if (f.unresolvedCount > 0)
|
|
45
|
+
reasons.push('unresolved-sites');
|
|
46
|
+
if (partialReach.has(f.id))
|
|
47
|
+
reasons.push('partial-files');
|
|
48
|
+
}
|
|
49
|
+
const verdict = f.strong ? 'live' : reasons.length > 0 ? 'may-be-live' : 'dead';
|
|
50
|
+
const reachedByTest = byTest.has(f.id);
|
|
51
|
+
const fact = { ...f, verdict, reasons, reachedByTest };
|
|
52
|
+
const t = reachedByTest ? firstTest(f.id) : undefined;
|
|
53
|
+
if (t)
|
|
54
|
+
fact.test = t;
|
|
55
|
+
facts.push(fact);
|
|
56
|
+
summary[verdict]++;
|
|
57
|
+
if (verdict === 'dead' && reachedByTest)
|
|
58
|
+
summary.reachedByTestOnly++;
|
|
59
|
+
}
|
|
60
|
+
return { scheme: DEAD_CODE_SCHEME, ids: 'ids@0.1', rootKinds: product.rootKinds, partial: product.partial, partialFiles: product.partialFiles, facts, summary };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* What files that did not parse could reach: their own declarations, the
|
|
64
|
+
* modules they import or load, and everything reachable from those over any
|
|
65
|
+
* edge. A missing call site can only run what its file can name, so the rest
|
|
66
|
+
* of the tree keeps its verdict.
|
|
67
|
+
*/
|
|
68
|
+
export function partialScope(g, input) {
|
|
69
|
+
if (input.partial.length === 0)
|
|
70
|
+
return new Set();
|
|
71
|
+
const partial = new Set(input.partial);
|
|
72
|
+
const declFile = new Map();
|
|
73
|
+
for (const f of input.files)
|
|
74
|
+
for (const d of f.decls)
|
|
75
|
+
declFile.set(d.id, f.file);
|
|
76
|
+
const seedFiles = new Set(partial);
|
|
77
|
+
for (const i of [...(input.imports ?? []), ...(input.loads ?? [])]) {
|
|
78
|
+
const from = declFile.get(i.from);
|
|
79
|
+
const to = declFile.get(i.to);
|
|
80
|
+
if (from && to && partial.has(from))
|
|
81
|
+
seedFiles.add(to);
|
|
82
|
+
}
|
|
83
|
+
const seeds = [];
|
|
84
|
+
for (const f of input.files)
|
|
85
|
+
if (seedFiles.has(f.file))
|
|
86
|
+
for (const d of f.decls)
|
|
87
|
+
seeds.push({ id: d.id, weak: true });
|
|
88
|
+
return reachedIds(walkFrom(g, seeds));
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=dead-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-code.js","sourceRoot":"","sources":["../../src/graph-facts/dead-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calls into one dependency and the tests that reach them
|
|
3
|
+
* (`dependency-calls@0.1`): for a dependency bump, every call site in the
|
|
4
|
+
* subject that lands on the library, and which test entry points reach the
|
|
5
|
+
* method that makes it.
|
|
6
|
+
*
|
|
7
|
+
* - **Calls**: `external` unresolved sites whose receiver type (the
|
|
8
|
+
* constructed type, or a static import's owner) is in one of the
|
|
9
|
+
* library's packages. The caller gives the packages, or a Maven
|
|
10
|
+
* `groupId:artifactId` (with the resolved jar's bytes, or a fallback
|
|
11
|
+
* table row): an artifact's packages are not readable from the subject's
|
|
12
|
+
* sources (`maven-packages.ts`).
|
|
13
|
+
* - **Tests**: each `test` entry is walked on its own over the reach core's
|
|
14
|
+
* graph. A test reaches a call **strongly** when its path to the calling
|
|
15
|
+
* method uses only strong edges, **weakly** otherwise.
|
|
16
|
+
* - **covered**: every call is reached strongly by at least one test, and no
|
|
17
|
+
* file is partial.
|
|
18
|
+
* - **unattributed**: `external` sites with no receiver type, or a bare
|
|
19
|
+
* simple name no import qualifies (other than `java.lang`). They could be
|
|
20
|
+
* calls into the library; a merge rule that relies on there being no other
|
|
21
|
+
* calls reads this count too.
|
|
22
|
+
*
|
|
23
|
+
* Experimental and opt-in; Java only for now (`java-graph@0.1` carries the
|
|
24
|
+
* receiver types).
|
|
25
|
+
*/
|
|
26
|
+
import type { UnresolvedCall } from '../navigation/ts-call-edges.js';
|
|
27
|
+
import { type MavenPackageSource } from './maven-packages.js';
|
|
28
|
+
import { type PartialFile, type ReachInput, type ReachSite } from './reach.js';
|
|
29
|
+
export declare const DEPENDENCY_CALLS_SCHEME: 'dependency-calls@0.1';
|
|
30
|
+
export type DependencyCallsOptions = {
|
|
31
|
+
/** The library's packages, e.g. `com.fasterxml.jackson`; a package covers its subpackages. */
|
|
32
|
+
packages: readonly string[];
|
|
33
|
+
} | {
|
|
34
|
+
/** Maven `groupId:artifactId` (a version, if given, is ignored). */
|
|
35
|
+
artifact: string;
|
|
36
|
+
/** The resolved jar's bytes; without it the fallback table decides. Throws `UnknownArtifact` if neither does. */
|
|
37
|
+
jar?: Uint8Array;
|
|
38
|
+
};
|
|
39
|
+
export interface DependencyCallTest {
|
|
40
|
+
/** The test entry's declaration id. */
|
|
41
|
+
id: string;
|
|
42
|
+
file: string;
|
|
43
|
+
line: number;
|
|
44
|
+
class: 'strong' | 'weak';
|
|
45
|
+
}
|
|
46
|
+
export interface DependencyCall {
|
|
47
|
+
/** The calling declaration's id. */
|
|
48
|
+
from: string;
|
|
49
|
+
site: ReachSite;
|
|
50
|
+
methodName: string;
|
|
51
|
+
/** The library type the call lands on. */
|
|
52
|
+
receiver: string;
|
|
53
|
+
/** Tests reaching `from`, strong first, then by file and line. */
|
|
54
|
+
tests: DependencyCallTest[];
|
|
55
|
+
}
|
|
56
|
+
export interface DependencyUnattributedSite {
|
|
57
|
+
from: string;
|
|
58
|
+
site: ReachSite;
|
|
59
|
+
methodName: string;
|
|
60
|
+
/** The unqualified receiver type, when the graph has one. */
|
|
61
|
+
receiver?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface DependencyCallsResult {
|
|
64
|
+
scheme: typeof DEPENDENCY_CALLS_SCHEME;
|
|
65
|
+
ids: 'ids@0.1';
|
|
66
|
+
/** `groupId:artifactId` when the options named one. */
|
|
67
|
+
artifact?: string;
|
|
68
|
+
packages: string[];
|
|
69
|
+
/** Where `packages` came from: the caller, the jar or the fallback table. */
|
|
70
|
+
packageSource: 'given' | MavenPackageSource;
|
|
71
|
+
calls: DependencyCall[];
|
|
72
|
+
/** Calls with no strong test path. */
|
|
73
|
+
uncovered: number;
|
|
74
|
+
/** Every call reached strongly by a test, and no partial file. */
|
|
75
|
+
covered: boolean;
|
|
76
|
+
/** `external` sites the library cannot be ruled in or out for: no receiver type, or an unqualified one. */
|
|
77
|
+
unattributed: number;
|
|
78
|
+
/** Those sites, by file, line and column (`unattributed` is their count). */
|
|
79
|
+
unattributedSites: DependencyUnattributedSite[];
|
|
80
|
+
partial: string[];
|
|
81
|
+
partialFiles: PartialFile[];
|
|
82
|
+
}
|
|
83
|
+
export declare function dependencyCalls(input: Omit<ReachInput, 'unresolved'> & {
|
|
84
|
+
unresolved: readonly UnresolvedCall[];
|
|
85
|
+
}, options: DependencyCallsOptions): DependencyCallsResult;
|
|
86
|
+
//# sourceMappingURL=dependency-calls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-calls.d.ts","sourceRoot":"","sources":["../../src/graph-facts/dependency-calls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAA4C,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzH,eAAO,MAAM,uBAAuB,EAAG,sBAA+B,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAC9B;IACE,8FAA8F;IAC9F,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,GACD;IACE,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,iHAAiH;IACjH,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB,CAAC;AAEN,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,uBAAuB,CAAC;IACvC,GAAG,EAAE,SAAS,CAAC;IACf,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,6EAA6E;IAC7E,aAAa,EAAE,OAAO,GAAG,kBAAkB,CAAC;IAC5C,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,2GAA2G;IAC3G,YAAY,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,iBAAiB,EAAE,0BAA0B,EAAE,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAYD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG;IAAE,UAAU,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,EACjF,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAyDvB"}
|