@defai.digital/ax-cli 3.15.21 → 3.15.24
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/README.md +22 -2
- package/dist/agent/agent-executor.d.ts +1 -1
- package/dist/agent/agent-executor.js +15 -17
- package/dist/agent/agent-executor.js.map +1 -1
- package/dist/agent/execution/tool-executor.d.ts +6 -0
- package/dist/agent/execution/tool-executor.js +16 -1
- package/dist/agent/execution/tool-executor.js.map +1 -1
- package/dist/agent/llm-agent.js +91 -22
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/parallel-tools.d.ts +65 -0
- package/dist/agent/parallel-tools.js +146 -0
- package/dist/agent/parallel-tools.js.map +1 -0
- package/dist/llm/tools.js +1 -1
- package/dist/llm/tools.js.map +1 -1
- package/dist/ui/components/chat-interface.js +14 -0
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/hooks/use-input-handler.js +2 -2
- package/dist/ui/hooks/use-input-handler.js.map +1 -1
- package/dist/ui/utils/image-handler.js +8 -5
- package/dist/ui/utils/image-handler.js.map +1 -1
- package/package.json +1 -1
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.d.ts +0 -29
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js +0 -103
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js.map +0 -1
- package/dist/analyzers/architecture/architecture-analyzer.d.ts +0 -58
- package/dist/analyzers/architecture/architecture-analyzer.js +0 -276
- package/dist/analyzers/architecture/architecture-analyzer.js.map +0 -1
- package/dist/analyzers/architecture/index.d.ts +0 -12
- package/dist/analyzers/architecture/index.js +0 -14
- package/dist/analyzers/architecture/index.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/base-detector.d.ts +0 -27
- package/dist/analyzers/architecture/pattern-detectors/base-detector.js +0 -31
- package/dist/analyzers/architecture/pattern-detectors/base-detector.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.d.ts +0 -11
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js +0 -57
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.d.ts +0 -11
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js +0 -43
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js.map +0 -1
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.d.ts +0 -11
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.js +0 -49
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.js.map +0 -1
- package/dist/analyzers/architecture/project-structure-scanner.d.ts +0 -54
- package/dist/analyzers/architecture/project-structure-scanner.js +0 -204
- package/dist/analyzers/architecture/project-structure-scanner.js.map +0 -1
- package/dist/analyzers/ast/index.d.ts +0 -13
- package/dist/analyzers/ast/index.js +0 -16
- package/dist/analyzers/ast/index.js.map +0 -1
- package/dist/analyzers/ast/language-parser.d.ts +0 -59
- package/dist/analyzers/ast/language-parser.js +0 -107
- package/dist/analyzers/ast/language-parser.js.map +0 -1
- package/dist/analyzers/ast/multi-language-parser.d.ts +0 -79
- package/dist/analyzers/ast/multi-language-parser.js +0 -157
- package/dist/analyzers/ast/multi-language-parser.js.map +0 -1
- package/dist/analyzers/ast/node-helpers.d.ts +0 -81
- package/dist/analyzers/ast/node-helpers.js +0 -128
- package/dist/analyzers/ast/node-helpers.js.map +0 -1
- package/dist/analyzers/ast/parser.d.ts +0 -60
- package/dist/analyzers/ast/parser.js +0 -305
- package/dist/analyzers/ast/parser.js.map +0 -1
- package/dist/analyzers/ast/traverser.d.ts +0 -67
- package/dist/analyzers/ast/traverser.js +0 -156
- package/dist/analyzers/ast/traverser.js.map +0 -1
- package/dist/analyzers/ast/types.d.ts +0 -107
- package/dist/analyzers/ast/types.js +0 -7
- package/dist/analyzers/ast/types.js.map +0 -1
- package/dist/analyzers/best-practices/base-rule.d.ts +0 -45
- package/dist/analyzers/best-practices/base-rule.js +0 -45
- package/dist/analyzers/best-practices/base-rule.js.map +0 -1
- package/dist/analyzers/best-practices/best-practice-validator.d.ts +0 -35
- package/dist/analyzers/best-practices/best-practice-validator.js +0 -181
- package/dist/analyzers/best-practices/best-practice-validator.js.map +0 -1
- package/dist/analyzers/best-practices/index.d.ts +0 -10
- package/dist/analyzers/best-practices/index.js +0 -11
- package/dist/analyzers/best-practices/index.js.map +0 -1
- package/dist/analyzers/best-practices/rules/index.d.ts +0 -7
- package/dist/analyzers/best-practices/rules/index.js +0 -56
- package/dist/analyzers/best-practices/rules/index.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js +0 -41
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.d.ts +0 -27
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.js +0 -76
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/index.d.ts +0 -15
- package/dist/analyzers/best-practices/rules/typescript/index.js +0 -16
- package/dist/analyzers/best-practices/rules/typescript/index.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.d.ts +0 -18
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.js +0 -25
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.js +0 -27
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.d.ts +0 -18
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js +0 -39
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +0 -38
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +0 -38
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +0 -35
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +0 -36
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +0 -1
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.d.ts +0 -17
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js +0 -27
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js.map +0 -1
- package/dist/analyzers/best-practices/types.d.ts +0 -86
- package/dist/analyzers/best-practices/types.js +0 -7
- package/dist/analyzers/best-practices/types.js.map +0 -1
- package/dist/analyzers/cache/analysis-cache.d.ts +0 -41
- package/dist/analyzers/cache/analysis-cache.js +0 -84
- package/dist/analyzers/cache/analysis-cache.js.map +0 -1
- package/dist/analyzers/code-smells/base-smell-detector.d.ts +0 -30
- package/dist/analyzers/code-smells/base-smell-detector.js +0 -44
- package/dist/analyzers/code-smells/base-smell-detector.js.map +0 -1
- package/dist/analyzers/code-smells/code-smell-analyzer.d.ts +0 -30
- package/dist/analyzers/code-smells/code-smell-analyzer.js +0 -167
- package/dist/analyzers/code-smells/code-smell-analyzer.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/data-clumps-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/data-clumps-detector.js +0 -64
- package/dist/analyzers/code-smells/detectors/data-clumps-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/dead-code-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/dead-code-detector.js +0 -58
- package/dist/analyzers/code-smells/detectors/dead-code-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +0 -69
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/feature-envy-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/feature-envy-detector.js +0 -70
- package/dist/analyzers/code-smells/detectors/feature-envy-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.d.ts +0 -11
- package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js +0 -59
- package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/large-class-detector.d.ts +0 -13
- package/dist/analyzers/code-smells/detectors/large-class-detector.js +0 -61
- package/dist/analyzers/code-smells/detectors/large-class-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/long-method-detector.d.ts +0 -12
- package/dist/analyzers/code-smells/detectors/long-method-detector.js +0 -55
- package/dist/analyzers/code-smells/detectors/long-method-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.d.ts +0 -12
- package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js +0 -53
- package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/magic-numbers-detector.d.ts +0 -12
- package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js +0 -56
- package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js.map +0 -1
- package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.d.ts +0 -13
- package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js +0 -77
- package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js.map +0 -1
- package/dist/analyzers/code-smells/index.d.ts +0 -16
- package/dist/analyzers/code-smells/index.js +0 -19
- package/dist/analyzers/code-smells/index.js.map +0 -1
- package/dist/analyzers/code-smells/types.d.ts +0 -82
- package/dist/analyzers/code-smells/types.js +0 -30
- package/dist/analyzers/code-smells/types.js.map +0 -1
- package/dist/analyzers/dependency/circular-detector.d.ts +0 -17
- package/dist/analyzers/dependency/circular-detector.js +0 -73
- package/dist/analyzers/dependency/circular-detector.js.map +0 -1
- package/dist/analyzers/dependency/coupling-calculator.d.ts +0 -24
- package/dist/analyzers/dependency/coupling-calculator.js +0 -86
- package/dist/analyzers/dependency/coupling-calculator.js.map +0 -1
- package/dist/analyzers/dependency/dependency-analyzer.d.ts +0 -44
- package/dist/analyzers/dependency/dependency-analyzer.js +0 -218
- package/dist/analyzers/dependency/dependency-analyzer.js.map +0 -1
- package/dist/analyzers/dependency/dependency-graph.d.ts +0 -57
- package/dist/analyzers/dependency/dependency-graph.js +0 -198
- package/dist/analyzers/dependency/dependency-graph.js.map +0 -1
- package/dist/analyzers/dependency/index.d.ts +0 -8
- package/dist/analyzers/dependency/index.js +0 -8
- package/dist/analyzers/dependency/index.js.map +0 -1
- package/dist/analyzers/dependency/types.d.ts +0 -105
- package/dist/analyzers/dependency/types.js +0 -5
- package/dist/analyzers/dependency/types.js.map +0 -1
- package/dist/analyzers/errors.d.ts +0 -51
- package/dist/analyzers/errors.js +0 -79
- package/dist/analyzers/errors.js.map +0 -1
- package/dist/analyzers/git/churn-calculator.d.ts +0 -36
- package/dist/analyzers/git/churn-calculator.js +0 -257
- package/dist/analyzers/git/churn-calculator.js.map +0 -1
- package/dist/analyzers/git/git-analyzer.d.ts +0 -19
- package/dist/analyzers/git/git-analyzer.js +0 -79
- package/dist/analyzers/git/git-analyzer.js.map +0 -1
- package/dist/analyzers/git/hotspot-detector.d.ts +0 -34
- package/dist/analyzers/git/hotspot-detector.js +0 -173
- package/dist/analyzers/git/hotspot-detector.js.map +0 -1
- package/dist/analyzers/git/index.d.ts +0 -7
- package/dist/analyzers/git/index.js +0 -7
- package/dist/analyzers/git/index.js.map +0 -1
- package/dist/analyzers/git/types.d.ts +0 -88
- package/dist/analyzers/git/types.js +0 -5
- package/dist/analyzers/git/types.js.map +0 -1
- package/dist/analyzers/metrics/halstead-calculator.d.ts +0 -30
- package/dist/analyzers/metrics/halstead-calculator.js +0 -150
- package/dist/analyzers/metrics/halstead-calculator.js.map +0 -1
- package/dist/analyzers/metrics/index.d.ts +0 -9
- package/dist/analyzers/metrics/index.js +0 -9
- package/dist/analyzers/metrics/index.js.map +0 -1
- package/dist/analyzers/metrics/maintainability-calculator.d.ts +0 -17
- package/dist/analyzers/metrics/maintainability-calculator.js +0 -46
- package/dist/analyzers/metrics/maintainability-calculator.js.map +0 -1
- package/dist/analyzers/metrics/metrics-analyzer.d.ts +0 -32
- package/dist/analyzers/metrics/metrics-analyzer.js +0 -144
- package/dist/analyzers/metrics/metrics-analyzer.js.map +0 -1
- package/dist/analyzers/metrics/types.d.ts +0 -67
- package/dist/analyzers/metrics/types.js +0 -5
- package/dist/analyzers/metrics/types.js.map +0 -1
- package/dist/analyzers/security/base-detector.d.ts +0 -58
- package/dist/analyzers/security/base-detector.js +0 -104
- package/dist/analyzers/security/base-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/command-injection-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/command-injection-detector.js +0 -84
- package/dist/analyzers/security/detectors/command-injection-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/hardcoded-secrets-detector.d.ts +0 -16
- package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js +0 -140
- package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/insecure-deserialization-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/insecure-deserialization-detector.js +0 -109
- package/dist/analyzers/security/detectors/insecure-deserialization-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/insecure-random-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/insecure-random-detector.js +0 -61
- package/dist/analyzers/security/detectors/insecure-random-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/path-traversal-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/path-traversal-detector.js +0 -82
- package/dist/analyzers/security/detectors/path-traversal-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/sql-injection-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/sql-injection-detector.js +0 -88
- package/dist/analyzers/security/detectors/sql-injection-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/weak-crypto-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/weak-crypto-detector.js +0 -104
- package/dist/analyzers/security/detectors/weak-crypto-detector.js.map +0 -1
- package/dist/analyzers/security/detectors/xss-detector.d.ts +0 -12
- package/dist/analyzers/security/detectors/xss-detector.js +0 -90
- package/dist/analyzers/security/detectors/xss-detector.js.map +0 -1
- package/dist/analyzers/security/index.d.ts +0 -16
- package/dist/analyzers/security/index.js +0 -18
- package/dist/analyzers/security/index.js.map +0 -1
- package/dist/analyzers/security/security-analyzer.d.ts +0 -38
- package/dist/analyzers/security/security-analyzer.js +0 -215
- package/dist/analyzers/security/security-analyzer.js.map +0 -1
- package/dist/analyzers/security/types.d.ts +0 -95
- package/dist/analyzers/security/types.js +0 -7
- package/dist/analyzers/security/types.js.map +0 -1
- package/dist/tools/analysis-tools/architecture-tool.d.ts +0 -46
- package/dist/tools/analysis-tools/architecture-tool.js +0 -124
- package/dist/tools/analysis-tools/architecture-tool.js.map +0 -1
- package/dist/tools/analysis-tools/validation-tool.d.ts +0 -51
- package/dist/tools/analysis-tools/validation-tool.js +0 -121
- package/dist/tools/analysis-tools/validation-tool.js.map +0 -1
- package/dist/tools/analysis-tools.d.ts +0 -73
- package/dist/tools/analysis-tools.js +0 -422
- package/dist/tools/analysis-tools.js.map +0 -1
- package/dist/types/analysis.d.ts +0 -177
- package/dist/types/analysis.js +0 -8
- package/dist/types/analysis.js.map +0 -1
- package/dist/utils/analysis-logger.d.ts +0 -50
- package/dist/utils/analysis-logger.js +0 -73
- package/dist/utils/analysis-logger.js.map +0 -1
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dependency Graph Implementation
|
|
3
|
-
*
|
|
4
|
-
* Adjacency list-based directed graph for file dependencies
|
|
5
|
-
*/
|
|
6
|
-
export class DependencyGraph {
|
|
7
|
-
nodes;
|
|
8
|
-
adjacencyList;
|
|
9
|
-
reverseAdjacencyList; // For efficient afferent lookup
|
|
10
|
-
constructor() {
|
|
11
|
-
this.nodes = new Map();
|
|
12
|
-
this.adjacencyList = new Map();
|
|
13
|
-
this.reverseAdjacencyList = new Map();
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Add node to graph
|
|
17
|
-
*/
|
|
18
|
-
addNode(node) {
|
|
19
|
-
this.nodes.set(node.filePath, node);
|
|
20
|
-
if (!this.adjacencyList.has(node.filePath)) {
|
|
21
|
-
this.adjacencyList.set(node.filePath, new Set());
|
|
22
|
-
}
|
|
23
|
-
if (!this.reverseAdjacencyList.has(node.filePath)) {
|
|
24
|
-
this.reverseAdjacencyList.set(node.filePath, new Set());
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Add directed edge from -> to
|
|
29
|
-
*/
|
|
30
|
-
addEdge(from, to) {
|
|
31
|
-
// Ensure nodes exist
|
|
32
|
-
if (!this.adjacencyList.has(from)) {
|
|
33
|
-
this.adjacencyList.set(from, new Set());
|
|
34
|
-
}
|
|
35
|
-
if (!this.reverseAdjacencyList.has(to)) {
|
|
36
|
-
this.reverseAdjacencyList.set(to, new Set());
|
|
37
|
-
}
|
|
38
|
-
// Add edge (sets are guaranteed to exist after the checks above)
|
|
39
|
-
const fromSet = this.adjacencyList.get(from);
|
|
40
|
-
const toSet = this.reverseAdjacencyList.get(to);
|
|
41
|
-
if (fromSet && toSet) {
|
|
42
|
-
fromSet.add(to);
|
|
43
|
-
toSet.add(from);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Get node by file path
|
|
48
|
-
*/
|
|
49
|
-
getNode(file) {
|
|
50
|
-
return this.nodes.get(file);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Get all nodes
|
|
54
|
-
*/
|
|
55
|
-
getNodes() {
|
|
56
|
-
return Array.from(this.nodes.values());
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Get afferent dependencies (files that depend on this file)
|
|
60
|
-
*/
|
|
61
|
-
getAfferentDependencies(file) {
|
|
62
|
-
const deps = this.reverseAdjacencyList.get(file);
|
|
63
|
-
return deps ? Array.from(deps) : [];
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get efferent dependencies (files this file depends on)
|
|
67
|
-
*/
|
|
68
|
-
getEfferentDependencies(file) {
|
|
69
|
-
const deps = this.adjacencyList.get(file);
|
|
70
|
-
return deps ? Array.from(deps) : [];
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Get total number of edges
|
|
74
|
-
*/
|
|
75
|
-
getTotalEdges() {
|
|
76
|
-
let total = 0;
|
|
77
|
-
for (const deps of this.adjacencyList.values()) {
|
|
78
|
-
total += deps.size;
|
|
79
|
-
}
|
|
80
|
-
return total;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Check if path exists from -> to using BFS
|
|
84
|
-
*/
|
|
85
|
-
hasPath(from, to) {
|
|
86
|
-
if (from === to)
|
|
87
|
-
return true;
|
|
88
|
-
const visited = new Set();
|
|
89
|
-
const queue = [from];
|
|
90
|
-
while (queue.length > 0) {
|
|
91
|
-
const current = queue.shift();
|
|
92
|
-
if (current === undefined)
|
|
93
|
-
break;
|
|
94
|
-
if (current === to)
|
|
95
|
-
return true;
|
|
96
|
-
if (visited.has(current))
|
|
97
|
-
continue;
|
|
98
|
-
visited.add(current);
|
|
99
|
-
const neighbors = this.adjacencyList.get(current) || new Set();
|
|
100
|
-
for (const neighbor of neighbors) {
|
|
101
|
-
if (!visited.has(neighbor)) {
|
|
102
|
-
queue.push(neighbor);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Topological sort using DFS
|
|
110
|
-
* Returns sorted list and whether cycle was detected
|
|
111
|
-
*/
|
|
112
|
-
topologicalSort() {
|
|
113
|
-
const visited = new Set();
|
|
114
|
-
const recursionStack = new Set();
|
|
115
|
-
const sorted = [];
|
|
116
|
-
let hasCycle = false;
|
|
117
|
-
const dfs = (node) => {
|
|
118
|
-
if (recursionStack.has(node)) {
|
|
119
|
-
hasCycle = true;
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
if (visited.has(node))
|
|
123
|
-
return;
|
|
124
|
-
visited.add(node);
|
|
125
|
-
recursionStack.add(node);
|
|
126
|
-
const neighbors = this.adjacencyList.get(node) || new Set();
|
|
127
|
-
for (const neighbor of neighbors) {
|
|
128
|
-
dfs(neighbor);
|
|
129
|
-
}
|
|
130
|
-
recursionStack.delete(node);
|
|
131
|
-
sorted.unshift(node); // Add to front for reverse post-order
|
|
132
|
-
};
|
|
133
|
-
// Visit all nodes
|
|
134
|
-
for (const node of this.nodes.keys()) {
|
|
135
|
-
if (!visited.has(node)) {
|
|
136
|
-
dfs(node);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return { sorted, hasCycle };
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Get strongly connected components using Tarjan's algorithm
|
|
143
|
-
* (Used for circular dependency detection)
|
|
144
|
-
*/
|
|
145
|
-
getStronglyConnectedComponents() {
|
|
146
|
-
const index = new Map();
|
|
147
|
-
const lowLink = new Map();
|
|
148
|
-
const onStack = new Set();
|
|
149
|
-
const stack = [];
|
|
150
|
-
const sccs = [];
|
|
151
|
-
let currentIndex = 0;
|
|
152
|
-
const strongConnect = (node) => {
|
|
153
|
-
index.set(node, currentIndex);
|
|
154
|
-
lowLink.set(node, currentIndex);
|
|
155
|
-
currentIndex++;
|
|
156
|
-
stack.push(node);
|
|
157
|
-
onStack.add(node);
|
|
158
|
-
const neighbors = this.adjacencyList.get(node) || new Set();
|
|
159
|
-
for (const neighbor of neighbors) {
|
|
160
|
-
if (!index.has(neighbor)) {
|
|
161
|
-
strongConnect(neighbor);
|
|
162
|
-
const nodeLow = lowLink.get(node) ?? 0;
|
|
163
|
-
const neighborLow = lowLink.get(neighbor) ?? 0;
|
|
164
|
-
lowLink.set(node, Math.min(nodeLow, neighborLow));
|
|
165
|
-
}
|
|
166
|
-
else if (onStack.has(neighbor)) {
|
|
167
|
-
const nodeLow = lowLink.get(node) ?? 0;
|
|
168
|
-
const neighborIdx = index.get(neighbor) ?? 0;
|
|
169
|
-
lowLink.set(node, Math.min(nodeLow, neighborIdx));
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
// If node is a root node, pop the stack and create SCC
|
|
173
|
-
if (lowLink.get(node) === index.get(node)) {
|
|
174
|
-
const scc = [];
|
|
175
|
-
let w;
|
|
176
|
-
do {
|
|
177
|
-
w = stack.pop();
|
|
178
|
-
if (w === undefined)
|
|
179
|
-
break;
|
|
180
|
-
onStack.delete(w);
|
|
181
|
-
scc.push(w);
|
|
182
|
-
} while (w !== node);
|
|
183
|
-
// Only add if SCC has more than 1 node (circular dependency)
|
|
184
|
-
if (scc.length > 1) {
|
|
185
|
-
sccs.push(scc);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
// Run on all nodes
|
|
190
|
-
for (const node of this.nodes.keys()) {
|
|
191
|
-
if (!index.has(node)) {
|
|
192
|
-
strongConnect(node);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return sccs;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=dependency-graph.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../../src/analyzers/dependency/dependency-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dependency Analyzer Module
|
|
3
|
-
*/
|
|
4
|
-
export { DependencyAnalyzer } from './dependency-analyzer.js';
|
|
5
|
-
export { DependencyGraph } from './dependency-graph.js';
|
|
6
|
-
export { CircularDependencyDetector } from './circular-detector.js';
|
|
7
|
-
export { CouplingCalculator } from './coupling-calculator.js';
|
|
8
|
-
export type { DependencyNode, ImportEdge, ExportEdge, CircularDependency, CouplingMetrics, DependencyAnalysisResult, DependencySummary, DependencyAnalysisOptions, } from './types.js';
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dependency Analyzer Module
|
|
3
|
-
*/
|
|
4
|
-
export { DependencyAnalyzer } from './dependency-analyzer.js';
|
|
5
|
-
export { DependencyGraph } from './dependency-graph.js';
|
|
6
|
-
export { CircularDependencyDetector } from './circular-detector.js';
|
|
7
|
-
export { CouplingCalculator } from './coupling-calculator.js';
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/dependency/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dependency Analyzer Types
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Dependency node representing a file
|
|
6
|
-
*/
|
|
7
|
-
export interface DependencyNode {
|
|
8
|
-
readonly filePath: string;
|
|
9
|
-
readonly imports: ReadonlyArray<ImportEdge>;
|
|
10
|
-
readonly exports: ReadonlyArray<ExportEdge>;
|
|
11
|
-
readonly size: number;
|
|
12
|
-
readonly loc: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Import edge in dependency graph
|
|
16
|
-
*/
|
|
17
|
-
export interface ImportEdge {
|
|
18
|
-
readonly from: string;
|
|
19
|
-
readonly to: string;
|
|
20
|
-
readonly importedSymbols: ReadonlyArray<string>;
|
|
21
|
-
readonly isDynamic: boolean;
|
|
22
|
-
readonly isTypeOnly: boolean;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Export edge
|
|
26
|
-
*/
|
|
27
|
-
export interface ExportEdge {
|
|
28
|
-
readonly from: string;
|
|
29
|
-
readonly symbols: ReadonlyArray<string>;
|
|
30
|
-
readonly isDefault: boolean;
|
|
31
|
-
readonly isReExport: boolean;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Circular dependency cycle
|
|
35
|
-
*/
|
|
36
|
-
export interface CircularDependency {
|
|
37
|
-
readonly cycle: ReadonlyArray<string>;
|
|
38
|
-
readonly length: number;
|
|
39
|
-
readonly severity: 'critical' | 'high' | 'medium' | 'low';
|
|
40
|
-
readonly impact: number;
|
|
41
|
-
readonly description: string;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Coupling metrics for a file
|
|
45
|
-
*/
|
|
46
|
-
export interface CouplingMetrics {
|
|
47
|
-
readonly file: string;
|
|
48
|
-
readonly afferentCoupling: number;
|
|
49
|
-
readonly efferentCoupling: number;
|
|
50
|
-
readonly instability: number;
|
|
51
|
-
readonly abstractness: number;
|
|
52
|
-
readonly distanceFromMainSequence: number;
|
|
53
|
-
readonly zone: 'useless' | 'painful' | 'balanced';
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Dependency analysis result
|
|
57
|
-
*/
|
|
58
|
-
export interface DependencyAnalysisResult {
|
|
59
|
-
readonly graph: DependencyGraph;
|
|
60
|
-
readonly circularDependencies: ReadonlyArray<CircularDependency>;
|
|
61
|
-
readonly couplingMetrics: ReadonlyArray<CouplingMetrics>;
|
|
62
|
-
readonly orphanedFiles: ReadonlyArray<string>;
|
|
63
|
-
readonly hubFiles: ReadonlyArray<string>;
|
|
64
|
-
readonly summary: DependencySummary;
|
|
65
|
-
readonly timestamp: Date;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Summary statistics
|
|
69
|
-
*/
|
|
70
|
-
export interface DependencySummary {
|
|
71
|
-
readonly totalFiles: number;
|
|
72
|
-
readonly totalDependencies: number;
|
|
73
|
-
readonly averageAfferentCoupling: number;
|
|
74
|
-
readonly averageEfferentCoupling: number;
|
|
75
|
-
readonly averageInstability: number;
|
|
76
|
-
readonly circularDependencyCount: number;
|
|
77
|
-
readonly maxCycleLength: number;
|
|
78
|
-
readonly healthScore: number;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Dependency graph interface
|
|
82
|
-
*/
|
|
83
|
-
export interface DependencyGraph {
|
|
84
|
-
addNode(node: DependencyNode): void;
|
|
85
|
-
addEdge(from: string, to: string): void;
|
|
86
|
-
getNode(file: string): DependencyNode | undefined;
|
|
87
|
-
getNodes(): DependencyNode[];
|
|
88
|
-
getAfferentDependencies(file: string): string[];
|
|
89
|
-
getEfferentDependencies(file: string): string[];
|
|
90
|
-
getTotalEdges(): number;
|
|
91
|
-
hasPath(from: string, to: string): boolean;
|
|
92
|
-
topologicalSort(): {
|
|
93
|
-
sorted: string[];
|
|
94
|
-
hasCycle: boolean;
|
|
95
|
-
};
|
|
96
|
-
getStronglyConnectedComponents(): string[][];
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Analysis options
|
|
100
|
-
*/
|
|
101
|
-
export interface DependencyAnalysisOptions {
|
|
102
|
-
readonly includeNodeModules?: boolean;
|
|
103
|
-
readonly maxDepth?: number;
|
|
104
|
-
readonly ignorePatterns?: readonly string[];
|
|
105
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analyzers/dependency/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Analysis Error Classes
|
|
3
|
-
*
|
|
4
|
-
* Structured error hierarchy for analysis operations.
|
|
5
|
-
* All errors extend from AnalysisError base class and include context information.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Base error class for all analysis errors
|
|
9
|
-
*/
|
|
10
|
-
export declare abstract class AnalysisError extends Error {
|
|
11
|
-
readonly code: string;
|
|
12
|
-
readonly context?: Readonly<Record<string, unknown>> | undefined;
|
|
13
|
-
constructor(message: string, code: string, context?: Readonly<Record<string, unknown>> | undefined);
|
|
14
|
-
/**
|
|
15
|
-
* Convert error to JSON for logging/serialization
|
|
16
|
-
*/
|
|
17
|
-
toJSON(): Record<string, unknown>;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Error thrown when project structure cannot be analyzed
|
|
21
|
-
*/
|
|
22
|
-
export declare class ProjectStructureError extends AnalysisError {
|
|
23
|
-
constructor(message: string, context?: Record<string, unknown>);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Error thrown when a file cannot be parsed or read
|
|
27
|
-
*/
|
|
28
|
-
export declare class FileParseError extends AnalysisError {
|
|
29
|
-
readonly filePath: string;
|
|
30
|
-
constructor(message: string, filePath: string, context?: Record<string, unknown>);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Error thrown when validation fails
|
|
34
|
-
*/
|
|
35
|
-
export declare class ValidationError extends AnalysisError {
|
|
36
|
-
constructor(message: string, context?: Record<string, unknown>);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Error thrown when analysis exceeds timeout
|
|
40
|
-
*/
|
|
41
|
-
export declare class AnalysisTimeoutError extends AnalysisError {
|
|
42
|
-
readonly timeoutMs: number;
|
|
43
|
-
constructor(message: string, timeoutMs: number, context?: Record<string, unknown>);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Error thrown when pattern detection fails
|
|
47
|
-
*/
|
|
48
|
-
export declare class PatternDetectionError extends AnalysisError {
|
|
49
|
-
readonly patternName: string;
|
|
50
|
-
constructor(message: string, patternName: string, context?: Record<string, unknown>);
|
|
51
|
-
}
|
package/dist/analyzers/errors.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Analysis Error Classes
|
|
3
|
-
*
|
|
4
|
-
* Structured error hierarchy for analysis operations.
|
|
5
|
-
* All errors extend from AnalysisError base class and include context information.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Base error class for all analysis errors
|
|
9
|
-
*/
|
|
10
|
-
export class AnalysisError extends Error {
|
|
11
|
-
code;
|
|
12
|
-
context;
|
|
13
|
-
constructor(message, code, context) {
|
|
14
|
-
super(message);
|
|
15
|
-
this.code = code;
|
|
16
|
-
this.context = context;
|
|
17
|
-
this.name = this.constructor.name;
|
|
18
|
-
Error.captureStackTrace(this, this.constructor);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Convert error to JSON for logging/serialization
|
|
22
|
-
*/
|
|
23
|
-
toJSON() {
|
|
24
|
-
return {
|
|
25
|
-
name: this.name,
|
|
26
|
-
message: this.message,
|
|
27
|
-
code: this.code,
|
|
28
|
-
context: this.context,
|
|
29
|
-
stack: this.stack,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Error thrown when project structure cannot be analyzed
|
|
35
|
-
*/
|
|
36
|
-
export class ProjectStructureError extends AnalysisError {
|
|
37
|
-
constructor(message, context) {
|
|
38
|
-
super(message, 'PROJECT_STRUCTURE_ERROR', context);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Error thrown when a file cannot be parsed or read
|
|
43
|
-
*/
|
|
44
|
-
export class FileParseError extends AnalysisError {
|
|
45
|
-
filePath;
|
|
46
|
-
constructor(message, filePath, context) {
|
|
47
|
-
super(message, 'FILE_PARSE_ERROR', { ...context, filePath });
|
|
48
|
-
this.filePath = filePath;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Error thrown when validation fails
|
|
53
|
-
*/
|
|
54
|
-
export class ValidationError extends AnalysisError {
|
|
55
|
-
constructor(message, context) {
|
|
56
|
-
super(message, 'VALIDATION_ERROR', context);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Error thrown when analysis exceeds timeout
|
|
61
|
-
*/
|
|
62
|
-
export class AnalysisTimeoutError extends AnalysisError {
|
|
63
|
-
timeoutMs;
|
|
64
|
-
constructor(message, timeoutMs, context) {
|
|
65
|
-
super(message, 'ANALYSIS_TIMEOUT', { ...context, timeoutMs });
|
|
66
|
-
this.timeoutMs = timeoutMs;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Error thrown when pattern detection fails
|
|
71
|
-
*/
|
|
72
|
-
export class PatternDetectionError extends AnalysisError {
|
|
73
|
-
patternName;
|
|
74
|
-
constructor(message, patternName, context) {
|
|
75
|
-
super(message, 'PATTERN_DETECTION_ERROR', { ...context, patternName });
|
|
76
|
-
this.patternName = patternName;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/analyzers/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,OAAgB,aAAc,SAAQ,KAAK;IAG7B;IACA;IAHlB,YACE,OAAe,EACC,IAAY,EACZ,OAA2C;QAE3D,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAoC;QAG3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IACtD,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,aAAa;IAG7B;IAFlB,YACE,OAAe,EACC,QAAgB,EAChC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAH7C,aAAQ,GAAR,QAAQ,CAAQ;IAIlC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAGnC;IAFlB,YACE,OAAe,EACC,SAAiB,EACjC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAH9C,cAAS,GAAT,SAAS,CAAQ;IAInC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IAGpC;IAFlB,YACE,OAAe,EACC,WAAmB,EACnC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,yBAAyB,EAAE,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAHvD,gBAAW,GAAX,WAAW,CAAQ;IAIrC,CAAC;CACF"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Git Churn Calculator
|
|
3
|
-
*
|
|
4
|
-
* Calculates file churn metrics from git history
|
|
5
|
-
*/
|
|
6
|
-
import type { FileChurn, GitAnalysisOptions, ContributorStats } from './types.js';
|
|
7
|
-
export declare class ChurnCalculator {
|
|
8
|
-
private repositoryPath;
|
|
9
|
-
constructor(repositoryPath: string);
|
|
10
|
-
/**
|
|
11
|
-
* Calculate churn for all files
|
|
12
|
-
*/
|
|
13
|
-
calculateChurn(options?: GitAnalysisOptions): Promise<FileChurn[]>;
|
|
14
|
-
/**
|
|
15
|
-
* Calculate contributor statistics
|
|
16
|
-
*/
|
|
17
|
-
calculateContributorStats(options?: GitAnalysisOptions): Promise<ContributorStats[]>;
|
|
18
|
-
/**
|
|
19
|
-
* Get git log with file stats
|
|
20
|
-
* SECURITY FIX: Prevent command injection by validating inputs and using array-based execution
|
|
21
|
-
*/
|
|
22
|
-
private getGitLog;
|
|
23
|
-
/**
|
|
24
|
-
* Parse git log output
|
|
25
|
-
*/
|
|
26
|
-
private parseGitLog;
|
|
27
|
-
/**
|
|
28
|
-
* Check if file should be included based on patterns
|
|
29
|
-
*/
|
|
30
|
-
private shouldIncludeFile;
|
|
31
|
-
/**
|
|
32
|
-
* Simple pattern matching (supports * wildcard)
|
|
33
|
-
* SECURITY FIX: Prevent ReDoS by using non-greedy matching and proper escaping
|
|
34
|
-
*/
|
|
35
|
-
private matchPattern;
|
|
36
|
-
}
|