@ddd-ts-kit/eslint-plugin 0.0.0-stage → 0.1.1

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 (745) hide show
  1. package/README.md +292 -2
  2. package/dist/ddd-ts-kit.d.ts +5 -0
  3. package/dist/ddd-ts-kit.d.ts.map +1 -0
  4. package/dist/ddd-ts-kit.js +7 -0
  5. package/dist/ddd-ts-kit.js.map +1 -0
  6. package/dist/index.d.ts +9 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +6 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/plugin.d.ts +11 -0
  11. package/dist/plugin.d.ts.map +1 -0
  12. package/dist/plugin.js +30 -0
  13. package/dist/plugin.js.map +1 -0
  14. package/dist/presets/braces-rules.d.ts +11 -0
  15. package/dist/presets/braces-rules.d.ts.map +1 -0
  16. package/dist/presets/braces-rules.js +10 -0
  17. package/dist/presets/braces-rules.js.map +1 -0
  18. package/dist/presets/create-ddd-ts-kit.d.ts +21 -0
  19. package/dist/presets/create-ddd-ts-kit.d.ts.map +1 -0
  20. package/dist/presets/create-ddd-ts-kit.js +123 -0
  21. package/dist/presets/create-ddd-ts-kit.js.map +1 -0
  22. package/dist/presets/flat-rules.d.ts +3 -0
  23. package/dist/presets/flat-rules.d.ts.map +1 -0
  24. package/dist/presets/flat-rules.js +2 -0
  25. package/dist/presets/flat-rules.js.map +1 -0
  26. package/dist/presets/layout-rules.d.ts +11 -0
  27. package/dist/presets/layout-rules.d.ts.map +1 -0
  28. package/dist/presets/layout-rules.js +33 -0
  29. package/dist/presets/layout-rules.js.map +1 -0
  30. package/dist/presets/plugin-rule-levels.d.ts +4 -0
  31. package/dist/presets/plugin-rule-levels.d.ts.map +1 -0
  32. package/dist/presets/plugin-rule-levels.js +13 -0
  33. package/dist/presets/plugin-rule-levels.js.map +1 -0
  34. package/dist/presets/standard-rule-sets.d.ts +12 -0
  35. package/dist/presets/standard-rule-sets.d.ts.map +1 -0
  36. package/dist/presets/standard-rule-sets.js +15 -0
  37. package/dist/presets/standard-rule-sets.js.map +1 -0
  38. package/dist/presets/standard-rules.d.ts +24 -0
  39. package/dist/presets/standard-rules.d.ts.map +1 -0
  40. package/dist/presets/standard-rules.js +88 -0
  41. package/dist/presets/standard-rules.js.map +1 -0
  42. package/dist/project/alias-root.d.ts +8 -0
  43. package/dist/project/alias-root.d.ts.map +1 -0
  44. package/dist/project/alias-root.js +2 -0
  45. package/dist/project/alias-root.js.map +1 -0
  46. package/dist/project/alias-roots.d.ts +9 -0
  47. package/dist/project/alias-roots.d.ts.map +1 -0
  48. package/dist/project/alias-roots.js +17 -0
  49. package/dist/project/alias-roots.js.map +1 -0
  50. package/dist/project/config-file.d.ts +2 -0
  51. package/dist/project/config-file.d.ts.map +1 -0
  52. package/dist/project/config-file.js +2 -0
  53. package/dist/project/config-file.js.map +1 -0
  54. package/dist/project/config.d.ts +53 -0
  55. package/dist/project/config.d.ts.map +1 -0
  56. package/dist/project/config.js +2 -0
  57. package/dist/project/config.js.map +1 -0
  58. package/dist/project/configured-severity.d.ts +3 -0
  59. package/dist/project/configured-severity.d.ts.map +1 -0
  60. package/dist/project/configured-severity.js +5 -0
  61. package/dist/project/configured-severity.js.map +1 -0
  62. package/dist/project/describe-linted-file.d.ts +4 -0
  63. package/dist/project/describe-linted-file.d.ts.map +1 -0
  64. package/dist/project/describe-linted-file.js +38 -0
  65. package/dist/project/describe-linted-file.js.map +1 -0
  66. package/dist/project/find-project.d.ts +4 -0
  67. package/dist/project/find-project.d.ts.map +1 -0
  68. package/dist/project/find-project.js +37 -0
  69. package/dist/project/find-project.js.map +1 -0
  70. package/dist/project/is-record.d.ts +2 -0
  71. package/dist/project/is-record.d.ts.map +1 -0
  72. package/dist/project/is-record.js +4 -0
  73. package/dist/project/is-record.js.map +1 -0
  74. package/dist/project/is-test-file.d.ts +3 -0
  75. package/dist/project/is-test-file.d.ts.map +1 -0
  76. package/dist/project/is-test-file.js +4 -0
  77. package/dist/project/is-test-file.js.map +1 -0
  78. package/dist/project/layer.d.ts +2 -0
  79. package/dist/project/layer.d.ts.map +1 -0
  80. package/dist/project/layer.js +2 -0
  81. package/dist/project/layer.js.map +1 -0
  82. package/dist/project/lint-host.d.ts +6 -0
  83. package/dist/project/lint-host.d.ts.map +1 -0
  84. package/dist/project/lint-host.js +2 -0
  85. package/dist/project/lint-host.js.map +1 -0
  86. package/dist/project/linted-file.d.ts +13 -0
  87. package/dist/project/linted-file.d.ts.map +1 -0
  88. package/dist/project/linted-file.js +2 -0
  89. package/dist/project/linted-file.js.map +1 -0
  90. package/dist/project/locate.d.ts +5 -0
  91. package/dist/project/locate.d.ts.map +1 -0
  92. package/dist/project/locate.js +47 -0
  93. package/dist/project/locate.js.map +1 -0
  94. package/dist/project/location.d.ts +11 -0
  95. package/dist/project/location.d.ts.map +1 -0
  96. package/dist/project/location.js +2 -0
  97. package/dist/project/location.js.map +1 -0
  98. package/dist/project/parse-allowed-file.d.ts +4 -0
  99. package/dist/project/parse-allowed-file.d.ts.map +1 -0
  100. package/dist/project/parse-allowed-file.js +11 -0
  101. package/dist/project/parse-allowed-file.js.map +1 -0
  102. package/dist/project/parse-config.d.ts +10 -0
  103. package/dist/project/parse-config.d.ts.map +1 -0
  104. package/dist/project/parse-config.js +113 -0
  105. package/dist/project/parse-config.js.map +1 -0
  106. package/dist/project/plugin-settings.d.ts +8 -0
  107. package/dist/project/plugin-settings.d.ts.map +1 -0
  108. package/dist/project/plugin-settings.js +2 -0
  109. package/dist/project/plugin-settings.js.map +1 -0
  110. package/dist/project/posix.d.ts +2 -0
  111. package/dist/project/posix.d.ts.map +1 -0
  112. package/dist/project/posix.js +4 -0
  113. package/dist/project/posix.js.map +1 -0
  114. package/dist/project/resolve-import.d.ts +15 -0
  115. package/dist/project/resolve-import.d.ts.map +1 -0
  116. package/dist/project/resolve-import.js +32 -0
  117. package/dist/project/resolve-import.js.map +1 -0
  118. package/dist/project/to-alias.d.ts +7 -0
  119. package/dist/project/to-alias.d.ts.map +1 -0
  120. package/dist/project/to-alias.js +13 -0
  121. package/dist/project/to-alias.js.map +1 -0
  122. package/dist/project/to-posix.d.ts +2 -0
  123. package/dist/project/to-posix.d.ts.map +1 -0
  124. package/dist/project/to-posix.js +5 -0
  125. package/dist/project/to-posix.js.map +1 -0
  126. package/dist/rules/application-command-query-separation.d.ts +6 -0
  127. package/dist/rules/application-command-query-separation.d.ts.map +1 -0
  128. package/dist/rules/application-command-query-separation.js +49 -0
  129. package/dist/rules/application-command-query-separation.js.map +1 -0
  130. package/dist/rules/application-handler-shape.d.ts +4 -0
  131. package/dist/rules/application-handler-shape.d.ts.map +1 -0
  132. package/dist/rules/application-handler-shape.js +51 -0
  133. package/dist/rules/application-handler-shape.js.map +1 -0
  134. package/dist/rules/aspects-outside-in.d.ts +2 -0
  135. package/dist/rules/aspects-outside-in.d.ts.map +1 -0
  136. package/dist/rules/aspects-outside-in.js +45 -0
  137. package/dist/rules/aspects-outside-in.js.map +1 -0
  138. package/dist/rules/authz-actor-explicit.d.ts +5 -0
  139. package/dist/rules/authz-actor-explicit.d.ts.map +1 -0
  140. package/dist/rules/authz-actor-explicit.js +106 -0
  141. package/dist/rules/authz-actor-explicit.js.map +1 -0
  142. package/dist/rules/authz-declared.d.ts +5 -0
  143. package/dist/rules/authz-declared.d.ts.map +1 -0
  144. package/dist/rules/authz-declared.js +167 -0
  145. package/dist/rules/authz-declared.js.map +1 -0
  146. package/dist/rules/authz-in-application.d.ts +5 -0
  147. package/dist/rules/authz-in-application.d.ts.map +1 -0
  148. package/dist/rules/authz-in-application.js +202 -0
  149. package/dist/rules/authz-in-application.js.map +1 -0
  150. package/dist/rules/clean-file-size.d.ts +2 -0
  151. package/dist/rules/clean-file-size.d.ts.map +1 -0
  152. package/dist/rules/clean-file-size.js +25 -0
  153. package/dist/rules/clean-file-size.js.map +1 -0
  154. package/dist/rules/clean-function-ceiling.d.ts +6 -0
  155. package/dist/rules/clean-function-ceiling.d.ts.map +1 -0
  156. package/dist/rules/clean-function-ceiling.js +32 -0
  157. package/dist/rules/clean-function-ceiling.js.map +1 -0
  158. package/dist/rules/clean-function-size.d.ts +7 -0
  159. package/dist/rules/clean-function-size.d.ts.map +1 -0
  160. package/dist/rules/clean-function-size.js +70 -0
  161. package/dist/rules/clean-function-size.js.map +1 -0
  162. package/dist/rules/clean-no-commented-out-code.d.ts +3 -0
  163. package/dist/rules/clean-no-commented-out-code.d.ts.map +1 -0
  164. package/dist/rules/clean-no-commented-out-code.js +60 -0
  165. package/dist/rules/clean-no-commented-out-code.js.map +1 -0
  166. package/dist/rules/clean-no-escape-hatch.d.ts +15 -0
  167. package/dist/rules/clean-no-escape-hatch.d.ts.map +1 -0
  168. package/dist/rules/clean-no-escape-hatch.js +116 -0
  169. package/dist/rules/clean-no-escape-hatch.js.map +1 -0
  170. package/dist/rules/clean-no-flag-argument.d.ts +2 -0
  171. package/dist/rules/clean-no-flag-argument.d.ts.map +1 -0
  172. package/dist/rules/clean-no-flag-argument.js +80 -0
  173. package/dist/rules/clean-no-flag-argument.js.map +1 -0
  174. package/dist/rules/clean-no-hash-private.d.ts +2 -0
  175. package/dist/rules/clean-no-hash-private.d.ts.map +1 -0
  176. package/dist/rules/clean-no-hash-private.js +36 -0
  177. package/dist/rules/clean-no-hash-private.js.map +1 -0
  178. package/dist/rules/clean-no-noise-comment.d.ts +5 -0
  179. package/dist/rules/clean-no-noise-comment.d.ts.map +1 -0
  180. package/dist/rules/clean-no-noise-comment.js +187 -0
  181. package/dist/rules/clean-no-noise-comment.js.map +1 -0
  182. package/dist/rules/clean-one-export-per-file.d.ts +10 -0
  183. package/dist/rules/clean-one-export-per-file.d.ts.map +1 -0
  184. package/dist/rules/clean-one-export-per-file.js +124 -0
  185. package/dist/rules/clean-one-export-per-file.js.map +1 -0
  186. package/dist/rules/clean-stepdown.d.ts +3 -0
  187. package/dist/rules/clean-stepdown.d.ts.map +1 -0
  188. package/dist/rules/clean-stepdown.js +33 -0
  189. package/dist/rules/clean-stepdown.js.map +1 -0
  190. package/dist/rules/context-boundaries.d.ts +4 -0
  191. package/dist/rules/context-boundaries.d.ts.map +1 -0
  192. package/dist/rules/context-boundaries.js +87 -0
  193. package/dist/rules/context-boundaries.js.map +1 -0
  194. package/dist/rules/context-extractable.d.ts +5 -0
  195. package/dist/rules/context-extractable.d.ts.map +1 -0
  196. package/dist/rules/context-extractable.js +242 -0
  197. package/dist/rules/context-extractable.js.map +1 -0
  198. package/dist/rules/declarations-role-declared.d.ts +5 -0
  199. package/dist/rules/declarations-role-declared.d.ts.map +1 -0
  200. package/dist/rules/declarations-role-declared.js +142 -0
  201. package/dist/rules/declarations-role-declared.js.map +1 -0
  202. package/dist/rules/domain-aggregate-encapsulation.d.ts +4 -0
  203. package/dist/rules/domain-aggregate-encapsulation.d.ts.map +1 -0
  204. package/dist/rules/domain-aggregate-encapsulation.js +93 -0
  205. package/dist/rules/domain-aggregate-encapsulation.js.map +1 -0
  206. package/dist/rules/domain-events-dispatched-on-save.d.ts +3 -0
  207. package/dist/rules/domain-events-dispatched-on-save.d.ts.map +1 -0
  208. package/dist/rules/domain-events-dispatched-on-save.js +87 -0
  209. package/dist/rules/domain-events-dispatched-on-save.js.map +1 -0
  210. package/dist/rules/domain-events-transactional-before-commit.d.ts +4 -0
  211. package/dist/rules/domain-events-transactional-before-commit.d.ts.map +1 -0
  212. package/dist/rules/domain-events-transactional-before-commit.js +121 -0
  213. package/dist/rules/domain-events-transactional-before-commit.js.map +1 -0
  214. package/dist/rules/domain-no-generic-error.d.ts +2 -0
  215. package/dist/rules/domain-no-generic-error.d.ts.map +1 -0
  216. package/dist/rules/domain-no-generic-error.js +32 -0
  217. package/dist/rules/domain-no-generic-error.js.map +1 -0
  218. package/dist/rules/domain-value-object-immutability.d.ts +4 -0
  219. package/dist/rules/domain-value-object-immutability.d.ts.map +1 -0
  220. package/dist/rules/domain-value-object-immutability.js +77 -0
  221. package/dist/rules/domain-value-object-immutability.js.map +1 -0
  222. package/dist/rules/events-consumer-idempotent.d.ts +5 -0
  223. package/dist/rules/events-consumer-idempotent.d.ts.map +1 -0
  224. package/dist/rules/events-consumer-idempotent.js +115 -0
  225. package/dist/rules/events-consumer-idempotent.js.map +1 -0
  226. package/dist/rules/events-name-format.d.ts +2 -0
  227. package/dist/rules/events-name-format.d.ts.map +1 -0
  228. package/dist/rules/events-name-format.js +53 -0
  229. package/dist/rules/events-name-format.js.map +1 -0
  230. package/dist/rules/events-outbox-required.d.ts +7 -0
  231. package/dist/rules/events-outbox-required.d.ts.map +1 -0
  232. package/dist/rules/events-outbox-required.js +82 -0
  233. package/dist/rules/events-outbox-required.js.map +1 -0
  234. package/dist/rules/governance-recorded-deviation.d.ts +2 -0
  235. package/dist/rules/governance-recorded-deviation.d.ts.map +1 -0
  236. package/dist/rules/governance-recorded-deviation.js +73 -0
  237. package/dist/rules/governance-recorded-deviation.js.map +1 -0
  238. package/dist/rules/imports-alias-only.d.ts +5 -0
  239. package/dist/rules/imports-alias-only.d.ts.map +1 -0
  240. package/dist/rules/imports-alias-only.js +63 -0
  241. package/dist/rules/imports-alias-only.js.map +1 -0
  242. package/dist/rules/layer-application-inward.d.ts +2 -0
  243. package/dist/rules/layer-application-inward.d.ts.map +1 -0
  244. package/dist/rules/layer-application-inward.js +66 -0
  245. package/dist/rules/layer-application-inward.js.map +1 -0
  246. package/dist/rules/layer-domain-purity.d.ts +4 -0
  247. package/dist/rules/layer-domain-purity.d.ts.map +1 -0
  248. package/dist/rules/layer-domain-purity.js +75 -0
  249. package/dist/rules/layer-domain-purity.js.map +1 -0
  250. package/dist/rules/layer-sideways.d.ts +3 -0
  251. package/dist/rules/layer-sideways.d.ts.map +1 -0
  252. package/dist/rules/layer-sideways.js +42 -0
  253. package/dist/rules/layer-sideways.js.map +1 -0
  254. package/dist/rules/ports-abstract-class.d.ts +2 -0
  255. package/dist/rules/ports-abstract-class.d.ts.map +1 -0
  256. package/dist/rules/ports-abstract-class.js +74 -0
  257. package/dist/rules/ports-abstract-class.js.map +1 -0
  258. package/dist/rules/ports-implements-never-extends.d.ts +5 -0
  259. package/dist/rules/ports-implements-never-extends.d.ts.map +1 -0
  260. package/dist/rules/ports-implements-never-extends.js +81 -0
  261. package/dist/rules/ports-implements-never-extends.js.map +1 -0
  262. package/dist/rules/ports-no-concrete-dependency.d.ts +2 -0
  263. package/dist/rules/ports-no-concrete-dependency.d.ts.map +1 -0
  264. package/dist/rules/ports-no-concrete-dependency.js +32 -0
  265. package/dist/rules/ports-no-concrete-dependency.js.map +1 -0
  266. package/dist/rules/ports-no-token-constant.d.ts +5 -0
  267. package/dist/rules/ports-no-token-constant.d.ts.map +1 -0
  268. package/dist/rules/ports-no-token-constant.js +109 -0
  269. package/dist/rules/ports-no-token-constant.js.map +1 -0
  270. package/dist/rules/ports-value-import.d.ts +3 -0
  271. package/dist/rules/ports-value-import.d.ts.map +1 -0
  272. package/dist/rules/ports-value-import.js +60 -0
  273. package/dist/rules/ports-value-import.js.map +1 -0
  274. package/dist/rules/purity.d.ts +4 -0
  275. package/dist/rules/purity.d.ts.map +1 -0
  276. package/dist/rules/purity.js +65 -0
  277. package/dist/rules/purity.js.map +1 -0
  278. package/dist/rules/rules.d.ts +4 -0
  279. package/dist/rules/rules.d.ts.map +1 -0
  280. package/dist/rules/rules.js +97 -0
  281. package/dist/rules/rules.js.map +1 -0
  282. package/dist/rules/scheduling-job-name.d.ts +5 -0
  283. package/dist/rules/scheduling-job-name.d.ts.map +1 -0
  284. package/dist/rules/scheduling-job-name.js +98 -0
  285. package/dist/rules/scheduling-job-name.js.map +1 -0
  286. package/dist/rules/scheduling-job-triggers-use-case.d.ts +5 -0
  287. package/dist/rules/scheduling-job-triggers-use-case.d.ts.map +1 -0
  288. package/dist/rules/scheduling-job-triggers-use-case.js +129 -0
  289. package/dist/rules/scheduling-job-triggers-use-case.js.map +1 -0
  290. package/dist/rules/standard-no-parallel-interface.d.ts +2 -0
  291. package/dist/rules/standard-no-parallel-interface.d.ts.map +1 -0
  292. package/dist/rules/standard-no-parallel-interface.js +57 -0
  293. package/dist/rules/standard-no-parallel-interface.js.map +1 -0
  294. package/dist/rules/test-no-mocks.d.ts +2 -0
  295. package/dist/rules/test-no-mocks.d.ts.map +1 -0
  296. package/dist/rules/test-no-mocks.js +50 -0
  297. package/dist/rules/test-no-mocks.js.map +1 -0
  298. package/dist/rules/tracing-platform-only.d.ts +2 -0
  299. package/dist/rules/tracing-platform-only.d.ts.map +1 -0
  300. package/dist/rules/tracing-platform-only.js +52 -0
  301. package/dist/rules/tracing-platform-only.js.map +1 -0
  302. package/dist/support/ancestors.d.ts +4 -0
  303. package/dist/support/ancestors.d.ts.map +1 -0
  304. package/dist/support/ancestors.js +7 -0
  305. package/dist/support/ancestors.js.map +1 -0
  306. package/dist/support/calls/accessed-name.d.ts +4 -0
  307. package/dist/support/calls/accessed-name.d.ts.map +1 -0
  308. package/dist/support/calls/accessed-name.js +14 -0
  309. package/dist/support/calls/accessed-name.js.map +1 -0
  310. package/dist/support/calls/callee-name.d.ts +4 -0
  311. package/dist/support/calls/callee-name.d.ts.map +1 -0
  312. package/dist/support/calls/callee-name.js +11 -0
  313. package/dist/support/calls/callee-name.js.map +1 -0
  314. package/dist/support/calls/has-spread.d.ts +4 -0
  315. package/dist/support/calls/has-spread.d.ts.map +1 -0
  316. package/dist/support/calls/has-spread.js +6 -0
  317. package/dist/support/calls/has-spread.js.map +1 -0
  318. package/dist/support/calls/method-chain.d.ts +8 -0
  319. package/dist/support/calls/method-chain.d.ts.map +1 -0
  320. package/dist/support/calls/method-chain.js +13 -0
  321. package/dist/support/calls/method-chain.js.map +1 -0
  322. package/dist/support/calls/missing-keys.d.ts +7 -0
  323. package/dist/support/calls/missing-keys.d.ts.map +1 -0
  324. package/dist/support/calls/missing-keys.js +28 -0
  325. package/dist/support/calls/missing-keys.js.map +1 -0
  326. package/dist/support/calls/property-of.d.ts +3 -0
  327. package/dist/support/calls/property-of.d.ts.map +1 -0
  328. package/dist/support/calls/property-of.js +8 -0
  329. package/dist/support/calls/property-of.js.map +1 -0
  330. package/dist/support/classes/class-finder.d.ts +18 -0
  331. package/dist/support/classes/class-finder.d.ts.map +1 -0
  332. package/dist/support/classes/class-finder.js +76 -0
  333. package/dist/support/classes/class-finder.js.map +1 -0
  334. package/dist/support/classes/class-name.d.ts +4 -0
  335. package/dist/support/classes/class-name.d.ts.map +1 -0
  336. package/dist/support/classes/class-name.js +4 -0
  337. package/dist/support/classes/class-name.js.map +1 -0
  338. package/dist/support/classes/constructor-of.d.ts +3 -0
  339. package/dist/support/classes/constructor-of.d.ts.map +1 -0
  340. package/dist/support/classes/constructor-of.js +5 -0
  341. package/dist/support/classes/constructor-of.js.map +1 -0
  342. package/dist/support/classes/enclosing-member.d.ts +8 -0
  343. package/dist/support/classes/enclosing-member.d.ts.map +1 -0
  344. package/dist/support/classes/enclosing-member.js +15 -0
  345. package/dist/support/classes/enclosing-member.js.map +1 -0
  346. package/dist/support/classes/exported-classes.d.ts +4 -0
  347. package/dist/support/classes/exported-classes.d.ts.map +1 -0
  348. package/dist/support/classes/exported-classes.js +22 -0
  349. package/dist/support/classes/exported-classes.js.map +1 -0
  350. package/dist/support/classes/is-callable.d.ts +4 -0
  351. package/dist/support/classes/is-callable.d.ts.map +1 -0
  352. package/dist/support/classes/is-callable.js +10 -0
  353. package/dist/support/classes/is-callable.js.map +1 -0
  354. package/dist/support/classes/is-constructor.d.ts +3 -0
  355. package/dist/support/classes/is-constructor.d.ts.map +1 -0
  356. package/dist/support/classes/is-constructor.js +5 -0
  357. package/dist/support/classes/is-constructor.js.map +1 -0
  358. package/dist/support/classes/is-function.d.ts +3 -0
  359. package/dist/support/classes/is-function.d.ts.map +1 -0
  360. package/dist/support/classes/is-function.js +5 -0
  361. package/dist/support/classes/is-function.js.map +1 -0
  362. package/dist/support/classes/is-inline-export.d.ts +3 -0
  363. package/dist/support/classes/is-inline-export.d.ts.map +1 -0
  364. package/dist/support/classes/is-inline-export.js +6 -0
  365. package/dist/support/classes/is-inline-export.js.map +1 -0
  366. package/dist/support/classes/is-keyed.d.ts +5 -0
  367. package/dist/support/classes/is-keyed.d.ts.map +1 -0
  368. package/dist/support/classes/is-keyed.js +5 -0
  369. package/dist/support/classes/is-keyed.js.map +1 -0
  370. package/dist/support/classes/key-name.d.ts +3 -0
  371. package/dist/support/classes/key-name.d.ts.map +1 -0
  372. package/dist/support/classes/key-name.js +11 -0
  373. package/dist/support/classes/key-name.js.map +1 -0
  374. package/dist/support/classes/member-name.d.ts +4 -0
  375. package/dist/support/classes/member-name.d.ts.map +1 -0
  376. package/dist/support/classes/member-name.js +7 -0
  377. package/dist/support/classes/member-name.js.map +1 -0
  378. package/dist/support/classes/top-level-classes.d.ts +4 -0
  379. package/dist/support/classes/top-level-classes.d.ts.map +1 -0
  380. package/dist/support/classes/top-level-classes.js +10 -0
  381. package/dist/support/classes/top-level-classes.js.map +1 -0
  382. package/dist/support/classes/visibility-of.d.ts +4 -0
  383. package/dist/support/classes/visibility-of.d.ts.map +1 -0
  384. package/dist/support/classes/visibility-of.js +12 -0
  385. package/dist/support/classes/visibility-of.js.map +1 -0
  386. package/dist/support/comments/comment-lines.d.ts +15 -0
  387. package/dist/support/comments/comment-lines.d.ts.map +1 -0
  388. package/dist/support/comments/comment-lines.js +47 -0
  389. package/dist/support/comments/comment-lines.js.map +1 -0
  390. package/dist/support/comments/is-commented-out-code.d.ts +6 -0
  391. package/dist/support/comments/is-commented-out-code.d.ts.map +1 -0
  392. package/dist/support/comments/is-commented-out-code.js +108 -0
  393. package/dist/support/comments/is-commented-out-code.js.map +1 -0
  394. package/dist/support/comments/is-directive.d.ts +3 -0
  395. package/dist/support/comments/is-directive.d.ts.map +1 -0
  396. package/dist/support/comments/is-directive.js +6 -0
  397. package/dist/support/comments/is-directive.js.map +1 -0
  398. package/dist/support/comments/is-fragment.d.ts +3 -0
  399. package/dist/support/comments/is-fragment.d.ts.map +1 -0
  400. package/dist/support/comments/is-fragment.js +18 -0
  401. package/dist/support/comments/is-fragment.js.map +1 -0
  402. package/dist/support/comments/is-jsdoc.d.ts +3 -0
  403. package/dist/support/comments/is-jsdoc.d.ts.map +1 -0
  404. package/dist/support/comments/is-jsdoc.js +5 -0
  405. package/dist/support/comments/is-jsdoc.js.map +1 -0
  406. package/dist/support/comments/prose-opening.d.ts +3 -0
  407. package/dist/support/comments/prose-opening.d.ts.map +1 -0
  408. package/dist/support/comments/prose-opening.js +3 -0
  409. package/dist/support/comments/prose-opening.js.map +1 -0
  410. package/dist/support/comments/reads-as-prose.d.ts +3 -0
  411. package/dist/support/comments/reads-as-prose.d.ts.map +1 -0
  412. package/dist/support/comments/reads-as-prose.js +7 -0
  413. package/dist/support/comments/reads-as-prose.js.map +1 -0
  414. package/dist/support/declarations/access-decorators.d.ts +3 -0
  415. package/dist/support/declarations/access-decorators.d.ts.map +1 -0
  416. package/dist/support/declarations/access-decorators.js +3 -0
  417. package/dist/support/declarations/access-decorators.js.map +1 -0
  418. package/dist/support/declarations/declaration-reader.d.ts +19 -0
  419. package/dist/support/declarations/declaration-reader.d.ts.map +1 -0
  420. package/dist/support/declarations/declaration-reader.js +46 -0
  421. package/dist/support/declarations/declaration-reader.js.map +1 -0
  422. package/dist/support/declarations/declared-role-of.d.ts +5 -0
  423. package/dist/support/declarations/declared-role-of.d.ts.map +1 -0
  424. package/dist/support/declarations/declared-role-of.js +12 -0
  425. package/dist/support/declarations/declared-role-of.js.map +1 -0
  426. package/dist/support/declarations/declared-role.d.ts +9 -0
  427. package/dist/support/declarations/declared-role.d.ts.map +1 -0
  428. package/dist/support/declarations/declared-role.js +2 -0
  429. package/dist/support/declarations/declared-role.js.map +1 -0
  430. package/dist/support/declarations/declared-roles.d.ts +4 -0
  431. package/dist/support/declarations/declared-roles.d.ts.map +1 -0
  432. package/dist/support/declarations/declared-roles.js +20 -0
  433. package/dist/support/declarations/declared-roles.js.map +1 -0
  434. package/dist/support/declarations/is-declared-style.d.ts +3 -0
  435. package/dist/support/declarations/is-declared-style.d.ts.map +1 -0
  436. package/dist/support/declarations/is-declared-style.js +4 -0
  437. package/dist/support/declarations/is-declared-style.js.map +1 -0
  438. package/dist/support/declarations/written-name.d.ts +11 -0
  439. package/dist/support/declarations/written-name.d.ts.map +1 -0
  440. package/dist/support/declarations/written-name.js +22 -0
  441. package/dist/support/declarations/written-name.js.map +1 -0
  442. package/dist/support/declarations/written-names.d.ts +3 -0
  443. package/dist/support/declarations/written-names.d.ts.map +1 -0
  444. package/dist/support/declarations/written-names.js +7 -0
  445. package/dist/support/declarations/written-names.js.map +1 -0
  446. package/dist/support/descendants.d.ts +4 -0
  447. package/dist/support/descendants.d.ts.map +1 -0
  448. package/dist/support/descendants.js +21 -0
  449. package/dist/support/descendants.js.map +1 -0
  450. package/dist/support/exports/derived-forms-of.d.ts +8 -0
  451. package/dist/support/exports/derived-forms-of.d.ts.map +1 -0
  452. package/dist/support/exports/derived-forms-of.js +23 -0
  453. package/dist/support/exports/derived-forms-of.js.map +1 -0
  454. package/dist/support/exports/explain-exports.d.ts +11 -0
  455. package/dist/support/exports/explain-exports.d.ts.map +1 -0
  456. package/dist/support/exports/explain-exports.js +60 -0
  457. package/dist/support/exports/explain-exports.js.map +1 -0
  458. package/dist/support/exports/export-explanation.d.ts +9 -0
  459. package/dist/support/exports/export-explanation.d.ts.map +1 -0
  460. package/dist/support/exports/export-explanation.js +2 -0
  461. package/dist/support/exports/export-explanation.js.map +1 -0
  462. package/dist/support/exports/is-named-after.d.ts +8 -0
  463. package/dist/support/exports/is-named-after.d.ts.map +1 -0
  464. package/dist/support/exports/is-named-after.js +16 -0
  465. package/dist/support/exports/is-named-after.js.map +1 -0
  466. package/dist/support/exports/module-shape-of.d.ts +4 -0
  467. package/dist/support/exports/module-shape-of.d.ts.map +1 -0
  468. package/dist/support/exports/module-shape-of.js +11 -0
  469. package/dist/support/exports/module-shape-of.js.map +1 -0
  470. package/dist/support/exports/module-shape.d.ts +10 -0
  471. package/dist/support/exports/module-shape.d.ts.map +1 -0
  472. package/dist/support/exports/module-shape.js +2 -0
  473. package/dist/support/exports/module-shape.js.map +1 -0
  474. package/dist/support/exports/shares-private-state.d.ts +11 -0
  475. package/dist/support/exports/shares-private-state.d.ts.map +1 -0
  476. package/dist/support/exports/shares-private-state.js +36 -0
  477. package/dist/support/exports/shares-private-state.js.map +1 -0
  478. package/dist/support/exports/signature-of.d.ts +8 -0
  479. package/dist/support/exports/signature-of.d.ts.map +1 -0
  480. package/dist/support/exports/signature-of.js +44 -0
  481. package/dist/support/exports/signature-of.js.map +1 -0
  482. package/dist/support/exports/top-level-declaration.d.ts +10 -0
  483. package/dist/support/exports/top-level-declaration.d.ts.map +1 -0
  484. package/dist/support/exports/top-level-declaration.js +2 -0
  485. package/dist/support/exports/top-level-declaration.js.map +1 -0
  486. package/dist/support/exports/top-level-declarations.d.ts +5 -0
  487. package/dist/support/exports/top-level-declarations.d.ts.map +1 -0
  488. package/dist/support/exports/top-level-declarations.js +48 -0
  489. package/dist/support/exports/top-level-declarations.js.map +1 -0
  490. package/dist/support/exports/type-closure.d.ts +5 -0
  491. package/dist/support/exports/type-closure.d.ts.map +1 -0
  492. package/dist/support/exports/type-closure.js +18 -0
  493. package/dist/support/exports/type-closure.js.map +1 -0
  494. package/dist/support/exports/type-family-of.d.ts +8 -0
  495. package/dist/support/exports/type-family-of.d.ts.map +1 -0
  496. package/dist/support/exports/type-family-of.js +43 -0
  497. package/dist/support/exports/type-family-of.js.map +1 -0
  498. package/dist/support/exports/type-names-in.d.ts +4 -0
  499. package/dist/support/exports/type-names-in.d.ts.map +1 -0
  500. package/dist/support/exports/type-names-in.js +21 -0
  501. package/dist/support/exports/type-names-in.js.map +1 -0
  502. package/dist/support/functions/code-lines.d.ts +5 -0
  503. package/dist/support/functions/code-lines.d.ts.map +1 -0
  504. package/dist/support/functions/code-lines.js +14 -0
  505. package/dist/support/functions/code-lines.js.map +1 -0
  506. package/dist/support/functions/described-function.d.ts +11 -0
  507. package/dist/support/functions/described-function.d.ts.map +1 -0
  508. package/dist/support/functions/described-function.js +9 -0
  509. package/dist/support/functions/described-function.js.map +1 -0
  510. package/dist/support/functions/function-node.d.ts +3 -0
  511. package/dist/support/functions/function-node.d.ts.map +1 -0
  512. package/dist/support/functions/function-node.js +2 -0
  513. package/dist/support/functions/function-node.js.map +1 -0
  514. package/dist/support/glob-matcher.d.ts +3 -0
  515. package/dist/support/glob-matcher.d.ts.map +1 -0
  516. package/dist/support/glob-matcher.js +8 -0
  517. package/dist/support/glob-matcher.js.map +1 -0
  518. package/dist/support/globals/ambient-name.d.ts +8 -0
  519. package/dist/support/globals/ambient-name.d.ts.map +1 -0
  520. package/dist/support/globals/ambient-name.js +26 -0
  521. package/dist/support/globals/ambient-name.js.map +1 -0
  522. package/dist/support/globals/property-name.d.ts +3 -0
  523. package/dist/support/globals/property-name.d.ts.map +1 -0
  524. package/dist/support/globals/property-name.js +10 -0
  525. package/dist/support/globals/property-name.js.map +1 -0
  526. package/dist/support/hash-private-fix.d.ts +12 -0
  527. package/dist/support/hash-private-fix.d.ts.map +1 -0
  528. package/dist/support/hash-private-fix.js +52 -0
  529. package/dist/support/hash-private-fix.js.map +1 -0
  530. package/dist/support/imports/describe-target.d.ts +3 -0
  531. package/dist/support/imports/describe-target.d.ts.map +1 -0
  532. package/dist/support/imports/describe-target.js +11 -0
  533. package/dist/support/imports/describe-target.js.map +1 -0
  534. package/dist/support/imports/import-listener.d.ts +23 -0
  535. package/dist/support/imports/import-listener.d.ts.map +1 -0
  536. package/dist/support/imports/import-listener.js +43 -0
  537. package/dist/support/imports/import-listener.js.map +1 -0
  538. package/dist/support/imports/in-context.d.ts +4 -0
  539. package/dist/support/imports/in-context.d.ts.map +1 -0
  540. package/dist/support/imports/in-context.js +4 -0
  541. package/dist/support/imports/in-context.js.map +1 -0
  542. package/dist/support/imports/in-layer.d.ts +5 -0
  543. package/dist/support/imports/in-layer.d.ts.map +1 -0
  544. package/dist/support/imports/in-layer.js +4 -0
  545. package/dist/support/imports/in-layer.js.map +1 -0
  546. package/dist/support/imports/in-source-root.d.ts +4 -0
  547. package/dist/support/imports/in-source-root.d.ts.map +1 -0
  548. package/dist/support/imports/in-source-root.js +5 -0
  549. package/dist/support/imports/in-source-root.js.map +1 -0
  550. package/dist/support/imports/inner-layer.d.ts +4 -0
  551. package/dist/support/imports/inner-layer.d.ts.map +1 -0
  552. package/dist/support/imports/inner-layer.js +9 -0
  553. package/dist/support/imports/inner-layer.js.map +1 -0
  554. package/dist/support/imports/static-string.d.ts +3 -0
  555. package/dist/support/imports/static-string.d.ts.map +1 -0
  556. package/dist/support/imports/static-string.js +11 -0
  557. package/dist/support/imports/static-string.js.map +1 -0
  558. package/dist/support/kebab-case.d.ts +7 -0
  559. package/dist/support/kebab-case.d.ts.map +1 -0
  560. package/dist/support/kebab-case.js +13 -0
  561. package/dist/support/kebab-case.js.map +1 -0
  562. package/dist/support/members/parameter-name.d.ts +3 -0
  563. package/dist/support/members/parameter-name.d.ts.map +1 -0
  564. package/dist/support/members/parameter-name.js +7 -0
  565. package/dist/support/members/parameter-name.js.map +1 -0
  566. package/dist/support/members/parameter-properties.d.ts +4 -0
  567. package/dist/support/members/parameter-properties.d.ts.map +1 -0
  568. package/dist/support/members/parameter-properties.js +6 -0
  569. package/dist/support/members/parameter-properties.js.map +1 -0
  570. package/dist/support/members/starts-at-this.d.ts +4 -0
  571. package/dist/support/members/starts-at-this.d.ts.map +1 -0
  572. package/dist/support/members/starts-at-this.js +10 -0
  573. package/dist/support/members/starts-at-this.js.map +1 -0
  574. package/dist/support/outside-concerns/outside-concern-message.d.ts +3 -0
  575. package/dist/support/outside-concerns/outside-concern-message.d.ts.map +1 -0
  576. package/dist/support/outside-concerns/outside-concern-message.js +3 -0
  577. package/dist/support/outside-concerns/outside-concern-message.js.map +1 -0
  578. package/dist/support/outside-concerns/outside-concern.d.ts +13 -0
  579. package/dist/support/outside-concerns/outside-concern.d.ts.map +1 -0
  580. package/dist/support/outside-concerns/outside-concern.js +31 -0
  581. package/dist/support/outside-concerns/outside-concern.js.map +1 -0
  582. package/dist/support/ports/binding-call-reader.d.ts +10 -0
  583. package/dist/support/ports/binding-call-reader.d.ts.map +1 -0
  584. package/dist/support/ports/binding-call-reader.js +25 -0
  585. package/dist/support/ports/binding-call-reader.js.map +1 -0
  586. package/dist/support/ports/dependency-list-listener.d.ts +10 -0
  587. package/dist/support/ports/dependency-list-listener.d.ts.map +1 -0
  588. package/dist/support/ports/dependency-list-listener.js +37 -0
  589. package/dist/support/ports/dependency-list-listener.js.map +1 -0
  590. package/dist/support/ports/imported-binding.d.ts +11 -0
  591. package/dist/support/ports/imported-binding.d.ts.map +1 -0
  592. package/dist/support/ports/imported-binding.js +2 -0
  593. package/dist/support/ports/imported-binding.js.map +1 -0
  594. package/dist/support/ports/imported-bindings.d.ts +6 -0
  595. package/dist/support/ports/imported-bindings.d.ts.map +1 -0
  596. package/dist/support/ports/imported-bindings.js +19 -0
  597. package/dist/support/ports/imported-bindings.js.map +1 -0
  598. package/dist/support/ports/is-port-file.d.ts +4 -0
  599. package/dist/support/ports/is-port-file.d.ts.map +1 -0
  600. package/dist/support/ports/is-port-file.js +13 -0
  601. package/dist/support/ports/is-port-file.js.map +1 -0
  602. package/dist/support/purity-rule.d.ts +19 -0
  603. package/dist/support/purity-rule.d.ts.map +1 -0
  604. package/dist/support/purity-rule.js +74 -0
  605. package/dist/support/purity-rule.js.map +1 -0
  606. package/dist/support/rule/define-rule.d.ts +30 -0
  607. package/dist/support/rule/define-rule.d.ts.map +1 -0
  608. package/dist/support/rule/define-rule.js +51 -0
  609. package/dist/support/rule/define-rule.js.map +1 -0
  610. package/dist/support/rule/docs-of.d.ts +6 -0
  611. package/dist/support/rule/docs-of.d.ts.map +1 -0
  612. package/dist/support/rule/docs-of.js +9 -0
  613. package/dist/support/rule/docs-of.js.map +1 -0
  614. package/dist/support/rule/rule-docs.d.ts +9 -0
  615. package/dist/support/rule/rule-docs.d.ts.map +1 -0
  616. package/dist/support/rule/rule-docs.js +2 -0
  617. package/dist/support/rule/rule-docs.js.map +1 -0
  618. package/dist/support/scheduling/is-job-file.d.ts +4 -0
  619. package/dist/support/scheduling/is-job-file.d.ts.map +1 -0
  620. package/dist/support/scheduling/is-job-file.js +11 -0
  621. package/dist/support/scheduling/is-job-file.js.map +1 -0
  622. package/dist/support/scheduling/registered-job.d.ts +11 -0
  623. package/dist/support/scheduling/registered-job.d.ts.map +1 -0
  624. package/dist/support/scheduling/registered-job.js +17 -0
  625. package/dist/support/scheduling/registered-job.js.map +1 -0
  626. package/dist/support/standard-interfaces/boundary-names.d.ts +3 -0
  627. package/dist/support/standard-interfaces/boundary-names.d.ts.map +1 -0
  628. package/dist/support/standard-interfaces/boundary-names.js +3 -0
  629. package/dist/support/standard-interfaces/boundary-names.js.map +1 -0
  630. package/dist/support/standard-interfaces/parallel-names.d.ts +4 -0
  631. package/dist/support/standard-interfaces/parallel-names.d.ts.map +1 -0
  632. package/dist/support/standard-interfaces/parallel-names.js +76 -0
  633. package/dist/support/standard-interfaces/parallel-names.js.map +1 -0
  634. package/dist/support/standard-interfaces/standard-names-in.d.ts +3 -0
  635. package/dist/support/standard-interfaces/standard-names-in.d.ts.map +1 -0
  636. package/dist/support/standard-interfaces/standard-names-in.js +5 -0
  637. package/dist/support/standard-interfaces/standard-names-in.js.map +1 -0
  638. package/dist/support/stepdown/call-graph.d.ts +8 -0
  639. package/dist/support/stepdown/call-graph.d.ts.map +1 -0
  640. package/dist/support/stepdown/call-graph.js +27 -0
  641. package/dist/support/stepdown/call-graph.js.map +1 -0
  642. package/dist/support/stepdown/member-use.d.ts +7 -0
  643. package/dist/support/stepdown/member-use.d.ts.map +1 -0
  644. package/dist/support/stepdown/member-use.js +2 -0
  645. package/dist/support/stepdown/member-use.js.map +1 -0
  646. package/dist/support/stepdown/member-uses.d.ts +9 -0
  647. package/dist/support/stepdown/member-uses.d.ts.map +1 -0
  648. package/dist/support/stepdown/member-uses.js +27 -0
  649. package/dist/support/stepdown/member-uses.js.map +1 -0
  650. package/dist/support/stepdown/misplaced-functions.d.ts +11 -0
  651. package/dist/support/stepdown/misplaced-functions.d.ts.map +1 -0
  652. package/dist/support/stepdown/misplaced-functions.js +80 -0
  653. package/dist/support/stepdown/misplaced-functions.js.map +1 -0
  654. package/dist/support/stepdown/misplaced-members.d.ts +10 -0
  655. package/dist/support/stepdown/misplaced-members.d.ts.map +1 -0
  656. package/dist/support/stepdown/misplaced-members.js +73 -0
  657. package/dist/support/stepdown/misplaced-members.js.map +1 -0
  658. package/dist/support/suppressions/shares-line-with-code.d.ts +3 -0
  659. package/dist/support/suppressions/shares-line-with-code.d.ts.map +1 -0
  660. package/dist/support/suppressions/shares-line-with-code.js +5 -0
  661. package/dist/support/suppressions/shares-line-with-code.js.map +1 -0
  662. package/dist/support/suppressions/suppressed-lines.d.ts +4 -0
  663. package/dist/support/suppressions/suppressed-lines.d.ts.map +1 -0
  664. package/dist/support/suppressions/suppressed-lines.js +17 -0
  665. package/dist/support/suppressions/suppressed-lines.js.map +1 -0
  666. package/dist/support/types/declared-type-name.d.ts +6 -0
  667. package/dist/support/types/declared-type-name.d.ts.map +1 -0
  668. package/dist/support/types/declared-type-name.js +33 -0
  669. package/dist/support/types/declared-type-name.js.map +1 -0
  670. package/dist/support/types/parameter-binding.d.ts +4 -0
  671. package/dist/support/types/parameter-binding.d.ts.map +1 -0
  672. package/dist/support/types/parameter-binding.js +7 -0
  673. package/dist/support/types/parameter-binding.js.map +1 -0
  674. package/dist/support/types/parameter-type-name.d.ts +3 -0
  675. package/dist/support/types/parameter-type-name.d.ts.map +1 -0
  676. package/dist/support/types/parameter-type-name.js +6 -0
  677. package/dist/support/types/parameter-type-name.js.map +1 -0
  678. package/dist/support/types/type-reference-name.d.ts +4 -0
  679. package/dist/support/types/type-reference-name.d.ts.map +1 -0
  680. package/dist/support/types/type-reference-name.js +14 -0
  681. package/dist/support/types/type-reference-name.js.map +1 -0
  682. package/dist/support/words/same-word.d.ts +3 -0
  683. package/dist/support/words/same-word.d.ts.map +1 -0
  684. package/dist/support/words/same-word.js +75 -0
  685. package/dist/support/words/same-word.js.map +1 -0
  686. package/dist/support/words/split-words.d.ts +3 -0
  687. package/dist/support/words/split-words.d.ts.map +1 -0
  688. package/dist/support/words/split-words.js +12 -0
  689. package/dist/support/words/split-words.js.map +1 -0
  690. package/dist/version.d.ts +2 -0
  691. package/dist/version.d.ts.map +1 -0
  692. package/dist/version.js +2 -0
  693. package/dist/version.js.map +1 -0
  694. package/docs/rules/application-command-query-separation.md +54 -0
  695. package/docs/rules/application-handler-shape.md +52 -0
  696. package/docs/rules/aspects-outside-in.md +54 -0
  697. package/docs/rules/authz-actor-explicit.md +70 -0
  698. package/docs/rules/authz-declared.md +87 -0
  699. package/docs/rules/authz-in-application.md +88 -0
  700. package/docs/rules/clean-blank-lines.md +87 -0
  701. package/docs/rules/clean-braces.md +61 -0
  702. package/docs/rules/clean-file-size.md +43 -0
  703. package/docs/rules/clean-formatted.md +32 -0
  704. package/docs/rules/clean-function-ceiling.md +53 -0
  705. package/docs/rules/clean-function-size.md +45 -0
  706. package/docs/rules/clean-no-commented-out-code.md +48 -0
  707. package/docs/rules/clean-no-escape-hatch.md +80 -0
  708. package/docs/rules/clean-no-flag-argument.md +50 -0
  709. package/docs/rules/clean-no-hash-private.md +63 -0
  710. package/docs/rules/clean-no-noise-comment.md +55 -0
  711. package/docs/rules/clean-one-export-per-file.md +88 -0
  712. package/docs/rules/clean-stepdown.md +60 -0
  713. package/docs/rules/context-declared-relationship.md +49 -0
  714. package/docs/rules/context-extractable.md +109 -0
  715. package/docs/rules/context-published-language-is-a-contract.md +47 -0
  716. package/docs/rules/context-published-language-only.md +47 -0
  717. package/docs/rules/declarations-role-declared.md +109 -0
  718. package/docs/rules/domain-aggregate-encapsulation.md +63 -0
  719. package/docs/rules/domain-events-dispatched-on-save.md +83 -0
  720. package/docs/rules/domain-events-transactional-before-commit.md +92 -0
  721. package/docs/rules/domain-no-generic-error.md +40 -0
  722. package/docs/rules/domain-value-object-immutability.md +52 -0
  723. package/docs/rules/events-consumer-idempotent.md +68 -0
  724. package/docs/rules/events-name-format.md +50 -0
  725. package/docs/rules/events-outbox-required.md +57 -0
  726. package/docs/rules/governance-recorded-deviation.md +55 -0
  727. package/docs/rules/imports-alias-only.md +73 -0
  728. package/docs/rules/layer-application-inward.md +62 -0
  729. package/docs/rules/layer-domain-purity.md +60 -0
  730. package/docs/rules/layer-infrastructure-no-presentation.md +46 -0
  731. package/docs/rules/layer-presentation-no-infrastructure.md +46 -0
  732. package/docs/rules/ports-abstract-class.md +70 -0
  733. package/docs/rules/ports-implements-never-extends.md +53 -0
  734. package/docs/rules/ports-no-concrete-dependency.md +52 -0
  735. package/docs/rules/ports-no-token-constant.md +57 -0
  736. package/docs/rules/ports-value-import.md +55 -0
  737. package/docs/rules/purity-no-ambient-randomness.md +43 -0
  738. package/docs/rules/purity-no-environment.md +45 -0
  739. package/docs/rules/purity-no-system-clock.md +49 -0
  740. package/docs/rules/scheduling-job-name.md +57 -0
  741. package/docs/rules/scheduling-job-triggers-use-case.md +71 -0
  742. package/docs/rules/standard-no-parallel-interface.md +95 -0
  743. package/docs/rules/test-no-mocks.md +47 -0
  744. package/docs/rules/tracing-platform-only.md +65 -0
  745. package/package.json +56 -4
@@ -0,0 +1,53 @@
1
+ # ddd-ts-kit/clean-function-ceiling
2
+
3
+ Architecture id: `clean/function-size`. Default severity: `error` in `recommended`, `error` in `strict`.
4
+
5
+ Applies to: every linted file, tests and module files included.
6
+
7
+ ## Why
8
+
9
+ `clean/function-size` asks for short functions with a limit a project may tune, and leaves `describe` callbacks and module files alone. This rule is the part that is not negotiable: past 100 lines of code a function is a file in disguise, whatever it is, and a test suite of that length tests more than one thing. ESLint gives one severity to a rule name, so the ceiling is a rule of its own: an `error` while `clean-function-size` stays a `warn`.
10
+
11
+ ## Reported
12
+
13
+ - a function, a method or an arrow function whose body holds more than 100 lines of code, the callbacks of `describe`, `suite` and `context` and the functions of `<context>.module.ts` included
14
+
15
+ Incorrect:
16
+
17
+ ```ts
18
+ describe('an invoice', () => {
19
+ // 140 lines of tests about issuing, paying and voiding
20
+ });
21
+ ```
22
+
23
+ Correct:
24
+
25
+ ```ts
26
+ describe('an invoice being issued', () => {
27
+ // the tests about issuing
28
+ });
29
+
30
+ describe('an invoice being paid', () => {
31
+ // the tests about paying
32
+ });
33
+ ```
34
+
35
+ ## Details
36
+
37
+ Lines of code are counted as `clean-function-size` counts them: the lines of the body that carry at least one token; blank lines and comment lines are not counted. A nested function counts in the length of the function around it.
38
+
39
+ The same number caps the configurable limit: `limits.maxFunctionLines` of `ddd-ts-kit.config.json` and the option `maxLines` of `clean-function-size` are read as 100 when they are higher.
40
+
41
+ ## Options
42
+
43
+ None.
44
+
45
+ `rules."clean/function-size"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/function-size -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
46
+
47
+ ## Limits
48
+
49
+ - The rule cannot be lowered to a warning from `ddd-ts-kit.config.json`: only `off` reaches it, with `clean/function-size` as a whole.
50
+
51
+ ## With the CLI checker
52
+
53
+ `ddd-ts-kit check` reports the ceiling under `clean/function-size` with the severity `error`, on the text of the file: methods, function declarations at any depth, function expressions and arrow functions, a class property arrow and a callback of `describe` or `it` included. It does not read the methods of an object literal, and counts a template literal written on several lines as one line. This rule is the authority.
@@ -0,0 +1,45 @@
1
+ # ddd-ts-kit/clean-function-size
2
+
3
+ Architecture id: `clean/function-size`. Default severity: `warn` in `recommended`, `error` in `strict`.
4
+
5
+ Applies to: every linted file.
6
+
7
+ ## Why
8
+
9
+ A function with more than three parameters hides a concept that has no name yet; a function longer than a screen does more than one thing.
10
+
11
+ ## Reported
12
+
13
+ - more than `maxParameters` parameters (default 3); constructors are exempt, a `this` parameter is not counted
14
+ - more than `maxLines` lines of code in the body (default 30, never above 100); blank lines and comment lines are not counted
15
+
16
+ Incorrect:
17
+
18
+ ```ts
19
+ function charge(amount: Amount, card: Card, at: Date, retries: number): void {}
20
+ ```
21
+
22
+ Correct:
23
+
24
+ ```ts
25
+ function charge(payment: Payment, policy: RetryPolicy): void {}
26
+ ```
27
+
28
+ ## Details
29
+
30
+ The module file of a context (`<context>.module.ts`) is exempt from the line limit: a composition grows with the context. So is the callback of `describe`, `suite` and `context`: it holds tests, not steps. Both are still held by the hard ceiling of 100 lines, which is the companion rule [`clean-function-ceiling`](clean-function-ceiling.md), an `error` whatever the severity of this one.
31
+
32
+ ## Options
33
+
34
+ `[{ "maxParameters": 3, "maxLines": 30 }]`. When an option is absent, `limits.maxParameters` and `limits.maxFunctionLines` of `ddd-ts-kit.config.json` apply, then the defaults. A `maxLines` or a `limits.maxFunctionLines` above 100 is read as 100.
35
+
36
+ `rules."clean/function-size"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/function-size -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
37
+
38
+ ## Limits
39
+
40
+ - The standard `max-params` and `max-lines-per-function` are not enabled by the presets: they cannot exempt constructors nor read the limits of the config, and would report twice.
41
+ - A nested function counts in the length of the function around it.
42
+
43
+ ## With the CLI checker
44
+
45
+ `ddd-ts-kit check` approximates this rule on the text of the file and stays the fast edit-time guard. This rule is the authority.
@@ -0,0 +1,48 @@
1
+ # ddd-ts-kit/clean-no-commented-out-code
2
+
3
+ Architecture id: `clean/no-commented-out-code`. Default severity: `error` in `recommended`, `error` in `strict`.
4
+
5
+ Applies to: every linted file.
6
+
7
+ ## Why
8
+
9
+ Code in a comment does not run, is not type-checked and is never deleted. Version control keeps the old version.
10
+
11
+ ## Reported
12
+
13
+ - a `//` paragraph or a `/* */` block whose text parses as statements, as a function body or as class members, and holds a declaration, a control statement, a call or an assignment
14
+ - an opening line left alone (`if (x) {`, `items.forEach((item) => {`)
15
+
16
+ Incorrect:
17
+
18
+ ```ts
19
+ // const total = lines.reduce(add, 0);
20
+ // if (invoice.isPaid()) {
21
+ // return;
22
+ // }
23
+ ```
24
+
25
+ Correct:
26
+
27
+ ```ts
28
+ // The vendor rounds half up (contract 4.2), so we round before summing.
29
+ ```
30
+
31
+ ## Details
32
+
33
+ The comment body is given to the parser configured for the file, so TypeScript syntax is understood. Prose is filtered before and after parsing: a sentence of plain words, a lone identifier, a label (`note: ...`), a type expression, `name (unit)`, a `TODO`, a URL and tool directives are never code. JSDoc blocks are skipped: their `@example` and fenced samples are documentation.
34
+
35
+ ## Options
36
+
37
+ None.
38
+
39
+ `rules."clean/no-commented-out-code"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/no-commented-out-code -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
40
+
41
+ ## Limits
42
+
43
+ - A one-line call such as `// validate(input);` is reported even when it was meant as a mention: quote it in backticks inside a sentence.
44
+ - Code written as a sentence, or without any punctuation of code (`return value`), is not seen.
45
+
46
+ ## With the CLI checker
47
+
48
+ `ddd-ts-kit check` approximates this rule on the text of the file, with the same exemption of JSDoc blocks, and stays the fast edit-time guard. This rule is the authority.
@@ -0,0 +1,80 @@
1
+ # ddd-ts-kit/clean-no-escape-hatch
2
+
3
+ Architecture id: `clean/no-escape-hatch`. Default severity: `error` in `recommended`, `error` in `strict`.
4
+
5
+ Applies to: every linted file.
6
+
7
+ ## Why
8
+
9
+ Each escape hatch switches the compiler off for a value and for everything it touches. Foreign data enters through mappers and adapters, where an assertion is expected; anywhere else it hides a design problem.
10
+
11
+ ## Reported
12
+
13
+ - `value as X` and `<X>value` outside `*.mapper.ts`, `infrastructure/**` of a context and the files matched by `adapterGlobs` (`as const`, `as unknown` and `satisfies` are allowed; `as unknown as X` is reported once)
14
+ - `eslint-disable`, `eslint-disable-line` and `eslint-disable-next-line` without a reason after `--`
15
+
16
+ Incorrect:
17
+
18
+ ```ts
19
+ const invoice = raw as Invoice;
20
+ // eslint-disable-next-line no-console
21
+ console.log(invoice);
22
+ ```
23
+
24
+ Correct:
25
+
26
+ ```ts
27
+ const invoice = parseInvoice(raw);
28
+ const roles = ['admin', 'agent'] as const;
29
+ // eslint-disable-next-line no-console -- the CLI prints its result
30
+ console.log(invoice);
31
+ ```
32
+
33
+ ## Details
34
+
35
+ **Delegated to standard rules.** The rest of the architecture rule is held by typescript-eslint, enabled by every preset of this plugin instead of being written a second time:
36
+
37
+ | Part of `clean/no-escape-hatch` | Standard rule |
38
+ |---|---|
39
+ | explicit `any` | `@typescript-eslint/no-explicit-any` |
40
+ | non-null assertion `!` | `@typescript-eslint/no-non-null-assertion` |
41
+ | `@ts-ignore`, `@ts-nocheck`, `@ts-expect-error` without description | `@typescript-eslint/ban-ts-comment` (`ts-expect-error: allow-with-description`) |
42
+
43
+ Enabling `ddd-ts-kit/clean-no-escape-hatch` alone therefore does not report these three: use a preset, or enable the three rules next to it.
44
+
45
+ ## Options
46
+
47
+ | Option | Default | Meaning |
48
+ |---|---|---|
49
+ | `typeAssertions` | `true` | `false` keeps only the comment check (the presets use it for tests) |
50
+ | `adapterGlobs` | `[]` | other places where foreign data enters, where an assertion is expected |
51
+ | `allowCallerClaimedGenerics` | `false` | lets `value as T` through when the caller chose `T` |
52
+
53
+ **`adapterGlobs`.** The exemption for adapters is read from the path: `*.mapper.ts` anywhere, and `infrastructure/` of a context. A project that keeps adapters elsewhere (the platform, a package of a monorepo) declares them:
54
+
55
+ ```js
56
+ 'ddd-ts-kit/clean-no-escape-hatch': ['error', { adapterGlobs: ['src/platform/database/**', 'packages/*/src/postgres/**'] }]
57
+ ```
58
+
59
+ Globs are posix paths relative to the project root (the directory of `ddd-ts-kit.config.json`, else the working directory): `**` crosses directories, `*` stays inside one, `?` is one character. Nothing changes inside a context.
60
+
61
+ **`allowCallerClaimedGenerics`.** A function such as `get<Body>(path): Promise<Body>` cannot know `Body`: the caller claims it. With the option, `value as T` is accepted when `T` is exactly a type parameter of the function or method around it and that parameter appears in its declared return type.
62
+
63
+ ```ts
64
+ async get<Body>(path: string): Promise<Body> {
65
+ return (await this.read(path)) as Body; // accepted with the option
66
+ }
67
+ ```
68
+
69
+ The trade-off: nothing checks the claim. `client.get<Invoice>('/x')` is an assertion written by the caller, in any layer, that no rule sees any more. Keep the option off where a schema can parse the value, and turn it on for the few transport helpers whose callers validate what they receive. `value as T[]`, a type parameter of a class and a function that does not return `T` stay reported.
70
+
71
+ `rules."clean/no-escape-hatch"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/no-escape-hatch -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
72
+
73
+ ## Limits
74
+
75
+ - A blanket `/* eslint-disable */` silences this rule too, so it cannot report it: `governance/recorded-deviation` does.
76
+ - `any` produced by inference is the business of the type-checked `no-unsafe-*` rules of typescript-eslint.
77
+
78
+ ## With the CLI checker
79
+
80
+ `ddd-ts-kit check` approximates this rule on the text of the file and stays the fast edit-time guard. This rule is the authority.
@@ -0,0 +1,50 @@
1
+ # ddd-ts-kit/clean-no-flag-argument
2
+
3
+ Architecture id: `clean/no-flag-argument`. Default severity: `warn` in `recommended`, `error` in `strict`.
4
+
5
+ Applies to: public methods of classes in `domain/`, and `execute` in `application/`; tests excluded.
6
+
7
+ ## Why
8
+
9
+ A boolean parameter says that the method does two things. The call site reads `close(true)` and nobody knows what is true.
10
+
11
+ ## Reported
12
+
13
+ - a parameter typed `boolean` (also `boolean | undefined`, optional) or defaulting to `true` or `false`
14
+
15
+ Incorrect:
16
+
17
+ ```ts
18
+ class Invoice {
19
+ close(force: boolean): void {}
20
+ }
21
+ ```
22
+
23
+ Correct:
24
+
25
+ ```ts
26
+ class Invoice {
27
+ close(): void {}
28
+ forceClose(reason: string): void {}
29
+ }
30
+ ```
31
+
32
+ ## Details
33
+
34
+ Classes named `...Command` or `...Query` are messages and carry data: they are exempt. Private methods and constructors are exempt.
35
+
36
+ ## Options
37
+
38
+ None.
39
+
40
+ `rules."clean/no-flag-argument"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/no-flag-argument -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
41
+
42
+ ## Limits
43
+
44
+ - The type is read from the annotation, not inferred: `flag = isReady()` is not seen.
45
+ - Functions outside classes are not judged.
46
+ - Without a `ddd-ts-kit.config.json` layout (file outside a context) the rule is silent.
47
+
48
+ ## With the CLI checker
49
+
50
+ `ddd-ts-kit check` approximates this rule on the text of the file and stays the fast edit-time guard. This rule is the authority.
@@ -0,0 +1,63 @@
1
+ # ddd-ts-kit/clean-no-hash-private
2
+
3
+ Architecture id: `clean/no-hash-private`. Default severity: `error` in `recommended`, `error` in `strict`. Fixable with `--fix`.
4
+
5
+ Applies to: every linted file.
6
+
7
+ ## Why
8
+
9
+ There is one way to hide a member: the `private` keyword. It reads the same on a field, a method, an accessor and a constructor parameter, the compiler checks it, and the rules of this plugin and the CLI checker read it. `#name` is a second spelling of the same intention, with a different run-time behaviour that nothing in a domain model relies on.
10
+
11
+ ## Reported
12
+
13
+ - a field, a method, an accessor or a static member declared `#name`
14
+
15
+ Incorrect:
16
+
17
+ ```ts
18
+ class Invoice {
19
+ #total = 0;
20
+
21
+ add(amount: number): void {
22
+ this.#total += amount;
23
+ }
24
+ }
25
+ ```
26
+
27
+ Correct:
28
+
29
+ ```ts
30
+ class Invoice {
31
+ private total = 0;
32
+
33
+ add(amount: number): void {
34
+ this.total += amount;
35
+ }
36
+ }
37
+ ```
38
+
39
+ ## Details
40
+
41
+ **The fix.** `--fix` rewrites the declarations of `#name` (a getter and its setter together) and every use of it into `private name`, with `private` placed before `static`, `readonly`, `async`, `get` and `set`, after the decorators. It is applied only when it cannot change what the code means:
42
+
43
+ - the class has no other member, and no constructor parameter property, called `name`;
44
+ - no other class of the file declares the same `#name`;
45
+ - the file has no brand check `#name in value`;
46
+ - every use is `this.#name` or `<identifier>.#name` inside the class.
47
+
48
+ Otherwise the member is reported without a fix. Two different names in one class are rewritten in two passes of the same `--fix` run.
49
+
50
+ ## Options
51
+
52
+ None.
53
+
54
+ `rules."clean/no-hash-private"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/no-hash-private -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
55
+
56
+ ## Limits
57
+
58
+ - `private` is erased at compile time: code that relied on `#name` being unreachable at run time (a brand check, a hostile caller) has to be rewritten by hand, which is why those cases are not fixed.
59
+ - A subclass that declares a member with the name freed by the fix is then a compile error; rename one of the two.
60
+
61
+ ## With the CLI checker
62
+
63
+ `ddd-ts-kit check` reports the same id from the text of the file. This rule is the authority, and the only one that fixes.
@@ -0,0 +1,55 @@
1
+ # ddd-ts-kit/clean-no-noise-comment
2
+
3
+ Architecture id: `clean/no-noise-comment`. Default severity: `warn` in `recommended`, `error` in `strict`.
4
+
5
+ Applies to: every linted file.
6
+
7
+ ## Why
8
+
9
+ A comment is kept for what the code cannot say: why, a consequence, an external reference. Anything else is a second, unmaintained copy of the code.
10
+
11
+ ## Reported
12
+
13
+ - a banner (`// ----- helpers -----`)
14
+ - a label after a closing brace (`} // end if`)
15
+ - an author, a date or a change journal
16
+ - `@param name` or `@returns` without description
17
+ - a `TODO` or `FIXME` without owner (`TODO(owner)`) nor reference (`#123`, `ABC-12`, a URL)
18
+ - a comment or JSDoc description that only repeats the name declared below it
19
+
20
+ Incorrect:
21
+
22
+ ```ts
23
+ /** The invoice repository. */
24
+ export class InvoiceRepository {}
25
+
26
+ // TODO fix this
27
+ ```
28
+
29
+ Correct:
30
+
31
+ ```ts
32
+ /** Loads by number as well: support looks invoices up by what the customer reads. */
33
+ export class InvoiceRepository {}
34
+
35
+ // TODO(billing#142): retry with backoff
36
+ ```
37
+
38
+ ## Details
39
+
40
+ "Repeats the name" compares words with a small English inflection (`Issues the invoice` says `issueInvoice`), ignoring filler words.
41
+
42
+ ## Options
43
+
44
+ None.
45
+
46
+ `rules."clean/no-noise-comment"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/no-noise-comment -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
47
+
48
+ ## Limits
49
+
50
+ - Heuristics on wording: a short description made of the words of the name plus filler is flagged even if the author found it useful.
51
+ - Only the comment directly above a declaration is compared with a name.
52
+
53
+ ## With the CLI checker
54
+
55
+ `ddd-ts-kit check` approximates this rule on the text of the file and stays the fast edit-time guard. This rule is the authority.
@@ -0,0 +1,88 @@
1
+ # ddd-ts-kit/clean-one-export-per-file
2
+
3
+ Architecture id: `clean/one-export-per-file`. Default severity: `error` in `recommended`, `error` in `strict`.
4
+
5
+ Applies to: sources under the source root (in a workspace, under the `src` directory of a package). Tests (`*.spec.ts`, `*.test.ts`, a `test/` directory) and declaration files are not judged.
6
+
7
+ ## Why
8
+
9
+ A file that exports one thing is found by its name, read in one sitting and moved without untangling. The companions it may keep are the types of its own signature: they have no life without it. Entry files are the opposite: they declare nothing, so that the map of a package stays a map.
10
+
11
+ ## Reported
12
+
13
+ - a file exporting two or more classes, interfaces or functions that are not one thing (the allowances are below)
14
+ - a file not named after its export in kebab-case
15
+ - in an entry file (`index.ts` at any depth, `<context>.declarations.ts`, the files of the option `entries`): any statement that is not a re-export
16
+
17
+ Incorrect:
18
+
19
+ ```ts
20
+ // src/platform/collaborators.ts
21
+ export function loggerOr(given?: Logger): Logger {}
22
+ export function clockOr(given?: Clock): Clock {}
23
+
24
+ // src/platform/event-bus.ts
25
+ export class RabbitMqEventBus {}
26
+
27
+ // src/platform/index.ts
28
+ export const VERSION = '1.0.0';
29
+ ```
30
+
31
+ Correct:
32
+
33
+ ```ts
34
+ // src/platform/retry.ts: a function and the type of its signature
35
+ export interface RetryOptions {
36
+ readonly attempts: number;
37
+ }
38
+
39
+ export function retry(options: RetryOptions): Aspect {}
40
+
41
+ // src/platform/rabbit-mq-event-bus.ts
42
+ export class RabbitMqEventBus {}
43
+
44
+ // src/platform/index.ts
45
+ export { retry, type RetryOptions } from '@/platform/retry.js';
46
+ ```
47
+
48
+ ## Details
49
+
50
+ **What is counted.** The distinct names of the exported classes (abstract or not), interfaces and functions. An exported `const`, `type` or `enum` is never counted, the overloads of a function count once, and a function sharing its name with an interface or a type (`CommandHandler` the decorator and `CommandHandler<M>` the shape it decorates) counts once. A file with no counted export is not judged at all, neither for its count nor for its name.
51
+
52
+ **What may stand together.** Two or more counted exports pass when one of these holds:
53
+
54
+ | Allowance | Rule |
55
+ |---|---|
56
+ | the types of the signature | every other counted export is an interface reached from the signature of one export of the file: the parameters and the return type of a function (every overload), the constructor, the public members and the `implements` list of a class, the members of an interface or of a type alias, and from there through the interfaces and type aliases of the file. `type Result = Ok \| Err` with its two interfaces is this case |
57
+ | a derived form | a function named after the main function with a suffix and called by it (`retryAdvice` next to `retry`) stands with it, with the types of its own signature |
58
+ | a type and its constructors or combinators | every exported function returns one type, declared by the file or imported by it (`allOf`, `anyOf`, `not` returning `Condition`); when that type is a union of the file, a function may return one of its members |
59
+ | the accessors of one private state | every exported function reads or writes a module-level variable that is not exported (a `let`, or a `const` holding a `new ..`), and those variables tie the functions into one group (`sequence` and `resetSequences` around `const counters = new Map()`) |
60
+
61
+ Anything else is declared, with the sentence that says why the exports are one thing, in `onePerFile.allow` of `ddd-ts-kit.config.json` or in the option `allow`.
62
+
63
+ **The file name.** The base name without its extension, with every `.` read as `-`, is the kebab-case of the export: `rabbit-mq-event-bus.ts` for `RabbitMqEventBus`, `standard-schema-v1.ts` for `StandardSchemaV1`, `http-server.ts` for `HTTPServer`, `issue-invoice.handler.ts` for `IssueInvoiceHandler`. In a role file `<name>.<role>.ts` whose export does not end with the role word, the part before the first dot is the name: `invoice.aggregate.ts` for `Invoice`, `payment-gateway.port.ts` for `PaymentGateway`. A product is spelled in the file name as the class spells it.
64
+
65
+ The export the file is named after is the counted one; with the types of a signature, any export that holds the others in its signature (`job-run-observer.ts` for a `type JobRunObserver` that takes the exported `interface JobRunDetail`); with a type and its constructors, the type when the file declares it. A family that no export names (the accessors of a state, the combinators of an imported type) is named freely. A file allowed by `allow` is named after one of its exports.
66
+
67
+ **Entry files** may hold `export .. from`, `export * from`, `export type .. from` an import for its side effect (`import 'reflect-metadata';`) and the empty `export {};` of a package that exports nothing yet, nothing else. They are exempt from the count and from the name.
68
+
69
+ ## Options
70
+
71
+ | Option | Default | Meaning |
72
+ |---|---|---|
73
+ | `allow` | `[]` | `[{ "file": "<path or glob>", "reason": "<why these exports are one thing>" }]`, added to `onePerFile.allow` of the config; an allowed file is exempt from the count, never from its name |
74
+ | `entries` | `[]` | globs of the entry files besides every `index.ts` and `<contextsDir>/*/*.declarations.ts`: the subpath entries of a package (`packages/*/src/testing.ts`) |
75
+
76
+ Paths and globs are posix, relative to the project root (the directory of `ddd-ts-kit.config.json`, else the working directory): `**` crosses directories, `*` stays inside one, `?` is one character. An entry of `allow` without a `file` or without a `reason` allows nothing.
77
+
78
+ `rules."clean/one-export-per-file"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/one-export-per-file -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
79
+
80
+ ## Limits
81
+
82
+ - The signature is read from the syntax, without types: a type reached only through an inferred return type or through a type of another file is not seen as a companion. Write the return type.
83
+ - Only interfaces are companions: a second class or a second function is never excused by a signature.
84
+ - A re-export (`export { a } from`) in a file that also declares something is not counted and not reported.
85
+
86
+ ## With the CLI checker
87
+
88
+ `ddd-ts-kit check` holds the same count, the same `allow` list, the entry file rule and the file name, with a text approximation of the allowances. This rule is the authority.
@@ -0,0 +1,60 @@
1
+ # ddd-ts-kit/clean-stepdown
2
+
3
+ Architecture id: `clean/stepdown`. Default severity: `error` in `recommended`, `error` in `strict`.
4
+
5
+ Applies to: every linted file.
6
+
7
+ ## Why
8
+
9
+ A file reads like a newspaper: the intention at the top, the details below. A reader who opens a class meets what it does before how, and never has to scroll up to find the helper a function just called.
10
+
11
+ ## Reported
12
+
13
+ - a private, `#private` or protected method declared before a public method
14
+ - a public static method declared after a public instance method (static factories come first)
15
+ - a private method declared above its first caller
16
+ - a non-exported top-level function, or constant holding a function, declared above its first caller
17
+
18
+ Incorrect:
19
+
20
+ ```ts
21
+ function price(line: Line): number {
22
+ return line.unit * line.quantity;
23
+ }
24
+
25
+ export function total(lines: Line[]): number {
26
+ return lines.map(price).reduce(add, 0);
27
+ }
28
+ ```
29
+
30
+ Correct:
31
+
32
+ ```ts
33
+ export function total(lines: Line[]): number {
34
+ return lines.map(price).reduce(add, 0);
35
+ }
36
+
37
+ function price(line: Line): number {
38
+ return line.unit * line.quantity;
39
+ }
40
+ ```
41
+
42
+ ## Details
43
+
44
+ Callers are found with the scope manager for functions, and through `this.x`, `this.#x` and `ClassName.x` for members. Recursion and mutual recursion have no right order and are not reported. A constant holding a function is left alone when it is used while the module loads, since moving it below that use would break at run time.
45
+
46
+ ## Options
47
+
48
+ None.
49
+
50
+ `rules."clean/stepdown"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/stepdown -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
51
+
52
+ ## Limits
53
+
54
+ - A member called only through another receiver than `this` or the class name (`other.#helper()`) has no known caller and is not reported.
55
+ - Constructors, properties that do not hold a function, accessors without body and overload signatures are neutral.
56
+ - An exported function is never asked to move: the order between exported functions is the author's.
57
+
58
+ ## With the CLI checker
59
+
60
+ `ddd-ts-kit check` approximates this rule on the text of the file and stays the fast edit-time guard. This rule is the authority.
@@ -0,0 +1,49 @@
1
+ # ddd-ts-kit/context-declared-relationship
2
+
3
+ Architecture id: `context/declared-relationship`. Default severity: `error` in `recommended`, `error` in `strict`.
4
+
5
+ Applies to: every file of a context, tests included.
6
+
7
+ ## Why
8
+
9
+ Relationships between contexts are strategic decisions written in `ddd-ts-kit.config.json` and drawn in the context map. An import must never be the only place where a dependency exists.
10
+
11
+ ## Reported
12
+
13
+ - an import of the published language of a context that is not listed in `contexts.<this context>.upstreams`
14
+
15
+ Incorrect:
16
+
17
+ ```ts
18
+ // ddd-ts-kit.config.json: "shipping": { "upstreams": [] }
19
+ // src/contexts/shipping/application/integration/handlers/billing-invoice-issued.integration-handler.ts
20
+ import type { InvoiceIssuedV1 } from '@/contexts/billing/published-language/index.js';
21
+ ```
22
+
23
+ Correct:
24
+
25
+ ```ts
26
+ // ddd-ts-kit.config.json: "shipping": { "upstreams": [{ "context": "billing", "relationship": "published-language" }] }
27
+ import type { InvoiceIssuedV1 } from '@/contexts/billing/published-language/index.js';
28
+ ```
29
+
30
+ ## Details
31
+
32
+ Static imports, type-only imports, `export ... from`, dynamic `import()`, `require()`, `import x = require()` and `import("...")` types are all read, through relative paths and the configured `importAlias`.
33
+
34
+ ## Options
35
+
36
+ None.
37
+
38
+ `rules."context/declared-relationship"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line context/declared-relationship -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
39
+
40
+ ## Limits
41
+
42
+ - The target is classified by its path: a barrel in an allowed layer that re-exports a forbidden one is not followed. `dependency-cruiser` (see `pipeline/depcruise-config.mjs`) resolves the real graph and closes that gap.
43
+ - A computed specifier (`import(name)`) is not judged.
44
+ - `tsconfig` paths other than `importAlias` are not resolved.
45
+ - Cycles between declared relationships are found by `ddd-ts-kit check` (`context/no-cycle`), which reads the whole config.
46
+
47
+ ## With the CLI checker
48
+
49
+ `ddd-ts-kit check` reports the same id from a regex reading of the file. This rule is the authority for the import; the CLI stays the authority for the config (`config/valid`, `context/no-cycle`).