@nielspeter/eess-ts 0.2.0 → 0.4.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 (433) hide show
  1. package/README.md +87 -34
  2. package/dist/builders/call-rule-builder.d.ts +66 -26
  3. package/dist/builders/call-rule-builder.d.ts.map +1 -1
  4. package/dist/builders/call-rule-builder.js +73 -31
  5. package/dist/builders/call-rule-builder.js.map +1 -1
  6. package/dist/builders/class-rule-builder.d.ts +125 -26
  7. package/dist/builders/class-rule-builder.d.ts.map +1 -1
  8. package/dist/builders/class-rule-builder.js +134 -30
  9. package/dist/builders/class-rule-builder.js.map +1 -1
  10. package/dist/builders/correspondence-builder.d.ts +287 -0
  11. package/dist/builders/correspondence-builder.d.ts.map +1 -0
  12. package/dist/builders/correspondence-builder.js +393 -0
  13. package/dist/builders/correspondence-builder.js.map +1 -0
  14. package/dist/builders/correspondence-findings.d.ts +104 -0
  15. package/dist/builders/correspondence-findings.d.ts.map +1 -0
  16. package/dist/builders/correspondence-findings.js +301 -0
  17. package/dist/builders/correspondence-findings.js.map +1 -0
  18. package/dist/builders/cross-layer-builder.d.ts +99 -16
  19. package/dist/builders/cross-layer-builder.d.ts.map +1 -1
  20. package/dist/builders/cross-layer-builder.js +181 -35
  21. package/dist/builders/cross-layer-builder.js.map +1 -1
  22. package/dist/builders/function-rule-builder.d.ts +144 -25
  23. package/dist/builders/function-rule-builder.d.ts.map +1 -1
  24. package/dist/builders/function-rule-builder.js +173 -26
  25. package/dist/builders/function-rule-builder.js.map +1 -1
  26. package/dist/builders/jsx-rule-builder.d.ts +70 -14
  27. package/dist/builders/jsx-rule-builder.d.ts.map +1 -1
  28. package/dist/builders/jsx-rule-builder.js +73 -14
  29. package/dist/builders/jsx-rule-builder.js.map +1 -1
  30. package/dist/builders/module-rule-builder.d.ts +2 -2
  31. package/dist/builders/module-rule-builder.d.ts.map +1 -1
  32. package/dist/builders/module-rule-builder.js +12 -3
  33. package/dist/builders/module-rule-builder.js.map +1 -1
  34. package/dist/builders/scoped-function-rule-builder.d.ts +11 -0
  35. package/dist/builders/scoped-function-rule-builder.d.ts.map +1 -1
  36. package/dist/builders/scoped-function-rule-builder.js +12 -0
  37. package/dist/builders/scoped-function-rule-builder.js.map +1 -1
  38. package/dist/builders/slice-discovery-message.d.ts +36 -0
  39. package/dist/builders/slice-discovery-message.d.ts.map +1 -0
  40. package/dist/builders/slice-discovery-message.js +181 -0
  41. package/dist/builders/slice-discovery-message.js.map +1 -0
  42. package/dist/builders/slice-rule-builder.d.ts +151 -12
  43. package/dist/builders/slice-rule-builder.d.ts.map +1 -1
  44. package/dist/builders/slice-rule-builder.js +242 -35
  45. package/dist/builders/slice-rule-builder.js.map +1 -1
  46. package/dist/builders/type-rule-builder.d.ts +95 -24
  47. package/dist/builders/type-rule-builder.d.ts.map +1 -1
  48. package/dist/builders/type-rule-builder.js +105 -29
  49. package/dist/builders/type-rule-builder.js.map +1 -1
  50. package/dist/{helpers → builders}/within.d.ts +2 -2
  51. package/dist/builders/within.d.ts.map +1 -0
  52. package/dist/{helpers → builders}/within.js +1 -1
  53. package/dist/builders/within.js.map +1 -0
  54. package/dist/cli/commands/baseline.d.ts +3 -2
  55. package/dist/cli/commands/baseline.d.ts.map +1 -1
  56. package/dist/cli/commands/baseline.js +68 -6
  57. package/dist/cli/commands/baseline.js.map +1 -1
  58. package/dist/cli/commands/check.d.ts +7 -2
  59. package/dist/cli/commands/check.d.ts.map +1 -1
  60. package/dist/cli/commands/check.js +241 -45
  61. package/dist/cli/commands/check.js.map +1 -1
  62. package/dist/cli/commands/doctor.d.ts +29 -0
  63. package/dist/cli/commands/doctor.d.ts.map +1 -0
  64. package/dist/cli/commands/doctor.js +224 -0
  65. package/dist/cli/commands/doctor.js.map +1 -0
  66. package/dist/cli/commands/explain.d.ts +2 -1
  67. package/dist/cli/commands/explain.d.ts.map +1 -1
  68. package/dist/cli/commands/explain.js +19 -10
  69. package/dist/cli/commands/explain.js.map +1 -1
  70. package/dist/cli/commands/init.d.ts +9 -3
  71. package/dist/cli/commands/init.d.ts.map +1 -1
  72. package/dist/cli/commands/init.js +162 -137
  73. package/dist/cli/commands/init.js.map +1 -1
  74. package/dist/cli/import-rule-module.d.ts +29 -0
  75. package/dist/cli/import-rule-module.d.ts.map +1 -0
  76. package/dist/cli/import-rule-module.js +60 -0
  77. package/dist/cli/import-rule-module.js.map +1 -0
  78. package/dist/cli/index.d.ts +2 -2
  79. package/dist/cli/index.d.ts.map +1 -1
  80. package/dist/cli/index.js +98 -33
  81. package/dist/cli/index.js.map +1 -1
  82. package/dist/cli/load-rules.d.ts +6 -11
  83. package/dist/cli/load-rules.d.ts.map +1 -1
  84. package/dist/cli/load-rules.js +21 -29
  85. package/dist/cli/load-rules.js.map +1 -1
  86. package/dist/cli/resolve-config.d.ts.map +1 -1
  87. package/dist/cli/resolve-config.js +24 -14
  88. package/dist/cli/resolve-config.js.map +1 -1
  89. package/dist/cli/rule-file-findings.d.ts +178 -0
  90. package/dist/cli/rule-file-findings.d.ts.map +1 -0
  91. package/dist/cli/rule-file-findings.js +293 -0
  92. package/dist/cli/rule-file-findings.js.map +1 -0
  93. package/dist/cli/watch.d.ts +20 -7
  94. package/dist/cli/watch.d.ts.map +1 -1
  95. package/dist/cli/watch.js +39 -14
  96. package/dist/cli/watch.js.map +1 -1
  97. package/dist/conditions/body-analysis-function.d.ts.map +1 -1
  98. package/dist/conditions/body-analysis-function.js +16 -7
  99. package/dist/conditions/body-analysis-function.js.map +1 -1
  100. package/dist/conditions/body-analysis-module.d.ts.map +1 -1
  101. package/dist/conditions/body-analysis-module.js +14 -9
  102. package/dist/conditions/body-analysis-module.js.map +1 -1
  103. package/dist/conditions/body-analysis.d.ts.map +1 -1
  104. package/dist/conditions/body-analysis.js +16 -7
  105. package/dist/conditions/body-analysis.js.map +1 -1
  106. package/dist/conditions/call.d.ts.map +1 -1
  107. package/dist/conditions/call.js +38 -17
  108. package/dist/conditions/call.js.map +1 -1
  109. package/dist/conditions/catch-analysis.d.ts +2 -1
  110. package/dist/conditions/catch-analysis.d.ts.map +1 -1
  111. package/dist/conditions/catch-analysis.js.map +1 -1
  112. package/dist/conditions/cross-layer.d.ts +2 -10
  113. package/dist/conditions/cross-layer.d.ts.map +1 -1
  114. package/dist/conditions/cross-layer.js +227 -23
  115. package/dist/conditions/cross-layer.js.map +1 -1
  116. package/dist/conditions/dependency.d.ts +35 -6
  117. package/dist/conditions/dependency.d.ts.map +1 -1
  118. package/dist/conditions/dependency.js +299 -45
  119. package/dist/conditions/dependency.js.map +1 -1
  120. package/dist/conditions/exports.d.ts.map +1 -1
  121. package/dist/conditions/exports.js +10 -0
  122. package/dist/conditions/exports.js.map +1 -1
  123. package/dist/conditions/function.d.ts.map +1 -1
  124. package/dist/conditions/function.js +19 -5
  125. package/dist/conditions/function.js.map +1 -1
  126. package/dist/conditions/helpers.d.ts +2 -1
  127. package/dist/conditions/helpers.d.ts.map +1 -1
  128. package/dist/conditions/helpers.js +4 -1
  129. package/dist/conditions/helpers.js.map +1 -1
  130. package/dist/conditions/jsx.d.ts.map +1 -1
  131. package/dist/conditions/jsx.js +7 -2
  132. package/dist/conditions/jsx.js.map +1 -1
  133. package/dist/conditions/match-identity.d.ts +43 -0
  134. package/dist/conditions/match-identity.d.ts.map +1 -0
  135. package/dist/conditions/match-identity.js +43 -0
  136. package/dist/conditions/match-identity.js.map +1 -0
  137. package/dist/conditions/members.d.ts.map +1 -1
  138. package/dist/conditions/members.js +17 -4
  139. package/dist/conditions/members.js.map +1 -1
  140. package/dist/conditions/reverse-dependency.d.ts +18 -5
  141. package/dist/conditions/reverse-dependency.d.ts.map +1 -1
  142. package/dist/conditions/reverse-dependency.js +109 -92
  143. package/dist/conditions/reverse-dependency.js.map +1 -1
  144. package/dist/conditions/slice.d.ts +86 -2
  145. package/dist/conditions/slice.d.ts.map +1 -1
  146. package/dist/conditions/slice.js +234 -53
  147. package/dist/conditions/slice.js.map +1 -1
  148. package/dist/conditions/structural.d.ts.map +1 -1
  149. package/dist/conditions/structural.js +16 -4
  150. package/dist/conditions/structural.js.map +1 -1
  151. package/dist/core/check-all.d.ts +19 -0
  152. package/dist/core/check-all.d.ts.map +1 -0
  153. package/dist/core/check-all.js +96 -0
  154. package/dist/core/check-all.js.map +1 -0
  155. package/dist/core/combinators.d.ts +48 -0
  156. package/dist/core/combinators.d.ts.map +1 -0
  157. package/dist/core/combinators.js +56 -0
  158. package/dist/core/combinators.js.map +1 -0
  159. package/dist/core/descendant-cache.d.ts +36 -0
  160. package/dist/core/descendant-cache.d.ts.map +1 -0
  161. package/dist/core/descendant-cache.js +119 -0
  162. package/dist/core/descendant-cache.js.map +1 -0
  163. package/dist/core/diagnose.d.ts +234 -0
  164. package/dist/core/diagnose.d.ts.map +1 -0
  165. package/dist/core/diagnose.js +382 -0
  166. package/dist/core/diagnose.js.map +1 -0
  167. package/dist/core/disk-set.d.ts +48 -0
  168. package/dist/core/disk-set.d.ts.map +1 -0
  169. package/dist/core/disk-set.js +218 -0
  170. package/dist/core/disk-set.js.map +1 -0
  171. package/dist/core/element-cache.d.ts +75 -0
  172. package/dist/core/element-cache.d.ts.map +1 -0
  173. package/dist/core/element-cache.js +32 -0
  174. package/dist/core/element-cache.js.map +1 -0
  175. package/dist/core/empty-project-advice.d.ts +75 -0
  176. package/dist/core/empty-project-advice.d.ts.map +1 -0
  177. package/dist/core/empty-project-advice.js +61 -0
  178. package/dist/core/empty-project-advice.js.map +1 -0
  179. package/dist/core/exclusion-comments.d.ts +54 -0
  180. package/dist/core/exclusion-comments.d.ts.map +1 -0
  181. package/dist/core/exclusion-comments.js +310 -0
  182. package/dist/core/exclusion-comments.js.map +1 -0
  183. package/dist/core/execute-rule.d.ts +150 -0
  184. package/dist/core/execute-rule.d.ts.map +1 -0
  185. package/dist/core/execute-rule.js +580 -0
  186. package/dist/core/execute-rule.js.map +1 -0
  187. package/dist/core/glob-diagnosis.d.ts +78 -0
  188. package/dist/core/glob-diagnosis.d.ts.map +1 -0
  189. package/dist/core/glob-diagnosis.js +134 -0
  190. package/dist/core/glob-diagnosis.js.map +1 -0
  191. package/dist/core/glob-evaluator.d.ts +48 -0
  192. package/dist/core/glob-evaluator.d.ts.map +1 -0
  193. package/dist/core/glob-evaluator.js +89 -0
  194. package/dist/core/glob-evaluator.js.map +1 -0
  195. package/dist/core/import-candidates.d.ts +60 -0
  196. package/dist/core/import-candidates.d.ts.map +1 -0
  197. package/dist/core/import-candidates.js +93 -0
  198. package/dist/core/import-candidates.js.map +1 -0
  199. package/dist/core/import-options.d.ts +55 -2
  200. package/dist/core/import-options.d.ts.map +1 -1
  201. package/dist/core/import-options.js +64 -0
  202. package/dist/core/import-options.js.map +1 -1
  203. package/dist/core/line-index.d.ts +3 -0
  204. package/dist/core/line-index.d.ts.map +1 -0
  205. package/dist/core/line-index.js +229 -0
  206. package/dist/core/line-index.js.map +1 -0
  207. package/dist/core/metric-violation.d.ts +86 -0
  208. package/dist/core/metric-violation.d.ts.map +1 -0
  209. package/dist/core/metric-violation.js +132 -0
  210. package/dist/core/metric-violation.js.map +1 -0
  211. package/dist/core/module-edges.d.ts +361 -0
  212. package/dist/core/module-edges.d.ts.map +1 -0
  213. package/dist/core/module-edges.js +592 -0
  214. package/dist/core/module-edges.js.map +1 -0
  215. package/dist/core/object-literal-functions.d.ts +42 -0
  216. package/dist/core/object-literal-functions.d.ts.map +1 -0
  217. package/dist/core/object-literal-functions.js +75 -0
  218. package/dist/core/object-literal-functions.js.map +1 -0
  219. package/dist/core/orphan-exclusions.d.ts +44 -0
  220. package/dist/core/orphan-exclusions.d.ts.map +1 -0
  221. package/dist/core/orphan-exclusions.js +214 -0
  222. package/dist/core/orphan-exclusions.js.map +1 -0
  223. package/dist/core/pair-condition.d.ts +32 -3
  224. package/dist/core/pair-condition.d.ts.map +1 -1
  225. package/dist/core/path-universe.d.ts +54 -0
  226. package/dist/core/path-universe.d.ts.map +1 -0
  227. package/dist/core/path-universe.js +65 -0
  228. package/dist/core/path-universe.js.map +1 -0
  229. package/dist/core/per-root-compiler-options.d.ts +20 -0
  230. package/dist/core/per-root-compiler-options.d.ts.map +1 -0
  231. package/dist/core/per-root-compiler-options.js +57 -0
  232. package/dist/core/per-root-compiler-options.js.map +1 -0
  233. package/dist/core/project-relative.d.ts +98 -0
  234. package/dist/core/project-relative.d.ts.map +1 -0
  235. package/dist/core/project-relative.js +185 -0
  236. package/dist/core/project-relative.js.map +1 -0
  237. package/dist/core/project.d.ts +7 -1
  238. package/dist/core/project.d.ts.map +1 -1
  239. package/dist/core/project.js +24 -0
  240. package/dist/core/project.js.map +1 -1
  241. package/dist/core/rule-builder.d.ts +282 -0
  242. package/dist/core/rule-builder.d.ts.map +1 -0
  243. package/dist/core/rule-builder.js +445 -0
  244. package/dist/core/rule-builder.js.map +1 -0
  245. package/dist/core/rule-declaration.d.ts +32 -0
  246. package/dist/core/rule-declaration.d.ts.map +1 -0
  247. package/dist/core/rule-declaration.js +126 -0
  248. package/dist/core/rule-declaration.js.map +1 -0
  249. package/dist/core/terminal-builder.d.ts +625 -0
  250. package/dist/core/terminal-builder.d.ts.map +1 -0
  251. package/dist/core/terminal-builder.js +787 -0
  252. package/dist/core/terminal-builder.js.map +1 -0
  253. package/dist/core/terminal-execution.d.ts +23 -0
  254. package/dist/core/terminal-execution.d.ts.map +1 -0
  255. package/dist/core/terminal-execution.js +71 -0
  256. package/dist/core/terminal-execution.js.map +1 -0
  257. package/dist/core/vacuity-diagnosis.d.ts +103 -0
  258. package/dist/core/vacuity-diagnosis.d.ts.map +1 -0
  259. package/dist/core/vacuity-diagnosis.js +415 -0
  260. package/dist/core/vacuity-diagnosis.js.map +1 -0
  261. package/dist/core/violation.d.ts +16 -11
  262. package/dist/core/violation.d.ts.map +1 -1
  263. package/dist/core/violation.js +33 -13
  264. package/dist/core/violation.js.map +1 -1
  265. package/dist/graphql/index.js +1 -1
  266. package/dist/graphql/index.js.map +1 -1
  267. package/dist/graphql/resolver-rule-builder.d.ts +98 -23
  268. package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
  269. package/dist/graphql/resolver-rule-builder.js +151 -21
  270. package/dist/graphql/resolver-rule-builder.js.map +1 -1
  271. package/dist/graphql/schema-loader.d.ts +21 -0
  272. package/dist/graphql/schema-loader.d.ts.map +1 -1
  273. package/dist/graphql/schema-loader.js +81 -12
  274. package/dist/graphql/schema-loader.js.map +1 -1
  275. package/dist/graphql/schema-rule-builder.d.ts +57 -20
  276. package/dist/graphql/schema-rule-builder.d.ts.map +1 -1
  277. package/dist/graphql/schema-rule-builder.js +101 -25
  278. package/dist/graphql/schema-rule-builder.js.map +1 -1
  279. package/dist/helpers/baseline-diagnostics.d.ts +45 -0
  280. package/dist/helpers/baseline-diagnostics.d.ts.map +1 -0
  281. package/dist/helpers/baseline-diagnostics.js +168 -0
  282. package/dist/helpers/baseline-diagnostics.js.map +1 -0
  283. package/dist/helpers/baseline-generator.d.ts +19 -0
  284. package/dist/helpers/baseline-generator.d.ts.map +1 -0
  285. package/dist/helpers/baseline-generator.js +18 -0
  286. package/dist/helpers/baseline-generator.js.map +1 -0
  287. package/dist/helpers/baseline.d.ts +336 -0
  288. package/dist/helpers/baseline.d.ts.map +1 -0
  289. package/dist/helpers/baseline.js +664 -0
  290. package/dist/helpers/baseline.js.map +1 -0
  291. package/dist/helpers/body-traversal.d.ts +27 -2
  292. package/dist/helpers/body-traversal.d.ts.map +1 -1
  293. package/dist/helpers/body-traversal.js +122 -16
  294. package/dist/helpers/body-traversal.js.map +1 -1
  295. package/dist/helpers/callback-extractor.d.ts.map +1 -1
  296. package/dist/helpers/callback-extractor.js +48 -47
  297. package/dist/helpers/callback-extractor.js.map +1 -1
  298. package/dist/helpers/complexity.d.ts +13 -5
  299. package/dist/helpers/complexity.d.ts.map +1 -1
  300. package/dist/helpers/complexity.js +15 -6
  301. package/dist/helpers/complexity.js.map +1 -1
  302. package/dist/helpers/diff-aware.d.ts +44 -0
  303. package/dist/helpers/diff-aware.d.ts.map +1 -0
  304. package/dist/helpers/diff-aware.js +84 -0
  305. package/dist/helpers/diff-aware.js.map +1 -0
  306. package/dist/helpers/matchers.d.ts +68 -7
  307. package/dist/helpers/matchers.d.ts.map +1 -1
  308. package/dist/helpers/matchers.js +114 -20
  309. package/dist/helpers/matchers.js.map +1 -1
  310. package/dist/helpers/slice-graph.d.ts +100 -8
  311. package/dist/helpers/slice-graph.d.ts.map +1 -1
  312. package/dist/helpers/slice-graph.js +126 -34
  313. package/dist/helpers/slice-graph.js.map +1 -1
  314. package/dist/helpers/tarjan.d.ts +0 -14
  315. package/dist/helpers/tarjan.d.ts.map +1 -1
  316. package/dist/helpers/tarjan.js +29 -16
  317. package/dist/helpers/tarjan.js.map +1 -1
  318. package/dist/index.d.ts +56 -17
  319. package/dist/index.d.ts.map +1 -1
  320. package/dist/index.js +57 -13
  321. package/dist/index.js.map +1 -1
  322. package/dist/models/arch-call.d.ts +3 -2
  323. package/dist/models/arch-call.d.ts.map +1 -1
  324. package/dist/models/arch-call.js.map +1 -1
  325. package/dist/models/arch-function.d.ts +28 -6
  326. package/dist/models/arch-function.d.ts.map +1 -1
  327. package/dist/models/arch-function.js +106 -3
  328. package/dist/models/arch-function.js.map +1 -1
  329. package/dist/models/arch-jsx-element.js +2 -2
  330. package/dist/models/arch-jsx-element.js.map +1 -1
  331. package/dist/models/slice.d.ts +33 -9
  332. package/dist/models/slice.d.ts.map +1 -1
  333. package/dist/models/slice.js +129 -19
  334. package/dist/models/slice.js.map +1 -1
  335. package/dist/predicates/call.d.ts.map +1 -1
  336. package/dist/predicates/call.js +5 -0
  337. package/dist/predicates/call.js.map +1 -1
  338. package/dist/predicates/identity.d.ts +21 -0
  339. package/dist/predicates/identity.d.ts.map +1 -1
  340. package/dist/predicates/identity.js +75 -3
  341. package/dist/predicates/identity.js.map +1 -1
  342. package/dist/predicates/index.d.ts +1 -1
  343. package/dist/predicates/index.d.ts.map +1 -1
  344. package/dist/predicates/index.js +1 -1
  345. package/dist/predicates/index.js.map +1 -1
  346. package/dist/predicates/metrics.d.ts +4 -2
  347. package/dist/predicates/metrics.d.ts.map +1 -1
  348. package/dist/predicates/metrics.js +4 -2
  349. package/dist/predicates/metrics.js.map +1 -1
  350. package/dist/predicates/module.d.ts +4 -12
  351. package/dist/predicates/module.d.ts.map +1 -1
  352. package/dist/predicates/module.js +57 -37
  353. package/dist/predicates/module.js.map +1 -1
  354. package/dist/presets/agent-guardrails.d.ts +22 -15
  355. package/dist/presets/agent-guardrails.d.ts.map +1 -1
  356. package/dist/presets/agent-guardrails.js +124 -19
  357. package/dist/presets/agent-guardrails.js.map +1 -1
  358. package/dist/presets/boundaries.d.ts +45 -2
  359. package/dist/presets/boundaries.d.ts.map +1 -1
  360. package/dist/presets/boundaries.js +132 -23
  361. package/dist/presets/boundaries.js.map +1 -1
  362. package/dist/presets/data-layer.d.ts +22 -2
  363. package/dist/presets/data-layer.d.ts.map +1 -1
  364. package/dist/presets/data-layer.js +58 -16
  365. package/dist/presets/data-layer.js.map +1 -1
  366. package/dist/presets/index.d.ts +7 -5
  367. package/dist/presets/index.d.ts.map +1 -1
  368. package/dist/presets/index.js +9 -3
  369. package/dist/presets/index.js.map +1 -1
  370. package/dist/presets/layered.d.ts +46 -2
  371. package/dist/presets/layered.d.ts.map +1 -1
  372. package/dist/presets/layered.js +66 -29
  373. package/dist/presets/layered.js.map +1 -1
  374. package/dist/presets/recommended.d.ts +80 -9
  375. package/dist/presets/recommended.d.ts.map +1 -1
  376. package/dist/presets/recommended.js +25 -23
  377. package/dist/presets/recommended.js.map +1 -1
  378. package/dist/presets/shared.d.ts +270 -2
  379. package/dist/presets/shared.d.ts.map +1 -1
  380. package/dist/presets/shared.js +338 -4
  381. package/dist/presets/shared.js.map +1 -1
  382. package/dist/rules/code-quality.d.ts.map +1 -1
  383. package/dist/rules/code-quality.js +15 -6
  384. package/dist/rules/code-quality.js.map +1 -1
  385. package/dist/rules/hygiene.d.ts +1 -1
  386. package/dist/rules/hygiene.js +1 -1
  387. package/dist/rules/metrics-function.d.ts +2 -1
  388. package/dist/rules/metrics-function.d.ts.map +1 -1
  389. package/dist/rules/metrics-function.js +33 -6
  390. package/dist/rules/metrics-function.js.map +1 -1
  391. package/dist/rules/metrics.d.ts +2 -1
  392. package/dist/rules/metrics.d.ts.map +1 -1
  393. package/dist/rules/metrics.js +39 -9
  394. package/dist/rules/metrics.js.map +1 -1
  395. package/dist/smells/duplicate-bodies.d.ts +58 -5
  396. package/dist/smells/duplicate-bodies.d.ts.map +1 -1
  397. package/dist/smells/duplicate-bodies.js +137 -56
  398. package/dist/smells/duplicate-bodies.js.map +1 -1
  399. package/dist/smells/fingerprint.d.ts +8 -1
  400. package/dist/smells/fingerprint.d.ts.map +1 -1
  401. package/dist/smells/fingerprint.js +21 -3
  402. package/dist/smells/fingerprint.js.map +1 -1
  403. package/dist/smells/inconsistent-siblings.d.ts +128 -7
  404. package/dist/smells/inconsistent-siblings.d.ts.map +1 -1
  405. package/dist/smells/inconsistent-siblings.js +288 -86
  406. package/dist/smells/inconsistent-siblings.js.map +1 -1
  407. package/dist/smells/sibling-files.d.ts +47 -0
  408. package/dist/smells/sibling-files.d.ts.map +1 -0
  409. package/dist/smells/sibling-files.js +104 -0
  410. package/dist/smells/sibling-files.js.map +1 -0
  411. package/dist/smells/similar-pairs.d.ts +27 -0
  412. package/dist/smells/similar-pairs.d.ts.map +1 -0
  413. package/dist/smells/similar-pairs.js +52 -0
  414. package/dist/smells/similar-pairs.js.map +1 -0
  415. package/dist/smells/smell-builder.d.ts +57 -12
  416. package/dist/smells/smell-builder.d.ts.map +1 -1
  417. package/dist/smells/smell-builder.js +111 -14
  418. package/dist/smells/smell-builder.js.map +1 -1
  419. package/dist/tsconfig/index.d.ts +19 -0
  420. package/dist/tsconfig/index.d.ts.map +1 -0
  421. package/dist/tsconfig/index.js +20 -0
  422. package/dist/tsconfig/index.js.map +1 -0
  423. package/dist/tsconfig/tsconfig-builder.d.ts +42 -9
  424. package/dist/tsconfig/tsconfig-builder.d.ts.map +1 -1
  425. package/dist/tsconfig/tsconfig-builder.js +64 -16
  426. package/dist/tsconfig/tsconfig-builder.js.map +1 -1
  427. package/package.json +3 -2
  428. package/dist/core/module-dependencies.d.ts +0 -28
  429. package/dist/core/module-dependencies.d.ts.map +0 -1
  430. package/dist/core/module-dependencies.js +0 -35
  431. package/dist/core/module-dependencies.js.map +0 -1
  432. package/dist/helpers/within.d.ts.map +0 -1
  433. package/dist/helpers/within.js.map +0 -1
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @nielspeter/eess-ts
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@nielspeter/eess-ts)](https://www.npmjs.com/package/@nielspeter/eess-ts)
4
- [![CI](https://github.com/nielspeter/ts-archunit/actions/workflows/ci.yml/badge.svg)](https://github.com/nielspeter/ts-archunit/actions/workflows/ci.yml)
4
+ [![CI](https://github.com/nielspeter/eess/actions/workflows/ci.yml/badge.svg)](https://github.com/nielspeter/eess/actions/workflows/ci.yml)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
6
6
  [![Node.js >= 24](https://img.shields.io/badge/node-%3E%3D24-brightgreen)](https://nodejs.org/)
7
7
 
@@ -9,9 +9,36 @@
9
9
 
10
10
  Inspired by Java's [ArchUnit](https://www.archunit.org/). Powered by [ts-morph](https://ts-morph.com/).
11
11
 
12
- > **The TypeScript dialect of the [eess](../../README.md) family.** Formerly published as `@nielspeter/ts-archunit` — that name still works as an alias, so existing installs are unaffected. New projects should prefer `@nielspeter/eess-ts`.
12
+ > **The TypeScript dialect of the [eess](https://github.com/nielspeter/eess/blob/main/README.md) family.** Formerly published as `@nielspeter/ts-archunit` — that name still works as an alias, so existing installs are unaffected. New projects should prefer `@nielspeter/eess-ts`. Migrating? See [Migrating from ts-archunit](https://github.com/nielspeter/eess/blob/main/docs/migrating-from-ts-archunit.md).
13
13
 
14
- [Documentation](https://nielspeter.github.io/ts-archunit/) · [Getting Started](https://nielspeter.github.io/ts-archunit/getting-started) · [What Can It Check?](https://nielspeter.github.io/ts-archunit/what-to-check)
14
+ [Documentation](https://github.com/nielspeter/eess) · [Getting Started](https://github.com/nielspeter/eess/blob/main/docs/getting-started.md) · [What Can It Check?](https://github.com/nielspeter/eess/blob/main/docs/what-to-check.md)
15
+
16
+ ## Quickstart — zero to a red gate
17
+
18
+ A green check you've never seen fail proves nothing. This path takes you to a
19
+ **real, correct violation** — timed at seconds on a warm npm cache, minutes
20
+ cold:
21
+
22
+ ```bash
23
+ npm install -D @nielspeter/eess-ts # Node >= 24; your project may be ESM or CJS
24
+ npx eess-ts init # scaffolds arch.rules.ts — editable guardrail rules
25
+ npx eess-ts check # runs them against your source
26
+ ```
27
+
28
+ On most existing codebases the floor fires immediately (a silent `catch {}`,
29
+ an empty stub body, an `eval`). If yours comes up clean — good; now **prove
30
+ the gate is real** the same way eess proves its own gates in CI: introduce a
31
+ violation, watch it go red, revert.
32
+
33
+ ```bash
34
+ echo 'export function probe(s: string): unknown { return eval(s) }' >> src/probe.ts
35
+ npx eess-ts check # ✗ red — preset/recommended/no-eval, with why + fix
36
+ rm src/probe.ts # green again — and now you trust the green
37
+ ```
38
+
39
+ Then wire the rules into your agent's loop — CI annotations, a Claude Code
40
+ hook, and an AGENTS.md block regenerated from the actual rules:
41
+ [agent integration recipes](https://github.com/nielspeter/eess/blob/main/docs/agent-integration.md).
15
42
 
16
43
  ## The Problem
17
44
 
@@ -29,7 +56,7 @@ Code review catches some of this. But at scale — with multiple agents generati
29
56
 
30
57
  ## The Solution
31
58
 
32
- ts-archunit turns your architecture decisions into executable tests. They run in CI. Violations show up inline on the PR with clear messages explaining **what's wrong, why it matters, and how to fix it** — exactly the context an agent needs to self-correct.
59
+ eess-ts turns your architecture decisions into executable tests. They run in CI. Violations show up inline on the PR with clear messages explaining **what's wrong, why it matters, and how to fix it** — exactly the context an agent needs to self-correct.
33
60
 
34
61
  ```typescript
35
62
  classes(p)
@@ -69,7 +96,7 @@ Every other tool (dependency-cruiser, eslint-plugin-boundaries, ts-arch) only ch
69
96
 
70
97
  AI agents don't violate architecture by importing wrong files. They violate it by **writing the wrong code in the right place** — inlining logic instead of delegating, using raw APIs instead of abstractions, skipping validation, throwing generic errors.
71
98
 
72
- ts-archunit checks what happens **inside** your functions:
99
+ eess-ts checks what happens **inside** your functions:
73
100
 
74
101
  ```typescript
75
102
  // "Services must delegate to repositories, not hardcode data"
@@ -92,22 +119,22 @@ functions(p)
92
119
  .check()
93
120
  ```
94
121
 
95
- | Capability | ts-archunit | [dependency-cruiser](https://github.com/sverweij/dependency-cruiser) | [eslint-plugin-boundaries](https://github.com/javierbrea/eslint-plugin-boundaries) | [Biome](https://biomejs.dev) | [ts-arch](https://github.com/ts-arch/ts-arch) |
96
- | -------------------------------------------------- | ----------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------- | --------------------------------------------- |
97
- | Import path rules | Yes | Yes | Yes | Yes | Yes |
98
- | **Body analysis** (what's called inside functions) | Yes | No | No | No | No |
99
- | **Type checking** (string vs typed union) | Yes | No | No | No | No |
100
- | JSX element rules | Yes | No | No | No | No |
101
- | Cross-layer rules | Yes | No | No | No | Partial |
102
- | Cycle detection | Yes | Yes | No | No | Yes |
103
- | Code smell detection (duplicate bodies) | Yes | No | No | No | No |
104
- | Code metrics (cyclomatic, LOC) | Yes | No | No | No | No |
105
- | Pattern matching (reusable rule templates) | Yes | No | No | No | No |
106
- | Baseline (gradual adoption) | Yes | No | No | No | No |
107
- | Diff-aware / PR-only checking | Yes | No | No | No | No |
108
- | Watch mode | Yes | No | No | Yes | No |
109
- | Inline exclusion comments | Yes | No | Via ESLint | Yes | No |
110
- | GitHub PR annotations | Yes | No | Via ESLint | No | No |
122
+ | Capability | eess-ts | [dependency-cruiser](https://github.com/sverweij/dependency-cruiser) | [eslint-plugin-boundaries](https://github.com/javierbrea/eslint-plugin-boundaries) | [Biome](https://biomejs.dev) | [ts-arch](https://github.com/ts-arch/ts-arch) |
123
+ | -------------------------------------------------- | ------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------- | --------------------------------------------- |
124
+ | Import path rules | Yes | Yes | Yes | Yes | Yes |
125
+ | **Body analysis** (what's called inside functions) | Yes | No | No | No | No |
126
+ | **Type checking** (string vs typed union) | Yes | No | No | No | No |
127
+ | JSX element rules | Yes | No | No | No | No |
128
+ | Cross-layer rules | Yes | No | No | No | Partial |
129
+ | Cycle detection | Yes | Yes | No | No | Yes |
130
+ | Code smell detection (duplicate bodies) | Yes | No | No | No | No |
131
+ | Code metrics (cyclomatic, LOC) | Yes | No | No | No | No |
132
+ | Pattern matching (reusable rule templates) | Yes | No | No | No | No |
133
+ | Baseline (gradual adoption) | Yes | No | No | No | No |
134
+ | Diff-aware / PR-only checking | Yes | No | No | No | No |
135
+ | Watch mode | Yes | No | No | Yes | No |
136
+ | Inline exclusion comments | Yes | No | Via ESLint | Yes | No |
137
+ | GitHub PR annotations | Yes | No | Via ESLint | No | No |
111
138
 
112
139
  ## Quick Start with Presets
113
140
 
@@ -148,7 +175,33 @@ layeredArchitecture(p, {
148
175
  - `recommended(p)` — a thin, universal safety floor (no `eval`, no Function constructor, no silent catches, no empty bodies) that fires ~never on healthy code.
149
176
  - `agentGuardrails(p, { src })` — the mistakes AI coding agents make most: generic errors, stub comments, empty bodies, copy-paste, and banned inline calls. Each rule carries `imperative` metadata for `explain --format agent`.
150
177
 
151
- Every preset returns `ArchViolation[]` and, by default, throws on any error-severity violation. Pass `{ report: 'return' }` to own emission, `{ report: 'warn' }` to report without failing, or `{ format: 'json' }` for machine-readable output — the caller owns reporting (ADR-008). Per-rule severity is tunable via `overrides`.
178
+ Every preset **runs its rules and throws** on any error-severity violation by
179
+ default — the caller owns reporting (ADR-008). What you pass depends on where you
180
+ are calling it:
181
+
182
+ | where | pass | why |
183
+ | --------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
184
+ | **a rule file** (`arch.rules.ts`) | `{ report: 'builders' }` | returns the builders **without running them**, so the CLI runs them, reports once, and applies `--baseline` / `--changed` |
185
+ | a test, or your own runner | `{ report: 'return' }` | runs the rules and hands you `ArchViolation[]` to assert on |
186
+ | anywhere, advisory | `{ report: 'warn' }` | reports without failing |
187
+ | | `{ format: 'json' }` | machine-readable output |
188
+
189
+ **`'return'` in a rule file does not work.** A rule file spreads its presets into
190
+ `export default [...]`, so `'return'` splats the preset's _result_ — an
191
+ `ArchViolation[]` — into the rules array. What happens next depends on your
192
+ codebase, and **both outcomes are bad**:
193
+
194
+ | your codebase | what you get |
195
+ | -------------- | -------------------------------------------------------------------------------------------- |
196
+ | has violations | the loader rejects it: `default export entry [0] is not a rule builder (got object)`, exit 1 |
197
+ | **is clean** | the array is **empty**, so the file exports `[]` and every rule silently disappears |
198
+
199
+ `tsc --noEmit` catches neither — a spread of the wrong array type is not a type
200
+ error. `check` now refuses a rule file that contributed no rules, so the clean case
201
+ fails too rather than printing a green tick; before that it exited 0. Use
202
+ `'builders'` in a rule file. `eess-ts init` scaffolds it.
203
+
204
+ Per-rule severity is tunable via `overrides`.
152
205
 
153
206
  ### Scaffold a starter setup
154
207
 
@@ -312,14 +365,14 @@ smells
312
365
 
313
366
  ### More Features
314
367
 
315
- - **[Call matching](https://nielspeter.github.io/ts-archunit/calls)** — framework-agnostic route/handler inspection (Express, Fastify, Hono)
316
- - **[Scoped rules](https://nielspeter.github.io/ts-archunit/body-analysis)** — `within(routes).functions()` for callback-level rules
317
- - **[Pattern templates](https://nielspeter.github.io/ts-archunit/patterns)** — enforce return type shapes (`{ items, total, skip, limit }`)
318
- - **[GraphQL rules](https://nielspeter.github.io/ts-archunit/graphql)** — schema and resolver conventions
319
- - **[Cross-layer validation](https://nielspeter.github.io/ts-archunit/cross-layer)** — route/schema/SDK consistency
320
- - **[Custom predicates and conditions](https://nielspeter.github.io/ts-archunit/custom-rules)** — `definePredicate()`, `defineCondition()`, `and`/`or`/`not` combinators
321
- - **[Metrics](https://nielspeter.github.io/ts-archunit/metrics)** — cyclomatic complexity, lines of code, method count limits
322
- - **[CLI](https://nielspeter.github.io/ts-archunit/cli)** — `check`, `baseline`, `explain`, `--watch` mode
368
+ - **[Call matching](https://github.com/nielspeter/eess/blob/main/docs/calls.md)** — framework-agnostic route/handler inspection (Express, Fastify, Hono)
369
+ - **[Scoped rules](https://github.com/nielspeter/eess/blob/main/docs/body-analysis.md)** — `within(routes).functions()` for callback-level rules
370
+ - **[Pattern templates](https://github.com/nielspeter/eess/blob/main/docs/patterns.md)** — enforce return type shapes (`{ items, total, skip, limit }`)
371
+ - **[GraphQL rules](https://github.com/nielspeter/eess/blob/main/docs/graphql.md)** — schema and resolver conventions
372
+ - **[Cross-layer validation](https://github.com/nielspeter/eess/blob/main/docs/cross-layer.md)** — route/schema/SDK consistency
373
+ - **[Custom predicates and conditions](https://github.com/nielspeter/eess/blob/main/docs/custom-rules.md)** — `definePredicate()`, `defineCondition()`, `and`/`or`/`not` combinators
374
+ - **[Metrics](https://github.com/nielspeter/eess/blob/main/docs/metrics.md)** — cyclomatic complexity, lines of code, method count limits
375
+ - **[CLI](https://github.com/nielspeter/eess/blob/main/docs/cli.md)** — `check`, `baseline`, `explain`, `--watch` mode
323
376
 
324
377
  ## Entry Points
325
378
 
@@ -336,7 +389,7 @@ smells
336
389
 
337
390
  ## Compared to Other Tools
338
391
 
339
- | Capability | ts-archunit | [dependency-cruiser](https://github.com/sverweij/dependency-cruiser) | [ArchUnitTS](https://github.com/LukasNiessen/ArchUnitTS) | [Biome](https://biomejs.dev) | [ts-arch](https://github.com/ts-arch/ts-arch) |
392
+ | Capability | eess-ts | [dependency-cruiser](https://github.com/sverweij/dependency-cruiser) | [ArchUnitTS](https://github.com/LukasNiessen/ArchUnitTS) | [Biome](https://biomejs.dev) | [ts-arch](https://github.com/ts-arch/ts-arch) |
340
393
  | ------------------------------------------------- | --------------- | -------------------------------------------------------------------- | -------------------------------------------------------- | ---------------------------- | --------------------------------------------- |
341
394
  | Import path rules | Yes | Yes | Yes | Yes (`noRestrictedImports`) | Yes |
342
395
  | **Body analysis** (calls, access, constructors) | Yes | No | No | No | No |
@@ -363,17 +416,17 @@ smells
363
416
  | License checking | No | Yes | No | No | No |
364
417
  | Nx monorepo support | No | No | Yes | No | No |
365
418
 
366
- **Use ts-archunit** when you need to enforce what happens _inside_ functions — call patterns, error types, missing delegation, stub comments — and when AI agents are generating code that needs architectural guardrails. This is the only tool that catches "service calls parseInt instead of extractCount()", flags duplicate function bodies as smells, and can restrict checking to only the files changed in a PR.
419
+ **Use eess-ts** when you need to enforce what happens _inside_ functions — call patterns, error types, missing delegation, stub comments — and when AI agents are generating code that needs architectural guardrails. This is the only tool that catches "service calls parseInt instead of extractCount()", flags duplicate function bodies as smells, and can restrict checking to only the files changed in a PR.
367
420
 
368
421
  **Use dependency-cruiser** when you only need import direction rules and want fast graph visualization, license compliance checking, or stability metrics. It's faster (no ts-morph project load) and has mature HTML/dot reporting.
369
422
 
370
423
  **Use ArchUnitTS** when you need OO metrics (LCOM cohesion, coupling factor, distance from main sequence), PlantUML diagram validation, or Nx monorepo project-graph awareness.
371
424
 
372
- **Use Biome** when you want a fast Rust-based lint + format toolchain and only need lint-level import restrictions (`noRestrictedImports`) — not architecture rules over class hierarchies, function bodies, or slice cycles. Pair it with ts-archunit if you want both.
425
+ **Use Biome** when you want a fast Rust-based lint + format toolchain and only need lint-level import restrictions (`noRestrictedImports`) — not architecture rules over class hierarchies, function bodies, or slice cycles. Pair it with eess-ts if you want both.
373
426
 
374
427
  **Use ts-arch** when you want the classic ArchUnit-style fluent API scoped to file/folder dependency rules and layered slices, and don't need body analysis, type-checker rules, or CI integrations like baselines, diff-aware runs, or GitHub annotations.
375
428
 
376
- **Use ts-archunit + dependency-cruiser together** if you want both body-level enforcement and dependency graph visualization.
429
+ **Use eess-ts + dependency-cruiser together** if you want both body-level enforcement and dependency graph visualization.
377
430
 
378
431
  ## Install
379
432
 
@@ -1,5 +1,5 @@
1
1
  import type { ArchProject } from '../core/project.js';
2
- import { RuleBuilder } from '@nielspeter/eess';
2
+ import { RuleBuilder } from '../core/rule-builder.js';
3
3
  import type { ConditionContext } from '@nielspeter/eess';
4
4
  import type { ExpressionMatcher } from '../helpers/matchers.js';
5
5
  import type { ArchCall } from '../models/arch-call.js';
@@ -36,53 +36,98 @@ import type { ArchCall } from '../models/arch-call.js';
36
36
  * .check()
37
37
  * ```
38
38
  */
39
- export declare class CallRuleBuilder extends RuleBuilder<ArchCall, ArchProject> {
39
+ export declare class CallRuleBuilder extends RuleBuilder<ArchCall> {
40
40
  /**
41
41
  * Argument index to fold into the violation element/message. Set by
42
42
  * `.identifiedByArg(index)`. Threaded into `ConditionContext.identifyByArgument`
43
43
  * so the eight `archCall.getName()` sites in `src/conditions/call.ts`
44
44
  * can build identity-keyed violation strings.
45
45
  *
46
- * Survives `fork()` via `Object.assign(fork, this)` in the base class
47
- * (primitive field; no explicit copy needed). See plan 0057.
46
+ * Survives a copy via `shallowClone` in `TerminalBuilder.copy` (a primitive
47
+ * field, so no `copy()` override is needed). See plan 0057.
48
48
  */
49
49
  protected _identifyByArgument?: number;
50
50
  protected getElements(): ArchCall[];
51
51
  protected buildConditionContext(): ConditionContext;
52
52
  /**
53
- * Filter to calls whose callee name matches the pattern.
54
- * A string is compiled to a RegExp. For `app.get(...)` the name is `app.get`.
53
+ * Narrows the selection to call expressions that have a name matching `pattern`.
54
+ *
55
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
56
+ * becomes an assertion. Written after `.should()` it still filters, and the
57
+ * assertion gate reports it as a misplaced predicate rather than letting the
58
+ * rule pass having asserted nothing.
55
59
  */
56
60
  haveNameMatching(pattern: RegExp | string): this;
57
- /** Filter to calls whose callee name starts with the given prefix. */
61
+ /**
62
+ * Narrows the selection to call expressions that have a name starting with `prefix`.
63
+ *
64
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
65
+ * becomes an assertion. Written after `.should()` it still filters, and the
66
+ * assertion gate reports it as a misplaced predicate rather than letting the
67
+ * rule pass having asserted nothing.
68
+ */
58
69
  haveNameStartingWith(prefix: string): this;
59
- /** Filter to calls whose callee name ends with the given suffix. */
70
+ /**
71
+ * Narrows the selection to call expressions that have a name ending with `suffix`.
72
+ *
73
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
74
+ * becomes an assertion. Written after `.should()` it still filters, and the
75
+ * assertion gate reports it as a misplaced predicate rather than letting the
76
+ * rule pass having asserted nothing.
77
+ */
60
78
  haveNameEndingWith(suffix: string): this;
61
- /** Filter to calls in a file whose absolute path matches the glob. */
79
+ /**
80
+ * Narrows the selection to call expressions that reside in a file matching `glob`.
81
+ *
82
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
83
+ * becomes an assertion. Written after `.should()` it still filters, and the
84
+ * assertion gate reports it as a misplaced predicate rather than letting the
85
+ * rule pass having asserted nothing.
86
+ */
62
87
  resideInFile(glob: string): this;
63
- /** Filter to calls in a folder whose path matches the glob. */
88
+ /**
89
+ * Narrows the selection to call expressions that reside in a folder matching `glob`.
90
+ *
91
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
92
+ * becomes an assertion. Written after `.should()` it still filters, and the
93
+ * assertion gate reports it as a misplaced predicate rather than letting the
94
+ * rule pass having asserted nothing.
95
+ */
64
96
  resideInFolder(glob: string): this;
65
97
  /**
66
- * Filter to method calls on the object with the exact given name.
67
- * For `app.get(...)` use `onObject('app')`; for `router.route.get(...)`
68
- * use `onObject('router.route')`. Optional chaining is normalized.
98
+ * Narrows the selection to call expressions that are called on the object `name`.
99
+ *
100
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
101
+ * becomes an assertion. Written after `.should()` it still filters, and the
102
+ * assertion gate reports it as a misplaced predicate rather than letting the
103
+ * rule pass having asserted nothing.
69
104
  */
70
105
  onObject(name: string): this;
71
106
  /**
72
- * Filter to calls whose method name matches. Accepts an exact string
73
- * or a regex; also matches bare function calls (`handleError(...)`).
107
+ * Narrows the selection to call expressions that call a method matching `nameOrRegex`.
108
+ *
109
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
110
+ * becomes an assertion. Written after `.should()` it still filters, and the
111
+ * assertion gate reports it as a misplaced predicate rather than letting the
112
+ * rule pass having asserted nothing.
74
113
  */
75
114
  withMethod(nameOrRegex: string | RegExp): this;
76
115
  /**
77
- * Filter to calls whose argument at `index` matches the pattern, tested
78
- * against the argument's source text (so it matches identifiers and
79
- * expressions, not just string literals).
116
+ * Narrows the selection to call expressions that have argument `index` matching `pattern`.
117
+ *
118
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
119
+ * becomes an assertion. Written after `.should()` it still filters, and the
120
+ * assertion gate reports it as a misplaced predicate rather than letting the
121
+ * rule pass having asserted nothing.
80
122
  */
81
123
  withArgMatching(index: number, pattern: string | RegExp): this;
82
124
  /**
83
- * Filter to calls whose argument at `index` is a string literal whose
84
- * value matches the glob. Non-literal arguments (variables, expressions)
85
- * never match.
125
+ * Narrows the selection to call expressions that have string argument `index` matching `glob`.
126
+ *
127
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
128
+ * becomes an assertion. Written after `.should()` it still filters, and the
129
+ * assertion gate reports it as a misplaced predicate rather than letting the
130
+ * rule pass having asserted nothing.
86
131
  */
87
132
  withStringArg(index: number, glob: string): this;
88
133
  /**
@@ -166,11 +211,6 @@ export declare class CallRuleBuilder extends RuleBuilder<ArchCall, ArchProject>
166
211
  * Use `notHaveCallbackContaining` when you only want to search callback bodies.
167
212
  */
168
213
  notHaveArgumentContaining(matcher: ExpressionMatcher): this;
169
- /**
170
- * Get the underlying ArchProject.
171
- * Used by within() to create scoped builders.
172
- */
173
- getProject(): ArchProject;
174
214
  /**
175
215
  * Get the ArchCall elements that match the current predicate chain.
176
216
  * Used by within() to extract callbacks from matched calls.
@@ -1 +1 @@
1
- {"version":3,"file":"call-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/call-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAyBtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,eAAgB,SAAQ,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC;IACrE;;;;;;;;OAQG;IACH,SAAS,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAEtC,SAAS,CAAC,WAAW,IAAI,QAAQ,EAAE;cAIhB,qBAAqB,IAAI,gBAAgB;IAS5D;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIhD,sEAAsE;IACtE,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C,oEAAoE;IACpE,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC,sEAAsE;IACtE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC,+DAA+D;IAC/D,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASlC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5B;;;OAGG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI9C;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI9D;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6CG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOpC;;OAEG;IACH,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIxD;;OAEG;IACH,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI3D;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,wBAAwB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIlD;;OAEG;IACH,2BAA2B,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIrD;;;;;OAKG;IACH,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIxD;;;;;OAKG;IACH,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAM3D;;;OAGG;IACH,UAAU,IAAI,WAAW;IAIzB;;;OAGG;IACH,eAAe,IAAI,QAAQ,EAAE;CAG9B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,CAErD"}
1
+ {"version":3,"file":"call-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/call-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AA6BtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,eAAgB,SAAQ,WAAW,CAAC,QAAQ,CAAC;IACxD;;;;;;;;OAQG;IACH,SAAS,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAEtC,SAAS,CAAC,WAAW,IAAI,QAAQ,EAAE;cAMhB,qBAAqB,IAAI,gBAAgB;IAS5D;;;;;;;OAOG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIhD;;;;;;;OAOG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C;;;;;;;OAOG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC;;;;;;;OAOG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC;;;;;;;OAOG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASlC;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5B;;;;;;;OAOG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI9C;;;;;;;OAOG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI9D;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6CG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQpC;;OAEG;IACH,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIxD;;OAEG;IACH,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI3D;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,wBAAwB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIlD;;OAEG;IACH,2BAA2B,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIrD;;;;;OAKG;IACH,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIxD;;;;;OAKG;IACH,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAM3D;;;OAGG;IACH,eAAe,IAAI,QAAQ,EAAE;CAG9B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,CAErD"}
@@ -1,5 +1,8 @@
1
- import { RuleBuilder } from '@nielspeter/eess';
1
+ import { RuleBuilder } from '../core/rule-builder.js';
2
2
  import { collectCalls } from '../models/arch-call.js';
3
+ import { createElementCache, SOLE_POPULATION } from '../core/element-cache.js';
4
+ /** One collection per project, shared by every rule built from it (plan 0075). */
5
+ const cache = createElementCache();
3
6
  import { haveNameMatching as identityHaveNameMatching, haveNameStartingWith as identityHaveNameStartingWith, haveNameEndingWith as identityHaveNameEndingWith, resideInFile as identityResideInFile, resideInFolder as identityResideInFolder, } from '../predicates/identity.js';
4
7
  import { onObject as callOnObject, withMethod as callWithMethod, withArgMatching as callWithArgMatching, withStringArg as callWithStringArg, } from '../predicates/call.js';
5
8
  import { haveCallbackContaining as conditionHaveCallbackContaining, notHaveCallbackContaining as conditionNotHaveCallbackContaining, notExist as callNotExist, haveArgumentWithProperty as conditionHaveArgumentWithProperty, notHaveArgumentWithProperty as conditionNotHaveArgumentWithProperty, haveArgumentContaining as conditionHaveArgumentContaining, notHaveArgumentContaining as conditionNotHaveArgumentContaining, } from '../conditions/call.js';
@@ -43,12 +46,12 @@ export class CallRuleBuilder extends RuleBuilder {
43
46
  * so the eight `archCall.getName()` sites in `src/conditions/call.ts`
44
47
  * can build identity-keyed violation strings.
45
48
  *
46
- * Survives `fork()` via `Object.assign(fork, this)` in the base class
47
- * (primitive field; no explicit copy needed). See plan 0057.
49
+ * Survives a copy via `shallowClone` in `TerminalBuilder.copy` (a primitive
50
+ * field, so no `copy()` override is needed). See plan 0057.
48
51
  */
49
52
  _identifyByArgument;
50
53
  getElements() {
51
- return this.project.getSourceFiles().flatMap(collectCalls);
54
+ return cache.get(this.project, SOLE_POPULATION, () => this.project.getSourceFiles().flatMap(collectCalls));
52
55
  }
53
56
  buildConditionContext() {
54
57
  return {
@@ -58,58 +61,103 @@ export class CallRuleBuilder extends RuleBuilder {
58
61
  }
59
62
  // --- Identity predicates (subset: no areExported/areNotExported) ---
60
63
  /**
61
- * Filter to calls whose callee name matches the pattern.
62
- * A string is compiled to a RegExp. For `app.get(...)` the name is `app.get`.
64
+ * Narrows the selection to call expressions that have a name matching `pattern`.
65
+ *
66
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
67
+ * becomes an assertion. Written after `.should()` it still filters, and the
68
+ * assertion gate reports it as a misplaced predicate rather than letting the
69
+ * rule pass having asserted nothing.
63
70
  */
64
71
  haveNameMatching(pattern) {
65
72
  return this.addPredicate(identityHaveNameMatching(pattern));
66
73
  }
67
- /** Filter to calls whose callee name starts with the given prefix. */
74
+ /**
75
+ * Narrows the selection to call expressions that have a name starting with `prefix`.
76
+ *
77
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
78
+ * becomes an assertion. Written after `.should()` it still filters, and the
79
+ * assertion gate reports it as a misplaced predicate rather than letting the
80
+ * rule pass having asserted nothing.
81
+ */
68
82
  haveNameStartingWith(prefix) {
69
83
  return this.addPredicate(identityHaveNameStartingWith(prefix));
70
84
  }
71
- /** Filter to calls whose callee name ends with the given suffix. */
85
+ /**
86
+ * Narrows the selection to call expressions that have a name ending with `suffix`.
87
+ *
88
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
89
+ * becomes an assertion. Written after `.should()` it still filters, and the
90
+ * assertion gate reports it as a misplaced predicate rather than letting the
91
+ * rule pass having asserted nothing.
92
+ */
72
93
  haveNameEndingWith(suffix) {
73
94
  return this.addPredicate(identityHaveNameEndingWith(suffix));
74
95
  }
75
- /** Filter to calls in a file whose absolute path matches the glob. */
96
+ /**
97
+ * Narrows the selection to call expressions that reside in a file matching `glob`.
98
+ *
99
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
100
+ * becomes an assertion. Written after `.should()` it still filters, and the
101
+ * assertion gate reports it as a misplaced predicate rather than letting the
102
+ * rule pass having asserted nothing.
103
+ */
76
104
  resideInFile(glob) {
77
105
  return this.addPredicate(identityResideInFile(glob));
78
106
  }
79
- /** Filter to calls in a folder whose path matches the glob. */
107
+ /**
108
+ * Narrows the selection to call expressions that reside in a folder matching `glob`.
109
+ *
110
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
111
+ * becomes an assertion. Written after `.should()` it still filters, and the
112
+ * assertion gate reports it as a misplaced predicate rather than letting the
113
+ * rule pass having asserted nothing.
114
+ */
80
115
  resideInFolder(glob) {
81
116
  return this.addPredicate(identityResideInFolder(glob));
82
117
  }
83
118
  // Note: areExported() and areNotExported() are intentionally omitted.
84
- // Call expressions cannot be exported. See spec section 5.1.
119
+ // Call expressions cannot are exported. See spec section 5.1.
85
120
  // --- Call-specific predicates ---
86
121
  /**
87
- * Filter to method calls on the object with the exact given name.
88
- * For `app.get(...)` use `onObject('app')`; for `router.route.get(...)`
89
- * use `onObject('router.route')`. Optional chaining is normalized.
122
+ * Narrows the selection to call expressions that are called on the object `name`.
123
+ *
124
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
125
+ * becomes an assertion. Written after `.should()` it still filters, and the
126
+ * assertion gate reports it as a misplaced predicate rather than letting the
127
+ * rule pass having asserted nothing.
90
128
  */
91
129
  onObject(name) {
92
130
  return this.addPredicate(callOnObject(name));
93
131
  }
94
132
  /**
95
- * Filter to calls whose method name matches. Accepts an exact string
96
- * or a regex; also matches bare function calls (`handleError(...)`).
133
+ * Narrows the selection to call expressions that call a method matching `nameOrRegex`.
134
+ *
135
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
136
+ * becomes an assertion. Written after `.should()` it still filters, and the
137
+ * assertion gate reports it as a misplaced predicate rather than letting the
138
+ * rule pass having asserted nothing.
97
139
  */
98
140
  withMethod(nameOrRegex) {
99
141
  return this.addPredicate(callWithMethod(nameOrRegex));
100
142
  }
101
143
  /**
102
- * Filter to calls whose argument at `index` matches the pattern, tested
103
- * against the argument's source text (so it matches identifiers and
104
- * expressions, not just string literals).
144
+ * Narrows the selection to call expressions that have argument `index` matching `pattern`.
145
+ *
146
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
147
+ * becomes an assertion. Written after `.should()` it still filters, and the
148
+ * assertion gate reports it as a misplaced predicate rather than letting the
149
+ * rule pass having asserted nothing.
105
150
  */
106
151
  withArgMatching(index, pattern) {
107
152
  return this.addPredicate(callWithArgMatching(index, pattern));
108
153
  }
109
154
  /**
110
- * Filter to calls whose argument at `index` is a string literal whose
111
- * value matches the glob. Non-literal arguments (variables, expressions)
112
- * never match.
155
+ * Narrows the selection to call expressions that have string argument `index` matching `glob`.
156
+ *
157
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
158
+ * becomes an assertion. Written after `.should()` it still filters, and the
159
+ * assertion gate reports it as a misplaced predicate rather than letting the
160
+ * rule pass having asserted nothing.
113
161
  */
114
162
  withStringArg(index, glob) {
115
163
  return this.addPredicate(callWithStringArg(index, glob));
@@ -162,8 +210,9 @@ export class CallRuleBuilder extends RuleBuilder {
162
210
  * @param index — zero-based argument index to fold into the identity.
163
211
  */
164
212
  identifiedByArg(index) {
165
- this._identifyByArgument = index;
166
- return this;
213
+ const next = this.copy();
214
+ next._identifyByArgument = index;
215
+ return next;
167
216
  }
168
217
  // --- Condition methods ---
169
218
  /**
@@ -215,13 +264,6 @@ export class CallRuleBuilder extends RuleBuilder {
215
264
  return this.addCondition(conditionNotHaveArgumentContaining(matcher));
216
265
  }
217
266
  // --- Public accessors (used by plan 0015 within()) ---
218
- /**
219
- * Get the underlying ArchProject.
220
- * Used by within() to create scoped builders.
221
- */
222
- getProject() {
223
- return this.project;
224
- }
225
267
  /**
226
268
  * Get the ArchCall elements that match the current predicate chain.
227
269
  * Used by within() to extract callbacks from matched calls.
@@ -1 +1 @@
1
- {"version":3,"file":"call-rule-builder.js","sourceRoot":"","sources":["../../src/builders/call-rule-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call-rule-builder.js","sourceRoot":"","sources":["../../src/builders/call-rule-builder.ts"],"names":[],"mappings":"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"}