@nielspeter/eess-ts 0.2.1 → 0.5.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 (467) hide show
  1. package/README.md +61 -35
  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 +75 -32
  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 +141 -55
  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 +385 -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 +182 -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 +177 -39
  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 +16 -19
  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 +243 -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 +109 -42
  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 +8 -3
  55. package/dist/cli/commands/baseline.d.ts.map +1 -1
  56. package/dist/cli/commands/baseline.js +111 -7
  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 +385 -47
  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 +47 -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 +101 -43
  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 +25 -32
  85. package/dist/cli/load-rules.js.map +1 -1
  86. package/dist/cli/resolve-config.d.ts +0 -8
  87. package/dist/cli/resolve-config.d.ts.map +1 -1
  88. package/dist/cli/resolve-config.js +25 -55
  89. package/dist/cli/resolve-config.js.map +1 -1
  90. package/dist/cli/rule-file-findings.d.ts +178 -0
  91. package/dist/cli/rule-file-findings.d.ts.map +1 -0
  92. package/dist/cli/rule-file-findings.js +351 -0
  93. package/dist/cli/rule-file-findings.js.map +1 -0
  94. package/dist/cli/watch.d.ts +17 -34
  95. package/dist/cli/watch.d.ts.map +1 -1
  96. package/dist/cli/watch.js +14 -129
  97. package/dist/cli/watch.js.map +1 -1
  98. package/dist/conditions/body-analysis-function.d.ts.map +1 -1
  99. package/dist/conditions/body-analysis-function.js +16 -7
  100. package/dist/conditions/body-analysis-function.js.map +1 -1
  101. package/dist/conditions/body-analysis-module.d.ts.map +1 -1
  102. package/dist/conditions/body-analysis-module.js +14 -9
  103. package/dist/conditions/body-analysis-module.js.map +1 -1
  104. package/dist/conditions/body-analysis.d.ts.map +1 -1
  105. package/dist/conditions/body-analysis.js +16 -7
  106. package/dist/conditions/body-analysis.js.map +1 -1
  107. package/dist/conditions/call.d.ts.map +1 -1
  108. package/dist/conditions/call.js +41 -19
  109. package/dist/conditions/call.js.map +1 -1
  110. package/dist/conditions/catch-analysis.d.ts +2 -1
  111. package/dist/conditions/catch-analysis.d.ts.map +1 -1
  112. package/dist/conditions/catch-analysis.js.map +1 -1
  113. package/dist/conditions/cross-layer.d.ts +2 -10
  114. package/dist/conditions/cross-layer.d.ts.map +1 -1
  115. package/dist/conditions/cross-layer.js +227 -23
  116. package/dist/conditions/cross-layer.js.map +1 -1
  117. package/dist/conditions/dependency.d.ts +35 -6
  118. package/dist/conditions/dependency.d.ts.map +1 -1
  119. package/dist/conditions/dependency.js +299 -45
  120. package/dist/conditions/dependency.js.map +1 -1
  121. package/dist/conditions/exports.d.ts.map +1 -1
  122. package/dist/conditions/exports.js +41 -37
  123. package/dist/conditions/exports.js.map +1 -1
  124. package/dist/conditions/function.d.ts.map +1 -1
  125. package/dist/conditions/function.js +19 -5
  126. package/dist/conditions/function.js.map +1 -1
  127. package/dist/conditions/helpers.d.ts +2 -1
  128. package/dist/conditions/helpers.d.ts.map +1 -1
  129. package/dist/conditions/helpers.js +4 -1
  130. package/dist/conditions/helpers.js.map +1 -1
  131. package/dist/conditions/jsx.d.ts.map +1 -1
  132. package/dist/conditions/jsx.js +7 -2
  133. package/dist/conditions/jsx.js.map +1 -1
  134. package/dist/conditions/match-identity.d.ts +43 -0
  135. package/dist/conditions/match-identity.d.ts.map +1 -0
  136. package/dist/conditions/match-identity.js +43 -0
  137. package/dist/conditions/match-identity.js.map +1 -0
  138. package/dist/conditions/members.d.ts.map +1 -1
  139. package/dist/conditions/members.js +20 -6
  140. package/dist/conditions/members.js.map +1 -1
  141. package/dist/conditions/reverse-dependency.d.ts +18 -5
  142. package/dist/conditions/reverse-dependency.d.ts.map +1 -1
  143. package/dist/conditions/reverse-dependency.js +155 -93
  144. package/dist/conditions/reverse-dependency.js.map +1 -1
  145. package/dist/conditions/slice.d.ts +86 -2
  146. package/dist/conditions/slice.d.ts.map +1 -1
  147. package/dist/conditions/slice.js +234 -53
  148. package/dist/conditions/slice.js.map +1 -1
  149. package/dist/conditions/structural.d.ts.map +1 -1
  150. package/dist/conditions/structural.js +16 -4
  151. package/dist/conditions/structural.js.map +1 -1
  152. package/dist/core/check-all.d.ts +19 -0
  153. package/dist/core/check-all.d.ts.map +1 -0
  154. package/dist/core/check-all.js +150 -0
  155. package/dist/core/check-all.js.map +1 -0
  156. package/dist/core/combinators.d.ts +48 -0
  157. package/dist/core/combinators.d.ts.map +1 -0
  158. package/dist/core/combinators.js +49 -0
  159. package/dist/core/combinators.js.map +1 -0
  160. package/dist/core/descendant-cache.d.ts +36 -0
  161. package/dist/core/descendant-cache.d.ts.map +1 -0
  162. package/dist/core/descendant-cache.js +117 -0
  163. package/dist/core/descendant-cache.js.map +1 -0
  164. package/dist/core/diagnose.d.ts +234 -0
  165. package/dist/core/diagnose.d.ts.map +1 -0
  166. package/dist/core/diagnose.js +390 -0
  167. package/dist/core/diagnose.js.map +1 -0
  168. package/dist/core/disk-set.d.ts +48 -0
  169. package/dist/core/disk-set.d.ts.map +1 -0
  170. package/dist/core/disk-set.js +218 -0
  171. package/dist/core/disk-set.js.map +1 -0
  172. package/dist/core/element-cache.d.ts +75 -0
  173. package/dist/core/element-cache.d.ts.map +1 -0
  174. package/dist/core/element-cache.js +32 -0
  175. package/dist/core/element-cache.js.map +1 -0
  176. package/dist/core/empty-project-advice.d.ts +75 -0
  177. package/dist/core/empty-project-advice.d.ts.map +1 -0
  178. package/dist/core/empty-project-advice.js +61 -0
  179. package/dist/core/empty-project-advice.js.map +1 -0
  180. package/dist/core/exclusion-comments.d.ts +19 -0
  181. package/dist/core/exclusion-comments.d.ts.map +1 -0
  182. package/dist/core/exclusion-comments.js +7 -0
  183. package/dist/core/exclusion-comments.js.map +1 -0
  184. package/dist/core/execute-rule.d.ts +158 -0
  185. package/dist/core/execute-rule.d.ts.map +1 -0
  186. package/dist/core/execute-rule.js +666 -0
  187. package/dist/core/execute-rule.js.map +1 -0
  188. package/dist/core/glob-diagnosis.d.ts +78 -0
  189. package/dist/core/glob-diagnosis.d.ts.map +1 -0
  190. package/dist/core/glob-diagnosis.js +134 -0
  191. package/dist/core/glob-diagnosis.js.map +1 -0
  192. package/dist/core/glob-evaluator.d.ts +48 -0
  193. package/dist/core/glob-evaluator.d.ts.map +1 -0
  194. package/dist/core/glob-evaluator.js +89 -0
  195. package/dist/core/glob-evaluator.js.map +1 -0
  196. package/dist/core/import-candidates.d.ts +60 -0
  197. package/dist/core/import-candidates.d.ts.map +1 -0
  198. package/dist/core/import-candidates.js +93 -0
  199. package/dist/core/import-candidates.js.map +1 -0
  200. package/dist/core/import-options.d.ts +55 -2
  201. package/dist/core/import-options.d.ts.map +1 -1
  202. package/dist/core/import-options.js +64 -0
  203. package/dist/core/import-options.js.map +1 -1
  204. package/dist/core/invalidate-on-modify.d.ts +20 -0
  205. package/dist/core/invalidate-on-modify.d.ts.map +1 -0
  206. package/dist/core/invalidate-on-modify.js +26 -0
  207. package/dist/core/invalidate-on-modify.js.map +1 -0
  208. package/dist/core/line-index.d.ts +3 -0
  209. package/dist/core/line-index.d.ts.map +1 -0
  210. package/dist/core/line-index.js +227 -0
  211. package/dist/core/line-index.js.map +1 -0
  212. package/dist/core/metric-violation.d.ts +86 -0
  213. package/dist/core/metric-violation.d.ts.map +1 -0
  214. package/dist/core/metric-violation.js +132 -0
  215. package/dist/core/metric-violation.js.map +1 -0
  216. package/dist/core/module-edges.d.ts +361 -0
  217. package/dist/core/module-edges.d.ts.map +1 -0
  218. package/dist/core/module-edges.js +593 -0
  219. package/dist/core/module-edges.js.map +1 -0
  220. package/dist/core/object-literal-functions.d.ts +42 -0
  221. package/dist/core/object-literal-functions.d.ts.map +1 -0
  222. package/dist/core/object-literal-functions.js +75 -0
  223. package/dist/core/object-literal-functions.js.map +1 -0
  224. package/dist/core/orphan-exclusions.d.ts +44 -0
  225. package/dist/core/orphan-exclusions.d.ts.map +1 -0
  226. package/dist/core/orphan-exclusions.js +224 -0
  227. package/dist/core/orphan-exclusions.js.map +1 -0
  228. package/dist/core/pair-condition.d.ts +32 -3
  229. package/dist/core/pair-condition.d.ts.map +1 -1
  230. package/dist/core/path-universe.d.ts +22 -0
  231. package/dist/core/path-universe.d.ts.map +1 -0
  232. package/dist/core/path-universe.js +45 -0
  233. package/dist/core/path-universe.js.map +1 -0
  234. package/dist/core/per-root-compiler-options.d.ts +20 -0
  235. package/dist/core/per-root-compiler-options.d.ts.map +1 -0
  236. package/dist/core/per-root-compiler-options.js +57 -0
  237. package/dist/core/per-root-compiler-options.js.map +1 -0
  238. package/dist/core/project-relative.d.ts +98 -0
  239. package/dist/core/project-relative.d.ts.map +1 -0
  240. package/dist/core/project-relative.js +185 -0
  241. package/dist/core/project-relative.js.map +1 -0
  242. package/dist/core/project.d.ts +7 -1
  243. package/dist/core/project.d.ts.map +1 -1
  244. package/dist/core/project.js +29 -4
  245. package/dist/core/project.js.map +1 -1
  246. package/dist/core/rule-builder.d.ts +303 -0
  247. package/dist/core/rule-builder.d.ts.map +1 -0
  248. package/dist/core/rule-builder.js +463 -0
  249. package/dist/core/rule-builder.js.map +1 -0
  250. package/dist/core/rule-declaration.d.ts +32 -0
  251. package/dist/core/rule-declaration.d.ts.map +1 -0
  252. package/dist/core/rule-declaration.js +88 -0
  253. package/dist/core/rule-declaration.js.map +1 -0
  254. package/dist/core/terminal-builder.d.ts +629 -0
  255. package/dist/core/terminal-builder.d.ts.map +1 -0
  256. package/dist/core/terminal-builder.js +807 -0
  257. package/dist/core/terminal-builder.js.map +1 -0
  258. package/dist/core/terminal-execution.d.ts +39 -0
  259. package/dist/core/terminal-execution.d.ts.map +1 -0
  260. package/dist/core/terminal-execution.js +103 -0
  261. package/dist/core/terminal-execution.js.map +1 -0
  262. package/dist/core/ts-comment-mask.d.ts +2 -0
  263. package/dist/core/ts-comment-mask.d.ts.map +1 -0
  264. package/dist/core/ts-comment-mask.js +102 -0
  265. package/dist/core/ts-comment-mask.js.map +1 -0
  266. package/dist/core/vacuity-diagnosis.d.ts +103 -0
  267. package/dist/core/vacuity-diagnosis.d.ts.map +1 -0
  268. package/dist/core/vacuity-diagnosis.js +415 -0
  269. package/dist/core/vacuity-diagnosis.js.map +1 -0
  270. package/dist/core/violation.d.ts +16 -11
  271. package/dist/core/violation.d.ts.map +1 -1
  272. package/dist/core/violation.js +33 -13
  273. package/dist/core/violation.js.map +1 -1
  274. package/dist/graphql/graphql-rule-builder.d.ts +95 -0
  275. package/dist/graphql/graphql-rule-builder.d.ts.map +1 -0
  276. package/dist/graphql/graphql-rule-builder.js +127 -0
  277. package/dist/graphql/graphql-rule-builder.js.map +1 -0
  278. package/dist/graphql/index.d.ts +1 -0
  279. package/dist/graphql/index.d.ts.map +1 -1
  280. package/dist/graphql/index.js +2 -1
  281. package/dist/graphql/index.js.map +1 -1
  282. package/dist/graphql/resolver-rule-builder.d.ts +44 -23
  283. package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
  284. package/dist/graphql/resolver-rule-builder.js +80 -72
  285. package/dist/graphql/resolver-rule-builder.js.map +1 -1
  286. package/dist/graphql/schema-loader.d.ts +21 -0
  287. package/dist/graphql/schema-loader.d.ts.map +1 -1
  288. package/dist/graphql/schema-loader.js +82 -12
  289. package/dist/graphql/schema-loader.js.map +1 -1
  290. package/dist/graphql/schema-predicates.d.ts.map +1 -1
  291. package/dist/graphql/schema-predicates.js +17 -12
  292. package/dist/graphql/schema-predicates.js.map +1 -1
  293. package/dist/graphql/schema-rule-builder.d.ts +15 -24
  294. package/dist/graphql/schema-rule-builder.d.ts.map +1 -1
  295. package/dist/graphql/schema-rule-builder.js +39 -77
  296. package/dist/graphql/schema-rule-builder.js.map +1 -1
  297. package/dist/helpers/baseline-diagnostics.d.ts +45 -0
  298. package/dist/helpers/baseline-diagnostics.d.ts.map +1 -0
  299. package/dist/helpers/baseline-diagnostics.js +168 -0
  300. package/dist/helpers/baseline-diagnostics.js.map +1 -0
  301. package/dist/helpers/baseline-generator.d.ts +28 -0
  302. package/dist/helpers/baseline-generator.d.ts.map +1 -0
  303. package/dist/helpers/baseline-generator.js +27 -0
  304. package/dist/helpers/baseline-generator.js.map +1 -0
  305. package/dist/helpers/baseline.d.ts +336 -0
  306. package/dist/helpers/baseline.d.ts.map +1 -0
  307. package/dist/helpers/baseline.js +664 -0
  308. package/dist/helpers/baseline.js.map +1 -0
  309. package/dist/helpers/body-traversal.d.ts +27 -2
  310. package/dist/helpers/body-traversal.d.ts.map +1 -1
  311. package/dist/helpers/body-traversal.js +135 -16
  312. package/dist/helpers/body-traversal.js.map +1 -1
  313. package/dist/helpers/callback-extractor.d.ts.map +1 -1
  314. package/dist/helpers/callback-extractor.js +53 -84
  315. package/dist/helpers/callback-extractor.js.map +1 -1
  316. package/dist/helpers/complexity.d.ts +13 -5
  317. package/dist/helpers/complexity.d.ts.map +1 -1
  318. package/dist/helpers/complexity.js +15 -6
  319. package/dist/helpers/complexity.js.map +1 -1
  320. package/dist/helpers/diff-aware.d.ts +16 -0
  321. package/dist/helpers/diff-aware.d.ts.map +1 -0
  322. package/dist/helpers/diff-aware.js +16 -0
  323. package/dist/helpers/diff-aware.js.map +1 -0
  324. package/dist/helpers/matchers.d.ts +68 -7
  325. package/dist/helpers/matchers.d.ts.map +1 -1
  326. package/dist/helpers/matchers.js +164 -86
  327. package/dist/helpers/matchers.js.map +1 -1
  328. package/dist/helpers/slice-graph.d.ts +100 -8
  329. package/dist/helpers/slice-graph.d.ts.map +1 -1
  330. package/dist/helpers/slice-graph.js +126 -34
  331. package/dist/helpers/slice-graph.js.map +1 -1
  332. package/dist/helpers/tarjan.d.ts +0 -14
  333. package/dist/helpers/tarjan.d.ts.map +1 -1
  334. package/dist/helpers/tarjan.js +29 -16
  335. package/dist/helpers/tarjan.js.map +1 -1
  336. package/dist/index.d.ts +55 -19
  337. package/dist/index.d.ts.map +1 -1
  338. package/dist/index.js +67 -15
  339. package/dist/index.js.map +1 -1
  340. package/dist/models/arch-call.d.ts +3 -2
  341. package/dist/models/arch-call.d.ts.map +1 -1
  342. package/dist/models/arch-call.js.map +1 -1
  343. package/dist/models/arch-function.d.ts +54 -8
  344. package/dist/models/arch-function.d.ts.map +1 -1
  345. package/dist/models/arch-function.js +145 -8
  346. package/dist/models/arch-function.js.map +1 -1
  347. package/dist/models/arch-jsx-element.d.ts.map +1 -1
  348. package/dist/models/arch-jsx-element.js +18 -19
  349. package/dist/models/arch-jsx-element.js.map +1 -1
  350. package/dist/models/slice.d.ts +33 -9
  351. package/dist/models/slice.d.ts.map +1 -1
  352. package/dist/models/slice.js +129 -19
  353. package/dist/models/slice.js.map +1 -1
  354. package/dist/predicates/call.d.ts.map +1 -1
  355. package/dist/predicates/call.js +5 -0
  356. package/dist/predicates/call.js.map +1 -1
  357. package/dist/predicates/identity.d.ts +21 -0
  358. package/dist/predicates/identity.d.ts.map +1 -1
  359. package/dist/predicates/identity.js +75 -3
  360. package/dist/predicates/identity.js.map +1 -1
  361. package/dist/predicates/index.d.ts +1 -1
  362. package/dist/predicates/index.d.ts.map +1 -1
  363. package/dist/predicates/index.js +1 -1
  364. package/dist/predicates/index.js.map +1 -1
  365. package/dist/predicates/jsx.d.ts.map +1 -1
  366. package/dist/predicates/jsx.js +2 -1
  367. package/dist/predicates/jsx.js.map +1 -1
  368. package/dist/predicates/metrics.d.ts +4 -2
  369. package/dist/predicates/metrics.d.ts.map +1 -1
  370. package/dist/predicates/metrics.js +4 -2
  371. package/dist/predicates/metrics.js.map +1 -1
  372. package/dist/predicates/module.d.ts +4 -12
  373. package/dist/predicates/module.d.ts.map +1 -1
  374. package/dist/predicates/module.js +57 -37
  375. package/dist/predicates/module.js.map +1 -1
  376. package/dist/presets/agent-guardrails.d.ts +49 -16
  377. package/dist/presets/agent-guardrails.d.ts.map +1 -1
  378. package/dist/presets/agent-guardrails.js +308 -19
  379. package/dist/presets/agent-guardrails.js.map +1 -1
  380. package/dist/presets/boundaries.d.ts +46 -3
  381. package/dist/presets/boundaries.d.ts.map +1 -1
  382. package/dist/presets/boundaries.js +132 -23
  383. package/dist/presets/boundaries.js.map +1 -1
  384. package/dist/presets/data-layer.d.ts +23 -3
  385. package/dist/presets/data-layer.d.ts.map +1 -1
  386. package/dist/presets/data-layer.js +58 -16
  387. package/dist/presets/data-layer.js.map +1 -1
  388. package/dist/presets/index.d.ts +10 -5
  389. package/dist/presets/index.d.ts.map +1 -1
  390. package/dist/presets/index.js +19 -3
  391. package/dist/presets/index.js.map +1 -1
  392. package/dist/presets/layered.d.ts +47 -3
  393. package/dist/presets/layered.d.ts.map +1 -1
  394. package/dist/presets/layered.js +66 -29
  395. package/dist/presets/layered.js.map +1 -1
  396. package/dist/presets/recommended.d.ts +81 -10
  397. package/dist/presets/recommended.d.ts.map +1 -1
  398. package/dist/presets/recommended.js +25 -23
  399. package/dist/presets/recommended.js.map +1 -1
  400. package/dist/presets/shared.d.ts +267 -2
  401. package/dist/presets/shared.d.ts.map +1 -1
  402. package/dist/presets/shared.js +367 -4
  403. package/dist/presets/shared.js.map +1 -1
  404. package/dist/rules/code-quality.d.ts.map +1 -1
  405. package/dist/rules/code-quality.js +15 -6
  406. package/dist/rules/code-quality.js.map +1 -1
  407. package/dist/rules/hygiene.d.ts +1 -1
  408. package/dist/rules/hygiene.js +1 -1
  409. package/dist/rules/metrics-function.d.ts +2 -1
  410. package/dist/rules/metrics-function.d.ts.map +1 -1
  411. package/dist/rules/metrics-function.js +63 -39
  412. package/dist/rules/metrics-function.js.map +1 -1
  413. package/dist/rules/metrics.d.ts +2 -1
  414. package/dist/rules/metrics.d.ts.map +1 -1
  415. package/dist/rules/metrics.js +80 -47
  416. package/dist/rules/metrics.js.map +1 -1
  417. package/dist/smells/clusters.d.ts +78 -0
  418. package/dist/smells/clusters.d.ts.map +1 -0
  419. package/dist/smells/clusters.js +124 -0
  420. package/dist/smells/clusters.js.map +1 -0
  421. package/dist/smells/duplicate-bodies.d.ts +92 -5
  422. package/dist/smells/duplicate-bodies.d.ts.map +1 -1
  423. package/dist/smells/duplicate-bodies.js +203 -73
  424. package/dist/smells/duplicate-bodies.js.map +1 -1
  425. package/dist/smells/duplicate-report.d.ts +90 -0
  426. package/dist/smells/duplicate-report.d.ts.map +1 -0
  427. package/dist/smells/duplicate-report.js +344 -0
  428. package/dist/smells/duplicate-report.js.map +1 -0
  429. package/dist/smells/fingerprint.d.ts +20 -1
  430. package/dist/smells/fingerprint.d.ts.map +1 -1
  431. package/dist/smells/fingerprint.js +27 -3
  432. package/dist/smells/fingerprint.js.map +1 -1
  433. package/dist/smells/inconsistent-siblings.d.ts +128 -7
  434. package/dist/smells/inconsistent-siblings.d.ts.map +1 -1
  435. package/dist/smells/inconsistent-siblings.js +288 -86
  436. package/dist/smells/inconsistent-siblings.js.map +1 -1
  437. package/dist/smells/sibling-files.d.ts +47 -0
  438. package/dist/smells/sibling-files.d.ts.map +1 -0
  439. package/dist/smells/sibling-files.js +104 -0
  440. package/dist/smells/sibling-files.js.map +1 -0
  441. package/dist/smells/similar-pairs.d.ts +28 -0
  442. package/dist/smells/similar-pairs.d.ts.map +1 -0
  443. package/dist/smells/similar-pairs.js +134 -0
  444. package/dist/smells/similar-pairs.js.map +1 -0
  445. package/dist/smells/smell-builder.d.ts +57 -12
  446. package/dist/smells/smell-builder.d.ts.map +1 -1
  447. package/dist/smells/smell-builder.js +112 -14
  448. package/dist/smells/smell-builder.js.map +1 -1
  449. package/dist/smells/variation.d.ts +47 -0
  450. package/dist/smells/variation.d.ts.map +1 -0
  451. package/dist/smells/variation.js +90 -0
  452. package/dist/smells/variation.js.map +1 -0
  453. package/dist/tsconfig/index.d.ts +19 -0
  454. package/dist/tsconfig/index.d.ts.map +1 -0
  455. package/dist/tsconfig/index.js +20 -0
  456. package/dist/tsconfig/index.js.map +1 -0
  457. package/dist/tsconfig/tsconfig-builder.d.ts +42 -9
  458. package/dist/tsconfig/tsconfig-builder.d.ts.map +1 -1
  459. package/dist/tsconfig/tsconfig-builder.js +65 -16
  460. package/dist/tsconfig/tsconfig-builder.js.map +1 -1
  461. package/package.json +4 -2
  462. package/dist/core/module-dependencies.d.ts +0 -28
  463. package/dist/core/module-dependencies.d.ts.map +0 -1
  464. package/dist/core/module-dependencies.js +0 -35
  465. package/dist/core/module-dependencies.js.map +0 -1
  466. package/dist/helpers/within.d.ts.map +0 -1
  467. package/dist/helpers/within.js.map +0 -1
@@ -1,13 +1,25 @@
1
1
  import picomatch from 'picomatch';
2
- import { TerminalBuilder, matchSelections } from '@nielspeter/eess';
2
+ import { collectResult } from '@nielspeter/eess';
3
+ import { ownsEmptyDiscovery } from '@nielspeter/eess/internal';
4
+ import { stampGlobs } from '@nielspeter/eess/internal';
5
+ import { globAnyOf } from '@nielspeter/eess';
6
+ import { TerminalBuilder } from '../core/terminal-builder.js';
7
+ import { shallowClone } from '@nielspeter/eess/internal';
8
+ import { isProjectRelative, relativeToRoot } from '../core/project-relative.js';
3
9
  /**
4
10
  * Resolve a layer by matching its glob against the project's source files.
5
11
  */
6
12
  function resolveLayer(project, name, pattern) {
7
13
  const isMatch = picomatch(pattern);
14
+ const relative = isProjectRelative(pattern);
8
15
  const files = [];
9
16
  for (const sf of project.getSourceFiles()) {
10
- if (isMatch(sf.getFilePath())) {
17
+ const filePath = sf.getFilePath();
18
+ // Bug 0036: the glob is matched against an ABSOLUTE path, so a
19
+ // project-relative one could never resolve a layer. Same rule as every
20
+ // other path glob — relative means from the project root.
21
+ const fromRoot = relative ? relativeToRoot(sf, filePath, project.tsConfigPath) : undefined;
22
+ if (isMatch(filePath) || (fromRoot !== undefined && isMatch(fromRoot))) {
11
23
  files.push(sf);
12
24
  }
13
25
  }
@@ -15,19 +27,23 @@ function resolveLayer(project, name, pattern) {
15
27
  }
16
28
  /**
17
29
  * 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.
30
+ * Iterates the Cartesian product, keeping only pairs where the mapping returns true.
22
31
  */
23
32
  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
- }));
33
+ const pairs = [];
34
+ for (const left of leftLayer.files) {
35
+ for (const right of rightLayer.files) {
36
+ if (mappingFn(left, right)) {
37
+ pairs.push({
38
+ left,
39
+ leftLayer: leftLayer.name,
40
+ right,
41
+ rightLayer: rightLayer.name,
42
+ });
43
+ }
44
+ }
45
+ }
46
+ return pairs;
31
47
  }
32
48
  /**
33
49
  * Builder for cross-layer consistency rules.
@@ -37,8 +53,8 @@ function computePairs(leftLayer, rightLayer, mappingFn) {
37
53
  *
38
54
  * @example
39
55
  * crossLayer(project)
40
- * .layer('routes', 'src/routes/**')
41
- * .layer('schemas', 'src/schemas/**')
56
+ * .layer('routes', '**\/src/routes/**')
57
+ * .layer('schemas', '**\/src/schemas/**')
42
58
  * .mapping((a, b) => a.getBaseName().replace('Route', '') === b.getBaseName().replace('Schema', ''))
43
59
  * .forEachPair()
44
60
  * .should(haveMatchingCounterpart())
@@ -55,8 +71,24 @@ export class CrossLayerBuilder {
55
71
  * At least two layers must be defined before calling `.mapping()`.
56
72
  */
57
73
  layer(name, pattern) {
58
- this._layerDefs.push({ name, pattern });
59
- return this;
74
+ const next = this.copy();
75
+ next._layerDefs.push({ name, pattern });
76
+ return next;
77
+ }
78
+ /**
79
+ * An independent copy, carrying the layer definitions (bug 0016).
80
+ *
81
+ * This class does not extend {@link TerminalBuilder} — it produces a rule
82
+ * rather than being one — so it does not inherit that class's `copy()`. It
83
+ * still needs copy-on-write for the same reason: a held `crossLayer(p)`
84
+ * accumulated a layer per `.layer()` call across every rule derived from it,
85
+ * and `mapping()` pairs *consecutive* layers, so an extra layer silently
86
+ * changes which pairs a later rule compares.
87
+ */
88
+ copy() {
89
+ const clone = shallowClone(this);
90
+ clone._layerDefs = [...this._layerDefs];
91
+ return clone;
60
92
  }
61
93
  /**
62
94
  * Provide a mapping function that determines which elements form pairs.
@@ -78,59 +110,156 @@ export class CrossLayerBuilder {
78
110
  if (left && right)
79
111
  allPairs.push(...computePairs(left, right, fn));
80
112
  }
81
- return new MappedCrossLayerBuilder(layers, allPairs);
113
+ return new MappedCrossLayerBuilder(layers, allPairs, this.project);
82
114
  }
83
115
  }
84
116
  /**
85
117
  * Intermediate builder after `.mapping()` has been called.
86
118
  * The layers are resolved and pairs computed.
87
119
  */
88
- // eess-exclude eess/no-unused-exports: return type of the exported CrossLayerBuilder.mapping() fluent-chain method (must stay exported for declaration emit)
120
+ // A fluent-chain intermediate: nothing imports it by name, but it is the declared
121
+ // return type of an exported method, and `arch-rules.test.ts` ·
122
+ // `it('builders must be exported')` requires every class under `src/builders/` to be
123
+ // exported — "unexported builders are unreachable". The two rules genuinely disagree
124
+ // here; this resolves toward the explicit, reasoned one. The directive sits LAST because
125
+ // a single-line waiver covers exactly the next line.
126
+ // eess-exclude eess/no-unused-exports: fluent-chain intermediate, exported per the rule above
89
127
  export class MappedCrossLayerBuilder {
90
128
  layers;
91
129
  pairs;
92
- constructor(layers, pairs) {
130
+ project;
131
+ constructor(layers, pairs, project) {
93
132
  this.layers = layers;
94
133
  this.pairs = pairs;
134
+ this.project = project;
95
135
  }
96
136
  /**
97
137
  * Iterate over each matched pair. Returns a builder for attaching conditions.
98
138
  */
99
139
  forEachPair() {
100
- return new PairConditionBuilder(this.layers, this.pairs);
140
+ return new PairConditionBuilder(this.layers, this.pairs, this.project);
101
141
  }
102
142
  }
103
143
  /**
104
144
  * Builder after `.forEachPair()` — attach a pair condition via `.should()`.
105
145
  */
106
- // eess-exclude eess/no-unused-exports: return type of the exported MappedCrossLayerBuilder.forEachPair() fluent-chain method (must stay exported for declaration emit)
146
+ // A fluent-chain intermediate: nothing imports it by name, but it is the declared
147
+ // return type of an exported method, and `arch-rules.test.ts` ·
148
+ // `it('builders must be exported')` requires every class under `src/builders/` to be
149
+ // exported — "unexported builders are unreachable". The two rules genuinely disagree
150
+ // here; this resolves toward the explicit, reasoned one. The directive sits LAST because
151
+ // a single-line waiver covers exactly the next line.
152
+ // eess-exclude eess/no-unused-exports: fluent-chain intermediate, exported per the rule above
107
153
  export class PairConditionBuilder {
108
154
  layers;
109
155
  pairs;
110
- constructor(layers, pairs) {
156
+ project;
157
+ constructor(layers, pairs, project) {
111
158
  this.layers = layers;
112
159
  this.pairs = pairs;
160
+ this.project = project;
113
161
  }
114
162
  /**
115
163
  * Attach a pair condition to evaluate against matched pairs.
116
164
  */
117
165
  should(condition) {
118
- return new PairFinalBuilder(this.layers, this.pairs, condition);
166
+ return new PairFinalBuilder(this.layers, this.pairs, condition, this.project);
119
167
  }
120
168
  }
121
169
  /**
122
170
  * Terminal builder — call `.check()`, `.warn()`, or `.because()`.
123
171
  */
124
- // eess-exclude eess/no-unused-exports: return type of the exported PairConditionBuilder.should() fluent-chain method (must stay exported for declaration emit)
172
+ // A fluent-chain intermediate: nothing imports it by name, but it is the declared
173
+ // return type of an exported method, and `arch-rules.test.ts` ·
174
+ // `it('builders must be exported')` requires every class under `src/builders/` to be
175
+ // exported — "unexported builders are unreachable". The two rules genuinely disagree
176
+ // here; this resolves toward the explicit, reasoned one. The directive sits LAST because
177
+ // a single-line waiver covers exactly the next line.
178
+ // eess-exclude eess/no-unused-exports: fluent-chain intermediate, exported per the rule above
125
179
  export class PairFinalBuilder extends TerminalBuilder {
126
180
  layers;
127
181
  pairs;
128
182
  condition;
129
- constructor(layers, pairs, condition) {
183
+ project;
184
+ /**
185
+ * @param project - Optional so the constructor stays source-compatible; the
186
+ * chain always supplies it. Without it `doctor` cannot check this rule's
187
+ * layer globs and has to report that it could not, which is honest but
188
+ * useless — and used to be silent.
189
+ */
190
+ constructor(layers, pairs, condition, project) {
130
191
  super();
131
192
  this.layers = layers;
132
193
  this.pairs = pairs;
133
194
  this.condition = condition;
195
+ this.project = project;
196
+ }
197
+ /** The project this rule was built against. See `RuleBuilder.getProject`. */
198
+ getProject() {
199
+ return this.project;
200
+ }
201
+ /**
202
+ * The layer globs, one tree each.
203
+ *
204
+ * Per layer rather than one `any` node, for the same reason as
205
+ * `assignedFrom`: a dead glob means that layer is empty, and every pair
206
+ * involving it is silently unchecked. Folding them together would report a
207
+ * fault only when EVERY layer was empty.
208
+ */
209
+ globs() {
210
+ return this.layers.map((layer) => stampGlobs(globAnyOf([layer.pattern], 'file-path', isProjectRelative(layer.pattern) ? 'normalized' : 'absolute'), 'discovery', (g) => `layer("${layer.name}", "${g.glob}")`));
211
+ }
212
+ /**
213
+ * Does the condition this rule was built with diagnose its own empty layers?
214
+ *
215
+ * **Asked of the condition, not asserted about all of them** (plan 0081). This
216
+ * returned a bare `true` while the docstring here claimed "all three produce a
217
+ * finding naming the layer" — and at v0.45.0 that was false, because
218
+ * `haveMatchingCounterpart` missed a dead FINAL layer. The blanket declaration
219
+ * suppressed the gate for precisely the case its declared owner did not handle,
220
+ * so the reader got silence instead of a generic message
221
+ * ([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)).
222
+ *
223
+ * A prose claim about three implementations goes stale when a fourth arrives.
224
+ * A tag read off the condition cannot: an untagged condition is covered by the
225
+ * gate, which is the recoverable direction.
226
+ *
227
+ * The gate is worth standing down for when the tag IS present: it short-circuits
228
+ * before the condition runs, and the condition's finding names the dead layer
229
+ * and points at the `.layer()` call to edit — a remedy corrected three times
230
+ * before it was right (bug 0042).
231
+ */
232
+ ownsDiscoveryDiagnosis() {
233
+ // A registry lookup, not a property read. The property form — symbol-keyed on
234
+ // the condition — was readable off any shipped condition via
235
+ // `Object.getOwnPropertySymbols` and could be copied onto a user condition that
236
+ // reports nothing, which measured 0 findings on a dead layer. `WeakSet`
237
+ // membership cannot be read off the object, so there is nothing to copy.
238
+ return ownsEmptyDiscovery(this.condition);
239
+ }
240
+ /**
241
+ * Pairs this rule examined — plan 0098. `condition.evaluate` receives exactly
242
+ * this array, so the count cannot drift from what was checked.
243
+ */
244
+ /**
245
+ * This family counts layer pairs — the pairs of layers it compares.
246
+ *
247
+ * Plan 0099: `CollectResult.examined` is unit-typed per family (ADR-009 part
248
+ * 1), and the zero-examined message prints the noun. Inheriting the base
249
+ * `'subjects'` is a category error in a sentence whose whole job is naming what
250
+ * was and was not looked at.
251
+ */
252
+ examinedUnitNoun() {
253
+ return 'layer pairs';
254
+ }
255
+ /**
256
+ * How many units this rule actually examined — ADR-010's evidence that a pass
257
+ * was constructed rather than defaulted.
258
+ *
259
+ * The materialized elements of the layer selection.
260
+ */
261
+ examinedUnits() {
262
+ return this.pairs.length;
134
263
  }
135
264
  collectViolations() {
136
265
  const layerNames = this.layers.map((l) => l.name);
@@ -140,8 +269,17 @@ export class PairFinalBuilder extends TerminalBuilder {
140
269
  ruleId: this._metadata?.id,
141
270
  suggestion: this._metadata?.suggestion,
142
271
  docs: this._metadata?.docs,
272
+ // The builder's OWN resolved layers (bug 0040). A condition that needs
273
+ // them no longer has to be handed a copy the caller assembled — which was
274
+ // impossible to assemble correctly, since `layers` is private here and
275
+ // `resolveLayer` is not exported.
276
+ layers: this.layers,
143
277
  };
144
- return this.condition.evaluate(this.pairs, context);
278
+ // Plan 0098: the pairs ARE the examined set — `evaluate` receives exactly
279
+ // this array, so the count cannot drift from what was checked.
280
+ return collectResult(this.condition.evaluate(this.pairs, context), {
281
+ examined: this.examinedUnits(),
282
+ });
145
283
  }
146
284
  }
147
285
  /**
@@ -152,19 +290,28 @@ export class PairFinalBuilder extends TerminalBuilder {
152
290
  *
153
291
  * @example
154
292
  * crossLayer(project)
155
- * .layer('routes', 'src/routes/**')
156
- * .layer('schemas', 'src/schemas/**')
293
+ * .layer('routes', '**\/src/routes/**')
294
+ * .layer('schemas', '**\/src/schemas/**')
157
295
  * .mapping((a, b) => a.getBaseName().replace('-route', '') === b.getBaseName().replace('-schema', ''))
158
296
  * .forEachPair()
159
297
  * .should(haveMatchingCounterpart())
160
298
  * .check()
299
+ */
300
+ /**
301
+ * @deprecated Superseded by `crossProject()` **for pairings that are key equality** —
302
+ * `key(a) === key(b)` with each key derived from its own side. That covers most
303
+ * rules, including `haveConsistentExports` (a key function may return an array, so
304
+ * one file expands into one key per symbol). It is a rewrite, not a rename: the
305
+ * pairing moves from `.mapping(fn)` into the key.
306
+ *
307
+ * KEEP `crossLayer` if your `.mapping(fn)` is not key equality — prefix matching,
308
+ * directory nesting, "imports its schema" — or if you use `satisfyPairCondition`,
309
+ * whose callback builds its own violation (including `measured`/`metricUnit` for the
310
+ * baseline ratchet) and has no `crossProject` equivalent. Chains of 3+ layers become
311
+ * N−1 separate rules.
161
312
  *
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).
313
+ * Migration table and the full list of what changes:
314
+ * https://github.com/nielspeter/eess/blob/main/docs/cross-project.md#migrating-from-crosslayer
168
315
  */
169
316
  export function crossLayer(p) {
170
317
  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":"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"}
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,yBAAyB,CAAA;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAO/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,OAAO,EAAoB,KAAK,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAE7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAqBxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAqC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAC;IAG9D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBADpC,OAAO,EAAE,WAAW,EACH,kBAAkB,CAAC,EAAE,yBAAyB,YAAA;IAKjE,SAAS,CAAC,WAAW,IAAI,YAAY,EAAE;IAevC;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQhD;;;;;;;OAOG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C;;;;;;;OAOG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;;;;;;OAOG;IACH,WAAW,IAAI,IAAI;IAInB;;;;;;;OAOG;IACH,cAAc,IAAI,IAAI;IAMtB;;;;;;;OAOG;IACH,SAAS,IAAI,IAAI;IAIjB;;;;;;;OAOG;IACH,YAAY,IAAI,IAAI;IAIpB;;;;;;;OAOG;IACH,UAAU,IAAI,IAAI;IAMlB;;;;;;;OAOG;IACH,QAAQ,IAAI,IAAI;IAIhB;;;;;;;OAOG;IACH,WAAW,IAAI,IAAI;IAInB;;;;;;;OAOG;IACH,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAInC;;;;;;;OAOG;IACH,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9C;;;;;;;OAOG;IACH,0BAA0B,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;;;;OAOG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAItC;;;;;;;OAOG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI9C;;;;;;;OAOG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;;;;;;OAOG;IACH,qBAAqB,IAAI,IAAI;IAI7B;;;;;;;OAOG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAI9D;;;;;;;OAOG;IACH,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,CACvB,CAAC,EAAE,WAAW,EACd,OAAO,CAAC,EAAE,yBAAyB,GAClC,mBAAmB,CAErB"}