@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,17 @@
1
+ import type { Resource, ResourceId, ResourceRegistry as IResourceRegistry } from '@grafema/types';
2
+ /**
3
+ * In-memory Resource registry for a single pipeline run.
4
+ * Created by Orchestrator at run start, cleared at run end.
5
+ *
6
+ * Thread safety: Not needed — Grafema runs plugins sequentially within
7
+ * each phase. Plugins are toposorted and run one at a time.
8
+ */
9
+ export declare class ResourceRegistryImpl implements IResourceRegistry {
10
+ private resources;
11
+ getOrCreate<T extends Resource>(id: ResourceId, factory: () => T): T;
12
+ get<T extends Resource>(id: ResourceId): T | undefined;
13
+ has(id: ResourceId): boolean;
14
+ /** Clear all Resources. Called by Orchestrator at the end of a run. */
15
+ clear(): void;
16
+ }
17
+ //# sourceMappingURL=ResourceRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceRegistry.d.ts","sourceRoot":"","sources":["../../src/core/ResourceRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAElG;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,iBAAiB;IAC5D,OAAO,CAAC,SAAS,CAAmC;IAEpD,WAAW,CAAC,CAAC,SAAS,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;IAcpE,GAAG,CAAC,CAAC,SAAS,QAAQ,EAAE,EAAE,EAAE,UAAU,GAAG,CAAC,GAAG,SAAS;IAItD,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO;IAI5B,uEAAuE;IACvE,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * In-memory Resource registry for a single pipeline run.
3
+ * Created by Orchestrator at run start, cleared at run end.
4
+ *
5
+ * Thread safety: Not needed — Grafema runs plugins sequentially within
6
+ * each phase. Plugins are toposorted and run one at a time.
7
+ */
8
+ export class ResourceRegistryImpl {
9
+ resources = new Map();
10
+ getOrCreate(id, factory) {
11
+ let resource = this.resources.get(id);
12
+ if (!resource) {
13
+ resource = factory();
14
+ if (resource.id !== id) {
15
+ throw new Error(`Resource factory returned resource with id "${resource.id}" but expected "${id}"`);
16
+ }
17
+ this.resources.set(id, resource);
18
+ }
19
+ return resource;
20
+ }
21
+ get(id) {
22
+ return this.resources.get(id);
23
+ }
24
+ has(id) {
25
+ return this.resources.has(id);
26
+ }
27
+ /** Clear all Resources. Called by Orchestrator at the end of a run. */
28
+ clear() {
29
+ this.resources.clear();
30
+ }
31
+ }
32
+ //# sourceMappingURL=ResourceRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceRegistry.js","sourceRoot":"","sources":["../../src/core/ResourceRegistry.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IACvB,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEpD,WAAW,CAAqB,EAAc,EAAE,OAAgB;QAC9D,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,OAAO,EAAE,CAAC;YACrB,IAAI,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CACb,+CAA+C,QAAQ,CAAC,EAAE,mBAAmB,EAAE,GAAG,CACnF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,QAAa,CAAC;IACvB,CAAC;IAED,GAAG,CAAqB,EAAc;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAkB,CAAC;IACjD,CAAC;IAED,GAAG,CAAC,EAAc;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,uEAAuE;IACvE,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * SemanticId - Stable identifiers for code elements
3
+ *
4
+ * Semantic IDs provide stable identifiers for code elements that don't change
5
+ * when unrelated code is added/removed (no line numbers in IDs).
6
+ *
7
+ * Format: {file}->{scope_path}->{type}->{name}[#discriminator]
8
+ *
9
+ * Examples:
10
+ * src/app.js->global->FUNCTION->processData
11
+ * src/app.js->UserService->METHOD->login
12
+ * src/app.js->getUser->if#0->CALL->console.log#0
13
+ *
14
+ * Special formats:
15
+ * Singletons: net:stdio->__stdio__
16
+ * External modules: EXTERNAL_MODULE->lodash
17
+ */
18
+ /**
19
+ * Location in source file
20
+ */
21
+ export interface Location {
22
+ line: number;
23
+ column: number;
24
+ endLine?: number;
25
+ endColumn?: number;
26
+ }
27
+ /**
28
+ * Scope context for semantic ID generation
29
+ */
30
+ export interface ScopeContext {
31
+ /** Source file path */
32
+ file: string;
33
+ /** Array of scope names, e.g. ['MyClass', 'myMethod', 'if#1'] */
34
+ scopePath: string[];
35
+ }
36
+ /**
37
+ * Options for semantic ID generation
38
+ */
39
+ export interface SemanticIdOptions {
40
+ /** Counter for disambiguation (#N) */
41
+ discriminator?: number;
42
+ /** Context string for special cases ([context]) */
43
+ context?: string;
44
+ }
45
+ /**
46
+ * Parsed semantic ID components
47
+ */
48
+ export interface ParsedSemanticId {
49
+ file: string;
50
+ scopePath: string[];
51
+ type: string;
52
+ name: string;
53
+ discriminator?: number;
54
+ context?: string;
55
+ }
56
+ /**
57
+ * Item with name and location for discriminator computation
58
+ */
59
+ export interface LocatedItem {
60
+ name: string;
61
+ location: Location;
62
+ }
63
+ /**
64
+ * Parsed v2 semantic ID components.
65
+ *
66
+ * v2 format: file->TYPE->name[in:namedParent,h:xxxx]#N
67
+ *
68
+ * Key difference from v1: no scope path in ID. Only nearest named ancestor
69
+ * (namedParent) is encoded. Anonymous scopes (if, for, try) are invisible.
70
+ */
71
+ export interface ParsedSemanticIdV2 {
72
+ file: string;
73
+ type: string;
74
+ name: string;
75
+ namedParent?: string;
76
+ contentHash?: string;
77
+ counter?: number;
78
+ }
79
+ /**
80
+ * Content hint data for computing content hash.
81
+ * Each node type supplies different hints for disambiguation.
82
+ */
83
+ export interface ContentHashHints {
84
+ /** Number of arguments (CALL) or parameters (FUNCTION) */
85
+ arity?: number;
86
+ /** First literal argument value (CALL) */
87
+ firstLiteralArg?: string;
88
+ /** First parameter name (FUNCTION) */
89
+ firstParamName?: string;
90
+ /** RHS expression type (VARIABLE/CONSTANT) */
91
+ rhsType?: string;
92
+ /** First significant token of RHS (VARIABLE/CONSTANT) */
93
+ rhsToken?: string;
94
+ /** Object expression chain (PROPERTY_ACCESS) */
95
+ objectChain?: string;
96
+ }
97
+ /**
98
+ * Compute semantic ID for any node type.
99
+ *
100
+ * @param type - Node type (FUNCTION, CALL, VARIABLE, etc.)
101
+ * @param name - Node name
102
+ * @param context - Scope context from ScopeTracker
103
+ * @param options - Optional discriminator or context
104
+ * @returns Semantic ID string
105
+ */
106
+ export declare function computeSemanticId(type: string, name: string, context: ScopeContext, options?: SemanticIdOptions): string;
107
+ /**
108
+ * Parse semantic ID back to components.
109
+ *
110
+ * @param id - Semantic ID to parse
111
+ * @returns Parsed components or null if invalid
112
+ */
113
+ export declare function parseSemanticId(id: string): ParsedSemanticId | null;
114
+ /**
115
+ * Compute discriminator for items with same name in same scope.
116
+ * Uses line/column for stable ordering.
117
+ *
118
+ * @param items - All items in scope
119
+ * @param targetName - Name to find discriminator for
120
+ * @param targetLocation - Location of target item
121
+ * @returns Discriminator (0-based index among same-named items)
122
+ */
123
+ export declare function computeDiscriminator(items: LocatedItem[], targetName: string, targetLocation: Location): number;
124
+ /**
125
+ * Compute v2 semantic ID.
126
+ *
127
+ * Format: file->TYPE->name (top-level, no collision)
128
+ * Format: file->TYPE->name[in:parent] (nested, no collision)
129
+ * Format: file->TYPE->name[in:parent,h:xxxx] (collision, hash disambiguates)
130
+ * Format: file->TYPE->name[in:parent,h:xxxx]#N (hash collision, counter)
131
+ *
132
+ * @param type - Node type (FUNCTION, CALL, VARIABLE, etc.)
133
+ * @param name - Node name
134
+ * @param file - Source file path
135
+ * @param namedParent - Nearest named ancestor (undefined for top-level)
136
+ * @param contentHash - 4-hex content hash for disambiguation
137
+ * @param counter - Counter for hash collisions
138
+ */
139
+ export declare function computeSemanticIdV2(type: string, name: string, file: string, namedParent?: string, contentHash?: string, counter?: number): string;
140
+ /**
141
+ * Parse v2 semantic ID back to components.
142
+ *
143
+ * Handles v2 format: file->TYPE->name[in:parent,h:xxxx]#N
144
+ * and special formats: net:stdio->__stdio__, EXTERNAL_MODULE->lodash
145
+ *
146
+ * @returns Parsed components or null if not a valid v2 ID
147
+ */
148
+ export declare function parseSemanticIdV2(id: string): ParsedSemanticIdV2 | null;
149
+ /**
150
+ * FNV-1a hash function, returns 4-hex-char string.
151
+ *
152
+ * FNV-1a is simple, fast, and has good distribution for short strings.
153
+ * 4 hex chars = 16 bits = 65536 buckets.
154
+ *
155
+ * @param hints - Content data to hash
156
+ * @returns 4-char hex string (e.g., "a1b2")
157
+ */
158
+ export declare function computeContentHash(hints: ContentHashHints): string;
159
+ //# sourceMappingURL=SemanticId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticId.d.ts","sourceRoot":"","sources":["../../src/core/SemanticId.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAMD;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,CAaR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAiDnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAAE,EACpB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,QAAQ,GACvB,MAAM,CAwBR;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAaR;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CA4GvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAqBlE"}
@@ -0,0 +1,291 @@
1
+ /**
2
+ * SemanticId - Stable identifiers for code elements
3
+ *
4
+ * Semantic IDs provide stable identifiers for code elements that don't change
5
+ * when unrelated code is added/removed (no line numbers in IDs).
6
+ *
7
+ * Format: {file}->{scope_path}->{type}->{name}[#discriminator]
8
+ *
9
+ * Examples:
10
+ * src/app.js->global->FUNCTION->processData
11
+ * src/app.js->UserService->METHOD->login
12
+ * src/app.js->getUser->if#0->CALL->console.log#0
13
+ *
14
+ * Special formats:
15
+ * Singletons: net:stdio->__stdio__
16
+ * External modules: EXTERNAL_MODULE->lodash
17
+ */
18
+ /**
19
+ * Compute semantic ID for any node type.
20
+ *
21
+ * @param type - Node type (FUNCTION, CALL, VARIABLE, etc.)
22
+ * @param name - Node name
23
+ * @param context - Scope context from ScopeTracker
24
+ * @param options - Optional discriminator or context
25
+ * @returns Semantic ID string
26
+ */
27
+ export function computeSemanticId(type, name, context, options) {
28
+ const { file, scopePath } = context;
29
+ const scope = scopePath.length > 0 ? scopePath.join('->') : 'global';
30
+ let id = `${file}->${scope}->${type}->${name}`;
31
+ if (options?.discriminator !== undefined) {
32
+ id += `#${options.discriminator}`;
33
+ }
34
+ else if (options?.context) {
35
+ id += `[${options.context}]`;
36
+ }
37
+ return id;
38
+ }
39
+ /**
40
+ * Parse semantic ID back to components.
41
+ *
42
+ * @param id - Semantic ID to parse
43
+ * @returns Parsed components or null if invalid
44
+ */
45
+ export function parseSemanticId(id) {
46
+ // Handle singletons
47
+ if (id.startsWith('net:stdio') || id.startsWith('net:request')) {
48
+ const [prefix, name] = id.split('->');
49
+ return {
50
+ file: '',
51
+ scopePath: [prefix],
52
+ type: 'SINGLETON',
53
+ name,
54
+ discriminator: undefined
55
+ };
56
+ }
57
+ if (id.startsWith('EXTERNAL_MODULE')) {
58
+ const [, name] = id.split('->');
59
+ return {
60
+ file: '',
61
+ scopePath: [],
62
+ type: 'EXTERNAL_MODULE',
63
+ name,
64
+ discriminator: undefined
65
+ };
66
+ }
67
+ const parts = id.split('->');
68
+ if (parts.length < 4)
69
+ return null;
70
+ const file = parts[0];
71
+ const type = parts[parts.length - 2];
72
+ let name = parts[parts.length - 1];
73
+ const scopePath = parts.slice(1, -2);
74
+ // Parse discriminator or context
75
+ let discriminator;
76
+ let context;
77
+ const hashMatch = name.match(/^(.+)#(\d+)$/);
78
+ if (hashMatch) {
79
+ name = hashMatch[1];
80
+ discriminator = parseInt(hashMatch[2], 10);
81
+ }
82
+ const bracketMatch = name.match(/^(.+)\[(.+)\]$/);
83
+ if (bracketMatch) {
84
+ name = bracketMatch[1];
85
+ context = bracketMatch[2];
86
+ }
87
+ return { file, scopePath, type, name, discriminator, context };
88
+ }
89
+ /**
90
+ * Compute discriminator for items with same name in same scope.
91
+ * Uses line/column for stable ordering.
92
+ *
93
+ * @param items - All items in scope
94
+ * @param targetName - Name to find discriminator for
95
+ * @param targetLocation - Location of target item
96
+ * @returns Discriminator (0-based index among same-named items)
97
+ */
98
+ export function computeDiscriminator(items, targetName, targetLocation) {
99
+ // Filter items with same name
100
+ const sameNameItems = items.filter(item => item.name === targetName);
101
+ if (sameNameItems.length <= 1) {
102
+ return 0;
103
+ }
104
+ // Sort by line, then by column for stable ordering
105
+ sameNameItems.sort((a, b) => {
106
+ if (a.location.line !== b.location.line) {
107
+ return a.location.line - b.location.line;
108
+ }
109
+ return a.location.column - b.location.column;
110
+ });
111
+ // Find index of target
112
+ const index = sameNameItems.findIndex(item => item.location.line === targetLocation.line &&
113
+ item.location.column === targetLocation.column);
114
+ return index >= 0 ? index : 0;
115
+ }
116
+ // =============================================================================
117
+ // Semantic ID v2 Functions
118
+ // =============================================================================
119
+ /**
120
+ * Compute v2 semantic ID.
121
+ *
122
+ * Format: file->TYPE->name (top-level, no collision)
123
+ * Format: file->TYPE->name[in:parent] (nested, no collision)
124
+ * Format: file->TYPE->name[in:parent,h:xxxx] (collision, hash disambiguates)
125
+ * Format: file->TYPE->name[in:parent,h:xxxx]#N (hash collision, counter)
126
+ *
127
+ * @param type - Node type (FUNCTION, CALL, VARIABLE, etc.)
128
+ * @param name - Node name
129
+ * @param file - Source file path
130
+ * @param namedParent - Nearest named ancestor (undefined for top-level)
131
+ * @param contentHash - 4-hex content hash for disambiguation
132
+ * @param counter - Counter for hash collisions
133
+ */
134
+ export function computeSemanticIdV2(type, name, file, namedParent, contentHash, counter) {
135
+ const brackets = [];
136
+ if (namedParent)
137
+ brackets.push(`in:${namedParent}`);
138
+ if (contentHash)
139
+ brackets.push(`h:${contentHash}`);
140
+ let id = `${file}->${type}->${name}`;
141
+ if (brackets.length > 0) {
142
+ id += `[${brackets.join(',')}]`;
143
+ }
144
+ if (counter !== undefined && counter > 0) {
145
+ id += `#${counter}`;
146
+ }
147
+ return id;
148
+ }
149
+ /**
150
+ * Parse v2 semantic ID back to components.
151
+ *
152
+ * Handles v2 format: file->TYPE->name[in:parent,h:xxxx]#N
153
+ * and special formats: net:stdio->__stdio__, EXTERNAL_MODULE->lodash
154
+ *
155
+ * @returns Parsed components or null if not a valid v2 ID
156
+ */
157
+ export function parseSemanticIdV2(id) {
158
+ // Handle grafema:// URI input — convert to compact first
159
+ if (id.startsWith('grafema://')) {
160
+ const scheme = 'grafema://';
161
+ const rest = id.slice(scheme.length);
162
+ const slashUnderscore = rest.indexOf('/_/');
163
+ const hashPos = rest.indexOf('#');
164
+ if (slashUnderscore !== -1 && (hashPos === -1 || slashUnderscore < hashPos)) {
165
+ // Virtual node: decode and re-parse
166
+ const encodedId = rest.slice(slashUnderscore + 3);
167
+ const decoded = encodedId
168
+ .replaceAll('%3E', '>').replaceAll('%3e', '>')
169
+ .replaceAll('%5B', '[').replaceAll('%5b', '[')
170
+ .replaceAll('%5D', ']').replaceAll('%5d', ']')
171
+ .replaceAll('%23', '#');
172
+ return parseSemanticIdV2(decoded);
173
+ }
174
+ if (hashPos !== -1) {
175
+ const pathPart = rest.slice(0, hashPos);
176
+ const fragment = rest.slice(hashPos + 1);
177
+ const decoded = fragment
178
+ .replaceAll('%3E', '>').replaceAll('%3e', '>')
179
+ .replaceAll('%5B', '[').replaceAll('%5b', '[')
180
+ .replaceAll('%5D', ']').replaceAll('%5d', ']')
181
+ .replaceAll('%23', '#');
182
+ if (decoded === 'MODULE') {
183
+ const segments = pathPart.split('/');
184
+ const host = segments[0];
185
+ const skip = (host === 'github.com' || host === 'gitlab.com' || host === 'bitbucket.org') ? 3 : 2;
186
+ const filePath = segments.slice(skip).join('/');
187
+ return { file: filePath, type: 'MODULE', name: filePath };
188
+ }
189
+ // Standard node: extract file and reconstruct compact ID
190
+ const segments = pathPart.split('/');
191
+ const host = segments[0];
192
+ const skip = (host === 'github.com' || host === 'gitlab.com' || host === 'bitbucket.org') ? 3 : 2;
193
+ const filePath = segments.slice(skip).join('/');
194
+ const compactId = `${filePath}->${decoded}`;
195
+ return parseSemanticIdV2(compactId);
196
+ }
197
+ return null;
198
+ }
199
+ // Handle singletons
200
+ if (id.startsWith('net:stdio') || id.startsWith('net:request')) {
201
+ const arrowIdx = id.indexOf('->');
202
+ if (arrowIdx === -1)
203
+ return null;
204
+ return { file: '', type: 'SINGLETON', name: id.slice(arrowIdx + 2) };
205
+ }
206
+ if (id.startsWith('EXTERNAL_MODULE')) {
207
+ const arrowIdx = id.indexOf('->');
208
+ if (arrowIdx === -1)
209
+ return null;
210
+ return { file: '', type: 'EXTERNAL_MODULE', name: id.slice(arrowIdx + 2) };
211
+ }
212
+ // v2 format: file->TYPE->name[in:parent,h:xxxx]#N
213
+ // Exactly two '->' delimiters: file->TYPE->rest
214
+ const firstArrow = id.indexOf('->');
215
+ if (firstArrow === -1)
216
+ return null;
217
+ const secondArrow = id.indexOf('->', firstArrow + 2);
218
+ if (secondArrow === -1)
219
+ return null;
220
+ const file = id.slice(0, firstArrow);
221
+ const type = id.slice(firstArrow + 2, secondArrow);
222
+ let rest = id.slice(secondArrow + 2);
223
+ // Check this isn't a v1 ID (v1 has 4+ parts, meaning rest contains '->')
224
+ // v2 names don't contain '->' in practice
225
+ if (rest.includes('->'))
226
+ return null;
227
+ // Parse counter suffix: #N (only at the very end, after brackets)
228
+ let counter;
229
+ const counterMatch = rest.match(/#(\d+)$/);
230
+ if (counterMatch) {
231
+ counter = parseInt(counterMatch[1], 10);
232
+ rest = rest.slice(0, -counterMatch[0].length);
233
+ }
234
+ // Parse bracket content: [in:parent,h:xxxx]
235
+ let namedParent;
236
+ let contentHash;
237
+ let name = rest;
238
+ const bracketStart = rest.indexOf('[');
239
+ const bracketEnd = rest.lastIndexOf(']');
240
+ if (bracketStart !== -1 && bracketEnd === rest.length - 1) {
241
+ name = rest.slice(0, bracketStart);
242
+ const bracketContent = rest.slice(bracketStart + 1, bracketEnd);
243
+ for (const part of bracketContent.split(',')) {
244
+ const colonIdx = part.indexOf(':');
245
+ if (colonIdx === -1)
246
+ continue;
247
+ const key = part.slice(0, colonIdx);
248
+ const value = part.slice(colonIdx + 1);
249
+ if (key === 'in')
250
+ namedParent = value;
251
+ else if (key === 'h')
252
+ contentHash = value;
253
+ }
254
+ }
255
+ return { file, type, name, namedParent, contentHash, counter };
256
+ }
257
+ /**
258
+ * FNV-1a hash function, returns 4-hex-char string.
259
+ *
260
+ * FNV-1a is simple, fast, and has good distribution for short strings.
261
+ * 4 hex chars = 16 bits = 65536 buckets.
262
+ *
263
+ * @param hints - Content data to hash
264
+ * @returns 4-char hex string (e.g., "a1b2")
265
+ */
266
+ export function computeContentHash(hints) {
267
+ const parts = [];
268
+ if (hints.arity !== undefined)
269
+ parts.push(`a:${hints.arity}`);
270
+ if (hints.firstLiteralArg !== undefined)
271
+ parts.push(`l:${hints.firstLiteralArg}`);
272
+ if (hints.firstParamName !== undefined)
273
+ parts.push(`p:${hints.firstParamName}`);
274
+ if (hints.rhsType !== undefined)
275
+ parts.push(`r:${hints.rhsType}`);
276
+ if (hints.rhsToken !== undefined)
277
+ parts.push(`t:${hints.rhsToken}`);
278
+ if (hints.objectChain !== undefined)
279
+ parts.push(`o:${hints.objectChain}`);
280
+ const input = parts.join('|');
281
+ // FNV-1a 32-bit
282
+ let hash = 0x811c9dc5; // FNV offset basis
283
+ for (let i = 0; i < input.length; i++) {
284
+ hash ^= input.charCodeAt(i);
285
+ hash = Math.imul(hash, 0x01000193); // FNV prime
286
+ }
287
+ // Truncate to 16 bits, format as 4-hex
288
+ const truncated = (hash >>> 0) & 0xffff;
289
+ return truncated.toString(16).padStart(4, '0');
290
+ }
291
+ //# sourceMappingURL=SemanticId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticId.js","sourceRoot":"","sources":["../../src/core/SemanticId.ts"],"names":[],"mappings":"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"}