@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,598 @@
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
+ /** Minimum group size to trigger folding */
18
+ const FOLD_THRESHOLD = 3;
19
+ const CONTAINER_TYPES = new Set(['MODULE', 'CLASS', 'OBJECT', 'NAMESPACE', 'PROGRAM']);
20
+ const BINDING_TYPES = new Set(['IMPORT', 'IMPORT_BINDING', 'EXPORT', 'EXPORT_BINDING']);
21
+ const SHAPE_TYPES = new Set(['INTERFACE', 'TYPE_ALIAS', 'ENUM', 'ENUM_MEMBER']);
22
+ const CONTROL_TYPES = new Set(['LOOP', 'BRANCH', 'CASE', 'CONDITIONAL', 'SWITCH', 'TRY']);
23
+ const BEHAVIOR_OPERATORS = new Set(['>', '=>', '>x', '~>>']);
24
+ /**
25
+ * Classify a block's rendering role based on node type + edge content.
26
+ *
27
+ * Roles (determined by graph shape, not AST type alone):
28
+ * Actor — has behavior edges (calls, writes, throws...) → Block
29
+ * Container — MODULE, CLASS, etc. → Block
30
+ * Binding — IMPORT, EXPORT → Line
31
+ * Datum — VARIABLE/CONSTANT with only passive edges → Inline `name < verb source`
32
+ * Shape — INTERFACE, TYPE_ALIAS, ENUM → Block or Name
33
+ * Control — LOOP, BRANCH, CASE → Modifier
34
+ *
35
+ * No suppression: all nodes with edges are preserved (Inv-2 Side Effect Visibility).
36
+ */
37
+ function classifyRole(block) {
38
+ const type = block.nodeType;
39
+ if (CONTAINER_TYPES.has(type))
40
+ return 'container';
41
+ if (BINDING_TYPES.has(type))
42
+ return 'binding';
43
+ if (SHAPE_TYPES.has(type))
44
+ return 'shape';
45
+ if (CONTROL_TYPES.has(type))
46
+ return 'control';
47
+ // Check for behavior edges
48
+ const hasBehavior = block.lines.some(l => BEHAVIOR_OPERATORS.has(l.operator));
49
+ if (hasBehavior)
50
+ return 'actor';
51
+ // VARIABLE/CONSTANT/PARAMETER with only passive edges → datum
52
+ if (type === 'VARIABLE' || type === 'CONSTANT' || type === 'PARAMETER') {
53
+ return 'datum';
54
+ }
55
+ // FUNCTION/METHOD → actor (even without visible behavior)
56
+ if (type === 'FUNCTION' || type === 'METHOD')
57
+ return 'actor';
58
+ return 'actor';
59
+ }
60
+ /**
61
+ * Apply role-based transforms: datum → inline (preserves archetype operator and verb).
62
+ */
63
+ function applyRoleTransforms(blocks) {
64
+ const result = [];
65
+ for (const block of blocks) {
66
+ if (block.foldMeta) {
67
+ result.push(block);
68
+ continue;
69
+ }
70
+ const role = classifyRole(block);
71
+ switch (role) {
72
+ case 'datum': {
73
+ // Inline: render as "name < verb source" — no braces, preserves archetype
74
+ const inlineName = formatDatumInline(block);
75
+ result.push({
76
+ ...block,
77
+ displayName: inlineName,
78
+ lines: [],
79
+ children: [],
80
+ foldMeta: { kind: 'datum-inline', count: 1 },
81
+ });
82
+ break;
83
+ }
84
+ default:
85
+ result.push(block);
86
+ }
87
+ }
88
+ return result;
89
+ }
90
+ /**
91
+ * Format a datum block as a single inline string: "name < verb source"
92
+ * Preserves the archetype operator and verb — no information loss.
93
+ */
94
+ function formatDatumInline(block) {
95
+ // Find the first flow_in line
96
+ for (const line of block.lines) {
97
+ if (line.operator && line.targets.length > 0) {
98
+ const mod = line.modifier ? `${line.modifier} ` : '';
99
+ return `${block.displayName} ${mod}${line.operator} ${line.verb} ${line.targets.join(', ')}`;
100
+ }
101
+ }
102
+ return block.displayName;
103
+ }
104
+ function computeSignature(block) {
105
+ return {
106
+ nodeType: block.nodeType,
107
+ lineKeys: block.lines
108
+ .map(l => `${l.modifier ?? ''}|${l.operator}|${l.verb}`)
109
+ .sort(),
110
+ childCount: block.children.length,
111
+ };
112
+ }
113
+ function signatureKey(sig) {
114
+ return `${sig.nodeType}|${sig.lineKeys.join(';')}|${sig.childCount}`;
115
+ }
116
+ // === Main fold function ===
117
+ /**
118
+ * Apply all folding rules to a list of sibling blocks.
119
+ * Returns a new list where repetitive structures are compressed.
120
+ *
121
+ * Folding is recursive — children of non-folded blocks are also folded.
122
+ */
123
+ export function foldBlocks(blocks) {
124
+ // Rule 4: Dedup by nodeId (per-block cleanup, always applies)
125
+ let current = dedup(blocks);
126
+ // Rule 6: Target dedup within each block's lines (per-block cleanup, always applies)
127
+ current = current.map(dedupTargets);
128
+ if (current.length <= 1) {
129
+ // Role transforms still apply to single blocks
130
+ current = applyRoleTransforms(current);
131
+ // Still recurse into children
132
+ return current.map(b => {
133
+ if (b.foldMeta || b.children.length === 0)
134
+ return b;
135
+ return { ...b, children: foldBlocks(b.children) };
136
+ });
137
+ }
138
+ // Rules 8/9: Chain detection and linearization (before role transforms — needs REFERENCE blocks)
139
+ const chainResult = detectChains(current);
140
+ current = [...chainResult.chains, ...chainResult.remaining];
141
+ // Rule 11: Case dispatch detection
142
+ const dispatchResult = detectDispatch(current);
143
+ current = [...dispatchResult.dispatches, ...dispatchResult.remaining];
144
+ // Rule 10: Repetitive call fold
145
+ const callResult = detectRepetitiveCalls(current);
146
+ current = [...callResult.folds, ...callResult.remaining];
147
+ // Role transforms: datum → inline, internal → suppress (after semantic rules)
148
+ current = applyRoleTransforms(current);
149
+ // Separate already-folded from remaining
150
+ const alreadyFolded = current.filter(b => b.foldMeta);
151
+ const unfolded = current.filter(b => !b.foldMeta);
152
+ // Rule 7: Repeated leaf fold
153
+ const leafResult = repeatedLeafFold(unfolded);
154
+ // Rule 5: Structural suppression
155
+ const trivialResult = structuralSuppression(leafResult.remaining);
156
+ // Rules 1-3: Group fold with anomaly preservation and source aggregation
157
+ const groupResult = groupFold(trivialResult.remaining);
158
+ // Combine: early folds, group folds, leaf folds, trivial groups, anomalies
159
+ const result = [
160
+ ...alreadyFolded,
161
+ ...groupResult.folded,
162
+ ...leafResult.folds,
163
+ ...trivialResult.groups,
164
+ ...groupResult.anomalies,
165
+ ];
166
+ // Recurse: fold children of non-folded blocks
167
+ return result.map(b => {
168
+ if (b.foldMeta || b.children.length === 0)
169
+ return b;
170
+ return { ...b, children: foldBlocks(b.children) };
171
+ });
172
+ }
173
+ // === Rule 4: Dedup ===
174
+ function dedup(blocks) {
175
+ const seen = new Map();
176
+ for (const block of blocks) {
177
+ const existing = seen.get(block.nodeId);
178
+ if (!existing) {
179
+ seen.set(block.nodeId, block);
180
+ }
181
+ else {
182
+ // Keep the richer block (more lines, children, and targets)
183
+ const richness = (b) => b.lines.length + b.children.length + b.lines.reduce((s, l) => s + l.targets.length, 0);
184
+ if (richness(block) > richness(existing)) {
185
+ seen.set(block.nodeId, block);
186
+ }
187
+ }
188
+ }
189
+ return [...seen.values()];
190
+ }
191
+ // === Rule 6: Target dedup within lines ===
192
+ function dedupTargets(block) {
193
+ const hasDupes = block.lines.some(l => l.targets.length !== new Set(l.targets).size);
194
+ if (!hasDupes)
195
+ return block;
196
+ return {
197
+ ...block,
198
+ lines: block.lines.map(line => ({
199
+ ...line,
200
+ targets: [...new Set(line.targets)],
201
+ })),
202
+ };
203
+ }
204
+ // === Rules 8/9: Chain detection and linearization ===
205
+ function detectChains(blocks) {
206
+ if (blocks.length < 3)
207
+ return { chains: [], remaining: blocks };
208
+ const consumed = new Set();
209
+ const chainBlocks = [];
210
+ // Find all blocks with "derived from" lines
211
+ const derivesFrom = new Map();
212
+ for (let i = 0; i < blocks.length; i++) {
213
+ for (const line of blocks[i].lines) {
214
+ if (line.verb === 'derived from' && line.targets.length > 0) {
215
+ derivesFrom.set(i, line.targets[0]);
216
+ break;
217
+ }
218
+ }
219
+ }
220
+ if (derivesFrom.size < 2)
221
+ return { chains: [], remaining: blocks };
222
+ // Group blocks by location
223
+ const locationGroups = new Map();
224
+ for (let i = 0; i < blocks.length; i++) {
225
+ const loc = blocks[i].location;
226
+ if (!loc)
227
+ continue;
228
+ if (!locationGroups.has(loc))
229
+ locationGroups.set(loc, []);
230
+ locationGroups.get(loc).push(i);
231
+ }
232
+ for (const [loc, indices] of locationGroups) {
233
+ if (indices.length < 3)
234
+ continue;
235
+ // Build name → indices map within this location group
236
+ const nameToIndices = new Map();
237
+ for (const idx of indices) {
238
+ const name = blocks[idx].displayName;
239
+ if (!nameToIndices.has(name))
240
+ nameToIndices.set(name, []);
241
+ nameToIndices.get(name).push(idx);
242
+ }
243
+ // Build name derivation graph: name → derives from name
244
+ const nameDerivesFrom = new Map();
245
+ for (const idx of indices) {
246
+ if (derivesFrom.has(idx) && nameToIndices.has(derivesFrom.get(idx))) {
247
+ nameDerivesFrom.set(blocks[idx].displayName, derivesFrom.get(idx));
248
+ }
249
+ }
250
+ if (nameDerivesFrom.size < 2)
251
+ continue;
252
+ // Find chain roots: names derived FROM but don't derive from anything
253
+ const derivedFromNames = new Set(nameDerivesFrom.values());
254
+ const derivingNames = new Set(nameDerivesFrom.keys());
255
+ const roots = [...derivedFromNames].filter(n => !derivingNames.has(n));
256
+ for (const root of roots) {
257
+ // Build chain from root forward
258
+ const steps = [root];
259
+ let current = root;
260
+ const visited = new Set([root]);
261
+ while (true) {
262
+ let next;
263
+ for (const [name, from] of nameDerivesFrom) {
264
+ if (from === current && !visited.has(name)) {
265
+ next = name;
266
+ break;
267
+ }
268
+ }
269
+ if (!next)
270
+ break;
271
+ steps.push(next);
272
+ visited.add(next);
273
+ current = next;
274
+ }
275
+ if (steps.length < 3)
276
+ continue;
277
+ // Mark all blocks in this chain as consumed
278
+ for (const name of steps) {
279
+ const idxs = nameToIndices.get(name);
280
+ if (idxs) {
281
+ for (const idx of idxs)
282
+ consumed.add(idx);
283
+ }
284
+ }
285
+ // Check if last step has "reads" line for source
286
+ let chainSource;
287
+ const lastIdxs = nameToIndices.get(steps[steps.length - 1]) ?? [];
288
+ for (const idx of lastIdxs) {
289
+ for (const line of blocks[idx].lines) {
290
+ if (line.verb === 'reads' && line.targets.length > 0) {
291
+ chainSource = line.targets[0];
292
+ }
293
+ }
294
+ }
295
+ chainBlocks.push({
296
+ nodeId: `chain:${steps.join(':')}`,
297
+ displayName: steps.join(' \u2218 ') + (chainSource ? `(${chainSource})` : ''),
298
+ nodeType: blocks[indices[0]].nodeType,
299
+ lines: [],
300
+ children: [],
301
+ location: loc,
302
+ foldMeta: {
303
+ kind: 'chain',
304
+ count: steps.length,
305
+ chainSteps: steps,
306
+ chainSource,
307
+ },
308
+ });
309
+ }
310
+ }
311
+ const remaining = blocks.filter((_, i) => !consumed.has(i));
312
+ return { chains: chainBlocks, remaining };
313
+ }
314
+ // === Rule 11: Case dispatch detection ===
315
+ function detectDispatch(blocks) {
316
+ if (blocks.length < 8)
317
+ return { dispatches: [], remaining: blocks };
318
+ // Find blocks with "derived from case" lines
319
+ const caseIndices = [];
320
+ for (let i = 0; i < blocks.length; i++) {
321
+ for (const line of blocks[i].lines) {
322
+ if (line.verb === 'derived from' && line.targets.includes('case')) {
323
+ caseIndices.push(i);
324
+ break;
325
+ }
326
+ }
327
+ }
328
+ if (caseIndices.length < FOLD_THRESHOLD)
329
+ return { dispatches: [], remaining: blocks };
330
+ // Each case block has a pattern block before it
331
+ const consumed = new Set();
332
+ const branches = [];
333
+ for (const idx of caseIndices) {
334
+ if (consumed.has(idx))
335
+ continue;
336
+ const handler = blocks[idx];
337
+ // Pattern node is at idx-1 with no edges/children
338
+ if (idx > 0 && !consumed.has(idx - 1) &&
339
+ blocks[idx - 1].lines.length === 0 && blocks[idx - 1].children.length === 0) {
340
+ const pattern = blocks[idx - 1];
341
+ // Only consume the pattern + handler pair; dup/arg blocks handled by dedup/leaf rules
342
+ branches.push({
343
+ pattern: pattern.displayName,
344
+ handler: handler.displayName,
345
+ indices: [idx - 1, idx],
346
+ });
347
+ consumed.add(idx - 1);
348
+ consumed.add(idx);
349
+ }
350
+ }
351
+ if (branches.length < FOLD_THRESHOLD)
352
+ return { dispatches: [], remaining: blocks };
353
+ // Exemplar: first branch's blocks as children
354
+ const exemplarBlocks = branches[0].indices.map(i => blocks[i]);
355
+ const summaryBranches = branches.slice(1).map(b => ({
356
+ pattern: b.pattern,
357
+ handler: b.handler,
358
+ }));
359
+ const dispatch = {
360
+ nodeId: `dispatch:${branches[0].pattern}`,
361
+ displayName: `${branches[0].pattern} \u2192 ${branches[0].handler}`,
362
+ nodeType: 'DISPATCH',
363
+ lines: [],
364
+ children: exemplarBlocks,
365
+ foldMeta: {
366
+ kind: 'dispatch',
367
+ count: branches.length,
368
+ branches: summaryBranches,
369
+ },
370
+ };
371
+ // Summary block after exemplar
372
+ const branchList = summaryBranches.slice(0, 3)
373
+ .map(b => `${b.pattern} \u2192 ${b.handler}`)
374
+ .join(', ');
375
+ const suffix = summaryBranches.length > 3
376
+ ? `, ...+${summaryBranches.length - 3} more`
377
+ : '';
378
+ const summary = {
379
+ nodeId: `dispatch-summary:${branches[0].pattern}`,
380
+ displayName: `...+${branches.length - 1} more branches: ${branchList}${suffix}`,
381
+ nodeType: 'DISPATCH',
382
+ lines: [],
383
+ children: [],
384
+ foldMeta: {
385
+ kind: 'dispatch',
386
+ count: branches.length - 1,
387
+ branches: summaryBranches,
388
+ },
389
+ };
390
+ const remaining = blocks.filter((_, i) => !consumed.has(i));
391
+ return { dispatches: [dispatch, summary], remaining };
392
+ }
393
+ // === Rule 10: Repetitive call fold ===
394
+ function detectRepetitiveCalls(blocks) {
395
+ // Group non-leaf blocks by (name + signature) — same function called repeatedly
396
+ const groups = new Map();
397
+ for (let i = 0; i < blocks.length; i++) {
398
+ const block = blocks[i];
399
+ if (block.foldMeta)
400
+ continue;
401
+ if (block.lines.length === 0 && block.children.length === 0)
402
+ continue; // Skip leaves
403
+ const sig = computeSignature(block);
404
+ const key = `call:${block.displayName}|${signatureKey(sig)}`;
405
+ if (!groups.has(key))
406
+ groups.set(key, []);
407
+ groups.get(key).push(i);
408
+ }
409
+ const consumed = new Set();
410
+ const folds = [];
411
+ for (const [, indices] of groups) {
412
+ if (indices.length <= FOLD_THRESHOLD)
413
+ continue;
414
+ const exemplar = blocks[indices[0]];
415
+ // Exemplar shown expanded
416
+ folds.push(exemplar);
417
+ // Fold summary
418
+ folds.push({
419
+ nodeId: `callfold:${exemplar.displayName}`,
420
+ displayName: `...+${indices.length - 1} more ${exemplar.displayName}`,
421
+ nodeType: exemplar.nodeType,
422
+ lines: [],
423
+ children: [],
424
+ foldMeta: {
425
+ kind: 'fold',
426
+ count: indices.length,
427
+ label: exemplar.displayName,
428
+ },
429
+ });
430
+ for (const idx of indices)
431
+ consumed.add(idx);
432
+ }
433
+ const remaining = blocks.filter((_, i) => !consumed.has(i));
434
+ return { folds, remaining };
435
+ }
436
+ // === Rule 7: Repeated leaf fold ===
437
+ function repeatedLeafFold(blocks) {
438
+ // Group leaf blocks (no lines, no children) by name
439
+ const leafGroups = new Map();
440
+ const nonLeafIndices = new Set();
441
+ for (let i = 0; i < blocks.length; i++) {
442
+ const block = blocks[i];
443
+ if (block.foldMeta) {
444
+ nonLeafIndices.add(i);
445
+ continue;
446
+ }
447
+ if (block.lines.length === 0 && block.children.length === 0) {
448
+ const name = block.displayName;
449
+ if (!leafGroups.has(name))
450
+ leafGroups.set(name, []);
451
+ leafGroups.get(name).push(i);
452
+ }
453
+ else {
454
+ nonLeafIndices.add(i);
455
+ }
456
+ }
457
+ const foldedLeafIndices = new Set();
458
+ const folds = [];
459
+ for (const [name, indices] of leafGroups) {
460
+ if (indices.length <= FOLD_THRESHOLD)
461
+ continue;
462
+ for (const idx of indices)
463
+ foldedLeafIndices.add(idx);
464
+ folds.push({
465
+ nodeId: `leafrepeat:${name}`,
466
+ displayName: `${name} \u00d7${indices.length}`,
467
+ nodeType: blocks[indices[0]].nodeType,
468
+ lines: [],
469
+ children: [],
470
+ location: blocks[indices[0]].location,
471
+ foldMeta: {
472
+ kind: 'leaf-repeat',
473
+ count: indices.length,
474
+ label: name,
475
+ },
476
+ });
477
+ }
478
+ const remaining = blocks.filter((_, i) => nonLeafIndices.has(i) || (leafGroups.get(blocks[i].displayName)?.length ?? 0) <= FOLD_THRESHOLD);
479
+ return { folds, remaining };
480
+ }
481
+ // === Rule 5: Structural suppression ===
482
+ function structuralSuppression(blocks) {
483
+ const trivialByType = new Map();
484
+ const nonTrivialBlocks = [];
485
+ for (const block of blocks) {
486
+ if (block.foldMeta) {
487
+ nonTrivialBlocks.push(block);
488
+ continue;
489
+ }
490
+ const isTrivial = (block.lines.length === 0 && block.children.length === 0) ||
491
+ block.lines.every(l => l.operator === '');
492
+ if (isTrivial) {
493
+ if (!trivialByType.has(block.nodeType))
494
+ trivialByType.set(block.nodeType, []);
495
+ trivialByType.get(block.nodeType).push(block);
496
+ }
497
+ else {
498
+ nonTrivialBlocks.push(block);
499
+ }
500
+ }
501
+ const groups = [];
502
+ for (const [type, trivials] of trivialByType) {
503
+ if (trivials.length > FOLD_THRESHOLD) {
504
+ const nameList = trivials.map(b => b.displayName).join(', ');
505
+ groups.push({
506
+ nodeId: `trivial:${type}`,
507
+ displayName: `[${type.toLowerCase()}: ${nameList}]`,
508
+ nodeType: type,
509
+ lines: [],
510
+ children: [],
511
+ foldMeta: {
512
+ kind: 'trivial-group',
513
+ count: trivials.length,
514
+ names: trivials.map(b => b.displayName),
515
+ },
516
+ });
517
+ }
518
+ else {
519
+ nonTrivialBlocks.push(...trivials);
520
+ }
521
+ }
522
+ return { groups, remaining: nonTrivialBlocks };
523
+ }
524
+ // === Rules 1-3: Group fold with anomaly preservation and source aggregation ===
525
+ function groupFold(blocks) {
526
+ const unfoldedBlocks = blocks.filter(b => !b.foldMeta);
527
+ const alreadyFolded = blocks.filter(b => b.foldMeta);
528
+ if (unfoldedBlocks.length <= FOLD_THRESHOLD) {
529
+ return { folded: alreadyFolded, anomalies: unfoldedBlocks };
530
+ }
531
+ // Group by signature
532
+ const sigGroups = new Map();
533
+ for (const block of unfoldedBlocks) {
534
+ const sig = computeSignature(block);
535
+ const key = signatureKey(sig);
536
+ if (!sigGroups.has(key))
537
+ sigGroups.set(key, []);
538
+ sigGroups.get(key).push(block);
539
+ }
540
+ const folded = [...alreadyFolded];
541
+ const anomalies = [];
542
+ for (const [, group] of sigGroups) {
543
+ if (group.length > FOLD_THRESHOLD) {
544
+ const exemplar = group[0];
545
+ // Rule 3: Source aggregation — check if all share same source
546
+ const sourceSummary = findCommonSource(group);
547
+ const label = inferLabel(group);
548
+ const summaryParts = [`...+${group.length - 1} more ${label}`];
549
+ if (sourceSummary)
550
+ summaryParts.push(`from ${sourceSummary}`);
551
+ // Exemplar shown expanded
552
+ folded.push(exemplar);
553
+ // Fold summary
554
+ folded.push({
555
+ nodeId: `fold:${exemplar.nodeId}`,
556
+ displayName: summaryParts.join(' '),
557
+ nodeType: exemplar.nodeType,
558
+ lines: [],
559
+ children: [],
560
+ foldMeta: {
561
+ kind: 'fold',
562
+ count: group.length,
563
+ label,
564
+ sourceSummary,
565
+ },
566
+ });
567
+ }
568
+ else {
569
+ // Rule 2: Anomaly — too few to fold
570
+ anomalies.push(...group);
571
+ }
572
+ }
573
+ return { folded, anomalies };
574
+ }
575
+ // === Helpers ===
576
+ function findCommonSource(blocks) {
577
+ const sources = new Set();
578
+ for (const block of blocks) {
579
+ for (const line of block.lines) {
580
+ if (line.targets.length > 0) {
581
+ for (const t of line.targets)
582
+ sources.add(t);
583
+ }
584
+ }
585
+ }
586
+ if (sources.size === 1)
587
+ return [...sources][0];
588
+ return undefined;
589
+ }
590
+ function inferLabel(group) {
591
+ if (group.length === 0)
592
+ return '';
593
+ const type = group[0].nodeType.toLowerCase();
594
+ if (type.endsWith('s'))
595
+ return type;
596
+ return type + 's';
597
+ }
598
+ //# sourceMappingURL=fold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fold.js","sourceRoot":"","sources":["../../src/notation/fold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,4CAA4C;AAC5C,MAAM,cAAc,GAAG,CAAC,CAAC;AAMzB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AACvF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACxF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;AAChF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1F,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,SAAS,YAAY,CAAC,KAAoB;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;IAE5B,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC;IAClD,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAE9C,2BAA2B;IAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9E,IAAI,WAAW;QAAE,OAAO,OAAO,CAAC;IAEhC,8DAA8D;IAC9D,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACvE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,0DAA0D;IAC1D,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAE7D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,MAAuB;IAClD,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAEjC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,0EAA0E;gBAC1E,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,KAAK;oBACR,WAAW,EAAE,UAAU;oBACvB,KAAK,EAAE,EAAE;oBACT,QAAQ,EAAE,EAAE;oBACZ,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE;iBAC7C,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAED;gBACE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,8BAA8B;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,OAAO,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/F,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,CAAC;AAC3B,CAAC;AAUD,SAAS,gBAAgB,CAAC,KAAoB;IAC5C,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,KAAK;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;aACvD,IAAI,EAAE;QACT,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAmB;IACvC,OAAO,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;AACvE,CAAC;AAED,6BAA6B;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,8DAA8D;IAC9D,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAE5B,qFAAqF;IACrF,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEpC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACxB,+CAA+C;QAC/C,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACvC,8BAA8B;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACrB,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YACpD,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iGAAiG;IACjG,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAE5D,mCAAmC;IACnC,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC,GAAG,cAAc,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAEtE,gCAAgC;IAChC,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEzD,8EAA8E;IAC9E,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEvC,yCAAyC;IACzC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAElD,6BAA6B;IAC7B,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE9C,iCAAiC;IACjC,MAAM,aAAa,GAAG,qBAAqB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAElE,yEAAyE;IACzE,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAEvD,2EAA2E;IAC3E,MAAM,MAAM,GAAG;QACb,GAAG,aAAa;QAChB,GAAG,WAAW,CAAC,MAAM;QACrB,GAAG,UAAU,CAAC,KAAK;QACnB,GAAG,aAAa,CAAC,MAAM;QACvB,GAAG,WAAW,CAAC,SAAS;KACzB,CAAC;IAEF,8CAA8C;IAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACpB,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpD,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wBAAwB;AAExB,SAAS,KAAK,CAAC,MAAuB;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,4DAA4D;YAC5D,MAAM,QAAQ,GAAG,CAAC,CAAgB,EAAE,EAAE,CACpC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACzF,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,4CAA4C;AAE5C,SAAS,YAAY,CAAC,KAAoB;IACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACrF,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,OAAO;QACL,GAAG,KAAK;QACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9B,GAAG,IAAI;YACP,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACpC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,uDAAuD;AAEvD,SAAS,YAAY,CACnB,MAAuB;IAEvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAEhE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,WAAW,GAAoB,EAAE,CAAC;IAExC,4CAA4C;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5D,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAEnE,2BAA2B;IAC3B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1D,cAAc,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,cAAc,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAEjC,sDAAsD;QACtD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1D,aAAa,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,wDAAwD;QACxD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,EAAE,CAAC;gBACrE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC;YAAE,SAAS;QAEvC,sEAAsE;QACtE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,gCAAgC;YAChC,MAAM,KAAK,GAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAExC,OAAO,IAAI,EAAE,CAAC;gBACZ,IAAI,IAAwB,CAAC;gBAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC;oBAC3C,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC3C,IAAI,GAAG,IAAI,CAAC;wBACZ,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,IAAI;oBAAE,MAAM;gBACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAE/B,4CAA4C;YAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,MAAM,GAAG,IAAI,IAAI;wBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,IAAI,WAA+B,CAAC;YACpC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClE,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;oBACrC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACrD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,WAAW,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,SAAS,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAClC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBACrC,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,GAAG;gBACb,QAAQ,EAAE;oBACR,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,KAAK,CAAC,MAAM;oBACnB,UAAU,EAAE,KAAK;oBACjB,WAAW;iBACZ;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAC5C,CAAC;AAED,2CAA2C;AAE3C,SAAS,cAAc,CACrB,MAAuB;IAEvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpE,6CAA6C;IAC7C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,cAAc;QAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAEtF,gDAAgD;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,QAAQ,GAAmE,EAAE,CAAC;IAEpF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAEhC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,kDAAkD;QAClD,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAChC,sFAAsF;YACtF,QAAQ,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,OAAO,CAAC,WAAW;gBAC5B,OAAO,EAAE,OAAO,CAAC,WAAW;gBAC5B,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;aACxB,CAAC,CAAC;YAEH,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACtB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,cAAc;QAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAEnF,8CAA8C;IAC9C,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC,CAAC,CAAC;IAEJ,MAAM,QAAQ,GAAkB;QAC9B,MAAM,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;QACzC,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,WAAW,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;QACnE,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE;YACR,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,QAAQ,EAAE,eAAe;SAC1B;KACF,CAAC;IAEF,+BAA+B;IAC/B,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;SAC5C,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;QACvC,CAAC,CAAC,SAAS,eAAe,CAAC,MAAM,GAAG,CAAC,OAAO;QAC5C,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,OAAO,GAAkB;QAC7B,MAAM,EAAE,oBAAoB,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;QACjD,WAAW,EAAE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,mBAAmB,UAAU,GAAG,MAAM,EAAE;QAC/E,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE;YACR,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC1B,QAAQ,EAAE,eAAe;SAC1B;KACF,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;AACxD,CAAC;AAED,wCAAwC;AAExC,SAAS,qBAAqB,CAC5B,MAAuB;IAEvB,gFAAgF;IAChF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,QAAQ;YAAE,SAAS;QAC7B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS,CAAC,cAAc;QAErF,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,QAAQ,KAAK,CAAC,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,IAAI,cAAc;YAAE,SAAS;QAE/C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,0BAA0B;QAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAErB,eAAe;QACf,KAAK,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,YAAY,QAAQ,CAAC,WAAW,EAAE;YAC1C,WAAW,EAAE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,SAAS,QAAQ,CAAC,WAAW,EAAE;YACrE,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE;gBACR,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,KAAK,EAAE,QAAQ,CAAC,WAAW;aAC5B;SACF,CAAC,CAAC;QAEH,KAAK,MAAM,GAAG,IAAI,OAAO;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC;AAED,qCAAqC;AAErC,SAAS,gBAAgB,CACvB,MAAuB;IAEvB,oDAAoD;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,UAAU,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,MAAM,IAAI,cAAc;YAAE,SAAS;QAE/C,KAAK,MAAM,GAAG,IAAI,OAAO;YAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtD,KAAK,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,cAAc,IAAI,EAAE;YAC5B,WAAW,EAAE,GAAG,IAAI,UAAU,OAAO,CAAC,MAAM,EAAE;YAC9C,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;YACrC,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;YACrC,QAAQ,EAAE;gBACR,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,KAAK,EAAE,IAAI;aACZ;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACvC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,cAAc,CAChG,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC;AAED,yCAAyC;AAEzC,SAAS,qBAAqB,CAC5B,MAAuB;IAEvB,MAAM,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;IACzD,MAAM,gBAAgB,GAAoB,EAAE,CAAC;IAE7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GACb,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;YACzD,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;QAE5C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAAE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC9E,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;QAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,WAAW,IAAI,EAAE;gBACzB,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,GAAG;gBACnD,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE;oBACR,IAAI,EAAE,eAAe;oBACrB,KAAK,EAAE,QAAQ,CAAC,MAAM;oBACtB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;iBACxC;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACjD,CAAC;AAED,iFAAiF;AAEjF,SAAS,SAAS,CAChB,MAAuB;IAEvB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,cAAc,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAC5C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;IAC9D,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChD,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,MAAM,GAAoB,CAAC,GAAG,aAAa,CAAC,CAAC;IACnD,MAAM,SAAS,GAAoB,EAAE,CAAC;IAEtC,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE1B,8DAA8D;YAC9D,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,YAAY,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;YAC/D,IAAI,aAAa;gBAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,aAAa,EAAE,CAAC,CAAC;YAE9D,0BAA0B;YAC1B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEtB,eAAe;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE;gBACjC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE;oBACR,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,KAAK,CAAC,MAAM;oBACnB,KAAK;oBACL,aAAa;iBACd;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED,kBAAkB;AAElB,SAAS,gBAAgB,CAAC,MAAuB;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,KAAsB;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Notation — Grafema DSL rendering engine
3
+ *
4
+ * Transforms graph data into compact visual notation.
5
+ * Output-only — Datalog remains the query language.
6
+ *
7
+ * @module notation
8
+ */
9
+ export type { Archetype, EdgeMapping, DescribeOptions, SubgraphData, NotationBlock, NotationLine, FoldMeta, } from './types.js';
10
+ export { EDGE_ARCHETYPE_MAP, lookupEdge, generateLegend } from './archetypes.js';
11
+ export { PERSPECTIVES } from './perspectives.js';
12
+ export { renderNotation } from './renderer.js';
13
+ export { extractSubgraph } from './lodExtractor.js';
14
+ export { shortenName } from './nameShortener.js';
15
+ export { foldBlocks } from './fold.js';
16
+ export { renderTraceNarrative } from './traceRenderer.js';
17
+ export type { TraceDetail, TraceNarrativeOptions } from './traceRenderer.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EACV,SAAS,EACT,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Notation — Grafema DSL rendering engine
3
+ *
4
+ * Transforms graph data into compact visual notation.
5
+ * Output-only — Datalog remains the query language.
6
+ *
7
+ * @module notation
8
+ */
9
+ export { EDGE_ARCHETYPE_MAP, lookupEdge, generateLegend } from './archetypes.js';
10
+ export { PERSPECTIVES } from './perspectives.js';
11
+ export { renderNotation } from './renderer.js';
12
+ export { extractSubgraph } from './lodExtractor.js';
13
+ export { shortenName } from './nameShortener.js';
14
+ export { foldBlocks } from './fold.js';
15
+ export { renderTraceNarrative } from './traceRenderer.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}