@nielspeter/eess-ts 0.2.1 → 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 +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 +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 -24
  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
@@ -9,8 +9,11 @@ import { createViolation } from '../core/violation.js';
9
9
  * @param predicate - Returns true if element satisfies the condition
10
10
  * @param messageFn - Produces a violation message for a failing element
11
11
  */
12
- export function elementCondition(description, predicate, messageFn) {
12
+ export function elementCondition(description, predicate, messageFn, globs) {
13
13
  return {
14
+ // Plan 0073. Optional because most callers assert about names, types or members
15
+ // and have no glob at all — only the path conditions in `structural.ts` pass it.
16
+ globs,
14
17
  description,
15
18
  evaluate(elements, context) {
16
19
  const violations = [];
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/conditions/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EACnB,SAAkC,EAClC,SAAiC;IAEjC,OAAO;QACL,WAAW;QACX,QAAQ,CAAC,QAAa,EAAE,OAAyB;YAC/C,MAAM,UAAU,GAAoB,EAAE,CAAA;YACtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxB,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;gBACxE,CAAC;YACH,CAAC;YACD,OAAO,UAAU,CAAA;QACnB,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/conditions/helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EACnB,SAAkC,EAClC,SAAiC,EACjC,KAAqB;IAErB,OAAO;QACL,gFAAgF;QAChF,iFAAiF;QACjF,KAAK;QACL,WAAW;QACX,QAAQ,CAAC,QAAa,EAAE,OAAyB;YAC/C,MAAM,UAAU,GAAoB,EAAE,CAAA;YACtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxB,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;gBACxE,CAAC;YACH,CAAC;YACD,OAAO,UAAU,CAAA;QACnB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../../src/conditions/jsx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAGnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAyBnE;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,SAAS,CAAC,cAAc,CAAC,CASpD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAmBrE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAmBxE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,SAAS,CAAC,cAAc,CAAC,CAuC3B;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,SAAS,CAAC,cAAc,CAAC,CAuB3B"}
1
+ {"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../../src/conditions/jsx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAGnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AA0BnE;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,SAAS,CAAC,cAAc,CAAC,CAapD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAmBrE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAmBxE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,SAAS,CAAC,cAAc,CAAC,CAuC3B;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,SAAS,CAAC,cAAc,CAAC,CAuB3B"}
@@ -1,4 +1,5 @@
1
1
  import { createViolation } from '../core/violation.js';
2
+ import { marksAssertsCardinality } from '@nielspeter/eess';
2
3
  /**
3
4
  * Create a violation from an ArchJsxElement.
4
5
  *
@@ -24,12 +25,16 @@ function createJsxViolation(element, message, context) {
24
25
  * jsxElements(p).that().areHtmlElements('button').should().notExist().check()
25
26
  */
26
27
  export function notExist() {
27
- return {
28
+ // Satisfied by an EMPTY selection — registered rather than tagged, because a
29
+ // symbol keyed on this object is readable off it and forgeable (bug 0050).
30
+ return marksAssertsCardinality({
28
31
  description: 'not exist',
32
+ // Zero subjects is this condition's PASSING state, so an empty selection
33
+ // and an unsatisfiable selector glob are both correct here (plan 0074).
29
34
  evaluate(elements, context) {
30
35
  return elements.map((el) => createJsxViolation(el, `<${el.getName()}> should not exist`, context));
31
36
  },
32
- };
37
+ });
33
38
  }
34
39
  /**
35
40
  * Every matched element must have the named attribute.
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../src/conditions/jsx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../src/conditions/jsx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Node } from 'ts-morph';
2
+ /**
3
+ * Which family of body-analysis condition produced a match.
4
+ *
5
+ * Part of the identity so that a class-level and a module-level rule reporting
6
+ * the same node stay distinct findings.
7
+ */
8
+ type MatchKind = 'module-body' | 'class-body' | 'function-body' | 'call-callback' | 'call-argument';
9
+ /**
10
+ * Assign each matched node a baseline identity that is not a coordinate.
11
+ *
12
+ * Body-analysis conditions emit one violation per matching node, and the
13
+ * rendered message distinguishes them by line number. That cannot be the
14
+ * identity: add two lines at the top of a file with matches at lines 2 and 4,
15
+ * and the entry recorded for line 4 now matches the violation that used to be
16
+ * at line 2 — the baseline accepts the **wrong** finding, rather than merely
17
+ * missing one. That is worse than a miss, because it silently keeps a genuinely
18
+ * new violation green.
19
+ *
20
+ * The line cannot simply be dropped either: within one scope, two matches of
21
+ * the same matcher are otherwise identical, and a shared identity means
22
+ * accepting one accepts both. So bucket by the enclosing declaration, then
23
+ * number the matches inside each bucket.
24
+ *
25
+ * Measured over 596 matched nodes in a real 808-file project, this is 1:1 —
26
+ * and strictly better than the line, which merges two `process.env` accesses
27
+ * that happen to share one. Renumbering is the residual cost: adding or
28
+ * removing a match shifts the ordinals of later matches **in the same
29
+ * declaration**, which is a change to that declaration. With the line, editing
30
+ * anything above shifts every finding in the file.
31
+ *
32
+ * Bucketing by declaration is what keeps that blast radius local, so it is
33
+ * load-bearing rather than cosmetic — a single per-file counter would renumber
34
+ * everything downstream of any edit.
35
+ *
36
+ * @param kind - The condition family, so two families cannot collide on a node.
37
+ * @param filePath - Absolute path; normalised away at hash time.
38
+ * @param nodes - The matching nodes, in the order they will be reported.
39
+ * @param matcherDescription - Distinguishes co-located matches of different matchers.
40
+ */
41
+ export declare function identifyMatches(kind: MatchKind, filePath: string, nodes: readonly Node[], matcherDescription: string): string[];
42
+ export {};
43
+ //# sourceMappingURL=match-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-identity.d.ts","sourceRoot":"","sources":["../../src/conditions/match-identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAGpC;;;;;GAKG;AACH,KAAK,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,CAAA;AAEnG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,kBAAkB,EAAE,MAAM,GACzB,MAAM,EAAE,CAQV"}
@@ -0,0 +1,43 @@
1
+ import { getElementName } from '../core/violation.js';
2
+ /**
3
+ * Assign each matched node a baseline identity that is not a coordinate.
4
+ *
5
+ * Body-analysis conditions emit one violation per matching node, and the
6
+ * rendered message distinguishes them by line number. That cannot be the
7
+ * identity: add two lines at the top of a file with matches at lines 2 and 4,
8
+ * and the entry recorded for line 4 now matches the violation that used to be
9
+ * at line 2 — the baseline accepts the **wrong** finding, rather than merely
10
+ * missing one. That is worse than a miss, because it silently keeps a genuinely
11
+ * new violation green.
12
+ *
13
+ * The line cannot simply be dropped either: within one scope, two matches of
14
+ * the same matcher are otherwise identical, and a shared identity means
15
+ * accepting one accepts both. So bucket by the enclosing declaration, then
16
+ * number the matches inside each bucket.
17
+ *
18
+ * Measured over 596 matched nodes in a real 808-file project, this is 1:1 —
19
+ * and strictly better than the line, which merges two `process.env` accesses
20
+ * that happen to share one. Renumbering is the residual cost: adding or
21
+ * removing a match shifts the ordinals of later matches **in the same
22
+ * declaration**, which is a change to that declaration. With the line, editing
23
+ * anything above shifts every finding in the file.
24
+ *
25
+ * Bucketing by declaration is what keeps that blast radius local, so it is
26
+ * load-bearing rather than cosmetic — a single per-file counter would renumber
27
+ * everything downstream of any edit.
28
+ *
29
+ * @param kind - The condition family, so two families cannot collide on a node.
30
+ * @param filePath - Absolute path; normalised away at hash time.
31
+ * @param nodes - The matching nodes, in the order they will be reported.
32
+ * @param matcherDescription - Distinguishes co-located matches of different matchers.
33
+ */
34
+ export function identifyMatches(kind, filePath, nodes, matcherDescription) {
35
+ const ordinals = new Map();
36
+ return nodes.map((node) => {
37
+ const scope = `${getElementName(node)}::${matcherDescription}`;
38
+ const ordinal = (ordinals.get(scope) ?? 0) + 1;
39
+ ordinals.set(scope, ordinal);
40
+ return `${kind}::${filePath}::${scope}#${String(ordinal)}`;
41
+ });
42
+ }
43
+ //# sourceMappingURL=match-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-identity.js","sourceRoot":"","sources":["../../src/conditions/match-identity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAUrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAe,EACf,QAAgB,EAChB,KAAsB,EACtB,kBAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,kBAAkB,EAAE,CAAA;QAC9D,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAC9C,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC5B,OAAO,GAAG,IAAI,KAAK,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../src/conditions/members.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAEtB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAOnE,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,gBAAgB,CAAA;AA0DhG;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,mBAAmB,CAAC,CA2BpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,mBAAmB,CAAC,CA2BvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAWpF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAwBvF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAsB3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAoBzE"}
1
+ {"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../src/conditions/members.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAEtB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAQnE,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,gBAAgB,CAAA;AAkEhG;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,mBAAmB,CAAC,CA2BpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,mBAAmB,CAAC,CA2BvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAWpF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAwBvF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAsB3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,mBAAmB,CAAC,CAwBzE"}
@@ -1,6 +1,7 @@
1
1
  import { Node, } from 'ts-morph';
2
2
  import { createViolation, getElementName } from '../core/violation.js';
3
3
  import { elementCondition } from './helpers.js';
4
+ import { metricViolation } from '../core/metric-violation.js';
4
5
  /**
5
6
  * Extract property symbols from a property-bearing node.
6
7
  * Resolves through the type system (handles Partial<>, Pick<>, etc.).
@@ -43,14 +44,22 @@ function isPropertyReadonly(prop) {
43
44
  // Readonly<{a: string}>.a → decl.isReadonly() = false, but
44
45
  // compilerSymbol.links.checkFlags & 8 = 8 (readonly)
45
46
  //
46
- // eess-exclude eess/adr005-no-type-assertions: reaches TS compiler-internal Symbol.links (not on the public ts.Symbol type) to read CheckFlags for mapped-type readonly detection
47
+ // Both ids on one directive: `arch-rules.test.ts` calls this check
48
+ // `adr005/no-as-cast-module` and `arch.internal.rules.ts` calls it
49
+ // `eess/adr005-no-type-assertions` — the id ADR-005's own Enforcement table
50
+ // cites as gated. The grammar takes a comma-separated list.
51
+ // eess-exclude-start eess/adr005-no-type-assertions, adr005/no-as-cast-module: reads ts-morph's private
52
+ // `compilerSymbol.links.checkFlags`, which has no public typed path — the
53
+ // unavoidable JS-interop boundary ADR-005 allows. Waived in place rather than by
54
+ // narrowing the rule's scope, which is how this went unseen for so long (bug 0049).
47
55
  const links = prop.compilerSymbol.links;
48
- if (typeof links === 'object' && links !== null && 'checkFlags' in links) {
49
- const flags = links.checkFlags;
56
+ if (typeof links === 'object' && links !== null) {
57
+ const flags = links['checkFlags'];
50
58
  if (typeof flags === 'number' && (flags & 8) !== 0) {
51
59
  return true;
52
60
  }
53
61
  }
62
+ // eess-exclude-end eess/adr005-no-type-assertions
54
63
  // Conservative: treat as mutable if neither strategy detected readonly.
55
64
  return false;
56
65
  }
@@ -214,7 +223,11 @@ export function maxProperties(max) {
214
223
  for (const element of elements) {
215
224
  const count = getPropertySymbols(element).length;
216
225
  if (count > max) {
217
- violations.push(createViolation(element, `${getElementName(element)} has ${String(count)} properties, max allowed is ${String(max)}`, context));
226
+ violations.push(metricViolation(element, {
227
+ metric: 'properties',
228
+ measured: count,
229
+ message: `${getElementName(element)} has ${String(count)} properties, max allowed is ${String(max)}`,
230
+ }, context));
218
231
  }
219
232
  }
220
233
  return violations;
@@ -1 +1 @@
1
- {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/conditions/members.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/conditions/members.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,15 @@ import type { Condition } from '@nielspeter/eess';
9
9
  * Modules with zero importers pass vacuously. Chain `.andShould().beImported()`
10
10
  * if you also want to catch orphaned files.
11
11
  *
12
- * Both static `import` declarations and dynamic `import()` expressions with
13
- * string-literal specifiers are resolved. `require()` calls are not resolved.
12
+ * **Every kind of reference counts here**: `import`, `export … from`, `import()`,
13
+ * `type X = import('…').Y`, and **`require()`** — both `require('s')` in a `.js`
14
+ * file and `import x = require('s')`. Only a computed specifier
15
+ * (`import('./' + name)`) is invisible, because there is no specifier to
16
+ * resolve, along with a `declare module './rel.js'` augmentation.
17
+ *
18
+ * That is wider than the *forward* dependency conditions, which exclude
19
+ * `require` — deliberately, and see `indexEdges` for why the same exclusion
20
+ * would be wrong here.
14
21
  */
15
22
  export declare function onlyBeImportedVia(...globs: string[]): Condition<SourceFile>;
16
23
  /**
@@ -19,9 +26,15 @@ export declare function onlyBeImportedVia(...globs: string[]): Condition<SourceF
19
26
  * Detects dead/orphaned modules that nobody references.
20
27
  * Use `.excluding('index.ts', 'main.ts')` to skip entry points.
21
28
  *
22
- * Both static `import` declarations and dynamic `import()` expressions with
23
- * string-literal specifiers are resolved. Modules loaded via `require()` or
24
- * dynamic imports with computed specifiers will still be falsely reported.
29
+ * **A module referenced by any kind of edge is not dead**, including
30
+ * `export … from`, `import()`, a type-only reference, and `require()` in either
31
+ * spelling. Since v0.28.0 that means **fewer** false orphans than before — if
32
+ * you carry `.excluding()` entries for modules only reachable via `require()` or
33
+ * a re-export, they are no longer needed.
34
+ *
35
+ * Two shapes are still invisible and will be falsely reported: a computed
36
+ * specifier (`import('./' + name)`), and a module referenced only from a
37
+ * `declare module './rel.js'` augmentation.
25
38
  */
26
39
  export declare function beImported(): Condition<SourceFile>;
27
40
  export declare function haveNoUnusedExports(): Condition<SourceFile>;
@@ -1 +1 @@
1
- {"version":3,"file":"reverse-dependency.d.ts","sourceRoot":"","sources":["../../src/conditions/reverse-dependency.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAkC,MAAM,UAAU,CAAA;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAwInE;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,CAgC3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,CA0BlD;AA0CD,wBAAgB,mBAAmB,IAAI,SAAS,CAAC,UAAU,CAAC,CAW3D"}
1
+ {"version":3,"file":"reverse-dependency.d.ts","sourceRoot":"","sources":["../../src/conditions/reverse-dependency.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,UAAU,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAqFnE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,CA+E3E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,CA0BlD;AAyCD,wBAAgB,mBAAmB,IAAI,SAAS,CAAC,UAAU,CAAC,CAW3D"}
@@ -1,6 +1,9 @@
1
1
  import picomatch from 'picomatch';
2
- import nodePath from 'node:path';
3
- import { Node, SyntaxKind } from 'ts-morph';
2
+ import { Node } from 'ts-morph';
3
+ import { moduleEdges } from '../core/module-edges.js';
4
+ import { recordEdgeCoverage } from '@nielspeter/eess';
5
+ import { globAnyOf } from '@nielspeter/eess';
6
+ import { relativeToRoot } from '../core/project-relative.js';
4
7
  const graphCache = new WeakMap();
5
8
  /**
6
9
  * Build or retrieve the reverse import graph for a project.
@@ -11,93 +14,26 @@ const graphCache = new WeakMap();
11
14
  * when resetProjectCache() creates new ArchProject instances (WeakMap GC).
12
15
  */
13
16
  /**
14
- * Add an edge to the reverse import graph: targetPath is imported by sf.
15
- * Deduplicates entries when `deduplicate` is true (used for re-exports
16
- * where the same file may appear via both import and export declarations).
17
+ * Add an edge to the reverse import graph: `targetPath` is referenced by `sf`.
18
+ *
19
+ * **Always deduplicated, on `(importer, target)`.** It used to take a flag, and
20
+ * static imports passed `false`: one target, one importer, two static imports
21
+ * produced **two byte-identical violations at the same `file:line`** — measured —
22
+ * and therefore two identical baseline hashes for one fact. The flag existed
23
+ * because re-exports were indexed in a second pass that could re-add the same
24
+ * pair; now that every kind comes from one `edgesOf` pass, one file referencing
25
+ * one target N ways is one reverse edge.
17
26
  */
18
- function addToGraph(graph, targetPath, sf, deduplicate) {
27
+ function addToGraph(graph, targetPath, sf) {
19
28
  const existing = graph.get(targetPath);
20
29
  if (existing) {
21
- if (!deduplicate || !existing.includes(sf)) {
30
+ if (!existing.includes(sf))
22
31
  existing.push(sf);
23
- }
24
32
  }
25
33
  else {
26
34
  graph.set(targetPath, [sf]);
27
35
  }
28
36
  }
29
- /**
30
- * Resolve a dynamic import specifier to a project source file.
31
- *
32
- * Handles relative specifiers with ESM extension mappings (.js→.ts, .jsx→.tsx,
33
- * .mjs→.mts) and directory index imports. Non-relative specifiers (bare packages)
34
- * are skipped — they resolve to node_modules, which are outside the project.
35
- */
36
- function resolveDynamicImport(fromFile, specifier) {
37
- if (!specifier.startsWith('.'))
38
- return undefined;
39
- const dirPath = fromFile.getDirectory().getPath();
40
- const project = fromFile.getProject();
41
- // Try the specifier as-is, with ESM extension mappings, and as a directory index
42
- const candidates = [
43
- specifier,
44
- specifier.replace(/\.js$/, '.ts'),
45
- specifier.replace(/\.jsx$/, '.tsx'),
46
- specifier.replace(/\.mjs$/, '.mts'),
47
- specifier + '.ts',
48
- specifier + '.tsx',
49
- specifier + '/index.ts',
50
- specifier + '/index.tsx',
51
- ];
52
- for (const candidate of candidates) {
53
- const absolutePath = nodePath.resolve(dirPath, candidate);
54
- const resolved = project.getSourceFile(absolutePath);
55
- if (resolved)
56
- return resolved;
57
- }
58
- return undefined;
59
- }
60
- /** Index static import declarations from a source file into the reverse graph. */
61
- function indexStaticImports(graph, sf) {
62
- for (const decl of sf.getImportDeclarations()) {
63
- const resolved = decl.getModuleSpecifierSourceFile();
64
- if (!resolved)
65
- continue;
66
- addToGraph(graph, resolved.getFilePath(), sf, false);
67
- }
68
- }
69
- /** Index re-export declarations from a source file into the reverse graph. */
70
- function indexReExports(graph, sf) {
71
- for (const decl of sf.getExportDeclarations()) {
72
- const resolved = decl.getModuleSpecifierSourceFile();
73
- if (!resolved)
74
- continue;
75
- addToGraph(graph, resolved.getFilePath(), sf, true);
76
- }
77
- }
78
- /** Index dynamic import() expressions from a source file into the reverse graph. */
79
- function indexDynamicImports(graph, sf) {
80
- for (const callExpr of sf.getDescendantsOfKind(SyntaxKind.CallExpression)) {
81
- if (callExpr.getExpression().getKind() !== SyntaxKind.ImportKeyword)
82
- continue;
83
- const args = callExpr.getArguments();
84
- if (args.length === 0)
85
- continue;
86
- const arg = args[0];
87
- if (!arg)
88
- continue;
89
- let specifier;
90
- if (Node.isStringLiteral(arg) || Node.isNoSubstitutionTemplateLiteral(arg)) {
91
- specifier = arg.getLiteralValue();
92
- }
93
- if (specifier === undefined)
94
- continue;
95
- const resolved = resolveDynamicImport(sf, specifier);
96
- if (resolved) {
97
- addToGraph(graph, resolved.getFilePath(), sf, true);
98
- }
99
- }
100
- }
101
37
  function getReverseImportGraph(sourceFiles) {
102
38
  if (sourceFiles.length === 0)
103
39
  return new Map();
@@ -109,10 +45,32 @@ function getReverseImportGraph(sourceFiles) {
109
45
  if (cached)
110
46
  return cached;
111
47
  const graph = new Map();
112
- for (const sf of sourceFiles) {
113
- indexStaticImports(graph, sf);
114
- indexReExports(graph, sf);
115
- indexDynamicImports(graph, sf);
48
+ // **Every kind counts here, `require` and `type-expression` included** — the
49
+ // opposite of the forward conditions, and deliberately so. The two directions
50
+ // ask different questions:
51
+ //
52
+ // | direction | question | a `require` edge means |
53
+ // | --------- | ------------------------------------------ | ------------------------------- |
54
+ // | forward | does this file depend on something banned? | a finding with no usable remedy |
55
+ // | reverse | is anything referencing this file? | **yes** — it is not dead |
56
+ //
57
+ // Excluding `require` here would report a module that CJS code requires as an
58
+ // orphan, and excluding `type-expression` would report one that only a type
59
+ // position references — both false positives, and deleting either module breaks
60
+ // the build. The forward exclusion avoids an unactionable finding; the same
61
+ // exclusion here would manufacture a wrong one.
62
+ //
63
+ // The one caller that genuinely has a file SET, so it is the one that uses the
64
+ // bulk entry point. `moduleEdges` was previously called by nothing in `src/` —
65
+ // every site used the per-file `edgesOf`, including this loop — which made its
66
+ // "one crossing rather than N" docstring a claim about code that did not exist.
67
+ const byFile = moduleEdges(sourceFiles);
68
+ for (const importer of sourceFiles) {
69
+ for (const edge of byFile.get(importer.getFilePath()) ?? []) {
70
+ if (edge.resolvedPath === undefined)
71
+ continue;
72
+ addToGraph(graph, edge.resolvedPath, importer);
73
+ }
116
74
  }
117
75
  graphCache.set(project, graph);
118
76
  return graph;
@@ -127,13 +85,27 @@ function getReverseImportGraph(sourceFiles) {
127
85
  * Modules with zero importers pass vacuously. Chain `.andShould().beImported()`
128
86
  * if you also want to catch orphaned files.
129
87
  *
130
- * Both static `import` declarations and dynamic `import()` expressions with
131
- * string-literal specifiers are resolved. `require()` calls are not resolved.
88
+ * **Every kind of reference counts here**: `import`, `export … from`, `import()`,
89
+ * `type X = import('…').Y`, and **`require()`** — both `require('s')` in a `.js`
90
+ * file and `import x = require('s')`. Only a computed specifier
91
+ * (`import('./' + name)`) is invisible, because there is no specifier to
92
+ * resolve, along with a `declare module './rel.js'` augmentation.
93
+ *
94
+ * That is wider than the *forward* dependency conditions, which exclude
95
+ * `require` — deliberately, and see `indexEdges` for why the same exclusion
96
+ * would be wrong here.
132
97
  */
133
98
  export function onlyBeImportedVia(...globs) {
134
99
  const matchers = globs.map((g) => picomatch(g));
135
100
  const quotedGlobs = globs.map((g) => `"${g}"`).join(', ');
136
101
  return {
102
+ // `file-path`, NOT `import-target` — and this is the row to get right. The glob
103
+ // names the FILES ALLOWED TO IMPORT the subject, matched against an importer's own
104
+ // path, so unlike the four dependency conditions it is a genuine path glob with
105
+ // real path-universe views. Declaring it as `import-target` would hand a checkable
106
+ // glob to machinery that has no views for that kind, which fails silently in the
107
+ // direction that looks fine (plan 0073).
108
+ globs: globAnyOf(globs, 'file-path'),
137
109
  description: `only be imported via ${quotedGlobs}`,
138
110
  evaluate(elements, context) {
139
111
  // Build graph from ALL project files, not just the filtered elements
@@ -141,22 +113,61 @@ export function onlyBeImportedVia(...globs) {
141
113
  const allFiles = first ? first.getProject().getSourceFiles() : [];
142
114
  const graph = getReverseImportGraph(allFiles);
143
115
  const violations = [];
116
+ // Bug 0015: the mirror case — a module with no importers passes however
117
+ // broken the allowlist. This condition already documented the behaviour
118
+ // ("Modules with zero importers pass vacuously") without treating it as a
119
+ // gap; the tally is what turns that note into something a reader sees.
120
+ let tested = 0;
144
121
  for (const sf of elements) {
145
122
  const importers = graph.get(sf.getFilePath()) ?? [];
146
123
  for (const importer of importers) {
124
+ tested++;
147
125
  const importerPath = importer.getFilePath();
148
- if (!matchers.some((m) => m(importerPath))) {
126
+ // Also the importer's path named from the project root — bug 0036.
127
+ // This glob is matched against an ABSOLUTE path, so a
128
+ // project-relative one could never match and every importer was
129
+ // reported: measured, `onlyBeImportedVia('src/**')` produced 5
130
+ // violations where `'**/src/**'` produced none. A false red, the same
131
+ // shape as bug 0037 one layer over.
132
+ const fromRoot = relativeToRoot(importer, importerPath);
133
+ const matched = matchers.some((m) => m(importerPath)) ||
134
+ (fromRoot !== undefined && matchers.some((m) => m(fromRoot)));
135
+ if (!matched) {
149
136
  violations.push({
150
137
  rule: context.rule,
151
138
  element: sf.getBaseName(),
152
139
  file: sf.getFilePath(),
153
140
  line: 1,
154
- message: `${sf.getBaseName()} is imported by ${importer.getBaseName()} which does not match [${globs.join(', ')}]`,
141
+ // The importer by PATH, not by basename — and the message is the only place it
142
+ // can appear, because `element`, `file` and `line` all describe the TARGET.
143
+ //
144
+ // Two importers sharing a filename produced findings that were byte-identical on
145
+ // screen: same element, same file, same line, same message. Measured, and worse
146
+ // in the two surfaces that matter most — `check --format json` emitted two
147
+ // identical objects, and `format-github` emitted two identical `::error` lines,
148
+ // which GitHub renders as ONE annotation, so in a PR's Files view the second
149
+ // finding did not exist at all.
150
+ //
151
+ // That was survivable while the two shared a baseline entry and only one was
152
+ // ever reported. Once `disambiguateIdentities` gives them separate entries the
153
+ // hidden sibling surfaces — and an adopter is handed a red identical to one they
154
+ // already accepted, pointing at the victim rather than the offender, with no way
155
+ // to tell which importer is new. The release that makes a finding visible owns
156
+ // making it readable.
157
+ //
158
+ // `element` is deliberately left as the basename: `.excluding()` matches on
159
+ // `element`/`file`/`message`, so promoting it to a path would silently break
160
+ // every `.excluding('index.ts')` in the wild. Changing the MESSAGE breaks an
161
+ // exact-string message exclusion, which surfaces as an unused-pattern warning
162
+ // rather than failing open — the acceptable direction, and stated in the
163
+ // upgrading row.
164
+ message: `${sf.getBaseName()} is imported by ${fromRoot ?? importerPath} which does not match [${globs.join(', ')}]`,
155
165
  because: context.because,
156
166
  });
157
167
  }
158
168
  }
159
169
  }
170
+ recordEdgeCoverage(context.rule, elements.length, tested);
160
171
  return violations;
161
172
  },
162
173
  };
@@ -167,9 +178,15 @@ export function onlyBeImportedVia(...globs) {
167
178
  * Detects dead/orphaned modules that nobody references.
168
179
  * Use `.excluding('index.ts', 'main.ts')` to skip entry points.
169
180
  *
170
- * Both static `import` declarations and dynamic `import()` expressions with
171
- * string-literal specifiers are resolved. Modules loaded via `require()` or
172
- * dynamic imports with computed specifiers will still be falsely reported.
181
+ * **A module referenced by any kind of edge is not dead**, including
182
+ * `export … from`, `import()`, a type-only reference, and `require()` in either
183
+ * spelling. Since v0.28.0 that means **fewer** false orphans than before — if
184
+ * you carry `.excluding()` entries for modules only reachable via `require()` or
185
+ * a re-export, they are no longer needed.
186
+ *
187
+ * Two shapes are still invisible and will be falsely reported: a computed
188
+ * specifier (`import('./' + name)`), and a module referenced only from a
189
+ * `declare module './rel.js'` augmentation.
173
190
  */
174
191
  export function beImported() {
175
192
  return {
@@ -217,7 +234,7 @@ function findUnusedExportsInFile(sf, context) {
217
234
  for (const [name, declarations] of exportMap) {
218
235
  if (name === 'default')
219
236
  continue;
220
- const firstDecl = declarations[0];
237
+ const [firstDecl] = declarations;
221
238
  if (firstDecl === undefined)
222
239
  continue;
223
240
  if (!hasExternalReference(firstDecl, sf)) {
@@ -1 +1 @@
1
- {"version":3,"file":"reverse-dependency.js","sourceRoot":"","sources":["../../src/conditions/reverse-dependency.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAiC,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAQ1E,MAAM,UAAU,GAAG,IAAI,OAAO,EAA+B,CAAA;AAE7D;;;;;;;GAOG;AACH;;;;GAIG;AACH,SAAS,UAAU,CACjB,KAAyB,EACzB,UAAkB,EAClB,EAAc,EACd,WAAoB;IAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7B,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,QAAoB,EAAE,SAAiB;IACnE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAEhD,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,CAAA;IACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAA;IAErC,iFAAiF;IACjF,MAAM,UAAU,GAAG;QACjB,SAAS;QACT,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QACjC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;QACnC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;QACnC,SAAS,GAAG,KAAK;QACjB,SAAS,GAAG,MAAM;QAClB,SAAS,GAAG,WAAW;QACvB,SAAS,GAAG,YAAY;KACzB,CAAA;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QACpD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;IAC/B,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,kFAAkF;AAClF,SAAS,kBAAkB,CAAC,KAAyB,EAAE,EAAc;IACnE,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAA;QACpD,IAAI,CAAC,QAAQ;YAAE,SAAQ;QACvB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IACtD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,cAAc,CAAC,KAAyB,EAAE,EAAc;IAC/D,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAA;QACpD,IAAI,CAAC,QAAQ;YAAE,SAAQ;QACvB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,SAAS,mBAAmB,CAAC,KAAyB,EAAE,EAAc;IACpE,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1E,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,aAAa;YAAE,SAAQ;QAC7E,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAA;QACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,CAAC,GAAG;YAAE,SAAQ;QAClB,IAAI,SAA6B,CAAA;QACjC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3E,SAAS,GAAG,GAAG,CAAC,eAAe,EAAE,CAAA;QACnC,CAAC;QAED,IAAI,SAAS,KAAK,SAAS;YAAE,SAAQ;QAErC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAyB;IACtD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAA;IAE9C,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAChC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,GAAG,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAA;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,KAAK,GAAuB,IAAI,GAAG,EAAE,CAAA;IAE3C,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7B,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC7B,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACzB,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC9B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,oEAAoE;AAEpE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAG,KAAe;IAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzD,OAAO;QACL,WAAW,EAAE,wBAAwB,WAAW,EAAE;QAClD,QAAQ,CAAC,QAAsB,EAAE,OAAyB;YACxD,qEAAqE;YACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YACjE,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC7C,MAAM,UAAU,GAAoB,EAAE,CAAA;YAEtC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;gBACnD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;oBAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;wBAC3C,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,OAAO,CAAC,IAAI;4BAClB,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE;4BACzB,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE;4BACtB,IAAI,EAAE,CAAC;4BACP,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,mBAAmB,QAAQ,CAAC,WAAW,EAAE,0BAA0B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;4BAClH,OAAO,EAAE,OAAO,CAAC,OAAO;yBACzB,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAA;QACnB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,WAAW,EAAE,0CAA0C;QACvD,QAAQ,CAAC,QAAsB,EAAE,OAAyB;YACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YACjE,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC7C,MAAM,UAAU,GAAoB,EAAE,CAAA;YAEtC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;gBACnD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE;wBACzB,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE;wBACtB,IAAI,EAAE,CAAC;wBACP,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,sCAAsC;wBAClE,OAAO,EAAE,OAAO,CAAC,OAAO;qBACzB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAA;QACnB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH;;GAEG;AACH,SAAS,uBAAuB,CAAC,EAAc,EAAE,OAAyB;IACxE,MAAM,UAAU,GAAoB,EAAE,CAAA;IACtC,MAAM,SAAS,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAAA;IAE9C,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,SAAS,EAAE,CAAC;QAC7C,IAAI,IAAI,KAAK,SAAS;YAAE,SAAQ;QAEhC,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,SAAS,KAAK,SAAS;YAAE,SAAQ;QACrC,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YACxE,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE;gBACtB,IAAI;gBACJ,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,aAAa,IAAI,6CAA6C;gBAC1F,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,WAAW,EAAE,wBAAwB;QACrC,QAAQ,CAAC,QAAsB,EAAE,OAAyB;YACxD,MAAM,UAAU,GAAoB,EAAE,CAAA;YACtC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,UAAU,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;YAC1D,CAAC;YACD,OAAO,UAAU,CAAA;QACnB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,WAAiB,EAAE,UAAsB;IACrE,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAA;IACzC,MAAM,eAAe,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,kBAAkB,EAAE,CAAA;IAEpE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAA;QAC/D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAA,CAAC,gBAAgB;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,GAAG,CAAA,CAAC,oDAAoD;QAC7D,2EAA2E;QAC3E,iDAAiD;QACjD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"reverse-dependency.js","sourceRoot":"","sources":["../../src/conditions/reverse-dependency.ts"],"names":[],"mappings":"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"}