@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,191 @@
1
+ import { Endpoint } from '../../../../pv3-types/src/endpoints';
2
+ import OpenApiConvert from 'json-schema-for-openapi';
3
+ import { JSONSchema7 } from 'json-schema';
4
+ import { OpenAPIV3_1 } from 'openapi-types';
5
+ import { BaseSchema } from '@bett3r-dev/jsonschema-definer';
6
+ import { clone, objOf } from 'ramda';
7
+ import { reduce } from '@bett3r-dev/bett3r-utils';
8
+ import http from 'http';
9
+
10
+ const convert = ( schema: JSONSchema7 ) => {
11
+ return OpenApiConvert.convert( schema, 'main' ).schemas.main;
12
+ };
13
+
14
+ const getBodySchema = ( schema: any ) => {
15
+ if ( schema ){
16
+ if ( schema.anyOf ) {
17
+ return {
18
+ anyOf: schema.anyOf.map(( s: any ) => getBodySchema( s ))
19
+ };
20
+ } else if ( schema.properties?.data ) {
21
+ const _schema = clone( schema );
22
+ _schema.properties.data = getBodySchema( _schema.properties.data );
23
+ return convert( _schema );
24
+ } else {
25
+ return schema.$id
26
+ ? { $ref: `#/components/schemas/${schema.$id}` }
27
+ : convert( schema );
28
+ }
29
+ }
30
+ };
31
+
32
+ const getCommandHandlerResponseSchema = ( responseInstance )=>{
33
+ //REVIEW: Only place not so abstract: Conditional for Systems and Aggregates
34
+
35
+ // READMODELS
36
+ if ( responseInstance?.schema?.plain?.oneOf ){
37
+ const ref = `#/components/schemas/${responseInstance.schema.plain.oneOf[0].$id}`;
38
+ responseInstance.schema.plain.oneOf[0] = { $ref: ref };
39
+ responseInstance.schema.plain.oneOf[1].items = { $ref: ref };
40
+ }
41
+ // COMMAND HANDLERS
42
+ if ( responseInstance?.schema?.plain?.properties?.state ){
43
+ responseInstance.schema.plain.properties.state = { $ref: `#/components/schemas/${responseInstance?.schema?.plain?.properties?.state.$id}` };
44
+ }
45
+ if ( responseInstance?.schema?.plain?.properties?.events )
46
+ for ( let index = 0; index < responseInstance.schema.plain.properties.events.properties.data.anyOf.length; index++ ) {
47
+ const element = responseInstance.schema.plain.properties.events.properties.data.anyOf[index];
48
+ responseInstance.schema.plain.properties.events.properties.data.anyOf[index] = { $ref: `#/components/schemas/${element.$id}` };
49
+ }
50
+ // DEFAULT
51
+ return convert( responseInstance.schema.plain as JSONSchema7 );
52
+ };
53
+
54
+ export const registerOpenApiSchema = ( schemas: Record<string, OpenAPIV3_1.SchemaObject>, name:string, schema: JSONSchema7, tags: string[]) => {
55
+ const openApiSchema = convert( schema );
56
+ openApiSchema.tags = tags.map(( t ) => ({ name: t }));
57
+ schemas[name] = openApiSchema;
58
+ return schemas;
59
+ };
60
+
61
+ export const registerAggregateState = ( schemas: Record<string, OpenAPIV3_1.SchemaObject>, name:string, schema: JSONSchema7 ) => {
62
+ return registerOpenApiSchema( schemas, name, schema, ['AggregateState']);
63
+ };
64
+
65
+ export const registerCommandSchema = ( schemas: Record<string, OpenAPIV3_1.SchemaObject>, name:string, schema: BaseSchema ) => {
66
+ return registerOpenApiSchema( schemas, name, schema.plain as JSONSchema7, ['Commands']);
67
+ };
68
+
69
+ export const registerProducerEventSchemas = ( schemas: Record<string, OpenAPIV3_1.SchemaObject>, schema: BaseSchema ) => {
70
+ schema.plain.properties.events.properties.data.anyOf?.map(( schema ) => {
71
+ registerOpenApiSchema( schemas, schema.$id, schema, ['Events']);
72
+ });
73
+ schema.plain.properties.state && registerAggregateState( schemas, schema.plain.properties.state.$id, schema.plain.properties.state );
74
+ };
75
+ export const registerConsumerEventsSchemas = ( schemas: Record<string, OpenAPIV3_1.SchemaObject>, schema: BaseSchema ) => {
76
+ schema.plain.anyOf?.map(( s ) => {
77
+ const schema = s.properties.data;
78
+ registerOpenApiSchema( schemas, schema.$id, schema, ['Events']);
79
+ });
80
+ };
81
+
82
+ export const registerReadmodelSchema = ( schemas: Record<string, OpenAPIV3_1.SchemaObject>, schema: JSONSchema7 ) => {
83
+ registerOpenApiSchema( schemas, schema.$id as string, schema, ['Readmodel']);
84
+ };
85
+
86
+ export const registerOpenApiEndpoint = ( paths: OpenAPIV3_1.PathsObject, endpoint: Endpoint ) => {
87
+ let endpointParams: any[] = [];
88
+
89
+ const paramsSchemas = endpoint.schemas?.params?.plain && endpoint.schemas.params.plain.properties;
90
+ if ( paramsSchemas ) {
91
+ endpointParams = Object.keys( paramsSchemas ).reduce(( acc, paramSchemaKey ) => {
92
+ acc.push({
93
+ in: 'path',
94
+ name: paramSchemaKey,
95
+ description: paramsSchemas[paramSchemaKey].flags?.description || 'No description provided',
96
+ schema: { type: paramsSchemas[paramSchemaKey].type },
97
+ required: paramsSchemas[paramSchemaKey].preferences?.presence || false
98
+ });
99
+ return acc;
100
+ }, endpointParams );
101
+ }
102
+
103
+ const querySchemas = endpoint.schemas?.query && endpoint.schemas.query.plain.properties;
104
+ if ( querySchemas ) {
105
+ endpointParams = Object.keys( querySchemas ).reduce(( acc, paramSchemaKey ) => {
106
+ const schema = convert( querySchemas[paramSchemaKey]);
107
+ acc.push({
108
+ in: 'query',
109
+ name: paramSchemaKey,
110
+ description: querySchemas[paramSchemaKey].flags?.description || 'No description provided',
111
+ schema,
112
+ });
113
+ return acc;
114
+ }, endpointParams );
115
+ }
116
+
117
+ const route = endpoint.route as string;
118
+
119
+ paths[route.replace( '/:id', '/{id}' )] = {
120
+ parameters: endpointParams.length ? endpointParams : [],
121
+ ...paths[route.replace( '/:id', '/{id}' )],
122
+ [( endpoint.method || 'GET' ).toLocaleLowerCase()]: { operationId: endpoint.name,
123
+ description: endpoint.description,
124
+ tags: [ endpoint.module, ...( endpoint.tags || []) ],
125
+ ...endpoint.method !== 'GET' && endpoint.schemas?.body && {
126
+ requestBody: {
127
+ required: true,
128
+ content: { 'application/json': {
129
+ schema: getBodySchema( endpoint.schemas.body.plain )
130
+ }, ...( !endpoint.multipartProperties ? {} : {
131
+ 'application/json': {
132
+ schema: convert( endpoint.schemas.body.plain as JSONSchema7 )
133
+ .then(( schema: OpenAPIV3_1.SchemaObject ) => {
134
+ for ( const prop of endpoint.multipartProperties as string[]) {
135
+ delete ( schema.properties as Object )[prop];
136
+ }
137
+ return schema;
138
+ })
139
+ },
140
+ 'multipart/form-data': {
141
+ schema: convert( endpoint.schemas.body.plain as JSONSchema7 )
142
+ }
143
+ }) }
144
+ }
145
+ }, responses: {
146
+ ...reduce(( acc, response, status ) => {
147
+ if ( status === 204 ){
148
+ acc[status] = {
149
+ description: 'No Content'
150
+ };
151
+ }
152
+ else {
153
+ acc[status] = {
154
+ description: `Response Status Message: ${http.STATUS_CODES[status]}`,
155
+ content:{
156
+ 'application/json': {
157
+ schema: response.length === 1
158
+ ? getCommandHandlerResponseSchema( response[0])
159
+ : {
160
+ anyOf: ( response.map( getCommandHandlerResponseSchema ))
161
+ }
162
+ }
163
+ }
164
+ };
165
+ }
166
+ return acc;
167
+ }, {}, { ...endpoint.schemas?.responses, ...endpoint.schemas?.errors }),
168
+ 500: { description: 'Internal Server Error' }
169
+ }
170
+
171
+ }};
172
+
173
+ return paths;
174
+ };
175
+
176
+ export const generateOpenApiDocument = ( paths: OpenAPIV3_1.PathsObject, schemas: Record<string, OpenAPIV3_1.SchemaObject>, packageJson: {name:string, version: string}, _tags: string[] = []) : OpenAPIV3_1.Document => {
177
+ const tags = _tags.map( objOf( 'name' ));
178
+ return {
179
+ openapi: '3.0.3',
180
+ tags,
181
+ info: {
182
+ title: packageJson.name || 'Title',
183
+ version: packageJson.version || '0.1.1',
184
+ },
185
+ servers: [{ url: 'http://localhost:1984' }],
186
+ components: {
187
+ schemas
188
+ },
189
+ paths
190
+ };
191
+ };
@@ -0,0 +1,31 @@
1
+ import { omit } from 'ramda';
2
+
3
+
4
+ export type FetchResponse<T = any> = Omit<Response,'body'> & {
5
+ body: T,
6
+ }
7
+
8
+ export const parseResponseBody = ( type:'json'|'text' ,response: Response, method: 'reject'| 'resolve' ): Promise<FetchResponse> =>{
9
+ return response[type]()
10
+ .then( body => {
11
+ return Promise[method]({
12
+ ...omit(['body'], response ),
13
+ body
14
+ }) as Promise<FetchResponse>;
15
+ });
16
+ };
17
+ export const processFetchResponse = <T = any>( response: Response ): Promise<FetchResponse<T>> =>{
18
+ if ( response.ok === true )
19
+ return parseResponseBody( 'json', response, 'resolve' );
20
+ else
21
+ return parseResponseBody( 'json', response, 'reject' );
22
+ };
23
+
24
+ export const getTokenFromHeader = ( req: {headers: Record<string, string | string[]>}) => {
25
+ const authHeader = req.headers['authorization'] as string;
26
+ return authHeader && authHeader.split( ' ' )[1];
27
+ };
28
+
29
+ export const getTokenFromEndpointParams = ( params: {context:{req:any}, query:{token:string}}) => {
30
+ return params?.context?.req ? getTokenFromHeader( params.context.req ) : params?.query?.token;
31
+ };
@@ -0,0 +1,30 @@
1
+ import S from '@bett3r-dev/jsonschema-definer';
2
+ import { formatFilter } from '../eventHandlers';
3
+
4
+ describe( 'Readmodels helper functions', () => {
5
+ describe( 'formatFilter', () => {
6
+ const schema = S.shape({
7
+ id: S.string(),
8
+ string: S.string(),
9
+ number: S.number(),
10
+ boolean: S.boolean()
11
+ });
12
+ it.each([
13
+ [ 'EQ','string,eq,someString', [{ field: 'string', op: 'eq', value: 'someString' }]],
14
+ [ 'NEQ','boolean,neq,true', [{ field: 'boolean', op: 'neq', value: true }]],
15
+ [ 'LT','number,lt,3', [{ field: 'number', op: 'lt', value: 3 }]],
16
+ [ 'GT','string,gt,someString,fdsa', [{ field: 'string', op: 'gt', value: 'someString' }]],
17
+ [ 'LTE','string,lte,someString', [{ field: 'string', op: 'lte', value: 'someString' }]],
18
+ [ 'GTE','string,gte,someString', [{ field: 'string', op: 'gte', value: 'someString' }]],
19
+ [ 'IN','string,in,someString,maria', [{ field: 'string', op: 'in', value: [ 'someString', 'maria' ]}]],
20
+ [ 'IN','number,in,5,8', [{ field: 'number', op: 'in', value: [ 5, 8 ]}]],
21
+ [ 'NIN','string,nin,someString,maria', [{ field: 'string', op: 'nin', value: [ 'someString', 'maria' ]}]],
22
+ [ 'NIN','boolean,nin,true,false', [{ field: 'boolean', op: 'nin', value: [ true, false ]}]],
23
+ [ 'EXISTS','string,exists', [{ field: 'string', op: 'exists', value: undefined }]],
24
+ [ 'NOTEXISTS','string,notExists,asdf', [{ field: 'string', op: 'notExists', value: undefined }]],
25
+ ])( 'transforms the query params of a %s filter', ( name, query, expected ) => {
26
+ const filter = formatFilter([query], schema );
27
+ expect( filter ).toEqual( expected );
28
+ });
29
+ });
30
+ });
@@ -0,0 +1,213 @@
1
+ import { Command, System } from '@bett3r-dev/pv3-types';
2
+ import {
3
+ stateExists,
4
+ stateNotExists,
5
+ comparePaths,
6
+ compareWithValue,
7
+ compareWithReadmodel,
8
+ and,
9
+ or,
10
+ } from '../invariants';
11
+
12
+ const mockState = {
13
+ commandHandler: { name: 'SomeAggregate' } as System,
14
+ command: {} as Command,
15
+ query: {},
16
+ stream: '',
17
+ context: {},
18
+ events: [],
19
+ params: {},
20
+ state: null,
21
+ data: null
22
+ };
23
+
24
+ describe( 'invariants', () => {
25
+ describe( 'StateExists', () => {
26
+ test( 'returns the commandHandlerState when state exists', async () => {
27
+ const result = await stateExists().check({
28
+ ...mockState,
29
+ state: { name: 'lucas' },
30
+ });
31
+ expect( result ).toEqual({
32
+ ...mockState,
33
+ state: { name: 'lucas' },
34
+ });
35
+ });
36
+ test( 'returns an error when state does not exists', async () => {
37
+ try{
38
+ await stateExists().check( mockState );
39
+ } catch( err ) {
40
+ expect( err.name ).toEqual( 'State Does Not Exists' );
41
+ expect( err.type ).toEqual( 'BadRequestError' );
42
+ expect( err.description ).toEqual( 'Expected State in aggregate SomeAggregate' );
43
+ }
44
+ });
45
+ });
46
+ describe( 'StateNotExists', () => {
47
+ test( 'returns an Error when state exists', async () => {
48
+ const result = await stateNotExists().check( mockState );
49
+ expect( result ).toEqual( mockState );
50
+ });
51
+ test( 'returns the commandHandlerState when state does not exists', async () => {
52
+ try{
53
+ await stateNotExists().check({
54
+ ...mockState,
55
+ state: { name: 'lucas' },
56
+ });
57
+ } catch( err ) {
58
+ expect( err.name ).toEqual( 'Unexpected State' );
59
+ expect( err.type ).toEqual( 'BadRequestError' );
60
+ expect( err.description ).toEqual( 'Unexpected State in aggregate SomeAggregate' );
61
+ }
62
+ });
63
+ });
64
+ describe( 'ComparePaths', () => {
65
+ test.each([
66
+ { op:'eq', state: { prop:'john' }, data: { prop: 'john' }, path1:'' },
67
+ { op:'neq', state: { prop:'john' }, data: { prop: 'tom' }, path1:'' },
68
+ { op:'lt', state: { prop:3 }, data: { prop: 5 }, path1:'' },
69
+ { op:'gt', state: { prop:5 }, data: { prop: 3 }, path1:'' },
70
+ { op:'lte', state: { prop:3 }, data: { prop: 3 }, path1:'' },
71
+ { op:'gte', state: { prop:5 }, data: { prop: 3 }, path1:'' },
72
+ { op:'in', state: { prop:5 }, data: { prop: [ 3, 5 ]}, path1:'' },
73
+ { op:'nin', state: { prop:2 }, data: { prop: [ 3, 5 ]}, path1:'' },
74
+ { op:'contains', state: { prop:[ 3, 5 ]}, data: { prop: 5 }, path1:'' },
75
+ { op:'containsKey', state: { prop:[ 3, 5 ]}, data: { prop: 'prop' }, path1:'state' },
76
+ { op:'notContains', state: { prop:[ 3, 5 ]}, data: { prop: 6 }, path1:'' },
77
+ { op:'notContainsKey', state: { prop:[ 3, 5 ]}, data: { prop: 'propNot' }, path1:'state' },
78
+ { op:'some', state: { prop:[ 3, 5 ]}, data: { prop: [ 6, 3 ]}, path1:'' },
79
+ { op:'every', state: { prop:[ 3, 5 ]}, data: { prop: [ 5, 3, 2 ]}, path1:'' },
80
+ { op:'exists', state: { prop:'john' }, data: { prop: undefined }, path1:'' },
81
+ { op:'notExists', state: { prop:'john' }, data: {}, path1: 'state.name' }
82
+ ])( 'returns the commandHandlerState when path comparison is ok for operation $op', async ( values ) => {
83
+ const result = await comparePaths({ path1: values.path1 || 'state.prop', path2: 'data.prop', op: values.op as any }).check({
84
+ ...mockState,
85
+ state: values.state,
86
+ data: values.data
87
+ });
88
+ expect( result ).toEqual({
89
+ ...mockState,
90
+ state: values.state,
91
+ data: values.data
92
+ });
93
+ });
94
+ test( 'returns an error when ComparePath is not ok', async () => {
95
+ try{
96
+ await comparePaths({ path1: 'state.name', path2: 'data.name', op: 'eq' }).check({
97
+ ...mockState,
98
+ state: { name: 'lucas' },
99
+ data: { name: 'tomas' },
100
+ });
101
+ } catch( err ) {
102
+ expect( err.name ).toEqual( 'Invariant Error' );
103
+ expect( err.type ).toEqual( 'BadRequestError' );
104
+ expect( err.description ).toEqual( 'Comparison failed on paths for operation eq' );
105
+ expect( err.details ).toEqual({ path1: 'state.name', path2: 'data.name' });
106
+ }
107
+ });
108
+ });
109
+ describe( 'CompareWithValue', () => {
110
+ test.each([
111
+ { op:'eq', state: { prop:'john' }, data: 'john', path1:'' },
112
+ { op:'neq', state: { prop:'john' }, data: 'tom', path1:'' },
113
+ { op:'lt', state: { prop:3 }, data: 5, path1:'' },
114
+ { op:'gt', state: { prop:5 }, data: 3, path1:'' },
115
+ { op:'lte', state: { prop:3 }, data: 3, path1:'' },
116
+ { op:'gte', state: { prop:5 }, data: 3, path1:'' },
117
+ { op:'in', state: { prop:5 }, data: [ 3, 5 ], path1:'' },
118
+ { op:'nin', state: { prop:2 }, data: [ 3, 5 ], path1:'' },
119
+ { op:'contains', state: { prop:[ 3, 5 ]}, data: 5, path1:'' },
120
+ { op:'notContains', state: { prop:[ 3, 5 ]}, data: 6, path1:'' },
121
+ { op:'some', state: { prop:[ 3, 5 ]}, data: [ 6, 3 ], path1:'' },
122
+ { op:'every', state: { prop:[ 3, 5 ]}, data: [ 5, 3 ], path1:'' },
123
+ { op:'exists', state: { prop:'john' }, data: undefined, path1:'' },
124
+ { op:'notExists', state: { prop:'john' }, data: {}, path1: 'state.name' }
125
+ ])( 'returns the commandHandlerState when path comparison is ok for operation $op', async ( values ) => {
126
+ const result = await compareWithValue({ path: values.path1 || 'state.prop', value: values.data, op: values.op as any }).check({
127
+ ...mockState,
128
+ state: values.state,
129
+ data: values.data
130
+ });
131
+ expect( result ).toEqual({
132
+ ...mockState,
133
+ state: values.state,
134
+ data: values.data
135
+ });
136
+ });
137
+ test( 'returns an error when CompareValue is not ok', async () => {
138
+ try{
139
+ await compareWithValue({ path: 'state.name', value: 'tomas', op: 'eq' }).check({
140
+ ...mockState,
141
+ state: { name: 'lucas' },
142
+ });
143
+ } catch( err ) {
144
+ expect( err.name ).toEqual( 'Invariant Error' );
145
+ expect( err.type ).toEqual( 'BadRequestError' );
146
+ expect( err.description ).toEqual( 'Comparison failed with value tomas for operation eq' );
147
+ expect( err.details ).toEqual({ path: 'state.name' });
148
+ }
149
+ });
150
+ });
151
+ describe( 'CompareWithReadmodel', () => {
152
+ const mockGet = jest.fn().mockResolvedValue([{ name: 'lucas' }]);
153
+ const mockEndpoints = {
154
+ get: mockGet,
155
+ };
156
+ test( 'returns the commandHandlerState when readmodel comparison is ok for operation eq', async () => {
157
+ const result = await compareWithReadmodel({ endpoints: mockEndpoints as any, readmodelBaseUrl:'baseUrl',
158
+ url: () => '/someUrl?query=1',
159
+ comparisons:[
160
+ { path: 'state.name', readmodelPath:'name', op: 'eq' }
161
+ ]}).check({
162
+ ...mockState,
163
+ state: { name: 'lucas' }
164
+ });
165
+ expect( result ).toEqual({
166
+ ...mockState,
167
+ state: { name: 'lucas' }
168
+ });
169
+ expect( mockGet ).toHaveBeenCalledWith( 'baseUrl/someUrl?query=1' );
170
+ });
171
+ test( 'returns an error when CompareWithReadmodel is not ok', async () => {
172
+ try{
173
+ await compareWithReadmodel({ endpoints: mockEndpoints as any, readmodelBaseUrl:'baseUrl',
174
+ url: () => 'someUrl',
175
+ comparisons:[
176
+ { path: 'state.name', readmodelPath:'name', op: 'eq' }
177
+ ]}).check({
178
+ ...mockState,
179
+ state: { name: 'tomas' }
180
+ });
181
+ } catch( err ) {
182
+ expect( err.name ).toEqual( 'Invariant Error' );
183
+ expect( err.type ).toEqual( 'BadRequestError' );
184
+ expect( err.description ).toEqual( 'Comparison failed with readmodel baseUrlsomeUrl' );
185
+ expect( err.details ).toEqual({ readmodelUrl: 'baseUrlsomeUrl' });
186
+ }
187
+ });
188
+ });
189
+ describe( 'OR', () => {
190
+ test( 'returns true when any of the conditions is ok', async () => {
191
+ const result = await or( compareWithValue({ path: 'state.name', value: 'lucas', op:'eq' }), compareWithValue({ path: 'state.name', value: 'tomas', op: 'eq' })).check({
192
+ ...mockState,
193
+ state: { name: 'lucas' },
194
+ });
195
+ expect( result ).toEqual({
196
+ ...mockState,
197
+ state: { name: 'lucas' },
198
+ });
199
+ });
200
+ });
201
+ describe( 'AND', () => {
202
+ test( 'returns true when any of the conditions is ok', async () => {
203
+ const result = await and( compareWithValue({ path: 'state.name', value: 'lucas', op:'eq' }), compareWithValue({ path: 'state.lastName', value: 'ruiz', op: 'eq' })).check({
204
+ ...mockState,
205
+ state: { name: 'lucas', lastName: 'ruiz' },
206
+ });
207
+ expect( result ).toEqual({
208
+ ...mockState,
209
+ state: { name: 'lucas', lastName: 'ruiz' },
210
+ });
211
+ });
212
+ });
213
+ });