@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
@@ -0,0 +1,287 @@
1
+ /**
2
+ * **The exports here are `crossProject` / `CrossProjectBuilder`; the FILE is still
3
+ * `correspondence-builder.ts`, on purpose.**
4
+ *
5
+ * The symbols were renamed because `correspondence` collided: the kernel exports
6
+ * a different `correspondence({ left, right })` that `eess-md` re-exports and
7
+ * `docs/markdown.md` teaches, so one word named two incompatible APIs inside one
8
+ * family — and `family.rules.ts`'s allowlist, written to mean "eess-ts has no
9
+ * correspondence", silently permitted "eess-ts has a different one". Found by the
10
+ * product and architect reviews of PR #72.
11
+ *
12
+ * The filename did not follow because nine `path:line` pointers in CLOSED records
13
+ * (plans 0147 and 0150) cite it. Renaming the file would either break them or
14
+ * require rewriting finished history to describe a name that never existed at the
15
+ * time. The collision was in the published API, and that is what was fixed;
16
+ * tidying the filename is not worth falsifying a record.
17
+ */
18
+ import type { ViolationMeta } from './correspondence-findings.js';
19
+ import type { RuleDescription } from '@nielspeter/eess';
20
+ import type { CollectResult } from '../core/terminal-builder.js';
21
+ import type { ArchProject } from '../core/project.js';
22
+ import { RuleBuilder } from '../core/rule-builder.js';
23
+ import { TerminalBuilder } from '../core/terminal-builder.js';
24
+ import type { CorrespondenceResult } from '@nielspeter/eess';
25
+ /**
26
+ * Map a selection subject to one or more comparison keys.
27
+ *
28
+ * This is the acknowledged raw-node seam (ADR-007): `subject` is the builder's
29
+ * element type (a ts-morph node for `classes()`/`types()`, an `ArchCall` /
30
+ * `ArchFunction` wrapper otherwise). Prefer the `byName` / `byArg` /
31
+ * `byPropertyNames` vocabulary below for the common cases.
32
+ */
33
+ export type KeyFn<T> = (subject: T) => string | readonly string[];
34
+ /** A plain, already-derived key set. Normalize keys before passing them. */
35
+ export type KeysSource = readonly string[] | ReadonlySet<string>;
36
+ /**
37
+ * The materialized state of one crossProject check, threaded to the phase
38
+ * helpers as ONE object.
39
+ *
40
+ * Six values travel together — two sides, their keyed maps, the set result and
41
+ * the violation metadata — and passing them positionally would put every helper
42
+ * over the four-parameter cap while inviting the transposition that cap exists
43
+ * to prevent (`aKeyed`/`bKeyed` are the same type).
44
+ */
45
+ export interface Pairing {
46
+ readonly sideA: Side;
47
+ readonly sideB: Side;
48
+ readonly aKeyed: Map<string, unknown[]>;
49
+ readonly bKeyed: Map<string, unknown[]>;
50
+ readonly result: CorrespondenceResult;
51
+ readonly meta: ViolationMeta;
52
+ /** What the rule DECLARED — the fields the findings functions read. */
53
+ readonly declared: Declared;
54
+ }
55
+ /** The assertions a crossProject rule made about its two sides. */
56
+ export interface Declared {
57
+ readonly sides: readonly Side[];
58
+ readonly distinctKeys: ReadonlySet<string>;
59
+ readonly expectEmptySides: ReadonlySet<string>;
60
+ readonly checkComplete: boolean;
61
+ readonly checkNoOrphans: boolean;
62
+ readonly metadata: {
63
+ id?: string;
64
+ suggestion?: string;
65
+ docs?: string;
66
+ } | undefined;
67
+ readonly reason: string | undefined;
68
+ }
69
+ export interface Side {
70
+ readonly name: string;
71
+ /** Lazily build key → subjects (subjects is empty for a literal side). */
72
+ readonly materialize: () => Map<string, unknown[]>;
73
+ }
74
+ /**
75
+ * Assert a correspondence between two independently-derived key sets:
76
+ * "every X has a matching Y" (and/or the reverse). This is ADR-008 Rule 5 as a
77
+ * primitive — two derivations plus a disagreement test — so identity-not-count
78
+ * and non-vacuity are impossible to get wrong.
79
+ *
80
+ * The chain: `.side()` twice → `.beComplete()` / `.haveNoOrphans()` /
81
+ * `.beBijective()` → `.check()`.
82
+ *
83
+ * @example
84
+ * crossProject(p)
85
+ * .side('routes', calls(p).that().onObject('app'), byArg(0))
86
+ * .side('matrix', Object.keys(ROUTE_PERMISSIONS))
87
+ * .should()
88
+ * .beComplete()
89
+ * .rule({ id: 'auth/route-matrix', suggestion: 'Add the route to ROUTE_PERMISSIONS.' })
90
+ * .check()
91
+ */
92
+ export declare const sidesOf: (owner: object, compute: () => Map<string, unknown[]>[]) => Map<string, unknown[]>[];
93
+ /**
94
+ * The two-sided join: bind two artifacts by key and fail on the difference.
95
+ *
96
+ * Where every other builder selects subjects and asserts something about each,
97
+ * this one declares two (or more) named SIDES, derives a key set from each, and
98
+ * reports the set difference. It is the kernel's answer to "these two things must
99
+ * agree" — a route table against its permission map, a diagram against the code,
100
+ * a README table against the workspace.
101
+ *
102
+ * ```ts
103
+ * crossProject(project)
104
+ * .side('routes', classes(project).that().haveDecorator('Controller'), routeKey)
105
+ * .side('matrix', Object.keys(ROUTE_PERMISSIONS))
106
+ * .should()
107
+ * .beComplete()
108
+ * .check()
109
+ * ```
110
+ *
111
+ * `beComplete()` reports keys the second side is missing, `haveNoOrphans()` the
112
+ * reverse, and `beBijective()` both. A builder with fewer than two sides has
113
+ * compared nothing, and `examinedUnits()` reports that as zero rather than
114
+ * letting it pass vacuously (ADR-010).
115
+ */
116
+ export declare class CrossProjectBuilder extends TerminalBuilder {
117
+ private _sides;
118
+ private _checkComplete;
119
+ private _checkNoOrphans;
120
+ private _expectEmptySides;
121
+ private _distinctKeys;
122
+ constructor(_project: ArchProject);
123
+ /** Add a side from a selection, keyed by `keyFn`. */
124
+ side<T>(name: string, source: RuleBuilder<T>, keyFn: KeyFn<T>): this;
125
+ /** Add a side from an already-derived key set (pre-normalized). */
126
+ side(name: string, keys: KeysSource): this;
127
+ /**
128
+ * An independent copy, carrying the sides and both opt-out sets.
129
+ *
130
+ * `collectViolations` throws unless there are exactly two sides, so a leaked
131
+ * `_sides` push does not fail silently here — but a leaked declaration does:
132
+ * it is what stands between a vacuous side and a finding, and inheriting it
133
+ * turns a later rule's empty side green.
134
+ */
135
+ protected copy(): this;
136
+ /** Optional readability markers — the assertion terminals may be called directly. */
137
+ should(): this;
138
+ /**
139
+ * Reads as English between two conditions (`.beComplete().andShould()…`) and
140
+ * changes nothing — the builder is already in its condition phase.
141
+ */
142
+ andShould(): this;
143
+ /** Every key of the first side must have a match in the second (A ⊆ B). */
144
+ beComplete(): this;
145
+ /** Every key of the second side must have a source in the first (B ⊆ A). */
146
+ haveNoOrphans(): this;
147
+ /** Both directions — the two key sets must be identical. */
148
+ beBijective(): this;
149
+ /**
150
+ * Declare that a NAMED side is empty — plan 0097, replacing `allowEmpty()`.
151
+ *
152
+ * The difference is the whole point, and it is not a rename. `allowEmpty()`
153
+ * PERMITTED a side to be empty and never spoke again: a permanent, silent
154
+ * opt-out that stayed green the day the side filled up and the rule started
155
+ * certifying nothing about it. This ASSERTS the side is empty, and fails the
156
+ * day it stops being — an intent that expires and reports itself, which is
157
+ * the property ADR-010 part 3 requires of every declaration. Plan 0069's
158
+ * appendix rejected the permanent form for the rule family with receipts; a
159
+ * sibling family had it shipped and documented.
160
+ *
161
+ * **The zero-argument form throws here**, and that is the correction of a
162
+ * defect this method shipped with. The parameter has to be optional — a
163
+ * required one is not a valid override of `TerminalBuilder`'s zero-arg
164
+ * `expectEmpty()` — but the OVERRIDE VALIDITY argument justifies the
165
+ * signature, not the semantics. Inheriting the base meaning gave
166
+ * `crossProject().expectEmpty()` a whole-rule flag that suppressed the
167
+ * empty-side finding for BOTH sides and that the expiry branch never read:
168
+ * `allowEmpty` restored, permanent and silent, in fewer characters than
169
+ * before, on the release that deleted it. Measured green over two populated
170
+ * sides, forever.
171
+ *
172
+ * A crossProject compares two named sides, so "this rule is empty" has no
173
+ * meaning that is not per-side. Refusing at build time is the same answer
174
+ * this class already gives a contradiction, and it is loud where the
175
+ * inherited semantics were silent.
176
+ */
177
+ expectEmpty(side?: string): this;
178
+ /**
179
+ * Units this rule examined — plan 0096: the keys of both sides, summed.
180
+ *
181
+ * Zero means the comparison had nothing to compare, which for this family is
182
+ * two empty sides. One empty side is already its own finding and is not this
183
+ * question.
184
+ */
185
+ /**
186
+ * This family counts keys — the keys of both sides, summed.
187
+ *
188
+ * Plan 0099: `CollectResult.examined` is unit-typed per family (ADR-009 part
189
+ * 1), and the zero-examined message prints the noun. Inheriting the base
190
+ * `'subjects'` is a category error in a sentence whose whole job is naming what
191
+ * was and was not looked at.
192
+ */
193
+ protected examinedUnitNoun(): string;
194
+ /**
195
+ * How many units this rule actually examined — ADR-010's evidence that a pass
196
+ * was constructed rather than defaulted.
197
+ *
198
+ * Both materialized sides, summed — zero until two sides are declared, which is itself the evidence that nothing was compared.
199
+ */
200
+ examinedUnits(): number;
201
+ /**
202
+ * Declared when EVERY side is — plan 0097.
203
+ *
204
+ * The base implementation reads the whole-rule flag, which this class refuses
205
+ * to let anyone set. Without this override, 0098's floor would red a rule
206
+ * whose every side the author declared, with a finding telling them to
207
+ * declare. The per-side loop in `collectViolations` does not need this — its
208
+ * membership test covers each side directly — which is exactly why the
209
+ * previous private version was dead code and was removed. This one is for
210
+ * the root, which asks the question about the rule rather than about a side.
211
+ *
212
+ * **This was recorded as unobservable-until-0098, and that equivalence EXPIRED**
213
+ * the moment plan 0096 made `diagnose()` its first reader. Reverting this
214
+ * override to the base body — which for this class can never be true, since the
215
+ * zero-arg `expectEmpty()` throws — makes a rule whose every side is declared
216
+ * report `zero-subjects` again, telling the author to declare what they
217
+ * declared. A recorded equivalence is a claim with a lifetime, and this one's
218
+ * ended one commit after it was written; it is guarded now.
219
+ */
220
+ emptyDeclarationAdvice(): string;
221
+ /**
222
+ * Whether the author declared this rule's empty result intentional.
223
+ *
224
+ * Overrides `TerminalBuilder`'s `.expectEmpty()` reading, because this builder
225
+ * has more than one side and each can be declared empty independently.
226
+ */
227
+ declaresEmpty(): boolean;
228
+ /** Fail if a side maps two distinct subjects to one key (over-normalization guard). */
229
+ distinctKeysOn(sideName: string): this;
230
+ /**
231
+ * Wrong arity counts as asserting nothing, **whatever assertion was chosen**.
232
+ *
233
+ * `.beComplete()` on a one-sided crossProject cannot assert anything: there
234
+ * is no second side to compare against, so the call is a claim about a
235
+ * comparison that does not exist. Reading only the assertion flags let that
236
+ * pair through the gate and into `collectViolations()`, where the arity check
237
+ * throws a `RangeError` — and until bug 0025 that error escaped the CLI and
238
+ * dropped every remaining rule file's findings.
239
+ *
240
+ * So the same fault now reports the same way whether or not an assertion was
241
+ * chosen, and `assertionAdvice()` below already names the right remedy for it
242
+ * (another `.side(...)`, never `.beComplete()`). The arity throw stays as an
243
+ * invariant on `collectViolations()`, unreachable through the terminals.
244
+ */
245
+ assertsSomething(): boolean;
246
+ /**
247
+ * The remedy for this builder's assertion-less state, as one string.
248
+ *
249
+ * One channel, so `diagnose()`'s advice and the finding's own message cannot
250
+ * disagree. Overrides `TerminalBuilder`'s generic text with wording specific to
251
+ * what this builder is missing.
252
+ */
253
+ assertionAdvice(): string;
254
+ /** Named by id or by its sides, not 'unnamed' (plan 0070 §4). */
255
+ describeRule(): RuleDescription;
256
+ /** What this rule declared, as a value the findings functions can read. */
257
+ private declared;
258
+ /** Materialize both sides and pair their keys — the input every finding reads. */
259
+ private pairingFor;
260
+ protected collectViolations(): CollectResult;
261
+ }
262
+ /**
263
+ * Entry point: assert a correspondence between two independently-derived key
264
+ * sets. Call `.side(...)` twice, then an assertion terminal.
265
+ */
266
+ export declare function crossProject(p: ArchProject): CrossProjectBuilder;
267
+ /** Key a subject by its name (`getName()`); anonymous subjects fall back to `<anonymous>`. */
268
+ export declare function byName<T extends {
269
+ getName(): string | undefined;
270
+ }>(): KeyFn<T>;
271
+ /**
272
+ * Key a call-like subject by its argument at `index`. String/template literal
273
+ * arguments are unquoted so keys match plain sides (e.g. `Object.keys(map)`) —
274
+ * `app.get("/x", …)` keys as `/x`, not `"/x"`. Non-literal args key by raw text.
275
+ */
276
+ export declare function byArg<T extends {
277
+ getArguments(): {
278
+ getText(): string;
279
+ }[];
280
+ }>(index: number): KeyFn<T>;
281
+ /** Key a type-like subject by each of its property names (one subject → many keys). */
282
+ export declare function byPropertyNames<T extends {
283
+ getProperties(): {
284
+ getName(): string;
285
+ }[];
286
+ }>(): KeyFn<T>;
287
+ //# sourceMappingURL=correspondence-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correspondence-builder.d.ts","sourceRoot":"","sources":["../../src/builders/correspondence-builder.ts"],"names":[],"mappings":"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"}