@grafema/util 0.3.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/LICENSE +190 -0
- package/dist/api/GraphAPI.d.ts +87 -0
- package/dist/api/GraphAPI.d.ts.map +1 -0
- package/dist/api/GraphAPI.js +212 -0
- package/dist/api/GraphAPI.js.map +1 -0
- package/dist/api/GuaranteeAPI.d.ts +147 -0
- package/dist/api/GuaranteeAPI.d.ts.map +1 -0
- package/dist/api/GuaranteeAPI.js +290 -0
- package/dist/api/GuaranteeAPI.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +214 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +441 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/CoverageAnalyzer.d.ts +65 -0
- package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
- package/dist/core/CoverageAnalyzer.js +199 -0
- package/dist/core/CoverageAnalyzer.js.map +1 -0
- package/dist/core/FileExplainer.d.ts +101 -0
- package/dist/core/FileExplainer.d.ts.map +1 -0
- package/dist/core/FileExplainer.js +140 -0
- package/dist/core/FileExplainer.js.map +1 -0
- package/dist/core/FileOverview.d.ts +124 -0
- package/dist/core/FileOverview.d.ts.map +1 -0
- package/dist/core/FileOverview.js +279 -0
- package/dist/core/FileOverview.js.map +1 -0
- package/dist/core/GrafemaUri.d.ts +66 -0
- package/dist/core/GrafemaUri.d.ts.map +1 -0
- package/dist/core/GrafemaUri.js +191 -0
- package/dist/core/GrafemaUri.js.map +1 -0
- package/dist/core/GraphBackend.d.ts +158 -0
- package/dist/core/GraphBackend.d.ts.map +1 -0
- package/dist/core/GraphBackend.js +85 -0
- package/dist/core/GraphBackend.js.map +1 -0
- package/dist/core/GraphFreshnessChecker.d.ts +33 -0
- package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
- package/dist/core/GraphFreshnessChecker.js +104 -0
- package/dist/core/GraphFreshnessChecker.js.map +1 -0
- package/dist/core/GuaranteeManager.d.ts +254 -0
- package/dist/core/GuaranteeManager.d.ts.map +1 -0
- package/dist/core/GuaranteeManager.js +447 -0
- package/dist/core/GuaranteeManager.js.map +1 -0
- package/dist/core/HashUtils.d.ts +24 -0
- package/dist/core/HashUtils.d.ts.map +1 -0
- package/dist/core/HashUtils.js +46 -0
- package/dist/core/HashUtils.js.map +1 -0
- package/dist/core/IncrementalReanalyzer.d.ts +33 -0
- package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
- package/dist/core/IncrementalReanalyzer.js +67 -0
- package/dist/core/IncrementalReanalyzer.js.map +1 -0
- package/dist/core/ResourceRegistry.d.ts +17 -0
- package/dist/core/ResourceRegistry.d.ts.map +1 -0
- package/dist/core/ResourceRegistry.js +32 -0
- package/dist/core/ResourceRegistry.js.map +1 -0
- package/dist/core/SemanticId.d.ts +159 -0
- package/dist/core/SemanticId.d.ts.map +1 -0
- package/dist/core/SemanticId.js +291 -0
- package/dist/core/SemanticId.js.map +1 -0
- package/dist/core/VersionManager.d.ts +166 -0
- package/dist/core/VersionManager.d.ts.map +1 -0
- package/dist/core/VersionManager.js +239 -0
- package/dist/core/VersionManager.js.map +1 -0
- package/dist/core/brandNodeInternal.d.ts +14 -0
- package/dist/core/brandNodeInternal.d.ts.map +1 -0
- package/dist/core/brandNodeInternal.js +4 -0
- package/dist/core/brandNodeInternal.js.map +1 -0
- package/dist/core/nodes/GuaranteeNode.d.ts +76 -0
- package/dist/core/nodes/GuaranteeNode.d.ts.map +1 -0
- package/dist/core/nodes/GuaranteeNode.js +118 -0
- package/dist/core/nodes/GuaranteeNode.js.map +1 -0
- package/dist/core/nodes/IssueNode.d.ts +73 -0
- package/dist/core/nodes/IssueNode.d.ts.map +1 -0
- package/dist/core/nodes/IssueNode.js +130 -0
- package/dist/core/nodes/IssueNode.js.map +1 -0
- package/dist/core/nodes/NodeKind.d.ts +104 -0
- package/dist/core/nodes/NodeKind.d.ts.map +1 -0
- package/dist/core/nodes/NodeKind.js +166 -0
- package/dist/core/nodes/NodeKind.js.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts +103 -0
- package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticCollector.js +133 -0
- package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts +122 -0
- package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticReporter.js +300 -0
- package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
- package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
- package/dist/diagnostics/DiagnosticWriter.js +44 -0
- package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
- package/dist/diagnostics/categories.d.ts +57 -0
- package/dist/diagnostics/categories.d.ts.map +1 -0
- package/dist/diagnostics/categories.js +71 -0
- package/dist/diagnostics/categories.js.map +1 -0
- package/dist/diagnostics/index.d.ts +17 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +15 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/errors/GrafemaError.d.ts +200 -0
- package/dist/errors/GrafemaError.d.ts.map +1 -0
- package/dist/errors/GrafemaError.js +209 -0
- package/dist/errors/GrafemaError.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/instructions/index.d.ts +8 -0
- package/dist/instructions/index.d.ts.map +1 -0
- package/dist/instructions/index.js +20 -0
- package/dist/instructions/index.js.map +1 -0
- package/dist/instructions/onboarding.md +133 -0
- package/dist/knowledge/KnowledgeBase.d.ts +113 -0
- package/dist/knowledge/KnowledgeBase.d.ts.map +1 -0
- package/dist/knowledge/KnowledgeBase.js +420 -0
- package/dist/knowledge/KnowledgeBase.js.map +1 -0
- package/dist/knowledge/SemanticAddressResolver.d.ts +59 -0
- package/dist/knowledge/SemanticAddressResolver.d.ts.map +1 -0
- package/dist/knowledge/SemanticAddressResolver.js +160 -0
- package/dist/knowledge/SemanticAddressResolver.js.map +1 -0
- package/dist/knowledge/git-ingest.d.ts +58 -0
- package/dist/knowledge/git-ingest.d.ts.map +1 -0
- package/dist/knowledge/git-ingest.js +301 -0
- package/dist/knowledge/git-ingest.js.map +1 -0
- package/dist/knowledge/git-queries.d.ts +86 -0
- package/dist/knowledge/git-queries.d.ts.map +1 -0
- package/dist/knowledge/git-queries.js +177 -0
- package/dist/knowledge/git-queries.js.map +1 -0
- package/dist/knowledge/index.d.ts +14 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +10 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/parser.d.ts +39 -0
- package/dist/knowledge/parser.d.ts.map +1 -0
- package/dist/knowledge/parser.js +292 -0
- package/dist/knowledge/parser.js.map +1 -0
- package/dist/knowledge/types.d.ts +133 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +8 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/logging/Logger.d.ts +98 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/logging/Logger.js +274 -0
- package/dist/logging/Logger.js.map +1 -0
- package/dist/notation/archetypes.d.ts +36 -0
- package/dist/notation/archetypes.d.ts.map +1 -0
- package/dist/notation/archetypes.js +173 -0
- package/dist/notation/archetypes.js.map +1 -0
- package/dist/notation/fold.d.ts +25 -0
- package/dist/notation/fold.d.ts.map +1 -0
- package/dist/notation/fold.js +598 -0
- package/dist/notation/fold.js.map +1 -0
- package/dist/notation/index.d.ts +18 -0
- package/dist/notation/index.d.ts.map +1 -0
- package/dist/notation/index.js +16 -0
- package/dist/notation/index.js.map +1 -0
- package/dist/notation/lodExtractor.d.ts +32 -0
- package/dist/notation/lodExtractor.d.ts.map +1 -0
- package/dist/notation/lodExtractor.js +149 -0
- package/dist/notation/lodExtractor.js.map +1 -0
- package/dist/notation/nameShortener.d.ts +22 -0
- package/dist/notation/nameShortener.d.ts.map +1 -0
- package/dist/notation/nameShortener.js +24 -0
- package/dist/notation/nameShortener.js.map +1 -0
- package/dist/notation/perspectives.d.ts +11 -0
- package/dist/notation/perspectives.d.ts.map +1 -0
- package/dist/notation/perspectives.js +16 -0
- package/dist/notation/perspectives.js.map +1 -0
- package/dist/notation/renderer.d.ts +31 -0
- package/dist/notation/renderer.d.ts.map +1 -0
- package/dist/notation/renderer.js +315 -0
- package/dist/notation/renderer.js.map +1 -0
- package/dist/notation/traceRenderer.d.ts +39 -0
- package/dist/notation/traceRenderer.d.ts.map +1 -0
- package/dist/notation/traceRenderer.js +358 -0
- package/dist/notation/traceRenderer.js.map +1 -0
- package/dist/notation/types.d.ts +66 -0
- package/dist/notation/types.d.ts.map +1 -0
- package/dist/notation/types.js +10 -0
- package/dist/notation/types.js.map +1 -0
- package/dist/queries/NodeContext.d.ts +81 -0
- package/dist/queries/NodeContext.d.ts.map +1 -0
- package/dist/queries/NodeContext.js +196 -0
- package/dist/queries/NodeContext.js.map +1 -0
- package/dist/queries/findCallsInFunction.d.ts +62 -0
- package/dist/queries/findCallsInFunction.d.ts.map +1 -0
- package/dist/queries/findCallsInFunction.js +169 -0
- package/dist/queries/findCallsInFunction.js.map +1 -0
- package/dist/queries/findContainingFunction.d.ts +57 -0
- package/dist/queries/findContainingFunction.d.ts.map +1 -0
- package/dist/queries/findContainingFunction.js +91 -0
- package/dist/queries/findContainingFunction.js.map +1 -0
- package/dist/queries/index.d.ts +18 -0
- package/dist/queries/index.d.ts.map +1 -0
- package/dist/queries/index.js +14 -0
- package/dist/queries/index.js.map +1 -0
- package/dist/queries/traceDataflow.d.ts +65 -0
- package/dist/queries/traceDataflow.d.ts.map +1 -0
- package/dist/queries/traceDataflow.js +754 -0
- package/dist/queries/traceDataflow.js.map +1 -0
- package/dist/queries/traceValues.d.ts +70 -0
- package/dist/queries/traceValues.d.ts.map +1 -0
- package/dist/queries/traceValues.js +373 -0
- package/dist/queries/traceValues.js.map +1 -0
- package/dist/queries/types.d.ts +166 -0
- package/dist/queries/types.d.ts.map +1 -0
- package/dist/queries/types.js +10 -0
- package/dist/queries/types.js.map +1 -0
- package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
- package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/GraphSchemaExtractor.js +125 -0
- package/dist/schema/GraphSchemaExtractor.js.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
- package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
- package/dist/schema/InterfaceSchemaExtractor.js +113 -0
- package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +3 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts +356 -0
- package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -0
- package/dist/storage/backends/RFDBServerBackend.js +748 -0
- package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
- package/dist/storage/backends/typeValidation.d.ts +47 -0
- package/dist/storage/backends/typeValidation.d.ts.map +1 -0
- package/dist/storage/backends/typeValidation.js +141 -0
- package/dist/storage/backends/typeValidation.js.map +1 -0
- package/dist/utils/findRfdbBinary.d.ts +67 -0
- package/dist/utils/findRfdbBinary.d.ts.map +1 -0
- package/dist/utils/findRfdbBinary.js +261 -0
- package/dist/utils/findRfdbBinary.js.map +1 -0
- package/dist/utils/lazyDownload.d.ts +43 -0
- package/dist/utils/lazyDownload.d.ts.map +1 -0
- package/dist/utils/lazyDownload.js +175 -0
- package/dist/utils/lazyDownload.js.map +1 -0
- package/dist/utils/moduleResolution.d.ts +134 -0
- package/dist/utils/moduleResolution.d.ts.map +1 -0
- package/dist/utils/moduleResolution.js +189 -0
- package/dist/utils/moduleResolution.js.map +1 -0
- package/dist/utils/resolveNodeFile.d.ts +13 -0
- package/dist/utils/resolveNodeFile.d.ts.map +1 -0
- package/dist/utils/resolveNodeFile.js +18 -0
- package/dist/utils/resolveNodeFile.js.map +1 -0
- package/dist/utils/startRfdbServer.d.ts +63 -0
- package/dist/utils/startRfdbServer.d.ts.map +1 -0
- package/dist/utils/startRfdbServer.js +142 -0
- package/dist/utils/startRfdbServer.js.map +1 -0
- package/dist/validation/PathValidator.d.ts +80 -0
- package/dist/validation/PathValidator.d.ts.map +1 -0
- package/dist/validation/PathValidator.js +252 -0
- package/dist/validation/PathValidator.js.map +1 -0
- package/dist/version.d.ts +11 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +26 -0
- package/dist/version.js.map +1 -0
- package/package.json +50 -0
- package/src/api/GraphAPI.ts +307 -0
- package/src/api/GuaranteeAPI.ts +402 -0
- package/src/config/ConfigLoader.ts +653 -0
- package/src/config/index.ts +13 -0
- package/src/core/CoverageAnalyzer.ts +243 -0
- package/src/core/FileExplainer.ts +179 -0
- package/src/core/FileOverview.ts +397 -0
- package/src/core/GrafemaUri.ts +216 -0
- package/src/core/GraphBackend.ts +266 -0
- package/src/core/GraphFreshnessChecker.ts +145 -0
- package/src/core/GuaranteeManager.ts +684 -0
- package/src/core/HashUtils.ts +48 -0
- package/src/core/IncrementalReanalyzer.ts +106 -0
- package/src/core/ResourceRegistry.ts +39 -0
- package/src/core/SemanticId.ts +423 -0
- package/src/core/VersionManager.ts +405 -0
- package/src/core/brandNodeInternal.ts +16 -0
- package/src/core/nodes/GuaranteeNode.ts +162 -0
- package/src/core/nodes/IssueNode.ts +177 -0
- package/src/core/nodes/NodeKind.ts +192 -0
- package/src/diagnostics/DiagnosticCollector.ts +170 -0
- package/src/diagnostics/DiagnosticReporter.ts +395 -0
- package/src/diagnostics/DiagnosticWriter.ts +50 -0
- package/src/diagnostics/categories.ts +104 -0
- package/src/diagnostics/index.ts +30 -0
- package/src/errors/GrafemaError.ts +297 -0
- package/src/index.ts +261 -0
- package/src/instructions/index.ts +21 -0
- package/src/instructions/onboarding.md +133 -0
- package/src/knowledge/KnowledgeBase.ts +486 -0
- package/src/knowledge/SemanticAddressResolver.ts +191 -0
- package/src/knowledge/git-ingest.ts +402 -0
- package/src/knowledge/git-queries.ts +269 -0
- package/src/knowledge/index.ts +29 -0
- package/src/knowledge/parser.ts +294 -0
- package/src/knowledge/types.ts +146 -0
- package/src/logging/Logger.ts +303 -0
- package/src/notation/archetypes.ts +189 -0
- package/src/notation/fold.ts +696 -0
- package/src/notation/index.ts +27 -0
- package/src/notation/lodExtractor.ts +177 -0
- package/src/notation/nameShortener.ts +24 -0
- package/src/notation/perspectives.ts +18 -0
- package/src/notation/renderer.ts +394 -0
- package/src/notation/traceRenderer.ts +458 -0
- package/src/notation/types.ts +79 -0
- package/src/queries/NodeContext.ts +280 -0
- package/src/queries/findCallsInFunction.ts +249 -0
- package/src/queries/findContainingFunction.ts +124 -0
- package/src/queries/index.ts +44 -0
- package/src/queries/traceDataflow.ts +838 -0
- package/src/queries/traceValues.ts +531 -0
- package/src/queries/types.ts +191 -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 +895 -0
- package/src/storage/backends/typeValidation.ts +154 -0
- package/src/utils/findRfdbBinary.ts +288 -0
- package/src/utils/lazyDownload.ts +206 -0
- package/src/utils/moduleResolution.ts +271 -0
- package/src/utils/resolveNodeFile.ts +18 -0
- package/src/utils/startRfdbServer.ts +197 -0
- package/src/validation/PathValidator.ts +334 -0
- package/src/version.ts +28 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphBackend - abstract base class for graph storage implementations
|
|
3
|
+
*
|
|
4
|
+
* This defines the full contract for graph storage backends.
|
|
5
|
+
* All operations are async for compatibility with disk-based storage.
|
|
6
|
+
*
|
|
7
|
+
* Implementations:
|
|
8
|
+
* - RFDBServerBackend (Rust-based, production)
|
|
9
|
+
* - TestBackend (wrapper over RFDBServerBackend for tests)
|
|
10
|
+
*/
|
|
11
|
+
import type { NodeRecord } from '@grafema/types';
|
|
12
|
+
import type { EdgeRecord, EdgeType } from '@grafema/types';
|
|
13
|
+
export type { NodeRecord as Node } from '@grafema/types';
|
|
14
|
+
export type { EdgeRecord as Edge, EdgeType } from '@grafema/types';
|
|
15
|
+
/**
|
|
16
|
+
* Query filter for finding nodes by attributes
|
|
17
|
+
*/
|
|
18
|
+
export interface AttrQuery {
|
|
19
|
+
kind?: number;
|
|
20
|
+
version?: string;
|
|
21
|
+
file_id?: string;
|
|
22
|
+
file?: string;
|
|
23
|
+
exported?: boolean;
|
|
24
|
+
type?: string;
|
|
25
|
+
name?: string;
|
|
26
|
+
/** When true, name and file filters use substring (contains) matching instead of exact match */
|
|
27
|
+
substringMatch?: boolean;
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Graph statistics
|
|
32
|
+
*/
|
|
33
|
+
export interface GraphStats {
|
|
34
|
+
nodeCount: number;
|
|
35
|
+
edgeCount: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Exported graph data
|
|
39
|
+
*/
|
|
40
|
+
export interface GraphExport {
|
|
41
|
+
nodes: NodeRecord[];
|
|
42
|
+
edges: EdgeRecord[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Abstract GraphBackend class - base for all graph storage implementations
|
|
46
|
+
*/
|
|
47
|
+
export declare abstract class GraphBackend {
|
|
48
|
+
/**
|
|
49
|
+
* Initialize backend
|
|
50
|
+
*/
|
|
51
|
+
abstract initialize(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Connect to storage (alias for initialize)
|
|
54
|
+
*/
|
|
55
|
+
connect(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Close connection and flush data to disk
|
|
58
|
+
*/
|
|
59
|
+
abstract close(): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Clear all data
|
|
62
|
+
*/
|
|
63
|
+
abstract clear(): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Add a single node
|
|
66
|
+
*/
|
|
67
|
+
abstract addNode(node: NodeRecord): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Add multiple nodes (batch operation)
|
|
70
|
+
*/
|
|
71
|
+
abstract addNodes(nodes: NodeRecord[]): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Get node by ID
|
|
74
|
+
*/
|
|
75
|
+
abstract getNode(id: string): Promise<NodeRecord | null>;
|
|
76
|
+
/**
|
|
77
|
+
* Check if node exists
|
|
78
|
+
*/
|
|
79
|
+
abstract nodeExists(id: string): Promise<boolean>;
|
|
80
|
+
/**
|
|
81
|
+
* Delete a node
|
|
82
|
+
*/
|
|
83
|
+
abstract deleteNode(id: string): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Find nodes by attributes
|
|
86
|
+
* @returns Array of node IDs
|
|
87
|
+
*/
|
|
88
|
+
abstract findByAttr(query: AttrQuery): Promise<string[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Add a single edge
|
|
91
|
+
*/
|
|
92
|
+
abstract addEdge(edge: EdgeRecord): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Add multiple edges (batch operation)
|
|
95
|
+
*/
|
|
96
|
+
abstract addEdges(edges: EdgeRecord[]): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Delete an edge
|
|
99
|
+
*/
|
|
100
|
+
abstract deleteEdge(src: string, dst: string, type: string): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Get outgoing edges from a node
|
|
103
|
+
* @param nodeId - Node ID
|
|
104
|
+
* @param edgeTypes - Filter by edge types (optional)
|
|
105
|
+
*/
|
|
106
|
+
abstract getOutgoingEdges(nodeId: string, edgeTypes?: EdgeType[] | null): Promise<EdgeRecord[]>;
|
|
107
|
+
/**
|
|
108
|
+
* Get incoming edges to a node
|
|
109
|
+
* @param nodeId - Node ID
|
|
110
|
+
* @param edgeTypes - Filter by edge types (optional)
|
|
111
|
+
*/
|
|
112
|
+
abstract getIncomingEdges(nodeId: string, edgeTypes?: EdgeType[] | null): Promise<EdgeRecord[]>;
|
|
113
|
+
/**
|
|
114
|
+
* BFS traversal from start nodes
|
|
115
|
+
* @param startIds - Starting nodes
|
|
116
|
+
* @param maxDepth - Maximum depth
|
|
117
|
+
* @param edgeTypes - Edge types to traverse (as numbers)
|
|
118
|
+
* @returns Array of reachable node IDs
|
|
119
|
+
*/
|
|
120
|
+
abstract bfs(startIds: string[], maxDepth: number, edgeTypes: number[]): Promise<string[]>;
|
|
121
|
+
/**
|
|
122
|
+
* Flush data to disk
|
|
123
|
+
*/
|
|
124
|
+
abstract flush(): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Get graph statistics
|
|
127
|
+
*/
|
|
128
|
+
abstract getStats(): Promise<GraphStats>;
|
|
129
|
+
/**
|
|
130
|
+
* Export entire graph to memory (only for tests!)
|
|
131
|
+
* WARNING: Do not use on large graphs
|
|
132
|
+
*/
|
|
133
|
+
abstract export(): Promise<GraphExport>;
|
|
134
|
+
/**
|
|
135
|
+
* Find nodes by predicate (for demo-gui compatibility)
|
|
136
|
+
* WARNING: May be slow on large graphs
|
|
137
|
+
*/
|
|
138
|
+
abstract findNodes(predicate: (node: NodeRecord) => boolean): Promise<NodeRecord[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Get all nodes (for GUI - only for first level visualization)
|
|
141
|
+
* WARNING: Do not use on large graphs
|
|
142
|
+
*/
|
|
143
|
+
abstract getAllNodes(): Promise<NodeRecord[]>;
|
|
144
|
+
/**
|
|
145
|
+
* Get all edges (for GUI)
|
|
146
|
+
* WARNING: Do not use on large graphs
|
|
147
|
+
*/
|
|
148
|
+
abstract getAllEdges(): Promise<EdgeRecord[]>;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Convert node type to numeric kind
|
|
152
|
+
*/
|
|
153
|
+
export declare function typeToKind(type: string): number;
|
|
154
|
+
/**
|
|
155
|
+
* Convert edge type to number
|
|
156
|
+
*/
|
|
157
|
+
export declare function edgeTypeToNumber(type: string): number;
|
|
158
|
+
//# sourceMappingURL=GraphBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphBackend.d.ts","sourceRoot":"","sources":["../../src/core/GraphBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphBackend - abstract base class for graph storage implementations
|
|
3
|
+
*
|
|
4
|
+
* This defines the full contract for graph storage backends.
|
|
5
|
+
* All operations are async for compatibility with disk-based storage.
|
|
6
|
+
*
|
|
7
|
+
* Implementations:
|
|
8
|
+
* - RFDBServerBackend (Rust-based, production)
|
|
9
|
+
* - TestBackend (wrapper over RFDBServerBackend for tests)
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Abstract GraphBackend class - base for all graph storage implementations
|
|
13
|
+
*/
|
|
14
|
+
export class GraphBackend {
|
|
15
|
+
/**
|
|
16
|
+
* Connect to storage (alias for initialize)
|
|
17
|
+
*/
|
|
18
|
+
async connect() {
|
|
19
|
+
return this.initialize();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Node type to numeric kind mapping
|
|
24
|
+
*/
|
|
25
|
+
const NODE_TYPE_TO_KIND = {
|
|
26
|
+
'PROJECT': 1,
|
|
27
|
+
'SERVICE': 2,
|
|
28
|
+
'FUNCTION': 3,
|
|
29
|
+
'CLASS': 4,
|
|
30
|
+
'METHOD': 5,
|
|
31
|
+
'VARIABLE': 6,
|
|
32
|
+
'PARAMETER': 7,
|
|
33
|
+
'MODULE': 8,
|
|
34
|
+
'ROUTE': 9,
|
|
35
|
+
'ENDPOINT': 10,
|
|
36
|
+
'FILE': 11,
|
|
37
|
+
'EXTERNAL_MODULE': 12,
|
|
38
|
+
'IMPORT': 13,
|
|
39
|
+
'EXPORT': 14,
|
|
40
|
+
'CALL_SITE': 15,
|
|
41
|
+
'METHOD_CALL': 16,
|
|
42
|
+
'SCOPE': 17,
|
|
43
|
+
'VARIABLE_DECLARATION': 18,
|
|
44
|
+
'CONSTANT': 19,
|
|
45
|
+
'EVENT_LISTENER': 20,
|
|
46
|
+
'HTTP_REQUEST': 21,
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Convert node type to numeric kind
|
|
50
|
+
*/
|
|
51
|
+
export function typeToKind(type) {
|
|
52
|
+
return NODE_TYPE_TO_KIND[type] || 0;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Edge type to numeric mapping
|
|
56
|
+
*/
|
|
57
|
+
const EDGE_TYPE_TO_NUMBER = {
|
|
58
|
+
'CONTAINS': 1,
|
|
59
|
+
'DEPENDS_ON': 2,
|
|
60
|
+
'CALLS': 3,
|
|
61
|
+
'EXTENDS': 4,
|
|
62
|
+
'IMPLEMENTS': 5,
|
|
63
|
+
'USES': 6,
|
|
64
|
+
'DEFINES': 7,
|
|
65
|
+
'IMPORTS': 8,
|
|
66
|
+
'EXPORTS': 9,
|
|
67
|
+
'ROUTES_TO': 10,
|
|
68
|
+
'DECLARES': 11,
|
|
69
|
+
'HAS_SCOPE': 12,
|
|
70
|
+
'CAPTURES': 13,
|
|
71
|
+
'MODIFIES': 14,
|
|
72
|
+
'WRITES_TO': 15,
|
|
73
|
+
'INSTANCE_OF': 16,
|
|
74
|
+
'HANDLED_BY': 17,
|
|
75
|
+
'HAS_CALLBACK': 18,
|
|
76
|
+
'MAKES_REQUEST': 19,
|
|
77
|
+
'IMPORTS_FROM': 20,
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Convert edge type to number
|
|
81
|
+
*/
|
|
82
|
+
export function edgeTypeToNumber(type) {
|
|
83
|
+
return EDGE_TYPE_TO_NUMBER[type] || 0;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=GraphBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphBackend.js","sourceRoot":"","sources":["../../src/core/GraphBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyCH;;GAEG;AACH,MAAM,OAAgB,YAAY;IAMhC;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;CAsIF;AAED;;GAEG;AACH,MAAM,iBAAiB,GAA2B;IAChD,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,iBAAiB,EAAE,EAAE;IACrB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,OAAO,EAAE,EAAE;IACX,sBAAsB,EAAE,EAAE;IAC1B,UAAU,EAAE,EAAE;IACd,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,mBAAmB,GAA2B;IAClD,UAAU,EAAE,CAAC;IACb,YAAY,EAAE,CAAC;IACf,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,YAAY,EAAE,CAAC;IACf,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphFreshnessChecker - checks if graph data matches current files
|
|
3
|
+
*
|
|
4
|
+
* Compares contentHash stored in MODULE nodes against current file hashes.
|
|
5
|
+
* Used by `grafema check` to detect when files have changed since analysis.
|
|
6
|
+
*/
|
|
7
|
+
import type { NodeRecord } from '@grafema/types';
|
|
8
|
+
export interface StaleModule {
|
|
9
|
+
id: string;
|
|
10
|
+
file: string;
|
|
11
|
+
storedHash: string;
|
|
12
|
+
currentHash: string | null;
|
|
13
|
+
reason: 'changed' | 'deleted' | 'unreadable';
|
|
14
|
+
}
|
|
15
|
+
export interface FreshnessResult {
|
|
16
|
+
isFresh: boolean;
|
|
17
|
+
staleModules: StaleModule[];
|
|
18
|
+
freshCount: number;
|
|
19
|
+
staleCount: number;
|
|
20
|
+
deletedCount: number;
|
|
21
|
+
checkDurationMs: number;
|
|
22
|
+
}
|
|
23
|
+
export interface FreshnessGraph {
|
|
24
|
+
queryNodes(query: {
|
|
25
|
+
type: string;
|
|
26
|
+
}): AsyncGenerator<NodeRecord, void, unknown>;
|
|
27
|
+
}
|
|
28
|
+
export declare class GraphFreshnessChecker {
|
|
29
|
+
checkFreshness(graph: FreshnessGraph, projectPath?: string): Promise<FreshnessResult>;
|
|
30
|
+
private _checkModuleFreshness;
|
|
31
|
+
private _fileExists;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=GraphFreshnessChecker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphFreshnessChecker.d.ts","sourceRoot":"","sources":["../../src/core/GraphFreshnessChecker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;CAChF;AAUD,qBAAa,qBAAqB;IAC1B,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAyD7E,qBAAqB;YAqCrB,WAAW;CAQ1B"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphFreshnessChecker - checks if graph data matches current files
|
|
3
|
+
*
|
|
4
|
+
* Compares contentHash stored in MODULE nodes against current file hashes.
|
|
5
|
+
* Used by `grafema check` to detect when files have changed since analysis.
|
|
6
|
+
*/
|
|
7
|
+
import { access, constants } from 'fs/promises';
|
|
8
|
+
import { calculateFileHashAsync } from './HashUtils.js';
|
|
9
|
+
import { resolveNodeFile } from '../utils/resolveNodeFile.js';
|
|
10
|
+
const BATCH_SIZE = 50;
|
|
11
|
+
export class GraphFreshnessChecker {
|
|
12
|
+
async checkFreshness(graph, projectPath) {
|
|
13
|
+
const startTime = Date.now();
|
|
14
|
+
const modules = [];
|
|
15
|
+
for await (const node of graph.queryNodes({ type: 'MODULE' })) {
|
|
16
|
+
if (node.file && typeof node.contentHash === 'string') {
|
|
17
|
+
modules.push({
|
|
18
|
+
id: node.id,
|
|
19
|
+
file: node.file,
|
|
20
|
+
contentHash: node.contentHash
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (modules.length === 0) {
|
|
25
|
+
return {
|
|
26
|
+
isFresh: true,
|
|
27
|
+
staleModules: [],
|
|
28
|
+
freshCount: 0,
|
|
29
|
+
staleCount: 0,
|
|
30
|
+
deletedCount: 0,
|
|
31
|
+
checkDurationMs: Date.now() - startTime
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const staleModules = [];
|
|
35
|
+
let freshCount = 0;
|
|
36
|
+
let deletedCount = 0;
|
|
37
|
+
for (let i = 0; i < modules.length; i += BATCH_SIZE) {
|
|
38
|
+
const batch = modules.slice(i, i + BATCH_SIZE);
|
|
39
|
+
const results = await Promise.all(batch.map(module => this._checkModuleFreshness(module, projectPath)));
|
|
40
|
+
for (const result of results) {
|
|
41
|
+
if (result === null) {
|
|
42
|
+
freshCount++;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
staleModules.push(result);
|
|
46
|
+
if (result.reason === 'deleted') {
|
|
47
|
+
deletedCount++;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
isFresh: staleModules.length === 0,
|
|
54
|
+
staleModules,
|
|
55
|
+
freshCount,
|
|
56
|
+
staleCount: staleModules.length,
|
|
57
|
+
deletedCount,
|
|
58
|
+
checkDurationMs: Date.now() - startTime
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async _checkModuleFreshness(module, projectPath) {
|
|
62
|
+
const absoluteFile = projectPath ? resolveNodeFile(module.file, projectPath) : module.file;
|
|
63
|
+
const exists = await this._fileExists(absoluteFile);
|
|
64
|
+
if (!exists) {
|
|
65
|
+
return {
|
|
66
|
+
id: module.id,
|
|
67
|
+
file: module.file,
|
|
68
|
+
storedHash: module.contentHash,
|
|
69
|
+
currentHash: null,
|
|
70
|
+
reason: 'deleted'
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const currentHash = await calculateFileHashAsync(absoluteFile);
|
|
74
|
+
if (currentHash === null) {
|
|
75
|
+
return {
|
|
76
|
+
id: module.id,
|
|
77
|
+
file: module.file,
|
|
78
|
+
storedHash: module.contentHash,
|
|
79
|
+
currentHash: null,
|
|
80
|
+
reason: 'unreadable'
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (currentHash !== module.contentHash) {
|
|
84
|
+
return {
|
|
85
|
+
id: module.id,
|
|
86
|
+
file: module.file,
|
|
87
|
+
storedHash: module.contentHash,
|
|
88
|
+
currentHash,
|
|
89
|
+
reason: 'changed'
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
async _fileExists(filePath) {
|
|
95
|
+
try {
|
|
96
|
+
await access(filePath, constants.R_OK);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=GraphFreshnessChecker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphFreshnessChecker.js","sourceRoot":"","sources":["../../src/core/GraphFreshnessChecker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GuaranteeManager - управление гарантиями/инвариантами кода
|
|
3
|
+
*
|
|
4
|
+
* GUARANTEE ноды хранят Datalog правила, которые код должен соблюдать.
|
|
5
|
+
* GOVERNS edges связывают гарантии с модулями, к которым они применяются.
|
|
6
|
+
*
|
|
7
|
+
* Workflow:
|
|
8
|
+
* 1. Создать гарантию (create) → GUARANTEE нода + GOVERNS edges
|
|
9
|
+
* 2. Проверить (check) → выполнить Datalog rule, найти нарушения
|
|
10
|
+
* 3. Экспортировать (export) → сохранить в YAML для version control
|
|
11
|
+
* 4. Импортировать (import) → загрузить из YAML в граф
|
|
12
|
+
* 5. Drift detection → сравнить граф с файлом
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Severity level for guarantees
|
|
16
|
+
*/
|
|
17
|
+
export type GuaranteeSeverity = 'error' | 'warning' | 'info';
|
|
18
|
+
/**
|
|
19
|
+
* Guarantee definition
|
|
20
|
+
*/
|
|
21
|
+
export interface GuaranteeDefinition {
|
|
22
|
+
id: string;
|
|
23
|
+
name?: string;
|
|
24
|
+
rule: string;
|
|
25
|
+
severity?: GuaranteeSeverity;
|
|
26
|
+
governs?: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Guarantee node structure
|
|
30
|
+
*/
|
|
31
|
+
export interface GuaranteeNode {
|
|
32
|
+
id: string;
|
|
33
|
+
type: 'GUARANTEE';
|
|
34
|
+
name: string;
|
|
35
|
+
rule: string;
|
|
36
|
+
severity: GuaranteeSeverity;
|
|
37
|
+
governs: string[];
|
|
38
|
+
version: 'meta';
|
|
39
|
+
createdAt: number;
|
|
40
|
+
governedModules?: string[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Edge structure
|
|
44
|
+
*/
|
|
45
|
+
export interface GraphEdge {
|
|
46
|
+
type: string;
|
|
47
|
+
src: string;
|
|
48
|
+
dst: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Module node
|
|
52
|
+
*/
|
|
53
|
+
export interface ModuleNode {
|
|
54
|
+
id: string;
|
|
55
|
+
type: string;
|
|
56
|
+
file?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Violation binding
|
|
60
|
+
*/
|
|
61
|
+
export interface ViolationBinding {
|
|
62
|
+
name: string;
|
|
63
|
+
value: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Violation result from Datalog
|
|
67
|
+
*/
|
|
68
|
+
export interface ViolationResult {
|
|
69
|
+
bindings?: ViolationBinding[];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Enriched violation info
|
|
73
|
+
*/
|
|
74
|
+
export interface EnrichedViolation {
|
|
75
|
+
nodeId: string;
|
|
76
|
+
type: string;
|
|
77
|
+
name?: string;
|
|
78
|
+
file?: string;
|
|
79
|
+
line?: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check result for a single guarantee
|
|
83
|
+
*/
|
|
84
|
+
export interface GuaranteeCheckResult {
|
|
85
|
+
guaranteeId: string;
|
|
86
|
+
name: string;
|
|
87
|
+
severity: GuaranteeSeverity;
|
|
88
|
+
passed: boolean;
|
|
89
|
+
violationCount: number;
|
|
90
|
+
violations: EnrichedViolation[];
|
|
91
|
+
error: string | null;
|
|
92
|
+
checkDurationMs: number;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check all result
|
|
96
|
+
*/
|
|
97
|
+
export interface CheckAllResult {
|
|
98
|
+
total: number;
|
|
99
|
+
passed: number;
|
|
100
|
+
failed: number;
|
|
101
|
+
errors: number;
|
|
102
|
+
results: GuaranteeCheckResult[];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Import options
|
|
106
|
+
*/
|
|
107
|
+
export interface ImportOptions {
|
|
108
|
+
clearExisting?: boolean;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Import result
|
|
112
|
+
*/
|
|
113
|
+
export interface ImportResult {
|
|
114
|
+
imported: number;
|
|
115
|
+
skipped: number;
|
|
116
|
+
importedIds: string[];
|
|
117
|
+
skippedIds: string[];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Modified guarantee in drift
|
|
121
|
+
*/
|
|
122
|
+
export interface ModifiedGuarantee {
|
|
123
|
+
id: string;
|
|
124
|
+
changes: string[];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Drift summary
|
|
128
|
+
*/
|
|
129
|
+
export interface DriftSummary {
|
|
130
|
+
onlyInGraph: number;
|
|
131
|
+
onlyInFile: number;
|
|
132
|
+
modified: number;
|
|
133
|
+
unchanged: number;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Drift result
|
|
137
|
+
*/
|
|
138
|
+
export interface DriftResult {
|
|
139
|
+
hasDrift: boolean;
|
|
140
|
+
summary: DriftSummary;
|
|
141
|
+
onlyInGraph: string[];
|
|
142
|
+
onlyInFile: string[];
|
|
143
|
+
modified: ModifiedGuarantee[];
|
|
144
|
+
unchanged: string[];
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Export data format
|
|
148
|
+
*/
|
|
149
|
+
export interface ExportData {
|
|
150
|
+
version: number;
|
|
151
|
+
exportedAt: string;
|
|
152
|
+
guarantees: Array<{
|
|
153
|
+
id: string;
|
|
154
|
+
name: string;
|
|
155
|
+
rule: string;
|
|
156
|
+
severity: GuaranteeSeverity;
|
|
157
|
+
governs: string[];
|
|
158
|
+
}>;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Graph interface for GuaranteeManager
|
|
162
|
+
*/
|
|
163
|
+
export interface GuaranteeGraph {
|
|
164
|
+
addNode(node: GuaranteeNode): Promise<void>;
|
|
165
|
+
getNode(id: string): Promise<GuaranteeNode | ModuleNode | null>;
|
|
166
|
+
deleteNode(id: string): Promise<void>;
|
|
167
|
+
queryNodes(filter: {
|
|
168
|
+
type: string;
|
|
169
|
+
}): AsyncIterable<GuaranteeNode | ModuleNode>;
|
|
170
|
+
addEdge(edge: GraphEdge): Promise<void>;
|
|
171
|
+
deleteEdge(src: string, dst: string, type: string): Promise<void>;
|
|
172
|
+
getOutgoingEdges(nodeId: string, types: string[]): Promise<GraphEdge[]>;
|
|
173
|
+
getIncomingEdges(nodeId: string, types: string[]): Promise<GraphEdge[]>;
|
|
174
|
+
checkGuarantee(rule: string): Promise<ViolationResult[]>;
|
|
175
|
+
}
|
|
176
|
+
export declare class GuaranteeManager {
|
|
177
|
+
private graph;
|
|
178
|
+
private projectPath;
|
|
179
|
+
private guaranteesFile;
|
|
180
|
+
constructor(graph: GuaranteeGraph, projectPath: string);
|
|
181
|
+
/**
|
|
182
|
+
* Создать новую гарантию
|
|
183
|
+
*/
|
|
184
|
+
create(guarantee: GuaranteeDefinition): Promise<GuaranteeNode>;
|
|
185
|
+
/**
|
|
186
|
+
* Получить все гарантии из графа
|
|
187
|
+
*/
|
|
188
|
+
list(): Promise<GuaranteeNode[]>;
|
|
189
|
+
/**
|
|
190
|
+
* Проверить гарантию
|
|
191
|
+
*/
|
|
192
|
+
check(guaranteeId: string): Promise<GuaranteeCheckResult>;
|
|
193
|
+
/**
|
|
194
|
+
* Проверить все гарантии
|
|
195
|
+
*/
|
|
196
|
+
checkAll(): Promise<CheckAllResult>;
|
|
197
|
+
/**
|
|
198
|
+
* Extract type references from a Datalog rule.
|
|
199
|
+
* Matches node(X, "TYPE") and edge(X, Y, "TYPE") patterns.
|
|
200
|
+
* Returns unique types array. If nothing parseable, returns empty array.
|
|
201
|
+
*/
|
|
202
|
+
extractRelevantTypes(rule: string): string[];
|
|
203
|
+
/**
|
|
204
|
+
* Selectively check guarantees whose relevant types overlap with changedTypes.
|
|
205
|
+
* Guarantees with no parseable types are always checked (conservative).
|
|
206
|
+
* Returns CheckAllResult with total = all guarantees count,
|
|
207
|
+
* but results only for the checked subset.
|
|
208
|
+
*/
|
|
209
|
+
checkSelective(changedTypes: Set<string>): Promise<CheckAllResult>;
|
|
210
|
+
/**
|
|
211
|
+
* Load guarantees from the project's YAML file (.grafema/guarantees.yaml).
|
|
212
|
+
*
|
|
213
|
+
* Reads the YAML file, skips non-datalog guarantees (e.g., integration-test),
|
|
214
|
+
* and creates GUARANTEE nodes in the graph for each datalog guarantee.
|
|
215
|
+
* Idempotent: skips guarantees that already exist in the graph.
|
|
216
|
+
* Gracefully handles missing file (no error, just returns).
|
|
217
|
+
*
|
|
218
|
+
* @returns ImportResult with counts of imported and skipped guarantees
|
|
219
|
+
*/
|
|
220
|
+
loadFromYaml(): Promise<ImportResult>;
|
|
221
|
+
/**
|
|
222
|
+
* Удалить гарантию
|
|
223
|
+
*/
|
|
224
|
+
delete(guaranteeId: string): Promise<void>;
|
|
225
|
+
/**
|
|
226
|
+
* Экспортировать гарантии в YAML файл
|
|
227
|
+
*/
|
|
228
|
+
export(filePath?: string): Promise<string>;
|
|
229
|
+
/**
|
|
230
|
+
* Импортировать гарантии из YAML файла
|
|
231
|
+
*/
|
|
232
|
+
import(filePath?: string, options?: ImportOptions): Promise<ImportResult>;
|
|
233
|
+
/**
|
|
234
|
+
* Показать drift между графом и файлом
|
|
235
|
+
*/
|
|
236
|
+
drift(filePath?: string): Promise<DriftResult>;
|
|
237
|
+
/**
|
|
238
|
+
* Найти гарантии затронутые изменением ноды
|
|
239
|
+
*/
|
|
240
|
+
findAffectedGuarantees(nodeId: string): Promise<string[]>;
|
|
241
|
+
/**
|
|
242
|
+
* Создать GOVERNS edges к модулям по glob patterns
|
|
243
|
+
*/
|
|
244
|
+
private _createGovernsEdges;
|
|
245
|
+
/**
|
|
246
|
+
* Проверить есть ли изменения между версиями гарантии
|
|
247
|
+
*/
|
|
248
|
+
private _hasChanges;
|
|
249
|
+
/**
|
|
250
|
+
* Описать изменения между версиями
|
|
251
|
+
*/
|
|
252
|
+
private _describeChanges;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=GuaranteeManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuaranteeManager.d.ts","sourceRoot":"","sources":["../../src/core/GuaranteeManager.ts"],"names":[],"mappings":"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"}
|