@bett3r-dev/pv3 1.0.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 (393) hide show
  1. package/build/adapters/cache/index.d.ts +2 -0
  2. package/build/adapters/cache/index.d.ts.map +1 -0
  3. package/build/adapters/cache/index.js +18 -0
  4. package/build/adapters/cache/index.js.map +1 -0
  5. package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts +1 -0
  6. package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts.map +1 -0
  7. package/build/adapters/cache/memory/__tests__/memoryCache.test.js +6 -0
  8. package/build/adapters/cache/memory/__tests__/memoryCache.test.js.map +1 -0
  9. package/build/adapters/cache/memory/index.d.ts +3 -0
  10. package/build/adapters/cache/memory/index.d.ts.map +1 -0
  11. package/build/adapters/cache/memory/index.js +119 -0
  12. package/build/adapters/cache/memory/index.js.map +1 -0
  13. package/build/adapters/configuration/__tests__/dotEnv.test.d.ts +2 -0
  14. package/build/adapters/configuration/__tests__/dotEnv.test.d.ts.map +1 -0
  15. package/build/adapters/configuration/__tests__/dotEnv.test.js +43 -0
  16. package/build/adapters/configuration/__tests__/dotEnv.test.js.map +1 -0
  17. package/build/adapters/configuration/dotEnv.d.ts +3 -0
  18. package/build/adapters/configuration/dotEnv.d.ts.map +1 -0
  19. package/build/adapters/configuration/dotEnv.js +35 -0
  20. package/build/adapters/configuration/dotEnv.js.map +1 -0
  21. package/build/adapters/configuration/index.d.ts +2 -0
  22. package/build/adapters/configuration/index.d.ts.map +1 -0
  23. package/build/adapters/configuration/index.js +18 -0
  24. package/build/adapters/configuration/index.js.map +1 -0
  25. package/build/adapters/database/index.d.ts +2 -0
  26. package/build/adapters/database/index.d.ts.map +1 -0
  27. package/build/adapters/database/index.js +18 -0
  28. package/build/adapters/database/index.js.map +1 -0
  29. package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts +1 -0
  30. package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts.map +1 -0
  31. package/build/adapters/database/memory/__tests__/memoryDb.test.js +36 -0
  32. package/build/adapters/database/memory/__tests__/memoryDb.test.js.map +1 -0
  33. package/build/adapters/database/memory/index.d.ts +3 -0
  34. package/build/adapters/database/memory/index.d.ts.map +1 -0
  35. package/build/adapters/database/memory/index.js +241 -0
  36. package/build/adapters/database/memory/index.js.map +1 -0
  37. package/build/adapters/endpoints/addAuthUser/index.d.ts +8 -0
  38. package/build/adapters/endpoints/addAuthUser/index.d.ts.map +1 -0
  39. package/build/adapters/endpoints/addAuthUser/index.js +57 -0
  40. package/build/adapters/endpoints/addAuthUser/index.js.map +1 -0
  41. package/build/adapters/endpoints/endpointValidation/index.d.ts +4 -0
  42. package/build/adapters/endpoints/endpointValidation/index.d.ts.map +1 -0
  43. package/build/adapters/endpoints/endpointValidation/index.js +27 -0
  44. package/build/adapters/endpoints/endpointValidation/index.js.map +1 -0
  45. package/build/adapters/endpoints/index.d.ts +4 -0
  46. package/build/adapters/endpoints/index.d.ts.map +1 -0
  47. package/build/adapters/endpoints/index.js +21 -0
  48. package/build/adapters/endpoints/index.js.map +1 -0
  49. package/build/adapters/endpoints/localAuthorization/index.d.ts +1 -0
  50. package/build/adapters/endpoints/localAuthorization/index.d.ts.map +1 -0
  51. package/build/adapters/endpoints/localAuthorization/index.js +68 -0
  52. package/build/adapters/endpoints/localAuthorization/index.js.map +1 -0
  53. package/build/adapters/endpoints/tcpConsumer/index.d.ts +3 -0
  54. package/build/adapters/endpoints/tcpConsumer/index.d.ts.map +1 -0
  55. package/build/adapters/endpoints/tcpConsumer/index.js +64 -0
  56. package/build/adapters/endpoints/tcpConsumer/index.js.map +1 -0
  57. package/build/adapters/endpoints/userSession/index.d.ts +8 -0
  58. package/build/adapters/endpoints/userSession/index.d.ts.map +1 -0
  59. package/build/adapters/endpoints/userSession/index.js +43 -0
  60. package/build/adapters/endpoints/userSession/index.js.map +1 -0
  61. package/build/adapters/eventstore/database.d.ts +3 -0
  62. package/build/adapters/eventstore/database.d.ts.map +1 -0
  63. package/build/adapters/eventstore/database.js +156 -0
  64. package/build/adapters/eventstore/database.js.map +1 -0
  65. package/build/adapters/eventstore/index.d.ts +2 -0
  66. package/build/adapters/eventstore/index.d.ts.map +1 -0
  67. package/build/adapters/eventstore/index.js +18 -0
  68. package/build/adapters/eventstore/index.js.map +1 -0
  69. package/build/adapters/infrastructure/index.d.ts +2 -0
  70. package/build/adapters/infrastructure/index.d.ts.map +1 -0
  71. package/build/adapters/infrastructure/index.js +18 -0
  72. package/build/adapters/infrastructure/index.js.map +1 -0
  73. package/build/adapters/infrastructure/local/index.d.ts +4 -0
  74. package/build/adapters/infrastructure/local/index.d.ts.map +1 -0
  75. package/build/adapters/infrastructure/local/index.js +37 -0
  76. package/build/adapters/infrastructure/local/index.js.map +1 -0
  77. package/build/adapters/logger/console.d.ts +3 -0
  78. package/build/adapters/logger/console.d.ts.map +1 -0
  79. package/build/adapters/logger/console.js +38 -0
  80. package/build/adapters/logger/console.js.map +1 -0
  81. package/build/adapters/logger/index.d.ts +2 -0
  82. package/build/adapters/logger/index.d.ts.map +1 -0
  83. package/build/adapters/logger/index.js +18 -0
  84. package/build/adapters/logger/index.js.map +1 -0
  85. package/build/index.d.ts +23 -0
  86. package/build/index.d.ts.map +1 -0
  87. package/build/index.js +39 -0
  88. package/build/index.js.map +1 -0
  89. package/build/libraries/modules/fs.d.ts +12 -0
  90. package/build/libraries/modules/fs.d.ts.map +1 -0
  91. package/build/libraries/modules/fs.js +103 -0
  92. package/build/libraries/modules/fs.js.map +1 -0
  93. package/build/libraries/modules/index.d.ts +2 -0
  94. package/build/libraries/modules/index.d.ts.map +1 -0
  95. package/build/libraries/modules/index.js +18 -0
  96. package/build/libraries/modules/index.js.map +1 -0
  97. package/build/libraries/openApi/index.d.ts +2 -0
  98. package/build/libraries/openApi/index.d.ts.map +1 -0
  99. package/build/libraries/openApi/index.js +18 -0
  100. package/build/libraries/openApi/index.js.map +1 -0
  101. package/build/libraries/openApi/pruneUnusedRef.d.ts +3 -0
  102. package/build/libraries/openApi/pruneUnusedRef.d.ts.map +1 -0
  103. package/build/libraries/openApi/pruneUnusedRef.js +30 -0
  104. package/build/libraries/openApi/pruneUnusedRef.js.map +1 -0
  105. package/build/libraries/tcp/index.d.ts +8 -0
  106. package/build/libraries/tcp/index.d.ts.map +1 -0
  107. package/build/libraries/tcp/index.js +108 -0
  108. package/build/libraries/tcp/index.js.map +1 -0
  109. package/build/libraries/tcp/types.d.ts +45 -0
  110. package/build/libraries/tcp/types.d.ts.map +1 -0
  111. package/build/libraries/tcp/types.js +3 -0
  112. package/build/libraries/tcp/types.js.map +1 -0
  113. package/build/libraries/validation/__tests__/validation.test.d.ts +2 -0
  114. package/build/libraries/validation/__tests__/validation.test.d.ts.map +1 -0
  115. package/build/libraries/validation/__tests__/validation.test.js +53 -0
  116. package/build/libraries/validation/__tests__/validation.test.js.map +1 -0
  117. package/build/libraries/validation/index.d.ts +8 -0
  118. package/build/libraries/validation/index.d.ts.map +1 -0
  119. package/build/libraries/validation/index.js +51 -0
  120. package/build/libraries/validation/index.js.map +1 -0
  121. package/build/ports/authentication/index.d.ts +12 -0
  122. package/build/ports/authentication/index.d.ts.map +1 -0
  123. package/build/ports/authentication/index.js +23 -0
  124. package/build/ports/authentication/index.js.map +1 -0
  125. package/build/ports/base.d.ts +7 -0
  126. package/build/ports/base.d.ts.map +1 -0
  127. package/build/ports/base.js +25 -0
  128. package/build/ports/base.js.map +1 -0
  129. package/build/ports/cache/index.d.ts +3 -0
  130. package/build/ports/cache/index.d.ts.map +1 -0
  131. package/build/ports/cache/index.js +19 -0
  132. package/build/ports/cache/index.js.map +1 -0
  133. package/build/ports/configuration/__tests__/configurationPort.test.d.ts +2 -0
  134. package/build/ports/configuration/__tests__/configurationPort.test.d.ts.map +1 -0
  135. package/build/ports/configuration/__tests__/configurationPort.test.js +51 -0
  136. package/build/ports/configuration/__tests__/configurationPort.test.js.map +1 -0
  137. package/build/ports/configuration/args.d.ts +57 -0
  138. package/build/ports/configuration/args.d.ts.map +1 -0
  139. package/build/ports/configuration/args.js +44 -0
  140. package/build/ports/configuration/args.js.map +1 -0
  141. package/build/ports/configuration/common.d.ts +2 -0
  142. package/build/ports/configuration/common.d.ts.map +1 -0
  143. package/build/ports/configuration/common.js +19 -0
  144. package/build/ports/configuration/common.js.map +1 -0
  145. package/build/ports/configuration/index.d.ts +10 -0
  146. package/build/ports/configuration/index.d.ts.map +1 -0
  147. package/build/ports/configuration/index.js +96 -0
  148. package/build/ports/configuration/index.js.map +1 -0
  149. package/build/ports/configuration/localConfig.d.ts +3 -0
  150. package/build/ports/configuration/localConfig.d.ts.map +1 -0
  151. package/build/ports/configuration/localConfig.js +108 -0
  152. package/build/ports/configuration/localConfig.js.map +1 -0
  153. package/build/ports/database/index.d.ts +4 -0
  154. package/build/ports/database/index.d.ts.map +1 -0
  155. package/build/ports/database/index.js +27 -0
  156. package/build/ports/database/index.js.map +1 -0
  157. package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts +2 -0
  158. package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts.map +1 -0
  159. package/build/ports/endpoints/__tests__/endpointsCall.test.js +21 -0
  160. package/build/ports/endpoints/__tests__/endpointsCall.test.js.map +1 -0
  161. package/build/ports/endpoints/__tests__/test-client-library/base.d.ts +77 -0
  162. package/build/ports/endpoints/__tests__/test-client-library/base.d.ts.map +1 -0
  163. package/build/ports/endpoints/__tests__/test-client-library/base.js +91 -0
  164. package/build/ports/endpoints/__tests__/test-client-library/base.js.map +1 -0
  165. package/build/ports/endpoints/__tests__/test-client-library/index.d.ts +29 -0
  166. package/build/ports/endpoints/__tests__/test-client-library/index.d.ts.map +1 -0
  167. package/build/ports/endpoints/__tests__/test-client-library/index.js +43 -0
  168. package/build/ports/endpoints/__tests__/test-client-library/index.js.map +1 -0
  169. package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts +106 -0
  170. package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts.map +1 -0
  171. package/build/ports/endpoints/__tests__/test-client-library/services/service.js +62 -0
  172. package/build/ports/endpoints/__tests__/test-client-library/services/service.js.map +1 -0
  173. package/build/ports/endpoints/__tests__/utils.test.d.ts +1 -0
  174. package/build/ports/endpoints/__tests__/utils.test.d.ts.map +1 -0
  175. package/build/ports/endpoints/__tests__/utils.test.js +53 -0
  176. package/build/ports/endpoints/__tests__/utils.test.js.map +1 -0
  177. package/build/ports/endpoints/index.d.ts +29 -0
  178. package/build/ports/endpoints/index.d.ts.map +1 -0
  179. package/build/ports/endpoints/index.js +263 -0
  180. package/build/ports/endpoints/index.js.map +1 -0
  181. package/build/ports/endpoints/openApi.d.ts +16 -0
  182. package/build/ports/endpoints/openApi.d.ts.map +1 -0
  183. package/build/ports/endpoints/openApi.js +187 -0
  184. package/build/ports/endpoints/openApi.js.map +1 -0
  185. package/build/ports/endpoints/utils.d.ts +17 -0
  186. package/build/ports/endpoints/utils.d.ts.map +1 -0
  187. package/build/ports/endpoints/utils.js +31 -0
  188. package/build/ports/endpoints/utils.js.map +1 -0
  189. package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts +2 -0
  190. package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts.map +1 -0
  191. package/build/ports/eventsourcing/__tests__/eventhandlers.test.js +35 -0
  192. package/build/ports/eventsourcing/__tests__/eventhandlers.test.js.map +1 -0
  193. package/build/ports/eventsourcing/__tests__/invariants.test.d.ts +2 -0
  194. package/build/ports/eventsourcing/__tests__/invariants.test.d.ts.map +1 -0
  195. package/build/ports/eventsourcing/__tests__/invariants.test.js +210 -0
  196. package/build/ports/eventsourcing/__tests__/invariants.test.js.map +1 -0
  197. package/build/ports/eventsourcing/commandHandlers/index.d.ts +25 -0
  198. package/build/ports/eventsourcing/commandHandlers/index.d.ts.map +1 -0
  199. package/build/ports/eventsourcing/commandHandlers/index.js +392 -0
  200. package/build/ports/eventsourcing/commandHandlers/index.js.map +1 -0
  201. package/build/ports/eventsourcing/commandTemplates/index.d.ts +3 -0
  202. package/build/ports/eventsourcing/commandTemplates/index.d.ts.map +1 -0
  203. package/build/ports/eventsourcing/commandTemplates/index.js +19 -0
  204. package/build/ports/eventsourcing/commandTemplates/index.js.map +1 -0
  205. package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts +4 -0
  206. package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts.map +1 -0
  207. package/build/ports/eventsourcing/commandTemplates/multiStream.js +73 -0
  208. package/build/ports/eventsourcing/commandTemplates/multiStream.js.map +1 -0
  209. package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts +9 -0
  210. package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts.map +1 -0
  211. package/build/ports/eventsourcing/commandTemplates/snapshot.js +39 -0
  212. package/build/ports/eventsourcing/commandTemplates/snapshot.js.map +1 -0
  213. package/build/ports/eventsourcing/eventHandlers/index.d.ts +33 -0
  214. package/build/ports/eventsourcing/eventHandlers/index.d.ts.map +1 -0
  215. package/build/ports/eventsourcing/eventHandlers/index.js +276 -0
  216. package/build/ports/eventsourcing/eventHandlers/index.js.map +1 -0
  217. package/build/ports/eventsourcing/index.d.ts +9 -0
  218. package/build/ports/eventsourcing/index.d.ts.map +1 -0
  219. package/build/ports/eventsourcing/index.js +101 -0
  220. package/build/ports/eventsourcing/index.js.map +1 -0
  221. package/build/ports/eventsourcing/invariants/combinators.d.ts +4 -0
  222. package/build/ports/eventsourcing/invariants/combinators.d.ts.map +1 -0
  223. package/build/ports/eventsourcing/invariants/combinators.js +20 -0
  224. package/build/ports/eventsourcing/invariants/combinators.js.map +1 -0
  225. package/build/ports/eventsourcing/invariants/common.d.ts +10 -0
  226. package/build/ports/eventsourcing/invariants/common.d.ts.map +1 -0
  227. package/build/ports/eventsourcing/invariants/common.js +37 -0
  228. package/build/ports/eventsourcing/invariants/common.js.map +1 -0
  229. package/build/ports/eventsourcing/invariants/comparisons.d.ts +19 -0
  230. package/build/ports/eventsourcing/invariants/comparisons.d.ts.map +1 -0
  231. package/build/ports/eventsourcing/invariants/comparisons.js +83 -0
  232. package/build/ports/eventsourcing/invariants/comparisons.js.map +1 -0
  233. package/build/ports/eventsourcing/invariants/index.d.ts +5 -0
  234. package/build/ports/eventsourcing/invariants/index.d.ts.map +1 -0
  235. package/build/ports/eventsourcing/invariants/index.js +21 -0
  236. package/build/ports/eventsourcing/invariants/index.js.map +1 -0
  237. package/build/ports/eventsourcing/invariants/stateExistance.d.ts +4 -0
  238. package/build/ports/eventsourcing/invariants/stateExistance.d.ts.map +1 -0
  239. package/build/ports/eventsourcing/invariants/stateExistance.js +33 -0
  240. package/build/ports/eventsourcing/invariants/stateExistance.js.map +1 -0
  241. package/build/ports/eventsourcing/subscriptions/index.d.ts +2 -0
  242. package/build/ports/eventsourcing/subscriptions/index.d.ts.map +1 -0
  243. package/build/ports/eventsourcing/subscriptions/index.js +18 -0
  244. package/build/ports/eventsourcing/subscriptions/index.js.map +1 -0
  245. package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts +3 -0
  246. package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts.map +1 -0
  247. package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js +81 -0
  248. package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js.map +1 -0
  249. package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts +4 -0
  250. package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts.map +1 -0
  251. package/build/ports/eventsourcing/utils/aggregateBuilder.js +45 -0
  252. package/build/ports/eventsourcing/utils/aggregateBuilder.js.map +1 -0
  253. package/build/ports/eventsourcing/utils/commandBuilder.d.ts +3 -0
  254. package/build/ports/eventsourcing/utils/commandBuilder.d.ts.map +1 -0
  255. package/build/ports/eventsourcing/utils/commandBuilder.js +102 -0
  256. package/build/ports/eventsourcing/utils/commandBuilder.js.map +1 -0
  257. package/build/ports/eventsourcing/utils/eventHandlerBuilder.d.ts +3 -0
  258. package/build/ports/eventsourcing/utils/eventHandlerBuilder.d.ts.map +1 -0
  259. package/build/ports/eventsourcing/utils/eventHandlerBuilder.js +19 -0
  260. package/build/ports/eventsourcing/utils/eventHandlerBuilder.js.map +1 -0
  261. package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts +4 -0
  262. package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts.map +1 -0
  263. package/build/ports/eventsourcing/utils/externalSystemBuilder.js +34 -0
  264. package/build/ports/eventsourcing/utils/externalSystemBuilder.js.map +1 -0
  265. package/build/ports/eventsourcing/utils/index.d.ts +13 -0
  266. package/build/ports/eventsourcing/utils/index.d.ts.map +1 -0
  267. package/build/ports/eventsourcing/utils/index.js +45 -0
  268. package/build/ports/eventsourcing/utils/index.js.map +1 -0
  269. package/build/ports/eventsourcing/utils/policyBuilder.d.ts +3 -0
  270. package/build/ports/eventsourcing/utils/policyBuilder.d.ts.map +1 -0
  271. package/build/ports/eventsourcing/utils/policyBuilder.js +29 -0
  272. package/build/ports/eventsourcing/utils/policyBuilder.js.map +1 -0
  273. package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts +5 -0
  274. package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts.map +1 -0
  275. package/build/ports/eventsourcing/utils/readmodelBuilder.js +45 -0
  276. package/build/ports/eventsourcing/utils/readmodelBuilder.js.map +1 -0
  277. package/build/ports/eventstore/index.d.ts +3 -0
  278. package/build/ports/eventstore/index.d.ts.map +1 -0
  279. package/build/ports/eventstore/index.js +13 -0
  280. package/build/ports/eventstore/index.js.map +1 -0
  281. package/build/ports/infrastructure/__tests__/fixture/index.d.ts +3 -0
  282. package/build/ports/infrastructure/__tests__/fixture/index.d.ts.map +1 -0
  283. package/build/ports/infrastructure/__tests__/fixture/index.js +19 -0
  284. package/build/ports/infrastructure/__tests__/fixture/index.js.map +1 -0
  285. package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts +19 -0
  286. package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts.map +1 -0
  287. package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js +76 -0
  288. package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js.map +1 -0
  289. package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts +177 -0
  290. package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts.map +1 -0
  291. package/build/ports/infrastructure/__tests__/fixture/structureState.js +258 -0
  292. package/build/ports/infrastructure/__tests__/fixture/structureState.js.map +1 -0
  293. package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts +2 -0
  294. package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts.map +1 -0
  295. package/build/ports/infrastructure/__tests__/infrastructure.test.js +11 -0
  296. package/build/ports/infrastructure/__tests__/infrastructure.test.js.map +1 -0
  297. package/build/ports/infrastructure/index.d.ts +53 -0
  298. package/build/ports/infrastructure/index.d.ts.map +1 -0
  299. package/build/ports/infrastructure/index.js +149 -0
  300. package/build/ports/infrastructure/index.js.map +1 -0
  301. package/build/ports/infrastructure/utils.d.ts +14 -0
  302. package/build/ports/infrastructure/utils.d.ts.map +1 -0
  303. package/build/ports/infrastructure/utils.js +126 -0
  304. package/build/ports/infrastructure/utils.js.map +1 -0
  305. package/build/ports/logger/index.d.ts +3 -0
  306. package/build/ports/logger/index.d.ts.map +1 -0
  307. package/build/ports/logger/index.js +32 -0
  308. package/build/ports/logger/index.js.map +1 -0
  309. package/build/utils/index.d.ts +35 -0
  310. package/build/utils/index.d.ts.map +1 -0
  311. package/build/utils/index.js +190 -0
  312. package/build/utils/index.js.map +1 -0
  313. package/package.json +28 -0
  314. package/src/adapters/cache/index.ts +1 -0
  315. package/src/adapters/cache/memory/__tests__/memoryCache.test.ts +6 -0
  316. package/src/adapters/cache/memory/index.ts +142 -0
  317. package/src/adapters/configuration/__tests__/.env +4 -0
  318. package/src/adapters/configuration/__tests__/dotEnv.test.ts +38 -0
  319. package/src/adapters/configuration/dotEnv.ts +33 -0
  320. package/src/adapters/configuration/index.ts +1 -0
  321. package/src/adapters/database/index.ts +1 -0
  322. package/src/adapters/database/memory/__tests__/memoryDb.test.ts +37 -0
  323. package/src/adapters/database/memory/index.ts +279 -0
  324. package/src/adapters/endpoints/addAuthUser/index.ts +55 -0
  325. package/src/adapters/endpoints/endpointValidation/index.ts +26 -0
  326. package/src/adapters/endpoints/index.ts +4 -0
  327. package/src/adapters/endpoints/localAuthorization/index.ts +75 -0
  328. package/src/adapters/endpoints/tcpConsumer/index.ts +69 -0
  329. package/src/adapters/endpoints/userSession/index.ts +40 -0
  330. package/src/adapters/eventstore/database.ts +178 -0
  331. package/src/adapters/eventstore/index.ts +1 -0
  332. package/src/adapters/infrastructure/index.ts +1 -0
  333. package/src/adapters/infrastructure/local/index.ts +40 -0
  334. package/src/adapters/logger/console.ts +42 -0
  335. package/src/adapters/logger/index.ts +1 -0
  336. package/src/index.ts +25 -0
  337. package/src/libraries/modules/fs.ts +88 -0
  338. package/src/libraries/modules/index.ts +1 -0
  339. package/src/libraries/openApi/index.ts +1 -0
  340. package/src/libraries/openApi/pruneUnusedRef.ts +35 -0
  341. package/src/libraries/tcp/index.ts +98 -0
  342. package/src/libraries/tcp/types.ts +43 -0
  343. package/src/libraries/validation/__tests__/validation.test.ts +25 -0
  344. package/src/libraries/validation/index.ts +48 -0
  345. package/src/ports/authentication/index.ts +25 -0
  346. package/src/ports/base.ts +20 -0
  347. package/src/ports/cache/index.ts +17 -0
  348. package/src/ports/configuration/__tests__/configurationPort.test.ts +47 -0
  349. package/src/ports/configuration/args.ts +39 -0
  350. package/src/ports/configuration/common.ts +12 -0
  351. package/src/ports/configuration/index.ts +110 -0
  352. package/src/ports/configuration/localConfig.ts +117 -0
  353. package/src/ports/database/index.ts +25 -0
  354. package/src/ports/endpoints/__tests__/endpointsCall.test.ts +20 -0
  355. package/src/ports/endpoints/__tests__/test-client-library/base.ts +167 -0
  356. package/src/ports/endpoints/__tests__/test-client-library/index.ts +23 -0
  357. package/src/ports/endpoints/__tests__/test-client-library/services/service.ts +181 -0
  358. package/src/ports/endpoints/__tests__/utils.test.ts +54 -0
  359. package/src/ports/endpoints/index.ts +272 -0
  360. package/src/ports/endpoints/openApi.ts +191 -0
  361. package/src/ports/endpoints/utils.ts +31 -0
  362. package/src/ports/eventsourcing/__tests__/eventhandlers.test.ts +30 -0
  363. package/src/ports/eventsourcing/__tests__/invariants.test.ts +213 -0
  364. package/src/ports/eventsourcing/commandHandlers/index.ts +625 -0
  365. package/src/ports/eventsourcing/commandTemplates/index.ts +2 -0
  366. package/src/ports/eventsourcing/commandTemplates/multiStream.ts +70 -0
  367. package/src/ports/eventsourcing/commandTemplates/snapshot.ts +43 -0
  368. package/src/ports/eventsourcing/eventHandlers/index.ts +429 -0
  369. package/src/ports/eventsourcing/index.ts +98 -0
  370. package/src/ports/eventsourcing/invariants/combinators.ts +25 -0
  371. package/src/ports/eventsourcing/invariants/common.ts +42 -0
  372. package/src/ports/eventsourcing/invariants/comparisons.ts +90 -0
  373. package/src/ports/eventsourcing/invariants/index.ts +4 -0
  374. package/src/ports/eventsourcing/invariants/stateExistance.ts +34 -0
  375. package/src/ports/eventsourcing/subscriptions/index.ts +1 -0
  376. package/src/ports/eventsourcing/subscriptions/sseSubscriptions.ts +103 -0
  377. package/src/ports/eventsourcing/utils/aggregateBuilder.ts +49 -0
  378. package/src/ports/eventsourcing/utils/commandBuilder.ts +113 -0
  379. package/src/ports/eventsourcing/utils/eventHandlerBuilder.ts +22 -0
  380. package/src/ports/eventsourcing/utils/externalSystemBuilder.ts +42 -0
  381. package/src/ports/eventsourcing/utils/index.ts +25 -0
  382. package/src/ports/eventsourcing/utils/policyBuilder.ts +31 -0
  383. package/src/ports/eventsourcing/utils/readmodelBuilder.ts +52 -0
  384. package/src/ports/eventstore/index.ts +11 -0
  385. package/src/ports/infrastructure/__tests__/fixture/index.ts +2 -0
  386. package/src/ports/infrastructure/__tests__/fixture/infrastructureServices.ts +72 -0
  387. package/src/ports/infrastructure/__tests__/fixture/structureState.ts +254 -0
  388. package/src/ports/infrastructure/__tests__/infrastructure.test.ts +11 -0
  389. package/src/ports/infrastructure/index.ts +162 -0
  390. package/src/ports/infrastructure/utils.ts +130 -0
  391. package/src/ports/logger/index.ts +34 -0
  392. package/src/utils/index.ts +186 -0
  393. package/tsconfig.json +19 -0
@@ -0,0 +1,90 @@
1
+ import { noop, safePromise } from '@bett3r-dev/bett3r-utils';
2
+ import S from '@bett3r-dev/jsonschema-definer';
3
+ import { CommandHandlerState, DatabaseOps, EndpointsPort, InvariantParams, InvariantType, ReadmodelInvariantComparison, filterOpMap } from '@bett3r-dev/pv3-types';
4
+ import { equals, path } from 'ramda';
5
+ import { createInvariant } from '.';
6
+
7
+ const compareCheck = ( val1:any, val2:any, op: DatabaseOps ) => {
8
+ return filterOpMap[op]( val1, val2 );
9
+ };
10
+
11
+ export const comparePaths = ( params: InvariantParams & { path1: string | (( state:CommandHandlerState ) => any ) ; path2?: string | (( data:CommandHandlerState ) => any ), op: DatabaseOps }): InvariantType => {
12
+ const { path1, path2, op } = params;
13
+ return createInvariant(
14
+ async ( handlerState: CommandHandlerState ) => {
15
+ const path1Value = typeof path1 === 'string' ? path( path1.split( '.' ), handlerState ) : path1( handlerState );
16
+ const path2Value = path2 && ( typeof path2 === 'string' ? path( path2.split( '.' ), handlerState ) : path2( handlerState ));
17
+ return safePromise( equals( true ), compareCheck( path1Value, path2Value, op )).then( noop ) ;
18
+ }, {
19
+ name: 'Invariant Error',
20
+ description: `Comparison failed on paths for operation ${op}`,
21
+ details: { path1, path2 },
22
+ type: 'BadRequestError',
23
+ schema: S.shape({
24
+ path1: S.string(),
25
+ path2: S.string(),
26
+ })
27
+ }
28
+ );
29
+ };
30
+
31
+ export const compareWithValue = ( params: InvariantParams & { path: string; value: any, op: DatabaseOps }): InvariantType => {
32
+ const { path: path1, value, op } = params;
33
+ return createInvariant(
34
+ async ( handlerState: CommandHandlerState ) => {
35
+ const path1Value = path( path1.split( '.' ), handlerState );
36
+ return safePromise( equals( true ), compareCheck( path1Value, value, op )).then( noop ) ;
37
+ }, {
38
+ name: 'Invariant Error',
39
+ description: `Comparison failed with value ${value} for operation ${op}`,
40
+ details: { path: path1 },
41
+ type: 'BadRequestError',
42
+ schema: S.shape({
43
+ path: S.string()
44
+ })
45
+ }
46
+ );
47
+ };
48
+
49
+ const checkReadmodelFilter = ( pathValue: any, readmodelValue:any, filter: ReadmodelInvariantComparison ) => {
50
+ if ( filter.OR ) {
51
+ return filter.OR.some(( _filter ) => checkReadmodelFilter( pathValue, readmodelValue, _filter ));
52
+ }
53
+ else if ( filter.AND ) {
54
+ return filter.AND.every(( _filter ) => checkReadmodelFilter( pathValue, readmodelValue, _filter ));
55
+ }
56
+ return compareCheck( pathValue, readmodelValue, filter.op! );
57
+ };
58
+
59
+ export const compareWithReadmodel = ( params: InvariantParams & {
60
+ endpoints: EndpointsPort;
61
+ readmodelBaseUrl: string;
62
+ comparisons: ReadmodelInvariantComparison[];
63
+ url: ( handlerState: CommandHandlerState ) => string;
64
+ }
65
+ ): InvariantType => {
66
+ const { endpoints, readmodelBaseUrl, comparisons, url } = params;
67
+ return createInvariant(
68
+ async ( handlerState: CommandHandlerState ) => {
69
+ const requestPath = `${readmodelBaseUrl}${url( handlerState )}`;
70
+ return endpoints.get( requestPath ).then(( response: any[]) => {
71
+ if ( !response || !response.length || !comparisons.every(( comparison ) => {
72
+ const dataValue = path(( comparison.path as string ).split( '.' ), handlerState );
73
+ return checkReadmodelFilter( dataValue, path(( comparison.readmodelPath as string ).split( '.' ), response[0]), comparison );
74
+ }))
75
+ return Promise.reject({
76
+ details: { readmodelUrl: requestPath },
77
+ description: `Comparison failed with readmodel ${requestPath}`
78
+ });
79
+ return Promise.resolve();
80
+ });
81
+ }, {
82
+ name: 'Invariant Error',
83
+ description: 'Invariant Validation Failed',
84
+ type: 'BadRequestError',
85
+ schema: S.shape({
86
+ readmodelUrl: S.string(),
87
+ })
88
+ }
89
+ );
90
+ };
@@ -0,0 +1,4 @@
1
+ export * from './common';
2
+ export * from './combinators';
3
+ export * from './comparisons';
4
+ export * from './stateExistance';
@@ -0,0 +1,34 @@
1
+ import { InvariantParams, InvariantType } from '@bett3r-dev/pv3-types';
2
+ import { createInvariant } from '.';
3
+
4
+ export const stateExists = ( params?: InvariantParams ): InvariantType => {
5
+ return createInvariant(
6
+ async ( handlerState ) => {
7
+ return handlerState.state
8
+ ? Promise.resolve()
9
+ : Promise.reject({
10
+ description: `Expected State in aggregate ${handlerState.commandHandler.name}`,
11
+ details: { requested: handlerState.stream }
12
+ });
13
+ },{
14
+ name: params?.errorName || `State Does Not Exists`,
15
+ type: params?.errorType || 'BadRequestError'
16
+ }
17
+ );
18
+ };
19
+
20
+ export const stateNotExists = ( params?: InvariantParams ): InvariantType => {
21
+ return createInvariant(
22
+ async ( handlerState ) => {
23
+ return !handlerState.state
24
+ ? Promise.resolve()
25
+ : Promise.reject({
26
+ description: `Unexpected State in aggregate ${handlerState.commandHandler.name}`,
27
+ details: { requested: handlerState.stream },
28
+ });
29
+ },{
30
+ name: params?.errorName || `Unexpected State`,
31
+ type: params?.errorType || 'BadRequestError'
32
+ }
33
+ );
34
+ };
@@ -0,0 +1 @@
1
+ export * from './sseSubscriptions';
@@ -0,0 +1,103 @@
1
+ import { ensureArray } from '@bett3r-dev/bett3r-utils';
2
+ import { CollectionQueryParams, DatabaseChange, Document, filterOpMap, LoggerType, ReadmodelChange, ReadModelSubscription, ReadModelSubscriptionCloseEmitterEvents, ReadmodelSubscriptionManagerType, RequestObject, ResponseObject, TypedEventEmitter } from '@bett3r-dev/pv3-types';
3
+ import { randomUUID } from 'crypto';
4
+
5
+ export const SSESubscriptions = (): ReadmodelSubscriptionManagerType => {
6
+ const subscriptions: Record<string, ReadModelSubscription> = {};
7
+ const readModelSubscriptionCloseEmitter = new TypedEventEmitter<ReadModelSubscriptionCloseEmitterEvents>();
8
+
9
+ const send = ( logger:LoggerType, id: string, change:DatabaseChange,collection: string, res: ResponseObject, data: string ): void => {
10
+ logger.log( 'Sending SSE event in subscription', id, 'for', change.changeType, collection, change.data.id || change.previous.id );
11
+ res.raw.write( `data: ${data}\n\n` );
12
+ };
13
+
14
+ const subscriptionIncludes = ( s: ReadModelSubscription, data: any ) => {
15
+ return (
16
+ !s.filter ||
17
+ s.filter.every(( filter ) =>
18
+ filterOpMap[filter.op as string]( data[filter.field as string], filter.value )
19
+ )
20
+ );
21
+ };
22
+
23
+ const notifySubscriptions = ( logger: LoggerType, collection: string ) => <T>( change: DatabaseChange, subscriptionId?: string ) => {
24
+ if ( !change.data ) return;
25
+ setImmediate(() => {
26
+ const message = JSON.stringify({
27
+ type: change.changeType,
28
+ data: change.data,
29
+ } as ReadmodelChange<any> );
30
+ // if ( subscriptionId ){
31
+
32
+ // }
33
+ Object.values( subscriptions ).forEach(( s ) => {
34
+ if (( change.changeType === 'delete' && subscriptionIncludes( s, change.previous ))
35
+ || ([ 'insert', 'update' ].includes( change.changeType ) && subscriptionIncludes( s, change.data ))
36
+ || ( change.changeType === 'update' && subscriptionIncludes( s, change.previous ))
37
+ ){
38
+ send( logger, s.id, change, collection, s.res, message );
39
+ }
40
+ });
41
+ });
42
+ };
43
+
44
+ const initSubscription = (
45
+ req: RequestObject,
46
+ res: ResponseObject,
47
+ id: string
48
+ ): void => {
49
+ const headers = {
50
+ 'Content-Type': 'text/event-stream',
51
+ 'Connection': 'keep-alive',
52
+ 'Cache-Control': 'no-cache',
53
+ 'X-Accel-Buffering': 'no'
54
+ };
55
+
56
+ // FIXME: Como puedo detectar que el request viene de nginx?
57
+ if ( !req.headers['asdf']){
58
+ headers['Access-Control-Allow-Origin'] = '*';
59
+ }
60
+
61
+ res.raw.writeHead( 200, headers );
62
+ res.raw.write( `data: Connected\n\n` );
63
+ req.raw.on( 'close', () => {
64
+ readModelSubscriptionCloseEmitter.emit( 'close', id );
65
+ delete subscriptions[id];
66
+ });
67
+ };
68
+
69
+ const createSubscription = <Model extends Document = any>(
70
+ res: ResponseObject,
71
+ conditions: CollectionQueryParams<Model>
72
+ ): string => {
73
+ const id = randomUUID();
74
+ const newSubscription: ReadModelSubscription = {
75
+ id: id,
76
+ res,
77
+ filter: conditions.filter || []
78
+ };
79
+ subscriptions[id] = newSubscription;
80
+ return id;
81
+ };
82
+
83
+ const startSubscription = <Model extends Document>(
84
+ projectionParams: CollectionQueryParams<Model>,
85
+ req: RequestObject,
86
+ res: ResponseObject
87
+ ) => {
88
+ if ( ensureArray( req?.headers?.accept ).includes( 'text/event-stream' )){
89
+ const id = createSubscription( res, projectionParams );
90
+ initSubscription( req, res, id );
91
+ return id;
92
+ }
93
+ };
94
+
95
+ return {
96
+ type: 'SSE',
97
+ startSubscription,
98
+ notifySubscriptions,
99
+ readModelSubscriptionCloseEmitter,
100
+ send
101
+ };
102
+ };
103
+
@@ -0,0 +1,49 @@
1
+ import { BaseSchema } from '@bett3r-dev/jsonschema-definer';
2
+ import { Aggregate, AggregateBuilderType, Command, DatabasePort, EventFactory, EventReducers } from '@bett3r-dev/pv3-types';
3
+ import { ExternalSystemBuilder } from './externalSystemBuilder';
4
+
5
+ export const AggregateBuilder = <Model, EVENTS extends Record<string, EventFactory>>( schema: BaseSchema<Model>, events: EVENTS, aggregate = {} as Aggregate ): AggregateBuilderType<Model, EVENTS> => {
6
+ const { system, ...builder } = ExternalSystemBuilder( events, schema, aggregate );
7
+ aggregate = system as Aggregate;
8
+ aggregate.schema = schema;
9
+ aggregate.initialValue = () => undefined;
10
+
11
+ const notEventsourced = ( database: DatabasePort, collection: string ) =>{
12
+ aggregate.isEventsourced = false;
13
+ aggregate.outboxDatabase = database;
14
+ aggregate.outboxCollection = collection;
15
+ return _builder;
16
+ };
17
+
18
+ const withCommandTemplate = ( command: Command ) => {
19
+ builder.withCommandTemplate( command );
20
+ return _builder;
21
+ };
22
+
23
+ const initialValue = ( init: () => ( Partial<Model> | null | undefined )) => {
24
+ aggregate.initialValue = init;
25
+ return {
26
+ withEventReducers: withEventReducers( events ),
27
+ withCommands: _builder.withCommands
28
+ };
29
+ };
30
+
31
+ const withEventReducers = <Events extends Record<string, EventFactory>>( events: Events ) => ( eventReducers: EventReducers<Events, Model> ) => {
32
+ aggregate.eventReducers = eventReducers;
33
+ return {
34
+ withCommands: _builder.withCommands
35
+ };
36
+ };
37
+
38
+ const _builder = {
39
+ ...builder,
40
+ notEventsourced,
41
+ withCommandTemplate,
42
+ withEventReducers: withEventReducers( events ),
43
+ withCommands: builder.withCommands,
44
+ initialValue,
45
+ system: aggregate
46
+ };
47
+
48
+ return _builder;
49
+ };
@@ -0,0 +1,113 @@
1
+ import { BaseSchema } from '@bett3r-dev/jsonschema-definer';
2
+ import { Command, CommandBuilderType, CommandCommitFunction, CommandErrorHandlerFunction, CommandFormatFunction, CommandHandlerFunction, CommandLoadFunction, EventFactory, InvariantType } from '@bett3r-dev/pv3-types';
3
+
4
+ export const CommandBuilder = ( systemLevelInit?: Omit<Command, 'handler' | 'events' | 'schema'> ): CommandBuilderType => <Model, EVENTS extends Record<string, EventFactory>>( init?: Omit<Command, 'handler' | 'events' | 'schema'> ) => {
5
+ const command = {
6
+ ...systemLevelInit,
7
+ ...init
8
+ } as Command;
9
+
10
+ const withDescription = ( description: string ) => {
11
+ command.description = description;
12
+ return builder;
13
+ };
14
+
15
+ const allowingActors = ( actors: string[]) => {
16
+ command.actors = actors;
17
+ return builder;
18
+ };
19
+
20
+ const withDataPropertyId = ( dataPath: string ) => {
21
+ command.dataPropertyId = dataPath;
22
+ return builder;
23
+ };
24
+
25
+ const withSchema = <Payload>( schema: BaseSchema<Payload> ) => {
26
+ command.schema = schema;
27
+ return {
28
+ withInvariant: withInvariant( schema ),
29
+ produces: produces( schema ),
30
+ withResultFormatFunction: withResultFormatFunction( schema ),
31
+ withLoadFunction: withLoadFunction( schema ),
32
+ withCommitFunction: withCommitFunction( schema ),
33
+ };
34
+ };
35
+
36
+ const withInvariant = <Payload>( schema: BaseSchema<Payload> ) => ( invariant: InvariantType<Model, Payload> ) => {
37
+ command.events = [ ...( command.events || []), ...( invariant.events || []) ];
38
+ command.invariants = [ ...( command.invariants || []), invariant ];
39
+ return {
40
+ withInvariant: withInvariant( schema ),
41
+ produces: produces( schema ),
42
+ withLoadFunction: withLoadFunction( schema ),
43
+ withCommitFunction: withCommitFunction( schema ),
44
+ withResultFormatFunction: withResultFormatFunction( schema ),
45
+ };
46
+ };
47
+
48
+ const withLoadFunction = <Payload>( schema: BaseSchema<Payload> ) =>( loadFunction: CommandLoadFunction<Model,Payload> ) => {
49
+ command.load = loadFunction;
50
+ return {
51
+ withLoadFunction: withLoadFunction( schema ),
52
+ withCommitFunction: withCommitFunction( schema ),
53
+ withResultFormatFunction: withResultFormatFunction( schema ),
54
+ produces: produces( schema ),
55
+ withInvariant: withInvariant( schema ),
56
+ };
57
+ };
58
+
59
+ const withCommitFunction = <Payload>( schema: BaseSchema<Payload> ) => ( commitFunction: CommandCommitFunction<Model, Payload> ) => {
60
+ command.commit = commitFunction;
61
+ return {
62
+ withLoadFunction: withLoadFunction( schema ),
63
+ withCommitFunction: withCommitFunction( schema ),
64
+ withResultFormatFunction: withResultFormatFunction( schema ),
65
+ produces: produces( schema ),
66
+ withInvariant: withInvariant( schema ),
67
+ };
68
+ };
69
+
70
+ const withResultFormatFunction = <Payload>( schema: BaseSchema<Payload> ) => ( resultFormatFunction: CommandFormatFunction<Model, Payload> ) => {
71
+ command.format = resultFormatFunction;
72
+ return {
73
+ withLoadFunction: withLoadFunction( schema ),
74
+ withCommitFunction: withCommitFunction( schema ),
75
+ withResultFormatFunction: withResultFormatFunction( schema ),
76
+ produces: produces( schema ),
77
+ withInvariant: withInvariant( schema ),
78
+ };
79
+ };
80
+
81
+ const produces = <Payload>( schema: BaseSchema<Payload> ) => <EVENT extends keyof EVENTS>( events: EVENT[]) => {
82
+ command.events = [ ...( command.events || []), ...events ];
83
+ return {
84
+ withHandler: withHandler( events )( schema ),
85
+ withErrorHandler: withErrorHandler( events )( schema ),
86
+ build: () => command as Command<EVENTS, EVENT, Model, Payload>
87
+ };
88
+ };
89
+
90
+ const withHandler = <EVENT extends keyof EVENTS>( events: EVENT[]) => <CommandPayload>( schema: BaseSchema<CommandPayload> ) => <USER>( handler: CommandHandlerFunction<Model, CommandPayload, EVENTS, EVENT, USER> ) => {
91
+ ( command as Command<EVENTS, EVENT, Model, CommandPayload> ).handler = handler;
92
+ return {
93
+ withErrorHandler: withErrorHandler( events )( schema ),
94
+ build: () => command as Command<EVENTS, EVENT, Model, CommandPayload>
95
+ };
96
+ };
97
+
98
+ const withErrorHandler = <EVENT extends keyof EVENTS>( events: EVENT[]) => <Payload>( schema: BaseSchema<Payload> ) => ( onErrorHandler: CommandErrorHandlerFunction<Payload> ) => {
99
+ command.onErrorHandler = onErrorHandler;
100
+ return {
101
+ build: () => command as Command<EVENTS, any, Model, Payload>
102
+ };
103
+ };
104
+
105
+ const builder = {
106
+ withSchema,
107
+ withDataPropertyId,
108
+ allowingActors,
109
+ withDescription,
110
+ };
111
+
112
+ return builder;
113
+ };
@@ -0,0 +1,22 @@
1
+ import { ObjectSchema } from '@bett3r-dev/jsonschema-definer';
2
+ import { AppErrorInstance, CommittedEvent, Document, EventFactory, EventHandler, EventHandlerBuilderType, GetMessageType, Policy, ReadModel } from '@bett3r-dev/pv3-types';
3
+
4
+ export const eventHandlerBuilder = <EVENTS extends Record<string, EventFactory>, T extends Policy | ReadModel>( eventHandler = {} as EventHandler<EVENTS> ): EventHandlerBuilderType<EVENTS, T> => {
5
+ const withErrorHandlers = ( errorHandlers: {
6
+ [Name in keyof EVENTS]?: ( error: AppErrorInstance, event: CommittedEvent<GetMessageType<EVENTS[Name]>> ) => Promise<unknown>
7
+ }) => {
8
+ eventHandler.errorHandlers = errorHandlers;
9
+ return { build };
10
+ };
11
+
12
+ const build = () => eventHandler as T extends Policy ? Policy<T['commandHandler'], EVENTS> : T extends ReadModel ? ReadModel<T['schema'] extends ObjectSchema<infer MODEL extends Document> ? MODEL: Document, EVENTS> : any;
13
+ // const build = () => eventHandler;
14
+
15
+ const builder: EventHandlerBuilderType<EVENTS, T> = {
16
+ eventHandler,
17
+ withErrorHandlers,
18
+ build
19
+ };
20
+
21
+ return builder;
22
+ };
@@ -0,0 +1,42 @@
1
+ import { BaseSchema } from '@bett3r-dev/jsonschema-definer';
2
+ import { Builder, Command, CommandBuilderType, EventFactory, ExternalSystemBuilderType, System } from '@bett3r-dev/pv3-types';
3
+ import { createEvent } from '../../../utils';
4
+ import { CommandBuilder } from './commandBuilder';
5
+ import { getStackTrace } from '.';
6
+
7
+ export const ExternalSystemBuilder = <Model, EVENTS extends Record<string, EventFactory>>( events: EVENTS, schema?: BaseSchema<Model>, system = {} as System ): ExternalSystemBuilderType<Model, EVENTS> => {
8
+ const isAggregate = !!schema;
9
+ const name = system.name || getStackTrace();
10
+ system = { ...system, name, events, isAggregate, isStreamable: isAggregate || system.isStreamable } as System;
11
+ system.isEventsourced = true;
12
+
13
+ const withCommandTemplate = ( command: Command ) => {
14
+ system.templateCommand = command;
15
+ return builder;
16
+ };
17
+
18
+ /**
19
+ * This is the last function that builds the aggregate, the last function you'll call
20
+ */
21
+ const withCommands = <
22
+ EVENT extends keyof EVENTS,
23
+ Commands extends Record<string, Command<EVENTS, EVENT, Model> | Builder<Command<EVENTS, EVENT, Model>>>
24
+ > ( commands: ( params: {
25
+ commandBuilder: CommandBuilderType<Model, EVENTS>,
26
+ createEvent: ReturnType<typeof createEvent< System< any, EVENTS >>>,
27
+ }) => Commands ): System<Commands, EVENTS> => {
28
+ system.commands = commands({
29
+ commandBuilder: CommandBuilder( system.templateCommand ),
30
+ createEvent: createEvent<System<any, EVENTS>>( system ),
31
+ });
32
+ return system;
33
+ };
34
+
35
+ const builder = {
36
+ system,
37
+ withCommandTemplate,
38
+ withCommands
39
+ };
40
+
41
+ return builder;
42
+ };
@@ -0,0 +1,25 @@
1
+ import path from 'path';
2
+ import { curry } from 'ramda';
3
+
4
+ export * from './aggregateBuilder';
5
+ export * from './commandBuilder';
6
+ export * from './externalSystemBuilder';
7
+ export * from './policyBuilder';
8
+ export * from './readmodelBuilder';
9
+
10
+ export const formatStream = curry(( aggreateOrSystem:string, id: string ) => `${aggreateOrSystem}${id ? `-${ id}` : ''}` );
11
+ export const getIdFromStream = ( stream: string ) => stream.slice( stream.indexOf( '-' ) + 1 );
12
+ export const extractIdFromEventStream = ( event: {stream: string}) => getIdFromStream( event.stream );
13
+
14
+
15
+ export const getStackTrace = () => {
16
+ const e = Error( 'ReadModelBuilder' );
17
+ const line = e.stack?.split( '\n' ).find(( l ) => /\.(readmodel|aggregate|system|externalSystem|policy)\.(t|j)s:/.test( l ));
18
+ const file = line?.match( /[\/\\].+?\.(j|t)s/g )?.[0];
19
+ if ( !file ){
20
+ // FIXME: que deberiamos hacer con esto?
21
+ throw Error( 'Artifact Found!!!!!!!!!!!!!!!!!' );
22
+ }
23
+ const f = path.basename( file );
24
+ return f.replace( /\..+$/, '' );
25
+ };
@@ -0,0 +1,31 @@
1
+ import { CommandInstance, CommittedEvent, EventFactory, GetMessageType, Policy, PolicyBuilderType, System, createCommand } from '@bett3r-dev/pv3-types';
2
+ import { eventHandlerBuilder } from './eventHandlerBuilder';
3
+ import { getStackTrace } from '.';
4
+
5
+ export const PolicyBuilder = <EVENTS extends Record<string, EventFactory>, CommandHandler extends System>( events: EVENTS, commandHandler?: CommandHandler, policy = {} as Policy ): PolicyBuilderType<CommandHandler, EVENTS> => {
6
+ const { eventHandler, ...builder } = eventHandlerBuilder<EVENTS, Policy<CommandHandler, EVENTS>>( policy );
7
+ policy = eventHandler as Policy<CommandHandler, EVENTS>;
8
+ policy.name = getStackTrace();
9
+ policy.events = events;
10
+ policy.commandHandler = commandHandler;
11
+
12
+ const withEventHandlers = ( handlers: ( params: {createCommand: ReturnType<typeof createCommand<CommandHandler>>}) => {
13
+ [Name in keyof EVENTS]: ( event: CommittedEvent<GetMessageType<EVENTS[Name]>> ) => Promise<CommandInstance|void>
14
+ }) => {
15
+ policy.eventHandlers = handlers({
16
+ createCommand: createCommand<CommandHandler>( commandHandler as CommandHandler )
17
+ });
18
+ return _builder;
19
+ };
20
+
21
+ const build = () => policy as Policy<CommandHandler, EVENTS>;
22
+
23
+ const _builder = {
24
+ ...builder,
25
+ withEventHandlers,
26
+ eventHandler: policy,
27
+ build
28
+ };
29
+
30
+ return _builder;
31
+ };
@@ -0,0 +1,52 @@
1
+ import { ObjectSchema } from '@bett3r-dev/jsonschema-definer';
2
+ import { Collection, CommittedEvent, DatabasePort, Document, EventFactory, EventProjectors, Query, ReadModel, ReadModelDefaultParams, ReadModelDefaultQuery, ReadmodelBuilderType } from '@bett3r-dev/pv3-types';
3
+ import { path, pick } from 'ramda';
4
+ import { eventHandlerBuilder } from './eventHandlerBuilder';
5
+ import { getStackTrace } from '.';
6
+ import { pascalCase } from 'change-case';
7
+
8
+ export const mergeReducer = <Model extends Document>( collection: Collection<Model>, idPathOrFunction: string | (( event: CommittedEvent ) => string | number ), includeId = true ) => async ( event: CommittedEvent ) => {
9
+ const id = typeof idPathOrFunction === 'string' ? path( idPathOrFunction.split( '.' ), event ) : idPathOrFunction( event );
10
+ return collection.upsert( id as string, { ...( includeId ? { id } : {}), ...event.data, lastEvent: pick([ 'id', 'name', 'version' ], event ) });
11
+ };
12
+
13
+ export const ReadModelBuilder = <Model extends Document, EVENTS extends Record<string, EventFactory>>( schema: ObjectSchema<Model>, events: EVENTS, readmodel = {} as ReadModel<Model, EVENTS> ): ReadmodelBuilderType<Model, EVENTS> => {
14
+ // ApplicationsReadModel
15
+ // applications-readmodel
16
+ readmodel.name = readmodel.name || pascalCase( `${getStackTrace()}ReadModel` );
17
+ const { eventHandler, ...builder } = eventHandlerBuilder<EVENTS, ReadModel>( readmodel );
18
+ readmodel = eventHandler as ReadModel<Model, EVENTS>;
19
+ readmodel.isReadModel = true;
20
+ readmodel.schema = schema;
21
+ readmodel.events = events;
22
+
23
+ const withDatabase = ( database: DatabasePort, collection?:string ) => {
24
+ readmodel.database = database;
25
+ readmodel.collection = collection || readmodel.name;
26
+ return _builder;
27
+ };
28
+
29
+ const withProjector = ( eventProjectors?: ( params: {database: DatabasePort, collection:string}) => EventProjectors<EVENTS> ) => {
30
+ readmodel.eventProjectors = eventProjectors ? eventProjectors({ database: readmodel.database!, collection: readmodel.collection! }) : {} as EventProjectors<EVENTS>;
31
+ return _builder;
32
+ };
33
+
34
+ const withQuery = <PARAMS extends Record<string, any>=ReadModelDefaultParams, QUERY extends Record<string, any>=ReadModelDefaultQuery>( query?: Query<Model, PARAMS, QUERY> /* | QueryFactory */ ) => {
35
+ readmodel.queries ||= [];
36
+ readmodel.queries.push( query || {});
37
+ return _builder;
38
+ };
39
+
40
+ const build = () => readmodel as ReadModel<Model, EVENTS>;
41
+
42
+ const _builder = {
43
+ ...builder,
44
+ withDatabase,
45
+ withProjector,
46
+ withQuery,
47
+ eventHandler: readmodel,
48
+ build
49
+ };
50
+
51
+ return _builder;
52
+ };
@@ -0,0 +1,11 @@
1
+ import { createPort } from '../base';
2
+ import { EventStoreAdapter, EventStorePort } from '@bett3r-dev/pv3-types';
3
+
4
+ export const EventStore = ( adapter: EventStoreAdapter ): EventStorePort => {
5
+ const eventstorePort = {
6
+ ...createPort( adapter ),
7
+ _adapter: adapter
8
+ };
9
+
10
+ return eventstorePort;
11
+ };
@@ -0,0 +1,2 @@
1
+ export * from './infrastructureServices';
2
+ export * from './structureState';
@@ -0,0 +1,72 @@
1
+ export const infrastructureServices = [
2
+ {
3
+ service: 'service0',
4
+ port: 2013,
5
+ instances: [
6
+ {
7
+ timeRunning: 1.848,
8
+ host: '10.0.0.23',
9
+ },
10
+ {
11
+ timeRunning: 1.811,
12
+ host: '10.0.0.24',
13
+ },
14
+ ],
15
+ consumes: {
16
+ OperationCountByColorReadModel: [
17
+ 'DividedBy_17',
18
+ 'MultipliedBy_18',
19
+ 'MultipliedBy_2',
20
+ 'MultipliedBy_5',
21
+ 'Subtracted_50',
22
+ 'Added_20',
23
+ 'Added_7',
24
+ 'Added_3',
25
+ 'DividedBy_3',
26
+ ],
27
+ TotalByColorReadModel: [
28
+ 'MultipliedBy_18',
29
+ 'DividedBy_17',
30
+ 'MultipliedBy_5',
31
+ 'MultipliedBy_2',
32
+ 'Subtracted_50',
33
+ 'Added_20',
34
+ 'Added_7',
35
+ 'Added_3',
36
+ 'DividedBy_3',
37
+ ],
38
+ },
39
+ produces: {
40
+ ArithmeticOperationsAggregate: [
41
+ 'DividedBy_17',
42
+ 'Added_20',
43
+ 'MultipliedBy_5',
44
+ 'Added_3',
45
+ 'Added_7',
46
+ 'MultipliedBy_2',
47
+ 'Subtracted_50',
48
+ 'DividedBy_3',
49
+ 'MultipliedBy_18',
50
+ ],
51
+ },
52
+ isBroker: true,
53
+ isService: true,
54
+ endpoints: [
55
+ 'GET:/arithmetic-operations-aggregate/{id}',
56
+ 'GET:/arithmetic-operations-aggregate/{id}/stream',
57
+ 'POST:/arithmetic-operations-aggregate/{id}/divide-by-17',
58
+ 'POST:/arithmetic-operations-aggregate/{id}/add-20',
59
+ 'POST:/arithmetic-operations-aggregate/{id}/multiply-by-5',
60
+ 'POST:/arithmetic-operations-aggregate/{id}/add-3',
61
+ 'POST:/arithmetic-operations-aggregate/{id}/add-7',
62
+ 'POST:/arithmetic-operations-aggregate/{id}/multiply-by-2',
63
+ 'POST:/arithmetic-operations-aggregate/{id}/subtract-50',
64
+ 'POST:/arithmetic-operations-aggregate/{id}/divide-by-3',
65
+ 'POST:/arithmetic-operations-aggregate/{id}/multiply-by-18',
66
+ 'POST:/operation-count-by-color-read-model',
67
+ 'GET:/operation-count-by-color-read-model/{id}?',
68
+ 'POST:/total-by-color-read-model',
69
+ 'GET:/total-by-color-read-model/{id}?',
70
+ ],
71
+ },
72
+ ];