@grafema/core 0.1.1-alpha → 0.2.0-beta
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/Orchestrator.d.ts +7 -0
- package/dist/Orchestrator.d.ts.map +1 -1
- package/dist/Orchestrator.js +25 -3
- package/dist/config/ConfigLoader.d.ts +18 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -1
- package/dist/config/ConfigLoader.js +65 -3
- package/dist/core/FileExplainer.d.ts +101 -0
- package/dist/core/FileExplainer.d.ts.map +1 -0
- package/dist/core/FileExplainer.js +139 -0
- package/dist/core/NodeFactory.d.ts +44 -5
- package/dist/core/NodeFactory.d.ts.map +1 -1
- package/dist/core/NodeFactory.js +52 -7
- package/dist/core/nodes/ArrayLiteralNode.d.ts.map +1 -1
- package/dist/core/nodes/ArrayLiteralNode.js +4 -2
- package/dist/core/nodes/BranchNode.d.ts +41 -0
- package/dist/core/nodes/BranchNode.d.ts.map +1 -0
- package/dist/core/nodes/BranchNode.js +82 -0
- package/dist/core/nodes/CallSiteNode.d.ts +2 -2
- package/dist/core/nodes/CallSiteNode.d.ts.map +1 -1
- package/dist/core/nodes/CallSiteNode.js +9 -5
- package/dist/core/nodes/CaseNode.d.ts +43 -0
- package/dist/core/nodes/CaseNode.d.ts.map +1 -0
- package/dist/core/nodes/CaseNode.js +81 -0
- package/dist/core/nodes/ClassNode.d.ts +2 -2
- package/dist/core/nodes/ClassNode.d.ts.map +1 -1
- package/dist/core/nodes/ClassNode.js +8 -4
- package/dist/core/nodes/ConstantNode.d.ts +2 -2
- package/dist/core/nodes/ConstantNode.d.ts.map +1 -1
- package/dist/core/nodes/ConstantNode.js +6 -4
- package/dist/core/nodes/ConstructorCallNode.d.ts +51 -0
- package/dist/core/nodes/ConstructorCallNode.d.ts.map +1 -0
- package/dist/core/nodes/ConstructorCallNode.js +171 -0
- package/dist/core/nodes/DatabaseQueryNode.d.ts +3 -2
- package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -1
- package/dist/core/nodes/DatabaseQueryNode.js +5 -2
- package/dist/core/nodes/DecoratorNode.d.ts +2 -2
- package/dist/core/nodes/DecoratorNode.d.ts.map +1 -1
- package/dist/core/nodes/DecoratorNode.js +5 -3
- package/dist/core/nodes/EnumNode.d.ts +2 -2
- package/dist/core/nodes/EnumNode.d.ts.map +1 -1
- package/dist/core/nodes/EnumNode.js +5 -3
- package/dist/core/nodes/EventListenerNode.d.ts +4 -4
- package/dist/core/nodes/EventListenerNode.d.ts.map +1 -1
- package/dist/core/nodes/EventListenerNode.js +7 -4
- package/dist/core/nodes/ExportNode.d.ts +2 -2
- package/dist/core/nodes/ExportNode.d.ts.map +1 -1
- package/dist/core/nodes/ExportNode.js +8 -4
- package/dist/core/nodes/ExpressionNode.d.ts +2 -2
- package/dist/core/nodes/ExpressionNode.d.ts.map +1 -1
- package/dist/core/nodes/ExpressionNode.js +6 -4
- package/dist/core/nodes/ExternalModuleNode.d.ts +4 -0
- package/dist/core/nodes/ExternalModuleNode.d.ts.map +1 -1
- package/dist/core/nodes/ExternalModuleNode.js +10 -2
- package/dist/core/nodes/HttpRequestNode.d.ts +4 -4
- package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -1
- package/dist/core/nodes/HttpRequestNode.js +7 -4
- package/dist/core/nodes/ImportNode.d.ts +10 -2
- package/dist/core/nodes/ImportNode.d.ts.map +1 -1
- package/dist/core/nodes/ImportNode.js +21 -4
- package/dist/core/nodes/InterfaceNode.d.ts +2 -2
- package/dist/core/nodes/InterfaceNode.d.ts.map +1 -1
- package/dist/core/nodes/InterfaceNode.js +5 -3
- package/dist/core/nodes/LiteralNode.d.ts +2 -2
- package/dist/core/nodes/LiteralNode.d.ts.map +1 -1
- package/dist/core/nodes/LiteralNode.js +6 -4
- package/dist/core/nodes/MethodCallNode.d.ts +2 -2
- package/dist/core/nodes/MethodCallNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodCallNode.js +9 -5
- package/dist/core/nodes/MethodNode.d.ts +2 -2
- package/dist/core/nodes/MethodNode.d.ts.map +1 -1
- package/dist/core/nodes/MethodNode.js +8 -4
- package/dist/core/nodes/ObjectLiteralNode.d.ts.map +1 -1
- package/dist/core/nodes/ObjectLiteralNode.js +4 -2
- package/dist/core/nodes/ParameterNode.d.ts +2 -2
- package/dist/core/nodes/ParameterNode.d.ts.map +1 -1
- package/dist/core/nodes/ParameterNode.js +5 -3
- package/dist/core/nodes/TypeNode.d.ts +2 -2
- package/dist/core/nodes/TypeNode.d.ts.map +1 -1
- package/dist/core/nodes/TypeNode.js +5 -3
- package/dist/core/nodes/VariableDeclarationNode.d.ts +2 -2
- package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -1
- package/dist/core/nodes/VariableDeclarationNode.js +9 -5
- package/dist/core/nodes/index.d.ts +3 -0
- package/dist/core/nodes/index.d.ts.map +1 -1
- package/dist/core/nodes/index.js +3 -0
- package/dist/data/builtins/BuiltinRegistry.d.ts +78 -0
- package/dist/data/builtins/BuiltinRegistry.d.ts.map +1 -0
- package/dist/data/builtins/BuiltinRegistry.js +110 -0
- package/dist/data/builtins/definitions.d.ts +28 -0
- package/dist/data/builtins/definitions.d.ts.map +1 -0
- package/dist/data/builtins/definitions.js +250 -0
- package/dist/data/builtins/index.d.ts +10 -0
- package/dist/data/builtins/index.d.ts.map +1 -0
- package/dist/data/builtins/index.js +8 -0
- package/dist/data/builtins/jsGlobals.d.ts +18 -0
- package/dist/data/builtins/jsGlobals.d.ts.map +1 -0
- package/dist/data/builtins/jsGlobals.js +26 -0
- package/dist/data/builtins/types.d.ts +34 -0
- package/dist/data/builtins/types.d.ts.map +1 -0
- package/dist/data/builtins/types.js +7 -0
- package/dist/data/globals/definitions.d.ts +27 -0
- package/dist/data/globals/definitions.d.ts.map +1 -0
- package/dist/data/globals/definitions.js +117 -0
- package/dist/data/globals/index.d.ts +36 -0
- package/dist/data/globals/index.d.ts.map +1 -0
- package/dist/data/globals/index.js +52 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +23 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -1
- package/dist/diagnostics/DiagnosticReporter.js +88 -0
- package/dist/diagnostics/index.d.ts +1 -1
- package/dist/diagnostics/index.d.ts.map +1 -1
- package/dist/errors/GrafemaError.d.ts +43 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -1
- package/dist/errors/GrafemaError.js +50 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/DatabaseAnalyzer.js +3 -2
- package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressAnalyzer.js +3 -1
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts +148 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.d.ts.map +1 -0
- package/dist/plugins/analysis/ExpressResponseAnalyzer.js +495 -0
- package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/ExpressRouteAnalyzer.js +53 -18
- package/dist/plugins/analysis/FetchAnalyzer.d.ts +40 -0
- package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/FetchAnalyzer.js +163 -15
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts +157 -26
- package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/JSASTAnalyzer.js +2418 -191
- package/dist/plugins/analysis/RustAnalyzer.js +4 -4
- package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SQLiteAnalyzer.js +4 -2
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +9 -0
- package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -1
- package/dist/plugins/analysis/SocketIOAnalyzer.js +91 -7
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts +173 -0
- package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/GraphBuilder.js +1256 -65
- package/dist/plugins/analysis/ast/types.d.ts +294 -0
- package/dist/plugins/analysis/ast/types.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +5 -1
- package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +1 -0
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +12 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +10 -0
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +62 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +4 -0
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +101 -0
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +16 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -1
- package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +233 -39
- package/dist/plugins/discovery/WorkspaceDiscovery.d.ts.map +1 -1
- package/dist/plugins/discovery/WorkspaceDiscovery.js +9 -4
- package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -1
- package/dist/plugins/enrichment/AliasTracker.js +16 -1
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts +32 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.d.ts.map +1 -0
- package/dist/plugins/enrichment/ArgumentParameterLinker.js +175 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts +51 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.d.ts.map +1 -0
- package/dist/plugins/enrichment/ClosureCaptureEnricher.js +205 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts +42 -0
- package/dist/plugins/enrichment/ExternalCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/ExternalCallResolver.js +213 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts +58 -0
- package/dist/plugins/enrichment/FunctionCallResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/FunctionCallResolver.js +340 -0
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +16 -3
- package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -1
- package/dist/plugins/enrichment/HTTPConnectionEnricher.js +64 -20
- package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MethodCallResolver.js +15 -1
- package/dist/plugins/enrichment/MountPointResolver.d.ts +14 -12
- package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -1
- package/dist/plugins/enrichment/MountPointResolver.js +172 -151
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts +44 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.d.ts.map +1 -0
- package/dist/plugins/enrichment/NodejsBuiltinsResolver.js +271 -0
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +5 -27
- package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -1
- package/dist/plugins/enrichment/ValueDomainAnalyzer.js +62 -139
- package/dist/plugins/indexing/JSModuleIndexer.d.ts +15 -0
- package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -1
- package/dist/plugins/indexing/JSModuleIndexer.js +58 -0
- package/dist/plugins/indexing/RustModuleIndexer.d.ts +1 -1
- package/dist/plugins/indexing/RustModuleIndexer.js +4 -4
- package/dist/plugins/validation/BrokenImportValidator.d.ts +31 -0
- package/dist/plugins/validation/BrokenImportValidator.d.ts.map +1 -0
- package/dist/plugins/validation/BrokenImportValidator.js +249 -0
- package/dist/plugins/validation/CallResolverValidator.d.ts +21 -10
- package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -1
- package/dist/plugins/validation/CallResolverValidator.js +101 -76
- package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -1
- package/dist/plugins/validation/DataFlowValidator.js +49 -41
- package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -1
- package/dist/plugins/validation/GraphConnectivityValidator.js +25 -1
- package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -1
- package/dist/plugins/validation/SQLInjectionValidator.js +2 -3
- package/dist/queries/findCallsInFunction.d.ts +52 -0
- package/dist/queries/findCallsInFunction.d.ts.map +1 -0
- package/dist/queries/findCallsInFunction.js +135 -0
- package/dist/queries/findContainingFunction.d.ts +45 -0
- package/dist/queries/findContainingFunction.d.ts.map +1 -0
- package/dist/queries/findContainingFunction.js +54 -0
- package/dist/queries/index.d.ts +14 -0
- package/dist/queries/index.d.ts.map +1 -0
- package/dist/queries/index.js +11 -0
- package/dist/queries/traceValues.d.ts +70 -0
- package/dist/queries/traceValues.d.ts.map +1 -0
- package/dist/queries/traceValues.js +299 -0
- package/dist/queries/types.d.ts +163 -0
- package/dist/queries/types.d.ts.map +1 -0
- package/dist/queries/types.js +9 -0
- package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
- package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/GraphSchemaExtractor.js +124 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js +112 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +12 -18
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -1
- package/dist/storage/backends/RFDBServerBackend.js +41 -52
- package/dist/storage/backends/typeValidation.d.ts.map +1 -1
- package/dist/storage/backends/typeValidation.js +1 -0
- package/package.json +3 -3
- package/src/Orchestrator.ts +35 -3
- package/src/config/ConfigLoader.ts +94 -3
- package/src/core/FileExplainer.ts +179 -0
- package/src/core/NodeFactory.ts +72 -8
- package/src/core/nodes/ArrayLiteralNode.ts +3 -2
- package/src/core/nodes/BranchNode.ts +113 -0
- package/src/core/nodes/CallSiteNode.ts +7 -5
- package/src/core/nodes/CaseNode.ts +123 -0
- package/src/core/nodes/ClassNode.ts +6 -4
- package/src/core/nodes/ConstantNode.ts +5 -4
- package/src/core/nodes/ConstructorCallNode.ts +217 -0
- package/src/core/nodes/DatabaseQueryNode.ts +5 -1
- package/src/core/nodes/DecoratorNode.ts +4 -3
- package/src/core/nodes/EnumNode.ts +4 -3
- package/src/core/nodes/EventListenerNode.ts +7 -4
- package/src/core/nodes/ExportNode.ts +6 -4
- package/src/core/nodes/ExpressionNode.ts +5 -4
- package/src/core/nodes/ExternalModuleNode.ts +11 -2
- package/src/core/nodes/HttpRequestNode.ts +7 -4
- package/src/core/nodes/ImportNode.ts +31 -4
- package/src/core/nodes/InterfaceNode.ts +4 -3
- package/src/core/nodes/LiteralNode.ts +5 -4
- package/src/core/nodes/MethodCallNode.ts +7 -5
- package/src/core/nodes/MethodNode.ts +6 -4
- package/src/core/nodes/ObjectLiteralNode.ts +3 -2
- package/src/core/nodes/ParameterNode.ts +4 -3
- package/src/core/nodes/TypeNode.ts +4 -3
- package/src/core/nodes/VariableDeclarationNode.ts +7 -5
- package/src/core/nodes/index.ts +3 -0
- package/src/data/builtins/BuiltinRegistry.ts +124 -0
- package/src/data/builtins/definitions.ts +267 -0
- package/src/data/builtins/index.ts +10 -0
- package/src/data/builtins/jsGlobals.ts +28 -0
- package/src/data/builtins/types.ts +36 -0
- package/src/data/globals/definitions.ts +156 -0
- package/src/data/globals/index.ts +66 -0
- package/src/diagnostics/DiagnosticReporter.ts +120 -0
- package/src/diagnostics/index.ts +1 -1
- package/src/errors/GrafemaError.ts +65 -0
- package/src/index.ts +45 -0
- package/src/plugins/analysis/DatabaseAnalyzer.ts +4 -2
- package/src/plugins/analysis/ExpressAnalyzer.ts +5 -1
- package/src/plugins/analysis/ExpressResponseAnalyzer.ts +636 -0
- package/src/plugins/analysis/ExpressRouteAnalyzer.ts +57 -18
- package/src/plugins/analysis/FetchAnalyzer.ts +204 -16
- package/src/plugins/analysis/JSASTAnalyzer.ts +2958 -260
- package/src/plugins/analysis/RustAnalyzer.ts +4 -4
- package/src/plugins/analysis/SQLiteAnalyzer.ts +5 -2
- package/src/plugins/analysis/SocketIOAnalyzer.ts +121 -7
- package/src/plugins/analysis/ast/GraphBuilder.ts +1578 -70
- package/src/plugins/analysis/ast/types.ts +387 -0
- package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +8 -0
- package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +16 -1
- package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +77 -2
- package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +112 -1
- package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +272 -47
- package/src/plugins/discovery/WorkspaceDiscovery.ts +11 -4
- package/src/plugins/enrichment/AliasTracker.ts +22 -1
- package/src/plugins/enrichment/ArgumentParameterLinker.ts +240 -0
- package/src/plugins/enrichment/ClosureCaptureEnricher.ts +267 -0
- package/src/plugins/enrichment/ExternalCallResolver.ts +262 -0
- package/src/plugins/enrichment/FunctionCallResolver.ts +456 -0
- package/src/plugins/enrichment/HTTPConnectionEnricher.ts +70 -20
- package/src/plugins/enrichment/MethodCallResolver.ts +21 -1
- package/src/plugins/enrichment/MountPointResolver.ts +206 -198
- package/src/plugins/enrichment/NodejsBuiltinsResolver.ts +365 -0
- package/src/plugins/enrichment/ValueDomainAnalyzer.ts +67 -184
- package/src/plugins/indexing/JSModuleIndexer.ts +66 -0
- package/src/plugins/indexing/RustModuleIndexer.ts +4 -4
- package/src/plugins/validation/BrokenImportValidator.ts +325 -0
- package/src/plugins/validation/CallResolverValidator.ts +129 -109
- package/src/plugins/validation/DataFlowValidator.ts +75 -58
- package/src/plugins/validation/GraphConnectivityValidator.ts +39 -1
- package/src/plugins/validation/SQLInjectionValidator.ts +2 -5
- package/src/queries/README.md +46 -0
- package/src/queries/findCallsInFunction.ts +206 -0
- package/src/queries/findContainingFunction.ts +83 -0
- package/src/queries/index.ts +23 -0
- package/src/queries/traceValues.ts +398 -0
- package/src/queries/types.ts +187 -0
- package/src/schema/GraphSchemaExtractor.ts +177 -0
- package/src/schema/InterfaceSchemaExtractor.ts +173 -0
- package/src/schema/index.ts +5 -0
- package/src/storage/backends/RFDBServerBackend.ts +58 -70
- package/src/storage/backends/typeValidation.ts +1 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Symbols Registry
|
|
3
|
+
*
|
|
4
|
+
* Provides lookup for JavaScript/TypeScript global symbols.
|
|
5
|
+
* Used by BrokenImportValidator to avoid false positives on globals.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { ALL_GLOBALS as DEFAULT_GLOBALS } from './definitions.js';
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
ECMASCRIPT_GLOBALS,
|
|
12
|
+
NODEJS_GLOBALS,
|
|
13
|
+
BROWSER_GLOBALS,
|
|
14
|
+
TEST_GLOBALS,
|
|
15
|
+
ALL_GLOBALS,
|
|
16
|
+
} from './definitions.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* GlobalsRegistry class for extensible globals management.
|
|
20
|
+
*
|
|
21
|
+
* Usage:
|
|
22
|
+
* const registry = new GlobalsRegistry();
|
|
23
|
+
* if (registry.isGlobal('console')) { ... }
|
|
24
|
+
* registry.addCustomGlobals(['myGlobal']);
|
|
25
|
+
*/
|
|
26
|
+
export class GlobalsRegistry {
|
|
27
|
+
private globals: Set<string>;
|
|
28
|
+
|
|
29
|
+
constructor(includeDefaults: boolean = true) {
|
|
30
|
+
this.globals = includeDefaults
|
|
31
|
+
? new Set(DEFAULT_GLOBALS)
|
|
32
|
+
: new Set();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Check if a symbol name is a known global.
|
|
37
|
+
*/
|
|
38
|
+
isGlobal(name: string): boolean {
|
|
39
|
+
return this.globals.has(name);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Add custom globals (e.g., from project config).
|
|
44
|
+
*/
|
|
45
|
+
addCustomGlobals(names: string[]): void {
|
|
46
|
+
for (const name of names) {
|
|
47
|
+
this.globals.add(name);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Remove globals from the set (e.g., if project doesn't use browser env).
|
|
53
|
+
*/
|
|
54
|
+
removeGlobals(names: string[]): void {
|
|
55
|
+
for (const name of names) {
|
|
56
|
+
this.globals.delete(name);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Get all registered globals.
|
|
62
|
+
*/
|
|
63
|
+
getAllGlobals(): string[] {
|
|
64
|
+
return Array.from(this.globals);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -14,6 +14,21 @@
|
|
|
14
14
|
|
|
15
15
|
import type { Diagnostic, DiagnosticCollector } from './DiagnosticCollector.js';
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Mapping from diagnostic codes to category information
|
|
19
|
+
*/
|
|
20
|
+
const DIAGNOSTIC_CODE_CATEGORIES: Record<string, { name: string; checkCommand: string }> = {
|
|
21
|
+
'ERR_DISCONNECTED_NODES': { name: 'disconnected nodes', checkCommand: 'grafema check connectivity' },
|
|
22
|
+
'ERR_DISCONNECTED_NODE': { name: 'disconnected nodes', checkCommand: 'grafema check connectivity' },
|
|
23
|
+
'ERR_UNRESOLVED_CALL': { name: 'unresolved calls', checkCommand: 'grafema check calls' },
|
|
24
|
+
'ERR_MISSING_ASSIGNMENT': { name: 'missing assignments', checkCommand: 'grafema check dataflow' },
|
|
25
|
+
'ERR_BROKEN_REFERENCE': { name: 'broken references', checkCommand: 'grafema check dataflow' },
|
|
26
|
+
'ERR_NO_LEAF_NODE': { name: 'incomplete traces', checkCommand: 'grafema check dataflow' },
|
|
27
|
+
'DISCONNECTED_NODES': { name: 'disconnected nodes', checkCommand: 'grafema check connectivity' },
|
|
28
|
+
'UNRESOLVED_FUNCTION_CALL': { name: 'unresolved calls', checkCommand: 'grafema check calls' },
|
|
29
|
+
'MISSING_ASSIGNMENT': { name: 'missing assignments', checkCommand: 'grafema check dataflow' },
|
|
30
|
+
};
|
|
31
|
+
|
|
17
32
|
/**
|
|
18
33
|
* Report output options
|
|
19
34
|
*/
|
|
@@ -34,6 +49,23 @@ export interface SummaryStats {
|
|
|
34
49
|
info: number;
|
|
35
50
|
}
|
|
36
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Category count with metadata
|
|
54
|
+
*/
|
|
55
|
+
export interface CategoryCount {
|
|
56
|
+
code: string;
|
|
57
|
+
count: number;
|
|
58
|
+
name: string;
|
|
59
|
+
checkCommand: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Summary statistics with category breakdown
|
|
64
|
+
*/
|
|
65
|
+
export interface CategorizedSummaryStats extends SummaryStats {
|
|
66
|
+
byCode: CategoryCount[];
|
|
67
|
+
}
|
|
68
|
+
|
|
37
69
|
/**
|
|
38
70
|
* DiagnosticReporter - formats diagnostics for different output formats
|
|
39
71
|
*/
|
|
@@ -80,6 +112,51 @@ export class DiagnosticReporter {
|
|
|
80
112
|
return parts.join(', ');
|
|
81
113
|
}
|
|
82
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Generate a categorized summary with actionable commands.
|
|
117
|
+
*/
|
|
118
|
+
categorizedSummary(): string {
|
|
119
|
+
const stats = this.getCategorizedStats();
|
|
120
|
+
|
|
121
|
+
if (stats.total === 0) {
|
|
122
|
+
return 'No issues found.';
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const lines: string[] = [];
|
|
126
|
+
|
|
127
|
+
// Severity totals (same format as summary())
|
|
128
|
+
const severityParts: string[] = [];
|
|
129
|
+
if (stats.fatal > 0) {
|
|
130
|
+
severityParts.push(`Fatal: ${stats.fatal}`);
|
|
131
|
+
}
|
|
132
|
+
if (stats.errors > 0) {
|
|
133
|
+
severityParts.push(`Errors: ${stats.errors}`);
|
|
134
|
+
}
|
|
135
|
+
if (stats.warnings > 0) {
|
|
136
|
+
severityParts.push(`Warnings: ${stats.warnings}`);
|
|
137
|
+
}
|
|
138
|
+
lines.push(severityParts.join(', '));
|
|
139
|
+
|
|
140
|
+
// Top 5 categories
|
|
141
|
+
const topCategories = stats.byCode.slice(0, 5);
|
|
142
|
+
for (const category of topCategories) {
|
|
143
|
+
lines.push(` - ${category.count} ${category.name} (run \`${category.checkCommand}\`)`);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// "Other issues" if more than 5 categories
|
|
147
|
+
if (stats.byCode.length > 5) {
|
|
148
|
+
const remainingCount = stats.byCode.slice(5).reduce((sum, cat) => sum + cat.count, 0);
|
|
149
|
+
const issueWord = remainingCount === 1 ? 'other issue' : 'other issues';
|
|
150
|
+
lines.push(` - ${remainingCount} ${issueWord}`);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Footer
|
|
154
|
+
lines.push('');
|
|
155
|
+
lines.push('Run `grafema check --all` for full diagnostics.');
|
|
156
|
+
|
|
157
|
+
return lines.join('\n');
|
|
158
|
+
}
|
|
159
|
+
|
|
83
160
|
/**
|
|
84
161
|
* Get diagnostic statistics by severity.
|
|
85
162
|
*/
|
|
@@ -94,6 +171,49 @@ export class DiagnosticReporter {
|
|
|
94
171
|
};
|
|
95
172
|
}
|
|
96
173
|
|
|
174
|
+
/**
|
|
175
|
+
* Get diagnostic statistics grouped by category.
|
|
176
|
+
*/
|
|
177
|
+
getCategorizedStats(): CategorizedSummaryStats {
|
|
178
|
+
const diagnostics = this.collector.getAll();
|
|
179
|
+
|
|
180
|
+
// Get severity stats
|
|
181
|
+
const severityStats: SummaryStats = {
|
|
182
|
+
total: diagnostics.length,
|
|
183
|
+
fatal: diagnostics.filter(d => d.severity === 'fatal').length,
|
|
184
|
+
errors: diagnostics.filter(d => d.severity === 'error').length,
|
|
185
|
+
warnings: diagnostics.filter(d => d.severity === 'warning').length,
|
|
186
|
+
info: diagnostics.filter(d => d.severity === 'info').length,
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
// Group by code
|
|
190
|
+
const codeMap = new Map<string, number>();
|
|
191
|
+
for (const diag of diagnostics) {
|
|
192
|
+
const count = codeMap.get(diag.code) || 0;
|
|
193
|
+
codeMap.set(diag.code, count + 1);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Convert to CategoryCount array with metadata
|
|
197
|
+
const byCode: CategoryCount[] = [];
|
|
198
|
+
for (const [code, count] of codeMap.entries()) {
|
|
199
|
+
const category = DIAGNOSTIC_CODE_CATEGORIES[code];
|
|
200
|
+
byCode.push({
|
|
201
|
+
code,
|
|
202
|
+
count,
|
|
203
|
+
name: category?.name || code,
|
|
204
|
+
checkCommand: category?.checkCommand || 'grafema check --all',
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Sort by count descending
|
|
209
|
+
byCode.sort((a, b) => b.count - a.count);
|
|
210
|
+
|
|
211
|
+
return {
|
|
212
|
+
...severityStats,
|
|
213
|
+
byCode,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
|
|
97
217
|
/**
|
|
98
218
|
* Generate human-readable text report.
|
|
99
219
|
*/
|
package/src/diagnostics/index.ts
CHANGED
|
@@ -11,6 +11,6 @@ export { DiagnosticCollector } from './DiagnosticCollector.js';
|
|
|
11
11
|
export type { Diagnostic, DiagnosticInput } from './DiagnosticCollector.js';
|
|
12
12
|
|
|
13
13
|
export { DiagnosticReporter } from './DiagnosticReporter.js';
|
|
14
|
-
export type { ReportOptions, SummaryStats } from './DiagnosticReporter.js';
|
|
14
|
+
export type { ReportOptions, SummaryStats, CategoryCount, CategorizedSummaryStats } from './DiagnosticReporter.js';
|
|
15
15
|
|
|
16
16
|
export { DiagnosticWriter } from './DiagnosticWriter.js';
|
|
@@ -172,3 +172,68 @@ export class AnalysisError extends GrafemaError {
|
|
|
172
172
|
this.code = code;
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Validation error - issues found by validators during VALIDATION phase
|
|
178
|
+
*
|
|
179
|
+
* Unlike other error classes, ValidationError has CONFIGURABLE severity because
|
|
180
|
+
* validators report issues of varying importance:
|
|
181
|
+
* - warning: informational issues (unresolved calls, missing assignments)
|
|
182
|
+
* - error: problems that may indicate bugs (broken references)
|
|
183
|
+
* - fatal: critical issues that should fail the analysis
|
|
184
|
+
*
|
|
185
|
+
* Codes:
|
|
186
|
+
* - ERR_UNRESOLVED_CALL: function call doesn't resolve to definition
|
|
187
|
+
* - ERR_DISCONNECTED_NODES: graph nodes not connected to root
|
|
188
|
+
* - ERR_DISCONNECTED_NODE: individual disconnected node
|
|
189
|
+
* - ERR_MISSING_ASSIGNMENT: variable has no ASSIGNED_FROM edge
|
|
190
|
+
* - ERR_BROKEN_REFERENCE: reference to non-existent node
|
|
191
|
+
* - ERR_NO_LEAF_NODE: data flow doesn't reach leaf node
|
|
192
|
+
*/
|
|
193
|
+
export class ValidationError extends GrafemaError {
|
|
194
|
+
readonly code: string;
|
|
195
|
+
readonly severity: 'fatal' | 'error' | 'warning';
|
|
196
|
+
|
|
197
|
+
constructor(
|
|
198
|
+
message: string,
|
|
199
|
+
code: string,
|
|
200
|
+
context: ErrorContext = {},
|
|
201
|
+
suggestion?: string,
|
|
202
|
+
severity: 'fatal' | 'error' | 'warning' = 'warning'
|
|
203
|
+
) {
|
|
204
|
+
super(message, context, suggestion);
|
|
205
|
+
this.code = code;
|
|
206
|
+
this.severity = severity;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Strict mode error - reported when strictMode=true and an enricher
|
|
212
|
+
* cannot resolve a reference.
|
|
213
|
+
*
|
|
214
|
+
* Unlike other errors, StrictModeError is used to collect issues that
|
|
215
|
+
* would normally be silently skipped. All collected StrictModeErrors
|
|
216
|
+
* cause analysis to fail after the ENRICHMENT phase completes.
|
|
217
|
+
*
|
|
218
|
+
* Severity: fatal (always)
|
|
219
|
+
* Codes:
|
|
220
|
+
* - STRICT_UNRESOLVED_METHOD: Method call cannot be resolved to definition
|
|
221
|
+
* - STRICT_UNRESOLVED_CALL: Function call cannot be resolved to definition
|
|
222
|
+
* - STRICT_UNRESOLVED_ARGUMENT: Argument cannot be linked to parameter
|
|
223
|
+
* - STRICT_ALIAS_DEPTH_EXCEEDED: Alias chain too deep (potential cycle)
|
|
224
|
+
* - STRICT_BROKEN_IMPORT: Import/re-export chain broken
|
|
225
|
+
*/
|
|
226
|
+
export class StrictModeError extends GrafemaError {
|
|
227
|
+
readonly code: string;
|
|
228
|
+
readonly severity = 'fatal' as const;
|
|
229
|
+
|
|
230
|
+
constructor(
|
|
231
|
+
message: string,
|
|
232
|
+
code: string,
|
|
233
|
+
context: ErrorContext = {},
|
|
234
|
+
suggestion?: string
|
|
235
|
+
) {
|
|
236
|
+
super(message, context, suggestion);
|
|
237
|
+
this.code = code;
|
|
238
|
+
}
|
|
239
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -11,6 +11,8 @@ export {
|
|
|
11
11
|
DatabaseError,
|
|
12
12
|
PluginError,
|
|
13
13
|
AnalysisError,
|
|
14
|
+
ValidationError,
|
|
15
|
+
StrictModeError,
|
|
14
16
|
} from './errors/GrafemaError.js';
|
|
15
17
|
export type { ErrorContext, GrafemaErrorJSON } from './errors/GrafemaError.js';
|
|
16
18
|
|
|
@@ -75,6 +77,8 @@ export type { GuaranteeGraph } from './core/GuaranteeManager.js';
|
|
|
75
77
|
export { clearFileNodesIfNeeded, clearServiceNodeIfExists } from './core/FileNodeManager.js';
|
|
76
78
|
export { CoverageAnalyzer } from './core/CoverageAnalyzer.js';
|
|
77
79
|
export type { CoverageResult } from './core/CoverageAnalyzer.js';
|
|
80
|
+
export { FileExplainer } from './core/FileExplainer.js';
|
|
81
|
+
export type { FileExplainResult, EnhancedNode } from './core/FileExplainer.js';
|
|
78
82
|
|
|
79
83
|
// Hash utilities
|
|
80
84
|
export { calculateFileHash, calculateFileHashAsync, calculateContentHash } from './core/HashUtils.js';
|
|
@@ -169,6 +173,7 @@ export { RustModuleIndexer } from './plugins/indexing/RustModuleIndexer.js';
|
|
|
169
173
|
// Analysis plugins
|
|
170
174
|
export { JSASTAnalyzer } from './plugins/analysis/JSASTAnalyzer.js';
|
|
171
175
|
export { ExpressRouteAnalyzer } from './plugins/analysis/ExpressRouteAnalyzer.js';
|
|
176
|
+
export { ExpressResponseAnalyzer } from './plugins/analysis/ExpressResponseAnalyzer.js';
|
|
172
177
|
export { ExpressAnalyzer } from './plugins/analysis/ExpressAnalyzer.js';
|
|
173
178
|
export { SocketIOAnalyzer } from './plugins/analysis/SocketIOAnalyzer.js';
|
|
174
179
|
export { DatabaseAnalyzer } from './plugins/analysis/DatabaseAnalyzer.js';
|
|
@@ -182,6 +187,7 @@ export { IncrementalAnalysisPlugin } from './plugins/analysis/IncrementalAnalysi
|
|
|
182
187
|
|
|
183
188
|
// Enrichment plugins
|
|
184
189
|
export { MethodCallResolver } from './plugins/enrichment/MethodCallResolver.js';
|
|
190
|
+
export { ArgumentParameterLinker } from './plugins/enrichment/ArgumentParameterLinker.js';
|
|
185
191
|
export { AliasTracker } from './plugins/enrichment/AliasTracker.js';
|
|
186
192
|
export { ValueDomainAnalyzer } from './plugins/enrichment/ValueDomainAnalyzer.js';
|
|
187
193
|
export { MountPointResolver } from './plugins/enrichment/MountPointResolver.js';
|
|
@@ -189,7 +195,18 @@ export { PrefixEvaluator } from './plugins/enrichment/PrefixEvaluator.js';
|
|
|
189
195
|
export { InstanceOfResolver } from './plugins/enrichment/InstanceOfResolver.js';
|
|
190
196
|
export { HTTPConnectionEnricher } from './plugins/enrichment/HTTPConnectionEnricher.js';
|
|
191
197
|
export { ImportExportLinker } from './plugins/enrichment/ImportExportLinker.js';
|
|
198
|
+
export { FunctionCallResolver } from './plugins/enrichment/FunctionCallResolver.js';
|
|
192
199
|
export { RustFFIEnricher } from './plugins/enrichment/RustFFIEnricher.js';
|
|
200
|
+
export { NodejsBuiltinsResolver } from './plugins/enrichment/NodejsBuiltinsResolver.js';
|
|
201
|
+
export { ExternalCallResolver } from './plugins/enrichment/ExternalCallResolver.js';
|
|
202
|
+
export { ClosureCaptureEnricher } from './plugins/enrichment/ClosureCaptureEnricher.js';
|
|
203
|
+
|
|
204
|
+
// Builtin registry
|
|
205
|
+
export { BuiltinRegistry } from './data/builtins/index.js';
|
|
206
|
+
export type { BuiltinFunctionDef, BuiltinModuleDef, SecurityCategory } from './data/builtins/index.js';
|
|
207
|
+
|
|
208
|
+
// Globals registry
|
|
209
|
+
export { GlobalsRegistry, ALL_GLOBALS } from './data/globals/index.js';
|
|
193
210
|
|
|
194
211
|
// Validation plugins
|
|
195
212
|
export { CallResolverValidator } from './plugins/validation/CallResolverValidator.js';
|
|
@@ -200,6 +217,7 @@ export { GraphConnectivityValidator } from './plugins/validation/GraphConnectivi
|
|
|
200
217
|
export { DataFlowValidator } from './plugins/validation/DataFlowValidator.js';
|
|
201
218
|
export { TypeScriptDeadCodeValidator } from './plugins/validation/TypeScriptDeadCodeValidator.js';
|
|
202
219
|
export { NodeCreationValidator } from './plugins/validation/NodeCreationValidator.js';
|
|
220
|
+
export { BrokenImportValidator } from './plugins/validation/BrokenImportValidator.js';
|
|
203
221
|
|
|
204
222
|
// Discovery plugins
|
|
205
223
|
export { SimpleProjectDiscovery } from './plugins/discovery/SimpleProjectDiscovery.js';
|
|
@@ -236,5 +254,32 @@ export type {
|
|
|
236
254
|
} from './plugins/vcs/VCSPlugin.js';
|
|
237
255
|
export type { CommitInfo } from './plugins/vcs/GitPlugin.js';
|
|
238
256
|
|
|
257
|
+
// Schema extraction
|
|
258
|
+
export { InterfaceSchemaExtractor, GraphSchemaExtractor } from './schema/index.js';
|
|
259
|
+
export type {
|
|
260
|
+
InterfaceSchema,
|
|
261
|
+
PropertySchema,
|
|
262
|
+
ExtractOptions,
|
|
263
|
+
GraphSchema,
|
|
264
|
+
NodeTypeSchema,
|
|
265
|
+
EdgeTypeSchema,
|
|
266
|
+
GraphExtractOptions,
|
|
267
|
+
} from './schema/index.js';
|
|
268
|
+
|
|
269
|
+
// Graph Query Utilities
|
|
270
|
+
export { findCallsInFunction, findContainingFunction, traceValues, aggregateValues, NONDETERMINISTIC_PATTERNS, NONDETERMINISTIC_OBJECTS } from './queries/index.js';
|
|
271
|
+
export type {
|
|
272
|
+
CallInfo,
|
|
273
|
+
CallerInfo,
|
|
274
|
+
FindCallsOptions,
|
|
275
|
+
TracedValue,
|
|
276
|
+
ValueSource,
|
|
277
|
+
UnknownReason,
|
|
278
|
+
TraceValuesOptions,
|
|
279
|
+
ValueSetResult,
|
|
280
|
+
TraceValuesGraphBackend,
|
|
281
|
+
NondeterministicPattern,
|
|
282
|
+
} from './queries/index.js';
|
|
283
|
+
|
|
239
284
|
// Re-export types for convenience
|
|
240
285
|
export type * from '@grafema/types';
|
|
@@ -11,7 +11,7 @@ import type { NodePath } from '@babel/traverse';
|
|
|
11
11
|
import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
12
12
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
13
13
|
import type { NodeRecord } from '@grafema/types';
|
|
14
|
-
import { getLine } from './ast/utils/location.js';
|
|
14
|
+
import { getLine, getColumn } from './ast/utils/location.js';
|
|
15
15
|
|
|
16
16
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
17
|
const traverse = (traverseModule as any).default || traverseModule;
|
|
@@ -30,6 +30,7 @@ interface DatabaseQueryNode {
|
|
|
30
30
|
method: string;
|
|
31
31
|
file: string;
|
|
32
32
|
line: number;
|
|
33
|
+
column: number;
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
/**
|
|
@@ -224,7 +225,8 @@ export class DatabaseAnalyzer extends Plugin {
|
|
|
224
225
|
object: objectName,
|
|
225
226
|
method: methodName,
|
|
226
227
|
file: module.file!,
|
|
227
|
-
line: getLine(node)
|
|
228
|
+
line: getLine(node),
|
|
229
|
+
column: getColumn(node)
|
|
228
230
|
});
|
|
229
231
|
}
|
|
230
232
|
}
|
|
@@ -13,7 +13,7 @@ import { Plugin, createSuccessResult, createErrorResult } from '../Plugin.js';
|
|
|
13
13
|
import type { PluginContext, PluginResult, PluginMetadata } from '../Plugin.js';
|
|
14
14
|
import type { NodeRecord } from '@grafema/types';
|
|
15
15
|
import { NetworkRequestNode } from '../../core/nodes/NetworkRequestNode.js';
|
|
16
|
-
import { getLine } from './ast/utils/location.js';
|
|
16
|
+
import { getLine, getColumn } from './ast/utils/location.js';
|
|
17
17
|
|
|
18
18
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
19
|
const traverse = (traverseModule as any).default || traverseModule;
|
|
@@ -29,6 +29,7 @@ interface EndpointNode {
|
|
|
29
29
|
localPath: string;
|
|
30
30
|
file: string;
|
|
31
31
|
line: number;
|
|
32
|
+
column: number;
|
|
32
33
|
mountedOn: string;
|
|
33
34
|
}
|
|
34
35
|
|
|
@@ -43,6 +44,7 @@ interface MountPointNode {
|
|
|
43
44
|
targetVariable: string | null;
|
|
44
45
|
file: string;
|
|
45
46
|
line: number;
|
|
47
|
+
column: number;
|
|
46
48
|
mountedOn: string;
|
|
47
49
|
}
|
|
48
50
|
|
|
@@ -210,6 +212,7 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
210
212
|
localPath: routePath,
|
|
211
213
|
file: module.file!,
|
|
212
214
|
line: getLine(node),
|
|
215
|
+
column: getColumn(node),
|
|
213
216
|
mountedOn: objectName
|
|
214
217
|
});
|
|
215
218
|
}
|
|
@@ -287,6 +290,7 @@ export class ExpressAnalyzer extends Plugin {
|
|
|
287
290
|
targetVariable: targetVariable,
|
|
288
291
|
file: module.file!,
|
|
289
292
|
line: getLine(node),
|
|
293
|
+
column: getColumn(node),
|
|
290
294
|
mountedOn: objectName
|
|
291
295
|
});
|
|
292
296
|
}
|