@opensip-cli/graph-typescript 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 (344) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +31 -0
  4. package/dist/__tests__/_pipeline.d.ts +40 -0
  5. package/dist/__tests__/_pipeline.d.ts.map +1 -0
  6. package/dist/__tests__/_pipeline.js +67 -0
  7. package/dist/__tests__/_pipeline.js.map +1 -0
  8. package/dist/__tests__/acceptance/_fixture-runner.d.ts +13 -0
  9. package/dist/__tests__/acceptance/_fixture-runner.d.ts.map +1 -0
  10. package/dist/__tests__/acceptance/_fixture-runner.js +55 -0
  11. package/dist/__tests__/acceptance/_fixture-runner.js.map +1 -0
  12. package/dist/__tests__/acceptance/alias-resolution.test.d.ts +8 -0
  13. package/dist/__tests__/acceptance/alias-resolution.test.d.ts.map +1 -0
  14. package/dist/__tests__/acceptance/alias-resolution.test.js +39 -0
  15. package/dist/__tests__/acceptance/alias-resolution.test.js.map +1 -0
  16. package/dist/__tests__/acceptance/arrow-callback-resolution.test.d.ts +8 -0
  17. package/dist/__tests__/acceptance/arrow-callback-resolution.test.d.ts.map +1 -0
  18. package/dist/__tests__/acceptance/arrow-callback-resolution.test.js +33 -0
  19. package/dist/__tests__/acceptance/arrow-callback-resolution.test.js.map +1 -0
  20. package/dist/__tests__/acceptance/constructor-calls.test.d.ts +7 -0
  21. package/dist/__tests__/acceptance/constructor-calls.test.d.ts.map +1 -0
  22. package/dist/__tests__/acceptance/constructor-calls.test.js +36 -0
  23. package/dist/__tests__/acceptance/constructor-calls.test.js.map +1 -0
  24. package/dist/__tests__/acceptance/interface-dispatch.test.d.ts +8 -0
  25. package/dist/__tests__/acceptance/interface-dispatch.test.d.ts.map +1 -0
  26. package/dist/__tests__/acceptance/interface-dispatch.test.js +44 -0
  27. package/dist/__tests__/acceptance/interface-dispatch.test.js.map +1 -0
  28. package/dist/__tests__/acceptance/inventory-completeness.test.d.ts +9 -0
  29. package/dist/__tests__/acceptance/inventory-completeness.test.d.ts.map +1 -0
  30. package/dist/__tests__/acceptance/inventory-completeness.test.js +72 -0
  31. package/dist/__tests__/acceptance/inventory-completeness.test.js.map +1 -0
  32. package/dist/__tests__/acceptance/jsx-resolution.test.d.ts +7 -0
  33. package/dist/__tests__/acceptance/jsx-resolution.test.d.ts.map +1 -0
  34. package/dist/__tests__/acceptance/jsx-resolution.test.js +46 -0
  35. package/dist/__tests__/acceptance/jsx-resolution.test.js.map +1 -0
  36. package/dist/__tests__/acceptance/module-init.test.d.ts +10 -0
  37. package/dist/__tests__/acceptance/module-init.test.d.ts.map +1 -0
  38. package/dist/__tests__/acceptance/module-init.test.js +40 -0
  39. package/dist/__tests__/acceptance/module-init.test.js.map +1 -0
  40. package/dist/__tests__/acceptance/projectdir-normalization.test.d.ts +7 -0
  41. package/dist/__tests__/acceptance/projectdir-normalization.test.d.ts.map +1 -0
  42. package/dist/__tests__/acceptance/projectdir-normalization.test.js +51 -0
  43. package/dist/__tests__/acceptance/projectdir-normalization.test.js.map +1 -0
  44. package/dist/__tests__/body-twin-edges.test.d.ts +12 -0
  45. package/dist/__tests__/body-twin-edges.test.d.ts.map +1 -0
  46. package/dist/__tests__/body-twin-edges.test.js +85 -0
  47. package/dist/__tests__/body-twin-edges.test.js.map +1 -0
  48. package/dist/__tests__/cache-key.test.d.ts +8 -0
  49. package/dist/__tests__/cache-key.test.d.ts.map +1 -0
  50. package/dist/__tests__/cache-key.test.js +86 -0
  51. package/dist/__tests__/cache-key.test.js.map +1 -0
  52. package/dist/__tests__/depends-on-emission.test.d.ts +19 -0
  53. package/dist/__tests__/depends-on-emission.test.d.ts.map +1 -0
  54. package/dist/__tests__/depends-on-emission.test.js +165 -0
  55. package/dist/__tests__/depends-on-emission.test.js.map +1 -0
  56. package/dist/__tests__/discover.test.d.ts +9 -0
  57. package/dist/__tests__/discover.test.d.ts.map +1 -0
  58. package/dist/__tests__/discover.test.js +72 -0
  59. package/dist/__tests__/discover.test.js.map +1 -0
  60. package/dist/__tests__/edge-helpers/method-target.test.d.ts +8 -0
  61. package/dist/__tests__/edge-helpers/method-target.test.d.ts.map +1 -0
  62. package/dist/__tests__/edge-helpers/method-target.test.js +96 -0
  63. package/dist/__tests__/edge-helpers/method-target.test.js.map +1 -0
  64. package/dist/__tests__/edge-helpers/resolve-decl.test.d.ts +13 -0
  65. package/dist/__tests__/edge-helpers/resolve-decl.test.d.ts.map +1 -0
  66. package/dist/__tests__/edge-helpers/resolve-decl.test.js +176 -0
  67. package/dist/__tests__/edge-helpers/resolve-decl.test.js.map +1 -0
  68. package/dist/__tests__/edge-resolvers/branches.test.d.ts +11 -0
  69. package/dist/__tests__/edge-resolvers/branches.test.d.ts.map +1 -0
  70. package/dist/__tests__/edge-resolvers/branches.test.js +305 -0
  71. package/dist/__tests__/edge-resolvers/branches.test.js.map +1 -0
  72. package/dist/__tests__/edge-resolvers/contract.test.d.ts +8 -0
  73. package/dist/__tests__/edge-resolvers/contract.test.d.ts.map +1 -0
  74. package/dist/__tests__/edge-resolvers/contract.test.js +30 -0
  75. package/dist/__tests__/edge-resolvers/contract.test.js.map +1 -0
  76. package/dist/__tests__/edge-resolvers/resolver-units.test.d.ts +17 -0
  77. package/dist/__tests__/edge-resolvers/resolver-units.test.d.ts.map +1 -0
  78. package/dist/__tests__/edge-resolvers/resolver-units.test.js +286 -0
  79. package/dist/__tests__/edge-resolvers/resolver-units.test.js.map +1 -0
  80. package/dist/__tests__/fast-vs-exact.test.d.ts +16 -0
  81. package/dist/__tests__/fast-vs-exact.test.d.ts.map +1 -0
  82. package/dist/__tests__/fast-vs-exact.test.js +116 -0
  83. package/dist/__tests__/fast-vs-exact.test.js.map +1 -0
  84. package/dist/__tests__/graph-cli.test.d.ts +9 -0
  85. package/dist/__tests__/graph-cli.test.d.ts.map +1 -0
  86. package/dist/__tests__/graph-cli.test.js +417 -0
  87. package/dist/__tests__/graph-cli.test.js.map +1 -0
  88. package/dist/__tests__/heap-preflight.test.d.ts +10 -0
  89. package/dist/__tests__/heap-preflight.test.d.ts.map +1 -0
  90. package/dist/__tests__/heap-preflight.test.js +166 -0
  91. package/dist/__tests__/heap-preflight.test.js.map +1 -0
  92. package/dist/__tests__/inventory-differential.test.d.ts +15 -0
  93. package/dist/__tests__/inventory-differential.test.d.ts.map +1 -0
  94. package/dist/__tests__/inventory-differential.test.js +319 -0
  95. package/dist/__tests__/inventory-differential.test.js.map +1 -0
  96. package/dist/__tests__/inventory-helpers/hash-body.test.d.ts +11 -0
  97. package/dist/__tests__/inventory-helpers/hash-body.test.d.ts.map +1 -0
  98. package/dist/__tests__/inventory-helpers/hash-body.test.js +34 -0
  99. package/dist/__tests__/inventory-helpers/hash-body.test.js.map +1 -0
  100. package/dist/__tests__/inventory-helpers/synthesize-name.test.d.ts +9 -0
  101. package/dist/__tests__/inventory-helpers/synthesize-name.test.d.ts.map +1 -0
  102. package/dist/__tests__/inventory-helpers/synthesize-name.test.js +30 -0
  103. package/dist/__tests__/inventory-helpers/synthesize-name.test.js.map +1 -0
  104. package/dist/__tests__/inventory-property-tests.test.d.ts +24 -0
  105. package/dist/__tests__/inventory-property-tests.test.d.ts.map +1 -0
  106. package/dist/__tests__/inventory-property-tests.test.js +521 -0
  107. package/dist/__tests__/inventory-property-tests.test.js.map +1 -0
  108. package/dist/__tests__/inventory-shape-coverage.test.d.ts +16 -0
  109. package/dist/__tests__/inventory-shape-coverage.test.d.ts.map +1 -0
  110. package/dist/__tests__/inventory-shape-coverage.test.js +586 -0
  111. package/dist/__tests__/inventory-shape-coverage.test.js.map +1 -0
  112. package/dist/__tests__/inventory-visitors/contract.test.d.ts +9 -0
  113. package/dist/__tests__/inventory-visitors/contract.test.d.ts.map +1 -0
  114. package/dist/__tests__/inventory-visitors/contract.test.js +33 -0
  115. package/dist/__tests__/inventory-visitors/contract.test.js.map +1 -0
  116. package/dist/__tests__/lang-adapter-contract.test.d.ts +19 -0
  117. package/dist/__tests__/lang-adapter-contract.test.d.ts.map +1 -0
  118. package/dist/__tests__/lang-adapter-contract.test.js +880 -0
  119. package/dist/__tests__/lang-adapter-contract.test.js.map +1 -0
  120. package/dist/__tests__/lang-adapter-registry.test.d.ts +10 -0
  121. package/dist/__tests__/lang-adapter-registry.test.d.ts.map +1 -0
  122. package/dist/__tests__/lang-adapter-registry.test.js +151 -0
  123. package/dist/__tests__/lang-adapter-registry.test.js.map +1 -0
  124. package/dist/__tests__/normalize-project-dir.test.d.ts +5 -0
  125. package/dist/__tests__/normalize-project-dir.test.d.ts.map +1 -0
  126. package/dist/__tests__/normalize-project-dir.test.js +47 -0
  127. package/dist/__tests__/normalize-project-dir.test.js.map +1 -0
  128. package/dist/__tests__/orchestrate.test.d.ts +8 -0
  129. package/dist/__tests__/orchestrate.test.d.ts.map +1 -0
  130. package/dist/__tests__/orchestrate.test.js +213 -0
  131. package/dist/__tests__/orchestrate.test.js.map +1 -0
  132. package/dist/__tests__/parse-fast.test.d.ts +9 -0
  133. package/dist/__tests__/parse-fast.test.d.ts.map +1 -0
  134. package/dist/__tests__/parse-fast.test.js +114 -0
  135. package/dist/__tests__/parse-fast.test.js.map +1 -0
  136. package/dist/__tests__/rules/_helpers.d.ts +18 -0
  137. package/dist/__tests__/rules/_helpers.d.ts.map +1 -0
  138. package/dist/__tests__/rules/_helpers.js +62 -0
  139. package/dist/__tests__/rules/_helpers.js.map +1 -0
  140. package/dist/__tests__/rules/duplicated-function-body.test.d.ts +5 -0
  141. package/dist/__tests__/rules/duplicated-function-body.test.d.ts.map +1 -0
  142. package/dist/__tests__/rules/duplicated-function-body.test.js +39 -0
  143. package/dist/__tests__/rules/duplicated-function-body.test.js.map +1 -0
  144. package/dist/__tests__/rules/orphan-subtree.test.d.ts +5 -0
  145. package/dist/__tests__/rules/orphan-subtree.test.d.ts.map +1 -0
  146. package/dist/__tests__/rules/orphan-subtree.test.js +75 -0
  147. package/dist/__tests__/rules/orphan-subtree.test.js.map +1 -0
  148. package/dist/__tests__/rules/rule-hints-integration.test.d.ts +20 -0
  149. package/dist/__tests__/rules/rule-hints-integration.test.d.ts.map +1 -0
  150. package/dist/__tests__/rules/rule-hints-integration.test.js +279 -0
  151. package/dist/__tests__/rules/rule-hints-integration.test.js.map +1 -0
  152. package/dist/__tests__/tool-register.test.d.ts +16 -0
  153. package/dist/__tests__/tool-register.test.d.ts.map +1 -0
  154. package/dist/__tests__/tool-register.test.js +210 -0
  155. package/dist/__tests__/tool-register.test.js.map +1 -0
  156. package/dist/__tests__/value-reference-unit.test.d.ts +13 -0
  157. package/dist/__tests__/value-reference-unit.test.d.ts.map +1 -0
  158. package/dist/__tests__/value-reference-unit.test.js +226 -0
  159. package/dist/__tests__/value-reference-unit.test.js.map +1 -0
  160. package/dist/__tests__/value-reference.test.d.ts +15 -0
  161. package/dist/__tests__/value-reference.test.d.ts.map +1 -0
  162. package/dist/__tests__/value-reference.test.js +115 -0
  163. package/dist/__tests__/value-reference.test.js.map +1 -0
  164. package/dist/__tests__/walk-fast.test.d.ts +8 -0
  165. package/dist/__tests__/walk-fast.test.d.ts.map +1 -0
  166. package/dist/__tests__/walk-fast.test.js +51 -0
  167. package/dist/__tests__/walk-fast.test.js.map +1 -0
  168. package/dist/__tests__/walk-reexports.test.d.ts +7 -0
  169. package/dist/__tests__/walk-reexports.test.d.ts.map +1 -0
  170. package/dist/__tests__/walk-reexports.test.js +79 -0
  171. package/dist/__tests__/walk-reexports.test.js.map +1 -0
  172. package/dist/cache-key.d.ts +41 -0
  173. package/dist/cache-key.d.ts.map +1 -0
  174. package/dist/cache-key.js +94 -0
  175. package/dist/cache-key.js.map +1 -0
  176. package/dist/discover.d.ts +25 -0
  177. package/dist/discover.d.ts.map +1 -0
  178. package/dist/discover.js +124 -0
  179. package/dist/discover.js.map +1 -0
  180. package/dist/edge-helpers/cross-package-context.d.ts +34 -0
  181. package/dist/edge-helpers/cross-package-context.d.ts.map +1 -0
  182. package/dist/edge-helpers/cross-package-context.js +97 -0
  183. package/dist/edge-helpers/cross-package-context.js.map +1 -0
  184. package/dist/edge-helpers/declaration-to-node.d.ts +58 -0
  185. package/dist/edge-helpers/declaration-to-node.d.ts.map +1 -0
  186. package/dist/edge-helpers/declaration-to-node.js +93 -0
  187. package/dist/edge-helpers/declaration-to-node.js.map +1 -0
  188. package/dist/edge-helpers/find-catalog-entry.d.ts +24 -0
  189. package/dist/edge-helpers/find-catalog-entry.d.ts.map +1 -0
  190. package/dist/edge-helpers/find-catalog-entry.js +45 -0
  191. package/dist/edge-helpers/find-catalog-entry.js.map +1 -0
  192. package/dist/edge-helpers/method-target.d.ts +22 -0
  193. package/dist/edge-helpers/method-target.d.ts.map +1 -0
  194. package/dist/edge-helpers/method-target.js +46 -0
  195. package/dist/edge-helpers/method-target.js.map +1 -0
  196. package/dist/edge-helpers/resolution-trace.d.ts +24 -0
  197. package/dist/edge-helpers/resolution-trace.d.ts.map +1 -0
  198. package/dist/edge-helpers/resolution-trace.js +38 -0
  199. package/dist/edge-helpers/resolution-trace.js.map +1 -0
  200. package/dist/edge-helpers/resolve-decl.d.ts +44 -0
  201. package/dist/edge-helpers/resolve-decl.d.ts.map +1 -0
  202. package/dist/edge-helpers/resolve-decl.js +170 -0
  203. package/dist/edge-helpers/resolve-decl.js.map +1 -0
  204. package/dist/edge-helpers/unalias-symbol.d.ts +10 -0
  205. package/dist/edge-helpers/unalias-symbol.d.ts.map +1 -0
  206. package/dist/edge-helpers/unalias-symbol.js +29 -0
  207. package/dist/edge-helpers/unalias-symbol.js.map +1 -0
  208. package/dist/edge-resolvers/__tests__/boundary.test.d.ts +15 -0
  209. package/dist/edge-resolvers/__tests__/boundary.test.d.ts.map +1 -0
  210. package/dist/edge-resolvers/__tests__/boundary.test.js +227 -0
  211. package/dist/edge-resolvers/__tests__/boundary.test.js.map +1 -0
  212. package/dist/edge-resolvers/__tests__/callee-anchor.test.d.ts +10 -0
  213. package/dist/edge-resolvers/__tests__/callee-anchor.test.d.ts.map +1 -0
  214. package/dist/edge-resolvers/__tests__/callee-anchor.test.js +63 -0
  215. package/dist/edge-resolvers/__tests__/callee-anchor.test.js.map +1 -0
  216. package/dist/edge-resolvers/__tests__/syntactic.test.d.ts +12 -0
  217. package/dist/edge-resolvers/__tests__/syntactic.test.d.ts.map +1 -0
  218. package/dist/edge-resolvers/__tests__/syntactic.test.js +215 -0
  219. package/dist/edge-resolvers/__tests__/syntactic.test.js.map +1 -0
  220. package/dist/edge-resolvers/boundary.d.ts +41 -0
  221. package/dist/edge-resolvers/boundary.d.ts.map +1 -0
  222. package/dist/edge-resolvers/boundary.js +130 -0
  223. package/dist/edge-resolvers/boundary.js.map +1 -0
  224. package/dist/edge-resolvers/catalog-fallback.d.ts +13 -0
  225. package/dist/edge-resolvers/catalog-fallback.d.ts.map +1 -0
  226. package/dist/edge-resolvers/catalog-fallback.js +30 -0
  227. package/dist/edge-resolvers/catalog-fallback.js.map +1 -0
  228. package/dist/edge-resolvers/direct-call.d.ts +10 -0
  229. package/dist/edge-resolvers/direct-call.d.ts.map +1 -0
  230. package/dist/edge-resolvers/direct-call.js +45 -0
  231. package/dist/edge-resolvers/direct-call.js.map +1 -0
  232. package/dist/edge-resolvers/jsx-element.d.ts +16 -0
  233. package/dist/edge-resolvers/jsx-element.d.ts.map +1 -0
  234. package/dist/edge-resolvers/jsx-element.js +67 -0
  235. package/dist/edge-resolvers/jsx-element.js.map +1 -0
  236. package/dist/edge-resolvers/new-expression.d.ts +11 -0
  237. package/dist/edge-resolvers/new-expression.d.ts.map +1 -0
  238. package/dist/edge-resolvers/new-expression.js +56 -0
  239. package/dist/edge-resolvers/new-expression.js.map +1 -0
  240. package/dist/edge-resolvers/polymorphic.d.ts +8 -0
  241. package/dist/edge-resolvers/polymorphic.d.ts.map +1 -0
  242. package/dist/edge-resolvers/polymorphic.js +57 -0
  243. package/dist/edge-resolvers/polymorphic.js.map +1 -0
  244. package/dist/edge-resolvers/property-access.d.ts +10 -0
  245. package/dist/edge-resolvers/property-access.d.ts.map +1 -0
  246. package/dist/edge-resolvers/property-access.js +56 -0
  247. package/dist/edge-resolvers/property-access.js.map +1 -0
  248. package/dist/edge-resolvers/syntactic.d.ts +105 -0
  249. package/dist/edge-resolvers/syntactic.d.ts.map +1 -0
  250. package/dist/edge-resolvers/syntactic.js +294 -0
  251. package/dist/edge-resolvers/syntactic.js.map +1 -0
  252. package/dist/edge-resolvers/types.d.ts +37 -0
  253. package/dist/edge-resolvers/types.d.ts.map +1 -0
  254. package/dist/edge-resolvers/types.js +10 -0
  255. package/dist/edge-resolvers/types.js.map +1 -0
  256. package/dist/edges-value-reference.d.ts +26 -0
  257. package/dist/edges-value-reference.d.ts.map +1 -0
  258. package/dist/edges-value-reference.js +138 -0
  259. package/dist/edges-value-reference.js.map +1 -0
  260. package/dist/edges.d.ts +65 -0
  261. package/dist/edges.d.ts.map +1 -0
  262. package/dist/edges.js +392 -0
  263. package/dist/edges.js.map +1 -0
  264. package/dist/index.d.ts +47 -0
  265. package/dist/index.d.ts.map +1 -0
  266. package/dist/index.js +346 -0
  267. package/dist/index.js.map +1 -0
  268. package/dist/inventory-helpers/classify-visibility.d.ts +13 -0
  269. package/dist/inventory-helpers/classify-visibility.d.ts.map +1 -0
  270. package/dist/inventory-helpers/classify-visibility.js +56 -0
  271. package/dist/inventory-helpers/classify-visibility.js.map +1 -0
  272. package/dist/inventory-helpers/extract-decorators.d.ts +6 -0
  273. package/dist/inventory-helpers/extract-decorators.d.ts.map +1 -0
  274. package/dist/inventory-helpers/extract-decorators.js +33 -0
  275. package/dist/inventory-helpers/extract-decorators.js.map +1 -0
  276. package/dist/inventory-helpers/extract-params.d.ts +7 -0
  277. package/dist/inventory-helpers/extract-params.d.ts.map +1 -0
  278. package/dist/inventory-helpers/extract-params.js +28 -0
  279. package/dist/inventory-helpers/extract-params.js.map +1 -0
  280. package/dist/inventory-helpers/hash-body.d.ts +43 -0
  281. package/dist/inventory-helpers/hash-body.d.ts.map +1 -0
  282. package/dist/inventory-helpers/hash-body.js +52 -0
  283. package/dist/inventory-helpers/hash-body.js.map +1 -0
  284. package/dist/inventory-helpers/synthesize-name.d.ts +16 -0
  285. package/dist/inventory-helpers/synthesize-name.d.ts.map +1 -0
  286. package/dist/inventory-helpers/synthesize-name.js +17 -0
  287. package/dist/inventory-helpers/synthesize-name.js.map +1 -0
  288. package/dist/inventory-visitors/arrow-function.d.ts +8 -0
  289. package/dist/inventory-visitors/arrow-function.d.ts.map +1 -0
  290. package/dist/inventory-visitors/arrow-function.js +55 -0
  291. package/dist/inventory-visitors/arrow-function.js.map +1 -0
  292. package/dist/inventory-visitors/class-static-init.d.ts +17 -0
  293. package/dist/inventory-visitors/class-static-init.d.ts.map +1 -0
  294. package/dist/inventory-visitors/class-static-init.js +45 -0
  295. package/dist/inventory-visitors/class-static-init.js.map +1 -0
  296. package/dist/inventory-visitors/constructor-declaration.d.ts +7 -0
  297. package/dist/inventory-visitors/constructor-declaration.d.ts.map +1 -0
  298. package/dist/inventory-visitors/constructor-declaration.js +47 -0
  299. package/dist/inventory-visitors/constructor-declaration.js.map +1 -0
  300. package/dist/inventory-visitors/function-declaration.d.ts +7 -0
  301. package/dist/inventory-visitors/function-declaration.d.ts.map +1 -0
  302. package/dist/inventory-visitors/function-declaration.js +59 -0
  303. package/dist/inventory-visitors/function-declaration.js.map +1 -0
  304. package/dist/inventory-visitors/function-expression.d.ts +7 -0
  305. package/dist/inventory-visitors/function-expression.d.ts.map +1 -0
  306. package/dist/inventory-visitors/function-expression.js +56 -0
  307. package/dist/inventory-visitors/function-expression.js.map +1 -0
  308. package/dist/inventory-visitors/getter-setter.d.ts +7 -0
  309. package/dist/inventory-visitors/getter-setter.d.ts.map +1 -0
  310. package/dist/inventory-visitors/getter-setter.js +63 -0
  311. package/dist/inventory-visitors/getter-setter.js.map +1 -0
  312. package/dist/inventory-visitors/method-declaration.d.ts +7 -0
  313. package/dist/inventory-visitors/method-declaration.d.ts.map +1 -0
  314. package/dist/inventory-visitors/method-declaration.js +75 -0
  315. package/dist/inventory-visitors/method-declaration.js.map +1 -0
  316. package/dist/inventory-visitors/module-init.d.ts +15 -0
  317. package/dist/inventory-visitors/module-init.d.ts.map +1 -0
  318. package/dist/inventory-visitors/module-init.js +40 -0
  319. package/dist/inventory-visitors/module-init.js.map +1 -0
  320. package/dist/inventory-visitors/types.d.ts +26 -0
  321. package/dist/inventory-visitors/types.d.ts.map +1 -0
  322. package/dist/inventory-visitors/types.js +14 -0
  323. package/dist/inventory-visitors/types.js.map +1 -0
  324. package/dist/normalize-project-dir.d.ts +14 -0
  325. package/dist/normalize-project-dir.d.ts.map +1 -0
  326. package/dist/normalize-project-dir.js +36 -0
  327. package/dist/normalize-project-dir.js.map +1 -0
  328. package/dist/parse-fast.d.ts +41 -0
  329. package/dist/parse-fast.d.ts.map +1 -0
  330. package/dist/parse-fast.js +91 -0
  331. package/dist/parse-fast.js.map +1 -0
  332. package/dist/parse.d.ts +42 -0
  333. package/dist/parse.d.ts.map +1 -0
  334. package/dist/parse.js +75 -0
  335. package/dist/parse.js.map +1 -0
  336. package/dist/test-file.d.ts +7 -0
  337. package/dist/test-file.d.ts.map +1 -0
  338. package/dist/test-file.js +42 -0
  339. package/dist/test-file.js.map +1 -0
  340. package/dist/walk.d.ts +125 -0
  341. package/dist/walk.d.ts.map +1 -0
  342. package/dist/walk.js +393 -0
  343. package/dist/walk.js.map +1 -0
  344. package/package.json +57 -0
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Rule-hints integration tests — covers the F-1 audit fix.
3
+ *
4
+ * The `no-side-effect-path` and `always-throws-branch` rules consult
5
+ * the active adapter's `ruleHints.sideEffectPrimitives` and
6
+ * `ruleHints.throwSyntaxRegex` so per-language fidelity matches the
7
+ * promise in docs/public/40-graph/02-rules-and-gating.md.
8
+ *
9
+ * What these tests cover:
10
+ * - Python `print(...)` is detected as a side-effect when the Python
11
+ * hints are passed; without hints, the TS-shaped fallback would NOT
12
+ * detect it (regression preview of the audit's headline finding).
13
+ * - Rust `panic!(...)` matches the `always-throws-branch` regex when
14
+ * the Rust hints are passed; without hints, the TS-shaped fallback
15
+ * does NOT match it.
16
+ * - TypeScript adapter hints continue to work identically to the
17
+ * previous hardcoded regex (regression check).
18
+ */
19
+ import { alwaysThrowsBranchRule, buildIndexes, noSideEffectPathRule, } from '@opensip-cli/graph/internal';
20
+ import { pythonRuleHints } from '@opensip-cli/graph-python';
21
+ import { rustRuleHints } from '@opensip-cli/graph-rust';
22
+ import { describe, expect, it } from 'vitest';
23
+ import { typescriptGraphAdapter } from '../../index.js';
24
+ import { edge, makeCatalog, occ } from './_helpers.js';
25
+ const exportedDefaults = {
26
+ visibility: 'exported',
27
+ endLine: 20,
28
+ };
29
+ function ed(text, to, discarded) {
30
+ return { ...edge(text, to, discarded), resolution: 'static', confidence: 'high' };
31
+ }
32
+ describe('rule hints — no-side-effect-path', () => {
33
+ it('Python hints: detects print(...) as a side-effect, suppressing the signal', () => {
34
+ // helper transitively reaches print(...) — that is a side-effect
35
+ // with the Python hints, so the candidate is NOT pure-only.
36
+ const sink = occ({
37
+ bodyHash: 'sink',
38
+ simpleName: 'sink',
39
+ ...exportedDefaults,
40
+ calls: [ed('print("hello")', [])],
41
+ });
42
+ const candidate = occ({
43
+ bodyHash: 'cand',
44
+ simpleName: 'maybePure',
45
+ ...exportedDefaults,
46
+ calls: [ed('sink()', ['sink']), ed('sink()', ['sink'])],
47
+ });
48
+ const caller = occ({
49
+ bodyHash: 'caller',
50
+ simpleName: 'caller',
51
+ ...exportedDefaults,
52
+ calls: [ed('maybePure()', ['cand'], true)],
53
+ });
54
+ const catalog = makeCatalog([sink, candidate, caller]);
55
+ const indexes = buildIndexes(catalog);
56
+ // With Python hints — print is recognized as side-effecting.
57
+ const withHints = noSideEffectPathRule.evaluate(catalog, indexes, {}, pythonRuleHints);
58
+ expect(withHints.some((s) => s.message.includes('maybePure'))).toBe(false);
59
+ // Without hints — the TS-shaped fallback regex does NOT match
60
+ // `print(...)`, so the rule (incorrectly) flags maybePure as pure.
61
+ // This is the F-1 finding in miniature.
62
+ const withoutHints = noSideEffectPathRule.evaluate(catalog, indexes, {});
63
+ expect(withoutHints.some((s) => s.message.includes('maybePure'))).toBe(true);
64
+ });
65
+ it('Python hints: detects subprocess.run(...) as a side-effect', () => {
66
+ const sink = occ({
67
+ bodyHash: 'sink',
68
+ simpleName: 'runIt',
69
+ ...exportedDefaults,
70
+ calls: [ed('subprocess.run(["ls"])', [])],
71
+ });
72
+ const candidate = occ({
73
+ bodyHash: 'cand',
74
+ simpleName: 'callsRun',
75
+ ...exportedDefaults,
76
+ calls: [ed('runIt()', ['sink']), ed('runIt()', ['sink'])],
77
+ });
78
+ const caller = occ({
79
+ bodyHash: 'caller',
80
+ simpleName: 'caller',
81
+ ...exportedDefaults,
82
+ calls: [ed('callsRun()', ['cand'], true)],
83
+ });
84
+ const catalog = makeCatalog([sink, candidate, caller]);
85
+ const indexes = buildIndexes(catalog);
86
+ const signals = noSideEffectPathRule.evaluate(catalog, indexes, {}, pythonRuleHints);
87
+ expect(signals.some((s) => s.message.includes('callsRun'))).toBe(false);
88
+ });
89
+ it('Rust hints: detects println!(...) as a side-effect', () => {
90
+ const sink = occ({
91
+ bodyHash: 'sink',
92
+ simpleName: 'logIt',
93
+ ...exportedDefaults,
94
+ calls: [ed('println!("hi")', [])],
95
+ });
96
+ const candidate = occ({
97
+ bodyHash: 'cand',
98
+ simpleName: 'shoutsHello',
99
+ ...exportedDefaults,
100
+ calls: [ed('logIt()', ['sink']), ed('logIt()', ['sink'])],
101
+ });
102
+ const caller = occ({
103
+ bodyHash: 'caller',
104
+ simpleName: 'caller',
105
+ ...exportedDefaults,
106
+ calls: [ed('shoutsHello()', ['cand'], true)],
107
+ });
108
+ const catalog = makeCatalog([sink, candidate, caller]);
109
+ const indexes = buildIndexes(catalog);
110
+ const signals = noSideEffectPathRule.evaluate(catalog, indexes, {}, rustRuleHints);
111
+ expect(signals.some((s) => s.message.includes('shoutsHello'))).toBe(false);
112
+ });
113
+ it('TypeScript hints: console.log still detected (regression check)', () => {
114
+ const sink = occ({
115
+ bodyHash: 'sink',
116
+ simpleName: 'sink',
117
+ ...exportedDefaults,
118
+ calls: [ed('console.log("hi")', [])],
119
+ });
120
+ const candidate = occ({
121
+ bodyHash: 'cand',
122
+ simpleName: 'tsSink',
123
+ ...exportedDefaults,
124
+ calls: [ed('sink()', ['sink']), ed('sink()', ['sink'])],
125
+ });
126
+ const caller = occ({
127
+ bodyHash: 'caller',
128
+ simpleName: 'caller',
129
+ ...exportedDefaults,
130
+ calls: [ed('tsSink()', ['cand'], true)],
131
+ });
132
+ const catalog = makeCatalog([sink, candidate, caller]);
133
+ const indexes = buildIndexes(catalog);
134
+ const signals = noSideEffectPathRule.evaluate(catalog, indexes, {}, typescriptGraphAdapter.ruleHints);
135
+ // console.log is a TS side-effect primitive — so tsSink isn't
136
+ // flagged as pure.
137
+ expect(signals.some((s) => s.message.includes('tsSink'))).toBe(false);
138
+ });
139
+ it('No hints: TS-shaped fallback still detects console.log (regression check)', () => {
140
+ const sink = occ({
141
+ bodyHash: 'sink',
142
+ simpleName: 'sink',
143
+ ...exportedDefaults,
144
+ calls: [ed('console.log("hi")', [])],
145
+ });
146
+ const candidate = occ({
147
+ bodyHash: 'cand',
148
+ simpleName: 'tsSink',
149
+ ...exportedDefaults,
150
+ calls: [ed('sink()', ['sink']), ed('sink()', ['sink'])],
151
+ });
152
+ const caller = occ({
153
+ bodyHash: 'caller',
154
+ simpleName: 'caller',
155
+ ...exportedDefaults,
156
+ calls: [ed('tsSink()', ['cand'], true)],
157
+ });
158
+ const catalog = makeCatalog([sink, candidate, caller]);
159
+ const indexes = buildIndexes(catalog);
160
+ const signals = noSideEffectPathRule.evaluate(catalog, indexes, {});
161
+ expect(signals.some((s) => s.message.includes('tsSink'))).toBe(false);
162
+ });
163
+ it('Empty sideEffectPrimitives array falls through to TS fallback regex', () => {
164
+ // Adapter that supplies an empty list — treat as "no hint" so the
165
+ // TS-shaped fallback runs.
166
+ const sink = occ({
167
+ bodyHash: 'sink',
168
+ simpleName: 'sink',
169
+ ...exportedDefaults,
170
+ calls: [ed('console.log("x")', [])],
171
+ });
172
+ const candidate = occ({
173
+ bodyHash: 'cand',
174
+ simpleName: 'fallback',
175
+ ...exportedDefaults,
176
+ calls: [ed('sink()', ['sink']), ed('sink()', ['sink'])],
177
+ });
178
+ const caller = occ({
179
+ bodyHash: 'caller',
180
+ simpleName: 'caller',
181
+ ...exportedDefaults,
182
+ calls: [ed('fallback()', ['cand'], true)],
183
+ });
184
+ const catalog = makeCatalog([sink, candidate, caller]);
185
+ const indexes = buildIndexes(catalog);
186
+ const signals = noSideEffectPathRule.evaluate(catalog, indexes, {}, { sideEffectPrimitives: [] });
187
+ // TS fallback applied — console.log detected — fallback NOT flagged.
188
+ expect(signals.some((s) => s.message.includes('fallback'))).toBe(false);
189
+ });
190
+ });
191
+ describe('rule hints — always-throws-branch', () => {
192
+ it('Python hints: matches `raise SomeError(...)` shape', () => {
193
+ const a = occ({
194
+ bodyHash: 'a',
195
+ simpleName: 'pyFail',
196
+ calls: [edge('raise ValueError("nope")'), edge('raise RuntimeError("nope")')],
197
+ });
198
+ const catalog = makeCatalog([a]);
199
+ const indexes = buildIndexes(catalog);
200
+ const signals = alwaysThrowsBranchRule.evaluate(catalog, indexes, {}, pythonRuleHints);
201
+ expect(signals).toHaveLength(1);
202
+ expect(signals[0]?.message).toContain('pyFail');
203
+ });
204
+ it('Python hints: bare `raise` (no identifier) matches the regex', () => {
205
+ const a = occ({
206
+ bodyHash: 'a',
207
+ simpleName: 'rethrow',
208
+ calls: [edge('raise')],
209
+ });
210
+ const catalog = makeCatalog([a]);
211
+ const indexes = buildIndexes(catalog);
212
+ const signals = alwaysThrowsBranchRule.evaluate(catalog, indexes, {}, pythonRuleHints);
213
+ expect(signals).toHaveLength(1);
214
+ });
215
+ it('Rust hints: matches `panic!(...)` shape', () => {
216
+ const a = occ({
217
+ bodyHash: 'a',
218
+ simpleName: 'rsFail',
219
+ calls: [edge('panic!("boom")'), edge('panic!("nope")')],
220
+ });
221
+ const catalog = makeCatalog([a]);
222
+ const indexes = buildIndexes(catalog);
223
+ const signals = alwaysThrowsBranchRule.evaluate(catalog, indexes, {}, rustRuleHints);
224
+ expect(signals).toHaveLength(1);
225
+ expect(signals[0]?.message).toContain('rsFail');
226
+ });
227
+ it('Rust hints: TS `throw new Error(...)` does NOT match Rust regex', () => {
228
+ const a = occ({
229
+ bodyHash: 'a',
230
+ simpleName: 'tsShape',
231
+ calls: [edge('throw new Error("hi")')],
232
+ });
233
+ const catalog = makeCatalog([a]);
234
+ const indexes = buildIndexes(catalog);
235
+ const signals = alwaysThrowsBranchRule.evaluate(catalog, indexes, {}, rustRuleHints);
236
+ // Rust regex doesn't match the TS shape — no signal.
237
+ expect(signals).toHaveLength(0);
238
+ });
239
+ it('Without hints: TS-shaped fallback regex still matches `throw new Error(...)`', () => {
240
+ const a = occ({
241
+ bodyHash: 'a',
242
+ simpleName: 'fail',
243
+ calls: [edge('throw new Error("boom")'), edge('throw new TypeError("nope")')],
244
+ });
245
+ const catalog = makeCatalog([a]);
246
+ const indexes = buildIndexes(catalog);
247
+ const signals = alwaysThrowsBranchRule.evaluate(catalog, indexes, {});
248
+ expect(signals).toHaveLength(1);
249
+ expect(signals[0]?.message).toContain('fail');
250
+ });
251
+ it('Without hints: Python `raise ...` does NOT match TS fallback regex (illustrates F-1)', () => {
252
+ // This is the F-1 finding: a Python project running through the
253
+ // engine without hints would never flag `raise SomeError(...)` as
254
+ // an always-throws helper, because the TS-shaped fallback expects
255
+ // `throw`. The Python hint above closes that gap.
256
+ const a = occ({
257
+ bodyHash: 'a',
258
+ simpleName: 'pyHelper',
259
+ calls: [edge('raise ValueError("x")')],
260
+ });
261
+ const catalog = makeCatalog([a]);
262
+ const indexes = buildIndexes(catalog);
263
+ const signals = alwaysThrowsBranchRule.evaluate(catalog, indexes, {});
264
+ expect(signals).toHaveLength(0);
265
+ });
266
+ it('TypeScript hints: regression check — `throw new Error(...)` still flagged', () => {
267
+ const a = occ({
268
+ bodyHash: 'a',
269
+ simpleName: 'tsFail',
270
+ calls: [edge('throw new Error("boom")'), edge('throw new TypeError("x")')],
271
+ });
272
+ const catalog = makeCatalog([a]);
273
+ const indexes = buildIndexes(catalog);
274
+ const signals = alwaysThrowsBranchRule.evaluate(catalog, indexes, {}, typescriptGraphAdapter.ruleHints);
275
+ expect(signals).toHaveLength(1);
276
+ expect(signals[0]?.message).toContain('tsFail');
277
+ });
278
+ });
279
+ //# sourceMappingURL=rule-hints-integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-hints-integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/rules/rule-hints-integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Integration tests for graph's command surface against the real TypeScript
3
+ * adapter.
4
+ *
5
+ * Since release 2.11.0 Phase 5 graph mounts via declarative `commandSpecs`, not
6
+ * the deprecated `register()` hook. The Commander parsing layer (flag wiring,
7
+ * `_args` positionals, choices/required enforcement) is unit-covered in
8
+ * `cli/src/__tests__/mount-command-spec.test.ts`; here we drive the primary
9
+ * `graph` spec's handler directly (exactly what the host invokes post-parse)
10
+ * with the real typescript adapter registered, so the executeGraph / renderLive
11
+ * pipeline runs end-to-end. Positionals ride on the parsed-opts object under the
12
+ * `_args` key (the host convention); graph's sole variadic `[paths...]` is
13
+ * `_args[0]`.
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=tool-register.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-register.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tool-register.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Integration tests for graph's command surface against the real TypeScript
3
+ * adapter.
4
+ *
5
+ * Since release 2.11.0 Phase 5 graph mounts via declarative `commandSpecs`, not
6
+ * the deprecated `register()` hook. The Commander parsing layer (flag wiring,
7
+ * `_args` positionals, choices/required enforcement) is unit-covered in
8
+ * `cli/src/__tests__/mount-command-spec.test.ts`; here we drive the primary
9
+ * `graph` spec's handler directly (exactly what the host invokes post-parse)
10
+ * with the real typescript adapter registered, so the executeGraph / renderLive
11
+ * pipeline runs end-to-end. Positionals ride on the parsed-opts object under the
12
+ * `_args` key (the host convention); graph's sole variadic `[paths...]` is
13
+ * `_args[0]`.
14
+ */
15
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
16
+ import { tmpdir } from 'node:os';
17
+ import { join } from 'node:path';
18
+ import { enterScope, RunScope } from '@opensip-cli/core';
19
+ import { currentAdapterRegistry, graphTool } from '@opensip-cli/graph';
20
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
21
+ import { typescriptGraphAdapter } from '../index.js';
22
+ /** Resolve a graph command-spec by name (the host mounts these). */
23
+ function graphSpec(name) {
24
+ const spec = (graphTool.commandSpecs ?? []).find((s) => s.name === name);
25
+ if (spec === undefined)
26
+ throw new Error(`graphTool exposes no command spec '${name}'`);
27
+ return spec;
28
+ }
29
+ /** The primary `graph` command handler (host invokes `handler(opts, ctx)`). */
30
+ function graphHandler() {
31
+ return graphSpec('graph').handler;
32
+ }
33
+ beforeEach(() => {
34
+ // Item 1: graph registries are per-RunScope. Construct a scope with the graph
35
+ // subscope and register the typescript adapter into it so the handler reaches
36
+ // pickAdapter() through a live scope.
37
+ const scope = new RunScope();
38
+ Object.assign(scope, graphTool.contributeScope?.() ?? {});
39
+ enterScope(scope);
40
+ currentAdapterRegistry().register(typescriptGraphAdapter);
41
+ });
42
+ function makeCli(overrides = {}) {
43
+ const project = {
44
+ cwd: '/test',
45
+ cwdExplicit: false,
46
+ projectRoot: '/test',
47
+ configPath: undefined,
48
+ walkedUp: 0,
49
+ scope: 'none',
50
+ };
51
+ return {
52
+ scope: new RunScope({ projectContext: project }),
53
+ render: vi.fn(() => Promise.resolve()),
54
+ registerLiveView: vi.fn(),
55
+ renderLive: vi.fn(() => Promise.resolve()),
56
+ maybeOpenReport: vi.fn(() => Promise.resolve()),
57
+ logger: { info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() },
58
+ setExitCode: vi.fn(),
59
+ emitJson: vi.fn(),
60
+ emitRaw: vi.fn(),
61
+ emitEnvelope: vi.fn(),
62
+ emitError: vi.fn(),
63
+ deliverSignals: vi.fn(() => Promise.resolve({ cloudAccepted: 0 })),
64
+ writeSarif: vi.fn(() => Promise.resolve()),
65
+ saveBaseline: vi.fn(() => Promise.resolve()),
66
+ compareBaseline: vi.fn(() => Promise.resolve({ added: [], resolved: [], unchanged: [], degraded: false })),
67
+ exportBaselineSarif: vi.fn(() => Promise.resolve()),
68
+ exportBaselineFingerprints: vi.fn(() => Promise.resolve()),
69
+ toolState: {
70
+ get: () => Promise.resolve(undefined),
71
+ put: () => Promise.resolve(),
72
+ delete: () => Promise.resolve(),
73
+ list: () => Promise.resolve([]),
74
+ },
75
+ runSession: {
76
+ timing: {
77
+ startedAt: new Date().toISOString(),
78
+ startedAtEpochMs: Date.now(),
79
+ elapsedMs: () => 0,
80
+ snapshot: () => ({
81
+ startedAt: new Date().toISOString(),
82
+ completedAt: new Date().toISOString(),
83
+ durationMs: 0,
84
+ }),
85
+ complete: () => ({
86
+ startedAt: new Date().toISOString(),
87
+ completedAt: new Date().toISOString(),
88
+ durationMs: 0,
89
+ }),
90
+ },
91
+ },
92
+ ...overrides,
93
+ };
94
+ }
95
+ describe('graph command spec', () => {
96
+ it('declares a `graph` command described as static call-graph analysis', () => {
97
+ const spec = graphSpec('graph');
98
+ expect(spec.name).toBe('graph');
99
+ expect(spec.description).toContain('static call-graph');
100
+ // The handler owns its full output surface (TTY-vs-static + egress).
101
+ expect(spec.output).toBe('raw-stream');
102
+ });
103
+ it('declares the documented option set on the graph command', () => {
104
+ const spec = graphSpec('graph');
105
+ // Common flags from the ADR-0021 registry (the CommonFlagKey form).
106
+ expect([...spec.commonFlags]).toEqual(expect.arrayContaining(['cwd', 'json', 'reportTo', 'debug']));
107
+ // Tool-specific options.
108
+ const optionFlags = (spec.options ?? []).map((o) => o.flag);
109
+ expect(optionFlags).toContain('--no-cache');
110
+ expect(optionFlags).toContain('--gate-save');
111
+ expect(optionFlags).toContain('--gate-compare');
112
+ // --baseline was removed (audit P1.2): it was mounted + documented but had
113
+ // zero readers. Guard against re-adding a vestigial no-op flag.
114
+ expect(optionFlags).not.toContain('--baseline');
115
+ });
116
+ it('--concurrency parses as a number via the declared parse reducer', () => {
117
+ const spec = graphSpec('graph');
118
+ const concurrency = (spec.options ?? []).find((o) => o.flag === '--concurrency');
119
+ expect(concurrency?.parse).toBeTypeOf('function');
120
+ expect(concurrency?.parse?.('4', undefined)).toBe(4);
121
+ });
122
+ });
123
+ describe('graph handler — end-to-end via the real typescript adapter', () => {
124
+ it('runs --json against a real fixture and exits with code 0', async () => {
125
+ const dir = mkdtempSync(join(tmpdir(), 'graph-tool-action-'));
126
+ try {
127
+ mkdirSync(dir, { recursive: true });
128
+ writeFileSync(join(dir, 'tsconfig.json'), JSON.stringify({
129
+ compilerOptions: {
130
+ target: 'ES2022',
131
+ module: 'Node16',
132
+ moduleResolution: 'Node16',
133
+ strict: true,
134
+ esModuleInterop: true,
135
+ skipLibCheck: true,
136
+ rootDir: '.',
137
+ },
138
+ include: ['**/*.ts'],
139
+ }), 'utf8');
140
+ writeFileSync(join(dir, 'index.ts'), `export function x(): number { return 1; }\n`, 'utf8');
141
+ // Capture stdout so we don't pollute test output.
142
+ let stdout = '';
143
+ const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
144
+ stdout += typeof chunk === 'string' ? chunk : String(chunk);
145
+ return true;
146
+ });
147
+ const setExitCode = vi.fn();
148
+ const cli = makeCli({
149
+ setExitCode,
150
+ // Mirror the composition root's `emitEnvelope` seam (JSON to stdout).
151
+ emitError: vi.fn(),
152
+ emitEnvelope: vi.fn((envelope) => {
153
+ process.stdout.write(`${JSON.stringify(envelope)}\n`);
154
+ }),
155
+ });
156
+ try {
157
+ // With a positional path, the heap preflight is skipped — important
158
+ // because preflight could re-exec the test process. The variadic
159
+ // positional rides on `_args[0]`.
160
+ await graphHandler()({ cwd: dir, json: true, _args: [[dir]] }, cli);
161
+ }
162
+ finally {
163
+ stdoutSpy.mockRestore();
164
+ }
165
+ const parsed = JSON.parse(stdout);
166
+ expect(parsed.tool).toBe('graph');
167
+ expect(parsed.schemaVersion).toBe(2);
168
+ expect(setExitCode).toHaveBeenCalledWith(0);
169
+ }
170
+ finally {
171
+ rmSync(dir, { recursive: true, force: true });
172
+ }
173
+ });
174
+ it('interactive --exact path delegates to cli.renderLive', async () => {
175
+ // The Ink live view drives the EXACT engine, so it is eligible only under
176
+ // `--exact` on a TTY (ADR-0032: sharded is the default and routes to the
177
+ // static path). The fixture is tiny so heap preflight no-ops (file count
178
+ // < 1000).
179
+ const dir = mkdtempSync(join(tmpdir(), 'graph-tool-action-live-'));
180
+ try {
181
+ mkdirSync(dir, { recursive: true });
182
+ writeFileSync(join(dir, 'tsconfig.json'), JSON.stringify({
183
+ compilerOptions: { target: 'ES2022', module: 'Node16' },
184
+ include: ['**/*.ts'],
185
+ }), 'utf8');
186
+ writeFileSync(join(dir, 'index.ts'), 'export function x(): number { return 1; }\n', 'utf8');
187
+ const renderLive = vi.fn(() => Promise.resolve());
188
+ const cli = makeCli({ renderLive });
189
+ // --exact (the live view drives the exact engine), no
190
+ // --json/--gate-*/--report-to/positional: this is the interactive live
191
+ // path, which delegates to renderLive — but only on a TTY (a non-TTY run
192
+ // falls back to the static render seam). vitest's stdout is not a TTY, so
193
+ // force it for this assertion.
194
+ const prevTTY = process.stdout.isTTY;
195
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
196
+ try {
197
+ await graphHandler()({ cwd: dir, exact: true, _args: [[]] }, cli);
198
+ }
199
+ finally {
200
+ Object.defineProperty(process.stdout, 'isTTY', { value: prevTTY, configurable: true });
201
+ }
202
+ expect(renderLive).toHaveBeenCalledOnce();
203
+ expect(renderLive).toHaveBeenCalledWith('graph', expect.objectContaining({ cwd: dir }));
204
+ }
205
+ finally {
206
+ rmSync(dir, { recursive: true, force: true });
207
+ }
208
+ });
209
+ });
210
+ //# sourceMappingURL=tool-register.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-register.test.js","sourceRoot":"","sources":["../../src/__tests__/tool-register.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Unit tests for the value-reference predicates + resolvers
3
+ * (edges-value-reference.ts).
4
+ *
5
+ * `isValueReference` is a pure AST predicate: an Identifier is a value
6
+ * reference unless it is a structural name (declaration/property/type/
7
+ * import/export name) or a call/new/JSX target. These tests craft each
8
+ * structural and call-target shape so every short-circuit branch is
9
+ * exercised. `resolveValueReference` is then driven against a real
10
+ * program for the no-symbol and class-constructor declaration branches.
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=value-reference-unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-reference-unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/value-reference-unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}