ddd-ts-kit 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/README.md +81 -21
  2. package/dist/alias/compiler-resolution-of.d.ts +10 -0
  3. package/dist/alias/compiler-resolution-of.d.ts.map +1 -0
  4. package/dist/alias/compiler-resolution-of.js +13 -0
  5. package/dist/alias/compiler-resolution-of.js.map +1 -0
  6. package/dist/alias/compiler-resolution.d.ts +8 -0
  7. package/dist/alias/compiler-resolution.d.ts.map +1 -0
  8. package/dist/alias/compiler-resolution.js +2 -0
  9. package/dist/alias/compiler-resolution.js.map +1 -0
  10. package/dist/alias/index.d.ts +3 -1
  11. package/dist/alias/index.d.ts.map +1 -1
  12. package/dist/alias/index.js +3 -1
  13. package/dist/alias/index.js.map +1 -1
  14. package/dist/alias/module-name-mapper.d.ts +4 -3
  15. package/dist/alias/module-name-mapper.d.ts.map +1 -1
  16. package/dist/alias/module-name-mapper.js +6 -4
  17. package/dist/alias/module-name-mapper.js.map +1 -1
  18. package/dist/alias/specifier-of.d.ts +7 -0
  19. package/dist/alias/specifier-of.d.ts.map +1 -0
  20. package/dist/alias/specifier-of.js +17 -0
  21. package/dist/alias/specifier-of.js.map +1 -0
  22. package/dist/alias/specifier-suffix.d.ts +6 -0
  23. package/dist/alias/specifier-suffix.d.ts.map +1 -0
  24. package/dist/alias/specifier-suffix.js +8 -0
  25. package/dist/alias/specifier-suffix.js.map +1 -0
  26. package/dist/alias/to-alias.d.ts +3 -2
  27. package/dist/alias/to-alias.d.ts.map +1 -1
  28. package/dist/alias/to-alias.js +4 -3
  29. package/dist/alias/to-alias.js.map +1 -1
  30. package/dist/build/emitted-place.d.ts +2 -0
  31. package/dist/build/emitted-place.d.ts.map +1 -1
  32. package/dist/build/emitted-specifier.d.ts +3 -2
  33. package/dist/build/emitted-specifier.d.ts.map +1 -1
  34. package/dist/build/emitted-specifier.js +6 -12
  35. package/dist/build/emitted-specifier.js.map +1 -1
  36. package/dist/build/emitted-target.d.ts +9 -0
  37. package/dist/build/emitted-target.d.ts.map +1 -0
  38. package/dist/build/emitted-target.js +18 -0
  39. package/dist/build/emitted-target.js.map +1 -0
  40. package/dist/build/rewrite-aliases.d.ts +5 -3
  41. package/dist/build/rewrite-aliases.d.ts.map +1 -1
  42. package/dist/build/rewrite-aliases.js +12 -7
  43. package/dist/build/rewrite-aliases.js.map +1 -1
  44. package/dist/build/rewrite-specifiers.d.ts +3 -1
  45. package/dist/build/rewrite-specifiers.d.ts.map +1 -1
  46. package/dist/build/rewrite-specifiers.js +2 -2
  47. package/dist/build/rewrite-specifiers.js.map +1 -1
  48. package/dist/build/unresolved-problem.d.ts +4 -0
  49. package/dist/build/unresolved-problem.d.ts.map +1 -0
  50. package/dist/build/unresolved-problem.js +16 -0
  51. package/dist/build/unresolved-problem.js.map +1 -0
  52. package/dist/check/alias/compiler-resolution.d.ts +10 -0
  53. package/dist/check/alias/compiler-resolution.d.ts.map +1 -0
  54. package/dist/check/alias/compiler-resolution.js +47 -0
  55. package/dist/check/alias/compiler-resolution.js.map +1 -0
  56. package/dist/check/alias/test-runners.js +4 -4
  57. package/dist/check/alias/test-runners.js.map +1 -1
  58. package/dist/check/canonical/roles.d.ts.map +1 -1
  59. package/dist/check/canonical/roles.js +6 -0
  60. package/dist/check/canonical/roles.js.map +1 -1
  61. package/dist/check/catalogue/architecture-rules.d.ts.map +1 -1
  62. package/dist/check/catalogue/architecture-rules.js +4 -0
  63. package/dist/check/catalogue/architecture-rules.js.map +1 -1
  64. package/dist/check/configuration/config-inspection.d.ts +2 -0
  65. package/dist/check/configuration/config-inspection.d.ts.map +1 -1
  66. package/dist/check/configuration/config-inspection.js +11 -1
  67. package/dist/check/configuration/config-inspection.js.map +1 -1
  68. package/dist/check/declarations/classes-of.js +1 -1
  69. package/dist/check/declarations/classes-of.js.map +1 -1
  70. package/dist/check/explain/context-docs.js +7 -7
  71. package/dist/check/explain/context-docs.js.map +1 -1
  72. package/dist/check/explain/imports-docs.d.ts.map +1 -1
  73. package/dist/check/explain/imports-docs.js +24 -9
  74. package/dist/check/explain/imports-docs.js.map +1 -1
  75. package/dist/check/explain/layer-docs.js +7 -7
  76. package/dist/check/explain/layer-docs.js.map +1 -1
  77. package/dist/check/explain/ports-docs.d.ts.map +1 -1
  78. package/dist/check/explain/ports-docs.js +15 -7
  79. package/dist/check/explain/ports-docs.js.map +1 -1
  80. package/dist/check/explain/scheduling-docs.js +1 -1
  81. package/dist/check/explain/wiring-docs.d.ts.map +1 -1
  82. package/dist/check/explain/wiring-docs.js +35 -10
  83. package/dist/check/explain/wiring-docs.js.map +1 -1
  84. package/dist/check/fixtures/alias-declared-fixtures.d.ts.map +1 -1
  85. package/dist/check/fixtures/alias-declared-fixtures.js +32 -1
  86. package/dist/check/fixtures/alias-declared-fixtures.js.map +1 -1
  87. package/dist/check/fixtures/config-fixtures.d.ts.map +1 -1
  88. package/dist/check/fixtures/config-fixtures.js +6 -0
  89. package/dist/check/fixtures/config-fixtures.js.map +1 -1
  90. package/dist/check/fixtures/constructor-injection-fixtures.d.ts +3 -0
  91. package/dist/check/fixtures/constructor-injection-fixtures.d.ts.map +1 -0
  92. package/dist/check/fixtures/constructor-injection-fixtures.js +111 -0
  93. package/dist/check/fixtures/constructor-injection-fixtures.js.map +1 -0
  94. package/dist/check/fixtures/declared-project.d.ts.map +1 -1
  95. package/dist/check/fixtures/declared-project.js +4 -1
  96. package/dist/check/fixtures/declared-project.js.map +1 -1
  97. package/dist/check/fixtures/extension-fixtures.d.ts +3 -0
  98. package/dist/check/fixtures/extension-fixtures.d.ts.map +1 -0
  99. package/dist/check/fixtures/extension-fixtures.js +77 -0
  100. package/dist/check/fixtures/extension-fixtures.js.map +1 -0
  101. package/dist/check/fixtures/fixtures.d.ts.map +1 -1
  102. package/dist/check/fixtures/fixtures.js +4 -0
  103. package/dist/check/fixtures/fixtures.js.map +1 -1
  104. package/dist/check/fixtures/signature-project.d.ts +11 -0
  105. package/dist/check/fixtures/signature-project.d.ts.map +1 -0
  106. package/dist/check/fixtures/signature-project.js +21 -0
  107. package/dist/check/fixtures/signature-project.js.map +1 -0
  108. package/dist/check/fixtures/signature.d.ts +13 -0
  109. package/dist/check/fixtures/signature.d.ts.map +1 -0
  110. package/dist/check/fixtures/signature.js +24 -0
  111. package/dist/check/fixtures/signature.js.map +1 -0
  112. package/dist/check/project/beside-the-sources.d.ts +5 -0
  113. package/dist/check/project/beside-the-sources.d.ts.map +1 -0
  114. package/dist/check/project/beside-the-sources.js +21 -0
  115. package/dist/check/project/beside-the-sources.js.map +1 -0
  116. package/dist/check/project/resolve-import.d.ts.map +1 -1
  117. package/dist/check/project/resolve-import.js +4 -1
  118. package/dist/check/project/resolve-import.js.map +1 -1
  119. package/dist/check/rules/clean-one-export-per-file.d.ts.map +1 -1
  120. package/dist/check/rules/clean-one-export-per-file.js +14 -8
  121. package/dist/check/rules/clean-one-export-per-file.js.map +1 -1
  122. package/dist/check/rules/config-valid.d.ts.map +1 -1
  123. package/dist/check/rules/config-valid.js +2 -1
  124. package/dist/check/rules/config-valid.js.map +1 -1
  125. package/dist/check/rules/declarations-barrel-current.d.ts.map +1 -1
  126. package/dist/check/rules/declarations-barrel-current.js +34 -32
  127. package/dist/check/rules/declarations-barrel-current.js.map +1 -1
  128. package/dist/check/rules/declarations-constructor-injection.d.ts +3 -0
  129. package/dist/check/rules/declarations-constructor-injection.d.ts.map +1 -0
  130. package/dist/check/rules/declarations-constructor-injection.js +58 -0
  131. package/dist/check/rules/declarations-constructor-injection.js.map +1 -0
  132. package/dist/check/rules/imports-alias-declared.d.ts.map +1 -1
  133. package/dist/check/rules/imports-alias-declared.js +3 -1
  134. package/dist/check/rules/imports-alias-declared.js.map +1 -1
  135. package/dist/check/rules/imports-alias-only.d.ts.map +1 -1
  136. package/dist/check/rules/imports-alias-only.js +16 -29
  137. package/dist/check/rules/imports-alias-only.js.map +1 -1
  138. package/dist/check/rules/imports-extension.d.ts +3 -0
  139. package/dist/check/rules/imports-extension.d.ts.map +1 -0
  140. package/dist/check/rules/imports-extension.js +65 -0
  141. package/dist/check/rules/imports-extension.js.map +1 -0
  142. package/dist/check/rules/ports-no-concrete-dependency.d.ts.map +1 -1
  143. package/dist/check/rules/ports-no-concrete-dependency.js +43 -15
  144. package/dist/check/rules/ports-no-concrete-dependency.js.map +1 -1
  145. package/dist/check/rules/tree-closed.js +6 -4
  146. package/dist/check/rules/tree-closed.js.map +1 -1
  147. package/dist/commands/build-aliases.d.ts.map +1 -1
  148. package/dist/commands/build-aliases.js +5 -3
  149. package/dist/commands/build-aliases.js.map +1 -1
  150. package/dist/commands/docs.d.ts.map +1 -1
  151. package/dist/commands/docs.js +17 -2
  152. package/dist/commands/docs.js.map +1 -1
  153. package/dist/commands/init.d.ts.map +1 -1
  154. package/dist/commands/init.js +5 -4
  155. package/dist/commands/init.js.map +1 -1
  156. package/dist/commit/is-derived.d.ts.map +1 -1
  157. package/dist/commit/is-derived.js +5 -2
  158. package/dist/commit/is-derived.js.map +1 -1
  159. package/dist/config/config.d.ts +2 -0
  160. package/dist/config/config.d.ts.map +1 -1
  161. package/dist/config/default-import-extension.d.ts +3 -0
  162. package/dist/config/default-import-extension.d.ts.map +1 -0
  163. package/dist/config/default-import-extension.js +3 -0
  164. package/dist/config/default-import-extension.js.map +1 -0
  165. package/dist/config/import-extensions.d.ts +3 -0
  166. package/dist/config/import-extensions.d.ts.map +1 -0
  167. package/dist/config/import-extensions.js +3 -0
  168. package/dist/config/import-extensions.js.map +1 -0
  169. package/dist/config/index.d.ts +4 -1
  170. package/dist/config/index.d.ts.map +1 -1
  171. package/dist/config/index.js +4 -1
  172. package/dist/config/index.js.map +1 -1
  173. package/dist/config/parse-config.d.ts.map +1 -1
  174. package/dist/config/parse-config.js +2 -0
  175. package/dist/config/parse-config.js.map +1 -1
  176. package/dist/config/parse-stack.d.ts.map +1 -1
  177. package/dist/config/parse-stack.js +2 -1
  178. package/dist/config/parse-stack.js.map +1 -1
  179. package/dist/config/restack-config-text.d.ts +11 -0
  180. package/dist/config/restack-config-text.d.ts.map +1 -0
  181. package/dist/config/restack-config-text.js +31 -0
  182. package/dist/config/restack-config-text.js.map +1 -0
  183. package/dist/config/serialize-config.d.ts.map +1 -1
  184. package/dist/config/serialize-config.js +3 -6
  185. package/dist/config/serialize-config.js.map +1 -1
  186. package/dist/config/stack.d.ts +8 -0
  187. package/dist/config/stack.d.ts.map +1 -1
  188. package/dist/config/stack.js +1 -0
  189. package/dist/config/stack.js.map +1 -1
  190. package/dist/config/unwritten-import-extension.d.ts +3 -0
  191. package/dist/config/unwritten-import-extension.d.ts.map +1 -0
  192. package/dist/config/unwritten-import-extension.js +3 -0
  193. package/dist/config/unwritten-import-extension.js.map +1 -0
  194. package/dist/config/written-stack.d.ts +8 -0
  195. package/dist/config/written-stack.d.ts.map +1 -0
  196. package/dist/config/written-stack.js +10 -0
  197. package/dist/config/written-stack.js.map +1 -0
  198. package/dist/declared/declared-role.d.ts.map +1 -1
  199. package/dist/declared/declared-role.js +1 -0
  200. package/dist/declared/declared-role.js.map +1 -1
  201. package/dist/declared/dependencies-file.d.ts +7 -0
  202. package/dist/declared/dependencies-file.d.ts.map +1 -0
  203. package/dist/declared/dependencies-file.js +9 -0
  204. package/dist/declared/dependencies-file.js.map +1 -0
  205. package/dist/declared/generated-drift.d.ts +7 -0
  206. package/dist/declared/generated-drift.d.ts.map +1 -0
  207. package/dist/declared/generated-drift.js +47 -0
  208. package/dist/declared/generated-drift.js.map +1 -0
  209. package/dist/declared/index.d.ts +8 -1
  210. package/dist/declared/index.d.ts.map +1 -1
  211. package/dist/declared/index.js +6 -1
  212. package/dist/declared/index.js.map +1 -1
  213. package/dist/declared/injection/class-injection.d.ts +19 -0
  214. package/dist/declared/injection/class-injection.d.ts.map +1 -0
  215. package/dist/declared/injection/class-injection.js +2 -0
  216. package/dist/declared/injection/class-injection.js.map +1 -0
  217. package/dist/declared/injection/constructor-of.d.ts +16 -0
  218. package/dist/declared/injection/constructor-of.d.ts.map +1 -0
  219. package/dist/declared/injection/constructor-of.js +33 -0
  220. package/dist/declared/injection/constructor-of.js.map +1 -0
  221. package/dist/declared/injection/context-injections.d.ts +8 -0
  222. package/dist/declared/injection/context-injections.d.ts.map +1 -0
  223. package/dist/declared/injection/context-injections.js +14 -0
  224. package/dist/declared/injection/context-injections.js.map +1 -0
  225. package/dist/declared/injection/declared-kind-of.d.ts +8 -0
  226. package/dist/declared/injection/declared-kind-of.d.ts.map +1 -0
  227. package/dist/declared/injection/declared-kind-of.js +12 -0
  228. package/dist/declared/injection/declared-kind-of.js.map +1 -0
  229. package/dist/declared/injection/exported-name-of.d.ts +4 -0
  230. package/dist/declared/injection/exported-name-of.d.ts.map +1 -0
  231. package/dist/declared/injection/exported-name-of.js +17 -0
  232. package/dist/declared/injection/exported-name-of.js.map +1 -0
  233. package/dist/declared/injection/language-types.d.ts +3 -0
  234. package/dist/declared/injection/language-types.d.ts.map +1 -0
  235. package/dist/declared/injection/language-types.js +32 -0
  236. package/dist/declared/injection/language-types.js.map +1 -0
  237. package/dist/declared/injection/local-names.d.ts +17 -0
  238. package/dist/declared/injection/local-names.d.ts.map +1 -0
  239. package/dist/declared/injection/local-names.js +41 -0
  240. package/dist/declared/injection/local-names.js.map +1 -0
  241. package/dist/declared/injection/parameter-shape.d.ts +11 -0
  242. package/dist/declared/injection/parameter-shape.d.ts.map +1 -0
  243. package/dist/declared/injection/parameter-shape.js +58 -0
  244. package/dist/declared/injection/parameter-shape.js.map +1 -0
  245. package/dist/declared/injection/raw-class-name.d.ts +7 -0
  246. package/dist/declared/injection/raw-class-name.d.ts.map +1 -0
  247. package/dist/declared/injection/raw-class-name.js +28 -0
  248. package/dist/declared/injection/raw-class-name.js.map +1 -0
  249. package/dist/declared/injection/read-constructor.d.ts +10 -0
  250. package/dist/declared/injection/read-constructor.d.ts.map +1 -0
  251. package/dist/declared/injection/read-constructor.js +2 -0
  252. package/dist/declared/injection/read-constructor.js.map +1 -0
  253. package/dist/declared/injection/read-injections.d.ts +6 -0
  254. package/dist/declared/injection/read-injections.d.ts.map +1 -0
  255. package/dist/declared/injection/read-injections.js +75 -0
  256. package/dist/declared/injection/read-injections.js.map +1 -0
  257. package/dist/declared/injection/render-injections.d.ts +11 -0
  258. package/dist/declared/injection/render-injections.d.ts.map +1 -0
  259. package/dist/declared/injection/render-injections.js +51 -0
  260. package/dist/declared/injection/render-injections.js.map +1 -0
  261. package/dist/declared/injection/rendered-injections.d.ts +8 -0
  262. package/dist/declared/injection/rendered-injections.d.ts.map +1 -0
  263. package/dist/declared/injection/rendered-injections.js +2 -0
  264. package/dist/declared/injection/rendered-injections.js.map +1 -0
  265. package/dist/declared/injection/resolve-token.d.ts +18 -0
  266. package/dist/declared/injection/resolve-token.d.ts.map +1 -0
  267. package/dist/declared/injection/resolve-token.js +46 -0
  268. package/dist/declared/injection/resolve-token.js.map +1 -0
  269. package/dist/declared/injection/resolved-token.d.ts +10 -0
  270. package/dist/declared/injection/resolved-token.d.ts.map +1 -0
  271. package/dist/declared/injection/resolved-token.js +2 -0
  272. package/dist/declared/injection/resolved-token.js.map +1 -0
  273. package/dist/declared/injection/sources.d.ts +4 -0
  274. package/dist/declared/injection/sources.d.ts.map +1 -0
  275. package/dist/declared/injection/sources.js +2 -0
  276. package/dist/declared/injection/sources.js.map +1 -0
  277. package/dist/declared/injection/token-reference.d.ts +14 -0
  278. package/dist/declared/injection/token-reference.d.ts.map +1 -0
  279. package/dist/declared/injection/token-reference.js +2 -0
  280. package/dist/declared/injection/token-reference.js.map +1 -0
  281. package/dist/declared/render-barrel.d.ts +8 -5
  282. package/dist/declared/render-barrel.d.ts.map +1 -1
  283. package/dist/declared/render-barrel.js +13 -6
  284. package/dist/declared/render-barrel.js.map +1 -1
  285. package/dist/declared/render-dependencies-file.d.ts +8 -0
  286. package/dist/declared/render-dependencies-file.d.ts.map +1 -0
  287. package/dist/declared/render-dependencies-file.js +12 -0
  288. package/dist/declared/render-dependencies-file.js.map +1 -0
  289. package/dist/depcruise/hygiene-rules.js +2 -1
  290. package/dist/depcruise/hygiene-rules.js.map +1 -1
  291. package/dist/describe/context-description.d.ts +10 -0
  292. package/dist/describe/context-description.d.ts.map +1 -1
  293. package/dist/describe/describe-context.d.ts.map +1 -1
  294. package/dist/describe/describe-context.js +2 -0
  295. package/dist/describe/describe-context.js.map +1 -1
  296. package/dist/describe/format-description.d.ts.map +1 -1
  297. package/dist/describe/format-description.js +4 -0
  298. package/dist/describe/format-description.js.map +1 -1
  299. package/dist/describe/read-projections.d.ts +5 -0
  300. package/dist/describe/read-projections.d.ts.map +1 -0
  301. package/dist/describe/read-projections.js +19 -0
  302. package/dist/describe/read-projections.js.map +1 -0
  303. package/dist/describe/reference-lines.js +9 -0
  304. package/dist/describe/reference-lines.js.map +1 -1
  305. package/dist/dev/refresh-declarations.d.ts +9 -0
  306. package/dist/dev/refresh-declarations.d.ts.map +1 -0
  307. package/dist/dev/refresh-declarations.js +28 -0
  308. package/dist/dev/refresh-declarations.js.map +1 -0
  309. package/dist/generate/access-vars.js +3 -3
  310. package/dist/generate/access-vars.js.map +1 -1
  311. package/dist/generate/kinds/context-plan.d.ts +10 -0
  312. package/dist/generate/kinds/context-plan.d.ts.map +1 -0
  313. package/dist/generate/kinds/context-plan.js +2 -0
  314. package/dist/generate/kinds/context-plan.js.map +1 -0
  315. package/dist/generate/kinds/declare-context-entries.d.ts +3 -1
  316. package/dist/generate/kinds/declare-context-entries.d.ts.map +1 -1
  317. package/dist/generate/kinds/declare-context-entries.js +4 -2
  318. package/dist/generate/kinds/declare-context-entries.js.map +1 -1
  319. package/dist/generate/kinds/extraction/service-selection.js +8 -11
  320. package/dist/generate/kinds/extraction/service-selection.js.map +1 -1
  321. package/dist/generate/kinds/job/job-vars.d.ts.map +1 -1
  322. package/dist/generate/kinds/job/job-vars.js +5 -3
  323. package/dist/generate/kinds/job/job-vars.js.map +1 -1
  324. package/dist/generate/kinds/plan-vars.d.ts +5 -0
  325. package/dist/generate/kinds/plan-vars.d.ts.map +1 -0
  326. package/dist/generate/kinds/plan-vars.js +24 -0
  327. package/dist/generate/kinds/plan-vars.js.map +1 -0
  328. package/dist/generate/kinds/projection-kind.d.ts +3 -0
  329. package/dist/generate/kinds/projection-kind.d.ts.map +1 -0
  330. package/dist/generate/kinds/projection-kind.js +72 -0
  331. package/dist/generate/kinds/projection-kind.js.map +1 -0
  332. package/dist/generate/kinds/publish-in-index.js +2 -2
  333. package/dist/generate/kinds/publish-in-index.js.map +1 -1
  334. package/dist/generate/kinds/route/route-vars.d.ts.map +1 -1
  335. package/dist/generate/kinds/route/route-vars.js +7 -6
  336. package/dist/generate/kinds/route/route-vars.js.map +1 -1
  337. package/dist/generate/kinds/wire-context.d.ts +10 -0
  338. package/dist/generate/kinds/wire-context.d.ts.map +1 -0
  339. package/dist/generate/kinds/wire-context.js +36 -0
  340. package/dist/generate/kinds/wire-context.js.map +1 -0
  341. package/dist/generate/kinds/write-context-files.d.ts +1 -8
  342. package/dist/generate/kinds/write-context-files.d.ts.map +1 -1
  343. package/dist/generate/kinds/write-context-files.js +3 -40
  344. package/dist/generate/kinds/write-context-files.js.map +1 -1
  345. package/dist/generate/kinds.d.ts.map +1 -1
  346. package/dist/generate/kinds.js +2 -0
  347. package/dist/generate/kinds.js.map +1 -1
  348. package/dist/generate/refresh-barrels.d.ts +4 -3
  349. package/dist/generate/refresh-barrels.d.ts.map +1 -1
  350. package/dist/generate/refresh-barrels.js +41 -16
  351. package/dist/generate/refresh-barrels.js.map +1 -1
  352. package/dist/generate/spec-vars.js +4 -4
  353. package/dist/generate/spec-vars.js.map +1 -1
  354. package/dist/generate/storage-vars.d.ts +2 -2
  355. package/dist/generate/storage-vars.d.ts.map +1 -1
  356. package/dist/generate/storage-vars.js +6 -10
  357. package/dist/generate/storage-vars.js.map +1 -1
  358. package/dist/generate/workspace-sources.d.ts +6 -0
  359. package/dist/generate/workspace-sources.d.ts.map +1 -0
  360. package/dist/generate/workspace-sources.js +13 -0
  361. package/dist/generate/workspace-sources.js.map +1 -0
  362. package/dist/init/manifest/scripts-for.js +6 -1
  363. package/dist/init/manifest/scripts-for.js.map +1 -1
  364. package/dist/init/manifest/versions.js +23 -23
  365. package/dist/init/run-init.d.ts.map +1 -1
  366. package/dist/init/run-init.js +32 -3
  367. package/dist/init/run-init.js.map +1 -1
  368. package/dist/init/stack/recorded-options.d.ts +11 -0
  369. package/dist/init/stack/recorded-options.d.ts.map +1 -0
  370. package/dist/init/stack/recorded-options.js +19 -0
  371. package/dist/init/stack/recorded-options.js.map +1 -0
  372. package/dist/init/stack/resolve-stack.d.ts +6 -1
  373. package/dist/init/stack/resolve-stack.d.ts.map +1 -1
  374. package/dist/init/stack/resolve-stack.js +46 -9
  375. package/dist/init/stack/resolve-stack.js.map +1 -1
  376. package/dist/init/stack/resolve-style.d.ts +3 -5
  377. package/dist/init/stack/resolve-style.d.ts.map +1 -1
  378. package/dist/init/stack/resolve-style.js +11 -3
  379. package/dist/init/stack/resolve-style.js.map +1 -1
  380. package/dist/init/stack/stack-options.d.ts +3 -0
  381. package/dist/init/stack/stack-options.d.ts.map +1 -1
  382. package/dist/init/write-agent-settings.js +4 -3
  383. package/dist/init/write-agent-settings.js.map +1 -1
  384. package/dist/init/write-type-script-configs.d.ts +2 -1
  385. package/dist/init/write-type-script-configs.d.ts.map +1 -1
  386. package/dist/init/write-type-script-configs.js +4 -4
  387. package/dist/init/write-type-script-configs.js.map +1 -1
  388. package/dist/refresh-declarations.d.ts +3 -0
  389. package/dist/refresh-declarations.d.ts.map +1 -0
  390. package/dist/refresh-declarations.js +4 -0
  391. package/dist/refresh-declarations.js.map +1 -0
  392. package/dist/run.d.ts.map +1 -1
  393. package/dist/run.js +2 -0
  394. package/dist/run.js.map +1 -1
  395. package/dist/stack/alias-vars.d.ts +2 -1
  396. package/dist/stack/alias-vars.d.ts.map +1 -1
  397. package/dist/stack/alias-vars.js +6 -3
  398. package/dist/stack/alias-vars.js.map +1 -1
  399. package/dist/version.d.ts +1 -1
  400. package/dist/version.js +1 -1
  401. package/package.json +4 -3
  402. package/templates/acl/translator.spec.ts.tpl +1 -1
  403. package/templates/adapter/adapter.declared.ts.tpl +3 -3
  404. package/templates/adapter/adapter.spec.ts.tpl +1 -1
  405. package/templates/adapter/adapter.ts.tpl +1 -1
  406. package/templates/adapter/wiring.tsyringe.tpl +3 -3
  407. package/templates/aggregate/aggregate.spec.ts.tpl +2 -2
  408. package/templates/architecture/extractable.declared.spec.ts.tpl +1 -1
  409. package/templates/architecture/extractable.manual.spec.ts.tpl +4 -4
  410. package/templates/architecture/extractable.tsyringe.spec.ts.tpl +1 -1
  411. package/templates/architecture/wiring.declared.tpl +1 -1
  412. package/templates/architecture/wiring.manual.tpl +1 -1
  413. package/templates/architecture/wiring.tsyringe.tpl +1 -1
  414. package/templates/builder/builder.ts.tpl +1 -1
  415. package/templates/command/handler.declared.ts.tpl +7 -7
  416. package/templates/command/handler.spec.buses.ts.tpl +4 -4
  417. package/templates/command/handler.spec.tsyringe.ts.tpl +5 -5
  418. package/templates/command/handler.ts.tpl +4 -4
  419. package/templates/command/wiring.manual.tpl +2 -2
  420. package/templates/command/wiring.tsyringe.tpl +3 -3
  421. package/templates/context/module.manual.ts.tpl +1 -1
  422. package/templates/context/permission-set.tpl +1 -1
  423. package/templates/context/permissions.spec.ts.tpl +1 -1
  424. package/templates/context/routes.spec.ts.tpl +1 -1
  425. package/templates/context/wiring.declared.tpl +2 -2
  426. package/templates/context/wiring.manual.tpl +1 -1
  427. package/templates/context/wiring.tsyringe.tpl +2 -2
  428. package/templates/domain-error/domain-error.spec.ts.tpl +1 -1
  429. package/templates/domain-event/domain-event.spec.ts.tpl +1 -1
  430. package/templates/domain-service/domain-service.spec.ts.tpl +1 -1
  431. package/templates/e2e/e2e.spec.ts.tpl +2 -2
  432. package/templates/entity/entity.spec.ts.tpl +1 -1
  433. package/templates/event-handler/event-handler.declared.ts.tpl +3 -3
  434. package/templates/event-handler/event-handler.spec.ts.tpl +2 -2
  435. package/templates/event-handler/event-handler.ts.tpl +1 -1
  436. package/templates/event-handler/wiring.manual.tpl +2 -2
  437. package/templates/event-handler/wiring.tsyringe.tpl +2 -2
  438. package/templates/gateway/adapter.declared.ts.tpl +3 -3
  439. package/templates/gateway/adapter.ts.tpl +2 -2
  440. package/templates/gateway/contract.spec.ts.tpl +3 -3
  441. package/templates/gateway/fake.ts.tpl +1 -1
  442. package/templates/gateway/platform-test.declared.tpl +1 -1
  443. package/templates/gateway/platform.declared.tpl +1 -1
  444. package/templates/gateway/wiring.tsyringe.tpl +3 -3
  445. package/templates/init/CLAUDE.md.tpl +5 -2
  446. package/templates/init/README.md.tpl +15 -10
  447. package/templates/init/e2e/create-credentials.jwt.ts.tpl +1 -1
  448. package/templates/init/e2e/create-credentials.keycloak.ts.tpl +1 -1
  449. package/templates/init/e2e/create-credentials.none.ts.tpl +2 -2
  450. package/templates/init/e2e/start-application.database.ts.tpl +16 -16
  451. package/templates/init/e2e/start-application.memory.ts.tpl +16 -16
  452. package/templates/init/e2e/test-environment.ts.tpl +1 -1
  453. package/templates/init/main.ts.tpl +11 -11
  454. package/templates/init/platform/audit/audit.module.manual.ts.tpl +5 -5
  455. package/templates/init/platform/audit/audit.module.tsyringe.ts.tpl +4 -4
  456. package/templates/init/platform/audit/create-audit.ts.tpl +5 -5
  457. package/templates/init/platform/audit/search-audit-entries.handler.ts.tpl +1 -1
  458. package/templates/init/platform/audit/search-audit-entries.route.ts.tpl +1 -1
  459. package/templates/init/platform/auth/authorization.tsyringe.ts.tpl +2 -2
  460. package/templates/init/platform/auth/create-authenticator.jwt.ts.tpl +1 -1
  461. package/templates/init/platform/auth/create-authenticator.keycloak.ts.tpl +1 -1
  462. package/templates/init/platform/auth/create-authenticator.none.ts.tpl +2 -2
  463. package/templates/init/platform/auth/create-authorizer.abac.ts.tpl +1 -1
  464. package/templates/init/platform/auth/create-authorizer.custom.ts.tpl +2 -2
  465. package/templates/init/platform/auth/create-authorizer.rbac.ts.tpl +1 -1
  466. package/templates/init/platform/auth/create-authorizer.rebac.ts.tpl +3 -3
  467. package/templates/init/platform/auth/create-tuple-store.contract.spec.ts.tpl +1 -1
  468. package/templates/init/platform/auth/custom-authorizer.contract.spec.ts.tpl +1 -1
  469. package/templates/init/platform/auth/http-boundary.ts.tpl +1 -1
  470. package/templates/init/platform/auth/permission-mapping.ts.tpl +1 -1
  471. package/templates/init/platform/auth/permissions.ts.tpl +1 -1
  472. package/templates/init/platform/auth/principal-of.none.ts.tpl +1 -1
  473. package/templates/init/platform/auth/relate-system-actors.ts.tpl +1 -1
  474. package/templates/init/platform/auth/relation-tuples.ts.tpl +2 -2
  475. package/templates/init/platform/auth/security-schemes.none.ts.tpl +1 -1
  476. package/templates/init/platform/buses/create-command-bus.ts.tpl +2 -2
  477. package/templates/init/platform/buses/create-query-bus.ts.tpl +1 -1
  478. package/templates/init/platform/compose-application.manual.ts.tpl +6 -6
  479. package/templates/init/platform/compose-application.tsyringe.ts.tpl +10 -10
  480. package/templates/init/platform/config/app-config.ts.tpl +2 -2
  481. package/templates/init/platform/config/load-config.ts.tpl +3 -3
  482. package/templates/init/platform/create-platform.manual.ts.tpl +16 -16
  483. package/templates/init/platform/database/create-client.prisma.ts.tpl +1 -1
  484. package/templates/init/platform/database/create-data-source.typeorm.ts.tpl +1 -1
  485. package/templates/init/platform/database/data-source.typeorm.ts.tpl +1 -1
  486. package/templates/init/platform/database/database.drizzle.ts.tpl +1 -1
  487. package/templates/init/platform/database/database.prisma.ts.tpl +2 -2
  488. package/templates/init/platform/database/inert-persistence.memory.ts.tpl +2 -2
  489. package/templates/init/platform/database/inert-persistence.pooled.ts.tpl +2 -2
  490. package/templates/init/platform/database/inert-persistence.prisma.ts.tpl +3 -3
  491. package/templates/init/platform/database/inert-persistence.typeorm.ts.tpl +3 -3
  492. package/templates/init/platform/database/open-persistence.contract.spec.ts.tpl +1 -1
  493. package/templates/init/platform/database/open-persistence.memory.ts.tpl +1 -1
  494. package/templates/init/platform/database/open-persistence.pooled.ts.tpl +3 -3
  495. package/templates/init/platform/database/open-persistence.prisma.ts.tpl +3 -3
  496. package/templates/init/platform/database/open-persistence.typeorm.ts.tpl +3 -3
  497. package/templates/init/platform/database/open-test-database.drizzle.ts.tpl +4 -4
  498. package/templates/init/platform/database/open-test-database.knex.ts.tpl +5 -5
  499. package/templates/init/platform/database/open-test-database.prisma.ts.tpl +4 -4
  500. package/templates/init/platform/database/open-test-database.typeorm.ts.tpl +3 -3
  501. package/templates/init/platform/database/persistence-over.drizzle.ts.tpl +2 -2
  502. package/templates/init/platform/database/persistence-over.knex.ts.tpl +2 -2
  503. package/templates/init/platform/database/persistence-over.prisma.ts.tpl +2 -2
  504. package/templates/init/platform/database/persistence-over.typeorm.ts.tpl +2 -2
  505. package/templates/init/platform/database/persistence.orm.ts.tpl +1 -1
  506. package/templates/init/platform/errors.ts.tpl +1 -1
  507. package/templates/init/platform/events/create-event-provider.custom.ts.tpl +2 -2
  508. package/templates/init/platform/events/create-event-provider.kafka.ts.tpl +3 -3
  509. package/templates/init/platform/events/create-event-provider.nats.ts.tpl +2 -2
  510. package/templates/init/platform/events/create-event-provider.rabbitmq.ts.tpl +2 -2
  511. package/templates/init/platform/events/create-event-provider.redis.ts.tpl +2 -2
  512. package/templates/init/platform/events/custom-event-bus.contract.spec.ts.tpl +1 -1
  513. package/templates/init/platform/events/in-process-events.ts.tpl +1 -1
  514. package/templates/init/platform/events/start-outbox-relay.ts.tpl +1 -1
  515. package/templates/init/platform/http/create-app-module.ts.tpl +1 -1
  516. package/templates/init/platform/http/start-http-server.express.ts.tpl +4 -4
  517. package/templates/init/platform/http/start-http-server.fastify.ts.tpl +4 -4
  518. package/templates/init/platform/http/start-http-server.nest.ts.tpl +5 -5
  519. package/templates/init/platform/http/with-documentation.ts.tpl +2 -2
  520. package/templates/init/platform/lay-foundations.tsyringe.ts.tpl +5 -5
  521. package/templates/init/platform/platform-test.module.tsyringe.ts.tpl +1 -1
  522. package/templates/init/platform/platform.manual.ts.tpl +3 -3
  523. package/templates/init/platform/platform.module.tsyringe.ts.tpl +8 -8
  524. package/templates/init/platform/resilience/adapter-aspects.ts.tpl +2 -2
  525. package/templates/init/platform/resilience/default-resilience.ts.tpl +1 -1
  526. package/templates/init/platform/resilience/own-policy.ts.tpl +1 -1
  527. package/templates/init/platform/tracing.ts.tpl +2 -2
  528. package/templates/init/rules/application.md.tpl +8 -2
  529. package/templates/init/rules/infrastructure.md.tpl +3 -3
  530. package/templates/init/scripts/openapi.ts.tpl +5 -5
  531. package/templates/integration-event/audited.tpl +1 -1
  532. package/templates/integration-event/integration-event.class-validator.ts.tpl +1 -1
  533. package/templates/integration-event/integration-event.custom.ts.tpl +1 -1
  534. package/templates/integration-event/publisher.declared.ts.tpl +4 -4
  535. package/templates/integration-event/publisher.spec.ts.tpl +2 -2
  536. package/templates/integration-event/publisher.ts.tpl +2 -2
  537. package/templates/integration-event/wiring.manual.tpl +2 -2
  538. package/templates/integration-event/wiring.tsyringe.tpl +2 -2
  539. package/templates/integration-handler/integration-handler.declared.ts.tpl +3 -3
  540. package/templates/integration-handler/integration-handler.spec.ts.tpl +2 -2
  541. package/templates/integration-handler/integration-handler.ts.tpl +1 -1
  542. package/templates/integration-handler/wiring.manual.tpl +3 -3
  543. package/templates/integration-handler/wiring.tsyringe.tpl +2 -2
  544. package/templates/job/job.declared.ts.tpl +3 -3
  545. package/templates/job/job.spec.buses.ts.tpl +2 -2
  546. package/templates/job/job.spec.tsyringe.ts.tpl +2 -2
  547. package/templates/job/job.ts.tpl +1 -1
  548. package/templates/job/wiring.manual.tpl +1 -1
  549. package/templates/job/wiring.tsyringe.tpl +1 -1
  550. package/templates/pipeline/package-scripts.json +1 -1
  551. package/templates/policy/policy.declared.ts.tpl +1 -1
  552. package/templates/policy/policy.spec.declared.ts.tpl +1 -1
  553. package/templates/policy/policy.spec.ts.tpl +1 -1
  554. package/templates/policy/policy.ts.tpl +1 -1
  555. package/templates/policy/registration.tpl +1 -1
  556. package/templates/port/fake.ts.tpl +1 -1
  557. package/templates/projection/projection.spec.ts.tpl +17 -0
  558. package/templates/projection/projection.ts.tpl +11 -0
  559. package/templates/query/handler.declared.ts.tpl +4 -4
  560. package/templates/query/handler.spec.buses.ts.tpl +5 -5
  561. package/templates/query/handler.spec.tsyringe.ts.tpl +6 -6
  562. package/templates/query/handler.ts.tpl +3 -3
  563. package/templates/query/query.ts.tpl +1 -1
  564. package/templates/query/reader.fake.ts.tpl +2 -2
  565. package/templates/query/reader.in-memory.ts.tpl +4 -4
  566. package/templates/query/reader.port.ts.tpl +2 -2
  567. package/templates/query/search.handler.declared.ts.tpl +6 -6
  568. package/templates/query/search.handler.spec.buses.ts.tpl +5 -5
  569. package/templates/query/search.handler.spec.tsyringe.ts.tpl +6 -6
  570. package/templates/query/search.handler.ts.tpl +4 -4
  571. package/templates/query/search.query.ts.tpl +1 -1
  572. package/templates/query/search.reader.fake.ts.tpl +2 -2
  573. package/templates/query/search.reader.in-memory.ts.tpl +3 -3
  574. package/templates/query/search.reader.port.ts.tpl +1 -1
  575. package/templates/query/search.reader.spec.ts.tpl +2 -2
  576. package/templates/query/search.wiring.manual.tpl +3 -3
  577. package/templates/query/search.wiring.tsyringe.tpl +4 -4
  578. package/templates/query/wiring.manual.tpl +3 -3
  579. package/templates/query/wiring.tsyringe.tpl +4 -4
  580. package/templates/repository/contract.spec.ts.tpl +5 -5
  581. package/templates/repository/drizzle/mapper.ts.tpl +2 -2
  582. package/templates/repository/drizzle/repository.ts.tpl +9 -17
  583. package/templates/repository/drizzle/schema-export.tpl +1 -1
  584. package/templates/repository/fake.ts.tpl +2 -2
  585. package/templates/repository/knex/mapper.ts.tpl +2 -2
  586. package/templates/repository/knex/repository.ts.tpl +10 -30
  587. package/templates/repository/knex/schema-export.tpl +1 -1
  588. package/templates/repository/knex/tables.ts.tpl +1 -1
  589. package/templates/repository/none/repository.ts.tpl +3 -3
  590. package/templates/repository/prisma/mapper.ts.tpl +2 -2
  591. package/templates/repository/prisma/repository.ts.tpl +6 -9
  592. package/templates/repository/repository.ts.tpl +1 -1
  593. package/templates/repository/typeorm/mapper.ts.tpl +2 -2
  594. package/templates/repository/typeorm/repository.ts.tpl +9 -12
  595. package/templates/repository/typeorm/schema-export.tpl +1 -1
  596. package/templates/repository/typeorm/table.tpl +1 -1
  597. package/templates/repository/wiring.manual.tpl +1 -1
  598. package/templates/repository/wiring.tsyringe.tpl +2 -2
  599. package/templates/route/route.search.ts.tpl +1 -1
  600. package/templates/route/route.spec.ts.tpl +1 -1
  601. package/templates/route/routes.on-tsyringe.tpl +1 -1
  602. package/templates/route/wiring.manual.tpl +1 -1
  603. package/templates/service/main.ts.tpl +11 -11
  604. package/templates/value-object/value-object.spec.ts.tpl +1 -1
  605. package/templates/worker/main.ts.tpl +9 -9
  606. package/dist/alias/platform-alias.d.ts +0 -4
  607. package/dist/alias/platform-alias.d.ts.map +0 -1
  608. package/dist/alias/platform-alias.js +0 -7
  609. package/dist/alias/platform-alias.js.map +0 -1
@@ -2,13 +2,13 @@ import { PGlite } from '@electric-sql/pglite';
2
2
  import { is, sql, SQL } from 'drizzle-orm';
3
3
  import { getTableConfig, PgDialect, PgTable } from 'drizzle-orm/pg-core';
4
4
  import { drizzle } from 'drizzle-orm/pglite';
5
- import { connectToDatabase } from '{{alias.platform}}/database/connect-to-database.js';
6
- import { persistenceOver } from '{{alias.platform}}/database/persistence-over.js';
7
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
5
+ import { connectToDatabase } from '{{alias.platform}}/database/connect-to-database{{alias.ext}}';
6
+ import { persistenceOver } from '{{alias.platform}}/database/persistence-over{{alias.ext}}';
7
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
8
8
  {{#if audit.on}}
9
9
  import { auditGuardStatements } from '@ddd-ts-kit/audit/drizzle';
10
10
  {{/if}}
11
- import * as schema from '{{alias.platform}}/database/schema.js';
11
+ import * as schema from '{{alias.platform}}/database/schema{{alias.ext}}';
12
12
 
13
13
  export interface TestDatabase {
14
14
  readonly persistence: Persistence;
@@ -1,14 +1,14 @@
1
1
  import { PGlite } from '@electric-sql/pglite';
2
2
  import { PGLiteSocketServer } from '@electric-sql/pglite-socket';
3
3
  import type { Knex } from 'knex';
4
- import { connectToDatabase } from '{{alias.platform}}/database/connect-to-database.js';
5
- import { persistenceOver } from '{{alias.platform}}/database/persistence-over.js';
6
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
4
+ import { connectToDatabase } from '{{alias.platform}}/database/connect-to-database{{alias.ext}}';
5
+ import { persistenceOver } from '{{alias.platform}}/database/persistence-over{{alias.ext}}';
6
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
7
7
  {{#if audit.on}}
8
- import { AUDIT_SCHEMA, createTables } from '{{alias.platform}}/database/schema.js';
8
+ import { AUDIT_SCHEMA, createTables } from '{{alias.platform}}/database/schema{{alias.ext}}';
9
9
  {{/if}}
10
10
  {{#unless audit.on}}
11
- import { createTables } from '{{alias.platform}}/database/schema.js';
11
+ import { createTables } from '{{alias.platform}}/database/schema{{alias.ext}}';
12
12
  {{/unless}}
13
13
 
14
14
  export interface TestDatabase {
@@ -2,10 +2,10 @@ import { readFile } from 'node:fs/promises';
2
2
  import { PGlite } from '@electric-sql/pglite';
3
3
  import { PGLiteSocketServer } from '@electric-sql/pglite-socket';
4
4
  import pg from 'pg';
5
- import type { PrismaClient } from '{{alias.generated}}/prisma/client.js';
6
- import { createClient } from '{{alias.platform}}/database/create-client.js';
7
- import { persistenceOver } from '{{alias.platform}}/database/persistence-over.js';
8
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
5
+ import type { PrismaClient } from '{{alias.generated}}/prisma/client{{alias.ext}}';
6
+ import { createClient } from '{{alias.platform}}/database/create-client{{alias.ext}}';
7
+ import { persistenceOver } from '{{alias.platform}}/database/persistence-over{{alias.ext}}';
8
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
9
9
 
10
10
  export interface TestDatabase {
11
11
  readonly persistence: Persistence;
@@ -1,9 +1,9 @@
1
1
  import { PGlite } from '@electric-sql/pglite';
2
2
  import { PGLiteSocketServer } from '@electric-sql/pglite-socket';
3
3
  import type { DataSource } from 'typeorm';
4
- import { createDataSource } from '{{alias.platform}}/database/create-data-source.js';
5
- import { persistenceOver } from '{{alias.platform}}/database/persistence-over.js';
6
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
4
+ import { createDataSource } from '{{alias.platform}}/database/create-data-source{{alias.ext}}';
5
+ import { persistenceOver } from '{{alias.platform}}/database/persistence-over{{alias.ext}}';
6
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
7
7
 
8
8
  export interface TestDatabase {
9
9
  readonly persistence: Persistence;
@@ -1,7 +1,7 @@
1
1
  import type { PgDatabase, PgQueryResultHKT } from 'drizzle-orm/pg-core';
2
2
  import { createDrizzleUnitOfWork, DrizzleOutboxStore, DrizzleProcessedEventStore } from '@ddd-ts-kit/drizzle/postgres';
3
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
4
- import { outbox, processedEvents } from '{{alias.platform}}/database/schema.js';
3
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
4
+ import { outbox, processedEvents } from '{{alias.platform}}/database/schema{{alias.ext}}';
5
5
 
6
6
  /** One object is the unit of work and what repositories query through; the stores write in its transaction. */
7
7
  export function persistenceOver(db: PgDatabase<PgQueryResultHKT>, close: () => Promise<void>): Persistence {
@@ -1,7 +1,7 @@
1
1
  import type { Knex } from 'knex';
2
2
  import { createKnexUnitOfWork, KnexOutboxStore, KnexProcessedEventStore } from '@ddd-ts-kit/knex';
3
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
4
- import { MESSAGING } from '{{alias.platform}}/database/schema.js';
3
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
4
+ import { MESSAGING } from '{{alias.platform}}/database/schema{{alias.ext}}';
5
5
 
6
6
  /** One object is the unit of work and what repositories query through; the stores write in its transaction. */
7
7
  export function persistenceOver(db: Knex, close: () => Promise<void>): Persistence {
@@ -1,6 +1,6 @@
1
1
  import { createPrismaUnitOfWork, PrismaOutboxStore, PrismaProcessedEventStore } from '@ddd-ts-kit/prisma';
2
- import type { PrismaClient } from '{{alias.generated}}/prisma/client.js';
3
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
2
+ import type { PrismaClient } from '{{alias.generated}}/prisma/client{{alias.ext}}';
3
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
4
4
 
5
5
  /** One object is the unit of work and what repositories query through; the stores are told how to reach their model. */
6
6
  export function persistenceOver(client: PrismaClient): Persistence {
@@ -1,7 +1,7 @@
1
1
  import type { DataSource } from 'typeorm';
2
2
  import { createTypeOrmUnitOfWork, TypeOrmOutboxStore, TypeOrmProcessedEventStore } from '@ddd-ts-kit/typeorm';
3
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
4
- import { outbox, processedEvents } from '{{alias.platform}}/database/schema.js';
3
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
4
+ import { outbox, processedEvents } from '{{alias.platform}}/database/schema{{alias.ext}}';
5
5
 
6
6
  /** One object is the unit of work and what repositories query through; the stores write through its manager. */
7
7
  export function persistenceOver(dataSource: DataSource): Persistence {
@@ -4,7 +4,7 @@ import type { ProcessedEventStore, UnitOfWork } from '@ddd-ts-kit/kernel';
4
4
  import type { {{persistence.token}} } from '{{persistence.tokenPackage}}';
5
5
  {{/if}}
6
6
  {{#if persistence.ownDatabase}}
7
- import type { Database } from '{{alias.platform}}/database/database.js';
7
+ import type { Database } from '{{alias.platform}}/database/database{{alias.ext}}';
8
8
  {{/if}}
9
9
 
10
10
  /** Where state lives and how a command is made atomic. The platform module binds each member to its port. */
@@ -1,6 +1,6 @@
1
1
  import { reportProcessFailures } from '@ddd-ts-kit/kernel';
2
2
  import { initSentry } from '@ddd-ts-kit/sentry';
3
- import { loadConfig } from '{{alias.platform}}/config/load-config.js';
3
+ import { loadConfig } from '{{alias.platform}}/config/load-config{{alias.ext}}';
4
4
 
5
5
  // Evaluated second, right after tracing.ts (see main.ts). The DSN, the environment and the release
6
6
  // come from the validated configuration: Sentry and GlitchTip speak the same protocol, only the
@@ -1,5 +1,5 @@
1
- import { CustomEventBus } from '{{alias.platform}}/events/custom-event-bus.js';
2
- import type { EventProvider } from '{{alias.platform}}/events/event-provider.js';
1
+ import { CustomEventBus } from '{{alias.platform}}/events/custom-event-bus{{alias.ext}}';
2
+ import type { EventProvider } from '{{alias.platform}}/events/event-provider{{alias.ext}}';
3
3
 
4
4
  // TODO(platform): give the adapter its connection settings from the validated config, name one subscriber per consuming context, and open and close the connection in start and close.
5
5
  export function createEventProvider(): EventProvider {
@@ -2,9 +2,9 @@ import { KafkaEventBus } from '@ddd-ts-kit/kafka';
2
2
  {{#if errors.broker}}
3
3
  import { DeadLetterReports, NoopErrorReporter, type ErrorReporter } from '@ddd-ts-kit/kernel';
4
4
  {{/if}}
5
- import type { AppConfig } from '{{alias.platform}}/config/app-config.js';
6
- import { aggregateKeyOf } from '{{alias.platform}}/events/aggregate-key-of.js';
7
- import type { EventProvider } from '{{alias.platform}}/events/event-provider.js';
5
+ import type { AppConfig } from '{{alias.platform}}/config/app-config{{alias.ext}}';
6
+ import { aggregateKeyOf } from '{{alias.platform}}/events/aggregate-key-of{{alias.ext}}';
7
+ import type { EventProvider } from '{{alias.platform}}/events/event-provider{{alias.ext}}';
8
8
 
9
9
  /**
10
10
  * Kafka: the relay of the outbox produces to one topic per event type and marks a record
@@ -2,8 +2,8 @@
2
2
  import { DeadLetterReports, NoopErrorReporter, type ErrorReporter } from '@ddd-ts-kit/kernel';
3
3
  {{/if}}
4
4
  import { NatsEventBus } from '@ddd-ts-kit/nats';
5
- import type { AppConfig } from '{{alias.platform}}/config/app-config.js';
6
- import type { EventProvider } from '{{alias.platform}}/events/event-provider.js';
5
+ import type { AppConfig } from '{{alias.platform}}/config/app-config{{alias.ext}}';
6
+ import type { EventProvider } from '{{alias.platform}}/events/event-provider{{alias.ext}}';
7
7
 
8
8
  /**
9
9
  * NATS JetStream: the relay of the outbox publishes to one stream and marks a record published
@@ -2,8 +2,8 @@
2
2
  import { DeadLetterReports, NoopErrorReporter, type ErrorReporter } from '@ddd-ts-kit/kernel';
3
3
  {{/if}}
4
4
  import { RabbitMqEventBus } from '@ddd-ts-kit/rabbitmq';
5
- import type { AppConfig } from '{{alias.platform}}/config/app-config.js';
6
- import type { EventProvider } from '{{alias.platform}}/events/event-provider.js';
5
+ import type { AppConfig } from '{{alias.platform}}/config/app-config{{alias.ext}}';
6
+ import type { EventProvider } from '{{alias.platform}}/events/event-provider{{alias.ext}}';
7
7
 
8
8
  /**
9
9
  * RabbitMQ: the relay of the outbox publishes with publisher confirms, each consuming context
@@ -2,8 +2,8 @@
2
2
  import { DeadLetterReports, NoopErrorReporter, type ErrorReporter } from '@ddd-ts-kit/kernel';
3
3
  {{/if}}
4
4
  import { RedisStreamsEventBus } from '@ddd-ts-kit/redis/event-bus';
5
- import type { AppConfig } from '{{alias.platform}}/config/app-config.js';
6
- import type { EventProvider } from '{{alias.platform}}/events/event-provider.js';
5
+ import type { AppConfig } from '{{alias.platform}}/config/app-config{{alias.ext}}';
6
+ import type { EventProvider } from '{{alias.platform}}/events/event-provider{{alias.ext}}';
7
7
 
8
8
  /**
9
9
  * Redis Streams, on Redis, Dragonfly or Valkey: the relay of the outbox appends to one stream per
@@ -1,6 +1,6 @@
1
1
  import { beforeEach, describe, expect, it } from '{{tests.module}}';
2
2
  import { eventBusContract } from '@ddd-ts-kit/testing/contracts';
3
- import { CustomEventBus } from '{{alias.platform}}/events/custom-event-bus.js';
3
+ import { CustomEventBus } from '{{alias.platform}}/events/custom-event-bus{{alias.ext}}';
4
4
 
5
5
  eventBusContract(
6
6
  { describe, it, expect, beforeEach },
@@ -1,5 +1,5 @@
1
1
  import { InMemoryEventBus } from '@ddd-ts-kit/kernel';
2
- import type { EventProvider } from '{{alias.platform}}/events/event-provider.js';
2
+ import type { EventProvider } from '{{alias.platform}}/events/event-provider{{alias.ext}}';
3
3
 
4
4
  {{#if broker.none}}
5
5
  /** Same process, no broker: {{#if events.outbox}}the relay of the outbox publishes to this bus, which runs the consumers{{/if}}{{#unless events.outbox}}use cases publish to this bus, which runs the consumers{{/unless}}. */
@@ -13,7 +13,7 @@ import {
13
13
  } from '@ddd-ts-kit/kernel';
14
14
  {{/if}}
15
15
  {{#if broker.kafka}}
16
- import { aggregateKeyOf } from '{{alias.platform}}/events/aggregate-key-of.js';
16
+ import { aggregateKeyOf } from '{{alias.platform}}/events/aggregate-key-of{{alias.ext}}';
17
17
  {{/if}}
18
18
 
19
19
  export interface OutboxRelayOptions {
@@ -1,7 +1,7 @@
1
1
  import { Module, type DynamicModule } from '@nestjs/common';
2
2
  import type { Route } from '@ddd-ts-kit/http';
3
3
  import { createRoutesModule } from '@ddd-ts-kit/http/nest';
4
- import type { HttpBoundary } from '{{alias.platform}}/auth/http-boundary.js';
4
+ import type { HttpBoundary } from '{{alias.platform}}/auth/http-boundary{{alias.ext}}';
5
5
 
6
6
  @Module({})
7
7
  class AppModule {}
@@ -2,13 +2,13 @@ import type { Server } from 'node:http';
2
2
  import type { AddressInfo } from 'node:net';
3
3
  import express from 'express';
4
4
  import { mountExpress } from '@ddd-ts-kit/http/express';
5
- import type { Application } from '{{alias.platform}}/compose-application.js';
6
- import type { AppConfig } from '{{alias.platform}}/config/app-config.js';
5
+ import type { Application } from '{{alias.platform}}/compose-application{{alias.ext}}';
6
+ import type { AppConfig } from '{{alias.platform}}/config/app-config{{alias.ext}}';
7
7
  {{#if cache.rateLimit}}
8
- import { refusalFor } from '{{alias.platform}}/http/refusal-for.js';
8
+ import { refusalFor } from '{{alias.platform}}/http/refusal-for{{alias.ext}}';
9
9
  {{/if}}
10
10
  {{#if docs.any}}
11
- import { withDocumentation } from '{{alias.platform}}/http/with-documentation.js';
11
+ import { withDocumentation } from '{{alias.platform}}/http/with-documentation{{alias.ext}}';
12
12
  {{/if}}
13
13
 
14
14
  export interface HttpServer {
@@ -1,12 +1,12 @@
1
1
  import Fastify{{#if cache.rateLimit}}, { type FastifyInstance }{{/if}} from 'fastify';
2
2
  import { mountFastify } from '@ddd-ts-kit/http/fastify';
3
- import type { Application } from '{{alias.platform}}/compose-application.js';
4
- import type { AppConfig } from '{{alias.platform}}/config/app-config.js';
3
+ import type { Application } from '{{alias.platform}}/compose-application{{alias.ext}}';
4
+ import type { AppConfig } from '{{alias.platform}}/config/app-config{{alias.ext}}';
5
5
  {{#if cache.rateLimit}}
6
- import { refusalFor } from '{{alias.platform}}/http/refusal-for.js';
6
+ import { refusalFor } from '{{alias.platform}}/http/refusal-for{{alias.ext}}';
7
7
  {{/if}}
8
8
  {{#if docs.any}}
9
- import { withDocumentation } from '{{alias.platform}}/http/with-documentation.js';
9
+ import { withDocumentation } from '{{alias.platform}}/http/with-documentation{{alias.ext}}';
10
10
  {{/if}}
11
11
 
12
12
  export interface HttpServer {
@@ -1,14 +1,14 @@
1
1
  import 'reflect-metadata';
2
2
  import { Server } from 'node:http';
3
3
  import { NestFactory } from '@nestjs/core';
4
- import type { Application } from '{{alias.platform}}/compose-application.js';
5
- import type { AppConfig } from '{{alias.platform}}/config/app-config.js';
6
- import { createAppModule } from '{{alias.platform}}/http/create-app-module.js';
4
+ import type { Application } from '{{alias.platform}}/compose-application{{alias.ext}}';
5
+ import type { AppConfig } from '{{alias.platform}}/config/app-config{{alias.ext}}';
6
+ import { createAppModule } from '{{alias.platform}}/http/create-app-module{{alias.ext}}';
7
7
  {{#if cache.rateLimit}}
8
- import { refusalFor } from '{{alias.platform}}/http/refusal-for.js';
8
+ import { refusalFor } from '{{alias.platform}}/http/refusal-for{{alias.ext}}';
9
9
  {{/if}}
10
10
  {{#if docs.any}}
11
- import { withDocumentation } from '{{alias.platform}}/http/with-documentation.js';
11
+ import { withDocumentation } from '{{alias.platform}}/http/with-documentation{{alias.ext}}';
12
12
  {{/if}}
13
13
 
14
14
  export interface HttpServer {
@@ -1,8 +1,8 @@
1
1
  import type { Route } from '@ddd-ts-kit/http';
2
2
  import { openApiDocsRoutes } from '@ddd-ts-kit/http/docs';
3
3
  import { generateOpenApi } from '@ddd-ts-kit/http/openapi';
4
- import { securitySchemes } from '{{alias.platform}}/auth/security-schemes.js';
5
- import type { AppConfig } from '{{alias.platform}}/config/app-config.js';
4
+ import { securitySchemes } from '{{alias.platform}}/auth/security-schemes{{alias.ext}}';
5
+ import type { AppConfig } from '{{alias.platform}}/config/app-config{{alias.ext}}';
6
6
 
7
7
  /** Adds the contract and its interactive page next to the routes, unless documentation is switched off (API_DOCS, off in production by default). */
8
8
  export function withDocumentation(routes: readonly Route[], config: AppConfig): readonly Route[] {
@@ -13,14 +13,14 @@ import {
13
13
  } from '@ddd-ts-kit/kernel';
14
14
  import { traceApplication, type ConsumerTrace, type TracedApplication } from '@ddd-ts-kit/tracing';
15
15
  {{#if audit.on}}
16
- import { createAudit, type Audit } from '{{alias.platform}}/audit/create-audit.js';
16
+ import { createAudit, type Audit } from '{{alias.platform}}/audit/create-audit{{alias.ext}}';
17
17
  {{/if}}
18
18
  {{#unless audit.on}}
19
- import { logDecisions } from '{{alias.platform}}/auth/log-decisions.js';
19
+ import { logDecisions } from '{{alias.platform}}/auth/log-decisions{{alias.ext}}';
20
20
  {{/unless}}
21
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
22
- import { createLogger, type LogSettings } from '{{alias.platform}}/observability/create-logger.js';
23
- import { createMetrics } from '{{alias.platform}}/observability/create-metrics.js';
21
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
22
+ import { createLogger, type LogSettings } from '{{alias.platform}}/observability/create-logger{{alias.ext}}';
23
+ import { createMetrics } from '{{alias.platform}}/observability/create-metrics{{alias.ext}}';
24
24
 
25
25
  /**
26
26
  * What exists before any module: built once and handed to the kernel module, so that the buses,
@@ -3,7 +3,7 @@ import { defineContextModule } from '@ddd-ts-kit/di';
3
3
  import { {{persistence.token}} } from '{{persistence.tokenPackage}}';
4
4
  {{/if}}
5
5
  {{#if persistence.ownDatabase}}
6
- import { Database } from '{{alias.platform}}/database/database.js';
6
+ import { Database } from '{{alias.platform}}/database/database{{alias.ext}}';
7
7
  {{/if}}
8
8
  // ddd-ts-kit:imports
9
9
  // /ddd-ts-kit:imports
@@ -22,10 +22,10 @@ import type {
22
22
  {{/if}}
23
23
  } from '@ddd-ts-kit/kernel';
24
24
  {{#if audit.on}}
25
- import type { Audit } from '{{alias.platform}}/audit/create-audit.js';
25
+ import type { Audit } from '{{alias.platform}}/audit/create-audit{{alias.ext}}';
26
26
  {{/if}}
27
- import type { UseCaseProtection } from '{{alias.platform}}/auth/use-case-protection.js';
28
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
27
+ import type { UseCaseProtection } from '{{alias.platform}}/auth/use-case-protection{{alias.ext}}';
28
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
29
29
 
30
30
  /** Wraps an adapter from outside: a span for its kind and, for what leaves the process, the default policy unless it states its own. */
31
31
  type Adapt = <T extends object>(instance: T, info: AspectInfo) => T;
@@ -52,18 +52,18 @@ import { {{#if broker.external}}EventSubscribers, {{/if}}ProcessedEventStore, Un
52
52
  import { {{persistence.token}} } from '{{persistence.tokenPackage}}';
53
53
  {{/if}}
54
54
  {{#if persistence.ownDatabase}}
55
- import { Database } from '{{alias.platform}}/database/database.js';
55
+ import { Database } from '{{alias.platform}}/database/database{{alias.ext}}';
56
56
  {{/if}}
57
57
  import type { ConsumerTrace } from '@ddd-ts-kit/tracing';
58
- import type { Persistence } from '{{alias.platform}}/database/persistence.js';
59
- import type { EventProvider } from '{{alias.platform}}/events/event-provider.js';
60
- import type { LogSettings } from '{{alias.platform}}/observability/create-logger.js';
58
+ import type { Persistence } from '{{alias.platform}}/database/persistence{{alias.ext}}';
59
+ import type { EventProvider } from '{{alias.platform}}/events/event-provider{{alias.ext}}';
60
+ import type { LogSettings } from '{{alias.platform}}/observability/create-logger{{alias.ext}}';
61
61
  {{#if cache.redis}}
62
- import type { RedisServices } from '{{alias.platform}}/redis/open-redis.js';
62
+ import type { RedisServices } from '{{alias.platform}}/redis/open-redis{{alias.ext}}';
63
63
  {{/if}}
64
- import { adapterAspects } from '{{alias.platform}}/resilience/adapter-aspects.js';
65
- import { defaultResilience } from '{{alias.platform}}/resilience/default-resilience.js';
66
- import type { ResilienceSettings } from '{{alias.platform}}/resilience/resilience-settings.js';
64
+ import { adapterAspects } from '{{alias.platform}}/resilience/adapter-aspects{{alias.ext}}';
65
+ import { defaultResilience } from '{{alias.platform}}/resilience/default-resilience{{alias.ext}}';
66
+ import type { ResilienceSettings } from '{{alias.platform}}/resilience/resilience-settings{{alias.ext}}';
67
67
  {{#if style.declared}}
68
68
  // ddd-ts-kit:imports
69
69
  // /ddd-ts-kit:imports
@@ -1,6 +1,6 @@
1
1
  import { forKinds, retry, timeout, when, type Aspect } from '@ddd-ts-kit/aspects';
2
- import type { ResilienceSettings } from '{{alias.platform}}/resilience/resilience-settings.js';
3
- import { selfGoverned } from '{{alias.platform}}/resilience/self-governed.js';
2
+ import type { ResilienceSettings } from '{{alias.platform}}/resilience/resilience-settings{{alias.ext}}';
3
+ import { selfGoverned } from '{{alias.platform}}/resilience/self-governed{{alias.ext}}';
4
4
 
5
5
  /**
6
6
  * What goes around every adapter that leaves the process (`external`, `gateway`) and states no
@@ -1,4 +1,4 @@
1
- import type { ResilienceSettings } from '{{alias.platform}}/resilience/resilience-settings.js';
1
+ import type { ResilienceSettings } from '{{alias.platform}}/resilience/resilience-settings{{alias.ext}}';
2
2
 
3
3
  /** What the tools and the tests run with; `main.ts` gives the validated values of the configuration. */
4
4
  export const defaultResilience: ResilienceSettings = { retryAttempts: 3, retryBaseDelayMs: 100, timeoutMs: 2000 };
@@ -1,5 +1,5 @@
1
1
  import { compose, type Aspect } from '@ddd-ts-kit/aspects';
2
- import { selfGoverned } from '{{alias.platform}}/resilience/self-governed.js';
2
+ import { selfGoverned } from '{{alias.platform}}/resilience/self-governed{{alias.ext}}';
3
3
 
4
4
  /**
5
5
  * The policy one adapter states for itself, in place of the default one:
@@ -1,6 +1,6 @@
1
1
  import { initTracing } from '@ddd-ts-kit/tracing/node';
2
- import { ConfigError } from '{{alias.platform}}/config/config-error.js';
3
- import { readTracing } from '{{alias.platform}}/config/read-tracing.js';
2
+ import { ConfigError } from '{{alias.platform}}/config/config-error{{alias.ext}}';
3
+ import { readTracing } from '{{alias.platform}}/config/read-tracing{{alias.ext}}';
4
4
 
5
5
  // Evaluated before the rest of the application (see main.ts): it validates the variables of its
6
6
  // own and reads the two names directly, so that no module an instrumentation patches is loaded
@@ -10,14 +10,20 @@ paths:
10
10
  - Events leave with the save: never `pullEvents()`, never a `DomainEventDispatcher` here (`domain-events/dispatched-on-save`). A reaction is a class of `event-handlers/` or a publisher of `integration/publishers/`. It runs at the end of the unit of work, before the commit, and depends only on what the transaction covers (`domain-events/transactional-before-commit`): repositories, the integration event publisher, the command bus. An effect outside the database is a handler of the `after-commit` phase (`generate event-handler ... --phase after-commit`: at most once, never saves, sends a command) or, when it must not be lost, the handler of an integration event.
11
11
  {{#if style.declared}}
12
12
  - Every command and query carries `@Requires(permission)` or `@Public()` (`authz/declared`), and the actor is in the message (`authz/actor-explicit`). Permissions live in `authorization/<context>.permissions.ts`, rules that need loaded state in `authorization/*.policy.ts`.
13
- - The decorator is the registration (`declarations/role-declared`): `@CommandHandler(Message, [Ports])`, `@QueryHandler`, `@DomainEventHandler(Event, { name }, [Ports])`, `@IntegrationEventHandler(definition, { consumer }, [Ports])`, `@Scheduled('<context>.<job>', schedule, [CommandBus])`, `@Policy(permission, { name })`. Names are string literals.
13
+ - The decorator is the registration (`declarations/role-declared`): `@CommandHandler(Message)`, `@QueryHandler(Message)`, `@DomainEventHandler(Event, { name })`, `@IntegrationEventHandler(definition, { consumer })`, `@Scheduled('<context>.<job>', schedule)`, `@Projection('<context>.<name>')`, `@Policy(permission, { name })`. Names are string literals.
14
+ - The constructor is the one statement of what a class depends on (`declarations/constructor-injection`): each parameter is typed by one port class, with no `?`, default value, rest or destructuring, and no list repeats it in the decorator. To add a dependency, add the parameter: `npx ddd-ts-kit docs` reads the signature into the generated file of the context (`npm run dev` does it on every change), never edit that file.
14
15
  {{/if}}
15
16
  {{#if style.explicit}}
16
17
  - Every command and query is registered in `<context>.module.ts` with the permission it requires, or as public (`authz/declared`), and the actor is in the message (`authz/actor-explicit`). Permissions live in `authorization/<context>.permissions.ts`, rules that need loaded state in `authorization/*.policy.ts`.
17
- - A class here carries no registration of its own: `<context>.module.ts` binds it. A job is registered as `@Scheduled('<context>.<job>', schedule, [CommandBus])` would say: one name, one schedule, the command bus.
18
+ - A class here carries no registration of its own: `<context>.module.ts` binds it and lists what its constructor receives. A job is registered as `@Scheduled('<context>.<job>', schedule)` would say: one name, one schedule, and the command bus as its only dependency.
18
19
  {{/if}}
19
20
  - A port is an abstract class in `ports/<name>.port.ts` and its own injection token (`ports/abstract-class`, `ports/no-token-constant`), named for the need (`PaymentGateway`), with a fake in `test/fakes/`.
21
+ {{#if style.declared}}
22
+ - A constructor parameter is typed by a port, never by an adapter or a fake (`ports/no-concrete-dependency`); a port that only types a parameter is imported with `import type`.
23
+ {{/if}}
24
+ {{#if style.explicit}}
20
25
  - A dependency list names port classes, imported as values, in the order of the constructor: never an adapter or a fake (`ports/value-import`, `ports/no-concrete-dependency`).
26
+ {{/if}}
21
27
  - A job (`scheduling/*.job.ts`) and an integration event handler (`integration/handlers/`) only build one command and send it as a system actor; both are safe to repeat (`scheduling/job-triggers-use-case`, `events/consumer-idempotent`).
22
28
  - A query never saves, deletes or publishes (`application/command-query-separation`); it hands the access scope of the actor to its read port and never filters after loading.
23
29
  - A read that takes criteria, a scope or a page is a search, never a list (`naming/search-not-list`): `Search<Things>Query` in `queries/search-<things>/` (`generate query ... --search`), `search...` on the port, its adapters and its fakes; one element or none stays `findById` or `findBy...`.
@@ -11,12 +11,12 @@ paths:
11
11
  - Own tables, in the schema of the context: no join, foreign key or transaction across contexts (`context/extractable`).
12
12
  - Audit columns and the tenant column are stamped from the execution scope with the kernel helpers (`stampCreation`, `stampUpdate`, `tenantScopeOf`), never handed over by a use case.
13
13
  {{#if style.declared}}
14
- - An adapter declares itself on its class, one per file (`declarations/role-declared`): `@Repository(InvoiceRepository, [{{persistence.tokenOrNone}}, ExecutionScope, Clock])`, `@Gateway(Port, [Ports])` or `@Adapter(Port, { kind }, [Ports])`.
15
- - Retry, timeout and cache go on the declaration (`aspects: [ownPolicy(retry(...), timeout(...))]`) or, when the policy is part of what the adapter is, as decorators of `@ddd-ts-kit/aspects/decorators` (`aspects/outside-in`). Kinds `external` and `gateway` get the default policy of the platform otherwise. `ownPolicy` is the helper of `{{alias.platform}}/resilience/own-policy.js`, which `generate adapter` writes when the platform does not have it yet.
14
+ - An adapter declares itself on its class, one per file (`declarations/role-declared`): `@Repository(InvoiceRepository)`, `@Gateway(Port)` or `@Adapter(Port, { kind })`. What it is given is what its constructor takes, each parameter typed by one class (`{{persistence.tokenOrNone}}`, `ExecutionScope`, `Clock`, a port, an abstract class the platform binds to a value) and nothing listed in the decorator (`declarations/constructor-injection`); an adapter that extends a class of a package writes its own constructor.
15
+ - Retry, timeout and cache go on the declaration (`aspects: [ownPolicy(retry(...), timeout(...))]`) or, when the policy is part of what the adapter is, as decorators of `@ddd-ts-kit/aspects/decorators` (`aspects/outside-in`). Kinds `external` and `gateway` get the default policy of the platform otherwise. `ownPolicy` is the helper of `{{alias.platform}}/resilience/own-policy{{alias.ext}}`, which `generate adapter` writes when the platform does not have it yet.
16
16
  {{/if}}
17
17
  {{#if style.explicit}}
18
18
  - An adapter is bound to its port in `<context>.module.ts` only (`composition/only-in-module`), with its kind (`repository`, `gateway`, `external`).
19
- - Retry, timeout and cache go on the binding (`ownPolicy(retry(...), timeout(...))`) or, when the policy is part of what the adapter is, as decorators of `@ddd-ts-kit/aspects/decorators` (`aspects/outside-in`). Kinds `external` and `gateway` get the default policy of the platform otherwise. `ownPolicy` is the helper of `{{alias.platform}}/resilience/own-policy.js`, which `generate adapter` writes when the platform does not have it yet.
19
+ - Retry, timeout and cache go on the binding (`ownPolicy(retry(...), timeout(...))`) or, when the policy is part of what the adapter is, as decorators of `@ddd-ts-kit/aspects/decorators` (`aspects/outside-in`). Kinds `external` and `gateway` get the default policy of the platform otherwise. `ownPolicy` is the helper of `{{alias.platform}}/resilience/own-policy{{alias.ext}}`, which `generate adapter` writes when the platform does not have it yet.
20
20
  {{/if}}
21
21
  - A repository only persists: no `pullEvents()`, no dispatcher (`domain-events/dispatched-on-save`). A removal that announces an event takes the aggregate, not its id.
22
22
  - Infrastructure faults are plain errors (a 5xx, reported from outside); business refusals are `DomainError`s raised by the domain.
@@ -1,11 +1,11 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { checkOpenApiDrift, generateOpenApi, stringifyOpenApi } from '@ddd-ts-kit/http/openapi';
4
- import { offlineAuthenticator } from '{{alias.platform}}/auth/offline-authenticator.js';
5
- import { securitySchemes } from '{{alias.platform}}/auth/security-schemes.js';
6
- import { composeApplication } from '{{alias.platform}}/compose-application.js';
7
- import { inertPersistence } from '{{alias.platform}}/database/inert-persistence.js';
8
- import { inProcessEvents } from '{{alias.platform}}/events/in-process-events.js';
4
+ import { offlineAuthenticator } from '{{alias.platform}}/auth/offline-authenticator{{alias.ext}}';
5
+ import { securitySchemes } from '{{alias.platform}}/auth/security-schemes{{alias.ext}}';
6
+ import { composeApplication } from '{{alias.platform}}/compose-application{{alias.ext}}';
7
+ import { inertPersistence } from '{{alias.platform}}/database/inert-persistence{{alias.ext}}';
8
+ import { inProcessEvents } from '{{alias.platform}}/events/in-process-events{{alias.ext}}';
9
9
 
10
10
  // Generates openapi/openapi.json from the route definitions; with --check, fails when the
11
11
  // committed file differs. The file is a build product: never edit it by hand.
@@ -1,4 +1,4 @@
1
1
  @@imports
2
- import { {{event.camel}}V{{event.version}} } from '{{alias.context}}/published-language/index.js';
2
+ import { {{event.camel}}V{{event.version}} } from '{{alias.context}}/published-language/index{{alias.ext}}';
3
3
  @@events
4
4
  {{event.camel}}V{{event.version}},
@@ -1,7 +1,7 @@
1
1
  import { defineIntegrationEvent } from '@ddd-ts-kit/events';
2
2
  import type { IntegrationEvent } from '@ddd-ts-kit/kernel';
3
3
  import { classSchema } from '@ddd-ts-kit/validation/class-validator';
4
- import { {{event.pascal}}V{{event.version}}Payload } from '{{alias.context}}/published-language/{{event.kebab}}.v{{event.version}}.payload.js';
4
+ import { {{event.pascal}}V{{event.version}}Payload } from '{{alias.context}}/published-language/{{event.kebab}}.v{{event.version}}.payload{{alias.ext}}';
5
5
 
6
6
  export const {{event.camel}}V{{event.version}} = defineIntegrationEvent({
7
7
  type: '{{event.name}}',
@@ -1,7 +1,7 @@
1
1
  import { defineIntegrationEvent } from '@ddd-ts-kit/events';
2
2
  import { err, ok, type IntegrationEvent } from '@ddd-ts-kit/kernel';
3
3
  import { customSchema } from '@ddd-ts-kit/validation';
4
- import type { {{event.pascal}}V{{event.version}}Payload } from '{{alias.context}}/published-language/{{event.kebab}}.v{{event.version}}.payload.js';
4
+ import type { {{event.pascal}}V{{event.version}}Payload } from '{{alias.context}}/published-language/{{event.kebab}}.v{{event.version}}.payload{{alias.ext}}';
5
5
 
6
6
  export const {{event.camel}}V{{event.version}} = defineIntegrationEvent({
7
7
  type: '{{event.name}}',
@@ -1,9 +1,9 @@
1
- import { IdGenerator, IntegrationEventPublisher } from '@ddd-ts-kit/kernel';
1
+ import type { IdGenerator, IntegrationEventPublisher } from '@ddd-ts-kit/kernel';
2
2
  import { DomainEventHandler } from '@ddd-ts-kit/kernel/declarations';
3
- import { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event.js';
4
- import { {{event.camel}}V{{event.version}} } from '{{alias.context}}/published-language/{{event.kebab}}.v{{event.version}}.integration-event.js';
3
+ import { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event{{alias.ext}}';
4
+ import { {{event.camel}}V{{event.version}} } from '{{alias.context}}/published-language/{{event.kebab}}.v{{event.version}}.integration-event{{alias.ext}}';
5
5
 
6
- @DomainEventHandler({{event.pascal}}, { name: '{{event.name}}' }, [IntegrationEventPublisher, IdGenerator])
6
+ @DomainEventHandler({{event.pascal}}, { name: '{{event.name}}' })
7
7
  export class {{publisher.pascal}}Publisher implements DomainEventHandler<{{event.pascal}}> {
8
8
  constructor(
9
9
  private readonly publisher: IntegrationEventPublisher,
@@ -1,7 +1,7 @@
1
1
  import { describe, expect, it } from '{{tests.module}}';
2
2
  import { InMemoryEventBus, SequentialIdGenerator } from '@ddd-ts-kit/kernel';
3
- import { {{publisher.pascal}}Publisher } from '{{alias.context}}/application/integration/publishers/{{publisher.kebab}}.publisher.js';
4
- import { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event.js';
3
+ import { {{publisher.pascal}}Publisher } from '{{alias.context}}/application/integration/publishers/{{publisher.kebab}}.publisher{{alias.ext}}';
4
+ import { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event{{alias.ext}}';
5
5
 
6
6
  describe('Publishing "{{event.words}}" to other contexts', () => {
7
7
  it('publishes version {{event.version}} of {{event.name}}', async () => {
@@ -1,6 +1,6 @@
1
1
  import type { IdGenerator, IntegrationEventPublisher } from '@ddd-ts-kit/kernel';
2
- import type { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event.js';
3
- import { {{event.camel}}V{{event.version}} } from '{{alias.context}}/published-language/{{event.kebab}}.v{{event.version}}.integration-event.js';
2
+ import type { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event{{alias.ext}}';
3
+ import { {{event.camel}}V{{event.version}} } from '{{alias.context}}/published-language/{{event.kebab}}.v{{event.version}}.integration-event{{alias.ext}}';
4
4
 
5
5
  export class {{publisher.pascal}}Publisher {
6
6
  constructor(
@@ -1,6 +1,6 @@
1
1
  @@imports
2
- import { {{publisher.pascal}}Publisher } from '{{alias.context}}/application/integration/publishers/{{publisher.kebab}}.publisher.js';
3
- import { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event.js';
2
+ import { {{publisher.pascal}}Publisher } from '{{alias.context}}/application/integration/publishers/{{publisher.kebab}}.publisher{{alias.ext}}';
3
+ import { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event{{alias.ext}}';
4
4
  @@registrations
5
5
  const {{publisher.camel}}Publisher = platform.adapter(new {{publisher.pascal}}Publisher(platform.publisher, platform.ids), { kind: 'domain-event-handler', context: '{{context.kebab}}' });
6
6
 
@@ -1,7 +1,7 @@
1
1
  @@imports
2
2
  import { DomainEventDispatcher, IdGenerator, IntegrationEventPublisher } from '@ddd-ts-kit/kernel';
3
- import { {{publisher.pascal}}Publisher } from '{{alias.context}}/application/integration/publishers/{{publisher.kebab}}.publisher.js';
4
- import { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event.js';
3
+ import { {{publisher.pascal}}Publisher } from '{{alias.context}}/application/integration/publishers/{{publisher.kebab}}.publisher{{alias.ext}}';
4
+ import { {{event.pascal}} } from '{{alias.context}}/domain/events/{{event.kebab}}.event{{alias.ext}}';
5
5
  @@registrations
6
6
  builder.bind({{publisher.pascal}}Publisher).toClass({{publisher.pascal}}Publisher, [IntegrationEventPublisher, IdGenerator]).as('domain-event-handler');
7
7
  @@start
@@ -1,8 +1,8 @@
1
- import { CommandBus, systemActor } from '@ddd-ts-kit/kernel';
1
+ import { systemActor, type CommandBus } from '@ddd-ts-kit/kernel';
2
2
  import { IntegrationEventHandler } from '@ddd-ts-kit/kernel/declarations';
3
- import { {{upstream.definition}}, type {{upstream.eventType}} } from '{{alias.contexts}}/{{upstream.kebab}}/published-language/index.js';
3
+ import { {{upstream.definition}}, type {{upstream.eventType}} } from '{{alias.contexts}}/{{upstream.kebab}}/published-language/index{{alias.ext}}';
4
4
 
5
- @IntegrationEventHandler({{upstream.definition}}, { consumer: '{{context.kebab}}.{{name.kebab}}' }, [CommandBus])
5
+ @IntegrationEventHandler({{upstream.definition}}, { consumer: '{{context.kebab}}.{{name.kebab}}' })
6
6
  export class {{name.pascal}}IntegrationHandler {
7
7
  static readonly eventType = '{{upstream.eventName}}';
8
8