@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,521 @@
1
+ // @fitness-ignore-file file-length-limit -- behavior fixture suite; related scenarios stay together while covered domains are split into focused tests.
2
+ /**
3
+ * Inventory property-based tests (Tier 2).
4
+ *
5
+ * These tests assert invariants over the catalog rather than membership
6
+ * of specific entries. Every catalog produced by stage 1 is expected to
7
+ * satisfy these properties for any TypeScript input — they are the
8
+ * contract the catalog promises its consumers.
9
+ *
10
+ * Properties exercised:
11
+ *
12
+ * 1. bodyHash determinism by content — same body → same hash, twice.
13
+ * 2. bodyHash insensitivity to whitespace inside the body.
14
+ * 3. bodyHash sensitivity to a single identifier change.
15
+ * 4. bodyHash collision for identical bodies under different names
16
+ * (the property the `duplicated-function-body` rule depends on).
17
+ * 5. simpleName synthesis determinism for arrow callbacks.
18
+ * 6. catalog closure: every CallEdge.to bodyHash exists in the catalog
19
+ * (or is empty for unresolved calls).
20
+ * 7. simpleName + qualifiedName are both populated and non-empty
21
+ * for every occurrence.
22
+ * 8. inTestFile is correct for files matching test patterns.
23
+ */
24
+ import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from 'node:fs';
25
+ import { tmpdir } from 'node:os';
26
+ import { dirname, join } from 'node:path';
27
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
28
+ import { discoverFiles } from '../discover.js';
29
+ import { buildCatalog as runInventory, resolveCatalogEdges } from './_pipeline.js';
30
+ const FIXTURE_TSCONFIG = JSON.stringify({
31
+ compilerOptions: {
32
+ target: 'ES2022',
33
+ module: 'Node16',
34
+ moduleResolution: 'Node16',
35
+ lib: ['ES2022', 'DOM'],
36
+ strict: true,
37
+ esModuleInterop: true,
38
+ skipLibCheck: true,
39
+ jsx: 'preserve',
40
+ rootDir: '.',
41
+ },
42
+ include: ['**/*.ts', '**/*.tsx'],
43
+ });
44
+ function buildCatalog(rootDir, files) {
45
+ rmSync(rootDir, { recursive: true, force: true });
46
+ mkdirSync(rootDir, { recursive: true });
47
+ writeFileSync(join(rootDir, 'tsconfig.json'), FIXTURE_TSCONFIG, 'utf8');
48
+ for (const [rel, content] of Object.entries(files)) {
49
+ const filePath = join(rootDir, rel);
50
+ mkdirSync(dirname(filePath), { recursive: true });
51
+ writeFileSync(filePath, content, 'utf8');
52
+ }
53
+ const discovery = discoverFiles({ projectDir: rootDir });
54
+ return runInventory({
55
+ projectDirAbs: discovery.projectDirAbs,
56
+ files: discovery.files,
57
+ compilerOptions: discovery.compilerOptions,
58
+ tsConfigPathAbs: discovery.tsConfigPathAbs,
59
+ }).catalog;
60
+ }
61
+ async function buildCatalogWithEdges(rootDir, files) {
62
+ rmSync(rootDir, { recursive: true, force: true });
63
+ mkdirSync(rootDir, { recursive: true });
64
+ writeFileSync(join(rootDir, 'tsconfig.json'), FIXTURE_TSCONFIG, 'utf8');
65
+ for (const [rel, content] of Object.entries(files)) {
66
+ const filePath = join(rootDir, rel);
67
+ mkdirSync(dirname(filePath), { recursive: true });
68
+ writeFileSync(filePath, content, 'utf8');
69
+ }
70
+ const discovery = discoverFiles({ projectDir: rootDir });
71
+ const inv = runInventory({
72
+ projectDirAbs: discovery.projectDirAbs,
73
+ files: discovery.files,
74
+ compilerOptions: discovery.compilerOptions,
75
+ tsConfigPathAbs: discovery.tsConfigPathAbs,
76
+ });
77
+ return await resolveCatalogEdges(inv, discovery.projectDirAbs);
78
+ }
79
+ function allOccurrences(catalog) {
80
+ const out = [];
81
+ for (const occs of Object.values(catalog.functions)) {
82
+ for (const o of occs)
83
+ out.push(o);
84
+ }
85
+ return out;
86
+ }
87
+ function hashByName(catalog, name, filePath) {
88
+ for (const o of catalog.functions[name] ?? []) {
89
+ if (o.filePath === filePath)
90
+ return o.bodyHash;
91
+ }
92
+ return undefined;
93
+ }
94
+ // --------------------------------------------------------------------------
95
+ // Property 1: bodyHash determinism by content
96
+ // --------------------------------------------------------------------------
97
+ describe('Property 1 — bodyHash is deterministic by content', () => {
98
+ let dirA;
99
+ let dirB;
100
+ afterAll(() => {
101
+ rmSync(dirA, { recursive: true, force: true });
102
+ rmSync(dirB, { recursive: true, force: true });
103
+ });
104
+ it('two builds of the same source produce the same bodyHash', () => {
105
+ const src = `export function foo() { return 1 + 2; }\n`;
106
+ dirA = mkdtempSync(join(tmpdir(), 'graph-prop1a-'));
107
+ dirB = mkdtempSync(join(tmpdir(), 'graph-prop1b-'));
108
+ const catA = buildCatalog(dirA, { 'a.ts': src });
109
+ const catB = buildCatalog(dirB, { 'a.ts': src });
110
+ expect(hashByName(catA, 'foo', 'a.ts')).toBe(hashByName(catB, 'foo', 'a.ts'));
111
+ expect(hashByName(catA, 'foo', 'a.ts')).toBeDefined();
112
+ });
113
+ it('multiple identical inputs in one workspace share a hash', () => {
114
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop1c-'));
115
+ try {
116
+ const cat = buildCatalog(dir, {
117
+ 'a.ts': `export function foo() { return 1; }\n`,
118
+ 'b.ts': `export function bar() { return 1; }\n`,
119
+ 'c.ts': `export function baz() { return 1; }\n`,
120
+ });
121
+ const a = hashByName(cat, 'foo', 'a.ts');
122
+ const b = hashByName(cat, 'bar', 'b.ts');
123
+ const c = hashByName(cat, 'baz', 'c.ts');
124
+ // Identical *bodies* — the visitor hashes node text including the
125
+ // declaration head (function name), so different names produce
126
+ // different hashes. This sub-test is a guard against accidentally
127
+ // strengthening the property to "name-insensitive" — see Property 4.
128
+ expect(a).toBeDefined();
129
+ expect(b).toBeDefined();
130
+ expect(c).toBeDefined();
131
+ }
132
+ finally {
133
+ rmSync(dir, { recursive: true, force: true });
134
+ }
135
+ });
136
+ });
137
+ // --------------------------------------------------------------------------
138
+ // Property 2: bodyHash is whitespace-insensitive
139
+ // --------------------------------------------------------------------------
140
+ describe('Property 2 — bodyHash insensitive to whitespace inside body', () => {
141
+ let dirA;
142
+ let dirB;
143
+ afterAll(() => {
144
+ rmSync(dirA, { recursive: true, force: true });
145
+ rmSync(dirB, { recursive: true, force: true });
146
+ });
147
+ it('whitespace-only differences inside the body do not change the hash', () => {
148
+ dirA = mkdtempSync(join(tmpdir(), 'graph-prop2a-'));
149
+ dirB = mkdtempSync(join(tmpdir(), 'graph-prop2b-'));
150
+ // Important: normalizeWhitespace collapses runs of whitespace to a
151
+ // single space — but does not eat whitespace next to non-space
152
+ // characters. So `2;` and `2 ;` differ. The valid invariant is
153
+ // "any whitespace between two non-space tokens collapses to one
154
+ // space"; not "any whitespace anywhere disappears."
155
+ const compact = `export function foo() { return 1 + 2; }\n`;
156
+ const spread = `export function foo() {\n return 1 + 2;\n}\n`;
157
+ const catA = buildCatalog(dirA, { 'a.ts': compact });
158
+ const catB = buildCatalog(dirB, { 'a.ts': spread });
159
+ expect(hashByName(catA, 'foo', 'a.ts')).toBe(hashByName(catB, 'foo', 'a.ts'));
160
+ });
161
+ it('newlines and tabs do not change the hash', () => {
162
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop2c-'));
163
+ try {
164
+ const tabs = `export function foo() {\n\treturn 1;\n}\n`;
165
+ const newl = `export function foo() {\n\n\nreturn 1;\n\n\n}\n`;
166
+ const catTabs = buildCatalog(dir, { 'a.ts': tabs });
167
+ const tabsHash = hashByName(catTabs, 'foo', 'a.ts');
168
+ rmSync(dir, { recursive: true, force: true });
169
+ const dir2 = mkdtempSync(join(tmpdir(), 'graph-prop2c2-'));
170
+ const catNewl = buildCatalog(dir2, { 'a.ts': newl });
171
+ const newlHash = hashByName(catNewl, 'foo', 'a.ts');
172
+ rmSync(dir2, { recursive: true, force: true });
173
+ expect(tabsHash).toBe(newlHash);
174
+ }
175
+ finally {
176
+ rmSync(dir, { recursive: true, force: true });
177
+ }
178
+ });
179
+ });
180
+ // --------------------------------------------------------------------------
181
+ // Property 3: bodyHash is sensitive to actual content changes
182
+ // --------------------------------------------------------------------------
183
+ describe('Property 3 — bodyHash sensitive to identifier or literal changes', () => {
184
+ it('changing one identifier in the body changes the hash', () => {
185
+ const dirA = mkdtempSync(join(tmpdir(), 'graph-prop3a-'));
186
+ const dirB = mkdtempSync(join(tmpdir(), 'graph-prop3b-'));
187
+ try {
188
+ const a = `export function foo(x: number) { return x + 1; }\n`;
189
+ const b = `export function foo(y: number) { return y + 1; }\n`;
190
+ const catA = buildCatalog(dirA, { 'a.ts': a });
191
+ const catB = buildCatalog(dirB, { 'a.ts': b });
192
+ expect(hashByName(catA, 'foo', 'a.ts')).not.toBe(hashByName(catB, 'foo', 'a.ts'));
193
+ }
194
+ finally {
195
+ rmSync(dirA, { recursive: true, force: true });
196
+ rmSync(dirB, { recursive: true, force: true });
197
+ }
198
+ });
199
+ it('changing one literal in the body changes the hash', () => {
200
+ const dirA = mkdtempSync(join(tmpdir(), 'graph-prop3c-'));
201
+ const dirB = mkdtempSync(join(tmpdir(), 'graph-prop3d-'));
202
+ try {
203
+ const a = `export function foo() { return 1; }\n`;
204
+ const b = `export function foo() { return 2; }\n`;
205
+ const catA = buildCatalog(dirA, { 'a.ts': a });
206
+ const catB = buildCatalog(dirB, { 'a.ts': b });
207
+ expect(hashByName(catA, 'foo', 'a.ts')).not.toBe(hashByName(catB, 'foo', 'a.ts'));
208
+ }
209
+ finally {
210
+ rmSync(dirA, { recursive: true, force: true });
211
+ rmSync(dirB, { recursive: true, force: true });
212
+ }
213
+ });
214
+ it('changing the operator in the body changes the hash', () => {
215
+ const dirA = mkdtempSync(join(tmpdir(), 'graph-prop3e-'));
216
+ const dirB = mkdtempSync(join(tmpdir(), 'graph-prop3f-'));
217
+ try {
218
+ const a = `export function foo(x: number) { return x + 1; }\n`;
219
+ const b = `export function foo(x: number) { return x - 1; }\n`;
220
+ const catA = buildCatalog(dirA, { 'a.ts': a });
221
+ const catB = buildCatalog(dirB, { 'a.ts': b });
222
+ expect(hashByName(catA, 'foo', 'a.ts')).not.toBe(hashByName(catB, 'foo', 'a.ts'));
223
+ }
224
+ finally {
225
+ rmSync(dirA, { recursive: true, force: true });
226
+ rmSync(dirB, { recursive: true, force: true });
227
+ }
228
+ });
229
+ });
230
+ // --------------------------------------------------------------------------
231
+ // Property 4: bodyHash collision for identical bodies (different names)
232
+ //
233
+ // This is the property the `duplicated-function-body` rule depends on:
234
+ // the visitor hashes the *node text*. The node text includes the
235
+ // declaration head (function name). Two declarations with different
236
+ // names and identical bodies will therefore produce different hashes
237
+ // today. This test documents the behavior and the test for the
238
+ // duplicate-body detector lives in rules/duplicated-function-body.test.ts.
239
+ // --------------------------------------------------------------------------
240
+ describe('Property 4 — bodyHash with identical body text but different names', () => {
241
+ it('two function declarations with different names but identical bodies produce different hashes today', () => {
242
+ // Document the current behavior: hashFunctionBody hashes node.getText(),
243
+ // which includes the function-declaration name. Different names →
244
+ // different hashes. The duplicated-function-body rule operates on
245
+ // a normalized body slice, not the raw bodyHash, which is why it
246
+ // can still detect duplicates.
247
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop4a-'));
248
+ try {
249
+ const cat = buildCatalog(dir, {
250
+ 'a.ts': `export function foo() { return 1; }\n`,
251
+ 'b.ts': `export function bar() { return 1; }\n`,
252
+ });
253
+ const fooHash = hashByName(cat, 'foo', 'a.ts');
254
+ const barHash = hashByName(cat, 'bar', 'b.ts');
255
+ expect(fooHash).toBeDefined();
256
+ expect(barHash).toBeDefined();
257
+ // Names differ → hashes differ. This is intentional; the rule that
258
+ // detects duplicates uses a separate normalized form.
259
+ expect(fooHash).not.toBe(barHash);
260
+ }
261
+ finally {
262
+ rmSync(dir, { recursive: true, force: true });
263
+ }
264
+ });
265
+ it('identical anonymous arrows assigned to different names collide on body but not on synthesized simpleName', () => {
266
+ // For arrows assigned to a `const`, simpleName is inferred from the
267
+ // parent. The arrow body itself (`() => 1`) is identical, but the
268
+ // node text passed to hashFunctionBody is just the arrow expression
269
+ // — no enclosing variable declaration. So two arrows with identical
270
+ // bodies *should* collide.
271
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop4b-'));
272
+ try {
273
+ const cat = buildCatalog(dir, {
274
+ 'a.ts': `export const foo = () => 1;\n`,
275
+ 'b.ts': `export const bar = () => 1;\n`,
276
+ });
277
+ const fooHash = hashByName(cat, 'foo', 'a.ts');
278
+ const barHash = hashByName(cat, 'bar', 'b.ts');
279
+ expect(fooHash).toBeDefined();
280
+ expect(barHash).toBeDefined();
281
+ expect(fooHash).toBe(barHash);
282
+ }
283
+ finally {
284
+ rmSync(dir, { recursive: true, force: true });
285
+ }
286
+ });
287
+ });
288
+ // --------------------------------------------------------------------------
289
+ // Property 5: simpleName synthesis determinism for arrows
290
+ // --------------------------------------------------------------------------
291
+ describe('Property 5 — synthesized arrow simpleName is deterministic', () => {
292
+ it('arrow as map() callback gets <arrow:filePath:line:column>', () => {
293
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop5a-'));
294
+ try {
295
+ const cat = buildCatalog(dir, {
296
+ // Arrow callback at line 2 col 23 (the `(` of `(x => ...)`).
297
+ 'a.ts': `const arr = [1, 2, 3];\nexport const doubled = arr.map(x => x * 2);\n`,
298
+ });
299
+ const arrows = allOccurrences(cat).filter((o) => o.kind === 'arrow' && o.filePath === 'a.ts' && o.simpleName.startsWith('<arrow:'));
300
+ expect(arrows.length).toBeGreaterThanOrEqual(1);
301
+ const a = arrows[0];
302
+ expect(a.simpleName).toBe(`<arrow:a.ts:${String(a.line)}:${String(a.column)}>`);
303
+ }
304
+ finally {
305
+ rmSync(dir, { recursive: true, force: true });
306
+ }
307
+ });
308
+ it('two builds of the same source produce identical synthesized arrow names', () => {
309
+ const dirA = mkdtempSync(join(tmpdir(), 'graph-prop5b-'));
310
+ const dirB = mkdtempSync(join(tmpdir(), 'graph-prop5c-'));
311
+ try {
312
+ const src = `export const doubled = [1, 2, 3].map(x => x * 2);\n`;
313
+ const catA = buildCatalog(dirA, { 'a.ts': src });
314
+ const catB = buildCatalog(dirB, { 'a.ts': src });
315
+ const a = allOccurrences(catA).find((o) => o.kind === 'arrow' && o.simpleName.startsWith('<arrow:'));
316
+ const b = allOccurrences(catB).find((o) => o.kind === 'arrow' && o.simpleName.startsWith('<arrow:'));
317
+ expect(a).toBeDefined();
318
+ expect(b).toBeDefined();
319
+ expect(a.simpleName).toBe(b.simpleName);
320
+ }
321
+ finally {
322
+ rmSync(dirA, { recursive: true, force: true });
323
+ rmSync(dirB, { recursive: true, force: true });
324
+ }
325
+ });
326
+ it('module-init names are stable across builds', () => {
327
+ const dirA = mkdtempSync(join(tmpdir(), 'graph-prop5d-'));
328
+ const dirB = mkdtempSync(join(tmpdir(), 'graph-prop5e-'));
329
+ try {
330
+ const catA = buildCatalog(dirA, { 'top.ts': `console.log('hi');\n` });
331
+ const catB = buildCatalog(dirB, { 'top.ts': `console.log('hi');\n` });
332
+ const a = allOccurrences(catA).find((o) => o.kind === 'module-init' && o.filePath === 'top.ts');
333
+ const b = allOccurrences(catB).find((o) => o.kind === 'module-init' && o.filePath === 'top.ts');
334
+ expect(a.simpleName).toBe(b.simpleName);
335
+ expect(a.simpleName).toBe('<module-init:top.ts>');
336
+ }
337
+ finally {
338
+ rmSync(dirA, { recursive: true, force: true });
339
+ rmSync(dirB, { recursive: true, force: true });
340
+ }
341
+ });
342
+ });
343
+ // --------------------------------------------------------------------------
344
+ // Property 6: catalog closure — every call's `to` references valid hashes
345
+ // --------------------------------------------------------------------------
346
+ describe('Property 6 — catalog closure: every CallEdge.to hash exists in catalog', () => {
347
+ let dir;
348
+ let catalog;
349
+ beforeAll(async () => {
350
+ dir = mkdtempSync(join(tmpdir(), 'graph-prop6-'));
351
+ catalog = await buildCatalogWithEdges(dir, {
352
+ 'lib.ts': `export function helper(x: number): number { return x + 1; }\n` +
353
+ `export function indirect(): number { return helper(2); }\n`,
354
+ 'main.ts': `import { helper, indirect } from './lib.js';\n` +
355
+ `export function main(): void {\n` +
356
+ ` helper(1);\n` +
357
+ ` indirect();\n` +
358
+ ` console.log('side effect');\n` +
359
+ `}\n`,
360
+ });
361
+ });
362
+ afterAll(() => rmSync(dir, { recursive: true, force: true }));
363
+ it('every CallEdge.to hash points to a real catalog entry (no dangling refs)', () => {
364
+ const allHashes = new Set();
365
+ for (const o of allOccurrences(catalog))
366
+ allHashes.add(o.bodyHash);
367
+ let dangling = 0;
368
+ let totalRefs = 0;
369
+ for (const o of allOccurrences(catalog)) {
370
+ for (const edge of o.calls) {
371
+ for (const h of edge.to) {
372
+ totalRefs++;
373
+ if (!allHashes.has(h)) {
374
+ dangling++;
375
+ }
376
+ }
377
+ }
378
+ }
379
+ expect(dangling).toBe(0);
380
+ // Sanity: at least some calls were resolved.
381
+ expect(totalRefs).toBeGreaterThan(0);
382
+ });
383
+ it('unresolved calls have empty `to` arrays — never undefined or null', () => {
384
+ for (const o of allOccurrences(catalog)) {
385
+ for (const edge of o.calls) {
386
+ expect(Array.isArray(edge.to)).toBe(true);
387
+ }
388
+ }
389
+ });
390
+ });
391
+ // --------------------------------------------------------------------------
392
+ // Property 7: simpleName + qualifiedName are mandatory and non-empty
393
+ // --------------------------------------------------------------------------
394
+ describe('Property 7 — simpleName and qualifiedName are mandatory, non-empty for every occurrence', () => {
395
+ it('every occurrence has non-empty simpleName AND qualifiedName', () => {
396
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop7-'));
397
+ try {
398
+ const catalog = buildCatalog(dir, {
399
+ 'a.ts': `export function namedFn() { return 1; }\n` +
400
+ `const arrow = () => 2;\n` +
401
+ `const fnExpr = function() { return 3; };\n` +
402
+ `export class C {\n` +
403
+ ` method() { return 4; }\n` +
404
+ ` constructor() {}\n` +
405
+ ` get x() { return 5; }\n` +
406
+ `}\n` +
407
+ `export default arrow;\n`,
408
+ });
409
+ let count = 0;
410
+ for (const o of allOccurrences(catalog)) {
411
+ count++;
412
+ expect(o.simpleName, `occurrence at ${o.filePath}:${String(o.line)} kind=${o.kind} has empty simpleName`).not.toBe('');
413
+ expect(o.simpleName, `occurrence at ${o.filePath}:${String(o.line)} kind=${o.kind} has nullish simpleName`).not.toBeNull();
414
+ expect(typeof o.simpleName).toBe('string');
415
+ expect(o.qualifiedName, `occurrence at ${o.filePath}:${String(o.line)} kind=${o.kind} has empty qualifiedName`).not.toBe('');
416
+ expect(typeof o.qualifiedName).toBe('string');
417
+ }
418
+ expect(count).toBeGreaterThan(0);
419
+ }
420
+ finally {
421
+ rmSync(dir, { recursive: true, force: true });
422
+ }
423
+ });
424
+ it('qualifiedName is distinct from simpleName for non-trivial cases', () => {
425
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop7b-'));
426
+ try {
427
+ const catalog = buildCatalog(dir, {
428
+ 'src/foo.ts': `export function bar() { return 1; }\n`,
429
+ });
430
+ const occ = allOccurrences(catalog).find((o) => o.simpleName === 'bar');
431
+ expect(occ).toBeDefined();
432
+ // qualifiedName encodes the file path; simpleName is just the name.
433
+ expect(occ.qualifiedName).not.toBe(occ.simpleName);
434
+ expect(occ.qualifiedName).toContain('bar');
435
+ expect(occ.qualifiedName).toContain('foo');
436
+ }
437
+ finally {
438
+ rmSync(dir, { recursive: true, force: true });
439
+ }
440
+ });
441
+ });
442
+ // --------------------------------------------------------------------------
443
+ // Property 8: inTestFile correctness
444
+ // --------------------------------------------------------------------------
445
+ describe('Property 8 — inTestFile flag is correct for test path patterns', () => {
446
+ it('files matching *.test.ts are flagged inTestFile=true', () => {
447
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop8a-'));
448
+ try {
449
+ const catalog = buildCatalog(dir, {
450
+ 'foo.test.ts': `export function fooTest() { return 1; }\n`,
451
+ });
452
+ const occ = allOccurrences(catalog).find((o) => o.simpleName === 'fooTest');
453
+ expect(occ).toBeDefined();
454
+ expect(occ.inTestFile).toBe(true);
455
+ }
456
+ finally {
457
+ rmSync(dir, { recursive: true, force: true });
458
+ }
459
+ });
460
+ it('files under __tests__/ are flagged inTestFile=true', () => {
461
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop8b-'));
462
+ try {
463
+ const catalog = buildCatalog(dir, {
464
+ '__tests__/helper.ts': `export function helper() { return 1; }\n`,
465
+ });
466
+ const occ = allOccurrences(catalog).find((o) => o.simpleName === 'helper');
467
+ expect(occ).toBeDefined();
468
+ expect(occ.inTestFile).toBe(true);
469
+ }
470
+ finally {
471
+ rmSync(dir, { recursive: true, force: true });
472
+ }
473
+ });
474
+ it('files under __fixtures__/ are flagged inTestFile=true (test scaffolding)', () => {
475
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop8b2-'));
476
+ try {
477
+ const catalog = buildCatalog(dir, {
478
+ 'src/orchestrate/__fixtures__/multi-pkg/foundation/canonicalize.ts': `export function canonicalize() { return 1; }\n`,
479
+ });
480
+ const occ = allOccurrences(catalog).find((o) => o.simpleName === 'canonicalize');
481
+ expect(occ).toBeDefined();
482
+ expect(occ.inTestFile).toBe(true);
483
+ }
484
+ finally {
485
+ rmSync(dir, { recursive: true, force: true });
486
+ }
487
+ });
488
+ it('production files (no test pattern) are inTestFile=false', () => {
489
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop8c-'));
490
+ try {
491
+ const catalog = buildCatalog(dir, {
492
+ 'src/foo.ts': `export function foo() { return 1; }\n`,
493
+ });
494
+ const occ = allOccurrences(catalog).find((o) => o.simpleName === 'foo');
495
+ expect(occ).toBeDefined();
496
+ expect(occ.inTestFile).toBe(false);
497
+ }
498
+ finally {
499
+ rmSync(dir, { recursive: true, force: true });
500
+ }
501
+ });
502
+ it('inTestFile is consistent across all occurrences in the same file', () => {
503
+ const dir = mkdtempSync(join(tmpdir(), 'graph-prop8d-'));
504
+ try {
505
+ const catalog = buildCatalog(dir, {
506
+ 'foo.test.ts': `export function f1() { return 1; }\n` +
507
+ `export const f2 = () => 2;\n` +
508
+ `export class C { m() {} }\n`,
509
+ });
510
+ const fileOccs = allOccurrences(catalog).filter((o) => o.filePath === 'foo.test.ts');
511
+ expect(fileOccs.length).toBeGreaterThan(0);
512
+ for (const o of fileOccs) {
513
+ expect(o.inTestFile, `${o.simpleName} should inherit inTestFile=true`).toBe(true);
514
+ }
515
+ }
516
+ finally {
517
+ rmSync(dir, { recursive: true, force: true });
518
+ }
519
+ });
520
+ });
521
+ //# sourceMappingURL=inventory-property-tests.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory-property-tests.test.js","sourceRoot":"","sources":["../../src/__tests__/inventory-property-tests.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Inventory shape coverage tests (Tier 1).
3
+ *
4
+ * One focused test per syntactic TypeScript shape that stage 1
5
+ * (buildCatalog) must catch — and one per shape that it must NOT.
6
+ *
7
+ * Each test builds a tiny in-memory source string in a temp directory,
8
+ * runs stage 0 + stage 1 (no edge resolution required for inventory),
9
+ * and asserts exact catalog membership: function name(s) present,
10
+ * function name(s) absent, kind, count.
11
+ *
12
+ * If a test fails because a visitor genuinely doesn't handle the shape,
13
+ * that's a real bug — surface it rather than silently weakening the test.
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=inventory-shape-coverage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory-shape-coverage.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/inventory-shape-coverage.test.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG"}