@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.
Files changed (324) hide show
  1. package/LICENSE +190 -0
  2. package/dist/api/GraphAPI.d.ts +87 -0
  3. package/dist/api/GraphAPI.d.ts.map +1 -0
  4. package/dist/api/GraphAPI.js +212 -0
  5. package/dist/api/GraphAPI.js.map +1 -0
  6. package/dist/api/GuaranteeAPI.d.ts +147 -0
  7. package/dist/api/GuaranteeAPI.d.ts.map +1 -0
  8. package/dist/api/GuaranteeAPI.js +290 -0
  9. package/dist/api/GuaranteeAPI.js.map +1 -0
  10. package/dist/config/ConfigLoader.d.ts +214 -0
  11. package/dist/config/ConfigLoader.d.ts.map +1 -0
  12. package/dist/config/ConfigLoader.js +441 -0
  13. package/dist/config/ConfigLoader.js.map +1 -0
  14. package/dist/config/index.d.ts +6 -0
  15. package/dist/config/index.d.ts.map +1 -0
  16. package/dist/config/index.js +5 -0
  17. package/dist/config/index.js.map +1 -0
  18. package/dist/core/CoverageAnalyzer.d.ts +65 -0
  19. package/dist/core/CoverageAnalyzer.d.ts.map +1 -0
  20. package/dist/core/CoverageAnalyzer.js +199 -0
  21. package/dist/core/CoverageAnalyzer.js.map +1 -0
  22. package/dist/core/FileExplainer.d.ts +101 -0
  23. package/dist/core/FileExplainer.d.ts.map +1 -0
  24. package/dist/core/FileExplainer.js +140 -0
  25. package/dist/core/FileExplainer.js.map +1 -0
  26. package/dist/core/FileOverview.d.ts +124 -0
  27. package/dist/core/FileOverview.d.ts.map +1 -0
  28. package/dist/core/FileOverview.js +279 -0
  29. package/dist/core/FileOverview.js.map +1 -0
  30. package/dist/core/GrafemaUri.d.ts +66 -0
  31. package/dist/core/GrafemaUri.d.ts.map +1 -0
  32. package/dist/core/GrafemaUri.js +191 -0
  33. package/dist/core/GrafemaUri.js.map +1 -0
  34. package/dist/core/GraphBackend.d.ts +158 -0
  35. package/dist/core/GraphBackend.d.ts.map +1 -0
  36. package/dist/core/GraphBackend.js +85 -0
  37. package/dist/core/GraphBackend.js.map +1 -0
  38. package/dist/core/GraphFreshnessChecker.d.ts +33 -0
  39. package/dist/core/GraphFreshnessChecker.d.ts.map +1 -0
  40. package/dist/core/GraphFreshnessChecker.js +104 -0
  41. package/dist/core/GraphFreshnessChecker.js.map +1 -0
  42. package/dist/core/GuaranteeManager.d.ts +254 -0
  43. package/dist/core/GuaranteeManager.d.ts.map +1 -0
  44. package/dist/core/GuaranteeManager.js +447 -0
  45. package/dist/core/GuaranteeManager.js.map +1 -0
  46. package/dist/core/HashUtils.d.ts +24 -0
  47. package/dist/core/HashUtils.d.ts.map +1 -0
  48. package/dist/core/HashUtils.js +46 -0
  49. package/dist/core/HashUtils.js.map +1 -0
  50. package/dist/core/IncrementalReanalyzer.d.ts +33 -0
  51. package/dist/core/IncrementalReanalyzer.d.ts.map +1 -0
  52. package/dist/core/IncrementalReanalyzer.js +67 -0
  53. package/dist/core/IncrementalReanalyzer.js.map +1 -0
  54. package/dist/core/ResourceRegistry.d.ts +17 -0
  55. package/dist/core/ResourceRegistry.d.ts.map +1 -0
  56. package/dist/core/ResourceRegistry.js +32 -0
  57. package/dist/core/ResourceRegistry.js.map +1 -0
  58. package/dist/core/SemanticId.d.ts +159 -0
  59. package/dist/core/SemanticId.d.ts.map +1 -0
  60. package/dist/core/SemanticId.js +291 -0
  61. package/dist/core/SemanticId.js.map +1 -0
  62. package/dist/core/VersionManager.d.ts +166 -0
  63. package/dist/core/VersionManager.d.ts.map +1 -0
  64. package/dist/core/VersionManager.js +239 -0
  65. package/dist/core/VersionManager.js.map +1 -0
  66. package/dist/core/brandNodeInternal.d.ts +14 -0
  67. package/dist/core/brandNodeInternal.d.ts.map +1 -0
  68. package/dist/core/brandNodeInternal.js +4 -0
  69. package/dist/core/brandNodeInternal.js.map +1 -0
  70. package/dist/core/nodes/GuaranteeNode.d.ts +76 -0
  71. package/dist/core/nodes/GuaranteeNode.d.ts.map +1 -0
  72. package/dist/core/nodes/GuaranteeNode.js +118 -0
  73. package/dist/core/nodes/GuaranteeNode.js.map +1 -0
  74. package/dist/core/nodes/IssueNode.d.ts +73 -0
  75. package/dist/core/nodes/IssueNode.d.ts.map +1 -0
  76. package/dist/core/nodes/IssueNode.js +130 -0
  77. package/dist/core/nodes/IssueNode.js.map +1 -0
  78. package/dist/core/nodes/NodeKind.d.ts +104 -0
  79. package/dist/core/nodes/NodeKind.d.ts.map +1 -0
  80. package/dist/core/nodes/NodeKind.js +166 -0
  81. package/dist/core/nodes/NodeKind.js.map +1 -0
  82. package/dist/diagnostics/DiagnosticCollector.d.ts +103 -0
  83. package/dist/diagnostics/DiagnosticCollector.d.ts.map +1 -0
  84. package/dist/diagnostics/DiagnosticCollector.js +133 -0
  85. package/dist/diagnostics/DiagnosticCollector.js.map +1 -0
  86. package/dist/diagnostics/DiagnosticReporter.d.ts +122 -0
  87. package/dist/diagnostics/DiagnosticReporter.d.ts.map +1 -0
  88. package/dist/diagnostics/DiagnosticReporter.js +300 -0
  89. package/dist/diagnostics/DiagnosticReporter.js.map +1 -0
  90. package/dist/diagnostics/DiagnosticWriter.d.ts +31 -0
  91. package/dist/diagnostics/DiagnosticWriter.d.ts.map +1 -0
  92. package/dist/diagnostics/DiagnosticWriter.js +44 -0
  93. package/dist/diagnostics/DiagnosticWriter.js.map +1 -0
  94. package/dist/diagnostics/categories.d.ts +57 -0
  95. package/dist/diagnostics/categories.d.ts.map +1 -0
  96. package/dist/diagnostics/categories.js +71 -0
  97. package/dist/diagnostics/categories.js.map +1 -0
  98. package/dist/diagnostics/index.d.ts +17 -0
  99. package/dist/diagnostics/index.d.ts.map +1 -0
  100. package/dist/diagnostics/index.js +15 -0
  101. package/dist/diagnostics/index.js.map +1 -0
  102. package/dist/errors/GrafemaError.d.ts +200 -0
  103. package/dist/errors/GrafemaError.d.ts.map +1 -0
  104. package/dist/errors/GrafemaError.js +209 -0
  105. package/dist/errors/GrafemaError.js.map +1 -0
  106. package/dist/index.d.ts +75 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +76 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/instructions/index.d.ts +8 -0
  111. package/dist/instructions/index.d.ts.map +1 -0
  112. package/dist/instructions/index.js +20 -0
  113. package/dist/instructions/index.js.map +1 -0
  114. package/dist/instructions/onboarding.md +133 -0
  115. package/dist/knowledge/KnowledgeBase.d.ts +113 -0
  116. package/dist/knowledge/KnowledgeBase.d.ts.map +1 -0
  117. package/dist/knowledge/KnowledgeBase.js +420 -0
  118. package/dist/knowledge/KnowledgeBase.js.map +1 -0
  119. package/dist/knowledge/SemanticAddressResolver.d.ts +59 -0
  120. package/dist/knowledge/SemanticAddressResolver.d.ts.map +1 -0
  121. package/dist/knowledge/SemanticAddressResolver.js +160 -0
  122. package/dist/knowledge/SemanticAddressResolver.js.map +1 -0
  123. package/dist/knowledge/git-ingest.d.ts +58 -0
  124. package/dist/knowledge/git-ingest.d.ts.map +1 -0
  125. package/dist/knowledge/git-ingest.js +301 -0
  126. package/dist/knowledge/git-ingest.js.map +1 -0
  127. package/dist/knowledge/git-queries.d.ts +86 -0
  128. package/dist/knowledge/git-queries.d.ts.map +1 -0
  129. package/dist/knowledge/git-queries.js +177 -0
  130. package/dist/knowledge/git-queries.js.map +1 -0
  131. package/dist/knowledge/index.d.ts +14 -0
  132. package/dist/knowledge/index.d.ts.map +1 -0
  133. package/dist/knowledge/index.js +10 -0
  134. package/dist/knowledge/index.js.map +1 -0
  135. package/dist/knowledge/parser.d.ts +39 -0
  136. package/dist/knowledge/parser.d.ts.map +1 -0
  137. package/dist/knowledge/parser.js +292 -0
  138. package/dist/knowledge/parser.js.map +1 -0
  139. package/dist/knowledge/types.d.ts +133 -0
  140. package/dist/knowledge/types.d.ts.map +1 -0
  141. package/dist/knowledge/types.js +8 -0
  142. package/dist/knowledge/types.js.map +1 -0
  143. package/dist/logging/Logger.d.ts +98 -0
  144. package/dist/logging/Logger.d.ts.map +1 -0
  145. package/dist/logging/Logger.js +274 -0
  146. package/dist/logging/Logger.js.map +1 -0
  147. package/dist/notation/archetypes.d.ts +36 -0
  148. package/dist/notation/archetypes.d.ts.map +1 -0
  149. package/dist/notation/archetypes.js +173 -0
  150. package/dist/notation/archetypes.js.map +1 -0
  151. package/dist/notation/fold.d.ts +25 -0
  152. package/dist/notation/fold.d.ts.map +1 -0
  153. package/dist/notation/fold.js +598 -0
  154. package/dist/notation/fold.js.map +1 -0
  155. package/dist/notation/index.d.ts +18 -0
  156. package/dist/notation/index.d.ts.map +1 -0
  157. package/dist/notation/index.js +16 -0
  158. package/dist/notation/index.js.map +1 -0
  159. package/dist/notation/lodExtractor.d.ts +32 -0
  160. package/dist/notation/lodExtractor.d.ts.map +1 -0
  161. package/dist/notation/lodExtractor.js +149 -0
  162. package/dist/notation/lodExtractor.js.map +1 -0
  163. package/dist/notation/nameShortener.d.ts +22 -0
  164. package/dist/notation/nameShortener.d.ts.map +1 -0
  165. package/dist/notation/nameShortener.js +24 -0
  166. package/dist/notation/nameShortener.js.map +1 -0
  167. package/dist/notation/perspectives.d.ts +11 -0
  168. package/dist/notation/perspectives.d.ts.map +1 -0
  169. package/dist/notation/perspectives.js +16 -0
  170. package/dist/notation/perspectives.js.map +1 -0
  171. package/dist/notation/renderer.d.ts +31 -0
  172. package/dist/notation/renderer.d.ts.map +1 -0
  173. package/dist/notation/renderer.js +315 -0
  174. package/dist/notation/renderer.js.map +1 -0
  175. package/dist/notation/traceRenderer.d.ts +39 -0
  176. package/dist/notation/traceRenderer.d.ts.map +1 -0
  177. package/dist/notation/traceRenderer.js +358 -0
  178. package/dist/notation/traceRenderer.js.map +1 -0
  179. package/dist/notation/types.d.ts +66 -0
  180. package/dist/notation/types.d.ts.map +1 -0
  181. package/dist/notation/types.js +10 -0
  182. package/dist/notation/types.js.map +1 -0
  183. package/dist/queries/NodeContext.d.ts +81 -0
  184. package/dist/queries/NodeContext.d.ts.map +1 -0
  185. package/dist/queries/NodeContext.js +196 -0
  186. package/dist/queries/NodeContext.js.map +1 -0
  187. package/dist/queries/findCallsInFunction.d.ts +62 -0
  188. package/dist/queries/findCallsInFunction.d.ts.map +1 -0
  189. package/dist/queries/findCallsInFunction.js +169 -0
  190. package/dist/queries/findCallsInFunction.js.map +1 -0
  191. package/dist/queries/findContainingFunction.d.ts +57 -0
  192. package/dist/queries/findContainingFunction.d.ts.map +1 -0
  193. package/dist/queries/findContainingFunction.js +91 -0
  194. package/dist/queries/findContainingFunction.js.map +1 -0
  195. package/dist/queries/index.d.ts +18 -0
  196. package/dist/queries/index.d.ts.map +1 -0
  197. package/dist/queries/index.js +14 -0
  198. package/dist/queries/index.js.map +1 -0
  199. package/dist/queries/traceDataflow.d.ts +65 -0
  200. package/dist/queries/traceDataflow.d.ts.map +1 -0
  201. package/dist/queries/traceDataflow.js +754 -0
  202. package/dist/queries/traceDataflow.js.map +1 -0
  203. package/dist/queries/traceValues.d.ts +70 -0
  204. package/dist/queries/traceValues.d.ts.map +1 -0
  205. package/dist/queries/traceValues.js +373 -0
  206. package/dist/queries/traceValues.js.map +1 -0
  207. package/dist/queries/types.d.ts +166 -0
  208. package/dist/queries/types.d.ts.map +1 -0
  209. package/dist/queries/types.js +10 -0
  210. package/dist/queries/types.js.map +1 -0
  211. package/dist/schema/GraphSchemaExtractor.d.ts +53 -0
  212. package/dist/schema/GraphSchemaExtractor.d.ts.map +1 -0
  213. package/dist/schema/GraphSchemaExtractor.js +125 -0
  214. package/dist/schema/GraphSchemaExtractor.js.map +1 -0
  215. package/dist/schema/InterfaceSchemaExtractor.d.ts +73 -0
  216. package/dist/schema/InterfaceSchemaExtractor.d.ts.map +1 -0
  217. package/dist/schema/InterfaceSchemaExtractor.js +113 -0
  218. package/dist/schema/InterfaceSchemaExtractor.js.map +1 -0
  219. package/dist/schema/index.d.ts +5 -0
  220. package/dist/schema/index.d.ts.map +1 -0
  221. package/dist/schema/index.js +3 -0
  222. package/dist/schema/index.js.map +1 -0
  223. package/dist/storage/backends/RFDBServerBackend.d.ts +356 -0
  224. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -0
  225. package/dist/storage/backends/RFDBServerBackend.js +748 -0
  226. package/dist/storage/backends/RFDBServerBackend.js.map +1 -0
  227. package/dist/storage/backends/typeValidation.d.ts +47 -0
  228. package/dist/storage/backends/typeValidation.d.ts.map +1 -0
  229. package/dist/storage/backends/typeValidation.js +141 -0
  230. package/dist/storage/backends/typeValidation.js.map +1 -0
  231. package/dist/utils/findRfdbBinary.d.ts +67 -0
  232. package/dist/utils/findRfdbBinary.d.ts.map +1 -0
  233. package/dist/utils/findRfdbBinary.js +261 -0
  234. package/dist/utils/findRfdbBinary.js.map +1 -0
  235. package/dist/utils/lazyDownload.d.ts +43 -0
  236. package/dist/utils/lazyDownload.d.ts.map +1 -0
  237. package/dist/utils/lazyDownload.js +175 -0
  238. package/dist/utils/lazyDownload.js.map +1 -0
  239. package/dist/utils/moduleResolution.d.ts +134 -0
  240. package/dist/utils/moduleResolution.d.ts.map +1 -0
  241. package/dist/utils/moduleResolution.js +189 -0
  242. package/dist/utils/moduleResolution.js.map +1 -0
  243. package/dist/utils/resolveNodeFile.d.ts +13 -0
  244. package/dist/utils/resolveNodeFile.d.ts.map +1 -0
  245. package/dist/utils/resolveNodeFile.js +18 -0
  246. package/dist/utils/resolveNodeFile.js.map +1 -0
  247. package/dist/utils/startRfdbServer.d.ts +63 -0
  248. package/dist/utils/startRfdbServer.d.ts.map +1 -0
  249. package/dist/utils/startRfdbServer.js +142 -0
  250. package/dist/utils/startRfdbServer.js.map +1 -0
  251. package/dist/validation/PathValidator.d.ts +80 -0
  252. package/dist/validation/PathValidator.d.ts.map +1 -0
  253. package/dist/validation/PathValidator.js +252 -0
  254. package/dist/validation/PathValidator.js.map +1 -0
  255. package/dist/version.d.ts +11 -0
  256. package/dist/version.d.ts.map +1 -0
  257. package/dist/version.js +26 -0
  258. package/dist/version.js.map +1 -0
  259. package/package.json +50 -0
  260. package/src/api/GraphAPI.ts +307 -0
  261. package/src/api/GuaranteeAPI.ts +402 -0
  262. package/src/config/ConfigLoader.ts +653 -0
  263. package/src/config/index.ts +13 -0
  264. package/src/core/CoverageAnalyzer.ts +243 -0
  265. package/src/core/FileExplainer.ts +179 -0
  266. package/src/core/FileOverview.ts +397 -0
  267. package/src/core/GrafemaUri.ts +216 -0
  268. package/src/core/GraphBackend.ts +266 -0
  269. package/src/core/GraphFreshnessChecker.ts +145 -0
  270. package/src/core/GuaranteeManager.ts +684 -0
  271. package/src/core/HashUtils.ts +48 -0
  272. package/src/core/IncrementalReanalyzer.ts +106 -0
  273. package/src/core/ResourceRegistry.ts +39 -0
  274. package/src/core/SemanticId.ts +423 -0
  275. package/src/core/VersionManager.ts +405 -0
  276. package/src/core/brandNodeInternal.ts +16 -0
  277. package/src/core/nodes/GuaranteeNode.ts +162 -0
  278. package/src/core/nodes/IssueNode.ts +177 -0
  279. package/src/core/nodes/NodeKind.ts +192 -0
  280. package/src/diagnostics/DiagnosticCollector.ts +170 -0
  281. package/src/diagnostics/DiagnosticReporter.ts +395 -0
  282. package/src/diagnostics/DiagnosticWriter.ts +50 -0
  283. package/src/diagnostics/categories.ts +104 -0
  284. package/src/diagnostics/index.ts +30 -0
  285. package/src/errors/GrafemaError.ts +297 -0
  286. package/src/index.ts +261 -0
  287. package/src/instructions/index.ts +21 -0
  288. package/src/instructions/onboarding.md +133 -0
  289. package/src/knowledge/KnowledgeBase.ts +486 -0
  290. package/src/knowledge/SemanticAddressResolver.ts +191 -0
  291. package/src/knowledge/git-ingest.ts +402 -0
  292. package/src/knowledge/git-queries.ts +269 -0
  293. package/src/knowledge/index.ts +29 -0
  294. package/src/knowledge/parser.ts +294 -0
  295. package/src/knowledge/types.ts +146 -0
  296. package/src/logging/Logger.ts +303 -0
  297. package/src/notation/archetypes.ts +189 -0
  298. package/src/notation/fold.ts +696 -0
  299. package/src/notation/index.ts +27 -0
  300. package/src/notation/lodExtractor.ts +177 -0
  301. package/src/notation/nameShortener.ts +24 -0
  302. package/src/notation/perspectives.ts +18 -0
  303. package/src/notation/renderer.ts +394 -0
  304. package/src/notation/traceRenderer.ts +458 -0
  305. package/src/notation/types.ts +79 -0
  306. package/src/queries/NodeContext.ts +280 -0
  307. package/src/queries/findCallsInFunction.ts +249 -0
  308. package/src/queries/findContainingFunction.ts +124 -0
  309. package/src/queries/index.ts +44 -0
  310. package/src/queries/traceDataflow.ts +838 -0
  311. package/src/queries/traceValues.ts +531 -0
  312. package/src/queries/types.ts +191 -0
  313. package/src/schema/GraphSchemaExtractor.ts +177 -0
  314. package/src/schema/InterfaceSchemaExtractor.ts +173 -0
  315. package/src/schema/index.ts +5 -0
  316. package/src/storage/backends/RFDBServerBackend.ts +895 -0
  317. package/src/storage/backends/typeValidation.ts +154 -0
  318. package/src/utils/findRfdbBinary.ts +288 -0
  319. package/src/utils/lazyDownload.ts +206 -0
  320. package/src/utils/moduleResolution.ts +271 -0
  321. package/src/utils/resolveNodeFile.ts +18 -0
  322. package/src/utils/startRfdbServer.ts +197 -0
  323. package/src/validation/PathValidator.ts +334 -0
  324. 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"}