@opensip-cli/graph 0.1.0

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 (836) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +31 -0
  4. package/dist/__tests__/baseline-plane.test.d.ts +11 -0
  5. package/dist/__tests__/baseline-plane.test.d.ts.map +1 -0
  6. package/dist/__tests__/baseline-plane.test.js +60 -0
  7. package/dist/__tests__/baseline-plane.test.js.map +1 -0
  8. package/dist/__tests__/cache/engine-version.test.d.ts +12 -0
  9. package/dist/__tests__/cache/engine-version.test.d.ts.map +1 -0
  10. package/dist/__tests__/cache/engine-version.test.js +79 -0
  11. package/dist/__tests__/cache/engine-version.test.js.map +1 -0
  12. package/dist/__tests__/cache/invalidate.test.d.ts +9 -0
  13. package/dist/__tests__/cache/invalidate.test.d.ts.map +1 -0
  14. package/dist/__tests__/cache/invalidate.test.js +228 -0
  15. package/dist/__tests__/cache/invalidate.test.js.map +1 -0
  16. package/dist/__tests__/cli/contribution-from-signals.test.d.ts +17 -0
  17. package/dist/__tests__/cli/contribution-from-signals.test.d.ts.map +1 -0
  18. package/dist/__tests__/cli/contribution-from-signals.test.js +89 -0
  19. package/dist/__tests__/cli/contribution-from-signals.test.js.map +1 -0
  20. package/dist/__tests__/cli/detect.test.d.ts +2 -0
  21. package/dist/__tests__/cli/detect.test.d.ts.map +1 -0
  22. package/dist/__tests__/cli/detect.test.js +96 -0
  23. package/dist/__tests__/cli/detect.test.js.map +1 -0
  24. package/dist/__tests__/cli/graph-config.test.d.ts +9 -0
  25. package/dist/__tests__/cli/graph-config.test.d.ts.map +1 -0
  26. package/dist/__tests__/cli/graph-config.test.js +113 -0
  27. package/dist/__tests__/cli/graph-config.test.js.map +1 -0
  28. package/dist/__tests__/cli/graph-execute.test.d.ts +9 -0
  29. package/dist/__tests__/cli/graph-execute.test.d.ts.map +1 -0
  30. package/dist/__tests__/cli/graph-execute.test.js +434 -0
  31. package/dist/__tests__/cli/graph-execute.test.js.map +1 -0
  32. package/dist/__tests__/cli/graph.test.d.ts +12 -0
  33. package/dist/__tests__/cli/graph.test.d.ts.map +1 -0
  34. package/dist/__tests__/cli/graph.test.js +589 -0
  35. package/dist/__tests__/cli/graph.test.js.map +1 -0
  36. package/dist/__tests__/cli/heap-preflight.test.d.ts +11 -0
  37. package/dist/__tests__/cli/heap-preflight.test.d.ts.map +1 -0
  38. package/dist/__tests__/cli/heap-preflight.test.js +150 -0
  39. package/dist/__tests__/cli/heap-preflight.test.js.map +1 -0
  40. package/dist/__tests__/cli/language-mismatch.test.d.ts +10 -0
  41. package/dist/__tests__/cli/language-mismatch.test.d.ts.map +1 -0
  42. package/dist/__tests__/cli/language-mismatch.test.js +155 -0
  43. package/dist/__tests__/cli/language-mismatch.test.js.map +1 -0
  44. package/dist/__tests__/cli/lookup.test.d.ts +7 -0
  45. package/dist/__tests__/cli/lookup.test.d.ts.map +1 -0
  46. package/dist/__tests__/cli/lookup.test.js +104 -0
  47. package/dist/__tests__/cli/lookup.test.js.map +1 -0
  48. package/dist/__tests__/cli/orchestrate.test.d.ts +12 -0
  49. package/dist/__tests__/cli/orchestrate.test.d.ts.map +1 -0
  50. package/dist/__tests__/cli/orchestrate.test.js +315 -0
  51. package/dist/__tests__/cli/orchestrate.test.js.map +1 -0
  52. package/dist/__tests__/cli/positional-paths.test.d.ts +5 -0
  53. package/dist/__tests__/cli/positional-paths.test.d.ts.map +1 -0
  54. package/dist/__tests__/cli/positional-paths.test.js +87 -0
  55. package/dist/__tests__/cli/positional-paths.test.js.map +1 -0
  56. package/dist/__tests__/cli/pressure-monitor.test.d.ts +11 -0
  57. package/dist/__tests__/cli/pressure-monitor.test.d.ts.map +1 -0
  58. package/dist/__tests__/cli/pressure-monitor.test.js +94 -0
  59. package/dist/__tests__/cli/pressure-monitor.test.js.map +1 -0
  60. package/dist/__tests__/cli/sarif-export.test.d.ts +8 -0
  61. package/dist/__tests__/cli/sarif-export.test.d.ts.map +1 -0
  62. package/dist/__tests__/cli/sarif-export.test.js +94 -0
  63. package/dist/__tests__/cli/sarif-export.test.js.map +1 -0
  64. package/dist/__tests__/cli/session-contract.test.d.ts +17 -0
  65. package/dist/__tests__/cli/session-contract.test.d.ts.map +1 -0
  66. package/dist/__tests__/cli/session-contract.test.js +225 -0
  67. package/dist/__tests__/cli/session-contract.test.js.map +1 -0
  68. package/dist/__tests__/cli/symbol-index.test.d.ts +7 -0
  69. package/dist/__tests__/cli/symbol-index.test.d.ts.map +1 -0
  70. package/dist/__tests__/cli/symbol-index.test.js +117 -0
  71. package/dist/__tests__/cli/symbol-index.test.js.map +1 -0
  72. package/dist/__tests__/cli/tool-show-mode.test.d.ts +10 -0
  73. package/dist/__tests__/cli/tool-show-mode.test.d.ts.map +1 -0
  74. package/dist/__tests__/cli/tool-show-mode.test.js +128 -0
  75. package/dist/__tests__/cli/tool-show-mode.test.js.map +1 -0
  76. package/dist/__tests__/cli/workspace-runner-polyglot.test.d.ts +10 -0
  77. package/dist/__tests__/cli/workspace-runner-polyglot.test.d.ts.map +1 -0
  78. package/dist/__tests__/cli/workspace-runner-polyglot.test.js +120 -0
  79. package/dist/__tests__/cli/workspace-runner-polyglot.test.js.map +1 -0
  80. package/dist/__tests__/graph-catalog-drift.test.d.ts +24 -0
  81. package/dist/__tests__/graph-catalog-drift.test.d.ts.map +1 -0
  82. package/dist/__tests__/graph-catalog-drift.test.js +34 -0
  83. package/dist/__tests__/graph-catalog-drift.test.js.map +1 -0
  84. package/dist/__tests__/internal-surface.test.d.ts +17 -0
  85. package/dist/__tests__/internal-surface.test.d.ts.map +1 -0
  86. package/dist/__tests__/internal-surface.test.js +45 -0
  87. package/dist/__tests__/internal-surface.test.js.map +1 -0
  88. package/dist/__tests__/lang-adapter/body-digest.test.d.ts +13 -0
  89. package/dist/__tests__/lang-adapter/body-digest.test.d.ts.map +1 -0
  90. package/dist/__tests__/lang-adapter/body-digest.test.js +51 -0
  91. package/dist/__tests__/lang-adapter/body-digest.test.js.map +1 -0
  92. package/dist/__tests__/lang-adapter/edge-helpers.test.d.ts +12 -0
  93. package/dist/__tests__/lang-adapter/edge-helpers.test.d.ts.map +1 -0
  94. package/dist/__tests__/lang-adapter/edge-helpers.test.js +147 -0
  95. package/dist/__tests__/lang-adapter/edge-helpers.test.js.map +1 -0
  96. package/dist/__tests__/lang-adapter/registry.test.d.ts +9 -0
  97. package/dist/__tests__/lang-adapter/registry.test.d.ts.map +1 -0
  98. package/dist/__tests__/lang-adapter/registry.test.js +228 -0
  99. package/dist/__tests__/lang-adapter/registry.test.js.map +1 -0
  100. package/dist/__tests__/persistence/catalog-repo.test.d.ts +2 -0
  101. package/dist/__tests__/persistence/catalog-repo.test.d.ts.map +1 -0
  102. package/dist/__tests__/persistence/catalog-repo.test.js +188 -0
  103. package/dist/__tests__/persistence/catalog-repo.test.js.map +1 -0
  104. package/dist/__tests__/persistence/session-payload.test.d.ts +2 -0
  105. package/dist/__tests__/persistence/session-payload.test.d.ts.map +1 -0
  106. package/dist/__tests__/persistence/session-payload.test.js +81 -0
  107. package/dist/__tests__/persistence/session-payload.test.js.map +1 -0
  108. package/dist/__tests__/persistence/session-replay.test.d.ts +10 -0
  109. package/dist/__tests__/persistence/session-replay.test.d.ts.map +1 -0
  110. package/dist/__tests__/persistence/session-replay.test.js +196 -0
  111. package/dist/__tests__/persistence/session-replay.test.js.map +1 -0
  112. package/dist/__tests__/public-api.test.d.ts +19 -0
  113. package/dist/__tests__/public-api.test.d.ts.map +1 -0
  114. package/dist/__tests__/public-api.test.js +96 -0
  115. package/dist/__tests__/public-api.test.js.map +1 -0
  116. package/dist/__tests__/render/catalog-json-types.test.d.ts +10 -0
  117. package/dist/__tests__/render/catalog-json-types.test.d.ts.map +1 -0
  118. package/dist/__tests__/render/catalog-json-types.test.js +121 -0
  119. package/dist/__tests__/render/catalog-json-types.test.js.map +1 -0
  120. package/dist/__tests__/render/catalog-json.test.d.ts +19 -0
  121. package/dist/__tests__/render/catalog-json.test.d.ts.map +1 -0
  122. package/dist/__tests__/render/catalog-json.test.js +435 -0
  123. package/dist/__tests__/render/catalog-json.test.js.map +1 -0
  124. package/dist/__tests__/render/opensip-id-derivation.test.d.ts +21 -0
  125. package/dist/__tests__/render/opensip-id-derivation.test.d.ts.map +1 -0
  126. package/dist/__tests__/render/opensip-id-derivation.test.js +159 -0
  127. package/dist/__tests__/render/opensip-id-derivation.test.js.map +1 -0
  128. package/dist/__tests__/render/rule-id-mapping.test.d.ts +13 -0
  129. package/dist/__tests__/render/rule-id-mapping.test.d.ts.map +1 -0
  130. package/dist/__tests__/render/rule-id-mapping.test.js +50 -0
  131. package/dist/__tests__/render/rule-id-mapping.test.js.map +1 -0
  132. package/dist/__tests__/render/sarif-opensip.test.d.ts +20 -0
  133. package/dist/__tests__/render/sarif-opensip.test.d.ts.map +1 -0
  134. package/dist/__tests__/render/sarif-opensip.test.js +235 -0
  135. package/dist/__tests__/render/sarif-opensip.test.js.map +1 -0
  136. package/dist/__tests__/resolution-mode.test.d.ts +10 -0
  137. package/dist/__tests__/resolution-mode.test.d.ts.map +1 -0
  138. package/dist/__tests__/resolution-mode.test.js +96 -0
  139. package/dist/__tests__/resolution-mode.test.js.map +1 -0
  140. package/dist/__tests__/resolve-callee.test.d.ts +2 -0
  141. package/dist/__tests__/resolve-callee.test.d.ts.map +1 -0
  142. package/dist/__tests__/resolve-callee.test.js +119 -0
  143. package/dist/__tests__/resolve-callee.test.js.map +1 -0
  144. package/dist/__tests__/rules/_entry-points.test.d.ts +8 -0
  145. package/dist/__tests__/rules/_entry-points.test.d.ts.map +1 -0
  146. package/dist/__tests__/rules/_entry-points.test.js +74 -0
  147. package/dist/__tests__/rules/_entry-points.test.js.map +1 -0
  148. package/dist/__tests__/rules/_helpers.d.ts +18 -0
  149. package/dist/__tests__/rules/_helpers.d.ts.map +1 -0
  150. package/dist/__tests__/rules/_helpers.js +72 -0
  151. package/dist/__tests__/rules/_helpers.js.map +1 -0
  152. package/dist/__tests__/rules/always-throws-branch.test.d.ts +9 -0
  153. package/dist/__tests__/rules/always-throws-branch.test.d.ts.map +1 -0
  154. package/dist/__tests__/rules/always-throws-branch.test.js +113 -0
  155. package/dist/__tests__/rules/always-throws-branch.test.js.map +1 -0
  156. package/dist/__tests__/rules/cycle-and-coupling.test.d.ts +13 -0
  157. package/dist/__tests__/rules/cycle-and-coupling.test.d.ts.map +1 -0
  158. package/dist/__tests__/rules/cycle-and-coupling.test.js +224 -0
  159. package/dist/__tests__/rules/cycle-and-coupling.test.js.map +1 -0
  160. package/dist/__tests__/rules/duplicated-function-body-config.test.d.ts +8 -0
  161. package/dist/__tests__/rules/duplicated-function-body-config.test.d.ts.map +1 -0
  162. package/dist/__tests__/rules/duplicated-function-body-config.test.js +132 -0
  163. package/dist/__tests__/rules/duplicated-function-body-config.test.js.map +1 -0
  164. package/dist/__tests__/rules/duplicated-function-body-cross-package.test.d.ts +10 -0
  165. package/dist/__tests__/rules/duplicated-function-body-cross-package.test.d.ts.map +1 -0
  166. package/dist/__tests__/rules/duplicated-function-body-cross-package.test.js +274 -0
  167. package/dist/__tests__/rules/duplicated-function-body-cross-package.test.js.map +1 -0
  168. package/dist/__tests__/rules/feature-column-parity.test.d.ts +11 -0
  169. package/dist/__tests__/rules/feature-column-parity.test.d.ts.map +1 -0
  170. package/dist/__tests__/rules/feature-column-parity.test.js +169 -0
  171. package/dist/__tests__/rules/feature-column-parity.test.js.map +1 -0
  172. package/dist/__tests__/rules/high-blast-untested.test.d.ts +13 -0
  173. package/dist/__tests__/rules/high-blast-untested.test.d.ts.map +1 -0
  174. package/dist/__tests__/rules/high-blast-untested.test.js +108 -0
  175. package/dist/__tests__/rules/high-blast-untested.test.js.map +1 -0
  176. package/dist/__tests__/rules/large-function.test.d.ts +11 -0
  177. package/dist/__tests__/rules/large-function.test.d.ts.map +1 -0
  178. package/dist/__tests__/rules/large-function.test.js +105 -0
  179. package/dist/__tests__/rules/large-function.test.js.map +1 -0
  180. package/dist/__tests__/rules/no-side-effect-path.test.d.ts +10 -0
  181. package/dist/__tests__/rules/no-side-effect-path.test.d.ts.map +1 -0
  182. package/dist/__tests__/rules/no-side-effect-path.test.js +301 -0
  183. package/dist/__tests__/rules/no-side-effect-path.test.js.map +1 -0
  184. package/dist/__tests__/rules/orphan-subtree-config.test.d.ts +8 -0
  185. package/dist/__tests__/rules/orphan-subtree-config.test.d.ts.map +1 -0
  186. package/dist/__tests__/rules/orphan-subtree-config.test.js +176 -0
  187. package/dist/__tests__/rules/orphan-subtree-config.test.js.map +1 -0
  188. package/dist/__tests__/rules/registry.test.d.ts +11 -0
  189. package/dist/__tests__/rules/registry.test.d.ts.map +1 -0
  190. package/dist/__tests__/rules/registry.test.js +50 -0
  191. package/dist/__tests__/rules/registry.test.js.map +1 -0
  192. package/dist/__tests__/rules/severity-override.test.d.ts +11 -0
  193. package/dist/__tests__/rules/severity-override.test.d.ts.map +1 -0
  194. package/dist/__tests__/rules/severity-override.test.js +67 -0
  195. package/dist/__tests__/rules/severity-override.test.js.map +1 -0
  196. package/dist/__tests__/rules/test-only-reachable.test.d.ts +9 -0
  197. package/dist/__tests__/rules/test-only-reachable.test.d.ts.map +1 -0
  198. package/dist/__tests__/rules/test-only-reachable.test.js +142 -0
  199. package/dist/__tests__/rules/test-only-reachable.test.js.map +1 -0
  200. package/dist/__tests__/rules/wide-function.test.d.ts +9 -0
  201. package/dist/__tests__/rules/wide-function.test.d.ts.map +1 -0
  202. package/dist/__tests__/rules/wide-function.test.js +64 -0
  203. package/dist/__tests__/rules/wide-function.test.js.map +1 -0
  204. package/dist/__tests__/test-utils/with-graph-scope.d.ts +14 -0
  205. package/dist/__tests__/test-utils/with-graph-scope.d.ts.map +1 -0
  206. package/dist/__tests__/test-utils/with-graph-scope.js +26 -0
  207. package/dist/__tests__/test-utils/with-graph-scope.js.map +1 -0
  208. package/dist/__tests__/tool-branches.test.d.ts +18 -0
  209. package/dist/__tests__/tool-branches.test.d.ts.map +1 -0
  210. package/dist/__tests__/tool-branches.test.js +262 -0
  211. package/dist/__tests__/tool-branches.test.js.map +1 -0
  212. package/dist/__tests__/tool-register.test.d.ts +16 -0
  213. package/dist/__tests__/tool-register.test.d.ts.map +1 -0
  214. package/dist/__tests__/tool-register.test.js +419 -0
  215. package/dist/__tests__/tool-register.test.js.map +1 -0
  216. package/dist/__tests__/tool.test.d.ts +18 -0
  217. package/dist/__tests__/tool.test.d.ts.map +1 -0
  218. package/dist/__tests__/tool.test.js +65 -0
  219. package/dist/__tests__/tool.test.js.map +1 -0
  220. package/dist/baseline-strategy.d.ts +28 -0
  221. package/dist/baseline-strategy.d.ts.map +1 -0
  222. package/dist/baseline-strategy.js +27 -0
  223. package/dist/baseline-strategy.js.map +1 -0
  224. package/dist/cache/engine-version.d.ts +69 -0
  225. package/dist/cache/engine-version.d.ts.map +1 -0
  226. package/dist/cache/engine-version.js +60 -0
  227. package/dist/cache/engine-version.js.map +1 -0
  228. package/dist/cache/invalidate.d.ts +60 -0
  229. package/dist/cache/invalidate.d.ts.map +1 -0
  230. package/dist/cache/invalidate.js +120 -0
  231. package/dist/cache/invalidate.js.map +1 -0
  232. package/dist/cli/__tests__/build-envelope.test.d.ts +8 -0
  233. package/dist/cli/__tests__/build-envelope.test.d.ts.map +1 -0
  234. package/dist/cli/__tests__/build-envelope.test.js +70 -0
  235. package/dist/cli/__tests__/build-envelope.test.js.map +1 -0
  236. package/dist/cli/__tests__/dispatch-envelope.test.d.ts +15 -0
  237. package/dist/cli/__tests__/dispatch-envelope.test.d.ts.map +1 -0
  238. package/dist/cli/__tests__/dispatch-envelope.test.js +73 -0
  239. package/dist/cli/__tests__/dispatch-envelope.test.js.map +1 -0
  240. package/dist/cli/__tests__/dispatch-suppression-root.test.d.ts +18 -0
  241. package/dist/cli/__tests__/dispatch-suppression-root.test.d.ts.map +1 -0
  242. package/dist/cli/__tests__/dispatch-suppression-root.test.js +91 -0
  243. package/dist/cli/__tests__/dispatch-suppression-root.test.js.map +1 -0
  244. package/dist/cli/__tests__/graph-config-schema.test.d.ts +7 -0
  245. package/dist/cli/__tests__/graph-config-schema.test.d.ts.map +1 -0
  246. package/dist/cli/__tests__/graph-config-schema.test.js +60 -0
  247. package/dist/cli/__tests__/graph-config-schema.test.js.map +1 -0
  248. package/dist/cli/__tests__/graph-gate-mode.test.d.ts +15 -0
  249. package/dist/cli/__tests__/graph-gate-mode.test.d.ts.map +1 -0
  250. package/dist/cli/__tests__/graph-gate-mode.test.js +99 -0
  251. package/dist/cli/__tests__/graph-gate-mode.test.js.map +1 -0
  252. package/dist/cli/__tests__/graph-recipes.test.d.ts +7 -0
  253. package/dist/cli/__tests__/graph-recipes.test.d.ts.map +1 -0
  254. package/dist/cli/__tests__/graph-recipes.test.js +24 -0
  255. package/dist/cli/__tests__/graph-recipes.test.js.map +1 -0
  256. package/dist/cli/__tests__/graph-report.test.d.ts +7 -0
  257. package/dist/cli/__tests__/graph-report.test.d.ts.map +1 -0
  258. package/dist/cli/__tests__/graph-report.test.js +138 -0
  259. package/dist/cli/__tests__/graph-report.test.js.map +1 -0
  260. package/dist/cli/__tests__/graph-tracer.test.d.ts +11 -0
  261. package/dist/cli/__tests__/graph-tracer.test.d.ts.map +1 -0
  262. package/dist/cli/__tests__/graph-tracer.test.js +41 -0
  263. package/dist/cli/__tests__/graph-tracer.test.js.map +1 -0
  264. package/dist/cli/__tests__/graph-worker.test.d.ts +13 -0
  265. package/dist/cli/__tests__/graph-worker.test.d.ts.map +1 -0
  266. package/dist/cli/__tests__/graph-worker.test.js +127 -0
  267. package/dist/cli/__tests__/graph-worker.test.js.map +1 -0
  268. package/dist/cli/__tests__/list-files.test.d.ts +12 -0
  269. package/dist/cli/__tests__/list-files.test.d.ts.map +1 -0
  270. package/dist/cli/__tests__/list-files.test.js +146 -0
  271. package/dist/cli/__tests__/list-files.test.js.map +1 -0
  272. package/dist/cli/__tests__/live-suppression-parity.test.d.ts +23 -0
  273. package/dist/cli/__tests__/live-suppression-parity.test.d.ts.map +1 -0
  274. package/dist/cli/__tests__/live-suppression-parity.test.js +136 -0
  275. package/dist/cli/__tests__/live-suppression-parity.test.js.map +1 -0
  276. package/dist/cli/__tests__/orchestrate-spans.test.d.ts +18 -0
  277. package/dist/cli/__tests__/orchestrate-spans.test.d.ts.map +1 -0
  278. package/dist/cli/__tests__/orchestrate-spans.test.js +108 -0
  279. package/dist/cli/__tests__/orchestrate-spans.test.js.map +1 -0
  280. package/dist/cli/__tests__/shard-worker.test.d.ts +10 -0
  281. package/dist/cli/__tests__/shard-worker.test.d.ts.map +1 -0
  282. package/dist/cli/__tests__/shard-worker.test.js +153 -0
  283. package/dist/cli/__tests__/shard-worker.test.js.map +1 -0
  284. package/dist/cli/__tests__/workspace-report.test.d.ts +6 -0
  285. package/dist/cli/__tests__/workspace-report.test.d.ts.map +1 -0
  286. package/dist/cli/__tests__/workspace-report.test.js +89 -0
  287. package/dist/cli/__tests__/workspace-report.test.js.map +1 -0
  288. package/dist/cli/apply-suppressions.d.ts +86 -0
  289. package/dist/cli/apply-suppressions.d.ts.map +1 -0
  290. package/dist/cli/apply-suppressions.js +101 -0
  291. package/dist/cli/apply-suppressions.js.map +1 -0
  292. package/dist/cli/apply-suppressions.test.d.ts +12 -0
  293. package/dist/cli/apply-suppressions.test.d.ts.map +1 -0
  294. package/dist/cli/apply-suppressions.test.js +85 -0
  295. package/dist/cli/apply-suppressions.test.js.map +1 -0
  296. package/dist/cli/build-envelope.d.ts +53 -0
  297. package/dist/cli/build-envelope.d.ts.map +1 -0
  298. package/dist/cli/build-envelope.js +88 -0
  299. package/dist/cli/build-envelope.js.map +1 -0
  300. package/dist/cli/detect.d.ts +37 -0
  301. package/dist/cli/detect.d.ts.map +1 -0
  302. package/dist/cli/detect.js +60 -0
  303. package/dist/cli/detect.js.map +1 -0
  304. package/dist/cli/equivalence-check-command.d.ts +45 -0
  305. package/dist/cli/equivalence-check-command.d.ts.map +1 -0
  306. package/dist/cli/equivalence-check-command.js +196 -0
  307. package/dist/cli/equivalence-check-command.js.map +1 -0
  308. package/dist/cli/graph/graph-aux-command-specs.d.ts +60 -0
  309. package/dist/cli/graph/graph-aux-command-specs.d.ts.map +1 -0
  310. package/dist/cli/graph/graph-aux-command-specs.js +390 -0
  311. package/dist/cli/graph/graph-aux-command-specs.js.map +1 -0
  312. package/dist/cli/graph/graph-command-spec.d.ts +43 -0
  313. package/dist/cli/graph/graph-command-spec.d.ts.map +1 -0
  314. package/dist/cli/graph/graph-command-spec.js +456 -0
  315. package/dist/cli/graph/graph-command-spec.js.map +1 -0
  316. package/dist/cli/graph-config-schema.d.ts +70 -0
  317. package/dist/cli/graph-config-schema.d.ts.map +1 -0
  318. package/dist/cli/graph-config-schema.js +68 -0
  319. package/dist/cli/graph-config-schema.js.map +1 -0
  320. package/dist/cli/graph-config.d.ts +53 -0
  321. package/dist/cli/graph-config.d.ts.map +1 -0
  322. package/dist/cli/graph-config.js +111 -0
  323. package/dist/cli/graph-config.js.map +1 -0
  324. package/dist/cli/graph-modes.d.ts +36 -0
  325. package/dist/cli/graph-modes.d.ts.map +1 -0
  326. package/dist/cli/graph-modes.js +161 -0
  327. package/dist/cli/graph-modes.js.map +1 -0
  328. package/dist/cli/graph-options.d.ts +143 -0
  329. package/dist/cli/graph-options.d.ts.map +1 -0
  330. package/dist/cli/graph-options.js +15 -0
  331. package/dist/cli/graph-options.js.map +1 -0
  332. package/dist/cli/graph-progress.d.ts +31 -0
  333. package/dist/cli/graph-progress.d.ts.map +1 -0
  334. package/dist/cli/graph-progress.js +56 -0
  335. package/dist/cli/graph-progress.js.map +1 -0
  336. package/dist/cli/graph-recipes.d.ts +23 -0
  337. package/dist/cli/graph-recipes.d.ts.map +1 -0
  338. package/dist/cli/graph-recipes.js +44 -0
  339. package/dist/cli/graph-recipes.js.map +1 -0
  340. package/dist/cli/graph-report.d.ts +79 -0
  341. package/dist/cli/graph-report.d.ts.map +1 -0
  342. package/dist/cli/graph-report.js +186 -0
  343. package/dist/cli/graph-report.js.map +1 -0
  344. package/dist/cli/graph-runner.d.ts +106 -0
  345. package/dist/cli/graph-runner.d.ts.map +1 -0
  346. package/dist/cli/graph-runner.js +274 -0
  347. package/dist/cli/graph-runner.js.map +1 -0
  348. package/dist/cli/graph-tracer.d.ts +27 -0
  349. package/dist/cli/graph-tracer.d.ts.map +1 -0
  350. package/dist/cli/graph-tracer.js +33 -0
  351. package/dist/cli/graph-tracer.js.map +1 -0
  352. package/dist/cli/graph-worker.d.ts +29 -0
  353. package/dist/cli/graph-worker.d.ts.map +1 -0
  354. package/dist/cli/graph-worker.js +86 -0
  355. package/dist/cli/graph-worker.js.map +1 -0
  356. package/dist/cli/graph.d.ts +171 -0
  357. package/dist/cli/graph.d.ts.map +1 -0
  358. package/dist/cli/graph.js +1041 -0
  359. package/dist/cli/graph.js.map +1 -0
  360. package/dist/cli/heap-preflight.d.ts +62 -0
  361. package/dist/cli/heap-preflight.d.ts.map +1 -0
  362. package/dist/cli/heap-preflight.js +176 -0
  363. package/dist/cli/heap-preflight.js.map +1 -0
  364. package/dist/cli/list-files.d.ts +37 -0
  365. package/dist/cli/list-files.d.ts.map +1 -0
  366. package/dist/cli/list-files.js +166 -0
  367. package/dist/cli/list-files.js.map +1 -0
  368. package/dist/cli/lookup.d.ts +19 -0
  369. package/dist/cli/lookup.d.ts.map +1 -0
  370. package/dist/cli/lookup.js +87 -0
  371. package/dist/cli/lookup.js.map +1 -0
  372. package/dist/cli/orchestrate/__tests__/_equivalence-harness.d.ts +47 -0
  373. package/dist/cli/orchestrate/__tests__/_equivalence-harness.d.ts.map +1 -0
  374. package/dist/cli/orchestrate/__tests__/_equivalence-harness.js +331 -0
  375. package/dist/cli/orchestrate/__tests__/_equivalence-harness.js.map +1 -0
  376. package/dist/cli/orchestrate/__tests__/_flat-large-fixture.d.ts +69 -0
  377. package/dist/cli/orchestrate/__tests__/_flat-large-fixture.d.ts.map +1 -0
  378. package/dist/cli/orchestrate/__tests__/_flat-large-fixture.js +181 -0
  379. package/dist/cli/orchestrate/__tests__/_flat-large-fixture.js.map +1 -0
  380. package/dist/cli/orchestrate/__tests__/canonical-file-set.test.d.ts +8 -0
  381. package/dist/cli/orchestrate/__tests__/canonical-file-set.test.d.ts.map +1 -0
  382. package/dist/cli/orchestrate/__tests__/canonical-file-set.test.js +51 -0
  383. package/dist/cli/orchestrate/__tests__/canonical-file-set.test.js.map +1 -0
  384. package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.d.ts +9 -0
  385. package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.d.ts.map +1 -0
  386. package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.js +147 -0
  387. package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.js.map +1 -0
  388. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.d.ts +12 -0
  389. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.d.ts.map +1 -0
  390. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js +509 -0
  391. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js.map +1 -0
  392. package/dist/cli/orchestrate/__tests__/determinism.test.d.ts +19 -0
  393. package/dist/cli/orchestrate/__tests__/determinism.test.d.ts.map +1 -0
  394. package/dist/cli/orchestrate/__tests__/determinism.test.js +163 -0
  395. package/dist/cli/orchestrate/__tests__/determinism.test.js.map +1 -0
  396. package/dist/cli/orchestrate/__tests__/edge-identity.test.d.ts +9 -0
  397. package/dist/cli/orchestrate/__tests__/edge-identity.test.d.ts.map +1 -0
  398. package/dist/cli/orchestrate/__tests__/edge-identity.test.js +103 -0
  399. package/dist/cli/orchestrate/__tests__/edge-identity.test.js.map +1 -0
  400. package/dist/cli/orchestrate/__tests__/equivalence-check.test.d.ts +10 -0
  401. package/dist/cli/orchestrate/__tests__/equivalence-check.test.d.ts.map +1 -0
  402. package/dist/cli/orchestrate/__tests__/equivalence-check.test.js +277 -0
  403. package/dist/cli/orchestrate/__tests__/equivalence-check.test.js.map +1 -0
  404. package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.d.ts +51 -0
  405. package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.d.ts.map +1 -0
  406. package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.js +183 -0
  407. package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.js.map +1 -0
  408. package/dist/cli/orchestrate/__tests__/equivalence.test.d.ts +47 -0
  409. package/dist/cli/orchestrate/__tests__/equivalence.test.d.ts.map +1 -0
  410. package/dist/cli/orchestrate/__tests__/equivalence.test.js +259 -0
  411. package/dist/cli/orchestrate/__tests__/equivalence.test.js.map +1 -0
  412. package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.d.ts +9 -0
  413. package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.d.ts.map +1 -0
  414. package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.js +105 -0
  415. package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.js.map +1 -0
  416. package/dist/cli/orchestrate/__tests__/export-index.test.d.ts +12 -0
  417. package/dist/cli/orchestrate/__tests__/export-index.test.d.ts.map +1 -0
  418. package/dist/cli/orchestrate/__tests__/export-index.test.js +346 -0
  419. package/dist/cli/orchestrate/__tests__/export-index.test.js.map +1 -0
  420. package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.d.ts +16 -0
  421. package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.d.ts.map +1 -0
  422. package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.js +99 -0
  423. package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.js.map +1 -0
  424. package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.d.ts +11 -0
  425. package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.d.ts.map +1 -0
  426. package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.js +271 -0
  427. package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.js.map +1 -0
  428. package/dist/cli/orchestrate/__tests__/function-set-parity.test.d.ts +38 -0
  429. package/dist/cli/orchestrate/__tests__/function-set-parity.test.d.ts.map +1 -0
  430. package/dist/cli/orchestrate/__tests__/function-set-parity.test.js +163 -0
  431. package/dist/cli/orchestrate/__tests__/function-set-parity.test.js.map +1 -0
  432. package/dist/cli/orchestrate/__tests__/incremental-merge.test.d.ts +8 -0
  433. package/dist/cli/orchestrate/__tests__/incremental-merge.test.d.ts.map +1 -0
  434. package/dist/cli/orchestrate/__tests__/incremental-merge.test.js +153 -0
  435. package/dist/cli/orchestrate/__tests__/incremental-merge.test.js.map +1 -0
  436. package/dist/cli/orchestrate/__tests__/partition-files.test.d.ts +10 -0
  437. package/dist/cli/orchestrate/__tests__/partition-files.test.d.ts.map +1 -0
  438. package/dist/cli/orchestrate/__tests__/partition-files.test.js +104 -0
  439. package/dist/cli/orchestrate/__tests__/partition-files.test.js.map +1 -0
  440. package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.d.ts +21 -0
  441. package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.d.ts.map +1 -0
  442. package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.js +59 -0
  443. package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.js.map +1 -0
  444. package/dist/cli/orchestrate/__tests__/shard-model.test.d.ts +8 -0
  445. package/dist/cli/orchestrate/__tests__/shard-model.test.d.ts.map +1 -0
  446. package/dist/cli/orchestrate/__tests__/shard-model.test.js +77 -0
  447. package/dist/cli/orchestrate/__tests__/shard-model.test.js.map +1 -0
  448. package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.d.ts +13 -0
  449. package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.d.ts.map +1 -0
  450. package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.js +103 -0
  451. package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.js.map +1 -0
  452. package/dist/cli/orchestrate/__tests__/sharded-graph.test.d.ts +13 -0
  453. package/dist/cli/orchestrate/__tests__/sharded-graph.test.d.ts.map +1 -0
  454. package/dist/cli/orchestrate/__tests__/sharded-graph.test.js +257 -0
  455. package/dist/cli/orchestrate/__tests__/sharded-graph.test.js.map +1 -0
  456. package/dist/cli/orchestrate/__tests__/worker-pool.test.d.ts +6 -0
  457. package/dist/cli/orchestrate/__tests__/worker-pool.test.d.ts.map +1 -0
  458. package/dist/cli/orchestrate/__tests__/worker-pool.test.js +38 -0
  459. package/dist/cli/orchestrate/__tests__/worker-pool.test.js.map +1 -0
  460. package/dist/cli/orchestrate/cache-orchestrator.d.ts +42 -0
  461. package/dist/cli/orchestrate/cache-orchestrator.d.ts.map +1 -0
  462. package/dist/cli/orchestrate/cache-orchestrator.js +92 -0
  463. package/dist/cli/orchestrate/cache-orchestrator.js.map +1 -0
  464. package/dist/cli/orchestrate/canonical-file-set.d.ts +51 -0
  465. package/dist/cli/orchestrate/canonical-file-set.d.ts.map +1 -0
  466. package/dist/cli/orchestrate/canonical-file-set.js +58 -0
  467. package/dist/cli/orchestrate/canonical-file-set.js.map +1 -0
  468. package/dist/cli/orchestrate/catalog-builder.d.ts +121 -0
  469. package/dist/cli/orchestrate/catalog-builder.d.ts.map +1 -0
  470. package/dist/cli/orchestrate/catalog-builder.js +279 -0
  471. package/dist/cli/orchestrate/catalog-builder.js.map +1 -0
  472. package/dist/cli/orchestrate/catalog-stats.d.ts +31 -0
  473. package/dist/cli/orchestrate/catalog-stats.d.ts.map +1 -0
  474. package/dist/cli/orchestrate/catalog-stats.js +52 -0
  475. package/dist/cli/orchestrate/catalog-stats.js.map +1 -0
  476. package/dist/cli/orchestrate/cross-shard-resolve.d.ts +190 -0
  477. package/dist/cli/orchestrate/cross-shard-resolve.d.ts.map +1 -0
  478. package/dist/cli/orchestrate/cross-shard-resolve.js +523 -0
  479. package/dist/cli/orchestrate/cross-shard-resolve.js.map +1 -0
  480. package/dist/cli/orchestrate/edge-identity.d.ts +48 -0
  481. package/dist/cli/orchestrate/edge-identity.d.ts.map +1 -0
  482. package/dist/cli/orchestrate/edge-identity.js +68 -0
  483. package/dist/cli/orchestrate/edge-identity.js.map +1 -0
  484. package/dist/cli/orchestrate/equivalence-check.d.ts +227 -0
  485. package/dist/cli/orchestrate/equivalence-check.d.ts.map +1 -0
  486. package/dist/cli/orchestrate/equivalence-check.js +264 -0
  487. package/dist/cli/orchestrate/equivalence-check.js.map +1 -0
  488. package/dist/cli/orchestrate/exact-boundary-recovery.d.ts +33 -0
  489. package/dist/cli/orchestrate/exact-boundary-recovery.d.ts.map +1 -0
  490. package/dist/cli/orchestrate/exact-boundary-recovery.js +62 -0
  491. package/dist/cli/orchestrate/exact-boundary-recovery.js.map +1 -0
  492. package/dist/cli/orchestrate/flat-monorepo-strategy.d.ts +171 -0
  493. package/dist/cli/orchestrate/flat-monorepo-strategy.d.ts.map +1 -0
  494. package/dist/cli/orchestrate/flat-monorepo-strategy.js +328 -0
  495. package/dist/cli/orchestrate/flat-monorepo-strategy.js.map +1 -0
  496. package/dist/cli/orchestrate/incremental-merge.d.ts +46 -0
  497. package/dist/cli/orchestrate/incremental-merge.d.ts.map +1 -0
  498. package/dist/cli/orchestrate/incremental-merge.js +236 -0
  499. package/dist/cli/orchestrate/incremental-merge.js.map +1 -0
  500. package/dist/cli/orchestrate/partition-chunk.d.ts +36 -0
  501. package/dist/cli/orchestrate/partition-chunk.d.ts.map +1 -0
  502. package/dist/cli/orchestrate/partition-chunk.js +37 -0
  503. package/dist/cli/orchestrate/partition-chunk.js.map +1 -0
  504. package/dist/cli/orchestrate/partition-files.d.ts +52 -0
  505. package/dist/cli/orchestrate/partition-files.d.ts.map +1 -0
  506. package/dist/cli/orchestrate/partition-files.js +94 -0
  507. package/dist/cli/orchestrate/partition-files.js.map +1 -0
  508. package/dist/cli/orchestrate/resolution-trace.d.ts +11 -0
  509. package/dist/cli/orchestrate/resolution-trace.d.ts.map +1 -0
  510. package/dist/cli/orchestrate/resolution-trace.js +27 -0
  511. package/dist/cli/orchestrate/resolution-trace.js.map +1 -0
  512. package/dist/cli/orchestrate/shard-model.d.ts +99 -0
  513. package/dist/cli/orchestrate/shard-model.d.ts.map +1 -0
  514. package/dist/cli/orchestrate/shard-model.js +23 -0
  515. package/dist/cli/orchestrate/shard-model.js.map +1 -0
  516. package/dist/cli/orchestrate/shard-runner.d.ts +65 -0
  517. package/dist/cli/orchestrate/shard-runner.d.ts.map +1 -0
  518. package/dist/cli/orchestrate/shard-runner.js +169 -0
  519. package/dist/cli/orchestrate/shard-runner.js.map +1 -0
  520. package/dist/cli/orchestrate/sharded-graph.d.ts +86 -0
  521. package/dist/cli/orchestrate/sharded-graph.d.ts.map +1 -0
  522. package/dist/cli/orchestrate/sharded-graph.js +227 -0
  523. package/dist/cli/orchestrate/sharded-graph.js.map +1 -0
  524. package/dist/cli/orchestrate/types.d.ts +31 -0
  525. package/dist/cli/orchestrate/types.d.ts.map +1 -0
  526. package/dist/cli/orchestrate/types.js +24 -0
  527. package/dist/cli/orchestrate/types.js.map +1 -0
  528. package/dist/cli/orchestrate/worker-pool.d.ts +16 -0
  529. package/dist/cli/orchestrate/worker-pool.d.ts.map +1 -0
  530. package/dist/cli/orchestrate/worker-pool.js +39 -0
  531. package/dist/cli/orchestrate/worker-pool.js.map +1 -0
  532. package/dist/cli/orchestrate.d.ts +106 -0
  533. package/dist/cli/orchestrate.d.ts.map +1 -0
  534. package/dist/cli/orchestrate.js +228 -0
  535. package/dist/cli/orchestrate.js.map +1 -0
  536. package/dist/cli/positional-paths.d.ts +23 -0
  537. package/dist/cli/positional-paths.d.ts.map +1 -0
  538. package/dist/cli/positional-paths.js +64 -0
  539. package/dist/cli/positional-paths.js.map +1 -0
  540. package/dist/cli/pressure-monitor.d.ts +62 -0
  541. package/dist/cli/pressure-monitor.d.ts.map +1 -0
  542. package/dist/cli/pressure-monitor.js +110 -0
  543. package/dist/cli/pressure-monitor.js.map +1 -0
  544. package/dist/cli/profile.d.ts +82 -0
  545. package/dist/cli/profile.d.ts.map +1 -0
  546. package/dist/cli/profile.js +120 -0
  547. package/dist/cli/profile.js.map +1 -0
  548. package/dist/cli/report-data.d.ts +46 -0
  549. package/dist/cli/report-data.d.ts.map +1 -0
  550. package/dist/cli/report-data.js +48 -0
  551. package/dist/cli/report-data.js.map +1 -0
  552. package/dist/cli/resolve-adapters.d.ts +19 -0
  553. package/dist/cli/resolve-adapters.d.ts.map +1 -0
  554. package/dist/cli/resolve-adapters.js +38 -0
  555. package/dist/cli/resolve-adapters.js.map +1 -0
  556. package/dist/cli/sarif-export.d.ts +40 -0
  557. package/dist/cli/sarif-export.d.ts.map +1 -0
  558. package/dist/cli/sarif-export.js +69 -0
  559. package/dist/cli/sarif-export.js.map +1 -0
  560. package/dist/cli/shard-worker.d.ts +25 -0
  561. package/dist/cli/shard-worker.d.ts.map +1 -0
  562. package/dist/cli/shard-worker.js +98 -0
  563. package/dist/cli/shard-worker.js.map +1 -0
  564. package/dist/cli/symbol-index.d.ts +51 -0
  565. package/dist/cli/symbol-index.d.ts.map +1 -0
  566. package/dist/cli/symbol-index.js +120 -0
  567. package/dist/cli/symbol-index.js.map +1 -0
  568. package/dist/cli/workspace-report.d.ts +32 -0
  569. package/dist/cli/workspace-report.d.ts.map +1 -0
  570. package/dist/cli/workspace-report.js +107 -0
  571. package/dist/cli/workspace-report.js.map +1 -0
  572. package/dist/cli/workspace-runner.d.ts +104 -0
  573. package/dist/cli/workspace-runner.d.ts.map +1 -0
  574. package/dist/cli/workspace-runner.js +166 -0
  575. package/dist/cli/workspace-runner.js.map +1 -0
  576. package/dist/cross-package/export-index.d.ts +118 -0
  577. package/dist/cross-package/export-index.d.ts.map +1 -0
  578. package/dist/cross-package/export-index.js +296 -0
  579. package/dist/cross-package/export-index.js.map +1 -0
  580. package/dist/cross-package/posix-path.d.ts +16 -0
  581. package/dist/cross-package/posix-path.d.ts.map +1 -0
  582. package/dist/cross-package/posix-path.js +18 -0
  583. package/dist/cross-package/posix-path.js.map +1 -0
  584. package/dist/cross-package/resolve.d.ts +68 -0
  585. package/dist/cross-package/resolve.d.ts.map +1 -0
  586. package/dist/cross-package/resolve.js +83 -0
  587. package/dist/cross-package/resolve.js.map +1 -0
  588. package/dist/index.d.ts +33 -0
  589. package/dist/index.d.ts.map +1 -0
  590. package/dist/index.js +61 -0
  591. package/dist/index.js.map +1 -0
  592. package/dist/internal.d.ts +25 -0
  593. package/dist/internal.d.ts.map +1 -0
  594. package/dist/internal.js +38 -0
  595. package/dist/internal.js.map +1 -0
  596. package/dist/lang-adapter/body-digest.d.ts +46 -0
  597. package/dist/lang-adapter/body-digest.d.ts.map +1 -0
  598. package/dist/lang-adapter/body-digest.js +49 -0
  599. package/dist/lang-adapter/body-digest.js.map +1 -0
  600. package/dist/lang-adapter/edge-helpers.d.ts +104 -0
  601. package/dist/lang-adapter/edge-helpers.d.ts.map +1 -0
  602. package/dist/lang-adapter/edge-helpers.js +120 -0
  603. package/dist/lang-adapter/edge-helpers.js.map +1 -0
  604. package/dist/lang-adapter/registry.d.ts +59 -0
  605. package/dist/lang-adapter/registry.d.ts.map +1 -0
  606. package/dist/lang-adapter/registry.js +100 -0
  607. package/dist/lang-adapter/registry.js.map +1 -0
  608. package/dist/lang-adapter/selector.d.ts +39 -0
  609. package/dist/lang-adapter/selector.d.ts.map +1 -0
  610. package/dist/lang-adapter/selector.js +140 -0
  611. package/dist/lang-adapter/selector.js.map +1 -0
  612. package/dist/lang-adapter/types.d.ts +217 -0
  613. package/dist/lang-adapter/types.d.ts.map +1 -0
  614. package/dist/lang-adapter/types.js +18 -0
  615. package/dist/lang-adapter/types.js.map +1 -0
  616. package/dist/owner-key.d.ts +22 -0
  617. package/dist/owner-key.d.ts.map +1 -0
  618. package/dist/owner-key.js +25 -0
  619. package/dist/owner-key.js.map +1 -0
  620. package/dist/persistence/__tests__/shard-fragment-cache.test.d.ts +8 -0
  621. package/dist/persistence/__tests__/shard-fragment-cache.test.d.ts.map +1 -0
  622. package/dist/persistence/__tests__/shard-fragment-cache.test.js +126 -0
  623. package/dist/persistence/__tests__/shard-fragment-cache.test.js.map +1 -0
  624. package/dist/persistence/catalog-repo.d.ts +77 -0
  625. package/dist/persistence/catalog-repo.d.ts.map +1 -0
  626. package/dist/persistence/catalog-repo.js +229 -0
  627. package/dist/persistence/catalog-repo.js.map +1 -0
  628. package/dist/persistence/schema.d.ts +249 -0
  629. package/dist/persistence/schema.d.ts.map +1 -0
  630. package/dist/persistence/schema.js +53 -0
  631. package/dist/persistence/schema.js.map +1 -0
  632. package/dist/persistence/session-payload.d.ts +96 -0
  633. package/dist/persistence/session-payload.d.ts.map +1 -0
  634. package/dist/persistence/session-payload.js +116 -0
  635. package/dist/persistence/session-payload.js.map +1 -0
  636. package/dist/persistence/session-replay.d.ts +15 -0
  637. package/dist/persistence/session-replay.d.ts.map +1 -0
  638. package/dist/persistence/session-replay.js +80 -0
  639. package/dist/persistence/session-replay.js.map +1 -0
  640. package/dist/pipeline/__tests__/assign-packages.test.d.ts +2 -0
  641. package/dist/pipeline/__tests__/assign-packages.test.d.ts.map +1 -0
  642. package/dist/pipeline/__tests__/assign-packages.test.js +88 -0
  643. package/dist/pipeline/__tests__/assign-packages.test.js.map +1 -0
  644. package/dist/pipeline/__tests__/constrain-edges.test.d.ts +2 -0
  645. package/dist/pipeline/__tests__/constrain-edges.test.d.ts.map +1 -0
  646. package/dist/pipeline/__tests__/constrain-edges.test.js +228 -0
  647. package/dist/pipeline/__tests__/constrain-edges.test.js.map +1 -0
  648. package/dist/pipeline/__tests__/features.test.d.ts +9 -0
  649. package/dist/pipeline/__tests__/features.test.d.ts.map +1 -0
  650. package/dist/pipeline/__tests__/features.test.js +458 -0
  651. package/dist/pipeline/__tests__/features.test.js.map +1 -0
  652. package/dist/pipeline/__tests__/indexes-imports.test.d.ts +2 -0
  653. package/dist/pipeline/__tests__/indexes-imports.test.d.ts.map +1 -0
  654. package/dist/pipeline/__tests__/indexes-imports.test.js +114 -0
  655. package/dist/pipeline/__tests__/indexes-imports.test.js.map +1 -0
  656. package/dist/pipeline/assign-packages.d.ts +18 -0
  657. package/dist/pipeline/assign-packages.d.ts.map +1 -0
  658. package/dist/pipeline/assign-packages.js +86 -0
  659. package/dist/pipeline/assign-packages.js.map +1 -0
  660. package/dist/pipeline/constrain-edges.d.ts +34 -0
  661. package/dist/pipeline/constrain-edges.d.ts.map +1 -0
  662. package/dist/pipeline/constrain-edges.js +139 -0
  663. package/dist/pipeline/constrain-edges.js.map +1 -0
  664. package/dist/pipeline/feature-deps.d.ts +19 -0
  665. package/dist/pipeline/feature-deps.d.ts.map +1 -0
  666. package/dist/pipeline/feature-deps.js +28 -0
  667. package/dist/pipeline/feature-deps.js.map +1 -0
  668. package/dist/pipeline/features.d.ts +50 -0
  669. package/dist/pipeline/features.d.ts.map +1 -0
  670. package/dist/pipeline/features.js +462 -0
  671. package/dist/pipeline/features.js.map +1 -0
  672. package/dist/pipeline/indexes.d.ts +27 -0
  673. package/dist/pipeline/indexes.d.ts.map +1 -0
  674. package/dist/pipeline/indexes.js +159 -0
  675. package/dist/pipeline/indexes.js.map +1 -0
  676. package/dist/recipes/__tests__/built-in-recipes.test.d.ts +5 -0
  677. package/dist/recipes/__tests__/built-in-recipes.test.d.ts.map +1 -0
  678. package/dist/recipes/__tests__/built-in-recipes.test.js +24 -0
  679. package/dist/recipes/__tests__/built-in-recipes.test.js.map +1 -0
  680. package/dist/recipes/__tests__/registry.test.d.ts +7 -0
  681. package/dist/recipes/__tests__/registry.test.d.ts.map +1 -0
  682. package/dist/recipes/__tests__/registry.test.js +34 -0
  683. package/dist/recipes/__tests__/registry.test.js.map +1 -0
  684. package/dist/recipes/__tests__/resolve.test.d.ts +10 -0
  685. package/dist/recipes/__tests__/resolve.test.d.ts.map +1 -0
  686. package/dist/recipes/__tests__/resolve.test.js +38 -0
  687. package/dist/recipes/__tests__/resolve.test.js.map +1 -0
  688. package/dist/recipes/built-in-recipes.d.ts +26 -0
  689. package/dist/recipes/built-in-recipes.d.ts.map +1 -0
  690. package/dist/recipes/built-in-recipes.js +43 -0
  691. package/dist/recipes/built-in-recipes.js.map +1 -0
  692. package/dist/recipes/registry.d.ts +31 -0
  693. package/dist/recipes/registry.d.ts.map +1 -0
  694. package/dist/recipes/registry.js +48 -0
  695. package/dist/recipes/registry.js.map +1 -0
  696. package/dist/recipes/resolve.d.ts +31 -0
  697. package/dist/recipes/resolve.d.ts.map +1 -0
  698. package/dist/recipes/resolve.js +70 -0
  699. package/dist/recipes/resolve.js.map +1 -0
  700. package/dist/recipes/types.d.ts +58 -0
  701. package/dist/recipes/types.d.ts.map +1 -0
  702. package/dist/recipes/types.js +39 -0
  703. package/dist/recipes/types.js.map +1 -0
  704. package/dist/render/__tests__/catalog-json.test.d.ts +9 -0
  705. package/dist/render/__tests__/catalog-json.test.d.ts.map +1 -0
  706. package/dist/render/__tests__/catalog-json.test.js +132 -0
  707. package/dist/render/__tests__/catalog-json.test.js.map +1 -0
  708. package/dist/render/catalog-json-types.d.ts +114 -0
  709. package/dist/render/catalog-json-types.d.ts.map +1 -0
  710. package/dist/render/catalog-json-types.js +23 -0
  711. package/dist/render/catalog-json-types.js.map +1 -0
  712. package/dist/render/catalog-json.d.ts +43 -0
  713. package/dist/render/catalog-json.d.ts.map +1 -0
  714. package/dist/render/catalog-json.js +303 -0
  715. package/dist/render/catalog-json.js.map +1 -0
  716. package/dist/render/opensip-id-derivation.d.ts +73 -0
  717. package/dist/render/opensip-id-derivation.d.ts.map +1 -0
  718. package/dist/render/opensip-id-derivation.js +65 -0
  719. package/dist/render/opensip-id-derivation.js.map +1 -0
  720. package/dist/render/rule-id-mapping.d.ts +61 -0
  721. package/dist/render/rule-id-mapping.d.ts.map +1 -0
  722. package/dist/render/rule-id-mapping.js +82 -0
  723. package/dist/render/rule-id-mapping.js.map +1 -0
  724. package/dist/resolve-callee.d.ts +50 -0
  725. package/dist/resolve-callee.d.ts.map +1 -0
  726. package/dist/resolve-callee.js +80 -0
  727. package/dist/resolve-callee.js.map +1 -0
  728. package/dist/rules/__tests__/__fixtures__/catalog.fixture.d.ts +22 -0
  729. package/dist/rules/__tests__/__fixtures__/catalog.fixture.d.ts.map +1 -0
  730. package/dist/rules/__tests__/__fixtures__/catalog.fixture.js +143 -0
  731. package/dist/rules/__tests__/__fixtures__/catalog.fixture.js.map +1 -0
  732. package/dist/rules/__tests__/create-graph-signal.test.d.ts +8 -0
  733. package/dist/rules/__tests__/create-graph-signal.test.d.ts.map +1 -0
  734. package/dist/rules/__tests__/create-graph-signal.test.js +55 -0
  735. package/dist/rules/__tests__/create-graph-signal.test.js.map +1 -0
  736. package/dist/rules/__tests__/define-rule.test.d.ts +13 -0
  737. package/dist/rules/__tests__/define-rule.test.d.ts.map +1 -0
  738. package/dist/rules/__tests__/define-rule.test.js +102 -0
  739. package/dist/rules/__tests__/define-rule.test.js.map +1 -0
  740. package/dist/rules/__tests__/fingerprint-golden.test.d.ts +21 -0
  741. package/dist/rules/__tests__/fingerprint-golden.test.d.ts.map +1 -0
  742. package/dist/rules/__tests__/fingerprint-golden.test.js +69 -0
  743. package/dist/rules/__tests__/fingerprint-golden.test.js.map +1 -0
  744. package/dist/rules/__tests__/registry.test.d.ts +6 -0
  745. package/dist/rules/__tests__/registry.test.d.ts.map +1 -0
  746. package/dist/rules/__tests__/registry.test.js +37 -0
  747. package/dist/rules/__tests__/registry.test.js.map +1 -0
  748. package/dist/rules/__tests__/rule-behaviors.test.d.ts +9 -0
  749. package/dist/rules/__tests__/rule-behaviors.test.d.ts.map +1 -0
  750. package/dist/rules/__tests__/rule-behaviors.test.js +204 -0
  751. package/dist/rules/__tests__/rule-behaviors.test.js.map +1 -0
  752. package/dist/rules/__tests__/signal-output.snapshot.test.d.ts +11 -0
  753. package/dist/rules/__tests__/signal-output.snapshot.test.d.ts.map +1 -0
  754. package/dist/rules/__tests__/signal-output.snapshot.test.js +55 -0
  755. package/dist/rules/__tests__/signal-output.snapshot.test.js.map +1 -0
  756. package/dist/rules/_approximation.d.ts +23 -0
  757. package/dist/rules/_approximation.d.ts.map +1 -0
  758. package/dist/rules/_approximation.js +28 -0
  759. package/dist/rules/_approximation.js.map +1 -0
  760. package/dist/rules/_entry-points.d.ts +27 -0
  761. package/dist/rules/_entry-points.d.ts.map +1 -0
  762. package/dist/rules/_entry-points.js +81 -0
  763. package/dist/rules/_entry-points.js.map +1 -0
  764. package/dist/rules/_severity-override.d.ts +32 -0
  765. package/dist/rules/_severity-override.d.ts.map +1 -0
  766. package/dist/rules/_severity-override.js +33 -0
  767. package/dist/rules/_severity-override.js.map +1 -0
  768. package/dist/rules/always-throws-branch.d.ts +26 -0
  769. package/dist/rules/always-throws-branch.d.ts.map +1 -0
  770. package/dist/rules/always-throws-branch.js +66 -0
  771. package/dist/rules/always-throws-branch.js.map +1 -0
  772. package/dist/rules/create-graph-signal.d.ts +38 -0
  773. package/dist/rules/create-graph-signal.d.ts.map +1 -0
  774. package/dist/rules/create-graph-signal.js +35 -0
  775. package/dist/rules/create-graph-signal.js.map +1 -0
  776. package/dist/rules/cycle.d.ts +29 -0
  777. package/dist/rules/cycle.d.ts.map +1 -0
  778. package/dist/rules/cycle.js +166 -0
  779. package/dist/rules/cycle.js.map +1 -0
  780. package/dist/rules/cycle.memberlocations.test.d.ts +11 -0
  781. package/dist/rules/cycle.memberlocations.test.d.ts.map +1 -0
  782. package/dist/rules/cycle.memberlocations.test.js +84 -0
  783. package/dist/rules/cycle.memberlocations.test.js.map +1 -0
  784. package/dist/rules/define-rule.d.ts +67 -0
  785. package/dist/rules/define-rule.d.ts.map +1 -0
  786. package/dist/rules/define-rule.js +66 -0
  787. package/dist/rules/define-rule.js.map +1 -0
  788. package/dist/rules/duplicated-function-body.d.ts +40 -0
  789. package/dist/rules/duplicated-function-body.d.ts.map +1 -0
  790. package/dist/rules/duplicated-function-body.js +232 -0
  791. package/dist/rules/duplicated-function-body.js.map +1 -0
  792. package/dist/rules/high-blast-untested.d.ts +26 -0
  793. package/dist/rules/high-blast-untested.d.ts.map +1 -0
  794. package/dist/rules/high-blast-untested.js +82 -0
  795. package/dist/rules/high-blast-untested.js.map +1 -0
  796. package/dist/rules/large-function.d.ts +22 -0
  797. package/dist/rules/large-function.d.ts.map +1 -0
  798. package/dist/rules/large-function.js +72 -0
  799. package/dist/rules/large-function.js.map +1 -0
  800. package/dist/rules/no-side-effect-path.d.ts +31 -0
  801. package/dist/rules/no-side-effect-path.d.ts.map +1 -0
  802. package/dist/rules/no-side-effect-path.js +217 -0
  803. package/dist/rules/no-side-effect-path.js.map +1 -0
  804. package/dist/rules/orphan-subtree.d.ts +11 -0
  805. package/dist/rules/orphan-subtree.d.ts.map +1 -0
  806. package/dist/rules/orphan-subtree.js +104 -0
  807. package/dist/rules/orphan-subtree.js.map +1 -0
  808. package/dist/rules/registry.d.ts +35 -0
  809. package/dist/rules/registry.d.ts.map +1 -0
  810. package/dist/rules/registry.js +96 -0
  811. package/dist/rules/registry.js.map +1 -0
  812. package/dist/rules/test-only-reachable.d.ts +9 -0
  813. package/dist/rules/test-only-reachable.d.ts.map +1 -0
  814. package/dist/rules/test-only-reachable.js +101 -0
  815. package/dist/rules/test-only-reachable.js.map +1 -0
  816. package/dist/rules/unexpected-coupling.d.ts +29 -0
  817. package/dist/rules/unexpected-coupling.d.ts.map +1 -0
  818. package/dist/rules/unexpected-coupling.js +0 -0
  819. package/dist/rules/unexpected-coupling.js.map +1 -0
  820. package/dist/rules/wide-function.d.ts +18 -0
  821. package/dist/rules/wide-function.d.ts.map +1 -0
  822. package/dist/rules/wide-function.js +58 -0
  823. package/dist/rules/wide-function.js.map +1 -0
  824. package/dist/scope-augmentation.d.ts +58 -0
  825. package/dist/scope-augmentation.d.ts.map +1 -0
  826. package/dist/scope-augmentation.js +29 -0
  827. package/dist/scope-augmentation.js.map +1 -0
  828. package/dist/tool.d.ts +29 -0
  829. package/dist/tool.d.ts.map +1 -0
  830. package/dist/tool.js +241 -0
  831. package/dist/tool.js.map +1 -0
  832. package/dist/types.d.ts +642 -0
  833. package/dist/types.d.ts.map +1 -0
  834. package/dist/types.js +2 -0
  835. package/dist/types.js.map +1 -0
  836. package/package.json +136 -0
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Catalog-JSON renderer — maps the engine catalog to a CatalogExport wire
3
+ * document. Covers the FunctionKind → opensip-kind mapping for every
4
+ * branch (function/method/getter/setter/constructor/module-init) and the
5
+ * dangling-edge invariant skip (a call/dependency `to` hash absent from
6
+ * the catalog is dropped rather than emitted half-formed).
7
+ */
8
+ import { describe, expect, it } from 'vitest';
9
+ import { buildIndexes } from '../../pipeline/indexes.js';
10
+ import { renderCatalogJson } from '../catalog-json.js';
11
+ function occ(simpleName, bodyHash, kind, calls = [], dependencies) {
12
+ return {
13
+ bodyHash,
14
+ simpleName,
15
+ qualifiedName: `src/a.${simpleName}`,
16
+ filePath: 'src/a.ts',
17
+ line: 1,
18
+ column: 0,
19
+ endLine: 2,
20
+ kind,
21
+ params: [],
22
+ returnType: null,
23
+ enclosingClass: kind === 'method' || kind === 'getter' || kind === 'setter' ? 'C' : null,
24
+ decorators: [],
25
+ visibility: 'exported',
26
+ inTestFile: false,
27
+ definedInGenerated: false,
28
+ calls,
29
+ ...(dependencies ? { dependencies } : {}),
30
+ };
31
+ }
32
+ function catalogOf(occs) {
33
+ const functions = {};
34
+ for (const o of occs) {
35
+ const bucket = functions[o.simpleName];
36
+ if (bucket)
37
+ bucket.push(o);
38
+ else
39
+ functions[o.simpleName] = [o];
40
+ }
41
+ return {
42
+ version: '3.0',
43
+ tool: 'graph',
44
+ language: 'typescript',
45
+ builtAt: 'x',
46
+ cacheKey: 'k',
47
+ resolutionMode: 'exact',
48
+ functions,
49
+ };
50
+ }
51
+ const provenance = {
52
+ runId: 'run-1',
53
+ completeness: 'complete',
54
+ engineVersion: '1.0.0',
55
+ startedAt: '2026-06-01T00:00:00.000Z',
56
+ completedAt: '2026-06-01T00:00:01.000Z',
57
+ tenantId: 't1',
58
+ };
59
+ function render(catalog) {
60
+ const json = renderCatalogJson({
61
+ catalog,
62
+ indexes: buildIndexes(catalog),
63
+ provenance,
64
+ repoId: 'r1',
65
+ gitSha: 'sha1',
66
+ });
67
+ return JSON.parse(json);
68
+ }
69
+ describe('renderCatalogJson kind mapping', () => {
70
+ it('maps every FunctionKind to its opensip kind convention', () => {
71
+ const catalog = catalogOf([
72
+ occ('fnDecl', 'h1', 'function-declaration'),
73
+ occ('fnExpr', 'h2', 'function-expression'),
74
+ occ('arrowFn', 'h3', 'arrow'),
75
+ occ('meth', 'h4', 'method'),
76
+ occ('get', 'h5', 'getter'),
77
+ occ('set', 'h6', 'setter'),
78
+ occ('ctor', 'h7', 'constructor'),
79
+ occ('moduleInit', 'h8', 'module-init'),
80
+ ]);
81
+ const doc = render(catalog);
82
+ // CatalogExportSymbol carries qualifiedName (`src/a.<simpleName>`), not simpleName.
83
+ const kindByName = new Map(doc.symbols.map((s) => [s.qualifiedName.replace('src/a.', ''), s.kind]));
84
+ expect(kindByName.get('fnDecl')).toBe('function');
85
+ expect(kindByName.get('fnExpr')).toBe('function');
86
+ expect(kindByName.get('arrowFn')).toBe('function');
87
+ expect(kindByName.get('meth')).toBe('method');
88
+ expect(kindByName.get('get')).toBe('method');
89
+ expect(kindByName.get('set')).toBe('method');
90
+ expect(kindByName.get('ctor')).toBe('constructor');
91
+ expect(kindByName.get('moduleInit')).toBe('module-init');
92
+ });
93
+ });
94
+ describe('renderCatalogJson edge invariants', () => {
95
+ it('emits a resolved call edge and drops one whose target hash is unknown', () => {
96
+ const resolved = {
97
+ to: ['h2'],
98
+ line: 3,
99
+ column: 1,
100
+ resolution: 'static',
101
+ confidence: 'high',
102
+ text: 'b()',
103
+ };
104
+ const dangling = {
105
+ to: ['NOPE'],
106
+ line: 4,
107
+ column: 1,
108
+ resolution: 'static',
109
+ confidence: 'high',
110
+ text: 'gone()',
111
+ };
112
+ const catalog = catalogOf([
113
+ occ('a', 'h1', 'function-declaration', [resolved, dangling]),
114
+ occ('b', 'h2', 'function-declaration'),
115
+ ]);
116
+ const doc = render(catalog);
117
+ // Exactly one edge survived — the resolved one; the dangling NOPE was skipped.
118
+ expect(doc.edges).toHaveLength(1);
119
+ });
120
+ it('drops a dependency edge whose target hash is unknown', () => {
121
+ const dep = {
122
+ to: ['MISSING'],
123
+ specifier: 'x',
124
+ line: 1,
125
+ column: 0,
126
+ };
127
+ const catalog = catalogOf([occ('mod', 'h1', 'module-init', [], [dep])]);
128
+ const doc = render(catalog);
129
+ expect(doc.edges).toHaveLength(0);
130
+ });
131
+ });
132
+ //# sourceMappingURL=catalog-json.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-json.test.js","sourceRoot":"","sources":["../../../src/render/__tests__/catalog-json.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @fileoverview Wire-shape types for the catalog JSON export consumed
3
+ * by opensip's substrate ingestor (Phase 5).
4
+ *
5
+ * The wire format bridges the engine's per-run `Catalog` + edge output
6
+ * to opensip's `tenant.code_symbols` + `tenant.code_edges` row shapes.
7
+ * Field set on this wire matches opensip's Drizzle column declarations
8
+ * verbatim, minus two derived fields:
9
+ *
10
+ * - `tenantId` — provenance-level (same for every row in a run);
11
+ * carried in `CatalogExportProvenance.tenantId`.
12
+ * - `indexedAt` — Postgres `DEFAULT NOW()` on the substrate side;
13
+ * engine doesn't emit it.
14
+ *
15
+ * `id` is pre-computed by the engine using `deriveOpenSipSymbolId` /
16
+ * `deriveOpenSipEdgeId` (Task 3.2) so re-ingestion via
17
+ * `INSERT … ON CONFLICT DO UPDATE` collides byte-for-byte with rows
18
+ * already in the substrate.
19
+ *
20
+ * Phase 3 Task 3.1 per DEC-498.
21
+ */
22
+ /**
23
+ * Single symbol row on the wire — maps 1:1 to a `tenant.code_symbols`
24
+ * row in opensip's Drizzle schema
25
+ * (`packages/db-schemas/src/code-graph/code-symbols.ts`).
26
+ */
27
+ export interface CatalogExportSymbol {
28
+ /** sha256 over `(repoId, modulePath, kind, qualifiedName, arity)`. */
29
+ readonly id: string;
30
+ readonly repoId: string;
31
+ readonly kind: string;
32
+ readonly language: string;
33
+ readonly qualifiedName: string;
34
+ readonly modulePath: string;
35
+ /** `null` for symbols without an arity concept (e.g., modules, classes). */
36
+ readonly arity: number | null;
37
+ readonly filePath: string;
38
+ readonly startLine: number;
39
+ readonly endLine: number;
40
+ readonly isExported: boolean;
41
+ /** Optional — adapters that produce signatures populate; others omit. */
42
+ readonly signature?: string | null;
43
+ /** Optional — JSDoc / docstring extraction (if adapter supports). */
44
+ readonly docSummary?: string | null;
45
+ /** Commit SHA the symbol was extracted from. Same value across all
46
+ * rows from one run (matches `provenance.runId` 1:1). */
47
+ readonly gitSha: string;
48
+ }
49
+ /**
50
+ * Single edge row on the wire — maps 1:1 to a `tenant.code_edges` row
51
+ * in opensip's Drizzle schema
52
+ * (`packages/db-schemas/src/code-graph/code-edges.ts`).
53
+ */
54
+ export interface CatalogExportEdge {
55
+ /** sha256 over `(fromSymbolId, edgeKind, toSymbolId | unresolved-qname)`. */
56
+ readonly id: string;
57
+ readonly repoId: string;
58
+ /** One of: `calls`, `depends_on`, `creation`. Other kinds the
59
+ * pre-consolidation indexer emitted (`contains`, `inherits_from`,
60
+ * `implements`, `has_argument`) are implicitly narrowed away by
61
+ * this consolidation per DEC-498. */
62
+ readonly edgeKind: string;
63
+ readonly fromSymbolId: string;
64
+ /** `null` when the call/dependency target couldn't be resolved to a
65
+ * same-repo symbol; `toQualifiedNameUnresolved` carries the
66
+ * best-effort qname in that case. */
67
+ readonly toSymbolId: string | null;
68
+ /** `null` when `toSymbolId` is populated; non-null otherwise. */
69
+ readonly toQualifiedNameUnresolved: string | null;
70
+ readonly sourceFile: string;
71
+ readonly sourceLine: number | null;
72
+ readonly gitSha: string;
73
+ }
74
+ /**
75
+ * Per-run metadata. Carries the partial/complete completeness signal
76
+ * required by Phase 5's ingestor to differentiate full re-index from
77
+ * incremental delta passes that may have aborted mid-walk.
78
+ */
79
+ export interface CatalogExportProvenance {
80
+ /** UUID generated by the engine entry point; flows through every
81
+ * log / span as `opensip.run_id`. */
82
+ readonly runId: string;
83
+ /** `'complete'` when the engine pass walked the full input set;
84
+ * `'partial'` when memory pressure or an abort signal cut the pass
85
+ * short and the catalog reflects only a prefix of the discovery
86
+ * output. Phase 5 may filter on this. */
87
+ readonly completeness: 'partial' | 'complete';
88
+ /** Engine package version (e.g., `'1.0.0'`) — provenance for the
89
+ * derivation algorithm. If a future engine release changes the
90
+ * symbol-ID hashing, the version bump documents the substrate
91
+ * cutover boundary. */
92
+ readonly engineVersion: string;
93
+ /** ISO 8601 timestamp the engine pass started. */
94
+ readonly startedAt: string;
95
+ /** ISO 8601 timestamp the engine pass completed. `null` when
96
+ * `completeness === 'partial'`. */
97
+ readonly completedAt: string | null;
98
+ /** Tenant scope for every row in this export. */
99
+ readonly tenantId: string;
100
+ }
101
+ /**
102
+ * Top-level wire document. JSON-encoded; written to a file by the
103
+ * engine CLI (`--render catalog-json --output <path>`) because the
104
+ * shape exceeds practical stdout buffer sizes on 100k-file repos.
105
+ */
106
+ export interface CatalogExport {
107
+ /** Wire-format version — bump on breaking changes; opensip ingestor
108
+ * asserts. */
109
+ readonly version: '1.0';
110
+ readonly provenance: CatalogExportProvenance;
111
+ readonly symbols: readonly CatalogExportSymbol[];
112
+ readonly edges: readonly CatalogExportEdge[];
113
+ }
114
+ //# sourceMappingURL=catalog-json-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-json-types.d.ts","sourceRoot":"","sources":["../../src/render/catalog-json-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qEAAqE;IACrE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;8DAC0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;0CAGsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;0CAEsC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iEAAiE;IACjE,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC;0CACsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;8CAG0C;IAC1C,QAAQ,CAAC,YAAY,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9C;;;4BAGwB;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;wCACoC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;mBACe;IACf,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC9C"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @fileoverview Wire-shape types for the catalog JSON export consumed
3
+ * by opensip's substrate ingestor (Phase 5).
4
+ *
5
+ * The wire format bridges the engine's per-run `Catalog` + edge output
6
+ * to opensip's `tenant.code_symbols` + `tenant.code_edges` row shapes.
7
+ * Field set on this wire matches opensip's Drizzle column declarations
8
+ * verbatim, minus two derived fields:
9
+ *
10
+ * - `tenantId` — provenance-level (same for every row in a run);
11
+ * carried in `CatalogExportProvenance.tenantId`.
12
+ * - `indexedAt` — Postgres `DEFAULT NOW()` on the substrate side;
13
+ * engine doesn't emit it.
14
+ *
15
+ * `id` is pre-computed by the engine using `deriveOpenSipSymbolId` /
16
+ * `deriveOpenSipEdgeId` (Task 3.2) so re-ingestion via
17
+ * `INSERT … ON CONFLICT DO UPDATE` collides byte-for-byte with rows
18
+ * already in the substrate.
19
+ *
20
+ * Phase 3 Task 3.1 per DEC-498.
21
+ */
22
+ export {};
23
+ //# sourceMappingURL=catalog-json-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-json-types.js","sourceRoot":"","sources":["../../src/render/catalog-json-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @fileoverview Catalog JSON renderer — emits the engine's per-run
3
+ * `Catalog` + edge output as a `CatalogExport` document conformant to
4
+ * the wire shape opensip's substrate ingestor (Phase 5) consumes.
5
+ *
6
+ * Renderer is a pure function: takes the catalog + indexes + a tenant /
7
+ * repo / git-sha scope + run provenance, returns a JSON string. Streams
8
+ * to a file at the orchestrate-CLI level (not stdout) because catalog
9
+ * JSON for 100k-file repos exceeds practical stdout buffer sizes —
10
+ * see Phase 3 Task 3.4 for the file-output wiring.
11
+ *
12
+ * Phase 3 Task 3.3 per DEC-498.
13
+ *
14
+ * Symbol-ID / edge-ID derivation: byte-for-byte mirror of opensip's
15
+ * `computeSymbolId` / `computeEdgeId` so `INSERT ... ON CONFLICT DO
16
+ * UPDATE` collides correctly on existing substrate rows.
17
+ *
18
+ * Edge taxonomy at v1: `calls` plus `depends_on` module-import edges.
19
+ * `creation` may be added later.
20
+ */
21
+ import type { CatalogExportProvenance } from './catalog-json-types.js';
22
+ import type { Catalog, Indexes } from '../types.js';
23
+ export interface RenderCatalogJsonInput {
24
+ readonly catalog: Catalog;
25
+ readonly indexes: Indexes;
26
+ readonly provenance: CatalogExportProvenance;
27
+ readonly repoId: string;
28
+ readonly gitSha: string;
29
+ }
30
+ /**
31
+ * Render the engine's catalog as a `CatalogExport` JSON document.
32
+ *
33
+ * Ordering of `symbols` and `edges` is stable across runs (sorted by
34
+ * id) so byte-equivalence holds for golden-fixture tests and
35
+ * idempotent re-ingestion via `ON CONFLICT DO UPDATE`.
36
+ *
37
+ * Cognitive complexity >15 from the double-nested occurrence walk that
38
+ * also fans out call+dependency edges, plus the chunked string assembly
39
+ * for memory safety on large repos. The logic must be kept together for
40
+ * the determinism contract. Disable scoped to the renderer.
41
+ */
42
+ export declare function renderCatalogJson(input: RenderCatalogJsonInput): string;
43
+ //# sourceMappingURL=catalog-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-json.d.ts","sourceRoot":"","sources":["../../src/render/catalog-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAUH,OAAO,KAAK,EAEV,uBAAuB,EAExB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAEV,OAAO,EAIP,OAAO,EACR,MAAM,aAAa,CAAC;AA4PrB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AAEH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CA+DvE"}
@@ -0,0 +1,303 @@
1
+ /**
2
+ * @fileoverview Catalog JSON renderer — emits the engine's per-run
3
+ * `Catalog` + edge output as a `CatalogExport` document conformant to
4
+ * the wire shape opensip's substrate ingestor (Phase 5) consumes.
5
+ *
6
+ * Renderer is a pure function: takes the catalog + indexes + a tenant /
7
+ * repo / git-sha scope + run provenance, returns a JSON string. Streams
8
+ * to a file at the orchestrate-CLI level (not stdout) because catalog
9
+ * JSON for 100k-file repos exceeds practical stdout buffer sizes —
10
+ * see Phase 3 Task 3.4 for the file-output wiring.
11
+ *
12
+ * Phase 3 Task 3.3 per DEC-498.
13
+ *
14
+ * Symbol-ID / edge-ID derivation: byte-for-byte mirror of opensip's
15
+ * `computeSymbolId` / `computeEdgeId` so `INSERT ... ON CONFLICT DO
16
+ * UPDATE` collides correctly on existing substrate rows.
17
+ *
18
+ * Edge taxonomy at v1: `calls` plus `depends_on` module-import edges.
19
+ * `creation` may be added later.
20
+ */
21
+ import { resolveCallee } from '../resolve-callee.js';
22
+ import { deriveOpenSipEdgeId, deriveOpenSipModulePath, deriveOpenSipSymbolId, } from './opensip-id-derivation.js';
23
+ /**
24
+ * Map the engine's richer `FunctionKind` to opensip's
25
+ * `code_symbols.kind` column convention. Surjective:
26
+ *
27
+ * function-declaration → function
28
+ * function-expression → function
29
+ * arrow → function
30
+ * method → method
31
+ * getter → method
32
+ * setter → method
33
+ * constructor → constructor
34
+ * module-init → module-init
35
+ */
36
+ function mapKindToOpenSip(kind) {
37
+ switch (kind) {
38
+ case 'function-declaration':
39
+ case 'function-expression':
40
+ case 'arrow': {
41
+ return 'function';
42
+ }
43
+ case 'method':
44
+ case 'getter':
45
+ case 'setter': {
46
+ return 'method';
47
+ }
48
+ case 'constructor': {
49
+ return 'constructor';
50
+ }
51
+ case 'module-init': {
52
+ return 'module-init';
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Derive an opensip-compatible symbol-row payload for one engine
58
+ * `FunctionOccurrence`.
59
+ */
60
+ function occurrenceToSymbol(occurrence, repoId, language, gitSha) {
61
+ const modulePath = deriveOpenSipModulePath(occurrence.filePath);
62
+ const kind = mapKindToOpenSip(occurrence.kind);
63
+ const arity = occurrence.params.length;
64
+ const id = deriveOpenSipSymbolId({
65
+ repoId,
66
+ modulePath,
67
+ kind,
68
+ qualifiedName: occurrence.qualifiedName,
69
+ arity,
70
+ });
71
+ return {
72
+ id,
73
+ repoId,
74
+ kind,
75
+ language,
76
+ qualifiedName: occurrence.qualifiedName,
77
+ modulePath,
78
+ arity,
79
+ filePath: occurrence.filePath,
80
+ startLine: occurrence.line,
81
+ endLine: occurrence.endLine,
82
+ isExported: occurrence.visibility === 'exported',
83
+ signature: occurrence.returnType === null
84
+ ? null
85
+ : `(${occurrence.params.map((p) => p.name).join(', ')}): ${occurrence.returnType}`,
86
+ docSummary: null,
87
+ gitSha,
88
+ };
89
+ }
90
+ /**
91
+ * Map engine's `CallEdge` to one or more `CatalogExportEdge` rows.
92
+ *
93
+ * - Polymorphic edges (`to.length > 1`) split into one row per target.
94
+ * - Unresolved edges (`to.length === 0`) emit a single row with
95
+ * `toSymbolId: null` and `toQualifiedNameUnresolved` set to the
96
+ * call-expression text (truncated to ≤ 80 chars per `CallEdge.text`).
97
+ * The text is informational for human inspection; the edge ID is
98
+ * hashed over (from, kind, "unresolved:" + text) so stability is
99
+ * preserved per (source, target-text).
100
+ */
101
+ function callEdgeToRows(fromSymbolId, callerOcc, callEdge, indexes, identity) {
102
+ const { repoId, gitSha } = identity;
103
+ const fromFilePath = callerOcc.filePath;
104
+ const edgeKind = 'calls';
105
+ if (callEdge.to.length === 0) {
106
+ const id = deriveOpenSipEdgeId({
107
+ fromSymbolId,
108
+ edgeKind,
109
+ toSymbolId: null,
110
+ toQualifiedNameUnresolved: callEdge.text,
111
+ });
112
+ return [
113
+ {
114
+ id,
115
+ repoId,
116
+ edgeKind,
117
+ fromSymbolId,
118
+ toSymbolId: null,
119
+ toQualifiedNameUnresolved: callEdge.text,
120
+ sourceFile: fromFilePath,
121
+ sourceLine: callEdge.line,
122
+ gitSha,
123
+ },
124
+ ];
125
+ }
126
+ const rows = [];
127
+ for (const toBodyHash of callEdge.to) {
128
+ const target = resolveCallee(toBodyHash, callerOcc, indexes);
129
+ if (target === undefined) {
130
+ // Engine catalog invariant: every CallEdge.to bodyHash exists in
131
+ // the catalog. A missing target is an engine bug; skip rather
132
+ // than emit a half-formed row.
133
+ continue;
134
+ }
135
+ const toSymbolId = deriveOpenSipSymbolId({
136
+ repoId,
137
+ modulePath: deriveOpenSipModulePath(target.filePath),
138
+ kind: mapKindToOpenSip(target.kind),
139
+ qualifiedName: target.qualifiedName,
140
+ arity: target.params.length,
141
+ });
142
+ const id = deriveOpenSipEdgeId({
143
+ fromSymbolId,
144
+ edgeKind,
145
+ toSymbolId,
146
+ toQualifiedNameUnresolved: null,
147
+ });
148
+ rows.push({
149
+ id,
150
+ repoId,
151
+ edgeKind,
152
+ fromSymbolId,
153
+ toSymbolId,
154
+ toQualifiedNameUnresolved: null,
155
+ sourceFile: fromFilePath,
156
+ sourceLine: callEdge.line,
157
+ gitSha,
158
+ });
159
+ }
160
+ return rows;
161
+ }
162
+ /**
163
+ * Map an engine `DependencyEdge` to one or more `CatalogExportEdge`
164
+ * rows with `edgeKind: 'depends_on'`.
165
+ *
166
+ * - Polymorphic-target case (`to.length > 1`) is rare for imports but
167
+ * handled the same way as calls: one row per target.
168
+ * - Unresolved target (`to.length === 0`) emits a single row with
169
+ * `toSymbolId: null` and the raw import specifier in
170
+ * `toQualifiedNameUnresolved` — preserves attribution for external
171
+ * packages that aren't in the catalog.
172
+ *
173
+ * Phase 4 of opensip's substrate consolidation (DEC-498).
174
+ */
175
+ function dependencyEdgeToRows(fromSymbolId, fromFilePath, depEdge, byBodyHash, identity) {
176
+ const { repoId, gitSha } = identity;
177
+ const edgeKind = 'depends_on';
178
+ if (depEdge.to.length === 0) {
179
+ const id = deriveOpenSipEdgeId({
180
+ fromSymbolId,
181
+ edgeKind,
182
+ toSymbolId: null,
183
+ toQualifiedNameUnresolved: depEdge.specifier,
184
+ });
185
+ return [
186
+ {
187
+ id,
188
+ repoId,
189
+ edgeKind,
190
+ fromSymbolId,
191
+ toSymbolId: null,
192
+ toQualifiedNameUnresolved: depEdge.specifier,
193
+ sourceFile: fromFilePath,
194
+ sourceLine: depEdge.line,
195
+ gitSha,
196
+ },
197
+ ];
198
+ }
199
+ const rows = [];
200
+ for (const toBodyHash of depEdge.to) {
201
+ const target = byBodyHash.get(toBodyHash);
202
+ if (target === undefined) {
203
+ // Engine catalog invariant: every DependencyEdge.to bodyHash
204
+ // exists in the catalog. A missing target is an engine/adapter
205
+ // bug; skip rather than emit a half-formed row.
206
+ continue;
207
+ }
208
+ const toSymbolId = deriveOpenSipSymbolId({
209
+ repoId,
210
+ modulePath: deriveOpenSipModulePath(target.filePath),
211
+ kind: mapKindToOpenSip(target.kind),
212
+ qualifiedName: target.qualifiedName,
213
+ arity: target.params.length,
214
+ });
215
+ const id = deriveOpenSipEdgeId({
216
+ fromSymbolId,
217
+ edgeKind,
218
+ toSymbolId,
219
+ toQualifiedNameUnresolved: null,
220
+ });
221
+ rows.push({
222
+ id,
223
+ repoId,
224
+ edgeKind,
225
+ fromSymbolId,
226
+ toSymbolId,
227
+ toQualifiedNameUnresolved: null,
228
+ sourceFile: fromFilePath,
229
+ sourceLine: depEdge.line,
230
+ gitSha,
231
+ });
232
+ }
233
+ return rows;
234
+ }
235
+ /**
236
+ * Render the engine's catalog as a `CatalogExport` JSON document.
237
+ *
238
+ * Ordering of `symbols` and `edges` is stable across runs (sorted by
239
+ * id) so byte-equivalence holds for golden-fixture tests and
240
+ * idempotent re-ingestion via `ON CONFLICT DO UPDATE`.
241
+ *
242
+ * Cognitive complexity >15 from the double-nested occurrence walk that
243
+ * also fans out call+dependency edges, plus the chunked string assembly
244
+ * for memory safety on large repos. The logic must be kept together for
245
+ * the determinism contract. Disable scoped to the renderer.
246
+ */
247
+ /* eslint-disable sonarjs/cognitive-complexity */
248
+ export function renderCatalogJson(input) {
249
+ const { catalog, indexes, provenance, repoId, gitSha } = input;
250
+ const language = catalog.language;
251
+ const identity = { repoId, gitSha };
252
+ const symbols = [];
253
+ const edges = [];
254
+ for (const occurrenceList of Object.values(catalog.functions)) {
255
+ for (const occurrence of occurrenceList) {
256
+ const symbol = occurrenceToSymbol(occurrence, repoId, language, gitSha);
257
+ symbols.push(symbol);
258
+ for (const callEdge of occurrence.calls) {
259
+ const rows = callEdgeToRows(symbol.id, occurrence, callEdge, indexes, identity);
260
+ edges.push(...rows);
261
+ }
262
+ // Phase 4 (DEC-498): module-level depends_on edges. Only
263
+ // module-init occurrences carry these; for all other occurrences
264
+ // the field is absent.
265
+ if (occurrence.dependencies !== undefined) {
266
+ for (const depEdge of occurrence.dependencies) {
267
+ const rows = dependencyEdgeToRows(symbol.id, occurrence.filePath, depEdge, indexes.byBodyHash, identity);
268
+ edges.push(...rows);
269
+ }
270
+ }
271
+ }
272
+ }
273
+ // Stable ordering — deterministic output is the golden-fixture
274
+ // contract. Sort by id (sha256 hex string, lexicographic). Use spread to
275
+ // produce the sorted copy so the sort call does not immediately mutate a
276
+ // named array in statement position (unicorn/no-immediate-mutation).
277
+ const sortedSymbols = [...symbols].sort((a, b) => Number(a.id > b.id) - Number(a.id < b.id));
278
+ const sortedEdges = [...edges].sort((a, b) => Number(a.id > b.id) - Number(a.id < b.id));
279
+ // Build the JSON in chunks to avoid materializing the *entire* export (symbols + edges
280
+ // for 100k-file repos) as one giant JS string in a single JSON.stringify call.
281
+ // This mitigates V8 string length / OOM risk for the documented large-repo target.
282
+ // (Full streaming to fd without ever holding the complete string would be even better
283
+ // for extreme sizes; this is the contained fix that still returns the string contract.)
284
+ /* eslint-disable unicorn/no-immediate-mutation -- the chunked parts.push builder below deliberately mutates a small string-segment array in a tight loop; this avoids N quadratic concat allocations and the single giant string materialization that the surrounding comment explains is the OOM risk for 100k-file repos. The mutation is confined to this builder; final .join produces the returned value. */
285
+ const parts = ['{\n', ' "version": "1.0",\n'];
286
+ parts.push(' "provenance": ' + JSON.stringify(provenance, null, 2) + ',\n', ' "symbols": [\n');
287
+ for (const [i, symbol_] of sortedSymbols.entries()) {
288
+ if (i > 0)
289
+ parts.push(',\n');
290
+ parts.push(JSON.stringify(symbol_, null, 2));
291
+ }
292
+ parts.push('\n ],\n', ' "edges": [\n');
293
+ for (const [i, edge] of sortedEdges.entries()) {
294
+ if (i > 0)
295
+ parts.push(',\n');
296
+ parts.push(JSON.stringify(edge, null, 2));
297
+ }
298
+ parts.push('\n ]\n', '}');
299
+ /* eslint-enable unicorn/no-immediate-mutation */
300
+ return parts.join('');
301
+ }
302
+ /* eslint-enable sonarjs/cognitive-complexity */
303
+ //# sourceMappingURL=catalog-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-json.js","sourceRoot":"","sources":["../../src/render/catalog-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAgBpC;;;;;;;;;;;;GAYG;AACH,SAAS,gBAAgB,CAAC,IAAkB;IAC1C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,sBAAsB,CAAC;QAC5B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACzB,UAA8B,EAC9B,MAAc,EACd,QAAgB,EAChB,MAAc;IAEd,MAAM,UAAU,GAAG,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IAEvC,MAAM,EAAE,GAAG,qBAAqB,CAAC;QAC/B,MAAM;QACN,UAAU;QACV,IAAI;QACJ,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,KAAK;KACN,CAAC,CAAC;IAEH,OAAO;QACL,EAAE;QACF,MAAM;QACN,IAAI;QACJ,QAAQ;QACR,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,UAAU;QACV,KAAK;QACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,SAAS,EAAE,UAAU,CAAC,IAAI;QAC1B,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,UAAU,EAAE,UAAU,CAAC,UAAU,KAAK,UAAU;QAChD,SAAS,EACP,UAAU,CAAC,UAAU,KAAK,IAAI;YAC5B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,UAAU,EAAE;QACtF,UAAU,EAAE,IAAI;QAChB,MAAM;KACP,CAAC;AACJ,CAAC;AAYD;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CACrB,YAAoB,EACpB,SAA6B,EAC7B,QAAkB,EAClB,OAAgB,EAChB,QAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IACpC,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC;IAEzB,IAAI,QAAQ,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,mBAAmB,CAAC;YAC7B,YAAY;YACZ,QAAQ;YACR,UAAU,EAAE,IAAI;YAChB,yBAAyB,EAAE,QAAQ,CAAC,IAAI;SACzC,CAAC,CAAC;QACH,OAAO;YACL;gBACE,EAAE;gBACF,MAAM;gBACN,QAAQ;gBACR,YAAY;gBACZ,UAAU,EAAE,IAAI;gBAChB,yBAAyB,EAAE,QAAQ,CAAC,IAAI;gBACxC,UAAU,EAAE,YAAY;gBACxB,UAAU,EAAE,QAAQ,CAAC,IAAI;gBACzB,MAAM;aACP;SACF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,iEAAiE;YACjE,8DAA8D;YAC9D,+BAA+B;YAC/B,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,qBAAqB,CAAC;YACvC,MAAM;YACN,UAAU,EAAE,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpD,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;YACnC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;SAC5B,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,mBAAmB,CAAC;YAC7B,YAAY;YACZ,QAAQ;YACR,UAAU;YACV,yBAAyB,EAAE,IAAI;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC;YACR,EAAE;YACF,MAAM;YACN,QAAQ;YACR,YAAY;YACZ,UAAU;YACV,yBAAyB,EAAE,IAAI;YAC/B,UAAU,EAAE,YAAY;YACxB,UAAU,EAAE,QAAQ,CAAC,IAAI;YACzB,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,oBAAoB,CAC3B,YAAoB,EACpB,YAAoB,EACpB,OAAuB,EACvB,UAAmD,EACnD,QAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IACpC,MAAM,QAAQ,GAAG,YAAY,CAAC;IAE9B,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,mBAAmB,CAAC;YAC7B,YAAY;YACZ,QAAQ;YACR,UAAU,EAAE,IAAI;YAChB,yBAAyB,EAAE,OAAO,CAAC,SAAS;SAC7C,CAAC,CAAC;QACH,OAAO;YACL;gBACE,EAAE;gBACF,MAAM;gBACN,QAAQ;gBACR,YAAY;gBACZ,UAAU,EAAE,IAAI;gBAChB,yBAAyB,EAAE,OAAO,CAAC,SAAS;gBAC5C,UAAU,EAAE,YAAY;gBACxB,UAAU,EAAE,OAAO,CAAC,IAAI;gBACxB,MAAM;aACP;SACF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,6DAA6D;YAC7D,+DAA+D;YAC/D,gDAAgD;YAChD,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,qBAAqB,CAAC;YACvC,MAAM;YACN,UAAU,EAAE,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpD,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;YACnC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;SAC5B,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,mBAAmB,CAAC;YAC7B,YAAY;YACZ,QAAQ;YACR,UAAU;YACV,yBAAyB,EAAE,IAAI;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC;YACR,EAAE;YACF,MAAM;YACN,QAAQ;YACR,YAAY;YACZ,UAAU;YACV,yBAAyB,EAAE,IAAI;YAC/B,UAAU,EAAE,YAAY;YACxB,UAAU,EAAE,OAAO,CAAC,IAAI;YACxB,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAUD;;;;;;;;;;;GAWG;AACH,iDAAiD;AACjD,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,QAAQ,GAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAEpD,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,UAAU,IAAI,cAAc,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAErB,KAAK,MAAM,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAChF,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACtB,CAAC;YAED,yDAAyD;YACzD,iEAAiE;YACjE,uBAAuB;YACvB,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC1C,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,oBAAoB,CAC/B,MAAM,CAAC,EAAE,EACT,UAAU,CAAC,QAAQ,EACnB,OAAO,EACP,OAAO,CAAC,UAAU,EAClB,QAAQ,CACT,CAAC;oBACF,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,yEAAyE;IACzE,yEAAyE;IACzE,qEAAqE;IACrE,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEzF,uFAAuF;IACvF,+EAA+E;IAC/E,mFAAmF;IACnF,sFAAsF;IACtF,wFAAwF;IACxF,kZAAkZ;IAClZ,MAAM,KAAK,GAAa,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,kBAAkB,CAAC,CAAC;IACjG,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,IAAI,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC3B,iDAAiD;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AACD,gDAAgD"}