@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,20 +1,30 @@
1
- import { TerminalBuilder } from '@nielspeter/eess';
2
- import { resolveByMatching, resolveByDefinition } from '../models/slice.js';
1
+ import { emptyDiscoveryMessage, metaViolation } from './slice-discovery-message.js';
2
+ import { globAnyOf, stampGlobs } from '@nielspeter/eess';
3
+ import { TerminalBuilder } from '../core/terminal-builder.js';
4
+ import { resolveByMatching, resolveByDefinition, matchingGlobPrefix, matchingGlobPattern, } from '../models/slice.js';
5
+ import { splitGlobArgs } from '../core/import-options.js';
3
6
  import { beFreeOfCycles as beFreeOfCyclesCondition, respectLayerOrder as respectLayerOrderCondition, notDependOn as notDependOnCondition, } from '../conditions/slice.js';
7
+ import { isProjectRelative } from '../core/project-relative.js';
4
8
  /**
5
9
  * Rule builder for slice-level architecture rules.
6
10
  *
7
- * Unlike other builders that extend RuleBuilder<T>, SliceRuleBuilder
8
- * has its own chain because the grouping step (matching/assignedFrom)
9
- * replaces the predicate phase entirely.
11
+ * Unlike the builders that extend `RuleBuilder<T>`, this one has its own chain:
12
+ * the grouping step (`matching` / `assignedFrom`) replaces the predicate phase
13
+ * entirely, because a slice is defined by how files are grouped rather than by a
14
+ * predicate over already-selected subjects.
10
15
  *
11
- * Usage:
12
- * slices(project).matching(glob).should().beFreeOfCycles().check()
13
- * slices(project).assignedFrom(def).should().respectLayerOrder(...).check()
16
+ * ```ts
17
+ * slices(project).matching(glob).should().beFreeOfCycles().check()
18
+ * slices(project).assignedFrom(def).should().respectLayerOrder(...).check()
19
+ * ```
20
+ *
21
+ * This class carried a docblock on `main` and lost it when the file was split
22
+ * for `eess/max-class-lines`; it is restored rather than rewritten.
14
23
  */
15
24
  export class SliceRuleBuilder extends TerminalBuilder {
16
25
  project;
17
26
  _slices = [];
27
+ _discovery;
18
28
  _conditions = [];
19
29
  constructor(project) {
20
30
  super();
@@ -31,8 +41,10 @@ export class SliceRuleBuilder extends TerminalBuilder {
31
41
  * // Slices: auth, billing, orders, etc.
32
42
  */
33
43
  matching(glob) {
34
- this._slices = resolveByMatching(this.project, glob);
35
- return this;
44
+ const next = this.copy();
45
+ next._discovery = { mode: 'matching', glob };
46
+ next._slices = resolveByMatching(this.project, glob);
47
+ return next;
36
48
  }
37
49
  /**
38
50
  * Define slices from an explicit name-to-glob mapping.
@@ -46,8 +58,74 @@ export class SliceRuleBuilder extends TerminalBuilder {
46
58
  * })
47
59
  */
48
60
  assignedFrom(definition) {
49
- this._slices = resolveByDefinition(this.project, definition);
50
- return this;
61
+ const entries = Object.entries(definition).map(([name, glob]) => ({ name, glob }));
62
+ const next = this.copy();
63
+ next._discovery = { mode: 'assignedFrom', entries };
64
+ next._slices = resolveByDefinition(this.project, definition);
65
+ return next;
66
+ }
67
+ /** The project this rule was built against. See `RuleBuilder.getProject`. */
68
+ getProject() {
69
+ return this.project;
70
+ }
71
+ /**
72
+ * The discovery globs this rule was scoped with.
73
+ *
74
+ * `assignedFrom` fans out into one slice per entry, so each entry is its own
75
+ * tree: one dead layer glob is one empty slice, and folding them into an
76
+ * `any` node would say "no fault unless every slice is empty" — a false
77
+ * green. This is the same reason a preset's option list is not an `any`
78
+ * node.
79
+ *
80
+ * `matching()` needs no `base` special case, because it declares the glob
81
+ * `parseMatchingGlob` produces rather than the one the author wrote — and
82
+ * that one is already anchored. Declaring the author's spelling and
83
+ * exempting it via `base` was the earlier design, and it reported every
84
+ * nested-layout rule as dead while looking correct on a flat fixture.
85
+ */
86
+ globs() {
87
+ if (!this._discovery)
88
+ return [];
89
+ if (this._discovery.mode === 'matching') {
90
+ // Declare the glob picomatch is given, not the one the author wrote.
91
+ // `parseMatchingGlob` strips './' and '**/', normalises a trailing
92
+ // slash, and appends '*/**' — so the author's spelling is matched
93
+ // against nothing at runtime and declaring it reports every correct
94
+ // nested-layout rule as dead. `origin` keeps the spelling, which is what
95
+ // the reader needs to find the line.
96
+ const authored = this._discovery.glob;
97
+ // `resolveByMatching` bails before matching anything when the glob has no
98
+ // literal directory prefix ('*', '**', 'src'), because the slice name is
99
+ // the segment after that prefix and there is none. Decidable from the
100
+ // glob alone, so declare a glob that cannot match rather than let the
101
+ // pre-flight stay silent about a rule the runtime guard will fail.
102
+ const unresolvable = matchingGlobPrefix(authored) === '';
103
+ return [
104
+ stampGlobs(globAnyOf([unresolvable ? NEVER_MATCHES : matchingGlobPattern(authored)], 'file-path'), 'discovery', () => `matching("${authored}")`),
105
+ ];
106
+ }
107
+ return this._discovery.entries.map((entry) => stampGlobs(
108
+ // `base: 'normalized'` for a project-relative glob — bug 0033. The
109
+ // anchor check calls an unanchored glob dead against absolute paths,
110
+ // and since this entry point now resolves one against the project root
111
+ // it stops being dead exactly when it starts working. Without this,
112
+ // `doctor` reds a rule that discovers slices correctly: measured, a
113
+ // relative `assignedFrom` glob gave 0 violations and a `dead-glob`
114
+ // diagnosis in the same run.
115
+ globAnyOf([entry.glob], 'file-path', isProjectRelative(entry.glob) ? 'normalized' : 'absolute'), 'discovery', (g) => `assignedFrom({ ${entry.name}: "${g.glob}" })`));
116
+ }
117
+ /**
118
+ * An independent copy, carrying the condition list and the resolved slices.
119
+ *
120
+ * `_slices` is replaced wholesale by both discovery methods, so only the
121
+ * condition array needs its own copy — but it is listed here anyway, because
122
+ * the next person to add a field will read this method, not the two callers.
123
+ */
124
+ copy() {
125
+ const clone = super.copy();
126
+ clone._slices = [...this._slices];
127
+ clone._conditions = [...this._conditions];
128
+ return clone;
51
129
  }
52
130
  /**
53
131
  * Begin the condition phase. Returns `this` for chaining.
@@ -64,39 +142,154 @@ export class SliceRuleBuilder extends TerminalBuilder {
64
142
  /**
65
143
  * Assert that no circular dependencies exist between slices.
66
144
  */
67
- beFreeOfCycles() {
68
- this._conditions.push(beFreeOfCyclesCondition());
69
- return this;
145
+ /**
146
+ * @param options - `ignoreTypeImports` defaults to **true**: a type-only import
147
+ * is erased at compile time and creates no runtime dependency, so counting it
148
+ * as a cycle edge reports cycles that cannot exist (plan 0084). Pass
149
+ * `{ ignoreTypeImports: false }` to count type-only edges too.
150
+ * NOT a way back to the pre-0.47 graph: since v0.48.0 re-exports are counted as
151
+ * well, so type edges plus re-export edges is WIDER than 0.46.1 ever was.
152
+ */
153
+ beFreeOfCycles(options) {
154
+ const next = this.copy();
155
+ next._conditions.push(beFreeOfCyclesCondition(options));
156
+ return next;
70
157
  }
71
158
  /**
72
- * Assert that slices respect a layered dependency order.
73
- * Layer N may depend on layers N+1, N+2, ... but NOT on layers with lower index.
159
+ * Asserts that imports between the named slices flow in the declared order —
160
+ * outermost first — so no inner layer depends on an outer one.
74
161
  *
75
- * @param layers - Ordered layer names from highest to lowest
162
+ * Variadic, with an optional trailing `ImportOptions`.
76
163
  */
77
- respectLayerOrder(...layers) {
78
- this._conditions.push(respectLayerOrderCondition(...layers));
79
- return this;
164
+ respectLayerOrder(...args) {
165
+ // Split and re-dispatch rather than spreading `args` straight through: TypeScript
166
+ // cannot match a tuple-union spread to an overload, and ADR-005 bars the `as` that
167
+ // would force it. `splitGlobArgs` exists for exactly this (it removed ten casts).
168
+ const { globs: layers, options } = splitGlobArgs(args);
169
+ const next = this.copy();
170
+ next._conditions.push(options === undefined
171
+ ? respectLayerOrderCondition(...layers)
172
+ : respectLayerOrderCondition(layers, options));
173
+ return next;
80
174
  }
81
175
  /**
82
- * Assert that no slice depends on any of the listed slices.
176
+ * Asserts that the selected slices import nothing from the named slices.
83
177
  *
84
- * @param sliceNames - Names of forbidden dependency targets
178
+ * Variadic, with an optional trailing `ImportOptions`.
85
179
  */
86
- notDependOn(...sliceNames) {
87
- this._conditions.push(notDependOnCondition(...sliceNames));
88
- return this;
180
+ notDependOn(...args) {
181
+ const { globs: sliceNames, options } = splitGlobArgs(args);
182
+ const next = this.copy();
183
+ next._conditions.push(options === undefined
184
+ ? notDependOnCondition(...sliceNames)
185
+ : notDependOnCondition(sliceNames, options));
186
+ return next;
187
+ }
188
+ /**
189
+ * Whether this rule states an assertion at all — the assertion gate's question.
190
+ *
191
+ * True once a condition has been added; a slice selection with none can never fail.
192
+ *
193
+ * Overrides the `TerminalBuilder` default (`true`), whose JSDoc carries the
194
+ * contract and the reason this is public rather than protected.
195
+ */
196
+ assertsSomething() {
197
+ return this._conditions.length > 0;
198
+ }
199
+ /**
200
+ * The remedy for this builder's assertion-less state, as one string.
201
+ *
202
+ * One channel, so `diagnose()`'s advice and the finding's own message cannot
203
+ * disagree. Overrides `TerminalBuilder`'s generic text with wording specific to
204
+ * what this builder is missing.
205
+ */
206
+ assertionAdvice() {
207
+ return ('this rule has no condition, so it asserts nothing and can never fail. Add a ' +
208
+ 'condition after .should(), e.g. beFreeOfCycles(), respectLayerOrder(...) or ' +
209
+ 'notDependOn(...).');
210
+ }
211
+ /**
212
+ * Named by id when one is set, else by the rule description (plan 0070 §4).
213
+ * The inherited root version says 'unnamed' for every id-less rule, which
214
+ * made three of the assertion hooks unlocatable in a doctor report.
215
+ */
216
+ describeRule() {
217
+ // The rule's own description, not a call-site locator. An earlier revision
218
+ // derived a bounded name from `_discovery` so the withdrawn runtime
219
+ // warning would not carry ten filenames — but `explain --format agent`
220
+ // reads this field, and consumers commit that output into their agent's
221
+ // prompt, so bounding it stripped the condition (the only architectural
222
+ // imperative in the line) from every id-less slice rule.
223
+ return {
224
+ ...super.describeRule(),
225
+ rule: this._metadata?.id ?? this.buildRuleDescription(),
226
+ };
227
+ }
228
+ /**
229
+ * Slice discovery is not per-tree, so the gate must stay out (plan 0080).
230
+ *
231
+ * `assignedFrom` fans out one glob tree per entry, and a single dead entry among
232
+ * populated siblings is a dead *tree* — which the gate would report. That guard
233
+ * was written and **withdrawn before release** for firing on legitimate
234
+ * projects (see `collectViolations` below): a layer not created yet, and the
235
+ * `strict-boundaries` scaffold itself.
236
+ *
237
+ * The all-empty case is handled here too, with a message the gate cannot match
238
+ * — it names the discovery mode and its remedy (bug 0009's corpus). So this
239
+ * builder owns both halves.
240
+ *
241
+ * **Why this is a builder-level `true` while `PairFinalBuilder` asks its
242
+ * condition** (`owns-empty-discovery.ts`, plan 0081): there, ownership varies by
243
+ * condition, and a blanket `true` once suppressed the gate for the one condition
244
+ * that did not self-report. Here nothing varies — the reason is a property of
245
+ * `assignedFrom`'s fan-out, identical for every condition reachable through this
246
+ * builder. The asymmetry reflects the discovery models, not an oversight.
247
+ */
248
+ ownsDiscoveryDiagnosis() {
249
+ return true;
250
+ }
251
+ /**
252
+ * Slices holding at least one file — plan 0098.
253
+ *
254
+ * Counting `_slices.length` would count the SHAPE of the discovery rather than
255
+ * what was examined: `assignedFrom()` returns one slice per key whether or not
256
+ * anything matched, so the empty case is "every slice has no files", never "no
257
+ * slices" (arch-014 I1) — which is the same condition this family already
258
+ * fails closed on.
259
+ */
260
+ examinedUnits() {
261
+ return this._slices.filter((slice) => slice.files.length > 0).length;
89
262
  }
90
263
  collectViolations() {
91
- if (this._slices.length === 0) {
92
- return [];
93
- }
94
- if (this._conditions.length === 0) {
95
- const ruleId = this._metadata?.id ?? 'unnamed';
96
- console.warn(`[eess] Slice rule '${ruleId}' has no conditions. ` +
97
- `Did you forget to add a condition like beFreeOfCycles()?`);
98
- return [];
264
+ // Discovery non-vacuity (ADR-008 / plan 0067): a slice selection that
265
+ // resolved to no slices — or slices that matched no files — discovered
266
+ // nothing, so it enforces nothing. Fail with a config-level meta-finding
267
+ // (bypasses diff/baseline) rather than passing vacuously. `assignedFrom()`
268
+ // returns one slice per key regardless of matches, so the empty case is
269
+ // "every slice has no files", not "no slices" (arch-014 I1).
270
+ if (this._slices.length === 0 || this._slices.every((slice) => slice.files.length === 0)) {
271
+ // Plan 0098: this family ALREADY fails closed here, and has since 0067 —
272
+ // a config-level meta-finding, not a vacuous pass. The floor 0099 adds is a
273
+ // generalisation of this branch, not an invention. `examined` is 0 on the
274
+ // same condition that produces the finding.
275
+ return { violations: [this.emptyDiscoveryViolation()], examined: 0 };
99
276
  }
277
+ // Every slice condition is a statement about relationships BETWEEN slices, so a
278
+ // single slice makes all of them unfalsifiable: `beFreeOfCycles` drops
279
+ // intra-slice edges, and `respectLayerOrder` / `notDependOn` have no second
280
+ // slice to relate to. This is not a hypothetical — a glob that silently
281
+ // collapsed to one mega-slice turned a real cycle green twice while every other
282
+ // guard stayed quiet, so the count itself has to be a finding (ADR-008).
283
+ // NOTE: two further guards were prototyped here — failing when discovery yields
284
+ // exactly one non-empty slice (every inter-slice condition is then
285
+ // unfalsifiable), and when one slice is empty among populated siblings (the
286
+ // conditions silently skip names they cannot resolve). Both catch real
287
+ // false-greens, and both were withdrawn before release: they fire on
288
+ // legitimate projects (a one-feature repo, a layer not created yet, and the
289
+ // `strict-boundaries` scaffold itself) with no opt-out, and their remedies were
290
+ // written for one input and emitted for all of them. They return once the
291
+ // remedy is executable data and an opt-out exists, mirroring
292
+ // `crossProject().allowEmpty(name)`.
100
293
  const context = {
101
294
  rule: this.buildRuleDescription(),
102
295
  because: this._reason,
@@ -108,13 +301,21 @@ export class SliceRuleBuilder extends TerminalBuilder {
108
301
  for (const condition of this._conditions) {
109
302
  violations.push(...condition.evaluate(this._slices, context));
110
303
  }
111
- return violations;
304
+ // Slices holding at least one file. Counting `_slices.length` would count the
305
+ // shape of the discovery rather than what was examined: `assignedFrom()`
306
+ // returns one slice per key whether or not anything matched, so the empty
307
+ // case is "every slice has no files", never "no slices" (arch-014 I1).
308
+ return { violations, examined: this.examinedUnits() };
112
309
  }
113
310
  buildRuleDescription() {
114
311
  const sliceDesc = this._slices.map((s) => s.name).join(', ');
115
312
  const conditionDesc = this._conditions.map((c) => c.description).join(' and ');
116
313
  return `slices [${sliceDesc}] should ${conditionDesc}`;
117
314
  }
315
+ /** Config-level meta-finding for empty slice discovery (plan 0067). */
316
+ emptyDiscoveryViolation() {
317
+ return metaViolation(emptyDiscoveryMessage(this.project, this._discovery), this._metadata, this._reason);
318
+ }
118
319
  }
119
320
  /**
120
321
  * Entry point: create a slice-level rule builder.
@@ -131,4 +332,10 @@ export class SliceRuleBuilder extends TerminalBuilder {
131
332
  export function slices(p) {
132
333
  return new SliceRuleBuilder(p);
133
334
  }
335
+ /**
336
+ * A glob no path can match, for declaring a discovery that cannot resolve for
337
+ * a reason the glob itself does not express. Anchored, so it is reported as
338
+ * `no-match` rather than as a syntax fault whose remedy would be nonsense.
339
+ */
340
+ const NEVER_MATCHES = '**/\u0000never-matches';
134
341
  //# sourceMappingURL=slice-rule-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slice-rule-builder.js","sourceRoot":"","sources":["../../src/builders/slice-rule-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slice-rule-builder.js","sourceRoot":"","sources":["../../src/builders/slice-rule-builder.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ArchProject } from '../core/project.js';
2
- import { RuleBuilder } from '@nielspeter/eess';
2
+ import { RuleBuilder } from '../core/rule-builder.js';
3
3
  import type { TypeMatcher } from '../helpers/type-matchers.js';
4
4
  import { type TypeDeclaration } from '../predicates/type.js';
5
5
  /**
@@ -15,65 +15,136 @@ import { type TypeDeclaration } from '../predicates/type.js';
15
15
  * .because('sortBy must be a union of literals, not bare string')
16
16
  * .check()
17
17
  */
18
- export declare class TypeRuleBuilder extends RuleBuilder<TypeDeclaration, ArchProject> {
18
+ export declare class TypeRuleBuilder extends RuleBuilder<TypeDeclaration> {
19
19
  constructor(project: ArchProject);
20
20
  /**
21
21
  * Collect all InterfaceDeclarations and TypeAliasDeclarations
22
22
  * from all source files in the project.
23
23
  */
24
24
  protected getElements(): TypeDeclaration[];
25
- /** Filter to interface declarations only (excludes type aliases). */
25
+ /**
26
+ * Narrows the selection to types that are interfaces.
27
+ *
28
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
29
+ * becomes an assertion. Written after `.should()` it still filters, and the
30
+ * assertion gate reports it as a misplaced predicate rather than letting the
31
+ * rule pass having asserted nothing.
32
+ */
26
33
  areInterfaces(): this;
27
- /** Filter to type alias declarations only (excludes interfaces). */
34
+ /**
35
+ * Narrows the selection to types that are type aliases.
36
+ *
37
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
38
+ * becomes an assertion. Written after `.should()` it still filters, and the
39
+ * assertion gate reports it as a misplaced predicate rather than letting the
40
+ * rule pass having asserted nothing.
41
+ */
28
42
  areTypeAliases(): this;
29
43
  /**
30
- * Filter to types that have a property with the given name. Resolves
31
- * through the type system, so it works for both interfaces and aliases.
44
+ * Narrows the selection to types that have a property named `name`.
45
+ *
46
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
47
+ * becomes an assertion. Written after `.should()` it still filters, and the
48
+ * assertion gate reports it as a misplaced predicate rather than letting the
49
+ * rule pass having asserted nothing.
32
50
  */
33
51
  haveProperty(name: string): this;
34
52
  /**
35
- * Filter to types whose named property has a type satisfying the matcher.
36
- * Resolves through aliases and mapped types (`Partial<>`, `Pick<>`, ...).
53
+ * Narrows the selection to types that have property `name` of a type matching `matcher`.
54
+ *
55
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
56
+ * becomes an assertion. Written after `.should()` it still filters, and the
57
+ * assertion gate reports it as a misplaced predicate rather than letting the
58
+ * rule pass having asserted nothing.
37
59
  */
38
60
  havePropertyOfType(name: string, matcher: TypeMatcher): this;
39
61
  /**
40
- * Filter to types that extend/reference the named type. Interfaces are
41
- * matched by their `extends` clause; type aliases by a reference to the
42
- * name in the resolved type text.
62
+ * Narrows the selection to types that extend the type `name`.
63
+ *
64
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
65
+ * becomes an assertion. Written after `.should()` it still filters, and the
66
+ * assertion gate reports it as a misplaced predicate rather than letting the
67
+ * rule pass having asserted nothing.
43
68
  */
44
69
  extendType(name: string): this;
45
70
  /**
46
- * Assert that the named property's type satisfies the matcher. Types
47
- * lacking the property are skipped (no violation) — pair with
48
- * `haveProperty()` to require it.
71
+ * Asserts that the selected types have property `name` of a type matching `matcher`.
72
+ *
73
+ * **Condition only** — this is the assertion, so it belongs after `.should()`.
49
74
  */
50
75
  havePropertyType(name: string, matcher: TypeMatcher): this;
51
- /** Assert that matched types are exported from their module. */
76
+ /**
77
+ * Asserts that the selected types are exported.
78
+ *
79
+ * **Condition only** — this is the assertion, so it belongs after `.should()`.
80
+ */
52
81
  beExported(): this;
53
- /** Assert that the filtered type set is empty (no matched type may exist). */
82
+ /**
83
+ * Asserts that the selected types do not exist.
84
+ *
85
+ * **Condition only** — this is the assertion, so it belongs after `.should()`.
86
+ */
54
87
  notExist(): this;
55
88
  /** @deprecated Use `haveNameMatching()` after `.should()` instead. */
56
89
  conditionHaveNameMatching(pattern: RegExp): this;
57
- /** Assert that every matched type has all of the named properties (one violation per missing name). */
90
+ /**
91
+ * Asserts that the selected types have a property named by each of `names`.
92
+ *
93
+ * **Condition only** — this is the assertion, so it belongs after `.should()`.
94
+ */
58
95
  havePropertyNamed(...names: string[]): this;
59
- /** Assert that no matched type has any of the named properties (one violation per forbidden name found). */
96
+ /**
97
+ * Asserts that the selected types do not have a property named by any of `names`.
98
+ *
99
+ * **Condition only** — this is the assertion, so it belongs after `.should()`.
100
+ */
60
101
  notHavePropertyNamed(...names: string[]): this;
61
- /** Assert that every matched type has at least one property whose name matches the regex. */
102
+ /**
103
+ * Asserts that the selected types have a property matching `pattern`.
104
+ *
105
+ * **Condition only** — this is the assertion, so it belongs after `.should()`.
106
+ */
62
107
  havePropertyMatching(pattern: RegExp): this;
63
- /** Assert that no matched type has a property whose name matches the regex (one violation per match). */
108
+ /**
109
+ * Asserts that the selected types do not have a property matching `pattern`.
110
+ *
111
+ * **Condition only** — this is the assertion, so it belongs after `.should()`.
112
+ */
64
113
  notHavePropertyMatching(pattern: RegExp): this;
65
- /** Assert that every property of each matched type is `readonly` (resolves `Readonly<T>` too). */
114
+ /**
115
+ * Asserts that the selected types have only readonly properties.
116
+ *
117
+ * **Condition only** — this is the assertion, so it belongs after `.should()`.
118
+ */
66
119
  haveOnlyReadonlyProperties(): this;
67
- /** Assert that no matched type has more than `max` properties (guards against oversized DTOs). */
120
+ /**
121
+ * Asserts that the selected types have at most `max` properties.
122
+ *
123
+ * **Condition only** — this is the assertion, so it belongs after `.should()`.
124
+ */
68
125
  maxProperties(max: number): this;
69
126
  /**
70
127
  * After `.that()`: filter types whose name matches the pattern.
71
128
  * After `.should()`: assert matched types have names matching the pattern.
72
129
  */
73
130
  haveNameMatching(pattern: RegExp | string): this;
74
- /** Filter to types that are exported from their module. */
131
+ /**
132
+ * Narrows the selection to types that are exported.
133
+ *
134
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
135
+ * becomes an assertion. Written after `.should()` it still filters, and the
136
+ * assertion gate reports it as a misplaced predicate rather than letting the
137
+ * rule pass having asserted nothing.
138
+ */
75
139
  areExported(): this;
76
- /** Filter to types that are NOT exported from their module. */
140
+ /**
141
+ * Narrows the selection to types that are not exported.
142
+ *
143
+ * **Predicate only**, unlike the dual-use methods on this builder: it never
144
+ * becomes an assertion. Written after `.should()` it still filters, and the
145
+ * assertion gate reports it as a misplaced predicate rather than letting the
146
+ * rule pass having asserted nothing.
147
+ */
77
148
  areNotExported(): this;
78
149
  /**
79
150
  * After `.that()`: filter types in a file matching the glob.
@@ -1 +1 @@
1
- {"version":3,"file":"type-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/type-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAA;AAyB9B;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,SAAQ,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC;gBAChE,OAAO,EAAE,WAAW;IAIhC;;;OAGG;IACH,SAAS,CAAC,WAAW,IAAI,eAAe,EAAE;IAW1C,qEAAqE;IACrE,aAAa,IAAI,IAAI;IAIrB,oEAAoE;IACpE,cAAc,IAAI,IAAI;IAItB;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAI5D;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAI1D,gEAAgE;IAChE,UAAU,IAAI,IAAI;IAIlB,8EAA8E;IAC9E,QAAQ,IAAI,IAAI;IAIhB,sEAAsE;IACtE,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMhD,uGAAuG;IACvG,iBAAiB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAI3C,4GAA4G;IAC5G,oBAAoB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAI9C,6FAA6F;IAC7F,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3C,yGAAyG;IACzG,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9C,kGAAkG;IAClG,0BAA0B,IAAI,IAAI;IAIlC,kGAAkG;IAClG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMhC;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQhD,2DAA2D;IAC3D,WAAW,IAAI,IAAI;IAInB,+DAA+D;IAC/D,cAAc,IAAI,IAAI;IAItB;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAMnC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,CAErD"}
1
+ {"version":3,"file":"type-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/type-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAA;AA6B9B;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,SAAQ,WAAW,CAAC,eAAe,CAAC;gBACnD,OAAO,EAAE,WAAW;IAIhC;;;OAGG;IACH,SAAS,CAAC,WAAW,IAAI,eAAe,EAAE;IAa1C;;;;;;;OAOG;IACH,aAAa,IAAI,IAAI;IAIrB;;;;;;;OAOG;IACH,cAAc,IAAI,IAAI;IAItB;;;;;;;OAOG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIhC;;;;;;;OAOG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAI5D;;;;;;;OAOG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAI1D;;;;OAIG;IACH,UAAU,IAAI,IAAI;IAIlB;;;;OAIG;IACH,QAAQ,IAAI,IAAI;IAIhB,sEAAsE;IACtE,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMhD;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAI3C;;;;OAIG;IACH,oBAAoB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAI9C;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;OAIG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9C;;;;OAIG;IACH,0BAA0B,IAAI,IAAI;IAIlC;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMhC;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQhD;;;;;;;OAOG;IACH,WAAW,IAAI,IAAI;IAInB;;;;;;;OAOG;IACH,cAAc,IAAI,IAAI;IAItB;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAMnC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,CAErD"}