@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
@@ -1,13 +1,23 @@
1
1
  import picomatch from 'picomatch';
2
- import { TerminalBuilder, matchSelections } from '@nielspeter/eess';
2
+ import { ownsEmptyDiscovery } from '@nielspeter/eess';
3
+ import { globAnyOf, stampGlobs } from '@nielspeter/eess';
4
+ import { TerminalBuilder } from '../core/terminal-builder.js';
5
+ import { shallowClone } from '@nielspeter/eess';
6
+ import { isProjectRelative, relativeToRoot } from '../core/project-relative.js';
3
7
  /**
4
8
  * Resolve a layer by matching its glob against the project's source files.
5
9
  */
6
10
  function resolveLayer(project, name, pattern) {
7
11
  const isMatch = picomatch(pattern);
12
+ const relative = isProjectRelative(pattern);
8
13
  const files = [];
9
14
  for (const sf of project.getSourceFiles()) {
10
- if (isMatch(sf.getFilePath())) {
15
+ const filePath = sf.getFilePath();
16
+ // Bug 0036: the glob is matched against an ABSOLUTE path, so a
17
+ // project-relative one could never resolve a layer. Same rule as every
18
+ // other path glob — relative means from the project root.
19
+ const fromRoot = relative ? relativeToRoot(sf, filePath, project.tsConfigPath) : undefined;
20
+ if (isMatch(filePath) || (fromRoot !== undefined && isMatch(fromRoot))) {
11
21
  files.push(sf);
12
22
  }
13
23
  }
@@ -15,19 +25,23 @@ function resolveLayer(project, name, pattern) {
15
25
  }
16
26
  /**
17
27
  * Compute matched pairs between two layers using a mapping function.
18
- *
19
- * Delegates the matching to the kernel's shared `matchSelections()` engine (the
20
- * same one `correspondence()` uses), then wraps each pair with its layer names.
21
- * There is no separate cross-layer matching implementation.
28
+ * Iterates the Cartesian product, keeping only pairs where the mapping returns true.
22
29
  */
23
30
  function computePairs(leftLayer, rightLayer, mappingFn) {
24
- const { pairs } = matchSelections(leftLayer.files, rightLayer.files, { matchBy: mappingFn });
25
- return pairs.map((p) => ({
26
- left: p.left,
27
- leftLayer: leftLayer.name,
28
- right: p.right,
29
- rightLayer: rightLayer.name,
30
- }));
31
+ const pairs = [];
32
+ for (const left of leftLayer.files) {
33
+ for (const right of rightLayer.files) {
34
+ if (mappingFn(left, right)) {
35
+ pairs.push({
36
+ left,
37
+ leftLayer: leftLayer.name,
38
+ right,
39
+ rightLayer: rightLayer.name,
40
+ });
41
+ }
42
+ }
43
+ }
44
+ return pairs;
31
45
  }
32
46
  /**
33
47
  * Builder for cross-layer consistency rules.
@@ -37,8 +51,8 @@ function computePairs(leftLayer, rightLayer, mappingFn) {
37
51
  *
38
52
  * @example
39
53
  * crossLayer(project)
40
- * .layer('routes', 'src/routes/**')
41
- * .layer('schemas', 'src/schemas/**')
54
+ * .layer('routes', '**\/src/routes/**')
55
+ * .layer('schemas', '**\/src/schemas/**')
42
56
  * .mapping((a, b) => a.getBaseName().replace('Route', '') === b.getBaseName().replace('Schema', ''))
43
57
  * .forEachPair()
44
58
  * .should(haveMatchingCounterpart())
@@ -55,8 +69,24 @@ export class CrossLayerBuilder {
55
69
  * At least two layers must be defined before calling `.mapping()`.
56
70
  */
57
71
  layer(name, pattern) {
58
- this._layerDefs.push({ name, pattern });
59
- return this;
72
+ const next = this.copy();
73
+ next._layerDefs.push({ name, pattern });
74
+ return next;
75
+ }
76
+ /**
77
+ * An independent copy, carrying the layer definitions (bug 0016).
78
+ *
79
+ * This class does not extend {@link TerminalBuilder} — it produces a rule
80
+ * rather than being one — so it does not inherit that class's `copy()`. It
81
+ * still needs copy-on-write for the same reason: a held `crossLayer(p)`
82
+ * accumulated a layer per `.layer()` call across every rule derived from it,
83
+ * and `mapping()` pairs *consecutive* layers, so an extra layer silently
84
+ * changes which pairs a later rule compares.
85
+ */
86
+ copy() {
87
+ const clone = shallowClone(this);
88
+ clone._layerDefs = [...this._layerDefs];
89
+ return clone;
60
90
  }
61
91
  /**
62
92
  * Provide a mapping function that determines which elements form pairs.
@@ -78,59 +108,156 @@ export class CrossLayerBuilder {
78
108
  if (left && right)
79
109
  allPairs.push(...computePairs(left, right, fn));
80
110
  }
81
- return new MappedCrossLayerBuilder(layers, allPairs);
111
+ return new MappedCrossLayerBuilder(layers, allPairs, this.project);
82
112
  }
83
113
  }
84
114
  /**
85
115
  * Intermediate builder after `.mapping()` has been called.
86
116
  * The layers are resolved and pairs computed.
87
117
  */
88
- // eess-exclude eess/no-unused-exports: return type of the exported CrossLayerBuilder.mapping() fluent-chain method (must stay exported for declaration emit)
118
+ // A fluent-chain intermediate: nothing imports it by name, but it is the declared
119
+ // return type of an exported method, and `arch-rules.test.ts` ·
120
+ // `it('builders must be exported')` requires every class under `src/builders/` to be
121
+ // exported — "unexported builders are unreachable". The two rules genuinely disagree
122
+ // here; this resolves toward the explicit, reasoned one. The directive sits LAST because
123
+ // a single-line waiver covers exactly the next line.
124
+ // eess-exclude eess/no-unused-exports: fluent-chain intermediate, exported per the rule above
89
125
  export class MappedCrossLayerBuilder {
90
126
  layers;
91
127
  pairs;
92
- constructor(layers, pairs) {
128
+ project;
129
+ constructor(layers, pairs, project) {
93
130
  this.layers = layers;
94
131
  this.pairs = pairs;
132
+ this.project = project;
95
133
  }
96
134
  /**
97
135
  * Iterate over each matched pair. Returns a builder for attaching conditions.
98
136
  */
99
137
  forEachPair() {
100
- return new PairConditionBuilder(this.layers, this.pairs);
138
+ return new PairConditionBuilder(this.layers, this.pairs, this.project);
101
139
  }
102
140
  }
103
141
  /**
104
142
  * Builder after `.forEachPair()` — attach a pair condition via `.should()`.
105
143
  */
106
- // eess-exclude eess/no-unused-exports: return type of the exported MappedCrossLayerBuilder.forEachPair() fluent-chain method (must stay exported for declaration emit)
144
+ // A fluent-chain intermediate: nothing imports it by name, but it is the declared
145
+ // return type of an exported method, and `arch-rules.test.ts` ·
146
+ // `it('builders must be exported')` requires every class under `src/builders/` to be
147
+ // exported — "unexported builders are unreachable". The two rules genuinely disagree
148
+ // here; this resolves toward the explicit, reasoned one. The directive sits LAST because
149
+ // a single-line waiver covers exactly the next line.
150
+ // eess-exclude eess/no-unused-exports: fluent-chain intermediate, exported per the rule above
107
151
  export class PairConditionBuilder {
108
152
  layers;
109
153
  pairs;
110
- constructor(layers, pairs) {
154
+ project;
155
+ constructor(layers, pairs, project) {
111
156
  this.layers = layers;
112
157
  this.pairs = pairs;
158
+ this.project = project;
113
159
  }
114
160
  /**
115
161
  * Attach a pair condition to evaluate against matched pairs.
116
162
  */
117
163
  should(condition) {
118
- return new PairFinalBuilder(this.layers, this.pairs, condition);
164
+ return new PairFinalBuilder(this.layers, this.pairs, condition, this.project);
119
165
  }
120
166
  }
121
167
  /**
122
168
  * Terminal builder — call `.check()`, `.warn()`, or `.because()`.
123
169
  */
124
- // eess-exclude eess/no-unused-exports: return type of the exported PairConditionBuilder.should() fluent-chain method (must stay exported for declaration emit)
170
+ // A fluent-chain intermediate: nothing imports it by name, but it is the declared
171
+ // return type of an exported method, and `arch-rules.test.ts` ·
172
+ // `it('builders must be exported')` requires every class under `src/builders/` to be
173
+ // exported — "unexported builders are unreachable". The two rules genuinely disagree
174
+ // here; this resolves toward the explicit, reasoned one. The directive sits LAST because
175
+ // a single-line waiver covers exactly the next line.
176
+ // eess-exclude eess/no-unused-exports: fluent-chain intermediate, exported per the rule above
125
177
  export class PairFinalBuilder extends TerminalBuilder {
126
178
  layers;
127
179
  pairs;
128
180
  condition;
129
- constructor(layers, pairs, condition) {
181
+ project;
182
+ /**
183
+ * @param project - Optional so the constructor stays source-compatible; the
184
+ * chain always supplies it. Without it `doctor` cannot check this rule's
185
+ * layer globs and has to report that it could not, which is honest but
186
+ * useless — and used to be silent.
187
+ */
188
+ constructor(layers, pairs, condition, project) {
130
189
  super();
131
190
  this.layers = layers;
132
191
  this.pairs = pairs;
133
192
  this.condition = condition;
193
+ this.project = project;
194
+ }
195
+ /** The project this rule was built against. See `RuleBuilder.getProject`. */
196
+ getProject() {
197
+ return this.project;
198
+ }
199
+ /**
200
+ * The layer globs, one tree each.
201
+ *
202
+ * Per layer rather than one `any` node, for the same reason as
203
+ * `assignedFrom`: a dead glob means that layer is empty, and every pair
204
+ * involving it is silently unchecked. Folding them together would report a
205
+ * fault only when EVERY layer was empty.
206
+ */
207
+ globs() {
208
+ return this.layers.map((layer) => stampGlobs(globAnyOf([layer.pattern], 'file-path', isProjectRelative(layer.pattern) ? 'normalized' : 'absolute'), 'discovery', (g) => `layer("${layer.name}", "${g.glob}")`));
209
+ }
210
+ /**
211
+ * Does the condition this rule was built with diagnose its own empty layers?
212
+ *
213
+ * **Asked of the condition, not asserted about all of them** (plan 0081). This
214
+ * returned a bare `true` while the docstring here claimed "all three produce a
215
+ * finding naming the layer" — and at v0.45.0 that was false, because
216
+ * `haveMatchingCounterpart` missed a dead FINAL layer. The blanket declaration
217
+ * suppressed the gate for precisely the case its declared owner did not handle,
218
+ * so the reader got silence instead of a generic message
219
+ * ([ts-archunit bug 0040](https://github.com/nielspeter/ts-archunit/blob/main/bugs/fixed/0040-a-crosslayer-rule-reports-nothing-when-its-layer-resolves-nothing.md)).
220
+ *
221
+ * A prose claim about three implementations goes stale when a fourth arrives.
222
+ * A tag read off the condition cannot: an untagged condition is covered by the
223
+ * gate, which is the recoverable direction.
224
+ *
225
+ * The gate is worth standing down for when the tag IS present: it short-circuits
226
+ * before the condition runs, and the condition's finding names the dead layer
227
+ * and points at the `.layer()` call to edit — a remedy corrected three times
228
+ * before it was right (bug 0042).
229
+ */
230
+ ownsDiscoveryDiagnosis() {
231
+ // A registry lookup, not a property read. The property form — symbol-keyed on
232
+ // the condition — was readable off any shipped condition via
233
+ // `Object.getOwnPropertySymbols` and could be copied onto a user condition that
234
+ // reports nothing, which measured 0 findings on a dead layer. `WeakSet`
235
+ // membership cannot be read off the object, so there is nothing to copy.
236
+ return ownsEmptyDiscovery(this.condition);
237
+ }
238
+ /**
239
+ * Pairs this rule examined — plan 0098. `condition.evaluate` receives exactly
240
+ * this array, so the count cannot drift from what was checked.
241
+ */
242
+ /**
243
+ * This family counts layer pairs — the pairs of layers it compares.
244
+ *
245
+ * Plan 0099: `CollectResult.examined` is unit-typed per family (ADR-009 part
246
+ * 1), and the zero-examined message prints the noun. Inheriting the base
247
+ * `'subjects'` is a category error in a sentence whose whole job is naming what
248
+ * was and was not looked at.
249
+ */
250
+ examinedUnitNoun() {
251
+ return 'layer pairs';
252
+ }
253
+ /**
254
+ * How many units this rule actually examined — ADR-010's evidence that a pass
255
+ * was constructed rather than defaulted.
256
+ *
257
+ * The materialized elements of the layer selection.
258
+ */
259
+ examinedUnits() {
260
+ return this.pairs.length;
134
261
  }
135
262
  collectViolations() {
136
263
  const layerNames = this.layers.map((l) => l.name);
@@ -140,8 +267,18 @@ export class PairFinalBuilder extends TerminalBuilder {
140
267
  ruleId: this._metadata?.id,
141
268
  suggestion: this._metadata?.suggestion,
142
269
  docs: this._metadata?.docs,
270
+ // The builder's OWN resolved layers (bug 0040). A condition that needs
271
+ // them no longer has to be handed a copy the caller assembled — which was
272
+ // impossible to assemble correctly, since `layers` is private here and
273
+ // `resolveLayer` is not exported.
274
+ layers: this.layers,
275
+ };
276
+ // Plan 0098: the pairs ARE the examined set — `evaluate` receives exactly
277
+ // this array, so the count cannot drift from what was checked.
278
+ return {
279
+ violations: this.condition.evaluate(this.pairs, context),
280
+ examined: this.examinedUnits(),
143
281
  };
144
- return this.condition.evaluate(this.pairs, context);
145
282
  }
146
283
  }
147
284
  /**
@@ -152,19 +289,28 @@ export class PairFinalBuilder extends TerminalBuilder {
152
289
  *
153
290
  * @example
154
291
  * crossLayer(project)
155
- * .layer('routes', 'src/routes/**')
156
- * .layer('schemas', 'src/schemas/**')
292
+ * .layer('routes', '**\/src/routes/**')
293
+ * .layer('schemas', '**\/src/schemas/**')
157
294
  * .mapping((a, b) => a.getBaseName().replace('-route', '') === b.getBaseName().replace('-schema', ''))
158
295
  * .forEachPair()
159
296
  * .should(haveMatchingCounterpart())
160
297
  * .check()
298
+ */
299
+ /**
300
+ * @deprecated Superseded by `crossProject()` **for pairings that are key equality** —
301
+ * `key(a) === key(b)` with each key derived from its own side. That covers most
302
+ * rules, including `haveConsistentExports` (a key function may return an array, so
303
+ * one file expands into one key per symbol). It is a rewrite, not a rename: the
304
+ * pairing moves from `.mapping(fn)` into the key.
305
+ *
306
+ * KEEP `crossLayer` if your `.mapping(fn)` is not key equality — prefix matching,
307
+ * directory nesting, "imports its schema" — or if you use `satisfyPairCondition`,
308
+ * whose callback builds its own violation (including `measured`/`metricUnit` for the
309
+ * baseline ratchet) and has no `crossProject` equivalent. Chains of 3+ layers become
310
+ * N−1 separate rules.
161
311
  *
162
- * @deprecated Superseded by the kernel `correspondence()` primitive
163
- * (`@nielspeter/eess`), which binds two element `Selection`s from *any* loaders
164
- * (not just two globs within one project) and is the engine `crossLayer` should
165
- * have been built on. `crossLayer` continues to work; new rules should prefer
166
- * `correspondence({ left, right }).should().beComplete(...)`. Full internal
167
- * delegation onto `correspondence()` is a follow-up (see plan 0059, Phase 3).
312
+ * Migration table and the full list of what changes:
313
+ * https://github.com/nielspeter/eess/blob/main/docs/cross-project.md#migrating-from-crosslayer
168
314
  */
169
315
  export function crossLayer(p) {
170
316
  return new CrossLayerBuilder(p);
@@ -1 +1 @@
1
- {"version":3,"file":"cross-layer-builder.js","sourceRoot":"","sources":["../../src/builders/cross-layer-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross-layer-builder.js","sourceRoot":"","sources":["../../src/builders/cross-layer-builder.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import type { ArchProject } from '../core/project.js';
2
2
  import type { Condition } from '@nielspeter/eess';
3
- import { RuleBuilder } from '@nielspeter/eess';
3
+ import { RuleBuilder } from '../core/rule-builder.js';
4
4
  import type { ExpressionMatcher } from '../helpers/matchers.js';
5
5
  import type { ArchFunction } from '../models/arch-function.js';
6
+ import { type FunctionCollectionOptions } from '../models/arch-function.js';
6
7
  import type { ArchPattern } from '../helpers/pattern.js';
7
8
  import type { TypeMatcher } from '../helpers/type-matchers.js';
8
9
  /**
@@ -35,16 +36,32 @@ import type { TypeMatcher } from '../helpers/type-matchers.js';
35
36
  * .check()
36
37
  * ```
37
38
  */
38
- export declare class FunctionRuleBuilder extends RuleBuilder<ArchFunction, ArchProject> {
39
+ export declare class FunctionRuleBuilder extends RuleBuilder<ArchFunction> {
40
+ private readonly _collectionOptions?;
41
+ constructor(project: ArchProject, _collectionOptions?: FunctionCollectionOptions | undefined);
39
42
  protected getElements(): ArchFunction[];
40
43
  /**
41
44
  * After `.that()`: filter functions whose name matches the pattern.
42
45
  * After `.should()`: assert matched functions have names matching the pattern.
43
46
  */
44
47
  haveNameMatching(pattern: RegExp | string): this;
45
- /** Filter to functions whose name starts with the given prefix. */
48
+ /**
49
+ * Narrows the selection to functions that have a name starting with `prefix`.
50
+ *
51
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
52
+ * becomes an assertion. Written after `.should()` it still filters, and the
53
+ * assertion gate reports it as a misplaced predicate rather than letting the
54
+ * rule pass having asserted nothing.
55
+ */
46
56
  haveNameStartingWith(prefix: string): this;
47
- /** Filter to functions whose name ends with the given suffix. */
57
+ /**
58
+ * Narrows the selection to functions that have a name ending with `suffix`.
59
+ *
60
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
61
+ * becomes an assertion. Written after `.should()` it still filters, and the
62
+ * assertion gate reports it as a misplaced predicate rather than letting the
63
+ * rule pass having asserted nothing.
64
+ */
48
65
  haveNameEndingWith(suffix: string): this;
49
66
  /**
50
67
  * After `.that()`: filter functions in a file matching the glob.
@@ -56,47 +73,149 @@ export declare class FunctionRuleBuilder extends RuleBuilder<ArchFunction, ArchP
56
73
  * After `.should()`: assert functions reside in a folder matching the glob.
57
74
  */
58
75
  resideInFolder(glob: string): this;
59
- /** Filter to functions that are exported from their module. */
76
+ /**
77
+ * Narrows the selection to functions that are exported.
78
+ *
79
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
80
+ * becomes an assertion. Written after `.should()` it still filters, and the
81
+ * assertion gate reports it as a misplaced predicate rather than letting the
82
+ * rule pass having asserted nothing.
83
+ */
60
84
  areExported(): this;
61
- /** Filter to functions that are NOT exported from their module. */
85
+ /**
86
+ * Narrows the selection to functions that are not exported.
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
+ */
62
93
  areNotExported(): this;
63
94
  /**
64
- * Filter to public functions. Class methods match when `public` or
65
- * unmarked; standalone and arrow functions are always public.
95
+ * Narrows the selection to functions that are public.
96
+ *
97
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
98
+ * becomes an assertion. Written after `.should()` it still filters, and the
99
+ * assertion gate reports it as a misplaced predicate rather than letting the
100
+ * rule pass having asserted nothing.
66
101
  */
67
102
  arePublic(): this;
68
- /** Filter to `protected` class methods (standalone functions never match). */
103
+ /**
104
+ * Narrows the selection to functions that are protected.
105
+ *
106
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
107
+ * becomes an assertion. Written after `.should()` it still filters, and the
108
+ * assertion gate reports it as a misplaced predicate rather than letting the
109
+ * rule pass having asserted nothing.
110
+ */
69
111
  areProtected(): this;
70
- /** Filter to `private` class methods (standalone functions never match). */
112
+ /**
113
+ * Narrows the selection to functions that are private.
114
+ *
115
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
116
+ * becomes an assertion. Written after `.should()` it still filters, and the
117
+ * assertion gate reports it as a misplaced predicate rather than letting the
118
+ * rule pass having asserted nothing.
119
+ */
71
120
  arePrivate(): this;
72
- /** Filter to functions declared with the `async` keyword. */
121
+ /**
122
+ * Narrows the selection to functions that are async.
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.
128
+ */
73
129
  areAsync(): this;
74
- /** Filter to functions NOT declared `async`. */
130
+ /**
131
+ * Narrows the selection to functions that are not async.
132
+ *
133
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
134
+ * becomes an assertion. Written after `.should()` it still filters, and the
135
+ * assertion gate reports it as a misplaced predicate rather than letting the
136
+ * rule pass having asserted nothing.
137
+ */
75
138
  areNotAsync(): this;
76
- /** Filter to functions that declare exactly `n` parameters. */
139
+ /**
140
+ * Narrows the selection to functions that have exactly `n` parameters.
141
+ *
142
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
143
+ * becomes an assertion. Written after `.should()` it still filters, and the
144
+ * assertion gate reports it as a misplaced predicate rather than letting the
145
+ * rule pass having asserted nothing.
146
+ */
77
147
  haveParameterCount(n: number): this;
78
- /** Filter to functions that declare more than `n` parameters. */
148
+ /**
149
+ * Narrows the selection to functions that have more than `n` parameters.
150
+ *
151
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
152
+ * becomes an assertion. Written after `.should()` it still filters, and the
153
+ * assertion gate reports it as a misplaced predicate rather than letting the
154
+ * rule pass having asserted nothing.
155
+ */
79
156
  haveParameterCountGreaterThan(n: number): this;
80
- /** Filter to functions that declare fewer than `n` parameters. */
157
+ /**
158
+ * Narrows the selection to functions that have fewer than `n` parameters.
159
+ *
160
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
161
+ * becomes an assertion. Written after `.should()` it still filters, and the
162
+ * assertion gate reports it as a misplaced predicate rather than letting the
163
+ * rule pass having asserted nothing.
164
+ */
81
165
  haveParameterCountLessThan(n: number): this;
82
- /** Filter to functions that declare a parameter with the given exact name. */
166
+ /**
167
+ * Narrows the selection to functions that have a parameter named `name`.
168
+ *
169
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
170
+ * becomes an assertion. Written after `.should()` it still filters, and the
171
+ * assertion gate reports it as a misplaced predicate rather than letting the
172
+ * rule pass having asserted nothing.
173
+ */
83
174
  haveParameterNamed(name: string): this;
84
175
  /**
85
- * Filter to functions whose return type text matches the pattern
86
- * (e.g. `/Promise</`, `'void'`). A string is compiled to a RegExp.
176
+ * Narrows the selection to functions that have a return type matching `pattern`.
177
+ *
178
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
179
+ * becomes an assertion. Written after `.should()` it still filters, and the
180
+ * assertion gate reports it as a misplaced predicate rather than letting the
181
+ * rule pass having asserted nothing.
87
182
  */
88
183
  haveReturnType(pattern: RegExp | string): this;
89
- /** Filter to functions that declare a rest parameter (`...args`). */
184
+ /**
185
+ * Narrows the selection to functions that have a rest parameter.
186
+ *
187
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
188
+ * becomes an assertion. Written after `.should()` it still filters, and the
189
+ * assertion gate reports it as a misplaced predicate rather than letting the
190
+ * rule pass having asserted nothing.
191
+ */
90
192
  haveRestParameter(): this;
91
- /** Filter to functions with at least one optional (`x?`) or default-valued parameter. */
193
+ /**
194
+ * Narrows the selection to functions that have an optional parameter.
195
+ *
196
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
197
+ * becomes an assertion. Written after `.should()` it still filters, and the
198
+ * assertion gate reports it as a misplaced predicate rather than letting the
199
+ * rule pass having asserted nothing.
200
+ */
92
201
  haveOptionalParameter(): this;
93
202
  /**
94
- * Filter to functions whose parameter at `index` has a type satisfying
95
- * the matcher. Out-of-bounds indices never match; for a rest parameter
96
- * the type is the array type (e.g. `string[]`).
203
+ * Narrows the selection to functions that have parameter `index` of a type matching `matcher`.
204
+ *
205
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
206
+ * becomes an assertion. Written after `.should()` it still filters, and the
207
+ * assertion gate reports it as a misplaced predicate rather than letting the
208
+ * rule pass having asserted nothing.
97
209
  */
98
210
  haveParameterOfType(index: number, matcher: TypeMatcher): this;
99
- /** Filter to functions with at least one parameter whose name matches the regex. */
211
+ /**
212
+ * Narrows the selection to functions that have a parameter name matching `pattern`.
213
+ *
214
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
215
+ * becomes an assertion. Written after `.should()` it still filters, and the
216
+ * assertion gate reports it as a misplaced predicate rather than letting the
217
+ * rule pass having asserted nothing.
218
+ */
100
219
  haveParameterNameMatching(pattern: RegExp): this;
101
220
  /**
102
221
  * Register a condition. Public API for passing standalone conditions
@@ -194,5 +313,5 @@ export declare class FunctionRuleBuilder extends RuleBuilder<ArchFunction, ArchP
194
313
  * .check()
195
314
  * ```
196
315
  */
197
- export declare function functions(p: ArchProject): FunctionRuleBuilder;
316
+ export declare function functions(p: ArchProject, options?: FunctionCollectionOptions): FunctionRuleBuilder;
198
317
  //# sourceMappingURL=function-rule-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"function-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/function-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAO/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAG9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAqBxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAkB9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC;IAC7E,SAAS,CAAC,WAAW,IAAI,YAAY,EAAE;IAMvC;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQhD,mEAAmE;IACnE,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C,iEAAiE;IACjE,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOlC,+DAA+D;IAC/D,WAAW,IAAI,IAAI;IAInB,mEAAmE;IACnE,cAAc,IAAI,IAAI;IAMtB;;;OAGG;IACH,SAAS,IAAI,IAAI;IAIjB,8EAA8E;IAC9E,YAAY,IAAI,IAAI;IAIpB,4EAA4E;IAC5E,UAAU,IAAI,IAAI;IAMlB,6DAA6D;IAC7D,QAAQ,IAAI,IAAI;IAIhB,gDAAgD;IAChD,WAAW,IAAI,IAAI;IAInB,+DAA+D;IAC/D,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAInC,iEAAiE;IACjE,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9C,kEAAkE;IAClE,0BAA0B,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3C,8EAA8E;IAC9E,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAItC;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI9C,qEAAqE;IACrE,iBAAiB,IAAI,IAAI;IAIzB,yFAAyF;IACzF,qBAAqB,IAAI,IAAI;IAI7B;;;;OAIG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAI9D,oFAAoF;IACpF,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMhD;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI;IAIvD;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf,sEAAsE;IACtE,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMhD;;;;;;OAMG;IACH,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIjD;;;;;;;OAOG;IACH,wBAAwB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAMpD;;;;;;;;;;;OAWG;IACH,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAMlD;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIzC;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI5C;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAInE;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;CAG1C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,GAAG,mBAAmB,CAE7D"}
1
+ {"version":3,"file":"function-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/function-rule-builder.ts"],"names":[],"mappings":"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"}