@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,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GuaranteeAPI - CRUD API for contract-based guarantees
|
|
3
|
+
*
|
|
4
|
+
* Contract-based guarantees use JSON schema validation instead of Datalog rules.
|
|
5
|
+
* They have namespaced types: guarantee:queue, guarantee:api, guarantee:permission
|
|
6
|
+
*
|
|
7
|
+
* This API complements GuaranteeManager which handles Datalog-based GUARANTEE nodes.
|
|
8
|
+
*/
|
|
9
|
+
import { GuaranteeNode } from '../core/nodes/GuaranteeNode.js';
|
|
10
|
+
// Lazy-loaded Ajv instance to avoid import issues
|
|
11
|
+
let ajvInstance = null;
|
|
12
|
+
async function getAjv() {
|
|
13
|
+
if (!ajvInstance) {
|
|
14
|
+
const AjvModule = await import('ajv');
|
|
15
|
+
// Handle both ESM default export and CJS module.exports
|
|
16
|
+
const AjvClass = AjvModule.default || AjvModule;
|
|
17
|
+
// Use Function constructor pattern to avoid TS2351
|
|
18
|
+
const createAjv = AjvClass;
|
|
19
|
+
ajvInstance = new createAjv({ allErrors: true });
|
|
20
|
+
}
|
|
21
|
+
return ajvInstance;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* GuaranteeAPI - CRUD operations for contract-based guarantees
|
|
25
|
+
*/
|
|
26
|
+
export class GuaranteeAPI {
|
|
27
|
+
graph;
|
|
28
|
+
schemaCache;
|
|
29
|
+
constructor(graph) {
|
|
30
|
+
this.graph = graph;
|
|
31
|
+
this.schemaCache = new Map();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a new contract-based guarantee
|
|
35
|
+
*/
|
|
36
|
+
async createGuarantee(input) {
|
|
37
|
+
// Parse type to get namespace
|
|
38
|
+
const parsed = GuaranteeNode.parseId(`${input.type}#${input.name}`);
|
|
39
|
+
if (!parsed) {
|
|
40
|
+
throw new Error(`Invalid guarantee type: ${input.type}`);
|
|
41
|
+
}
|
|
42
|
+
// Create the guarantee node
|
|
43
|
+
const node = GuaranteeNode.create(parsed.namespace, input.name, {
|
|
44
|
+
priority: input.priority,
|
|
45
|
+
status: input.status,
|
|
46
|
+
owner: input.owner,
|
|
47
|
+
schema: input.schema,
|
|
48
|
+
condition: input.condition,
|
|
49
|
+
description: input.description,
|
|
50
|
+
});
|
|
51
|
+
// Validate before saving
|
|
52
|
+
const errors = GuaranteeNode.validate(node);
|
|
53
|
+
if (errors.length > 0) {
|
|
54
|
+
throw new Error(`Invalid guarantee: ${errors.join(', ')}`);
|
|
55
|
+
}
|
|
56
|
+
// Save to graph
|
|
57
|
+
await this.graph.addNode(node);
|
|
58
|
+
// Create GOVERNS edges if specified
|
|
59
|
+
if (input.governs && input.governs.length > 0) {
|
|
60
|
+
for (const targetId of input.governs) {
|
|
61
|
+
await this.addGoverns(node.id, targetId);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return node;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get a guarantee by ID
|
|
68
|
+
*/
|
|
69
|
+
async getGuarantee(id) {
|
|
70
|
+
const node = await this.graph.getNode(id);
|
|
71
|
+
if (!node)
|
|
72
|
+
return null;
|
|
73
|
+
// Verify it's a guarantee type
|
|
74
|
+
if (!GuaranteeNode.isGuaranteeType(node.type)) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return node;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Find guarantees matching filter
|
|
81
|
+
*/
|
|
82
|
+
async findGuarantees(filter = {}) {
|
|
83
|
+
const guarantees = [];
|
|
84
|
+
const types = this.normalizeTypeFilter(filter.type);
|
|
85
|
+
for (const type of types) {
|
|
86
|
+
for await (const node of this.graph.queryNodes({ type })) {
|
|
87
|
+
const g = node;
|
|
88
|
+
// Apply additional filters
|
|
89
|
+
if (filter.priority) {
|
|
90
|
+
const priorities = Array.isArray(filter.priority) ? filter.priority : [filter.priority];
|
|
91
|
+
if (!priorities.includes(g.priority))
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (filter.status) {
|
|
95
|
+
const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];
|
|
96
|
+
if (!statuses.includes(g.status))
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (filter.owner && g.owner !== filter.owner)
|
|
100
|
+
continue;
|
|
101
|
+
guarantees.push(g);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return guarantees;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Update a guarantee
|
|
108
|
+
*/
|
|
109
|
+
async updateGuarantee(id, updates) {
|
|
110
|
+
const existing = await this.getGuarantee(id);
|
|
111
|
+
if (!existing) {
|
|
112
|
+
throw new Error(`Guarantee not found: ${id}`);
|
|
113
|
+
}
|
|
114
|
+
// Apply updates
|
|
115
|
+
const updated = {
|
|
116
|
+
...existing,
|
|
117
|
+
...updates,
|
|
118
|
+
updatedAt: Date.now(),
|
|
119
|
+
};
|
|
120
|
+
// Validate
|
|
121
|
+
const errors = GuaranteeNode.validate(updated);
|
|
122
|
+
if (errors.length > 0) {
|
|
123
|
+
throw new Error(`Invalid guarantee after update: ${errors.join(', ')}`);
|
|
124
|
+
}
|
|
125
|
+
// Delete old and add new (upsert)
|
|
126
|
+
await this.graph.deleteNode(id);
|
|
127
|
+
await this.graph.addNode(updated);
|
|
128
|
+
return updated;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Delete a guarantee
|
|
132
|
+
*/
|
|
133
|
+
async deleteGuarantee(id) {
|
|
134
|
+
const existing = await this.getGuarantee(id);
|
|
135
|
+
if (!existing) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
// Delete GOVERNS edges
|
|
139
|
+
const edges = await this.graph.getOutgoingEdges(id, ['GOVERNS']);
|
|
140
|
+
for (const edge of edges) {
|
|
141
|
+
await this.graph.deleteEdge(edge.src, edge.dst, 'GOVERNS');
|
|
142
|
+
}
|
|
143
|
+
// Delete the node
|
|
144
|
+
await this.graph.deleteNode(id);
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Add GOVERNS edge from guarantee to a node
|
|
149
|
+
*/
|
|
150
|
+
async addGoverns(guaranteeId, nodeId) {
|
|
151
|
+
// Verify guarantee exists
|
|
152
|
+
const guarantee = await this.getGuarantee(guaranteeId);
|
|
153
|
+
if (!guarantee) {
|
|
154
|
+
throw new Error(`Guarantee not found: ${guaranteeId}`);
|
|
155
|
+
}
|
|
156
|
+
// Verify target node exists
|
|
157
|
+
const targetNode = await this.graph.getNode(nodeId);
|
|
158
|
+
if (!targetNode) {
|
|
159
|
+
throw new Error(`Target node not found: ${nodeId}`);
|
|
160
|
+
}
|
|
161
|
+
// Create GOVERNS edge
|
|
162
|
+
await this.graph.addEdge({
|
|
163
|
+
type: 'GOVERNS',
|
|
164
|
+
src: guaranteeId,
|
|
165
|
+
dst: nodeId,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Remove GOVERNS edge
|
|
170
|
+
*/
|
|
171
|
+
async removeGoverns(guaranteeId, nodeId) {
|
|
172
|
+
await this.graph.deleteEdge(guaranteeId, nodeId, 'GOVERNS');
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get nodes governed by a guarantee
|
|
176
|
+
*/
|
|
177
|
+
async getGoverned(guaranteeId) {
|
|
178
|
+
const edges = await this.graph.getOutgoingEdges(guaranteeId, ['GOVERNS']);
|
|
179
|
+
return edges.map(e => e.dst);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get guarantees governing a node
|
|
183
|
+
*/
|
|
184
|
+
async getGoverningGuarantees(nodeId) {
|
|
185
|
+
const edges = await this.graph.getIncomingEdges(nodeId, ['GOVERNS']);
|
|
186
|
+
const guarantees = [];
|
|
187
|
+
for (const edge of edges) {
|
|
188
|
+
const g = await this.getGuarantee(edge.src);
|
|
189
|
+
if (g)
|
|
190
|
+
guarantees.push(g);
|
|
191
|
+
}
|
|
192
|
+
return guarantees;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Check a guarantee using JSON schema validation
|
|
196
|
+
* Returns validation results for governed nodes
|
|
197
|
+
*/
|
|
198
|
+
async checkGuarantee(id) {
|
|
199
|
+
const guarantee = await this.getGuarantee(id);
|
|
200
|
+
if (!guarantee) {
|
|
201
|
+
throw new Error(`Guarantee not found: ${id}`);
|
|
202
|
+
}
|
|
203
|
+
const result = {
|
|
204
|
+
id,
|
|
205
|
+
name: guarantee.name ?? id,
|
|
206
|
+
passed: true,
|
|
207
|
+
errors: [],
|
|
208
|
+
validatedCount: 0,
|
|
209
|
+
};
|
|
210
|
+
// If no schema defined, consider it passing
|
|
211
|
+
if (!guarantee.schema) {
|
|
212
|
+
return result;
|
|
213
|
+
}
|
|
214
|
+
// Get or compile schema validator
|
|
215
|
+
let validate = this.schemaCache.get(id);
|
|
216
|
+
if (!validate) {
|
|
217
|
+
try {
|
|
218
|
+
const ajv = await getAjv();
|
|
219
|
+
validate = ajv.compile(guarantee.schema);
|
|
220
|
+
this.schemaCache.set(id, validate);
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
result.passed = false;
|
|
224
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
225
|
+
result.errors.push(`Invalid schema: ${message}`);
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Get governed nodes and validate them
|
|
230
|
+
const governedIds = await this.getGoverned(id);
|
|
231
|
+
// At this point validate is guaranteed to be defined (we returned if compile failed)
|
|
232
|
+
const validator = validate;
|
|
233
|
+
for (const nodeId of governedIds) {
|
|
234
|
+
const node = await this.graph.getNode(nodeId);
|
|
235
|
+
if (!node)
|
|
236
|
+
continue;
|
|
237
|
+
result.validatedCount++;
|
|
238
|
+
const valid = validator(node);
|
|
239
|
+
if (!valid) {
|
|
240
|
+
result.passed = false;
|
|
241
|
+
const errors = validator.errors;
|
|
242
|
+
if (errors) {
|
|
243
|
+
for (const err of errors) {
|
|
244
|
+
result.errors.push(`${nodeId}: ${err.instancePath} ${err.message}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Check all guarantees
|
|
253
|
+
*/
|
|
254
|
+
async checkAllGuarantees() {
|
|
255
|
+
const guarantees = await this.findGuarantees();
|
|
256
|
+
const results = [];
|
|
257
|
+
let passed = 0;
|
|
258
|
+
let failed = 0;
|
|
259
|
+
for (const g of guarantees) {
|
|
260
|
+
const result = await this.checkGuarantee(g.id);
|
|
261
|
+
results.push(result);
|
|
262
|
+
if (result.passed)
|
|
263
|
+
passed++;
|
|
264
|
+
else
|
|
265
|
+
failed++;
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
total: guarantees.length,
|
|
269
|
+
passed,
|
|
270
|
+
failed,
|
|
271
|
+
results,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Normalize type filter to array of types
|
|
276
|
+
*/
|
|
277
|
+
normalizeTypeFilter(type) {
|
|
278
|
+
if (!type) {
|
|
279
|
+
return GuaranteeNode.getTypes();
|
|
280
|
+
}
|
|
281
|
+
return Array.isArray(type) ? type : [type];
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Clear schema cache (useful after schema updates)
|
|
285
|
+
*/
|
|
286
|
+
clearSchemaCache() {
|
|
287
|
+
this.schemaCache.clear();
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=GuaranteeAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuaranteeAPI.js","sourceRoot":"","sources":["../../src/api/GuaranteeAPI.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import type { ServiceDefinition, RoutingRule } from '@grafema/types';
|
|
2
|
+
/**
|
|
3
|
+
* Grafema configuration schema.
|
|
4
|
+
*
|
|
5
|
+
* YAML Location: .grafema/config.yaml (preferred) or .grafema/config.json (deprecated)
|
|
6
|
+
*
|
|
7
|
+
* Example config.yaml:
|
|
8
|
+
*
|
|
9
|
+
* ```yaml
|
|
10
|
+
* # Plugins for each analysis phase
|
|
11
|
+
* plugins:
|
|
12
|
+
* indexing:
|
|
13
|
+
* - JSModuleIndexer
|
|
14
|
+
* analysis:
|
|
15
|
+
* - CoreV2Analyzer
|
|
16
|
+
* - ExpressRouteAnalyzer
|
|
17
|
+
* enrichment:
|
|
18
|
+
* - ExportEntityLinker
|
|
19
|
+
* validation:
|
|
20
|
+
* - EvalBanValidator
|
|
21
|
+
*
|
|
22
|
+
* # Optional: Explicit service definitions (bypass auto-discovery)
|
|
23
|
+
* services:
|
|
24
|
+
* - name: "backend"
|
|
25
|
+
* path: "apps/backend" # Relative to project root
|
|
26
|
+
* entryPoint: "src/index.ts" # Optional, auto-detected if omitted
|
|
27
|
+
* - name: "frontend"
|
|
28
|
+
* path: "apps/frontend"
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* If 'services' is not specified or empty, auto-discovery is used (SimpleProjectDiscovery).
|
|
32
|
+
* If 'services' is specified and non-empty, auto-discovery plugins are skipped entirely.
|
|
33
|
+
*/
|
|
34
|
+
export interface GrafemaConfig {
|
|
35
|
+
/**
|
|
36
|
+
* Config schema version (major.minor.patch, no pre-release tag).
|
|
37
|
+
* Must be compatible with the running Grafema version.
|
|
38
|
+
* If omitted, no version check is performed (backward compatibility).
|
|
39
|
+
*
|
|
40
|
+
* @example "0.2.5"
|
|
41
|
+
*/
|
|
42
|
+
version?: string;
|
|
43
|
+
plugins: {
|
|
44
|
+
discovery?: string[];
|
|
45
|
+
indexing: string[];
|
|
46
|
+
analysis: string[];
|
|
47
|
+
enrichment: string[];
|
|
48
|
+
validation: string[];
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Optional explicit services for manual configuration.
|
|
52
|
+
* If provided and non-empty, auto-discovery is skipped.
|
|
53
|
+
*/
|
|
54
|
+
services: ServiceDefinition[];
|
|
55
|
+
/**
|
|
56
|
+
* Glob patterns for files to include during indexing (optional).
|
|
57
|
+
* See OrchestratorConfig.include for documentation.
|
|
58
|
+
*/
|
|
59
|
+
include?: string[];
|
|
60
|
+
/**
|
|
61
|
+
* Glob patterns for files to exclude during indexing (optional).
|
|
62
|
+
* See OrchestratorConfig.exclude for documentation.
|
|
63
|
+
*/
|
|
64
|
+
exclude?: string[];
|
|
65
|
+
/**
|
|
66
|
+
* Routing rules for cross-service URL mapping (REG-256).
|
|
67
|
+
* Describes how infrastructure (nginx, gateway) transforms URLs between services.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```yaml
|
|
71
|
+
* routing:
|
|
72
|
+
* - from: frontend
|
|
73
|
+
* to: backend
|
|
74
|
+
* stripPrefix: /api
|
|
75
|
+
* - from: frontend
|
|
76
|
+
* to: auth-service
|
|
77
|
+
* stripPrefix: /auth
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
routing?: RoutingRule[];
|
|
81
|
+
/**
|
|
82
|
+
* Enable strict mode for fail-fast debugging.
|
|
83
|
+
* When true, analysis fails if enrichers cannot resolve references.
|
|
84
|
+
* When false (default), graceful degradation with warnings.
|
|
85
|
+
*
|
|
86
|
+
* Can be overridden via CLI: --strict
|
|
87
|
+
*/
|
|
88
|
+
strict?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Multi-root workspace configuration (REG-76).
|
|
91
|
+
* Allows indexing multiple directories as a single unified graph.
|
|
92
|
+
* Each root is prefixed in semantic IDs to prevent collisions.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```yaml
|
|
96
|
+
* workspace:
|
|
97
|
+
* roots:
|
|
98
|
+
* - ./backend
|
|
99
|
+
* - ./frontend
|
|
100
|
+
* - ./shared
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
workspace?: WorkspaceConfig;
|
|
104
|
+
/**
|
|
105
|
+
* URI configuration for grafema:// identifiers.
|
|
106
|
+
* Used by MCP and CLI for compact<->URI conversion.
|
|
107
|
+
*/
|
|
108
|
+
uri?: {
|
|
109
|
+
/** URI authority (e.g., "github.com/owner/repo"). Auto-detected if omitted. */
|
|
110
|
+
authority?: string;
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Multi-root workspace configuration.
|
|
115
|
+
* Each root directory is indexed separately but produces a unified graph.
|
|
116
|
+
* Root names (basename of path) are prefixed to file paths in semantic IDs.
|
|
117
|
+
*/
|
|
118
|
+
export interface WorkspaceConfig {
|
|
119
|
+
/**
|
|
120
|
+
* List of root directories to include in the workspace.
|
|
121
|
+
* Paths are relative to the project root (where .grafema/ is located).
|
|
122
|
+
* Each root's basename is used as prefix in semantic IDs.
|
|
123
|
+
*/
|
|
124
|
+
roots: string[];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Default plugin configuration.
|
|
128
|
+
* Matches current DEFAULT_PLUGINS in analyze.ts and config.ts (MCP).
|
|
129
|
+
*/
|
|
130
|
+
export declare const DEFAULT_CONFIG: GrafemaConfig;
|
|
131
|
+
/**
|
|
132
|
+
* Load Grafema config from project directory.
|
|
133
|
+
*
|
|
134
|
+
* Priority:
|
|
135
|
+
* 1. config.yaml (preferred)
|
|
136
|
+
* 2. config.json (deprecated, fallback)
|
|
137
|
+
* 3. DEFAULT_CONFIG (if neither exists)
|
|
138
|
+
*
|
|
139
|
+
* Warnings:
|
|
140
|
+
* - Logs deprecation warning if config.json is used
|
|
141
|
+
* - Logs parse errors but doesn't throw (returns defaults)
|
|
142
|
+
*
|
|
143
|
+
* @param projectPath - Absolute path to project root
|
|
144
|
+
* @param logger - Optional logger for warnings (defaults to console.warn)
|
|
145
|
+
* @returns Parsed config or defaults
|
|
146
|
+
*/
|
|
147
|
+
export declare function loadConfig(projectPath: string, logger?: {
|
|
148
|
+
warn: (msg: string) => void;
|
|
149
|
+
}): GrafemaConfig;
|
|
150
|
+
/**
|
|
151
|
+
* Validate config version compatibility with running Grafema version.
|
|
152
|
+
* THROWS on error (fail loudly per project convention).
|
|
153
|
+
*
|
|
154
|
+
* Compares major.minor.patch (pre-release tags are stripped).
|
|
155
|
+
* If config has no version field, validation passes silently (backward compat).
|
|
156
|
+
*
|
|
157
|
+
* @param configVersion - Version string from config file (may be undefined)
|
|
158
|
+
* @param currentVersion - Override for testing (defaults to GRAFEMA_VERSION)
|
|
159
|
+
*/
|
|
160
|
+
export declare function validateVersion(configVersion: unknown, currentVersion?: string): void;
|
|
161
|
+
/**
|
|
162
|
+
* Validate services array structure.
|
|
163
|
+
* THROWS on error (fail loudly per Linus review).
|
|
164
|
+
*
|
|
165
|
+
* @param services - Parsed services array (may be undefined)
|
|
166
|
+
* @param projectPath - Project root for path validation
|
|
167
|
+
*/
|
|
168
|
+
export declare function validateServices(services: unknown, projectPath: string): void;
|
|
169
|
+
/**
|
|
170
|
+
* Validate workspace configuration (REG-76).
|
|
171
|
+
* THROWS on error (fail loudly per project convention).
|
|
172
|
+
*
|
|
173
|
+
* Validation rules:
|
|
174
|
+
* 1. workspace.roots must be an array if provided
|
|
175
|
+
* 2. Each root must be a non-empty string
|
|
176
|
+
* 3. Each root path must exist and be a directory
|
|
177
|
+
* 4. Root basenames must be unique (to prevent semantic ID collisions)
|
|
178
|
+
*
|
|
179
|
+
* @param workspace - Parsed workspace config (may be undefined)
|
|
180
|
+
* @param projectPath - Project root for path validation
|
|
181
|
+
*/
|
|
182
|
+
export declare function validateWorkspace(workspace: unknown, projectPath: string): void;
|
|
183
|
+
/**
|
|
184
|
+
* Validate routing rules structure (REG-256).
|
|
185
|
+
* THROWS on error (fail loudly per project convention).
|
|
186
|
+
*
|
|
187
|
+
* Validation rules:
|
|
188
|
+
* 1. Must be an array if provided
|
|
189
|
+
* 2. Each rule must have 'from' and 'to' as non-empty strings
|
|
190
|
+
* 3. 'stripPrefix' must start with '/' if provided
|
|
191
|
+
* 4. 'addPrefix' must start with '/' if provided
|
|
192
|
+
* 5. 'from' and 'to' must reference services defined in the services array
|
|
193
|
+
*
|
|
194
|
+
* @param routing - Parsed routing rules (may be undefined)
|
|
195
|
+
* @param services - Parsed services array (for cross-validation)
|
|
196
|
+
*/
|
|
197
|
+
export declare function validateRouting(routing: unknown, services: ServiceDefinition[]): void;
|
|
198
|
+
/**
|
|
199
|
+
* Validate include/exclude patterns.
|
|
200
|
+
* THROWS on error (fail loudly per project convention).
|
|
201
|
+
*
|
|
202
|
+
* Validation rules:
|
|
203
|
+
* 1. Must be arrays if provided
|
|
204
|
+
* 2. Array elements must be non-empty strings
|
|
205
|
+
* 3. Warn (don't error) if include array is empty (would exclude everything)
|
|
206
|
+
*
|
|
207
|
+
* @param include - Parsed include patterns (may be undefined)
|
|
208
|
+
* @param exclude - Parsed exclude patterns (may be undefined)
|
|
209
|
+
* @param logger - Logger for warnings
|
|
210
|
+
*/
|
|
211
|
+
export declare function validatePatterns(include: unknown, exclude: unknown, logger: {
|
|
212
|
+
warn: (msg: string) => void;
|
|
213
|
+
}): void;
|
|
214
|
+
//# sourceMappingURL=ConfigLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF;;;OAGG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAE9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IAExB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAE5B;;;OAGG;IACH,GAAG,CAAC,EAAE;QACJ,+EAA+E;QAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,aA0C5B,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAY,GAChD,aAAa,CAsFf;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,OAAO,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CAyBN;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAqE7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA+D/E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI,CA8DrF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACtC,IAAI,CAkCN"}
|