@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.
- package/build/adapters/cache/index.d.ts +2 -0
- package/build/adapters/cache/index.d.ts.map +1 -0
- package/build/adapters/cache/index.js +18 -0
- package/build/adapters/cache/index.js.map +1 -0
- package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts +1 -0
- package/build/adapters/cache/memory/__tests__/memoryCache.test.d.ts.map +1 -0
- package/build/adapters/cache/memory/__tests__/memoryCache.test.js +6 -0
- package/build/adapters/cache/memory/__tests__/memoryCache.test.js.map +1 -0
- package/build/adapters/cache/memory/index.d.ts +3 -0
- package/build/adapters/cache/memory/index.d.ts.map +1 -0
- package/build/adapters/cache/memory/index.js +119 -0
- package/build/adapters/cache/memory/index.js.map +1 -0
- package/build/adapters/configuration/__tests__/dotEnv.test.d.ts +2 -0
- package/build/adapters/configuration/__tests__/dotEnv.test.d.ts.map +1 -0
- package/build/adapters/configuration/__tests__/dotEnv.test.js +43 -0
- package/build/adapters/configuration/__tests__/dotEnv.test.js.map +1 -0
- package/build/adapters/configuration/dotEnv.d.ts +3 -0
- package/build/adapters/configuration/dotEnv.d.ts.map +1 -0
- package/build/adapters/configuration/dotEnv.js +35 -0
- package/build/adapters/configuration/dotEnv.js.map +1 -0
- package/build/adapters/configuration/index.d.ts +2 -0
- package/build/adapters/configuration/index.d.ts.map +1 -0
- package/build/adapters/configuration/index.js +18 -0
- package/build/adapters/configuration/index.js.map +1 -0
- package/build/adapters/database/index.d.ts +2 -0
- package/build/adapters/database/index.d.ts.map +1 -0
- package/build/adapters/database/index.js +18 -0
- package/build/adapters/database/index.js.map +1 -0
- package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts +1 -0
- package/build/adapters/database/memory/__tests__/memoryDb.test.d.ts.map +1 -0
- package/build/adapters/database/memory/__tests__/memoryDb.test.js +36 -0
- package/build/adapters/database/memory/__tests__/memoryDb.test.js.map +1 -0
- package/build/adapters/database/memory/index.d.ts +3 -0
- package/build/adapters/database/memory/index.d.ts.map +1 -0
- package/build/adapters/database/memory/index.js +241 -0
- package/build/adapters/database/memory/index.js.map +1 -0
- package/build/adapters/endpoints/addAuthUser/index.d.ts +8 -0
- package/build/adapters/endpoints/addAuthUser/index.d.ts.map +1 -0
- package/build/adapters/endpoints/addAuthUser/index.js +57 -0
- package/build/adapters/endpoints/addAuthUser/index.js.map +1 -0
- package/build/adapters/endpoints/endpointValidation/index.d.ts +4 -0
- package/build/adapters/endpoints/endpointValidation/index.d.ts.map +1 -0
- package/build/adapters/endpoints/endpointValidation/index.js +27 -0
- package/build/adapters/endpoints/endpointValidation/index.js.map +1 -0
- package/build/adapters/endpoints/index.d.ts +4 -0
- package/build/adapters/endpoints/index.d.ts.map +1 -0
- package/build/adapters/endpoints/index.js +21 -0
- package/build/adapters/endpoints/index.js.map +1 -0
- package/build/adapters/endpoints/localAuthorization/index.d.ts +1 -0
- package/build/adapters/endpoints/localAuthorization/index.d.ts.map +1 -0
- package/build/adapters/endpoints/localAuthorization/index.js +68 -0
- package/build/adapters/endpoints/localAuthorization/index.js.map +1 -0
- package/build/adapters/endpoints/tcpConsumer/index.d.ts +3 -0
- package/build/adapters/endpoints/tcpConsumer/index.d.ts.map +1 -0
- package/build/adapters/endpoints/tcpConsumer/index.js +64 -0
- package/build/adapters/endpoints/tcpConsumer/index.js.map +1 -0
- package/build/adapters/endpoints/userSession/index.d.ts +8 -0
- package/build/adapters/endpoints/userSession/index.d.ts.map +1 -0
- package/build/adapters/endpoints/userSession/index.js +43 -0
- package/build/adapters/endpoints/userSession/index.js.map +1 -0
- package/build/adapters/eventstore/database.d.ts +3 -0
- package/build/adapters/eventstore/database.d.ts.map +1 -0
- package/build/adapters/eventstore/database.js +156 -0
- package/build/adapters/eventstore/database.js.map +1 -0
- package/build/adapters/eventstore/index.d.ts +2 -0
- package/build/adapters/eventstore/index.d.ts.map +1 -0
- package/build/adapters/eventstore/index.js +18 -0
- package/build/adapters/eventstore/index.js.map +1 -0
- package/build/adapters/infrastructure/index.d.ts +2 -0
- package/build/adapters/infrastructure/index.d.ts.map +1 -0
- package/build/adapters/infrastructure/index.js +18 -0
- package/build/adapters/infrastructure/index.js.map +1 -0
- package/build/adapters/infrastructure/local/index.d.ts +4 -0
- package/build/adapters/infrastructure/local/index.d.ts.map +1 -0
- package/build/adapters/infrastructure/local/index.js +37 -0
- package/build/adapters/infrastructure/local/index.js.map +1 -0
- package/build/adapters/logger/console.d.ts +3 -0
- package/build/adapters/logger/console.d.ts.map +1 -0
- package/build/adapters/logger/console.js +38 -0
- package/build/adapters/logger/console.js.map +1 -0
- package/build/adapters/logger/index.d.ts +2 -0
- package/build/adapters/logger/index.d.ts.map +1 -0
- package/build/adapters/logger/index.js +18 -0
- package/build/adapters/logger/index.js.map +1 -0
- package/build/index.d.ts +23 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +39 -0
- package/build/index.js.map +1 -0
- package/build/libraries/modules/fs.d.ts +12 -0
- package/build/libraries/modules/fs.d.ts.map +1 -0
- package/build/libraries/modules/fs.js +103 -0
- package/build/libraries/modules/fs.js.map +1 -0
- package/build/libraries/modules/index.d.ts +2 -0
- package/build/libraries/modules/index.d.ts.map +1 -0
- package/build/libraries/modules/index.js +18 -0
- package/build/libraries/modules/index.js.map +1 -0
- package/build/libraries/openApi/index.d.ts +2 -0
- package/build/libraries/openApi/index.d.ts.map +1 -0
- package/build/libraries/openApi/index.js +18 -0
- package/build/libraries/openApi/index.js.map +1 -0
- package/build/libraries/openApi/pruneUnusedRef.d.ts +3 -0
- package/build/libraries/openApi/pruneUnusedRef.d.ts.map +1 -0
- package/build/libraries/openApi/pruneUnusedRef.js +30 -0
- package/build/libraries/openApi/pruneUnusedRef.js.map +1 -0
- package/build/libraries/tcp/index.d.ts +8 -0
- package/build/libraries/tcp/index.d.ts.map +1 -0
- package/build/libraries/tcp/index.js +108 -0
- package/build/libraries/tcp/index.js.map +1 -0
- package/build/libraries/tcp/types.d.ts +45 -0
- package/build/libraries/tcp/types.d.ts.map +1 -0
- package/build/libraries/tcp/types.js +3 -0
- package/build/libraries/tcp/types.js.map +1 -0
- package/build/libraries/validation/__tests__/validation.test.d.ts +2 -0
- package/build/libraries/validation/__tests__/validation.test.d.ts.map +1 -0
- package/build/libraries/validation/__tests__/validation.test.js +53 -0
- package/build/libraries/validation/__tests__/validation.test.js.map +1 -0
- package/build/libraries/validation/index.d.ts +8 -0
- package/build/libraries/validation/index.d.ts.map +1 -0
- package/build/libraries/validation/index.js +51 -0
- package/build/libraries/validation/index.js.map +1 -0
- package/build/ports/authentication/index.d.ts +12 -0
- package/build/ports/authentication/index.d.ts.map +1 -0
- package/build/ports/authentication/index.js +23 -0
- package/build/ports/authentication/index.js.map +1 -0
- package/build/ports/base.d.ts +7 -0
- package/build/ports/base.d.ts.map +1 -0
- package/build/ports/base.js +25 -0
- package/build/ports/base.js.map +1 -0
- package/build/ports/cache/index.d.ts +3 -0
- package/build/ports/cache/index.d.ts.map +1 -0
- package/build/ports/cache/index.js +19 -0
- package/build/ports/cache/index.js.map +1 -0
- package/build/ports/configuration/__tests__/configurationPort.test.d.ts +2 -0
- package/build/ports/configuration/__tests__/configurationPort.test.d.ts.map +1 -0
- package/build/ports/configuration/__tests__/configurationPort.test.js +51 -0
- package/build/ports/configuration/__tests__/configurationPort.test.js.map +1 -0
- package/build/ports/configuration/args.d.ts +57 -0
- package/build/ports/configuration/args.d.ts.map +1 -0
- package/build/ports/configuration/args.js +44 -0
- package/build/ports/configuration/args.js.map +1 -0
- package/build/ports/configuration/common.d.ts +2 -0
- package/build/ports/configuration/common.d.ts.map +1 -0
- package/build/ports/configuration/common.js +19 -0
- package/build/ports/configuration/common.js.map +1 -0
- package/build/ports/configuration/index.d.ts +10 -0
- package/build/ports/configuration/index.d.ts.map +1 -0
- package/build/ports/configuration/index.js +96 -0
- package/build/ports/configuration/index.js.map +1 -0
- package/build/ports/configuration/localConfig.d.ts +3 -0
- package/build/ports/configuration/localConfig.d.ts.map +1 -0
- package/build/ports/configuration/localConfig.js +108 -0
- package/build/ports/configuration/localConfig.js.map +1 -0
- package/build/ports/database/index.d.ts +4 -0
- package/build/ports/database/index.d.ts.map +1 -0
- package/build/ports/database/index.js +27 -0
- package/build/ports/database/index.js.map +1 -0
- package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts +2 -0
- package/build/ports/endpoints/__tests__/endpointsCall.test.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/endpointsCall.test.js +21 -0
- package/build/ports/endpoints/__tests__/endpointsCall.test.js.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/base.d.ts +77 -0
- package/build/ports/endpoints/__tests__/test-client-library/base.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/base.js +91 -0
- package/build/ports/endpoints/__tests__/test-client-library/base.js.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/index.d.ts +29 -0
- package/build/ports/endpoints/__tests__/test-client-library/index.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/index.js +43 -0
- package/build/ports/endpoints/__tests__/test-client-library/index.js.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts +106 -0
- package/build/ports/endpoints/__tests__/test-client-library/services/service.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/test-client-library/services/service.js +62 -0
- package/build/ports/endpoints/__tests__/test-client-library/services/service.js.map +1 -0
- package/build/ports/endpoints/__tests__/utils.test.d.ts +1 -0
- package/build/ports/endpoints/__tests__/utils.test.d.ts.map +1 -0
- package/build/ports/endpoints/__tests__/utils.test.js +53 -0
- package/build/ports/endpoints/__tests__/utils.test.js.map +1 -0
- package/build/ports/endpoints/index.d.ts +29 -0
- package/build/ports/endpoints/index.d.ts.map +1 -0
- package/build/ports/endpoints/index.js +263 -0
- package/build/ports/endpoints/index.js.map +1 -0
- package/build/ports/endpoints/openApi.d.ts +16 -0
- package/build/ports/endpoints/openApi.d.ts.map +1 -0
- package/build/ports/endpoints/openApi.js +187 -0
- package/build/ports/endpoints/openApi.js.map +1 -0
- package/build/ports/endpoints/utils.d.ts +17 -0
- package/build/ports/endpoints/utils.d.ts.map +1 -0
- package/build/ports/endpoints/utils.js +31 -0
- package/build/ports/endpoints/utils.js.map +1 -0
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts +2 -0
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.d.ts.map +1 -0
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.js +35 -0
- package/build/ports/eventsourcing/__tests__/eventhandlers.test.js.map +1 -0
- package/build/ports/eventsourcing/__tests__/invariants.test.d.ts +2 -0
- package/build/ports/eventsourcing/__tests__/invariants.test.d.ts.map +1 -0
- package/build/ports/eventsourcing/__tests__/invariants.test.js +210 -0
- package/build/ports/eventsourcing/__tests__/invariants.test.js.map +1 -0
- package/build/ports/eventsourcing/commandHandlers/index.d.ts +25 -0
- package/build/ports/eventsourcing/commandHandlers/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/commandHandlers/index.js +392 -0
- package/build/ports/eventsourcing/commandHandlers/index.js.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/index.d.ts +3 -0
- package/build/ports/eventsourcing/commandTemplates/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/index.js +19 -0
- package/build/ports/eventsourcing/commandTemplates/index.js.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts +4 -0
- package/build/ports/eventsourcing/commandTemplates/multiStream.d.ts.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/multiStream.js +73 -0
- package/build/ports/eventsourcing/commandTemplates/multiStream.js.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts +9 -0
- package/build/ports/eventsourcing/commandTemplates/snapshot.d.ts.map +1 -0
- package/build/ports/eventsourcing/commandTemplates/snapshot.js +39 -0
- package/build/ports/eventsourcing/commandTemplates/snapshot.js.map +1 -0
- package/build/ports/eventsourcing/eventHandlers/index.d.ts +33 -0
- package/build/ports/eventsourcing/eventHandlers/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/eventHandlers/index.js +276 -0
- package/build/ports/eventsourcing/eventHandlers/index.js.map +1 -0
- package/build/ports/eventsourcing/index.d.ts +9 -0
- package/build/ports/eventsourcing/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/index.js +101 -0
- package/build/ports/eventsourcing/index.js.map +1 -0
- package/build/ports/eventsourcing/invariants/combinators.d.ts +4 -0
- package/build/ports/eventsourcing/invariants/combinators.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/combinators.js +20 -0
- package/build/ports/eventsourcing/invariants/combinators.js.map +1 -0
- package/build/ports/eventsourcing/invariants/common.d.ts +10 -0
- package/build/ports/eventsourcing/invariants/common.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/common.js +37 -0
- package/build/ports/eventsourcing/invariants/common.js.map +1 -0
- package/build/ports/eventsourcing/invariants/comparisons.d.ts +19 -0
- package/build/ports/eventsourcing/invariants/comparisons.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/comparisons.js +83 -0
- package/build/ports/eventsourcing/invariants/comparisons.js.map +1 -0
- package/build/ports/eventsourcing/invariants/index.d.ts +5 -0
- package/build/ports/eventsourcing/invariants/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/index.js +21 -0
- package/build/ports/eventsourcing/invariants/index.js.map +1 -0
- package/build/ports/eventsourcing/invariants/stateExistance.d.ts +4 -0
- package/build/ports/eventsourcing/invariants/stateExistance.d.ts.map +1 -0
- package/build/ports/eventsourcing/invariants/stateExistance.js +33 -0
- package/build/ports/eventsourcing/invariants/stateExistance.js.map +1 -0
- package/build/ports/eventsourcing/subscriptions/index.d.ts +2 -0
- package/build/ports/eventsourcing/subscriptions/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/subscriptions/index.js +18 -0
- package/build/ports/eventsourcing/subscriptions/index.js.map +1 -0
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts +3 -0
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.d.ts.map +1 -0
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js +81 -0
- package/build/ports/eventsourcing/subscriptions/sseSubscriptions.js.map +1 -0
- package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts +4 -0
- package/build/ports/eventsourcing/utils/aggregateBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/aggregateBuilder.js +45 -0
- package/build/ports/eventsourcing/utils/aggregateBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/commandBuilder.d.ts +3 -0
- package/build/ports/eventsourcing/utils/commandBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/commandBuilder.js +102 -0
- package/build/ports/eventsourcing/utils/commandBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.d.ts +3 -0
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.js +19 -0
- package/build/ports/eventsourcing/utils/eventHandlerBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts +4 -0
- package/build/ports/eventsourcing/utils/externalSystemBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/externalSystemBuilder.js +34 -0
- package/build/ports/eventsourcing/utils/externalSystemBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/index.d.ts +13 -0
- package/build/ports/eventsourcing/utils/index.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/index.js +45 -0
- package/build/ports/eventsourcing/utils/index.js.map +1 -0
- package/build/ports/eventsourcing/utils/policyBuilder.d.ts +3 -0
- package/build/ports/eventsourcing/utils/policyBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/policyBuilder.js +29 -0
- package/build/ports/eventsourcing/utils/policyBuilder.js.map +1 -0
- package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts +5 -0
- package/build/ports/eventsourcing/utils/readmodelBuilder.d.ts.map +1 -0
- package/build/ports/eventsourcing/utils/readmodelBuilder.js +45 -0
- package/build/ports/eventsourcing/utils/readmodelBuilder.js.map +1 -0
- package/build/ports/eventstore/index.d.ts +3 -0
- package/build/ports/eventstore/index.d.ts.map +1 -0
- package/build/ports/eventstore/index.js +13 -0
- package/build/ports/eventstore/index.js.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/index.d.ts +3 -0
- package/build/ports/infrastructure/__tests__/fixture/index.d.ts.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/index.js +19 -0
- package/build/ports/infrastructure/__tests__/fixture/index.js.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts +19 -0
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.d.ts.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js +76 -0
- package/build/ports/infrastructure/__tests__/fixture/infrastructureServices.js.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts +177 -0
- package/build/ports/infrastructure/__tests__/fixture/structureState.d.ts.map +1 -0
- package/build/ports/infrastructure/__tests__/fixture/structureState.js +258 -0
- package/build/ports/infrastructure/__tests__/fixture/structureState.js.map +1 -0
- package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts +2 -0
- package/build/ports/infrastructure/__tests__/infrastructure.test.d.ts.map +1 -0
- package/build/ports/infrastructure/__tests__/infrastructure.test.js +11 -0
- package/build/ports/infrastructure/__tests__/infrastructure.test.js.map +1 -0
- package/build/ports/infrastructure/index.d.ts +53 -0
- package/build/ports/infrastructure/index.d.ts.map +1 -0
- package/build/ports/infrastructure/index.js +149 -0
- package/build/ports/infrastructure/index.js.map +1 -0
- package/build/ports/infrastructure/utils.d.ts +14 -0
- package/build/ports/infrastructure/utils.d.ts.map +1 -0
- package/build/ports/infrastructure/utils.js +126 -0
- package/build/ports/infrastructure/utils.js.map +1 -0
- package/build/ports/logger/index.d.ts +3 -0
- package/build/ports/logger/index.d.ts.map +1 -0
- package/build/ports/logger/index.js +32 -0
- package/build/ports/logger/index.js.map +1 -0
- package/build/utils/index.d.ts +35 -0
- package/build/utils/index.d.ts.map +1 -0
- package/build/utils/index.js +190 -0
- package/build/utils/index.js.map +1 -0
- package/package.json +28 -0
- package/src/adapters/cache/index.ts +1 -0
- package/src/adapters/cache/memory/__tests__/memoryCache.test.ts +6 -0
- package/src/adapters/cache/memory/index.ts +142 -0
- package/src/adapters/configuration/__tests__/.env +4 -0
- package/src/adapters/configuration/__tests__/dotEnv.test.ts +38 -0
- package/src/adapters/configuration/dotEnv.ts +33 -0
- package/src/adapters/configuration/index.ts +1 -0
- package/src/adapters/database/index.ts +1 -0
- package/src/adapters/database/memory/__tests__/memoryDb.test.ts +37 -0
- package/src/adapters/database/memory/index.ts +279 -0
- package/src/adapters/endpoints/addAuthUser/index.ts +55 -0
- package/src/adapters/endpoints/endpointValidation/index.ts +26 -0
- package/src/adapters/endpoints/index.ts +4 -0
- package/src/adapters/endpoints/localAuthorization/index.ts +75 -0
- package/src/adapters/endpoints/tcpConsumer/index.ts +69 -0
- package/src/adapters/endpoints/userSession/index.ts +40 -0
- package/src/adapters/eventstore/database.ts +178 -0
- package/src/adapters/eventstore/index.ts +1 -0
- package/src/adapters/infrastructure/index.ts +1 -0
- package/src/adapters/infrastructure/local/index.ts +40 -0
- package/src/adapters/logger/console.ts +42 -0
- package/src/adapters/logger/index.ts +1 -0
- package/src/index.ts +25 -0
- package/src/libraries/modules/fs.ts +88 -0
- package/src/libraries/modules/index.ts +1 -0
- package/src/libraries/openApi/index.ts +1 -0
- package/src/libraries/openApi/pruneUnusedRef.ts +35 -0
- package/src/libraries/tcp/index.ts +98 -0
- package/src/libraries/tcp/types.ts +43 -0
- package/src/libraries/validation/__tests__/validation.test.ts +25 -0
- package/src/libraries/validation/index.ts +48 -0
- package/src/ports/authentication/index.ts +25 -0
- package/src/ports/base.ts +20 -0
- package/src/ports/cache/index.ts +17 -0
- package/src/ports/configuration/__tests__/configurationPort.test.ts +47 -0
- package/src/ports/configuration/args.ts +39 -0
- package/src/ports/configuration/common.ts +12 -0
- package/src/ports/configuration/index.ts +110 -0
- package/src/ports/configuration/localConfig.ts +117 -0
- package/src/ports/database/index.ts +25 -0
- package/src/ports/endpoints/__tests__/endpointsCall.test.ts +20 -0
- package/src/ports/endpoints/__tests__/test-client-library/base.ts +167 -0
- package/src/ports/endpoints/__tests__/test-client-library/index.ts +23 -0
- package/src/ports/endpoints/__tests__/test-client-library/services/service.ts +181 -0
- package/src/ports/endpoints/__tests__/utils.test.ts +54 -0
- package/src/ports/endpoints/index.ts +272 -0
- package/src/ports/endpoints/openApi.ts +191 -0
- package/src/ports/endpoints/utils.ts +31 -0
- package/src/ports/eventsourcing/__tests__/eventhandlers.test.ts +30 -0
- package/src/ports/eventsourcing/__tests__/invariants.test.ts +213 -0
- package/src/ports/eventsourcing/commandHandlers/index.ts +625 -0
- package/src/ports/eventsourcing/commandTemplates/index.ts +2 -0
- package/src/ports/eventsourcing/commandTemplates/multiStream.ts +70 -0
- package/src/ports/eventsourcing/commandTemplates/snapshot.ts +43 -0
- package/src/ports/eventsourcing/eventHandlers/index.ts +429 -0
- package/src/ports/eventsourcing/index.ts +98 -0
- package/src/ports/eventsourcing/invariants/combinators.ts +25 -0
- package/src/ports/eventsourcing/invariants/common.ts +42 -0
- package/src/ports/eventsourcing/invariants/comparisons.ts +90 -0
- package/src/ports/eventsourcing/invariants/index.ts +4 -0
- package/src/ports/eventsourcing/invariants/stateExistance.ts +34 -0
- package/src/ports/eventsourcing/subscriptions/index.ts +1 -0
- package/src/ports/eventsourcing/subscriptions/sseSubscriptions.ts +103 -0
- package/src/ports/eventsourcing/utils/aggregateBuilder.ts +49 -0
- package/src/ports/eventsourcing/utils/commandBuilder.ts +113 -0
- package/src/ports/eventsourcing/utils/eventHandlerBuilder.ts +22 -0
- package/src/ports/eventsourcing/utils/externalSystemBuilder.ts +42 -0
- package/src/ports/eventsourcing/utils/index.ts +25 -0
- package/src/ports/eventsourcing/utils/policyBuilder.ts +31 -0
- package/src/ports/eventsourcing/utils/readmodelBuilder.ts +52 -0
- package/src/ports/eventstore/index.ts +11 -0
- package/src/ports/infrastructure/__tests__/fixture/index.ts +2 -0
- package/src/ports/infrastructure/__tests__/fixture/infrastructureServices.ts +72 -0
- package/src/ports/infrastructure/__tests__/fixture/structureState.ts +254 -0
- package/src/ports/infrastructure/__tests__/infrastructure.test.ts +11 -0
- package/src/ports/infrastructure/index.ts +162 -0
- package/src/ports/infrastructure/utils.ts +130 -0
- package/src/ports/logger/index.ts +34 -0
- package/src/utils/index.ts +186 -0
- 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
|
+
});
|