@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,187 @@
1
+ import { AST_TOKEN_TYPES } from '@typescript-eslint/utils';
2
+ import { commentLines } from '../support/comments/comment-lines.js';
3
+ import { isDirective } from '../support/comments/is-directive.js';
4
+ import { isJsdoc } from '../support/comments/is-jsdoc.js';
5
+ import { defineRule } from '../support/rule/define-rule.js';
6
+ import { sameWord } from '../support/words/same-word.js';
7
+ import { splitWords } from '../support/words/split-words.js';
8
+ const BANNER = /^(?:[-=*#~_+/\\]\s?){4,}|^[-=*#~]{2,}.*[-=*#~]{3,}$/;
9
+ const CLOSING = /^(?:end\b|close\b|\/\s*\w+|(?:if|for|while|function|class|switch|try|catch|else|namespace|module|describe|it)\b)/i;
10
+ const JOURNAL = /@(?:author|created|modified|date|changelog)\b|^(?:\d{4}[-/.]\d{1,2}[-/.]\d{1,2}|\d{1,2}[-/.]\d{1,2}[-/.]\d{4})\b|\b(?:added|changed|modified|fixed|created|updated|written)\s+by\s+[A-Z@]/;
11
+ const EMPTY_TAG = /^@(?:param|arg|argument)\s+(?:\{[^}]*\}\s*)?[[\]\w$.=]+\s*-?\s*$|^@(?:returns?|throws)\s*(?:\{[^}]*\})?\s*$/;
12
+ const OWNERLESS_TODO = /\b(?:TODO|FIXME)\b(?!\s*\()/;
13
+ const REFERENCE = /#\d+|\b[A-Z][A-Z0-9]+-\d+\b|https?:\/\//;
14
+ /** Words that add nothing to the name they sit next to. */
15
+ const FILLER = [
16
+ 'the',
17
+ 'a',
18
+ 'an',
19
+ 'of',
20
+ 'this',
21
+ 'that',
22
+ 'for',
23
+ 'to',
24
+ 'is',
25
+ 'it',
26
+ 'its',
27
+ 'new',
28
+ 'given',
29
+ 'current',
30
+ 'class',
31
+ 'function',
32
+ 'method',
33
+ 'property',
34
+ 'field',
35
+ 'constructor',
36
+ 'instance',
37
+ 'object',
38
+ 'value',
39
+ 'get',
40
+ 'set',
41
+ 'return',
42
+ 'create',
43
+ 'represent',
44
+ 'define',
45
+ 'implementation',
46
+ 'interface',
47
+ 'type',
48
+ ];
49
+ const MODIFIERS = new Set([
50
+ 'export',
51
+ 'default',
52
+ 'public',
53
+ 'private',
54
+ 'protected',
55
+ 'static',
56
+ 'readonly',
57
+ 'abstract',
58
+ 'async',
59
+ 'override',
60
+ 'declare',
61
+ 'get',
62
+ 'set',
63
+ 'const',
64
+ 'let',
65
+ 'var',
66
+ 'function',
67
+ 'class',
68
+ 'interface',
69
+ 'type',
70
+ 'enum',
71
+ '*',
72
+ ]);
73
+ const NAME_TOKENS = new Set([AST_TOKEN_TYPES.Identifier, AST_TOKEN_TYPES.PrivateIdentifier]);
74
+ const INSTEAD = 'Delete it, or replace it by what the name cannot say: why, a constraint, a consequence.';
75
+ export const cleanNoNoiseComment = defineRule({
76
+ id: 'clean/no-noise-comment',
77
+ type: 'suggestion',
78
+ recommended: 'warn',
79
+ description: 'No comment that restates the code, no banner, no journal, no closing-brace comment, no @param without description.',
80
+ messages: {
81
+ banner: 'The comment is a banner: "{{excerpt}}". Delete it; if the file needs sections, it holds several concepts that deserve their own files.',
82
+ closingBrace: 'The comment labels a closing brace: "{{excerpt}}". Delete it and shorten the block: a brace that needs a label closes a function that is too long.',
83
+ journal: 'The comment keeps a journal or an author: "{{excerpt}}". Delete it: version control records who changed what and when.',
84
+ emptyTag: 'The comment is a tag without a description: "{{excerpt}}". Describe what the type cannot say (unit, range, meaning of an absent value) or delete the tag.',
85
+ ownerlessTodo: 'The comment is a TODO without an owner or a reference: "{{excerpt}}". Write it as TODO(<owner or ticket>): ..., or do it now, or delete it.',
86
+ restatesName: `The comment only repeats the name {{name}}: "{{excerpt}}". ${INSTEAD}`,
87
+ },
88
+ create({ sourceCode, report }) {
89
+ return {
90
+ Program() {
91
+ const lines = commentLines(sourceCode).filter((line) => !line.sample && line.text !== '' && !isDirective(line.text));
92
+ for (const line of lines) {
93
+ const noise = noiseOf(line, sourceCode);
94
+ if (noise !== undefined) {
95
+ report({ loc: line.loc, messageId: noise, data: { excerpt: line.text.slice(0, 60) } });
96
+ }
97
+ }
98
+ for (const description of descriptions(lines)) {
99
+ const name = declaredAfter(sourceCode, description.last);
100
+ if (name === undefined || !restatesName(description.text, name)) {
101
+ continue;
102
+ }
103
+ report({
104
+ loc: description.first.loc,
105
+ messageId: 'restatesName',
106
+ data: { name, excerpt: description.text.slice(0, 60) },
107
+ });
108
+ }
109
+ },
110
+ };
111
+ },
112
+ });
113
+ function noiseOf(line, sourceCode) {
114
+ const { text } = line;
115
+ if (BANNER.test(text)) {
116
+ return 'banner';
117
+ }
118
+ if (labelsClosingBrace(line, sourceCode)) {
119
+ return 'closingBrace';
120
+ }
121
+ if (JOURNAL.test(text)) {
122
+ return 'journal';
123
+ }
124
+ if (line.block && EMPTY_TAG.test(text)) {
125
+ return 'emptyTag';
126
+ }
127
+ return OWNERLESS_TODO.test(text) && !REFERENCE.test(text) ? 'ownerlessTodo' : undefined;
128
+ }
129
+ function labelsClosingBrace(line, sourceCode) {
130
+ if (!line.trailing || !CLOSING.test(line.text) || line.text.split(' ').length > 3) {
131
+ return false;
132
+ }
133
+ return sourceCode.getTokenBefore(line.comment)?.value === '}';
134
+ }
135
+ /** What is said just above a declaration: a JSDoc block without its tags, or a run of `//` lines. */
136
+ function descriptions(lines) {
137
+ const found = [];
138
+ let run = [];
139
+ const close = () => {
140
+ const [first] = run;
141
+ const last = run.at(-1);
142
+ if (first !== undefined && last !== undefined) {
143
+ found.push({ text: run.map((line) => line.text).join(' '), first, last: last.comment });
144
+ }
145
+ run = [];
146
+ };
147
+ for (const line of lines.filter((candidate) => !candidate.trailing && (!candidate.block || (isJsdoc(candidate.comment) && !candidate.text.startsWith('@'))))) {
148
+ const previous = run.at(-1);
149
+ if (previous !== undefined && !belongsTogether(previous, line)) {
150
+ close();
151
+ }
152
+ run.push(line);
153
+ }
154
+ close();
155
+ return found;
156
+ }
157
+ function belongsTogether(previous, line) {
158
+ if (previous.block || line.block) {
159
+ return previous.comment === line.comment;
160
+ }
161
+ return line.loc.start.line === previous.loc.start.line + 1;
162
+ }
163
+ /** The name declared on the line that follows the comment, read from its tokens. */
164
+ function declaredAfter(sourceCode, comment) {
165
+ const tokens = sourceCode.getTokensAfter(comment, { count: 8 });
166
+ const [first] = tokens;
167
+ if (first === undefined || first.loc.start.line > comment.loc.end.line + 1) {
168
+ return undefined;
169
+ }
170
+ const named = tokens.findIndex((token) => !MODIFIERS.has(token.value));
171
+ // `get()` and `static()` are methods named like a modifier: the name is the word before the parenthesis.
172
+ const name = tokens[named]?.value === '(' ? tokens[named - 1] : tokens[named];
173
+ if (name === undefined || (!NAME_TOKENS.has(name.type) && !MODIFIERS.has(name.value))) {
174
+ return undefined;
175
+ }
176
+ return name.type === AST_TOKEN_TYPES.PrivateIdentifier ? `#${name.value}` : name.value;
177
+ }
178
+ /** True when the description says nothing the name does not already say. */
179
+ function restatesName(description, name) {
180
+ const said = splitWords(description.replace(/[.`'"]/g, ' '));
181
+ if (said.length === 0 || said.length > 8) {
182
+ return false;
183
+ }
184
+ const named = splitWords(name);
185
+ return said.every((word) => [...FILLER, ...named].some((known) => sameWord(known, word)));
186
+ }
187
+ //# sourceMappingURL=clean-no-noise-comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-no-noise-comment.js","sourceRoot":"","sources":["../../src/rules/clean-no-noise-comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgC,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,YAAY,EAAoB,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,MAAM,MAAM,GAAG,qDAAqD,CAAC;AAErE,MAAM,OAAO,GACX,mHAAmH,CAAC;AAEtH,MAAM,OAAO,GACX,2LAA2L,CAAC;AAE9L,MAAM,SAAS,GACb,6GAA6G,CAAC;AAEhH,MAAM,cAAc,GAAG,6BAA6B,CAAC;AACrD,MAAM,SAAS,GAAG,yCAAyC,CAAC;AAE5D,2DAA2D;AAC3D,MAAM,MAAM,GAAG;IACb,KAAK;IACL,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,KAAK;IACL,OAAO;IACP,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,aAAa;IACb,UAAU;IACV,QAAQ;IACR,OAAO;IACP,KAAK;IACL,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,gBAAgB;IAChB,WAAW;IACX,MAAM;CACP,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,WAAW;IACX,QAAQ;IACR,UAAU;IACV,UAAU;IACV,OAAO;IACP,UAAU;IACV,SAAS;IACT,KAAK;IACL,KAAK;IACL,OAAO;IACP,KAAK;IACL,KAAK;IACL,UAAU;IACV,OAAO;IACP,WAAW;IACX,MAAM;IACN,MAAM;IACN,GAAG;CACJ,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAErG,MAAM,OAAO,GAAG,yFAAyF,CAAC;AAE1G,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAyB;IACpE,EAAE,EAAE,wBAAwB;IAC5B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,MAAM;IACnB,WAAW,EACT,oHAAoH;IACtH,QAAQ,EAAE;QACR,MAAM,EACJ,wIAAwI;QAC1I,YAAY,EACV,oJAAoJ;QACtJ,OAAO,EACL,wHAAwH;QAC1H,QAAQ,EACN,2JAA2J;QAC7J,aAAa,EACX,6IAA6I;QAC/I,YAAY,EAAE,8DAA8D,OAAO,EAAE;KACtF;IACD,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;QAC3B,OAAO;YACL,OAAO;gBACL,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CACtE,CAAC;gBAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAExC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACxB,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzF,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;oBAEzD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;wBAChE,SAAS;oBACX,CAAC;oBAED,MAAM,CAAC;wBACL,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG;wBAC1B,SAAS,EAAE,cAAc;wBACzB,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;qBACvD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,OAAO,CAAC,IAAiB,EAAE,UAAyC;IAC3E,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAEtB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1F,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAiB,EAAE,UAAyC;IACtF,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC;AAChE,CAAC;AAQD,qGAAqG;AACrG,SAAS,YAAY,CAAC,KAA6B;IACjD,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,GAAG,GAAkB,EAAE,CAAC;IAE5B,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QACpB,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,GAAG,GAAG,EAAE,CAAC;IACX,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAC7B,CAAC,SAAS,EAAE,EAAE,CACZ,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAC/G,EAAE,CAAC;QACF,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YAC/D,KAAK,EAAE,CAAC;QACV,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,EAAE,CAAC;IAER,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,QAAqB,EAAE,IAAiB;IAC/D,IAAI,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,oFAAoF;AACpF,SAAS,aAAa,CAAC,UAAyC,EAAE,OAAyB;IACzF,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAEvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,yGAAyG;IACzG,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9E,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACtF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACzF,CAAC;AAED,4EAA4E;AAC5E,SAAS,YAAY,CAAC,WAAmB,EAAE,IAAY;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAE7D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { AllowedFile } from '../project/config.js';
2
+ interface Options {
3
+ /** Files whose several exports are one thing, each with the sentence that says why; added to `onePerFile.allow` of the config. */
4
+ readonly allow?: readonly AllowedFile[];
5
+ /** Globs of the entry files besides every `index.ts`: the subpath entries of a package. */
6
+ readonly entries?: readonly string[];
7
+ }
8
+ export declare const cleanOneExportPerFile: import("@typescript-eslint/utils/ts-eslint").RuleModule<"entry" | "fileName" | "several", [Options], import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
9
+ export {};
10
+ //# sourceMappingURL=clean-one-export-per-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-one-export-per-file.d.ts","sourceRoot":"","sources":["../../src/rules/clean-one-export-per-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAWxD,UAAU,OAAO;IACf,kIAAkI;IAClI,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAKD,eAAO,MAAM,qBAAqB,iMAqEhC,CAAC"}
@@ -0,0 +1,124 @@
1
+ import path from 'node:path';
2
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
3
+ import { parseAllowedFile } from '../project/parse-allowed-file.js';
4
+ import { defineRule } from '../support/rule/define-rule.js';
5
+ import { explainExports } from '../support/exports/explain-exports.js';
6
+ import { isNamedAfter } from '../support/exports/is-named-after.js';
7
+ import { moduleShapeOf } from '../support/exports/module-shape-of.js';
8
+ import { globMatcher } from '../support/glob-matcher.js';
9
+ import { kebabCase } from '../support/kebab-case.js';
10
+ const SOURCE = /\.(?:ts|mts|cts)$/;
11
+ const TEST = /\.(?:spec|test)\.[cm]?ts$/;
12
+ export const cleanOneExportPerFile = defineRule({
13
+ id: 'clean/one-export-per-file',
14
+ type: 'suggestion',
15
+ recommended: 'error',
16
+ description: 'A source file exports one class, interface or function, with the types of its own signature, and is named after it; an entry file only re-exports.',
17
+ messages: {
18
+ several: 'This file exports {{count}} classes, interfaces or functions ({{names}}) that are not one thing. Keep one per file, named after it in kebab-case, with the types of its own signature; move each other one to its own file. Exports that really are one thing (a closed family) are declared in `onePerFile.allow` of ddd-ts-kit.config.json with the reason.',
19
+ fileName: 'This file exports {{exported}} but is named {{file}}. Name it {{expected}}: a file is named after its export in kebab-case (in a role file `<name>.<role>.ts`, after the name before the role).',
20
+ entry: 'An entry file only re-exports: this statement declares or exports something of its own. Move it to a file named after what it declares and write `export { .. } from` here.',
21
+ },
22
+ schema: [
23
+ {
24
+ type: 'object',
25
+ additionalProperties: false,
26
+ properties: {
27
+ allow: {
28
+ type: 'array',
29
+ items: {
30
+ type: 'object',
31
+ additionalProperties: false,
32
+ required: ['file', 'reason'],
33
+ properties: { file: { type: 'string' }, reason: { type: 'string' } },
34
+ },
35
+ },
36
+ entries: { type: 'array', items: { type: 'string' }, uniqueItems: true },
37
+ },
38
+ },
39
+ ],
40
+ defaultOptions: [{}],
41
+ create({ file, sourceCode, options: [options], report }) {
42
+ if (!isJudged(file)) {
43
+ return {};
44
+ }
45
+ const isEntry = isEntryFile(file, options);
46
+ const allowed = isAllowed(file, options);
47
+ const judgeEntry = (program) => {
48
+ for (const statement of program.body.filter((candidate) => !isReExport(candidate))) {
49
+ report({ node: statement, messageId: 'entry' });
50
+ }
51
+ };
52
+ const judgeSource = (program) => {
53
+ const shape = moduleShapeOf(program);
54
+ const explanation = explainExports(shape, sourceCode);
55
+ const finding = explanation !== undefined || allowed ? misnamed(file, explanation?.mains ?? shape.counted) : undefined;
56
+ if (explanation === undefined && !allowed) {
57
+ report({
58
+ node: nodeOf(shape, shape.counted[1]),
59
+ messageId: 'several',
60
+ data: { count: shape.counted.length, names: shape.counted.join(', ') },
61
+ });
62
+ }
63
+ if (finding !== undefined) {
64
+ report({ node: nodeOf(shape, finding.main), messageId: 'fileName', data: finding.data });
65
+ }
66
+ };
67
+ return { Program: isEntry ? judgeEntry : judgeSource };
68
+ },
69
+ });
70
+ function isEntryFile(file, options) {
71
+ return (isIndex(file) ||
72
+ globMatcher([`${file.config.contextsDir}/*/*.declarations.ts`, ...(options.entries ?? [])])(file.path));
73
+ }
74
+ function isIndex(file) {
75
+ return /^index\.[cm]?ts$/.test(path.posix.basename(file.path));
76
+ }
77
+ function isAllowed(file, options) {
78
+ return globMatcher([...file.config.onePerFile.allow, ...(options.allow ?? []).flatMap(parseAllowedFile)].map((entry) => entry.file))(file.path);
79
+ }
80
+ /** The file carries the name of none of the exports it may be named after. A family that no export names is named freely. */
81
+ function misnamed(file, mains) {
82
+ const base = path.posix.basename(file.path);
83
+ const stem = base.replace(SOURCE, '');
84
+ const [main] = mains === 'free' ? [] : mains;
85
+ if (mains === 'free' || main === undefined || main === 'default' || mains.some((name) => isNamedAfter(stem, name))) {
86
+ return undefined;
87
+ }
88
+ return { main, data: { exported: mains.join(' or '), file: base, expected: `${expectedStem(stem, main)}.ts` } };
89
+ }
90
+ /** A source under the source root; in a workspace, under the directory of that name of a package. Never a test, never a declaration file. */
91
+ function isJudged(file) {
92
+ const segments = file.path.split('/');
93
+ const sourceDirectory = file.config.sourceRoot.split('/').at(-1) ?? 'src';
94
+ if (!SOURCE.test(file.path) ||
95
+ /\.d\.[cm]?ts$/.test(file.path) ||
96
+ file.isTest ||
97
+ TEST.test(file.path) ||
98
+ segments.includes('test')) {
99
+ return false;
100
+ }
101
+ return file.path.startsWith(`${file.config.sourceRoot}/`) || segments.slice(0, -1).includes(sourceDirectory);
102
+ }
103
+ /** `export .. from`, `export * from`, and what declares nothing: an import for its effect, the empty `export {}` of a module without export yet. */
104
+ function isReExport(statement) {
105
+ if (statement.type === AST_NODE_TYPES.ImportDeclaration) {
106
+ return statement.specifiers.length === 0;
107
+ }
108
+ if (statement.type !== AST_NODE_TYPES.ExportNamedDeclaration) {
109
+ return statement.type === AST_NODE_TYPES.ExportAllDeclaration;
110
+ }
111
+ return statement.source !== null || (statement.declaration === null && statement.specifiers.length === 0);
112
+ }
113
+ function nodeOf(shape, name) {
114
+ const declared = shape.exports.find((declaration) => declaration.name === name)?.node ?? shape.program;
115
+ return 'id' in declared && declared.id !== null ? declared.id : declared;
116
+ }
117
+ /** The name to give the file: the role suffix of a role file is kept. */
118
+ function expectedStem(stem, main) {
119
+ const [, ...roles] = stem.split('.');
120
+ const role = roles.at(-1);
121
+ const name = kebabCase(main);
122
+ return role !== undefined && !name.endsWith(`-${role}`) ? `${name}.${role}` : name;
123
+ }
124
+ //# sourceMappingURL=clean-one-export-per-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-one-export-per-file.js","sourceRoot":"","sources":["../../src/rules/clean-one-export-per-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ClassMessageId } from '../support/stepdown/misplaced-members.js';
2
+ export declare const cleanStepdown: import("@typescript-eslint/utils/ts-eslint").RuleModule<"functionAboveCaller" | ClassMessageId, [], import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
+ //# sourceMappingURL=clean-stepdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-stepdown.d.ts","sourceRoot":"","sources":["../../src/rules/clean-stepdown.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAGjG,eAAO,MAAM,aAAa,gMAiCxB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { defineRule } from '../support/rule/define-rule.js';
2
+ import { MemberUses } from '../support/stepdown/member-uses.js';
3
+ import { misplacedMembers } from '../support/stepdown/misplaced-members.js';
4
+ import { misplacedFunctions } from '../support/stepdown/misplaced-functions.js';
5
+ export const cleanStepdown = defineRule({
6
+ id: 'clean/stepdown',
7
+ type: 'suggestion',
8
+ recommended: 'error',
9
+ description: 'A file reads top to bottom: static factories, public members, then private ones, and a function above the functions it calls.',
10
+ messages: {
11
+ nonPublicBeforePublic: 'The {{visibility}} member {{name}} of {{className}} is declared before the public member {{publicName}}. Move {{name}} below the public members, after its first caller: a reader meets what the class does before how.',
12
+ staticAfterInstance: 'The static method {{name}} of {{className}} is declared after the instance method {{instanceName}}. Move the static factories to the top of the class, above the instance methods.',
13
+ memberAboveCaller: 'The private member {{name}} of {{className}} is declared above its first caller (line {{line}}). Move {{name}} just below the member that first calls it.',
14
+ functionAboveCaller: 'The function {{name}} is declared above its first caller (line {{line}}). Move {{name}} below the function that first calls it, so that the file reads from intention to detail.',
15
+ },
16
+ create({ sourceCode, report }) {
17
+ const uses = new MemberUses();
18
+ return {
19
+ MemberExpression: (node) => uses.record(node),
20
+ 'ClassBody:exit'(node) {
21
+ for (const finding of misplacedMembers(node, uses.of(node))) {
22
+ report(finding);
23
+ }
24
+ },
25
+ 'Program:exit'(node) {
26
+ for (const finding of misplacedFunctions(node, sourceCode)) {
27
+ report({ ...finding, messageId: 'functionAboveCaller' });
28
+ }
29
+ },
30
+ };
31
+ },
32
+ });
33
+ //# sourceMappingURL=clean-stepdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-stepdown.js","sourceRoot":"","sources":["../../src/rules/clean-stepdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAuB,MAAM,0CAA0C,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAEhF,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAyC;IAC9E,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,OAAO;IACpB,WAAW,EACT,+HAA+H;IACjI,QAAQ,EAAE;QACR,qBAAqB,EACnB,yNAAyN;QAC3N,mBAAmB,EACjB,oLAAoL;QACtL,iBAAiB,EACf,2JAA2J;QAC7J,mBAAmB,EACjB,kLAAkL;KACrL;IACD,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;QAC3B,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;QAE9B,OAAO;YACL,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAC7C,gBAAgB,CAAC,IAAI;gBACnB,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC5D,MAAM,CAAC,OAAO,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YACD,cAAc,CAAC,IAAI;gBACjB,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;oBAC3D,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const contextPublishedLanguageOnly: import("@typescript-eslint/utils/ts-eslint").RuleModule<"internals", [], import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
+ export declare const contextDeclaredRelationship: import("@typescript-eslint/utils/ts-eslint").RuleModule<"undeclared", [], import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
+ export declare const contextPublishedLanguageIsAContract: import("@typescript-eslint/utils/ts-eslint").RuleModule<"leak", [], import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
4
+ //# sourceMappingURL=context-boundaries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-boundaries.d.ts","sourceRoot":"","sources":["../../src/rules/context-boundaries.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,4BAA4B,qKAkCvC,CAAC;AAEH,eAAO,MAAM,2BAA2B,sKAiCtC,CAAC;AAEH,eAAO,MAAM,mCAAmC,gKAgC9C,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { defineRule } from '../support/rule/define-rule.js';
2
+ import { describeTarget } from '../support/imports/describe-target.js';
3
+ import { importListener } from '../support/imports/import-listener.js';
4
+ import { inContext } from '../support/imports/in-context.js';
5
+ import { inLayer } from '../support/imports/in-layer.js';
6
+ export const contextPublishedLanguageOnly = defineRule({
7
+ id: 'context/published-language-only',
8
+ type: 'problem',
9
+ recommended: 'error',
10
+ description: "A file imports from another context only through that context's published-language/.",
11
+ messages: {
12
+ internals: '"{{here}}" imports the internals of "{{there}}" ({{path}}). Import from {{contextsDir}}/{{there}}/published-language only; if the type is missing there, publish it with `ddd-ts-kit generate integration-event {{there}} <Aggregate> <Fact>` or react to an integration event.',
13
+ },
14
+ create({ file, report }) {
15
+ const here = inContext(file);
16
+ if (here === undefined) {
17
+ return {};
18
+ }
19
+ return importListener(file, ({ node, target }) => {
20
+ if (target.kind !== 'file' || target.location.area !== 'context') {
21
+ return;
22
+ }
23
+ const there = target.location;
24
+ if (there.context === here.context || there.layer === 'published-language') {
25
+ return;
26
+ }
27
+ report({
28
+ node,
29
+ messageId: 'internals',
30
+ data: { here: here.context, there: there.context, path: target.path, contextsDir: file.config.contextsDir },
31
+ });
32
+ });
33
+ },
34
+ });
35
+ export const contextDeclaredRelationship = defineRule({
36
+ id: 'context/declared-relationship',
37
+ type: 'problem',
38
+ recommended: 'error',
39
+ description: 'Importing the published language of another context requires the relationship to be declared in the config.',
40
+ messages: {
41
+ undeclared: '"{{here}}" depends on "{{there}}" but the relationship is not declared. Add { "context": "{{there}}", "relationship": "published-language" } to contexts.{{here}}.upstreams in ddd-ts-kit.config.json, after checking that the dependency direction is intended.',
42
+ },
43
+ create({ file, report }) {
44
+ const here = inContext(file);
45
+ if (here === undefined) {
46
+ return {};
47
+ }
48
+ const upstreams = file.config.contexts[here.context]?.upstreams.map((upstream) => upstream.context) ?? [];
49
+ return importListener(file, ({ node, target }) => {
50
+ if (target.kind !== 'file' || target.location.area !== 'context') {
51
+ return;
52
+ }
53
+ const there = target.location;
54
+ if (there.context === here.context || there.layer !== 'published-language' || upstreams.includes(there.context)) {
55
+ return;
56
+ }
57
+ report({ node, messageId: 'undeclared', data: { here: here.context, there: there.context } });
58
+ });
59
+ },
60
+ });
61
+ export const contextPublishedLanguageIsAContract = defineRule({
62
+ id: 'context/published-language-is-a-contract',
63
+ type: 'problem',
64
+ recommended: 'error',
65
+ description: 'published-language/ imports only the kernel, the event declaration helper with the schema library of the project, and other published languages.',
66
+ messages: {
67
+ leak: 'The published language imports {{target}}. Declare the contract with plain serializable types written in this folder: copy the few fields other contexts need instead of exposing an internal model.',
68
+ },
69
+ create({ file, report }) {
70
+ if (inLayer(file, 'published-language') === undefined) {
71
+ return {};
72
+ }
73
+ const allowed = file.config.publishedLanguageAllowedPackages;
74
+ return importListener(file, ({ node, target }) => {
75
+ if (target.kind === 'package' && allowed.includes(target.name)) {
76
+ return;
77
+ }
78
+ if (target.kind === 'file' &&
79
+ target.location.area === 'context' &&
80
+ target.location.layer === 'published-language') {
81
+ return;
82
+ }
83
+ report({ node, messageId: 'leak', data: { target: describeTarget(target) } });
84
+ });
85
+ },
86
+ });
87
+ //# sourceMappingURL=context-boundaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-boundaries.js","sourceRoot":"","sources":["../../src/rules/context-boundaries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+ type MessageId = 'foreignSchema' | 'foreignTable' | 'mutableBinding' | 'mutableState' | 'foreignWiring' | 'foreignPort';
3
+ export declare const contextExtractable: TSESLint.RuleModule<MessageId, [], import("../index.js").RuleDocs, TSESLint.RuleListener>;
4
+ export {};
5
+ //# sourceMappingURL=context-extractable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-extractable.d.ts","sourceRoot":"","sources":["../../src/rules/context-extractable.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AAa7F,KAAK,SAAS,GAAG,eAAe,GAAG,cAAc,GAAG,gBAAgB,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;AAiDxH,eAAO,MAAM,kBAAkB,2FA8B7B,CAAC"}