@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,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger - Lightweight logging for Grafema
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - 5 log levels: silent, errors, warnings, info, debug
|
|
6
|
+
* - Context support for structured logging
|
|
7
|
+
* - Console and file output (or both via MultiLogger)
|
|
8
|
+
* - Safe handling of circular references
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const logger = createLogger('info');
|
|
12
|
+
* logger.info('Processing files', { count: 150 });
|
|
13
|
+
*
|
|
14
|
+
* // Write logs to file (REG-199):
|
|
15
|
+
* const logger = createLogger('info', { logFile: '.grafema/analysis.log' });
|
|
16
|
+
*/
|
|
17
|
+
import { createWriteStream, writeFileSync, mkdirSync, accessSync, statSync, constants } from 'fs';
|
|
18
|
+
import { dirname, resolve } from 'path';
|
|
19
|
+
/**
|
|
20
|
+
* Log level priorities (higher = more verbose)
|
|
21
|
+
*/
|
|
22
|
+
const LOG_LEVEL_PRIORITY = {
|
|
23
|
+
silent: 0,
|
|
24
|
+
errors: 1,
|
|
25
|
+
warnings: 2,
|
|
26
|
+
info: 3,
|
|
27
|
+
debug: 4,
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Minimum level required for each method
|
|
31
|
+
*/
|
|
32
|
+
const METHOD_LEVELS = {
|
|
33
|
+
error: LOG_LEVEL_PRIORITY.errors,
|
|
34
|
+
warn: LOG_LEVEL_PRIORITY.warnings,
|
|
35
|
+
info: LOG_LEVEL_PRIORITY.info,
|
|
36
|
+
debug: LOG_LEVEL_PRIORITY.debug,
|
|
37
|
+
trace: LOG_LEVEL_PRIORITY.debug,
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Safe JSON stringify that handles circular references
|
|
41
|
+
*/
|
|
42
|
+
function safeStringify(obj) {
|
|
43
|
+
const seen = new WeakSet();
|
|
44
|
+
return JSON.stringify(obj, (_key, value) => {
|
|
45
|
+
if (typeof value === 'object' && value !== null) {
|
|
46
|
+
if (seen.has(value)) {
|
|
47
|
+
return '[Circular]';
|
|
48
|
+
}
|
|
49
|
+
seen.add(value);
|
|
50
|
+
}
|
|
51
|
+
return value;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Format log message with optional context
|
|
56
|
+
*/
|
|
57
|
+
function formatMessage(message, context) {
|
|
58
|
+
if (!context || Object.keys(context).length === 0) {
|
|
59
|
+
return message;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
return `${message} ${safeStringify(context)}`;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return `${message} [context serialization failed]`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Console-based Logger implementation
|
|
70
|
+
*
|
|
71
|
+
* Respects log level threshold - methods below threshold are no-ops.
|
|
72
|
+
*/
|
|
73
|
+
export class ConsoleLogger {
|
|
74
|
+
level;
|
|
75
|
+
priority;
|
|
76
|
+
constructor(logLevel = 'info') {
|
|
77
|
+
this.level = logLevel;
|
|
78
|
+
this.priority = LOG_LEVEL_PRIORITY[logLevel];
|
|
79
|
+
}
|
|
80
|
+
shouldLog(methodLevel) {
|
|
81
|
+
return this.priority >= methodLevel;
|
|
82
|
+
}
|
|
83
|
+
error(message, context) {
|
|
84
|
+
if (!this.shouldLog(METHOD_LEVELS.error))
|
|
85
|
+
return;
|
|
86
|
+
try {
|
|
87
|
+
console.error(formatMessage(`[ERROR] ${message}`, context));
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
console.log(`[ERROR] ${message} [logging failed]`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
warn(message, context) {
|
|
94
|
+
if (!this.shouldLog(METHOD_LEVELS.warn))
|
|
95
|
+
return;
|
|
96
|
+
try {
|
|
97
|
+
console.warn(formatMessage(`[WARN] ${message}`, context));
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
console.log(`[WARN] ${message} [logging failed]`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
info(message, context) {
|
|
104
|
+
if (!this.shouldLog(METHOD_LEVELS.info))
|
|
105
|
+
return;
|
|
106
|
+
try {
|
|
107
|
+
console.info(formatMessage(`[INFO] ${message}`, context));
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
console.log(`[INFO] ${message} [logging failed]`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
debug(message, context) {
|
|
114
|
+
if (!this.shouldLog(METHOD_LEVELS.debug))
|
|
115
|
+
return;
|
|
116
|
+
try {
|
|
117
|
+
console.debug(formatMessage(`[DEBUG] ${message}`, context));
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
console.log(`[DEBUG] ${message} [logging failed]`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
trace(message, context) {
|
|
124
|
+
if (!this.shouldLog(METHOD_LEVELS.trace))
|
|
125
|
+
return;
|
|
126
|
+
try {
|
|
127
|
+
console.debug(formatMessage(`[TRACE] ${message}`, context));
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
console.log(`[TRACE] ${message} [logging failed]`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* File-based Logger implementation (REG-199)
|
|
136
|
+
*
|
|
137
|
+
* Writes log messages to a file with ISO timestamps using a write stream
|
|
138
|
+
* (non-blocking I/O). File is truncated on construction (overwritten each run).
|
|
139
|
+
* Parent directories are created automatically.
|
|
140
|
+
*
|
|
141
|
+
* Validates path on construction — throws if the directory is not writable
|
|
142
|
+
* or the path points to a directory.
|
|
143
|
+
*/
|
|
144
|
+
export class FileLogger {
|
|
145
|
+
priority;
|
|
146
|
+
stream;
|
|
147
|
+
constructor(logLevel, filePath) {
|
|
148
|
+
this.priority = LOG_LEVEL_PRIORITY[logLevel];
|
|
149
|
+
const resolvedPath = resolve(filePath);
|
|
150
|
+
// Create parent directories
|
|
151
|
+
const dir = dirname(resolvedPath);
|
|
152
|
+
mkdirSync(dir, { recursive: true });
|
|
153
|
+
// Validate: parent directory must be writable
|
|
154
|
+
try {
|
|
155
|
+
accessSync(dir, constants.W_OK);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
throw new Error(`Cannot write log file: directory '${dir}' is not writable`);
|
|
159
|
+
}
|
|
160
|
+
// Validate: path must not point to an existing directory
|
|
161
|
+
try {
|
|
162
|
+
if (statSync(resolvedPath).isDirectory()) {
|
|
163
|
+
throw new Error(`Cannot write log file: '${resolvedPath}' is a directory`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
// If stat throws, file doesn't exist yet — that's fine
|
|
168
|
+
if (e instanceof Error && e.message.includes('is a directory'))
|
|
169
|
+
throw e;
|
|
170
|
+
}
|
|
171
|
+
// Truncate/create file synchronously (validates writeability),
|
|
172
|
+
// then open stream in append mode for non-blocking writes
|
|
173
|
+
writeFileSync(resolvedPath, '');
|
|
174
|
+
this.stream = createWriteStream(resolvedPath, { flags: 'a' });
|
|
175
|
+
this.stream.on('error', () => {
|
|
176
|
+
// Silently ignore stream errors — don't crash analysis for logging failures
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
shouldLog(methodLevel) {
|
|
180
|
+
return this.priority >= methodLevel;
|
|
181
|
+
}
|
|
182
|
+
writeLine(level, message, context) {
|
|
183
|
+
const timestamp = new Date().toISOString();
|
|
184
|
+
const formatted = formatMessage(`${timestamp} [${level}] ${message}`, context);
|
|
185
|
+
this.stream.write(formatted + '\n');
|
|
186
|
+
}
|
|
187
|
+
error(message, context) {
|
|
188
|
+
if (!this.shouldLog(METHOD_LEVELS.error))
|
|
189
|
+
return;
|
|
190
|
+
this.writeLine('ERROR', message, context);
|
|
191
|
+
}
|
|
192
|
+
warn(message, context) {
|
|
193
|
+
if (!this.shouldLog(METHOD_LEVELS.warn))
|
|
194
|
+
return;
|
|
195
|
+
this.writeLine('WARN', message, context);
|
|
196
|
+
}
|
|
197
|
+
info(message, context) {
|
|
198
|
+
if (!this.shouldLog(METHOD_LEVELS.info))
|
|
199
|
+
return;
|
|
200
|
+
this.writeLine('INFO', message, context);
|
|
201
|
+
}
|
|
202
|
+
debug(message, context) {
|
|
203
|
+
if (!this.shouldLog(METHOD_LEVELS.debug))
|
|
204
|
+
return;
|
|
205
|
+
this.writeLine('DEBUG', message, context);
|
|
206
|
+
}
|
|
207
|
+
trace(message, context) {
|
|
208
|
+
if (!this.shouldLog(METHOD_LEVELS.trace))
|
|
209
|
+
return;
|
|
210
|
+
this.writeLine('TRACE', message, context);
|
|
211
|
+
}
|
|
212
|
+
/** Flush and close the write stream. Returns when all data is written. */
|
|
213
|
+
close() {
|
|
214
|
+
return new Promise((resolve) => {
|
|
215
|
+
this.stream.end(resolve);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Multi-output Logger that delegates to multiple Logger instances.
|
|
221
|
+
*
|
|
222
|
+
* Each inner logger applies its own level filtering independently.
|
|
223
|
+
* Used to write to both console and file simultaneously.
|
|
224
|
+
*/
|
|
225
|
+
export class MultiLogger {
|
|
226
|
+
loggers;
|
|
227
|
+
constructor(loggers) {
|
|
228
|
+
this.loggers = loggers;
|
|
229
|
+
}
|
|
230
|
+
error(message, context) {
|
|
231
|
+
for (const logger of this.loggers)
|
|
232
|
+
logger.error(message, context);
|
|
233
|
+
}
|
|
234
|
+
warn(message, context) {
|
|
235
|
+
for (const logger of this.loggers)
|
|
236
|
+
logger.warn(message, context);
|
|
237
|
+
}
|
|
238
|
+
info(message, context) {
|
|
239
|
+
for (const logger of this.loggers)
|
|
240
|
+
logger.info(message, context);
|
|
241
|
+
}
|
|
242
|
+
debug(message, context) {
|
|
243
|
+
for (const logger of this.loggers)
|
|
244
|
+
logger.debug(message, context);
|
|
245
|
+
}
|
|
246
|
+
trace(message, context) {
|
|
247
|
+
for (const logger of this.loggers)
|
|
248
|
+
logger.trace(message, context);
|
|
249
|
+
}
|
|
250
|
+
/** Close all inner loggers that have a close() method (e.g., FileLogger). */
|
|
251
|
+
async close() {
|
|
252
|
+
for (const logger of this.loggers) {
|
|
253
|
+
if (logger instanceof FileLogger) {
|
|
254
|
+
await logger.close();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Create a Logger instance with the specified log level.
|
|
261
|
+
*
|
|
262
|
+
* When logFile is specified, returns a MultiLogger that writes to both
|
|
263
|
+
* console and file. The file logger always captures at 'debug' level
|
|
264
|
+
* for complete post-mortem debugging, regardless of the console level.
|
|
265
|
+
*/
|
|
266
|
+
export function createLogger(level, options) {
|
|
267
|
+
const consoleLogger = new ConsoleLogger(level);
|
|
268
|
+
if (options?.logFile) {
|
|
269
|
+
const fileLogger = new FileLogger('debug', options.logFile);
|
|
270
|
+
return new MultiLogger([consoleLogger, fileLogger]);
|
|
271
|
+
}
|
|
272
|
+
return consoleLogger;
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=Logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/logging/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edge → Archetype Mapping Table
|
|
3
|
+
*
|
|
4
|
+
* Maps every EDGE_TYPE from @grafema/types to a visual archetype + operator + verb.
|
|
5
|
+
* Pure data — no side effects.
|
|
6
|
+
*
|
|
7
|
+
* Archetypes (7 base + 2 structural):
|
|
8
|
+
* contains (implicit nesting, no operator)
|
|
9
|
+
* depends o- dependency/import
|
|
10
|
+
* flow_out > outward data/call flow
|
|
11
|
+
* flow_in < inward data/type flow
|
|
12
|
+
* write => persistent side effect
|
|
13
|
+
* exception >x error/rejection
|
|
14
|
+
* publishes ~>> event/message
|
|
15
|
+
* gates ?| conditional guard
|
|
16
|
+
* governs |= governance/invariant
|
|
17
|
+
*
|
|
18
|
+
* @module notation/archetypes
|
|
19
|
+
*/
|
|
20
|
+
import type { EdgeMapping } from './types.js';
|
|
21
|
+
/**
|
|
22
|
+
* Complete mapping of all edge types to archetypes.
|
|
23
|
+
*
|
|
24
|
+
* Keys match EDGE_TYPE values from @grafema/types/edges.
|
|
25
|
+
*/
|
|
26
|
+
export declare const EDGE_ARCHETYPE_MAP: Record<string, EdgeMapping>;
|
|
27
|
+
/**
|
|
28
|
+
* Look up edge mapping. Returns a fallback for unmapped types.
|
|
29
|
+
*/
|
|
30
|
+
export declare function lookupEdge(edgeType: string): EdgeMapping;
|
|
31
|
+
/**
|
|
32
|
+
* Generate a legend string from the archetype table.
|
|
33
|
+
* Single source of truth for all tools (describe, trace_dataflow, CLI).
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateLegend(): string;
|
|
36
|
+
//# sourceMappingURL=archetypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.d.ts","sourceRoot":"","sources":["../../src/notation/archetypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,YAAY,CAAC;AAuBzD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAqG1D,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAOxD;AAoBD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edge → Archetype Mapping Table
|
|
3
|
+
*
|
|
4
|
+
* Maps every EDGE_TYPE from @grafema/types to a visual archetype + operator + verb.
|
|
5
|
+
* Pure data — no side effects.
|
|
6
|
+
*
|
|
7
|
+
* Archetypes (7 base + 2 structural):
|
|
8
|
+
* contains (implicit nesting, no operator)
|
|
9
|
+
* depends o- dependency/import
|
|
10
|
+
* flow_out > outward data/call flow
|
|
11
|
+
* flow_in < inward data/type flow
|
|
12
|
+
* write => persistent side effect
|
|
13
|
+
* exception >x error/rejection
|
|
14
|
+
* publishes ~>> event/message
|
|
15
|
+
* gates ?| conditional guard
|
|
16
|
+
* governs |= governance/invariant
|
|
17
|
+
*
|
|
18
|
+
* @module notation/archetypes
|
|
19
|
+
*/
|
|
20
|
+
// Sort order by archetype: input → process → output
|
|
21
|
+
// flow_in first (receives, reads), then deps, then calls, then side effects
|
|
22
|
+
const SORT = {
|
|
23
|
+
contains: 0,
|
|
24
|
+
flow_in: 1,
|
|
25
|
+
depends: 2,
|
|
26
|
+
flow_out: 3,
|
|
27
|
+
write: 4,
|
|
28
|
+
publishes: 5,
|
|
29
|
+
exception: 6,
|
|
30
|
+
gates: 7,
|
|
31
|
+
governs: 8,
|
|
32
|
+
};
|
|
33
|
+
/** Sort order for "returns" verbs — output comes last */
|
|
34
|
+
const RETURNS_SORT = 9;
|
|
35
|
+
function m(archetype, operator, verb, sortOverride) {
|
|
36
|
+
return { archetype, operator, verb, sortOrder: sortOverride ?? SORT[archetype] };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Complete mapping of all edge types to archetypes.
|
|
40
|
+
*
|
|
41
|
+
* Keys match EDGE_TYPE values from @grafema/types/edges.
|
|
42
|
+
*/
|
|
43
|
+
export const EDGE_ARCHETYPE_MAP = {
|
|
44
|
+
// === Containment (operator='', defines { } nesting) ===
|
|
45
|
+
CONTAINS: m('contains', '', 'contains'),
|
|
46
|
+
HAS_SCOPE: m('contains', '', 'scopes'),
|
|
47
|
+
HAS_MEMBER: m('contains', '', 'has'),
|
|
48
|
+
HAS_BODY: m('contains', '', 'body'),
|
|
49
|
+
HAS_PROPERTY: m('contains', '', 'property'),
|
|
50
|
+
HAS_ELEMENT: m('contains', '', 'element'),
|
|
51
|
+
HAS_INIT: m('contains', '', 'init'),
|
|
52
|
+
HAS_UPDATE: m('contains', '', 'update'),
|
|
53
|
+
HAS_CALLBACK: m('contains', '', 'callback'),
|
|
54
|
+
HAS_CATCH: m('contains', '', 'catch'),
|
|
55
|
+
HAS_FINALLY: m('contains', '', 'finally'),
|
|
56
|
+
DECLARES: m('contains', '', 'declares'),
|
|
57
|
+
DEFINES: m('contains', '', 'defines'),
|
|
58
|
+
MOUNTS: m('contains', '', 'mounts'),
|
|
59
|
+
PROPERTY_KEY: m('contains', '', 'key'),
|
|
60
|
+
PROPERTY_VALUE: m('contains', '', 'value'),
|
|
61
|
+
// === Depends (o-) ===
|
|
62
|
+
DEPENDS_ON: m('depends', 'o-', 'depends on'),
|
|
63
|
+
IMPORTS: m('depends', 'o-', 'imports'),
|
|
64
|
+
IMPORTS_FROM: m('depends', 'o-', 'imports from'),
|
|
65
|
+
EXPORTS: m('depends', 'o-', 'exports'),
|
|
66
|
+
USES: m('depends', 'o-', 'uses'),
|
|
67
|
+
USES_CONFIG: m('depends', 'o-', 'uses config'),
|
|
68
|
+
USES_SECRET: m('depends', 'o-', 'uses secret'),
|
|
69
|
+
DEPLOYED_TO: m('depends', 'o-', 'deployed to'),
|
|
70
|
+
SCHEDULED_BY: m('depends', 'o-', 'scheduled by'),
|
|
71
|
+
// === Flow Out (>) ===
|
|
72
|
+
CALLS: m('flow_out', '>', 'calls'),
|
|
73
|
+
DELEGATES_TO: m('flow_out', '>', 'delegates to'),
|
|
74
|
+
ROUTES_TO: m('flow_out', '>', 'routes to'),
|
|
75
|
+
HANDLED_BY: m('flow_out', '>', 'handled by'),
|
|
76
|
+
MAKES_REQUEST: m('flow_out', '>', 'requests'),
|
|
77
|
+
CALLS_API: m('flow_out', '>', 'calls API'),
|
|
78
|
+
INVOKES_FUNCTION: m('flow_out', '>', 'invokes'),
|
|
79
|
+
PASSES_ARGUMENT: m('flow_out', '>', 'passes'),
|
|
80
|
+
RETURNS: m('flow_out', '>', 'returns', RETURNS_SORT),
|
|
81
|
+
CALL_RETURNS: m('flow_out', '>', 'call returns', RETURNS_SORT),
|
|
82
|
+
YIELDS: m('flow_out', '>', 'yields', RETURNS_SORT),
|
|
83
|
+
RESPONDS_WITH: m('flow_out', '>', 'responds with', RETURNS_SORT),
|
|
84
|
+
INTERACTS_WITH: m('flow_out', '>', 'interacts with'),
|
|
85
|
+
ITERATES_OVER: m('flow_out', '>', 'iterates'),
|
|
86
|
+
ASSIGNS_TO: m('flow_out', '>', 'assigns to'),
|
|
87
|
+
MODIFIES: m('flow_out', '>', 'modifies'),
|
|
88
|
+
CAPTURES: m('flow_out', '>', 'captures'),
|
|
89
|
+
FLOWS_INTO: m('flow_out', '>', 'flows into'),
|
|
90
|
+
// === Flow In (<) ===
|
|
91
|
+
READS_FROM: m('flow_in', '<', 'reads'),
|
|
92
|
+
RECEIVES_ARGUMENT: m('flow_in', '<', 'receives'),
|
|
93
|
+
ASSIGNED_FROM: m('flow_in', '<', 'assigned from'),
|
|
94
|
+
DERIVES_FROM: m('flow_in', '<', 'derives from'),
|
|
95
|
+
SPREADS_FROM: m('flow_in', '<', 'spreads from'),
|
|
96
|
+
ELEMENT_OF: m('flow_in', '<', 'element of'),
|
|
97
|
+
KEY_OF: m('flow_in', '<', 'key of'),
|
|
98
|
+
DESTRUCTURED_FROM: m('flow_in', '<', 'destructured from'),
|
|
99
|
+
HTTP_RECEIVES: m('flow_in', '<', 'receives HTTP'),
|
|
100
|
+
EXTENDS: m('flow_in', '<', 'extends'),
|
|
101
|
+
IMPLEMENTS: m('flow_in', '<', 'implements'),
|
|
102
|
+
INSTANCE_OF: m('flow_in', '<', 'instance of'),
|
|
103
|
+
// === Write (=>) ===
|
|
104
|
+
WRITES_TO: m('write', '=>', 'writes'),
|
|
105
|
+
LOGS_TO: m('write', '=>', 'logs to'),
|
|
106
|
+
PERFORMS_REDIS: m('write', '=>', 'redis'),
|
|
107
|
+
// === Exception (>x) ===
|
|
108
|
+
THROWS: m('exception', '>x', 'throws'),
|
|
109
|
+
REJECTS: m('exception', '>x', 'rejects'),
|
|
110
|
+
CATCHES_FROM: m('exception', '>x', 'catches from'),
|
|
111
|
+
// === Publishes (~>>) ===
|
|
112
|
+
EMITS_EVENT: m('publishes', '~>>', 'emits'),
|
|
113
|
+
LISTENS_TO: m('publishes', '~>>', 'listens to'),
|
|
114
|
+
PUBLISHES_TO: m('publishes', '~>>', 'publishes to'),
|
|
115
|
+
SUBSCRIBES_TO: m('publishes', '~>>', 'subscribes to'),
|
|
116
|
+
EXPOSED_VIA: m('publishes', '~>>', 'exposed via'),
|
|
117
|
+
EXPOSES: m('publishes', '~>>', 'exposes'),
|
|
118
|
+
JOINS_ROOM: m('publishes', '~>>', 'joins room'),
|
|
119
|
+
// === Gates (?|) ===
|
|
120
|
+
HAS_CONDITION: m('gates', '?|', 'guards'),
|
|
121
|
+
HAS_CONSEQUENT: m('gates', '?|', 'then'),
|
|
122
|
+
HAS_ALTERNATE: m('gates', '?|', 'else'),
|
|
123
|
+
HAS_CASE: m('gates', '?|', 'case'),
|
|
124
|
+
HAS_DEFAULT: m('gates', '?|', 'default'),
|
|
125
|
+
// === Governs (|=) ===
|
|
126
|
+
GOVERNS: m('governs', '|=', 'governs'),
|
|
127
|
+
VIOLATES: m('governs', '|=', 'violates'),
|
|
128
|
+
AFFECTS: m('governs', '|=', 'affects'),
|
|
129
|
+
MONITORED_BY: m('governs', '|=', 'monitored by'),
|
|
130
|
+
MEASURED_BY: m('governs', '|=', 'measured by'),
|
|
131
|
+
PROVISIONED_BY: m('governs', '|=', 'provisioned by'),
|
|
132
|
+
REGISTERS_VIEW: m('governs', '|=', 'registers view'),
|
|
133
|
+
// === Fallback ===
|
|
134
|
+
UNKNOWN: m('flow_out', '>', 'unknown'),
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Look up edge mapping. Returns a fallback for unmapped types.
|
|
138
|
+
*/
|
|
139
|
+
export function lookupEdge(edgeType) {
|
|
140
|
+
return EDGE_ARCHETYPE_MAP[edgeType] ?? {
|
|
141
|
+
archetype: 'flow_out',
|
|
142
|
+
operator: '>',
|
|
143
|
+
verb: edgeType.toLowerCase().replace(/_/g, ' '),
|
|
144
|
+
sortOrder: SORT.flow_out,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Canonical operator → verb mapping, one entry per unique operator.
|
|
149
|
+
* Derived from the archetype table — single source of truth.
|
|
150
|
+
*/
|
|
151
|
+
const CANONICAL_OPERATORS = (() => {
|
|
152
|
+
const seen = new Set();
|
|
153
|
+
const result = [];
|
|
154
|
+
const entries = Object.values(EDGE_ARCHETYPE_MAP);
|
|
155
|
+
// Sort by archetype sort order for consistent legend ordering
|
|
156
|
+
entries.sort((a, b) => a.sortOrder - b.sortOrder);
|
|
157
|
+
for (const entry of entries) {
|
|
158
|
+
if (!entry.operator || seen.has(entry.operator))
|
|
159
|
+
continue;
|
|
160
|
+
seen.add(entry.operator);
|
|
161
|
+
result.push({ operator: entry.operator, verb: entry.verb });
|
|
162
|
+
}
|
|
163
|
+
return result;
|
|
164
|
+
})();
|
|
165
|
+
/**
|
|
166
|
+
* Generate a legend string from the archetype table.
|
|
167
|
+
* Single source of truth for all tools (describe, trace_dataflow, CLI).
|
|
168
|
+
*/
|
|
169
|
+
export function generateLegend() {
|
|
170
|
+
const parts = CANONICAL_OPERATORS.map(({ operator, verb }) => `${operator} ${verb}`);
|
|
171
|
+
return `Legend: ${parts.join(' ')} {} contains`;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=archetypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../src/notation/archetypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notation Fold Engine — structural compression of sibling blocks
|
|
3
|
+
*
|
|
4
|
+
* Pure function: NotationBlock[] → NotationBlock[]
|
|
5
|
+
* Fold is a view-layer transform, not part of DSL grammar.
|
|
6
|
+
*
|
|
7
|
+
* Implements 11 rules from notation-folding.md:
|
|
8
|
+
* Rules 1-5: structural (language-agnostic)
|
|
9
|
+
* Rules 6-7: cleanup (dedup, artifacts)
|
|
10
|
+
* Rules 8-11: semantic (derivation/call patterns)
|
|
11
|
+
*
|
|
12
|
+
* Pipeline order matters — chains/dispatch collapse adjacent siblings first,
|
|
13
|
+
* making the remaining set more amenable to group folding.
|
|
14
|
+
*
|
|
15
|
+
* @module notation/fold
|
|
16
|
+
*/
|
|
17
|
+
import type { NotationBlock } from './types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Apply all folding rules to a list of sibling blocks.
|
|
20
|
+
* Returns a new list where repetitive structures are compressed.
|
|
21
|
+
*
|
|
22
|
+
* Folding is recursive — children of non-folded blocks are also folded.
|
|
23
|
+
*/
|
|
24
|
+
export declare function foldBlocks(blocks: NotationBlock[]): NotationBlock[];
|
|
25
|
+
//# sourceMappingURL=fold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold.d.ts","sourceRoot":"","sources":["../../src/notation/fold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA8HhD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CA2DnE"}
|