@nestjslatam/ddd-lib 1.0.51 → 1.0.52

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 (365) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +30 -30
  3. package/dist/aggregate-root.d.ts +63 -0
  4. package/dist/aggregate-root.js +154 -0
  5. package/dist/broken-rules.manager.d.ts +21 -0
  6. package/dist/broken-rules.manager.js +95 -0
  7. package/dist/core/aggregate/aggregate-equality.d.ts +16 -0
  8. package/dist/core/aggregate/aggregate-equality.js +33 -0
  9. package/dist/core/aggregate/aggregate-identity.d.ts +11 -0
  10. package/dist/core/aggregate/aggregate-identity.js +40 -0
  11. package/dist/core/aggregate/aggregate-serializer.d.ts +28 -0
  12. package/dist/core/aggregate/aggregate-serializer.js +38 -0
  13. package/dist/core/aggregate/aggregate-validation-orchestrator.d.ts +14 -0
  14. package/dist/core/aggregate/aggregate-validation-orchestrator.js +36 -0
  15. package/dist/core/aggregate/index.d.ts +5 -0
  16. package/dist/core/aggregate/index.js +12 -0
  17. package/dist/core/business-rules/impl/broken-rule.d.ts +7 -0
  18. package/dist/core/business-rules/impl/broken-rule.js +15 -0
  19. package/dist/core/business-rules/impl/broken-rules-extension.d.ts +6 -0
  20. package/dist/core/business-rules/impl/broken-rules-extension.js +32 -0
  21. package/dist/core/business-rules/impl/index.d.ts +4 -0
  22. package/{ddd-core/broken-rules → dist/core/business-rules/impl}/index.js +2 -1
  23. package/dist/core/business-rules/impl/property-change/index.d.ts +5 -0
  24. package/dist/core/business-rules/impl/property-change/index.js +21 -0
  25. package/dist/core/business-rules/impl/property-change/notify-property-changed.base.d.ts +16 -0
  26. package/dist/core/business-rules/impl/property-change/notify-property-changed.base.js +64 -0
  27. package/dist/core/business-rules/impl/property-change/notify-property-changed.context-args.d.ts +7 -0
  28. package/dist/core/business-rules/impl/property-change/notify-property-changed.context-args.js +12 -0
  29. package/dist/core/business-rules/impl/property-change/notify-property-changed.context.d.ts +11 -0
  30. package/dist/core/business-rules/impl/property-change/notify-property-changed.context.js +21 -0
  31. package/dist/core/business-rules/impl/property-change/reflection-type-extensions.d.ts +5 -0
  32. package/dist/core/business-rules/impl/property-change/reflection-type-extensions.js +23 -0
  33. package/dist/core/business-rules/index.d.ts +2 -0
  34. package/dist/core/index.d.ts +6 -0
  35. package/{ddd-core → dist/core}/index.js +5 -5
  36. package/dist/core/repositories/index.d.ts +3 -0
  37. package/dist/core/repositories/index.js +19 -0
  38. package/dist/core/repositories/repository-read.interface.d.ts +7 -0
  39. package/{ddd-commands/interfaces/command-handler.interface.js → dist/core/repositories/repository-read.interface.js} +1 -1
  40. package/{ddd-ports/interfaces/domain-repository-write.interface.d.ts → dist/core/repositories/repository-write.interface.d.ts} +4 -3
  41. package/{ddd-commands/interfaces/command-metadata.interface.js → dist/core/repositories/repository-write.interface.js} +1 -1
  42. package/dist/core/tracking-state/impl/index.d.ts +4 -0
  43. package/{ddd-core → dist/core/tracking-state}/impl/index.js +2 -2
  44. package/dist/core/tracking-state/impl/nested-property-change-detector.d.ts +8 -0
  45. package/dist/core/tracking-state/impl/nested-property-change-detector.js +38 -0
  46. package/{ddd-core → dist/core/tracking-state}/impl/tracking-props.d.ts +3 -0
  47. package/{ddd-core → dist/core/tracking-state}/impl/tracking-props.js +11 -0
  48. package/dist/core/tracking-state/impl/tracking-state-transition.d.ts +9 -0
  49. package/dist/core/tracking-state/impl/tracking-state-transition.js +34 -0
  50. package/{ddd-commands → dist/core/tracking-state}/index.d.ts +1 -0
  51. package/dist/core/tracking-state/interfaces/ichange-detector.d.ts +8 -0
  52. package/{ddd-commands/interfaces/command.interface.js → dist/core/tracking-state/interfaces/ichange-detector.js} +1 -1
  53. package/dist/core/tracking-state/interfaces/idomain-primitive.d.ts +5 -0
  54. package/dist/core/tracking-state/interfaces/idomain-primitive.js +3 -0
  55. package/dist/core/tracking-state/interfaces/index.d.ts +6 -0
  56. package/dist/core/tracking-state/interfaces/index.js +22 -0
  57. package/{ddd-core/interfaces/tracking.interface.d.ts → dist/core/tracking-state/interfaces/itracking-props.d.ts} +2 -0
  58. package/{ddd-core/interfaces/saga.interface.js → dist/core/tracking-state/interfaces/itracking-props.js} +1 -1
  59. package/dist/core/tracking-state/interfaces/itracking-state-manager.d.ts +12 -0
  60. package/{ddd-commands/interfaces/command-bus.interface.js → dist/core/tracking-state/interfaces/itracking-state-manager.js} +1 -1
  61. package/dist/core/tracking-state/interfaces/itracking-state-transitions.d.ts +7 -0
  62. package/dist/core/tracking-state/interfaces/itracking-state-transitions.js +3 -0
  63. package/dist/core/validator-rules/impl/abstract-rule-validator.d.ts +13 -0
  64. package/dist/core/validator-rules/impl/abstract-rule-validator.js +34 -0
  65. package/dist/core/validator-rules/impl/abstract-validator.d.ts +4 -0
  66. package/dist/core/validator-rules/impl/abstract-validator.js +7 -0
  67. package/dist/core/validator-rules/impl/entity-validator.d.ts +5 -0
  68. package/dist/core/validator-rules/impl/entity-validator.js +12 -0
  69. package/dist/core/validator-rules/impl/index.d.ts +5 -0
  70. package/{ddd-core/interfaces → dist/core/validator-rules/impl}/index.js +4 -4
  71. package/dist/core/validator-rules/impl/value-object-validator.d.ts +7 -0
  72. package/dist/core/validator-rules/impl/value-object-validator.js +15 -0
  73. package/{ddd-events → dist/core/validator-rules}/index.d.ts +2 -1
  74. package/{ddd-events → dist/core/validator-rules}/index.js +1 -1
  75. package/dist/core/validator-rules/interfaces/index.d.ts +3 -0
  76. package/{ddd-ports → dist/core/validator-rules/interfaces}/index.js +2 -1
  77. package/dist/core/validator-rules/interfaces/irule-context.d.ts +5 -0
  78. package/{ddd-commands/impl/command-types.js → dist/core/validator-rules/interfaces/irule-context.js} +1 -1
  79. package/dist/core/validator-rules/interfaces/irule-validator.d.ts +8 -0
  80. package/{ddd-core/interfaces/ddd.options.js → dist/core/validator-rules/interfaces/irule-validator.js} +1 -1
  81. package/dist/ddd.module.d.ts +6 -0
  82. package/{ddd.module.js → dist/ddd.module.js} +4 -32
  83. package/dist/ddd.service.d.ts +7 -0
  84. package/{ddd.service.js → dist/ddd.service.js} +1 -16
  85. package/dist/domain-event.d.ts +56 -0
  86. package/dist/domain-event.js +175 -0
  87. package/dist/enum.d.ts +28 -0
  88. package/dist/enum.js +129 -0
  89. package/dist/exceptions/domain.exception.d.ts +19 -0
  90. package/dist/exceptions/domain.exception.js +45 -0
  91. package/{ddd-helpers → dist/helpers}/datetime.helper.d.ts +1 -0
  92. package/{ddd-helpers → dist/helpers}/datetime.helper.js +1 -1
  93. package/dist/helpers/domain-object.helper.d.ts +20 -0
  94. package/{ddd-helpers → dist/helpers}/domain-object.helper.js +14 -19
  95. package/{ddd-helpers → dist/helpers}/index.d.ts +1 -0
  96. package/dist/index.d.ts +13 -0
  97. package/{ddd-events/impl → dist}/index.js +11 -7
  98. package/dist/state-transition.manager.d.ts +23 -0
  99. package/dist/state-transition.manager.js +163 -0
  100. package/dist/tracking-state-manager.d.ts +25 -0
  101. package/dist/tracking-state-manager.js +70 -0
  102. package/dist/validator-rule.manager.d.ts +17 -0
  103. package/dist/validator-rule.manager.js +80 -0
  104. package/dist/valueobject.d.ts +23 -0
  105. package/dist/valueobject.js +93 -0
  106. package/dist/valueobjects/id.valueobject.d.ts +16 -0
  107. package/dist/valueobjects/id.valueobject.js +52 -0
  108. package/dist/valueobjects/index.d.ts +7 -0
  109. package/{ddd-commands/impl → dist/valueobjects}/index.js +6 -5
  110. package/dist/valueobjects/number-notnull.validator.d.ts +13 -0
  111. package/dist/valueobjects/number-notnull.validator.js +31 -0
  112. package/dist/valueobjects/number-positive.validator.d.ts +13 -0
  113. package/dist/valueobjects/number-positive.validator.js +43 -0
  114. package/dist/valueobjects/number.valueobject.d.ts +25 -0
  115. package/dist/valueobjects/number.valueobject.js +67 -0
  116. package/dist/valueobjects/string-notnullorempty.validator.d.ts +14 -0
  117. package/dist/valueobjects/string-notnullorempty.validator.js +36 -0
  118. package/dist/valueobjects/string.valueobject.d.ts +27 -0
  119. package/dist/valueobjects/string.valueobject.js +86 -0
  120. package/package.json +51 -26
  121. package/src/types.d.ts +7 -0
  122. package/ddd-aggregate-root.d.ts +0 -34
  123. package/ddd-aggregate-root.js +0 -85
  124. package/ddd-aggregate-root.js.map +0 -1
  125. package/ddd-commands/impl/command-types.d.ts +0 -3
  126. package/ddd-commands/impl/command-types.js.map +0 -1
  127. package/ddd-commands/impl/command.base.d.ts +0 -7
  128. package/ddd-commands/impl/command.base.js +0 -15
  129. package/ddd-commands/impl/command.base.js.map +0 -1
  130. package/ddd-commands/impl/default-command-publisher.d.ts +0 -7
  131. package/ddd-commands/impl/default-command-publisher.js +0 -13
  132. package/ddd-commands/impl/default-command-publisher.js.map +0 -1
  133. package/ddd-commands/impl/domain-command-bus.d.ts +0 -18
  134. package/ddd-commands/impl/domain-command-bus.js +0 -71
  135. package/ddd-commands/impl/domain-command-bus.js.map +0 -1
  136. package/ddd-commands/impl/index.d.ts +0 -5
  137. package/ddd-commands/impl/index.js.map +0 -1
  138. package/ddd-commands/index.js.map +0 -1
  139. package/ddd-commands/interfaces/command-bus.interface.d.ts +0 -4
  140. package/ddd-commands/interfaces/command-bus.interface.js.map +0 -1
  141. package/ddd-commands/interfaces/command-handler.interface.d.ts +0 -4
  142. package/ddd-commands/interfaces/command-handler.interface.js.map +0 -1
  143. package/ddd-commands/interfaces/command-metadata.interface.d.ts +0 -4
  144. package/ddd-commands/interfaces/command-metadata.interface.js.map +0 -1
  145. package/ddd-commands/interfaces/command-publisher.interface.d.ts +0 -4
  146. package/ddd-commands/interfaces/command-publisher.interface.js +0 -3
  147. package/ddd-commands/interfaces/command-publisher.interface.js.map +0 -1
  148. package/ddd-commands/interfaces/command.interface.d.ts +0 -4
  149. package/ddd-commands/interfaces/command.interface.js.map +0 -1
  150. package/ddd-commands/interfaces/index.d.ts +0 -5
  151. package/ddd-commands/interfaces/index.js +0 -22
  152. package/ddd-commands/interfaces/index.js.map +0 -1
  153. package/ddd-core/broken-rules/broken-rule-collection.d.ts +0 -13
  154. package/ddd-core/broken-rules/broken-rule-collection.js +0 -54
  155. package/ddd-core/broken-rules/broken-rule-collection.js.map +0 -1
  156. package/ddd-core/broken-rules/broken-rule.d.ts +0 -5
  157. package/ddd-core/broken-rules/broken-rule.js +0 -13
  158. package/ddd-core/broken-rules/broken-rule.js.map +0 -1
  159. package/ddd-core/broken-rules/index.d.ts +0 -2
  160. package/ddd-core/broken-rules/index.js.map +0 -1
  161. package/ddd-core/ddd-base-classes.d.ts +0 -52
  162. package/ddd-core/ddd-base-classes.js +0 -173
  163. package/ddd-core/ddd-base-classes.js.map +0 -1
  164. package/ddd-core/ddd-validators.d.ts +0 -15
  165. package/ddd-core/ddd-validators.js +0 -70
  166. package/ddd-core/ddd-validators.js.map +0 -1
  167. package/ddd-core/impl/index.d.ts +0 -3
  168. package/ddd-core/impl/index.js.map +0 -1
  169. package/ddd-core/impl/observable-bus.d.ts +0 -6
  170. package/ddd-core/impl/observable-bus.js +0 -16
  171. package/ddd-core/impl/observable-bus.js.map +0 -1
  172. package/ddd-core/impl/of-type.d.ts +0 -4
  173. package/ddd-core/impl/of-type.js +0 -9
  174. package/ddd-core/impl/of-type.js.map +0 -1
  175. package/ddd-core/impl/tracking-props.js.map +0 -1
  176. package/ddd-core/index.d.ts +0 -5
  177. package/ddd-core/index.js.map +0 -1
  178. package/ddd-core/interfaces/ddd.options.d.ts +0 -7
  179. package/ddd-core/interfaces/ddd.options.js.map +0 -1
  180. package/ddd-core/interfaces/index.d.ts +0 -4
  181. package/ddd-core/interfaces/index.js.map +0 -1
  182. package/ddd-core/interfaces/message-source.interface.d.ts +0 -5
  183. package/ddd-core/interfaces/message-source.interface.js +0 -3
  184. package/ddd-core/interfaces/message-source.interface.js.map +0 -1
  185. package/ddd-core/interfaces/saga.interface.d.ts +0 -4
  186. package/ddd-core/interfaces/saga.interface.js.map +0 -1
  187. package/ddd-core/interfaces/tracking.interface.js +0 -3
  188. package/ddd-core/interfaces/tracking.interface.js.map +0 -1
  189. package/ddd-decorators/command-handler.decorator.d.ts +0 -3
  190. package/ddd-decorators/command-handler.decorator.js +0 -16
  191. package/ddd-decorators/command-handler.decorator.js.map +0 -1
  192. package/ddd-decorators/constants.d.ts +0 -5
  193. package/ddd-decorators/constants.js +0 -9
  194. package/ddd-decorators/constants.js.map +0 -1
  195. package/ddd-decorators/events-handler.decorator.d.ts +0 -3
  196. package/ddd-decorators/events-handler.decorator.js +0 -18
  197. package/ddd-decorators/events-handler.decorator.js.map +0 -1
  198. package/ddd-decorators/index.d.ts +0 -6
  199. package/ddd-decorators/index.js +0 -23
  200. package/ddd-decorators/index.js.map +0 -1
  201. package/ddd-decorators/reflect-command.helper.d.ts +0 -6
  202. package/ddd-decorators/reflect-command.helper.js +0 -25
  203. package/ddd-decorators/reflect-command.helper.js.map +0 -1
  204. package/ddd-decorators/reflect-event.helper.d.ts +0 -7
  205. package/ddd-decorators/reflect-event.helper.js +0 -18
  206. package/ddd-decorators/reflect-event.helper.js.map +0 -1
  207. package/ddd-decorators/saga.decorator.d.ts +0 -2
  208. package/ddd-decorators/saga.decorator.js +0 -13
  209. package/ddd-decorators/saga.decorator.js.map +0 -1
  210. package/ddd-events/impl/default-event-publisher.d.ts +0 -9
  211. package/ddd-events/impl/default-event-publisher.js +0 -16
  212. package/ddd-events/impl/default-event-publisher.js.map +0 -1
  213. package/ddd-events/impl/domain-event-bus.d.ts +0 -32
  214. package/ddd-events/impl/domain-event-bus.js +0 -140
  215. package/ddd-events/impl/domain-event-bus.js.map +0 -1
  216. package/ddd-events/impl/domain-event-cli.registry.d.ts +0 -6
  217. package/ddd-events/impl/domain-event-cli.registry.js +0 -18
  218. package/ddd-events/impl/domain-event-cli.registry.js.map +0 -1
  219. package/ddd-events/impl/domain-event-collection.d.ts +0 -11
  220. package/ddd-events/impl/domain-event-collection.js +0 -33
  221. package/ddd-events/impl/domain-event-collection.js.map +0 -1
  222. package/ddd-events/impl/domain-event-publisher.d.ts +0 -12
  223. package/ddd-events/impl/domain-event-publisher.js +0 -48
  224. package/ddd-events/impl/domain-event-publisher.js.map +0 -1
  225. package/ddd-events/impl/domain-event-types.d.ts +0 -3
  226. package/ddd-events/impl/domain-event-types.js +0 -3
  227. package/ddd-events/impl/domain-event-types.js.map +0 -1
  228. package/ddd-events/impl/domain-event.d.ts +0 -19
  229. package/ddd-events/impl/domain-event.deserializer.d.ts +0 -8
  230. package/ddd-events/impl/domain-event.deserializer.js +0 -31
  231. package/ddd-events/impl/domain-event.deserializer.js.map +0 -1
  232. package/ddd-events/impl/domain-event.js +0 -29
  233. package/ddd-events/impl/domain-event.js.map +0 -1
  234. package/ddd-events/impl/domain-event.serializer.d.ts +0 -6
  235. package/ddd-events/impl/domain-event.serializer.js +0 -45
  236. package/ddd-events/impl/domain-event.serializer.js.map +0 -1
  237. package/ddd-events/impl/index.d.ts +0 -8
  238. package/ddd-events/impl/index.js.map +0 -1
  239. package/ddd-events/index.js.map +0 -1
  240. package/ddd-events/interfaces/domain-event-bus.interface.d.ts +0 -5
  241. package/ddd-events/interfaces/domain-event-bus.interface.js +0 -3
  242. package/ddd-events/interfaces/domain-event-bus.interface.js.map +0 -1
  243. package/ddd-events/interfaces/domain-event-handler.interface.d.ts +0 -4
  244. package/ddd-events/interfaces/domain-event-handler.interface.js +0 -3
  245. package/ddd-events/interfaces/domain-event-handler.interface.js.map +0 -1
  246. package/ddd-events/interfaces/domain-event-metadata.interface.d.ts +0 -7
  247. package/ddd-events/interfaces/domain-event-metadata.interface.js +0 -3
  248. package/ddd-events/interfaces/domain-event-metadata.interface.js.map +0 -1
  249. package/ddd-events/interfaces/domain-event-publisher.interface.d.ts +0 -5
  250. package/ddd-events/interfaces/domain-event-publisher.interface.js +0 -3
  251. package/ddd-events/interfaces/domain-event-publisher.interface.js.map +0 -1
  252. package/ddd-events/interfaces/domain-event-serializable.interface.d.ts +0 -11
  253. package/ddd-events/interfaces/domain-event-serializable.interface.js +0 -3
  254. package/ddd-events/interfaces/domain-event-serializable.interface.js.map +0 -1
  255. package/ddd-events/interfaces/domain-event.interface.d.ts +0 -2
  256. package/ddd-events/interfaces/domain-event.interface.js +0 -3
  257. package/ddd-events/interfaces/domain-event.interface.js.map +0 -1
  258. package/ddd-events/interfaces/index.d.ts +0 -6
  259. package/ddd-events/interfaces/index.js +0 -23
  260. package/ddd-events/interfaces/index.js.map +0 -1
  261. package/ddd-exceptions/constants.d.ts +0 -14
  262. package/ddd-exceptions/constants.js +0 -18
  263. package/ddd-exceptions/constants.js.map +0 -1
  264. package/ddd-exceptions/impl/arguments-exception.d.ts +0 -10
  265. package/ddd-exceptions/impl/arguments-exception.js +0 -27
  266. package/ddd-exceptions/impl/arguments-exception.js.map +0 -1
  267. package/ddd-exceptions/impl/broken-rules.exeption.d.ts +0 -6
  268. package/ddd-exceptions/impl/broken-rules.exeption.js +0 -14
  269. package/ddd-exceptions/impl/broken-rules.exeption.js.map +0 -1
  270. package/ddd-exceptions/impl/command-exception.d.ts +0 -7
  271. package/ddd-exceptions/impl/command-exception.js +0 -20
  272. package/ddd-exceptions/impl/command-exception.js.map +0 -1
  273. package/ddd-exceptions/impl/common.exception.d.ts +0 -14
  274. package/ddd-exceptions/impl/common.exception.js +0 -29
  275. package/ddd-exceptions/impl/common.exception.js.map +0 -1
  276. package/ddd-exceptions/impl/domain-bus.exception.d.ts +0 -7
  277. package/ddd-exceptions/impl/domain-bus.exception.js +0 -20
  278. package/ddd-exceptions/impl/domain-bus.exception.js.map +0 -1
  279. package/ddd-exceptions/impl/domain-publisher.exception.d.ts +0 -9
  280. package/ddd-exceptions/impl/domain-publisher.exception.js +0 -13
  281. package/ddd-exceptions/impl/domain-publisher.exception.js.map +0 -1
  282. package/ddd-exceptions/impl/domain-unhandled-bus.exeption.d.ts +0 -16
  283. package/ddd-exceptions/impl/domain-unhandled-bus.exeption.js +0 -45
  284. package/ddd-exceptions/impl/domain-unhandled-bus.exeption.js.map +0 -1
  285. package/ddd-exceptions/impl/index.d.ts +0 -8
  286. package/ddd-exceptions/impl/index.js +0 -25
  287. package/ddd-exceptions/impl/index.js.map +0 -1
  288. package/ddd-exceptions/impl/sagas.exception.d.ts +0 -4
  289. package/ddd-exceptions/impl/sagas.exception.js +0 -13
  290. package/ddd-exceptions/impl/sagas.exception.js.map +0 -1
  291. package/ddd-exceptions/index.d.ts +0 -3
  292. package/ddd-exceptions/index.js +0 -20
  293. package/ddd-exceptions/index.js.map +0 -1
  294. package/ddd-exceptions/interfaces/exception.base.d.ts +0 -17
  295. package/ddd-exceptions/interfaces/exception.base.js +0 -24
  296. package/ddd-exceptions/interfaces/exception.base.js.map +0 -1
  297. package/ddd-exceptions/interfaces/index.d.ts +0 -3
  298. package/ddd-exceptions/interfaces/index.js +0 -20
  299. package/ddd-exceptions/interfaces/index.js.map +0 -1
  300. package/ddd-exceptions/interfaces/unhandled-exception-info.interface.d.ts +0 -6
  301. package/ddd-exceptions/interfaces/unhandled-exception-info.interface.js +0 -3
  302. package/ddd-exceptions/interfaces/unhandled-exception-info.interface.js.map +0 -1
  303. package/ddd-exceptions/interfaces/unhandled-exception-publisher.interface.d.ts +0 -6
  304. package/ddd-exceptions/interfaces/unhandled-exception-publisher.interface.js +0 -3
  305. package/ddd-exceptions/interfaces/unhandled-exception-publisher.interface.js.map +0 -1
  306. package/ddd-helpers/datetime.helper.js.map +0 -1
  307. package/ddd-helpers/domain-object.helper.d.ts +0 -18
  308. package/ddd-helpers/domain-object.helper.js.map +0 -1
  309. package/ddd-helpers/index.js.map +0 -1
  310. package/ddd-ports/index.d.ts +0 -1
  311. package/ddd-ports/index.js.map +0 -1
  312. package/ddd-ports/interfaces/domain-repository-read.interface.d.ts +0 -6
  313. package/ddd-ports/interfaces/domain-repository-read.interface.js +0 -3
  314. package/ddd-ports/interfaces/domain-repository-read.interface.js.map +0 -1
  315. package/ddd-ports/interfaces/domain-repository-write.interface.js +0 -3
  316. package/ddd-ports/interfaces/domain-repository-write.interface.js.map +0 -1
  317. package/ddd-ports/interfaces/index.d.ts +0 -2
  318. package/ddd-ports/interfaces/index.js +0 -19
  319. package/ddd-ports/interfaces/index.js.map +0 -1
  320. package/ddd-validators/impl/domain-abstract.validator.d.ts +0 -5
  321. package/ddd-validators/impl/domain-abstract.validator.js +0 -34
  322. package/ddd-validators/impl/domain-abstract.validator.js.map +0 -1
  323. package/ddd-validators/impl/domain-entity.validator.d.ts +0 -5
  324. package/ddd-validators/impl/domain-entity.validator.js +0 -12
  325. package/ddd-validators/impl/domain-entity.validator.js.map +0 -1
  326. package/ddd-validators/impl/domain-value-object.validator.d.ts +0 -11
  327. package/ddd-validators/impl/domain-value-object.validator.js +0 -41
  328. package/ddd-validators/impl/domain-value-object.validator.js.map +0 -1
  329. package/ddd-validators/impl/index.d.ts +0 -3
  330. package/ddd-validators/impl/index.js +0 -20
  331. package/ddd-validators/impl/index.js.map +0 -1
  332. package/ddd-validators/index.d.ts +0 -1
  333. package/ddd-validators/index.js.map +0 -1
  334. package/ddd-valueobjects/domain-audit.valueobject.d.ts +0 -21
  335. package/ddd-valueobjects/domain-audit.valueobject.js +0 -63
  336. package/ddd-valueobjects/domain-audit.valueobject.js.map +0 -1
  337. package/ddd-valueobjects/domain-date.valueobject.d.ts +0 -6
  338. package/ddd-valueobjects/domain-date.valueobject.js +0 -20
  339. package/ddd-valueobjects/domain-date.valueobject.js.map +0 -1
  340. package/ddd-valueobjects/domain-enum-base.valueobject.d.ts +0 -5
  341. package/ddd-valueobjects/domain-enum-base.valueobject.js +0 -11
  342. package/ddd-valueobjects/domain-enum-base.valueobject.js.map +0 -1
  343. package/ddd-valueobjects/domain-number-base.valueobject.d.ts +0 -6
  344. package/ddd-valueobjects/domain-number-base.valueobject.js +0 -22
  345. package/ddd-valueobjects/domain-number-base.valueobject.js.map +0 -1
  346. package/ddd-valueobjects/domain-string-base.valueobject.d.ts +0 -6
  347. package/ddd-valueobjects/domain-string-base.valueobject.js +0 -22
  348. package/ddd-valueobjects/domain-string-base.valueobject.js.map +0 -1
  349. package/ddd-valueobjects/domain-uid.valueobject.d.ts +0 -7
  350. package/ddd-valueobjects/domain-uid.valueobject.js +0 -29
  351. package/ddd-valueobjects/domain-uid.valueobject.js.map +0 -1
  352. package/ddd-valueobjects/index.d.ts +0 -6
  353. package/ddd-valueobjects/index.js +0 -23
  354. package/ddd-valueobjects/index.js.map +0 -1
  355. package/ddd.module.d.ts +0 -11
  356. package/ddd.module.js.map +0 -1
  357. package/ddd.service.d.ts +0 -14
  358. package/ddd.service.js.map +0 -1
  359. package/index.d.ts +0 -14
  360. package/index.js +0 -31
  361. package/index.js.map +0 -1
  362. package/tsconfig.lib.tsbuildinfo +0 -1
  363. /package/{ddd-validators → dist/core/business-rules}/index.js +0 -0
  364. /package/{ddd-commands → dist/core/tracking-state}/index.js +0 -0
  365. /package/{ddd-helpers → dist/helpers}/index.js +0 -0
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 NESTJS Latam
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2023 NESTJS Latam
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,30 +1,30 @@
1
- # Ddd Library
2
-
3
- Welcome to DDD Library for NESTJS, an innovative open-source library crafted to seamlessly integrate Domain-Driven Design (DDD) principles into your NESTJS applications. This powerful library is meticulously developed with a focus on TypeScript, leveraging the robust capabilities of NESTJS and ensuring seamless compatibility with Node.js.
4
-
5
- Domain-Driven Design has proven to be a game-changer in building scalable and maintainable applications by placing the domain at the heart of the software design process. With [Library Name], we aim to simplify the application of DDD concepts within the NESTJS framework, empowering developers to create well-architected, domain-centric solutions.
6
-
7
- ## DISCLAIMER: This library is not ready to be used in production environments
8
-
9
- # Key Features:
10
-
11
- - NESTJS Integration: DDD Library for NESTJS is designed from the ground up to seamlessly integrate with NESTJS, a leading framework for building efficient and scalable server-side applications with TypeScript.
12
- - TypeScript Support: Take advantage of the static typing and modern features of TypeScript, enhancing the development experience and catching errors early in the development process.
13
- - Node.js Compatibility: DDD Library for NESTJS is built to support Node.js, allowing you to harness the full power of JavaScript on the server side.
14
- - Domain-Driven Design Principles: Embrace the core principles of DDD effortlessly. DDD Library for NESTJS provides abstractions and utilities that align with DDD concepts, allowing you to model your domain in a clear and expressive manner.
15
- - Modularity and Extensibility: Enjoy a modular and extensible architecture that adapts to the complexity of your application. DDD Library for NESTJS empowers you to build scalable systems by encapsulating domain logic in a modular fashion.
16
- - Community-Driven: As an open-source project, DDD Library for NESTJS thrives on community collaboration. Contribute, share your insights, and join the growing community of developers dedicated to enhancing DDD practices within NESTJS.
17
-
18
- # Getting Started:
19
-
20
- To start incorporating DDD principles into your NESTJS projects, DDD Library for NESTJS offers comprehensive documentation, examples, and tutorials to guide you through the implementation process. Whether you are a seasoned developer or new to DDD, our library provides the tools you need to create robust, maintainable, and scalable applications.
21
-
22
- Explore the potential of DDD Library for NESTJS today and elevate your NESTJS projects to new heights by seamlessly integrating Domain-Driven Design into your development workflow. Together, let's build software that truly reflects the intricacies of your business domain.
23
-
24
- ### Install
25
-
26
- `npm install @nestjslatam/ddd-lib`
27
-
28
- ### Use library
29
-
30
- This source code include a defaultr sample where we can see in detail how use this library.
1
+ # Ddd Library
2
+
3
+ Welcome to DDD Library for NESTJS, an innovative open-source library crafted to seamlessly integrate Domain-Driven Design (DDD) principles into your NESTJS applications. This powerful library is meticulously developed with a focus on TypeScript, leveraging the robust capabilities of NESTJS and ensuring seamless compatibility with Node.js.
4
+
5
+ Domain-Driven Design has proven to be a game-changer in building scalable and maintainable applications by placing the domain at the heart of the software design process. With [Library Name], we aim to simplify the application of DDD concepts within the NESTJS framework, empowering developers to create well-architected, domain-centric solutions.
6
+
7
+ ## DISCLAIMER: This library is not ready to be used in production environments
8
+
9
+ # Key Features:
10
+
11
+ - NESTJS Integration: DDD Library for NESTJS is designed from the ground up to seamlessly integrate with NESTJS, a leading framework for building efficient and scalable server-side applications with TypeScript.
12
+ - TypeScript Support: Take advantage of the static typing and modern features of TypeScript, enhancing the development experience and catching errors early in the development process.
13
+ - Node.js Compatibility: DDD Library for NESTJS is built to support Node.js, allowing you to harness the full power of JavaScript on the server side.
14
+ - Domain-Driven Design Principles: Embrace the core principles of DDD effortlessly. DDD Library for NESTJS provides abstractions and utilities that align with DDD concepts, allowing you to model your domain in a clear and expressive manner.
15
+ - Modularity and Extensibility: Enjoy a modular and extensible architecture that adapts to the complexity of your application. DDD Library for NESTJS empowers you to build scalable systems by encapsulating domain logic in a modular fashion.
16
+ - Community-Driven: As an open-source project, DDD Library for NESTJS thrives on community collaboration. Contribute, share your insights, and join the growing community of developers dedicated to enhancing DDD practices within NESTJS.
17
+
18
+ # Getting Started:
19
+
20
+ To start incorporating DDD principles into your NESTJS projects, DDD Library for NESTJS offers comprehensive documentation, examples, and tutorials to guide you through the implementation process. Whether you are a seasoned developer or new to DDD, our library provides the tools you need to create robust, maintainable, and scalable applications.
21
+
22
+ Explore the potential of DDD Library for NESTJS today and elevate your NESTJS projects to new heights by seamlessly integrating Domain-Driven Design into your development workflow. Together, let's build software that truly reflects the intricacies of your business domain.
23
+
24
+ ### Install
25
+
26
+ `npm install @nestjslatam/ddd-lib`
27
+
28
+ ### Use library
29
+
30
+ This source code include a defaultr sample where we can see in detail how use this library.
@@ -0,0 +1,63 @@
1
+ import { AggregateRoot } from '@nestjs/cqrs';
2
+ import { BrokenRulesManager } from './broken-rules.manager';
3
+ import { AbstractRuleValidator, TrackingProps } from './core';
4
+ import { TrackingStateManager } from './tracking-state-manager';
5
+ import { ValidatorRuleManager } from './validator-rule.manager';
6
+ import { IdValueObject } from './valueobjects';
7
+ export declare abstract class DddAggregateRoot<TEntity, TProps, TState extends object = object> extends AggregateRoot {
8
+ private _props;
9
+ private _version;
10
+ private readonly _trackingStateManager;
11
+ private readonly _brokenRulesManager;
12
+ private readonly _validatorRuleManager;
13
+ private readonly _stateTransitionManager;
14
+ private readonly _guardStrategy;
15
+ private readonly _validatorsStrategy;
16
+ private _id;
17
+ get id(): IdValueObject;
18
+ private set id(value);
19
+ get props(): TProps;
20
+ private set props(value);
21
+ get version(): number;
22
+ private set version(value);
23
+ get brokenRules(): BrokenRulesManager;
24
+ get trackingState(): TrackingStateManager;
25
+ get validators(): ValidatorRuleManager<AbstractRuleValidator<TEntity>>;
26
+ get propsCopy(): Readonly<TProps & {
27
+ id: IdValueObject;
28
+ props: TProps;
29
+ trackingState: TrackingProps;
30
+ }>;
31
+ isValid(): boolean;
32
+ protected static createValidated<T extends DddAggregateRoot<any, any, any>>(createFn: () => T): T;
33
+ constructor(props: TProps, options?: {
34
+ trackingStateManager?: TrackingStateManager;
35
+ brokenRulesManager?: BrokenRulesManager;
36
+ validatorRuleManager?: ValidatorRuleManager<AbstractRuleValidator<TEntity>>;
37
+ id?: IdValueObject;
38
+ guardStrategy?: () => void;
39
+ validatorsStrategy?: (manager: ValidatorRuleManager<AbstractRuleValidator<TEntity>>) => void;
40
+ skipInitialValidation?: boolean;
41
+ });
42
+ validate(): void;
43
+ protected guard(): void;
44
+ protected addValidators(_manager: ValidatorRuleManager<AbstractRuleValidator<TEntity>>): void;
45
+ equals(obj: unknown): boolean;
46
+ private referenceEntityPropertiesEquals;
47
+ static areEqual<T, P>(left: DddAggregateRoot<T, P> | null, right: DddAggregateRoot<T, P> | null): boolean;
48
+ static areNotEqual<T, P>(left: DddAggregateRoot<T, P> | null, right: DddAggregateRoot<T, P> | null): boolean;
49
+ toPlainObject(): {
50
+ id: IdValueObject;
51
+ version: number;
52
+ isValid: boolean;
53
+ } & TProps;
54
+ toObject(): {
55
+ id: IdValueObject;
56
+ trackingState: TrackingStateManager;
57
+ brokenRules: BrokenRulesManager;
58
+ isValid: boolean;
59
+ } & TProps;
60
+ protected defineValidTransitions(transitions: Map<TState, TState[]>): void;
61
+ protected canTransitionTo(currentState: TState, newState: TState): boolean;
62
+ }
63
+ //# sourceMappingURL=aggregate-root.d.ts.map
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DddAggregateRoot = void 0;
4
+ const cqrs_1 = require("@nestjs/cqrs");
5
+ const broken_rules_manager_1 = require("./broken-rules.manager");
6
+ const state_transition_manager_1 = require("./state-transition.manager");
7
+ const tracking_state_manager_1 = require("./tracking-state-manager");
8
+ const validator_rule_manager_1 = require("./validator-rule.manager");
9
+ const valueobjects_1 = require("./valueobjects");
10
+ class DddAggregateRoot extends cqrs_1.AggregateRoot {
11
+ get id() {
12
+ return this._id;
13
+ }
14
+ set id(value) {
15
+ this._id = value;
16
+ }
17
+ get props() {
18
+ return this._props;
19
+ }
20
+ set props(value) {
21
+ this._props = value;
22
+ }
23
+ get version() {
24
+ return this._version;
25
+ }
26
+ set version(value) {
27
+ this._version = value;
28
+ }
29
+ get brokenRules() {
30
+ return this._brokenRulesManager;
31
+ }
32
+ get trackingState() {
33
+ return this._trackingStateManager;
34
+ }
35
+ get validators() {
36
+ return this._validatorRuleManager;
37
+ }
38
+ get propsCopy() {
39
+ return Object.freeze({
40
+ props: this._props,
41
+ id: this.id,
42
+ trackingState: this.trackingState.trackingProps,
43
+ });
44
+ }
45
+ isValid() {
46
+ return this._brokenRulesManager.getBrokenRules().length === 0;
47
+ }
48
+ static createValidated(createFn) {
49
+ const aggregate = createFn();
50
+ aggregate.validate();
51
+ return aggregate;
52
+ }
53
+ constructor(props, options) {
54
+ super();
55
+ this._trackingStateManager =
56
+ options?.trackingStateManager ?? new tracking_state_manager_1.TrackingStateManager();
57
+ this._brokenRulesManager =
58
+ options?.brokenRulesManager ?? new broken_rules_manager_1.BrokenRulesManager();
59
+ this._validatorRuleManager =
60
+ options?.validatorRuleManager ??
61
+ new validator_rule_manager_1.ValidatorRuleManager();
62
+ this._stateTransitionManager = new state_transition_manager_1.StateTransitionManager();
63
+ this.id = options?.id ?? valueobjects_1.IdValueObject.create();
64
+ this._props = props;
65
+ this._guardStrategy = options?.guardStrategy ?? (() => this.guard());
66
+ this._validatorsStrategy =
67
+ options?.validatorsStrategy ?? ((manager) => this.addValidators(manager));
68
+ if (!options?.skipInitialValidation) {
69
+ this.validate();
70
+ }
71
+ this._trackingStateManager.markAsNew();
72
+ }
73
+ validate() {
74
+ this._guardStrategy();
75
+ this._validatorsStrategy(this._validatorRuleManager);
76
+ const entityBrokenRules = this._validatorRuleManager.getBrokenRules();
77
+ if (entityBrokenRules.length > 0) {
78
+ this.brokenRules.addRange(entityBrokenRules);
79
+ this._trackingStateManager.markAsDirty();
80
+ }
81
+ const propBrokenRules = broken_rules_manager_1.BrokenRulesManager.getPropertiesBrokenRules(this, Object.getOwnPropertyNames(Object.getPrototypeOf(this)));
82
+ if (propBrokenRules.length > 0) {
83
+ this.brokenRules.addRange(propBrokenRules);
84
+ this._trackingStateManager.markAsDirty();
85
+ }
86
+ }
87
+ guard() {
88
+ }
89
+ addValidators(_manager) {
90
+ }
91
+ equals(obj) {
92
+ if (obj === null || obj === undefined) {
93
+ return false;
94
+ }
95
+ if (!(obj instanceof DddAggregateRoot)) {
96
+ return false;
97
+ }
98
+ if (this === obj) {
99
+ return true;
100
+ }
101
+ if (Object.getPrototypeOf(this) !== Object.getPrototypeOf(obj)) {
102
+ return false;
103
+ }
104
+ return this.referenceEntityPropertiesEquals(obj);
105
+ }
106
+ referenceEntityPropertiesEquals(obj) {
107
+ const thisId = this.id;
108
+ const otherId = obj.id;
109
+ if (thisId === null ||
110
+ thisId === undefined ||
111
+ otherId === null ||
112
+ otherId === undefined) {
113
+ return false;
114
+ }
115
+ if (typeof thisId.equals === 'function') {
116
+ return thisId.equals(otherId);
117
+ }
118
+ return thisId === otherId;
119
+ }
120
+ static areEqual(left, right) {
121
+ if (left === null || left === undefined) {
122
+ return right === null || right === undefined;
123
+ }
124
+ return left.equals(right);
125
+ }
126
+ static areNotEqual(left, right) {
127
+ return !this.areEqual(left, right);
128
+ }
129
+ toPlainObject() {
130
+ return {
131
+ id: this.id,
132
+ version: this.version,
133
+ ...this._props,
134
+ isValid: this.isValid(),
135
+ };
136
+ }
137
+ toObject() {
138
+ return {
139
+ id: this.id,
140
+ ...this._props,
141
+ trackingState: this.trackingState,
142
+ brokenRules: this.brokenRules,
143
+ isValid: this.isValid(),
144
+ };
145
+ }
146
+ defineValidTransitions(transitions) {
147
+ this._stateTransitionManager.defineTransitions(transitions);
148
+ }
149
+ canTransitionTo(currentState, newState) {
150
+ return this._stateTransitionManager.canTransitionTo(currentState, newState);
151
+ }
152
+ }
153
+ exports.DddAggregateRoot = DddAggregateRoot;
154
+ //# sourceMappingURL=aggregate-root.js.map
@@ -0,0 +1,21 @@
1
+ import { BrokenRule } from './core';
2
+ export interface IBrokenRulesManager {
3
+ getBrokenRules(): ReadonlyArray<BrokenRule>;
4
+ }
5
+ export declare class BrokenRulesManager implements IBrokenRulesManager {
6
+ private _brokenRules;
7
+ private static readonly BROKEN_RULES_PROPERTY_NAME;
8
+ add(brokenRule: BrokenRule): void;
9
+ addRange(brokenRules: ReadonlyArray<BrokenRule>): void;
10
+ remove(brokenRule: BrokenRule): void;
11
+ clear(): void;
12
+ getBrokenRules(): ReadonlyArray<BrokenRule>;
13
+ hasErrors(): boolean;
14
+ getBrokenRulesAsString(): string;
15
+ static getPropertiesBrokenRules<T extends object>(instance: T, properties: Array<keyof T>): ReadonlyArray<BrokenRule>;
16
+ private validateNotNull;
17
+ private exists;
18
+ private isSameRule;
19
+ private static extractBrokenRulesManager;
20
+ }
21
+ //# sourceMappingURL=broken-rules.manager.d.ts.map
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrokenRulesManager = void 0;
4
+ const domain_exception_1 = require("./exceptions/domain.exception");
5
+ class BrokenRulesManager {
6
+ constructor() {
7
+ this._brokenRules = [];
8
+ }
9
+ add(brokenRule) {
10
+ this.validateNotNull(brokenRule, 'brokenRule');
11
+ if (!this.exists(brokenRule)) {
12
+ this._brokenRules.push(brokenRule);
13
+ }
14
+ }
15
+ addRange(brokenRules) {
16
+ this.validateNotNull(brokenRules, 'brokenRules');
17
+ brokenRules.forEach((rule) => this.add(rule));
18
+ }
19
+ remove(brokenRule) {
20
+ this.validateNotNull(brokenRule, 'brokenRule');
21
+ const index = this._brokenRules.findIndex((rule) => this.isSameRule(rule, brokenRule));
22
+ if (index !== -1) {
23
+ this._brokenRules.splice(index, 1);
24
+ }
25
+ }
26
+ clear() {
27
+ this._brokenRules = [];
28
+ }
29
+ getBrokenRules() {
30
+ return Object.freeze([...this._brokenRules]);
31
+ }
32
+ hasErrors() {
33
+ return this._brokenRules.length > 0;
34
+ }
35
+ getBrokenRulesAsString() {
36
+ if (this._brokenRules.length === 0) {
37
+ return '';
38
+ }
39
+ return this._brokenRules
40
+ .map((rule) => `Property: ${rule.property}, Message: ${rule.message}`)
41
+ .join('\n');
42
+ }
43
+ static getPropertiesBrokenRules(instance, properties) {
44
+ if (instance === null || instance === undefined) {
45
+ throw new domain_exception_1.ArgumentNullException('instance');
46
+ }
47
+ if (!properties) {
48
+ throw new domain_exception_1.ArgumentNullException('properties');
49
+ }
50
+ const result = [];
51
+ for (const key of properties) {
52
+ const valueObject = instance[key];
53
+ if (valueObject === null || valueObject === undefined) {
54
+ continue;
55
+ }
56
+ const brokenRulesManager = this.extractBrokenRulesManager(valueObject);
57
+ if (brokenRulesManager) {
58
+ const brokenRules = brokenRulesManager.getBrokenRules();
59
+ if (brokenRules.length > 0) {
60
+ result.push(...brokenRules);
61
+ }
62
+ }
63
+ }
64
+ return Object.freeze(result);
65
+ }
66
+ validateNotNull(value, parameterName) {
67
+ if (value === null || value === undefined) {
68
+ throw new domain_exception_1.ArgumentNullException(parameterName);
69
+ }
70
+ }
71
+ exists(brokenRule) {
72
+ return this._brokenRules.some((rule) => this.isSameRule(rule, brokenRule));
73
+ }
74
+ isSameRule(rule1, rule2) {
75
+ return (rule1.property.toLowerCase() === rule2.property.toLowerCase() &&
76
+ rule1.message.toLowerCase() === rule2.message.toLowerCase());
77
+ }
78
+ static extractBrokenRulesManager(valueObject) {
79
+ if (typeof valueObject === 'object' &&
80
+ valueObject !== null &&
81
+ BrokenRulesManager.BROKEN_RULES_PROPERTY_NAME in valueObject) {
82
+ const manager = valueObject[BrokenRulesManager.BROKEN_RULES_PROPERTY_NAME];
83
+ if (manager &&
84
+ typeof manager === 'object' &&
85
+ 'getBrokenRules' in manager &&
86
+ typeof manager.getBrokenRules === 'function') {
87
+ return manager;
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ }
93
+ exports.BrokenRulesManager = BrokenRulesManager;
94
+ BrokenRulesManager.BROKEN_RULES_PROPERTY_NAME = 'brokenRules';
95
+ //# sourceMappingURL=broken-rules.manager.js.map
@@ -0,0 +1,16 @@
1
+ import { AggregateIdentity } from './aggregate-identity';
2
+ export declare class AggregateEquality<T extends {
3
+ identity: AggregateIdentity;
4
+ }> {
5
+ private readonly identity;
6
+ private readonly aggregateType;
7
+ constructor(identity: AggregateIdentity, aggregateType: new (...args: any[]) => T);
8
+ equals(obj: unknown): boolean;
9
+ static areEqual<T extends {
10
+ identity: AggregateIdentity;
11
+ }>(left: T | null | undefined, right: T | null | undefined): boolean;
12
+ static areNotEqual<T extends {
13
+ identity: AggregateIdentity;
14
+ }>(left: T | null | undefined, right: T | null | undefined): boolean;
15
+ }
16
+ //# sourceMappingURL=aggregate-equality.d.ts.map
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AggregateEquality = void 0;
4
+ class AggregateEquality {
5
+ constructor(identity, aggregateType) {
6
+ this.identity = identity;
7
+ this.aggregateType = aggregateType;
8
+ }
9
+ equals(obj) {
10
+ if (obj === null || obj === undefined) {
11
+ return false;
12
+ }
13
+ if (!(obj instanceof this.aggregateType)) {
14
+ return false;
15
+ }
16
+ const typedObj = obj;
17
+ return this.identity.equals(typedObj.identity);
18
+ }
19
+ static areEqual(left, right) {
20
+ if (left === null || left === undefined) {
21
+ return right === null || right === undefined;
22
+ }
23
+ if (right === null || right === undefined) {
24
+ return false;
25
+ }
26
+ return left.identity.equals(right.identity);
27
+ }
28
+ static areNotEqual(left, right) {
29
+ return !this.areEqual(left, right);
30
+ }
31
+ }
32
+ exports.AggregateEquality = AggregateEquality;
33
+ //# sourceMappingURL=aggregate-equality.js.map
@@ -0,0 +1,11 @@
1
+ import { IdValueObject } from '../../valueobjects';
2
+ export declare class AggregateIdentity {
3
+ private readonly _id;
4
+ private constructor();
5
+ static create(): AggregateIdentity;
6
+ static fromExisting(id: IdValueObject): AggregateIdentity;
7
+ get id(): IdValueObject;
8
+ equals(other: AggregateIdentity | null | undefined): boolean;
9
+ toString(): string;
10
+ }
11
+ //# sourceMappingURL=aggregate-identity.d.ts.map
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AggregateIdentity = void 0;
4
+ const valueobjects_1 = require("../../valueobjects");
5
+ class AggregateIdentity {
6
+ constructor(id) {
7
+ this._id = id;
8
+ }
9
+ static create() {
10
+ return new AggregateIdentity(valueobjects_1.IdValueObject.create());
11
+ }
12
+ static fromExisting(id) {
13
+ return new AggregateIdentity(id);
14
+ }
15
+ get id() {
16
+ return this._id;
17
+ }
18
+ equals(other) {
19
+ if (other === null || other === undefined) {
20
+ return false;
21
+ }
22
+ const thisId = this._id;
23
+ const otherId = other._id;
24
+ if (thisId === null ||
25
+ thisId === undefined ||
26
+ otherId === null ||
27
+ otherId === undefined) {
28
+ return false;
29
+ }
30
+ if (typeof thisId.equals === 'function') {
31
+ return thisId.equals(otherId);
32
+ }
33
+ return thisId === otherId;
34
+ }
35
+ toString() {
36
+ return this._id.toString();
37
+ }
38
+ }
39
+ exports.AggregateIdentity = AggregateIdentity;
40
+ //# sourceMappingURL=aggregate-identity.js.map
@@ -0,0 +1,28 @@
1
+ import { IdValueObject } from '../../valueobjects';
2
+ import { TrackingStateManager } from '../../tracking-state-manager';
3
+ import { TrackingProps } from '../tracking-state';
4
+ export declare class AggregateSerializer<TProps> {
5
+ private readonly id;
6
+ private readonly props;
7
+ private readonly version;
8
+ private readonly trackingState;
9
+ private readonly isValidFn;
10
+ constructor(id: IdValueObject, props: TProps, version: number, trackingState: TrackingStateManager, isValidFn: () => boolean);
11
+ toPlainObject(): {
12
+ id: IdValueObject;
13
+ version: number;
14
+ isValid: boolean;
15
+ } & TProps;
16
+ toFullObject(brokenRules: any): {
17
+ id: IdValueObject;
18
+ trackingState: TrackingStateManager;
19
+ brokenRules: any;
20
+ isValid: boolean;
21
+ } & TProps;
22
+ getFrozenCopy(): Readonly<TProps & {
23
+ id: IdValueObject;
24
+ props: TProps;
25
+ trackingState: TrackingProps;
26
+ }>;
27
+ }
28
+ //# sourceMappingURL=aggregate-serializer.d.ts.map
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AggregateSerializer = void 0;
4
+ class AggregateSerializer {
5
+ constructor(id, props, version, trackingState, isValidFn) {
6
+ this.id = id;
7
+ this.props = props;
8
+ this.version = version;
9
+ this.trackingState = trackingState;
10
+ this.isValidFn = isValidFn;
11
+ }
12
+ toPlainObject() {
13
+ return {
14
+ id: this.id,
15
+ version: this.version,
16
+ ...this.props,
17
+ isValid: this.isValidFn(),
18
+ };
19
+ }
20
+ toFullObject(brokenRules) {
21
+ return {
22
+ id: this.id,
23
+ ...this.props,
24
+ trackingState: this.trackingState,
25
+ brokenRules: brokenRules,
26
+ isValid: this.isValidFn(),
27
+ };
28
+ }
29
+ getFrozenCopy() {
30
+ return Object.freeze({
31
+ props: this.props,
32
+ id: this.id,
33
+ trackingState: this.trackingState.trackingProps,
34
+ });
35
+ }
36
+ }
37
+ exports.AggregateSerializer = AggregateSerializer;
38
+ //# sourceMappingURL=aggregate-serializer.js.map
@@ -0,0 +1,14 @@
1
+ import { BrokenRulesManager } from '../../broken-rules.manager';
2
+ import { AbstractRuleValidator } from '../validator-rules';
3
+ import { ValidatorRuleManager } from '../../validator-rule.manager';
4
+ export declare class AggregateValidationOrchestrator<TEntity> {
5
+ private readonly guardStrategy;
6
+ private readonly validatorsStrategy;
7
+ private readonly brokenRulesManager;
8
+ private readonly validatorRuleManager;
9
+ constructor(guardStrategy: () => void, validatorsStrategy: (manager: ValidatorRuleManager<AbstractRuleValidator<TEntity>>) => void, brokenRulesManager: BrokenRulesManager, validatorRuleManager: ValidatorRuleManager<AbstractRuleValidator<TEntity>>);
10
+ validate(aggregate: any): number;
11
+ isValid(): boolean;
12
+ clearBrokenRules(): void;
13
+ }
14
+ //# sourceMappingURL=aggregate-validation-orchestrator.d.ts.map
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AggregateValidationOrchestrator = void 0;
4
+ const broken_rules_manager_1 = require("../../broken-rules.manager");
5
+ class AggregateValidationOrchestrator {
6
+ constructor(guardStrategy, validatorsStrategy, brokenRulesManager, validatorRuleManager) {
7
+ this.guardStrategy = guardStrategy;
8
+ this.validatorsStrategy = validatorsStrategy;
9
+ this.brokenRulesManager = brokenRulesManager;
10
+ this.validatorRuleManager = validatorRuleManager;
11
+ }
12
+ validate(aggregate) {
13
+ let brokenRulesCount = 0;
14
+ this.guardStrategy();
15
+ this.validatorsStrategy(this.validatorRuleManager);
16
+ const entityBrokenRules = this.validatorRuleManager.getBrokenRules();
17
+ if (entityBrokenRules.length > 0) {
18
+ this.brokenRulesManager.addRange(entityBrokenRules);
19
+ brokenRulesCount += entityBrokenRules.length;
20
+ }
21
+ const propBrokenRules = broken_rules_manager_1.BrokenRulesManager.getPropertiesBrokenRules(aggregate, Object.getOwnPropertyNames(Object.getPrototypeOf(aggregate)));
22
+ if (propBrokenRules.length > 0) {
23
+ this.brokenRulesManager.addRange(propBrokenRules);
24
+ brokenRulesCount += propBrokenRules.length;
25
+ }
26
+ return brokenRulesCount;
27
+ }
28
+ isValid() {
29
+ return this.brokenRulesManager.getBrokenRules().length === 0;
30
+ }
31
+ clearBrokenRules() {
32
+ this.brokenRulesManager.clear();
33
+ }
34
+ }
35
+ exports.AggregateValidationOrchestrator = AggregateValidationOrchestrator;
36
+ //# sourceMappingURL=aggregate-validation-orchestrator.js.map