@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,166 @@
1
+ /**
2
+ * VersionManager - управление версиями нод для incremental analysis
3
+ *
4
+ * КОНЦЕПЦИЯ:
5
+ * - Храним несколько версий кода одновременно (main, __local, branch names)
6
+ * - Используем stable IDs для сравнения версий
7
+ * - Поддерживаем fine-grained merge (только изменённые ноды)
8
+ *
9
+ * ВЕРСИИ:
10
+ * - "main" - committed код из git HEAD
11
+ * - "__local" - uncommitted изменения (working directory)
12
+ * - "branch-name" - другие ветки (будущее)
13
+ */
14
+ /**
15
+ * Version constants
16
+ */
17
+ export interface VersionConstants {
18
+ MAIN: 'main';
19
+ LOCAL: '__local';
20
+ }
21
+ /**
22
+ * Node types for stable ID generation
23
+ */
24
+ export type StableIdNodeType = 'FUNCTION' | 'CLASS' | 'INTERFACE' | 'TYPE_ALIAS' | 'VARIABLE_DECLARATION' | 'MODULE' | 'SERVICE' | 'CALL_SITE' | 'SCOPE' | 'EXPRESSION' | 'STATEMENT' | 'DATABASE_QUERY' | 'HTTP_REQUEST' | 'FILESYSTEM' | 'NETWORK' | 'ENDPOINT';
25
+ /**
26
+ * Node for stable ID generation
27
+ */
28
+ export interface VersionedNode {
29
+ type: string;
30
+ name?: string;
31
+ file?: string;
32
+ line?: number;
33
+ column?: number;
34
+ query?: string;
35
+ url?: string;
36
+ path?: string;
37
+ endpoint?: string;
38
+ params?: unknown[];
39
+ returnType?: string;
40
+ async?: boolean;
41
+ exported?: boolean;
42
+ bodyHash?: string;
43
+ methods?: unknown[];
44
+ properties?: unknown[];
45
+ extends?: string;
46
+ implements?: string[];
47
+ kind?: string;
48
+ value?: unknown;
49
+ contentHash?: string;
50
+ imports?: unknown[];
51
+ exports?: unknown[];
52
+ arguments?: unknown[];
53
+ callee?: string;
54
+ operation?: string;
55
+ collection?: string;
56
+ method?: string;
57
+ handler?: string;
58
+ id?: string;
59
+ version?: string;
60
+ _stableId?: string;
61
+ _replaces?: string;
62
+ updatedAt?: number;
63
+ }
64
+ /**
65
+ * REPLACES edge structure
66
+ */
67
+ export interface ReplacesEdge {
68
+ type: 'REPLACES';
69
+ fromId: string;
70
+ toId: string;
71
+ version: string;
72
+ }
73
+ /**
74
+ * Enrichment options
75
+ */
76
+ export interface EnrichOptions {
77
+ replacesId?: string;
78
+ }
79
+ /**
80
+ * Modified node info
81
+ */
82
+ export interface ModifiedNodeInfo {
83
+ old: VersionedNode;
84
+ new: VersionedNode;
85
+ stableId: string;
86
+ }
87
+ /**
88
+ * Changes summary
89
+ */
90
+ export interface ChangesSummary {
91
+ addedCount: number;
92
+ modifiedCount: number;
93
+ unchangedCount: number;
94
+ deletedCount: number;
95
+ totalChanges: number;
96
+ }
97
+ /**
98
+ * Classification result
99
+ */
100
+ export interface ClassifyChangesResult {
101
+ added: VersionedNode[];
102
+ modified: ModifiedNodeInfo[];
103
+ unchanged: VersionedNode[];
104
+ deleted: VersionedNode[];
105
+ summary: ChangesSummary;
106
+ }
107
+ export declare class VersionManager {
108
+ readonly versions: VersionConstants;
109
+ constructor();
110
+ /**
111
+ * Генерировать stable ID для ноды (без версии)
112
+ *
113
+ * Stable ID остаётся одинаковым для одной и той же сущности
114
+ * в разных версиях кода
115
+ */
116
+ generateStableId(node: VersionedNode): string;
117
+ /**
118
+ * Генерировать versioned ID для ноды
119
+ */
120
+ generateVersionedId(node: VersionedNode, version: string): string;
121
+ /**
122
+ * Извлечь stable ID из versioned ID
123
+ */
124
+ extractStableId(versionedId: string): string;
125
+ /**
126
+ * Извлечь версию из versioned ID
127
+ */
128
+ extractVersion(versionedId: string): string;
129
+ /**
130
+ * Проверить, имеет ли нода структурные изменения
131
+ */
132
+ hasStructuralChanges(oldNode: VersionedNode, newNode: VersionedNode): boolean;
133
+ /**
134
+ * Получить ключи для сравнения в зависимости от типа ноды
135
+ */
136
+ private _getComparisonKeys;
137
+ /**
138
+ * Вычислить хеш тела функции для сравнения
139
+ */
140
+ calculateBodyHash(bodySource: string | null | undefined): string | null;
141
+ /**
142
+ * Создать REPLACES ребро между версиями
143
+ */
144
+ createReplacesEdge(localNodeId: string, mainNodeId: string): ReplacesEdge;
145
+ /**
146
+ * Дополнить ноду полями для version-aware анализа
147
+ */
148
+ enrichNodeWithVersion(node: VersionedNode, version: string, options?: EnrichOptions): VersionedNode;
149
+ /**
150
+ * Классифицировать изменения между версиями
151
+ */
152
+ classifyChanges(mainNodes: VersionedNode[], localNodes: VersionedNode[]): ClassifyChangesResult;
153
+ /**
154
+ * Проверить, является ли версия локальной (uncommitted)
155
+ */
156
+ isLocalVersion(version: string): boolean;
157
+ /**
158
+ * Проверить, является ли версия основной (committed)
159
+ */
160
+ isMainVersion(version: string): boolean;
161
+ }
162
+ /**
163
+ * Singleton instance
164
+ */
165
+ export declare const versionManager: VersionManager;
166
+ //# sourceMappingURL=VersionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionManager.d.ts","sourceRoot":"","sources":["../../src/core/VersionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * VersionManager - управление версиями нод для incremental analysis
3
+ *
4
+ * КОНЦЕПЦИЯ:
5
+ * - Храним несколько версий кода одновременно (main, __local, branch names)
6
+ * - Используем stable IDs для сравнения версий
7
+ * - Поддерживаем fine-grained merge (только изменённые ноды)
8
+ *
9
+ * ВЕРСИИ:
10
+ * - "main" - committed код из git HEAD
11
+ * - "__local" - uncommitted изменения (working directory)
12
+ * - "branch-name" - другие ветки (будущее)
13
+ */
14
+ import { createHash } from 'crypto';
15
+ export class VersionManager {
16
+ versions;
17
+ constructor() {
18
+ this.versions = {
19
+ MAIN: 'main',
20
+ LOCAL: '__local'
21
+ };
22
+ }
23
+ /**
24
+ * Генерировать stable ID для ноды (без версии)
25
+ *
26
+ * Stable ID остаётся одинаковым для одной и той же сущности
27
+ * в разных версиях кода
28
+ */
29
+ generateStableId(node) {
30
+ const { type, name, file, line, column } = node;
31
+ // Для FUNCTION, CLASS - используем type:name:file
32
+ if (['FUNCTION', 'CLASS', 'INTERFACE', 'TYPE_ALIAS'].includes(type)) {
33
+ return `${type}:${name}:${file}`;
34
+ }
35
+ // Для VARIABLE_DECLARATION - добавляем line для различения локальных переменных
36
+ if (type === 'VARIABLE_DECLARATION') {
37
+ return `${type}:${name}:${file}:${line || 0}`;
38
+ }
39
+ // Для MODULE - use semantic ID format with name (relative path)
40
+ if (type === 'MODULE') {
41
+ // name stores the relative path for MODULE nodes
42
+ return `${name}->global->MODULE->module`;
43
+ }
44
+ // Для SERVICE - используем имя или file
45
+ if (type === 'SERVICE') {
46
+ return `SERVICE:${name || file}`;
47
+ }
48
+ // Для вложенных нод (CALL_SITE, SCOPE, EXPRESSION) - используем file:line:column
49
+ if (['CALL_SITE', 'SCOPE', 'EXPRESSION', 'STATEMENT'].includes(type)) {
50
+ return `${type}:${file}:${line || 0}:${column || 0}`;
51
+ }
52
+ // Для EXTERNAL нод (DATABASE_QUERY, HTTP_REQUEST) - используем содержимое
53
+ if (['DATABASE_QUERY', 'HTTP_REQUEST', 'FILESYSTEM', 'NETWORK'].includes(type)) {
54
+ // Используем хеш содержимого для уникальности
55
+ const content = node.query || node.url || node.path || node.endpoint || '';
56
+ const hash = createHash('sha256').update(content).digest('hex').substring(0, 16);
57
+ return `${type}:${hash}`;
58
+ }
59
+ // По умолчанию - используем все доступные поля
60
+ const parts = [type, name, file, line, column].filter(p => p !== undefined && p !== null);
61
+ return parts.join(':');
62
+ }
63
+ /**
64
+ * Генерировать versioned ID для ноды
65
+ */
66
+ generateVersionedId(node, version) {
67
+ const stableId = this.generateStableId(node);
68
+ return `${stableId}:${version}`;
69
+ }
70
+ /**
71
+ * Извлечь stable ID из versioned ID
72
+ */
73
+ extractStableId(versionedId) {
74
+ const lastColonIndex = versionedId.lastIndexOf(':');
75
+ return versionedId.substring(0, lastColonIndex);
76
+ }
77
+ /**
78
+ * Извлечь версию из versioned ID
79
+ */
80
+ extractVersion(versionedId) {
81
+ const lastColonIndex = versionedId.lastIndexOf(':');
82
+ return versionedId.substring(lastColonIndex + 1);
83
+ }
84
+ /**
85
+ * Проверить, имеет ли нода структурные изменения
86
+ */
87
+ hasStructuralChanges(oldNode, newNode) {
88
+ // Список ключевых полей для сравнения (зависит от типа ноды)
89
+ const keysToCompare = this._getComparisonKeys(oldNode.type);
90
+ for (const key of keysToCompare) {
91
+ const oldValue = oldNode[key];
92
+ const newValue = newNode[key];
93
+ // Глубокое сравнение для массивов и объектов
94
+ if (JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
95
+ return true;
96
+ }
97
+ }
98
+ return false;
99
+ }
100
+ /**
101
+ * Получить ключи для сравнения в зависимости от типа ноды
102
+ */
103
+ _getComparisonKeys(nodeType) {
104
+ const commonKeys = ['name', 'line', 'column'];
105
+ const typeSpecificKeys = {
106
+ FUNCTION: ['params', 'returnType', 'async', 'exported', 'bodyHash'],
107
+ CLASS: ['methods', 'properties', 'extends', 'implements', 'exported'],
108
+ VARIABLE_DECLARATION: ['kind', 'value', 'exported'],
109
+ MODULE: ['contentHash', 'imports', 'exports'],
110
+ CALL_SITE: ['arguments', 'callee'],
111
+ DATABASE_QUERY: ['query', 'operation', 'collection'],
112
+ HTTP_REQUEST: ['method', 'url', 'endpoint'],
113
+ ENDPOINT: ['path', 'method', 'handler']
114
+ };
115
+ return [...commonKeys, ...(typeSpecificKeys[nodeType] || [])];
116
+ }
117
+ /**
118
+ * Вычислить хеш тела функции для сравнения
119
+ */
120
+ calculateBodyHash(bodySource) {
121
+ if (!bodySource)
122
+ return null;
123
+ // Нормализуем код: убираем пробелы и комментарии для сравнения
124
+ const normalized = bodySource
125
+ .replace(/\/\*[\s\S]*?\*\//g, '') // Блочные комментарии
126
+ .replace(/\/\/.*/g, '') // Строчные комментарии
127
+ .replace(/\s+/g, ' ') // Множественные пробелы -> один пробел
128
+ .trim();
129
+ return createHash('sha256').update(normalized, 'utf-8').digest('hex');
130
+ }
131
+ /**
132
+ * Создать REPLACES ребро между версиями
133
+ */
134
+ createReplacesEdge(localNodeId, mainNodeId) {
135
+ return {
136
+ type: 'REPLACES',
137
+ fromId: localNodeId,
138
+ toId: mainNodeId,
139
+ version: '__local' // Edge тоже имеет версию
140
+ };
141
+ }
142
+ /**
143
+ * Дополнить ноду полями для version-aware анализа
144
+ */
145
+ enrichNodeWithVersion(node, version, options = {}) {
146
+ const stableId = this.generateStableId(node);
147
+ const versionedId = this.generateVersionedId(node, version);
148
+ const enriched = {
149
+ ...node,
150
+ id: versionedId,
151
+ version: version,
152
+ _stableId: stableId
153
+ };
154
+ // Добавляем _replaces если это замена main версии
155
+ if (options.replacesId) {
156
+ enriched._replaces = options.replacesId;
157
+ }
158
+ // Добавляем timestamp
159
+ if (!enriched.updatedAt) {
160
+ enriched.updatedAt = Date.now();
161
+ }
162
+ return enriched;
163
+ }
164
+ /**
165
+ * Классифицировать изменения между версиями
166
+ */
167
+ classifyChanges(mainNodes, localNodes) {
168
+ // Создаём Map по stable ID
169
+ const mainMap = new Map();
170
+ for (const node of mainNodes) {
171
+ const stableId = this.generateStableId(node);
172
+ mainMap.set(stableId, node);
173
+ }
174
+ const localMap = new Map();
175
+ for (const node of localNodes) {
176
+ const stableId = this.generateStableId(node);
177
+ localMap.set(stableId, node);
178
+ }
179
+ // Классификация
180
+ const added = [];
181
+ const modified = [];
182
+ const unchanged = [];
183
+ const deleted = [];
184
+ // Проверяем локальные ноды
185
+ for (const [stableId, localNode] of localMap) {
186
+ if (!mainMap.has(stableId)) {
187
+ // Нода добавлена
188
+ added.push(localNode);
189
+ }
190
+ else {
191
+ const mainNode = mainMap.get(stableId);
192
+ if (this.hasStructuralChanges(mainNode, localNode)) {
193
+ // Нода изменена
194
+ modified.push({ old: mainNode, new: localNode, stableId });
195
+ }
196
+ else {
197
+ // Нода не изменилась
198
+ unchanged.push(localNode);
199
+ }
200
+ }
201
+ }
202
+ // Проверяем удалённые ноды (есть в main, нет в local)
203
+ for (const [stableId, mainNode] of mainMap) {
204
+ if (!localMap.has(stableId)) {
205
+ deleted.push(mainNode);
206
+ }
207
+ }
208
+ return {
209
+ added, // Новые ноды
210
+ modified, // Изменённые ноды
211
+ unchanged, // Неизменённые ноды
212
+ deleted, // Удалённые ноды
213
+ summary: {
214
+ addedCount: added.length,
215
+ modifiedCount: modified.length,
216
+ unchangedCount: unchanged.length,
217
+ deletedCount: deleted.length,
218
+ totalChanges: added.length + modified.length + deleted.length
219
+ }
220
+ };
221
+ }
222
+ /**
223
+ * Проверить, является ли версия локальной (uncommitted)
224
+ */
225
+ isLocalVersion(version) {
226
+ return version === this.versions.LOCAL;
227
+ }
228
+ /**
229
+ * Проверить, является ли версия основной (committed)
230
+ */
231
+ isMainVersion(version) {
232
+ return version === this.versions.MAIN;
233
+ }
234
+ }
235
+ /**
236
+ * Singleton instance
237
+ */
238
+ export const versionManager = new VersionManager();
239
+ //# sourceMappingURL=VersionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionManager.js","sourceRoot":"","sources":["../../src/core/VersionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Internal branding helper for legitimate uses outside NodeFactory.
3
+ * DO NOT import this in analyzers or plugins - use NodeFactory instead.
4
+ *
5
+ * Legitimate uses:
6
+ * - NodeFactory (centralized node creation)
7
+ * - GraphBuilder._flushNodes() - batches validated nodes from builders
8
+ * - RFDBServerBackend._parseNode() - re-brands nodes from database
9
+ *
10
+ * @internal
11
+ */
12
+ import type { BaseNodeRecord, BrandedNode } from '@grafema/types';
13
+ export declare function brandNodeInternal<T extends BaseNodeRecord>(node: T): BrandedNode<T>;
14
+ //# sourceMappingURL=brandNodeInternal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brandNodeInternal.d.ts","sourceRoot":"","sources":["../../src/core/brandNodeInternal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAEnF"}
@@ -0,0 +1,4 @@
1
+ export function brandNodeInternal(node) {
2
+ return node;
3
+ }
4
+ //# sourceMappingURL=brandNodeInternal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brandNodeInternal.js","sourceRoot":"","sources":["../../src/core/brandNodeInternal.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,iBAAiB,CAA2B,IAAO;IACjE,OAAO,IAAsB,CAAC;AAChC,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * GuaranteeNode - contract for contract-based guarantee nodes
3
+ *
4
+ * Types: guarantee:queue, guarantee:api, guarantee:permission
5
+ * ID format: guarantee:queue#orders, guarantee:api#rate-limit
6
+ *
7
+ * Unlike Datalog-based GUARANTEE nodes (handled by GuaranteeManager),
8
+ * these nodes use JSON schema validation for contract verification.
9
+ */
10
+ import type { BaseNodeRecord } from '@grafema/types';
11
+ export type GuaranteePriority = 'critical' | 'important' | 'observed' | 'tracked';
12
+ export type GuaranteeStatus = 'discovered' | 'reviewed' | 'active' | 'changing' | 'deprecated';
13
+ export type GuaranteeType = 'guarantee:queue' | 'guarantee:api' | 'guarantee:permission';
14
+ export interface GuaranteeNodeRecord extends BaseNodeRecord {
15
+ type: GuaranteeType;
16
+ priority: GuaranteePriority;
17
+ status: GuaranteeStatus;
18
+ owner?: string;
19
+ schema?: Record<string, unknown>;
20
+ condition?: string;
21
+ description?: string;
22
+ createdAt?: number;
23
+ updatedAt?: number;
24
+ }
25
+ export interface GuaranteeNodeOptions {
26
+ priority?: GuaranteePriority;
27
+ status?: GuaranteeStatus;
28
+ owner?: string;
29
+ schema?: Record<string, unknown>;
30
+ condition?: string;
31
+ description?: string;
32
+ }
33
+ declare const GUARANTEE_NAMESPACES: readonly ["queue", "api", "permission"];
34
+ type GuaranteeNamespace = typeof GUARANTEE_NAMESPACES[number];
35
+ export declare class GuaranteeNode {
36
+ static readonly TYPE_QUEUE: "guarantee:queue";
37
+ static readonly TYPE_API: "guarantee:api";
38
+ static readonly TYPE_PERMISSION: "guarantee:permission";
39
+ static readonly REQUIRED: readonly ["name", "file", "priority", "status"];
40
+ static readonly OPTIONAL: readonly ["owner", "schema", "condition", "description", "createdAt", "updatedAt"];
41
+ /**
42
+ * Create guarantee node
43
+ * @param namespace - guarantee namespace (queue, api, permission)
44
+ * @param name - guarantee name (e.g., 'orders', 'rate-limit')
45
+ * @param options - optional fields
46
+ */
47
+ static create(namespace: GuaranteeNamespace, name: string, options?: GuaranteeNodeOptions): GuaranteeNodeRecord;
48
+ /**
49
+ * Validate guarantee node
50
+ * @returns array of error messages, empty if valid
51
+ */
52
+ static validate(node: GuaranteeNodeRecord): string[];
53
+ /**
54
+ * Parse guarantee ID into components
55
+ * @param id - full ID (e.g., 'guarantee:queue#orders')
56
+ * @returns { namespace, name } or null if invalid
57
+ */
58
+ static parseId(id: string): {
59
+ namespace: GuaranteeNamespace;
60
+ name: string;
61
+ } | null;
62
+ /**
63
+ * Build ID from components
64
+ */
65
+ static buildId(namespace: GuaranteeNamespace, name: string): string;
66
+ /**
67
+ * Check if node type is a guarantee type
68
+ */
69
+ static isGuaranteeType(type: string): boolean;
70
+ /**
71
+ * Get all valid guarantee types
72
+ */
73
+ static getTypes(): GuaranteeType[];
74
+ }
75
+ export {};
76
+ //# sourceMappingURL=GuaranteeNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuaranteeNode.d.ts","sourceRoot":"","sources":["../../../src/core/nodes/GuaranteeNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIrD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAClF,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;AAC/F,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,eAAe,GAAG,sBAAsB,CAAC;AAEzF,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,QAAA,MAAM,oBAAoB,yCAA0C,CAAC;AACrE,KAAK,kBAAkB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAE9D,qBAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,UAAU,oBAAmC;IAC7D,MAAM,CAAC,QAAQ,CAAC,QAAQ,kBAAiC;IACzD,MAAM,CAAC,QAAQ,CAAC,eAAe,yBAAwC;IAEvE,MAAM,CAAC,QAAQ,CAAC,QAAQ,kDAAmD;IAC3E,MAAM,CAAC,QAAQ,CAAC,QAAQ,qFAAsF;IAE9G;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CACX,SAAS,EAAE,kBAAkB,EAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAyB,GACjC,mBAAmB;IA4BtB;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE;IA0BpD;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,kBAAkB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAalF;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAInE;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACH,MAAM,CAAC,QAAQ,IAAI,aAAa,EAAE;CAOnC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * GuaranteeNode - contract for contract-based guarantee nodes
3
+ *
4
+ * Types: guarantee:queue, guarantee:api, guarantee:permission
5
+ * ID format: guarantee:queue#orders, guarantee:api#rate-limit
6
+ *
7
+ * Unlike Datalog-based GUARANTEE nodes (handled by GuaranteeManager),
8
+ * these nodes use JSON schema validation for contract verification.
9
+ */
10
+ import { NAMESPACED_TYPE, isGuaranteeType } from './NodeKind.js';
11
+ // Valid guarantee namespaces
12
+ const GUARANTEE_NAMESPACES = ['queue', 'api', 'permission'];
13
+ export class GuaranteeNode {
14
+ static TYPE_QUEUE = NAMESPACED_TYPE.GUARANTEE_QUEUE;
15
+ static TYPE_API = NAMESPACED_TYPE.GUARANTEE_API;
16
+ static TYPE_PERMISSION = NAMESPACED_TYPE.GUARANTEE_PERMISSION;
17
+ static REQUIRED = ['name', 'file', 'priority', 'status'];
18
+ static OPTIONAL = ['owner', 'schema', 'condition', 'description', 'createdAt', 'updatedAt'];
19
+ /**
20
+ * Create guarantee node
21
+ * @param namespace - guarantee namespace (queue, api, permission)
22
+ * @param name - guarantee name (e.g., 'orders', 'rate-limit')
23
+ * @param options - optional fields
24
+ */
25
+ static create(namespace, name, options = {}) {
26
+ if (!namespace)
27
+ throw new Error('GuaranteeNode.create: namespace is required');
28
+ if (!name)
29
+ throw new Error('GuaranteeNode.create: name is required');
30
+ if (!GUARANTEE_NAMESPACES.includes(namespace)) {
31
+ throw new Error(`GuaranteeNode.create: invalid namespace "${namespace}". Valid: ${GUARANTEE_NAMESPACES.join(', ')}`);
32
+ }
33
+ const type = `guarantee:${namespace}`;
34
+ const id = `${type}#${name}`;
35
+ const now = Date.now();
36
+ return {
37
+ id,
38
+ type,
39
+ name,
40
+ file: '', // Guarantees don't have a source file
41
+ line: undefined,
42
+ priority: options.priority || 'observed',
43
+ status: options.status || 'discovered',
44
+ owner: options.owner,
45
+ schema: options.schema,
46
+ condition: options.condition,
47
+ description: options.description,
48
+ createdAt: now,
49
+ updatedAt: now,
50
+ };
51
+ }
52
+ /**
53
+ * Validate guarantee node
54
+ * @returns array of error messages, empty if valid
55
+ */
56
+ static validate(node) {
57
+ const errors = [];
58
+ if (!isGuaranteeType(node.type)) {
59
+ errors.push(`Expected guarantee:* type, got ${node.type}`);
60
+ }
61
+ if (!node.name) {
62
+ errors.push('Missing required field: name');
63
+ }
64
+ if (!node.priority) {
65
+ errors.push('Missing required field: priority');
66
+ }
67
+ else if (!['critical', 'important', 'observed', 'tracked'].includes(node.priority)) {
68
+ errors.push(`Invalid priority: ${node.priority}. Valid: critical, important, observed, tracked`);
69
+ }
70
+ if (!node.status) {
71
+ errors.push('Missing required field: status');
72
+ }
73
+ else if (!['discovered', 'reviewed', 'active', 'changing', 'deprecated'].includes(node.status)) {
74
+ errors.push(`Invalid status: ${node.status}. Valid: discovered, reviewed, active, changing, deprecated`);
75
+ }
76
+ return errors;
77
+ }
78
+ /**
79
+ * Parse guarantee ID into components
80
+ * @param id - full ID (e.g., 'guarantee:queue#orders')
81
+ * @returns { namespace, name } or null if invalid
82
+ */
83
+ static parseId(id) {
84
+ if (!id)
85
+ return null;
86
+ // Format: guarantee:namespace#name
87
+ const match = id.match(/^guarantee:(queue|api|permission)#(.+)$/);
88
+ if (!match)
89
+ return null;
90
+ return {
91
+ namespace: match[1],
92
+ name: match[2],
93
+ };
94
+ }
95
+ /**
96
+ * Build ID from components
97
+ */
98
+ static buildId(namespace, name) {
99
+ return `guarantee:${namespace}#${name}`;
100
+ }
101
+ /**
102
+ * Check if node type is a guarantee type
103
+ */
104
+ static isGuaranteeType(type) {
105
+ return isGuaranteeType(type);
106
+ }
107
+ /**
108
+ * Get all valid guarantee types
109
+ */
110
+ static getTypes() {
111
+ return [
112
+ NAMESPACED_TYPE.GUARANTEE_QUEUE,
113
+ NAMESPACED_TYPE.GUARANTEE_API,
114
+ NAMESPACED_TYPE.GUARANTEE_PERMISSION,
115
+ ];
116
+ }
117
+ }
118
+ //# sourceMappingURL=GuaranteeNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuaranteeNode.js","sourceRoot":"","sources":["../../../src/core/nodes/GuaranteeNode.ts"],"names":[],"mappings":"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"}