node-cqrs 0.16.4 → 1.0.0-beta.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/CHANGELOG.md +615 -79
- package/LICENSE +202 -21
- package/NOTICE +15 -0
- package/README.md +429 -112
- package/dist/cjs/AbstractAggregate.js +193 -0
- package/dist/cjs/AbstractAggregate.js.map +1 -0
- package/dist/cjs/AbstractProjection.js +165 -0
- package/dist/cjs/AbstractProjection.js.map +1 -0
- package/dist/cjs/AbstractSaga.js +109 -0
- package/dist/cjs/AbstractSaga.js.map +1 -0
- package/dist/cjs/AggregateCommandHandler.js +182 -0
- package/dist/cjs/AggregateCommandHandler.js.map +1 -0
- package/dist/cjs/CommandBus.js +9 -0
- package/dist/cjs/CommandBus.js.map +1 -0
- package/dist/cjs/CqrsContainerBuilder.js +97 -0
- package/dist/cjs/CqrsContainerBuilder.js.map +1 -0
- package/dist/cjs/Event.js +19 -0
- package/dist/cjs/Event.js.map +1 -0
- package/dist/cjs/EventDispatchPipeline.js +83 -0
- package/dist/cjs/EventDispatchPipeline.js.map +1 -0
- package/dist/cjs/EventDispatcher.js +93 -0
- package/dist/cjs/EventDispatcher.js.map +1 -0
- package/dist/cjs/EventIdAugmentor.js +30 -0
- package/dist/cjs/EventIdAugmentor.js.map +1 -0
- package/dist/cjs/EventStore.js +106 -0
- package/dist/cjs/EventStore.js.map +1 -0
- package/dist/cjs/SagaEventHandler.js +153 -0
- package/dist/cjs/SagaEventHandler.js.map +1 -0
- package/dist/cjs/errors/ConcurrencyError.js +21 -0
- package/dist/cjs/errors/ConcurrencyError.js.map +1 -0
- package/dist/cjs/errors/index.js +18 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/in-memory/InMemoryEventStorage.js +106 -0
- package/dist/cjs/in-memory/InMemoryEventStorage.js.map +1 -0
- package/dist/cjs/in-memory/InMemoryLock.js +44 -0
- package/dist/cjs/in-memory/InMemoryLock.js.map +1 -0
- package/dist/cjs/in-memory/InMemoryMessageBus.js +93 -0
- package/dist/cjs/in-memory/InMemoryMessageBus.js.map +1 -0
- package/dist/cjs/in-memory/InMemorySnapshotStorage.js +101 -0
- package/dist/cjs/in-memory/InMemorySnapshotStorage.js.map +1 -0
- package/dist/cjs/in-memory/InMemoryView.js +154 -0
- package/dist/cjs/in-memory/InMemoryView.js.map +1 -0
- package/dist/cjs/in-memory/index.js +22 -0
- package/dist/cjs/in-memory/index.js.map +1 -0
- package/dist/cjs/in-memory/utils/index.js +18 -0
- package/dist/cjs/in-memory/utils/index.js.map +1 -0
- package/dist/cjs/in-memory/utils/nextCycle.js +9 -0
- package/dist/cjs/in-memory/utils/nextCycle.js.map +1 -0
- package/dist/cjs/index.js +58 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interfaces/IAggregate.js +3 -0
- package/dist/cjs/interfaces/IAggregate.js.map +1 -0
- package/dist/cjs/interfaces/IAggregateSnapshotStorage.js +13 -0
- package/dist/cjs/interfaces/IAggregateSnapshotStorage.js.map +1 -0
- package/dist/cjs/interfaces/ICommand.js +3 -0
- package/dist/cjs/interfaces/ICommand.js.map +1 -0
- package/dist/cjs/interfaces/ICommandBus.js +3 -0
- package/dist/cjs/interfaces/ICommandBus.js.map +1 -0
- package/dist/cjs/interfaces/IContainer.js +3 -0
- package/dist/cjs/interfaces/IContainer.js.map +1 -0
- package/dist/cjs/interfaces/IDispatchPipelineProcessor.js +9 -0
- package/dist/cjs/interfaces/IDispatchPipelineProcessor.js.map +1 -0
- package/dist/cjs/interfaces/IEvent.js +10 -0
- package/dist/cjs/interfaces/IEvent.js.map +1 -0
- package/dist/cjs/interfaces/IEventBus.js +9 -0
- package/dist/cjs/interfaces/IEventBus.js.map +1 -0
- package/dist/cjs/interfaces/IEventDispatcher.js +3 -0
- package/dist/cjs/interfaces/IEventDispatcher.js.map +1 -0
- package/dist/cjs/interfaces/IEventLocker.js +15 -0
- package/dist/cjs/interfaces/IEventLocker.js.map +1 -0
- package/dist/cjs/interfaces/IEventReceptor.js +3 -0
- package/dist/cjs/interfaces/IEventReceptor.js.map +1 -0
- package/dist/cjs/interfaces/IEventSet.js +8 -0
- package/dist/cjs/interfaces/IEventSet.js.map +1 -0
- package/dist/cjs/interfaces/IEventStorageReader.js +13 -0
- package/dist/cjs/interfaces/IEventStorageReader.js.map +1 -0
- package/dist/cjs/interfaces/IEventStore.js +3 -0
- package/dist/cjs/interfaces/IEventStore.js.map +1 -0
- package/dist/cjs/interfaces/IEventStream.js +3 -0
- package/dist/cjs/interfaces/IEventStream.js.map +1 -0
- package/dist/cjs/interfaces/IIdentifierProvider.js +9 -0
- package/dist/cjs/interfaces/IIdentifierProvider.js.map +1 -0
- package/dist/cjs/interfaces/ILocker.js +9 -0
- package/dist/cjs/interfaces/ILocker.js.map +1 -0
- package/dist/cjs/interfaces/ILogger.js +3 -0
- package/dist/cjs/interfaces/ILogger.js.map +1 -0
- package/dist/cjs/interfaces/IMessage.js +10 -0
- package/dist/cjs/interfaces/IMessage.js.map +1 -0
- package/dist/cjs/interfaces/IMutableState.js +3 -0
- package/dist/cjs/interfaces/IMutableState.js.map +1 -0
- package/dist/cjs/interfaces/IObjectStorage.js +3 -0
- package/dist/cjs/interfaces/IObjectStorage.js.map +1 -0
- package/dist/cjs/interfaces/IObservable.js +11 -0
- package/dist/cjs/interfaces/IObservable.js.map +1 -0
- package/dist/cjs/interfaces/IObservableQueueProvider.js +9 -0
- package/dist/cjs/interfaces/IObservableQueueProvider.js.map +1 -0
- package/dist/cjs/interfaces/IObserver.js +3 -0
- package/dist/cjs/interfaces/IObserver.js.map +1 -0
- package/dist/cjs/interfaces/IProjection.js +3 -0
- package/dist/cjs/interfaces/IProjection.js.map +1 -0
- package/dist/cjs/interfaces/ISaga.js +3 -0
- package/dist/cjs/interfaces/ISaga.js.map +1 -0
- package/dist/cjs/interfaces/ISnapshotEvent.js +10 -0
- package/dist/cjs/interfaces/ISnapshotEvent.js.map +1 -0
- package/dist/cjs/interfaces/IViewLocker.js +21 -0
- package/dist/cjs/interfaces/IViewLocker.js.map +1 -0
- package/dist/cjs/interfaces/Identifier.js +3 -0
- package/dist/cjs/interfaces/Identifier.js.map +1 -0
- package/dist/cjs/interfaces/index.js +46 -0
- package/dist/cjs/interfaces/index.js.map +1 -0
- package/dist/cjs/interfaces/isObject.js +9 -0
- package/dist/cjs/interfaces/isObject.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/rabbitmq/IContainer.js +3 -0
- package/dist/cjs/rabbitmq/IContainer.js.map +1 -0
- package/dist/cjs/rabbitmq/RabbitMqCommandBus.js +84 -0
- package/dist/cjs/rabbitmq/RabbitMqCommandBus.js.map +1 -0
- package/dist/cjs/rabbitmq/RabbitMqEventBus.js +121 -0
- package/dist/cjs/rabbitmq/RabbitMqEventBus.js.map +1 -0
- package/dist/cjs/rabbitmq/RabbitMqGateway.js +578 -0
- package/dist/cjs/rabbitmq/RabbitMqGateway.js.map +1 -0
- package/dist/cjs/rabbitmq/index.js +21 -0
- package/dist/cjs/rabbitmq/index.js.map +1 -0
- package/dist/cjs/rabbitmq/utils/index.js +19 -0
- package/dist/cjs/rabbitmq/utils/index.js.map +1 -0
- package/dist/cjs/rabbitmq/utils/registerExitCleanup.js +28 -0
- package/dist/cjs/rabbitmq/utils/registerExitCleanup.js.map +1 -0
- package/dist/cjs/rabbitmq/utils/resolveProvider.js +9 -0
- package/dist/cjs/rabbitmq/utils/resolveProvider.js.map +1 -0
- package/dist/cjs/sqlite/AbstractSqliteAccessor.js +50 -0
- package/dist/cjs/sqlite/AbstractSqliteAccessor.js.map +1 -0
- package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js +26 -0
- package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
- package/dist/cjs/sqlite/AbstractSqliteView.js +50 -0
- package/dist/cjs/sqlite/AbstractSqliteView.js.map +1 -0
- package/dist/cjs/sqlite/IContainer.js +3 -0
- package/dist/cjs/sqlite/IContainer.js.map +1 -0
- package/dist/cjs/sqlite/SqliteEventLocker.js +93 -0
- package/dist/cjs/sqlite/SqliteEventLocker.js.map +1 -0
- package/dist/cjs/sqlite/SqliteObjectStorage.js +114 -0
- package/dist/cjs/sqlite/SqliteObjectStorage.js.map +1 -0
- package/dist/cjs/sqlite/SqliteObjectView.js +48 -0
- package/dist/cjs/sqlite/SqliteObjectView.js.map +1 -0
- package/dist/cjs/sqlite/SqliteProjectionDataParams.js +3 -0
- package/dist/cjs/sqlite/SqliteProjectionDataParams.js.map +1 -0
- package/dist/cjs/sqlite/SqliteViewLocker.js +119 -0
- package/dist/cjs/sqlite/SqliteViewLocker.js.map +1 -0
- package/dist/cjs/sqlite/index.js +26 -0
- package/dist/cjs/sqlite/index.js.map +1 -0
- package/dist/cjs/sqlite/queries/eventLockTableInit.js +15 -0
- package/dist/cjs/sqlite/queries/eventLockTableInit.js.map +1 -0
- package/dist/cjs/sqlite/queries/index.js +19 -0
- package/dist/cjs/sqlite/queries/index.js.map +1 -0
- package/dist/cjs/sqlite/queries/viewLockTableInit.js +14 -0
- package/dist/cjs/sqlite/queries/viewLockTableInit.js.map +1 -0
- package/dist/cjs/sqlite/utils/getEventId.js +14 -0
- package/dist/cjs/sqlite/utils/getEventId.js.map +1 -0
- package/dist/cjs/sqlite/utils/guid.js +9 -0
- package/dist/cjs/sqlite/utils/guid.js.map +1 -0
- package/dist/cjs/sqlite/utils/index.js +19 -0
- package/dist/cjs/sqlite/utils/index.js.map +1 -0
- package/dist/cjs/utils/Deferred.js +38 -0
- package/dist/cjs/utils/Deferred.js.map +1 -0
- package/dist/cjs/utils/Lock.js +102 -0
- package/dist/cjs/utils/Lock.js.map +1 -0
- package/dist/cjs/utils/MapAssertable.js +30 -0
- package/dist/cjs/utils/MapAssertable.js.map +1 -0
- package/dist/cjs/utils/assert.js +88 -0
- package/dist/cjs/utils/assert.js.map +1 -0
- package/dist/cjs/utils/clone.js +13 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/extractErrorDetails.js +37 -0
- package/dist/cjs/utils/extractErrorDetails.js.map +1 -0
- package/dist/cjs/utils/getClassName.js +10 -0
- package/dist/cjs/utils/getClassName.js.map +1 -0
- package/dist/cjs/utils/getHandler.js +18 -0
- package/dist/cjs/utils/getHandler.js.map +1 -0
- package/dist/cjs/utils/getMessageHandlerNames.js +30 -0
- package/dist/cjs/utils/getMessageHandlerNames.js.map +1 -0
- package/dist/cjs/utils/index.js +31 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/isClass.js +8 -0
- package/dist/cjs/utils/isClass.js.map +1 -0
- package/dist/cjs/utils/sagaId.js +23 -0
- package/dist/cjs/utils/sagaId.js.map +1 -0
- package/dist/cjs/utils/setupOneTimeEmitterSubscription.js +45 -0
- package/dist/cjs/utils/setupOneTimeEmitterSubscription.js.map +1 -0
- package/dist/cjs/utils/subscribe.js +43 -0
- package/dist/cjs/utils/subscribe.js.map +1 -0
- package/dist/cjs/utils/validateHandlers.js +21 -0
- package/dist/cjs/utils/validateHandlers.js.map +1 -0
- package/dist/cjs/workers/AbstractWorkerProjection.js +56 -0
- package/dist/cjs/workers/AbstractWorkerProjection.js.map +1 -0
- package/dist/cjs/workers/WorkerProxyProjection.js +142 -0
- package/dist/cjs/workers/WorkerProxyProjection.js.map +1 -0
- package/dist/cjs/workers/index.js +20 -0
- package/dist/cjs/workers/index.js.map +1 -0
- package/dist/cjs/workers/interfaces/IProxyProjection.js +3 -0
- package/dist/cjs/workers/interfaces/IProxyProjection.js.map +1 -0
- package/dist/cjs/workers/interfaces/IWorkerProjection.js +3 -0
- package/dist/cjs/workers/interfaces/IWorkerProjection.js.map +1 -0
- package/dist/cjs/workers/interfaces/index.js +3 -0
- package/dist/cjs/workers/interfaces/index.js.map +1 -0
- package/dist/cjs/workers/protocol.js +16 -0
- package/dist/cjs/workers/protocol.js.map +1 -0
- package/dist/cjs/workers/utils/ProjectionView.js +3 -0
- package/dist/cjs/workers/utils/ProjectionView.js.map +1 -0
- package/dist/cjs/workers/utils/createWorker.js +87 -0
- package/dist/cjs/workers/utils/createWorker.js.map +1 -0
- package/dist/cjs/workers/utils/createWorkerInstance.js +59 -0
- package/dist/cjs/workers/utils/createWorkerInstance.js.map +1 -0
- package/dist/cjs/workers/utils/index.js +21 -0
- package/dist/cjs/workers/utils/index.js.map +1 -0
- package/dist/cjs/workers/utils/nodeEndpoint.js +8 -0
- package/dist/cjs/workers/utils/nodeEndpoint.js.map +1 -0
- package/dist/cjs/workers/utils/workerProxyFactory.js +21 -0
- package/dist/cjs/workers/utils/workerProxyFactory.js.map +1 -0
- package/dist/esm/AbstractAggregate.js +189 -0
- package/dist/esm/AbstractAggregate.js.map +1 -0
- package/dist/esm/AbstractProjection.js +161 -0
- package/dist/esm/AbstractProjection.js.map +1 -0
- package/dist/esm/AbstractSaga.js +105 -0
- package/dist/esm/AbstractSaga.js.map +1 -0
- package/dist/esm/AggregateCommandHandler.js +178 -0
- package/dist/esm/AggregateCommandHandler.js.map +1 -0
- package/dist/esm/CommandBus.js +5 -0
- package/dist/esm/CommandBus.js.map +1 -0
- package/dist/esm/CqrsContainerBuilder.js +93 -0
- package/dist/esm/CqrsContainerBuilder.js.map +1 -0
- package/dist/esm/Event.js +15 -0
- package/dist/esm/Event.js.map +1 -0
- package/dist/esm/EventDispatchPipeline.js +79 -0
- package/dist/esm/EventDispatchPipeline.js.map +1 -0
- package/dist/esm/EventDispatcher.js +89 -0
- package/dist/esm/EventDispatcher.js.map +1 -0
- package/dist/esm/EventIdAugmentor.js +26 -0
- package/dist/esm/EventIdAugmentor.js.map +1 -0
- package/dist/esm/EventStore.js +102 -0
- package/dist/esm/EventStore.js.map +1 -0
- package/dist/esm/SagaEventHandler.js +116 -0
- package/dist/esm/SagaEventHandler.js.map +1 -0
- package/dist/esm/errors/ConcurrencyError.js +17 -0
- package/dist/esm/errors/ConcurrencyError.js.map +1 -0
- package/dist/esm/errors/index.js +2 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/in-memory/InMemoryEventStorage.js +102 -0
- package/dist/esm/in-memory/InMemoryEventStorage.js.map +1 -0
- package/dist/esm/in-memory/InMemoryLock.js +40 -0
- package/dist/esm/in-memory/InMemoryLock.js.map +1 -0
- package/dist/esm/in-memory/InMemoryMessageBus.js +89 -0
- package/dist/esm/in-memory/InMemoryMessageBus.js.map +1 -0
- package/dist/esm/in-memory/InMemorySnapshotStorage.js +64 -0
- package/dist/esm/in-memory/InMemorySnapshotStorage.js.map +1 -0
- package/dist/esm/in-memory/InMemoryView.js +150 -0
- package/dist/esm/in-memory/InMemoryView.js.map +1 -0
- package/dist/esm/in-memory/index.js +6 -0
- package/dist/esm/in-memory/index.js.map +1 -0
- package/dist/esm/in-memory/utils/index.js +2 -0
- package/dist/esm/in-memory/utils/index.js.map +1 -0
- package/dist/esm/in-memory/utils/nextCycle.js +5 -0
- package/dist/esm/in-memory/utils/nextCycle.js.map +1 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interfaces/IAggregate.js +2 -0
- package/dist/esm/interfaces/IAggregate.js.map +1 -0
- package/dist/esm/interfaces/IAggregateSnapshotStorage.js +9 -0
- package/dist/esm/interfaces/IAggregateSnapshotStorage.js.map +1 -0
- package/dist/esm/interfaces/ICommand.js +2 -0
- package/dist/esm/interfaces/ICommand.js.map +1 -0
- package/dist/esm/interfaces/ICommandBus.js +2 -0
- package/dist/esm/interfaces/ICommandBus.js.map +1 -0
- package/dist/esm/interfaces/IContainer.js +2 -0
- package/dist/esm/interfaces/IContainer.js.map +1 -0
- package/dist/esm/interfaces/IDispatchPipelineProcessor.js +5 -0
- package/dist/esm/interfaces/IDispatchPipelineProcessor.js.map +1 -0
- package/dist/esm/interfaces/IEvent.js +6 -0
- package/dist/esm/interfaces/IEvent.js.map +1 -0
- package/dist/esm/interfaces/IEventBus.js +5 -0
- package/dist/esm/interfaces/IEventBus.js.map +1 -0
- package/dist/esm/interfaces/IEventDispatcher.js +2 -0
- package/dist/esm/interfaces/IEventDispatcher.js.map +1 -0
- package/dist/esm/interfaces/IEventLocker.js +11 -0
- package/dist/esm/interfaces/IEventLocker.js.map +1 -0
- package/dist/esm/interfaces/IEventReceptor.js +2 -0
- package/dist/esm/interfaces/IEventReceptor.js.map +1 -0
- package/dist/esm/interfaces/IEventSet.js +4 -0
- package/dist/esm/interfaces/IEventSet.js.map +1 -0
- package/dist/esm/interfaces/IEventStorageReader.js +9 -0
- package/dist/esm/interfaces/IEventStorageReader.js.map +1 -0
- package/dist/esm/interfaces/IEventStore.js +2 -0
- package/dist/esm/interfaces/IEventStore.js.map +1 -0
- package/dist/esm/interfaces/IEventStream.js +2 -0
- package/dist/esm/interfaces/IEventStream.js.map +1 -0
- package/dist/esm/interfaces/IIdentifierProvider.js +5 -0
- package/dist/esm/interfaces/IIdentifierProvider.js.map +1 -0
- package/dist/esm/interfaces/ILocker.js +5 -0
- package/dist/esm/interfaces/ILocker.js.map +1 -0
- package/dist/esm/interfaces/ILogger.js +2 -0
- package/dist/esm/interfaces/ILogger.js.map +1 -0
- package/dist/esm/interfaces/IMessage.js +6 -0
- package/dist/esm/interfaces/IMessage.js.map +1 -0
- package/dist/esm/interfaces/IMutableState.js +2 -0
- package/dist/esm/interfaces/IMutableState.js.map +1 -0
- package/dist/esm/interfaces/IObjectStorage.js +2 -0
- package/dist/esm/interfaces/IObjectStorage.js.map +1 -0
- package/dist/esm/interfaces/IObservable.js +7 -0
- package/dist/esm/interfaces/IObservable.js.map +1 -0
- package/dist/esm/interfaces/IObservableQueueProvider.js +5 -0
- package/dist/esm/interfaces/IObservableQueueProvider.js.map +1 -0
- package/dist/esm/interfaces/IObserver.js +2 -0
- package/dist/esm/interfaces/IObserver.js.map +1 -0
- package/dist/esm/interfaces/IProjection.js +2 -0
- package/dist/esm/interfaces/IProjection.js.map +1 -0
- package/dist/esm/interfaces/ISaga.js +2 -0
- package/dist/esm/interfaces/ISaga.js.map +1 -0
- package/dist/esm/interfaces/ISnapshotEvent.js +6 -0
- package/dist/esm/interfaces/ISnapshotEvent.js.map +1 -0
- package/dist/esm/interfaces/IViewLocker.js +17 -0
- package/dist/esm/interfaces/IViewLocker.js.map +1 -0
- package/dist/esm/interfaces/Identifier.js +2 -0
- package/dist/esm/interfaces/Identifier.js.map +1 -0
- package/dist/esm/interfaces/index.js +30 -0
- package/dist/esm/interfaces/index.js.map +1 -0
- package/dist/esm/interfaces/isObject.js +5 -0
- package/dist/esm/interfaces/isObject.js.map +1 -0
- package/dist/esm/rabbitmq/IContainer.js +2 -0
- package/dist/esm/rabbitmq/IContainer.js.map +1 -0
- package/dist/esm/rabbitmq/RabbitMqCommandBus.js +80 -0
- package/dist/esm/rabbitmq/RabbitMqCommandBus.js.map +1 -0
- package/dist/esm/rabbitmq/RabbitMqEventBus.js +117 -0
- package/dist/esm/rabbitmq/RabbitMqEventBus.js.map +1 -0
- package/dist/esm/rabbitmq/RabbitMqGateway.js +541 -0
- package/dist/esm/rabbitmq/RabbitMqGateway.js.map +1 -0
- package/dist/esm/rabbitmq/index.js +5 -0
- package/dist/esm/rabbitmq/index.js.map +1 -0
- package/dist/esm/rabbitmq/utils/index.js +3 -0
- package/dist/esm/rabbitmq/utils/index.js.map +1 -0
- package/dist/esm/rabbitmq/utils/registerExitCleanup.js +24 -0
- package/dist/esm/rabbitmq/utils/registerExitCleanup.js.map +1 -0
- package/dist/esm/rabbitmq/utils/resolveProvider.js +6 -0
- package/dist/esm/rabbitmq/utils/resolveProvider.js.map +1 -0
- package/dist/esm/sqlite/AbstractSqliteAccessor.js +46 -0
- package/dist/esm/sqlite/AbstractSqliteAccessor.js.map +1 -0
- package/dist/esm/sqlite/AbstractSqliteObjectProjection.js +22 -0
- package/dist/esm/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
- package/dist/esm/sqlite/AbstractSqliteView.js +46 -0
- package/dist/esm/sqlite/AbstractSqliteView.js.map +1 -0
- package/dist/esm/sqlite/IContainer.js +2 -0
- package/dist/esm/sqlite/IContainer.js.map +1 -0
- package/dist/esm/sqlite/SqliteEventLocker.js +89 -0
- package/dist/esm/sqlite/SqliteEventLocker.js.map +1 -0
- package/dist/esm/sqlite/SqliteObjectStorage.js +110 -0
- package/dist/esm/sqlite/SqliteObjectStorage.js.map +1 -0
- package/dist/esm/sqlite/SqliteObjectView.js +44 -0
- package/dist/esm/sqlite/SqliteObjectView.js.map +1 -0
- package/dist/esm/sqlite/SqliteProjectionDataParams.js +2 -0
- package/dist/esm/sqlite/SqliteProjectionDataParams.js.map +1 -0
- package/dist/esm/sqlite/SqliteViewLocker.js +115 -0
- package/dist/esm/sqlite/SqliteViewLocker.js.map +1 -0
- package/dist/esm/sqlite/index.js +10 -0
- package/dist/esm/sqlite/index.js.map +1 -0
- package/dist/esm/sqlite/queries/eventLockTableInit.js +11 -0
- package/dist/esm/sqlite/queries/eventLockTableInit.js.map +1 -0
- package/dist/esm/sqlite/queries/index.js +3 -0
- package/dist/esm/sqlite/queries/index.js.map +1 -0
- package/dist/esm/sqlite/queries/viewLockTableInit.js +10 -0
- package/dist/esm/sqlite/queries/viewLockTableInit.js.map +1 -0
- package/dist/esm/sqlite/utils/getEventId.js +7 -0
- package/dist/esm/sqlite/utils/getEventId.js.map +1 -0
- package/dist/esm/sqlite/utils/guid.js +5 -0
- package/dist/esm/sqlite/utils/guid.js.map +1 -0
- package/dist/esm/sqlite/utils/index.js +3 -0
- package/dist/esm/sqlite/utils/index.js.map +1 -0
- package/dist/esm/utils/Deferred.js +34 -0
- package/dist/esm/utils/Deferred.js.map +1 -0
- package/dist/esm/utils/Lock.js +97 -0
- package/dist/esm/utils/Lock.js.map +1 -0
- package/dist/esm/utils/MapAssertable.js +26 -0
- package/dist/esm/utils/MapAssertable.js.map +1 -0
- package/dist/esm/utils/assert.js +70 -0
- package/dist/esm/utils/assert.js.map +1 -0
- package/dist/esm/utils/clone.js +10 -0
- package/dist/esm/utils/clone.js.map +1 -0
- package/dist/esm/utils/extractErrorDetails.js +33 -0
- package/dist/esm/utils/extractErrorDetails.js.map +1 -0
- package/dist/esm/utils/getClassName.js +7 -0
- package/dist/esm/utils/getClassName.js.map +1 -0
- package/dist/esm/utils/getHandler.js +15 -0
- package/dist/esm/utils/getHandler.js.map +1 -0
- package/dist/esm/utils/getMessageHandlerNames.js +27 -0
- package/dist/esm/utils/getMessageHandlerNames.js.map +1 -0
- package/dist/esm/utils/index.js +15 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/isClass.js +5 -0
- package/dist/esm/utils/isClass.js.map +1 -0
- package/dist/esm/utils/sagaId.js +18 -0
- package/dist/esm/utils/sagaId.js.map +1 -0
- package/dist/esm/utils/setupOneTimeEmitterSubscription.js +42 -0
- package/dist/esm/utils/setupOneTimeEmitterSubscription.js.map +1 -0
- package/dist/esm/utils/subscribe.js +40 -0
- package/dist/esm/utils/subscribe.js.map +1 -0
- package/dist/esm/utils/validateHandlers.js +18 -0
- package/dist/esm/utils/validateHandlers.js.map +1 -0
- package/dist/esm/workers/AbstractWorkerProjection.js +52 -0
- package/dist/esm/workers/AbstractWorkerProjection.js.map +1 -0
- package/dist/esm/workers/WorkerProxyProjection.js +105 -0
- package/dist/esm/workers/WorkerProxyProjection.js.map +1 -0
- package/dist/esm/workers/index.js +4 -0
- package/dist/esm/workers/index.js.map +1 -0
- package/dist/esm/workers/interfaces/IProxyProjection.js +2 -0
- package/dist/esm/workers/interfaces/IProxyProjection.js.map +1 -0
- package/dist/esm/workers/interfaces/IWorkerProjection.js +2 -0
- package/dist/esm/workers/interfaces/IWorkerProjection.js.map +1 -0
- package/dist/esm/workers/interfaces/index.js +2 -0
- package/dist/esm/workers/interfaces/index.js.map +1 -0
- package/dist/esm/workers/protocol.js +11 -0
- package/dist/esm/workers/protocol.js.map +1 -0
- package/dist/esm/workers/utils/ProjectionView.js +2 -0
- package/dist/esm/workers/utils/ProjectionView.js.map +1 -0
- package/dist/esm/workers/utils/createWorker.js +51 -0
- package/dist/esm/workers/utils/createWorker.js.map +1 -0
- package/dist/esm/workers/utils/createWorkerInstance.js +23 -0
- package/dist/esm/workers/utils/createWorkerInstance.js.map +1 -0
- package/dist/esm/workers/utils/index.js +5 -0
- package/dist/esm/workers/utils/index.js.map +1 -0
- package/dist/esm/workers/utils/nodeEndpoint.js +5 -0
- package/dist/esm/workers/utils/nodeEndpoint.js.map +1 -0
- package/dist/esm/workers/utils/workerProxyFactory.js +18 -0
- package/dist/esm/workers/utils/workerProxyFactory.js.map +1 -0
- package/dist/types/AbstractAggregate.d.ts +80 -0
- package/dist/types/AbstractProjection.d.ts +77 -0
- package/dist/types/AbstractSaga.d.ts +42 -0
- package/dist/types/AggregateCommandHandler.d.ts +22 -0
- package/dist/types/CommandBus.d.ts +4 -0
- package/dist/types/CqrsContainerBuilder.d.ts +21 -0
- package/dist/types/Event.d.ts +9 -0
- package/dist/types/EventDispatchPipeline.d.ts +16 -0
- package/dist/types/EventDispatcher.d.ts +39 -0
- package/dist/types/EventIdAugmentor.d.ts +12 -0
- package/dist/types/EventStore.d.ts +29 -0
- package/dist/types/SagaEventHandler.d.ts +22 -0
- package/dist/types/errors/ConcurrencyError.d.ts +9 -0
- package/dist/types/errors/index.d.ts +1 -0
- package/dist/types/in-memory/InMemoryEventStorage.d.ts +24 -0
- package/dist/types/in-memory/InMemoryLock.d.ts +23 -0
- package/dist/types/in-memory/InMemoryMessageBus.d.ts +45 -0
- package/dist/types/in-memory/InMemorySnapshotStorage.d.ts +37 -0
- package/dist/types/in-memory/InMemoryView.d.ts +53 -0
- package/dist/types/in-memory/index.d.ts +5 -0
- package/dist/types/in-memory/utils/index.d.ts +1 -0
- package/dist/types/in-memory/utils/nextCycle.d.ts +4 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/interfaces/IAggregate.d.ts +78 -0
- package/dist/types/interfaces/IAggregateSnapshotStorage.d.ts +8 -0
- package/dist/types/interfaces/ICommand.d.ts +2 -0
- package/dist/types/interfaces/ICommandBus.d.ts +15 -0
- package/dist/types/interfaces/IContainer.d.ts +37 -0
- package/dist/types/interfaces/IDispatchPipelineProcessor.d.ts +29 -0
- package/dist/types/interfaces/IEvent.d.ts +7 -0
- package/dist/types/interfaces/IEventBus.d.ts +6 -0
- package/dist/types/interfaces/IEventDispatcher.d.ts +6 -0
- package/dist/types/interfaces/IEventLocker.d.ts +28 -0
- package/dist/types/interfaces/IEventReceptor.d.ts +5 -0
- package/dist/types/interfaces/IEventSet.d.ts +3 -0
- package/dist/types/interfaces/IEventStorageReader.d.ts +48 -0
- package/dist/types/interfaces/IEventStore.d.ts +9 -0
- package/dist/types/interfaces/IEventStream.d.ts +2 -0
- package/dist/types/interfaces/IIdentifierProvider.d.ts +10 -0
- package/dist/types/interfaces/ILocker.d.ts +8 -0
- package/dist/types/interfaces/ILogger.d.ts +22 -0
- package/dist/types/interfaces/IMessage.d.ts +23 -0
- package/dist/types/interfaces/IMutableState.d.ts +14 -0
- package/dist/types/interfaces/IObjectStorage.d.ts +8 -0
- package/dist/types/interfaces/IObservable.d.ts +15 -0
- package/dist/types/interfaces/IObservableQueueProvider.d.ts +8 -0
- package/dist/types/interfaces/IObserver.d.ts +4 -0
- package/dist/types/interfaces/IProjection.d.ts +17 -0
- package/dist/types/interfaces/ISaga.d.ts +38 -0
- package/dist/types/interfaces/ISnapshotEvent.d.ts +7 -0
- package/dist/types/interfaces/IViewLocker.d.ts +34 -0
- package/dist/types/interfaces/Identifier.d.ts +1 -0
- package/dist/types/interfaces/index.d.ts +29 -0
- package/dist/types/interfaces/isObject.d.ts +1 -0
- package/dist/types/rabbitmq/IContainer.d.ts +19 -0
- package/dist/types/rabbitmq/RabbitMqCommandBus.d.ts +38 -0
- package/dist/types/rabbitmq/RabbitMqEventBus.d.ts +44 -0
- package/dist/types/rabbitmq/RabbitMqGateway.d.ts +133 -0
- package/dist/types/rabbitmq/index.d.ts +4 -0
- package/dist/types/rabbitmq/utils/index.d.ts +2 -0
- package/dist/types/rabbitmq/utils/registerExitCleanup.d.ts +10 -0
- package/dist/types/rabbitmq/utils/resolveProvider.d.ts +3 -0
- package/dist/types/sqlite/AbstractSqliteAccessor.d.ts +25 -0
- package/dist/types/sqlite/AbstractSqliteObjectProjection.d.ts +8 -0
- package/dist/types/sqlite/AbstractSqliteView.d.ts +23 -0
- package/dist/types/sqlite/IContainer.d.ts +7 -0
- package/dist/types/sqlite/SqliteEventLocker.d.ts +30 -0
- package/dist/types/sqlite/SqliteObjectStorage.d.ts +17 -0
- package/dist/types/sqlite/SqliteObjectView.d.ts +19 -0
- package/dist/types/sqlite/SqliteProjectionDataParams.d.ts +14 -0
- package/dist/types/sqlite/SqliteViewLocker.d.ts +31 -0
- package/dist/types/sqlite/index.d.ts +9 -0
- package/dist/types/sqlite/queries/eventLockTableInit.d.ts +1 -0
- package/dist/types/sqlite/queries/index.d.ts +2 -0
- package/dist/types/sqlite/queries/viewLockTableInit.d.ts +1 -0
- package/dist/types/sqlite/utils/getEventId.d.ts +5 -0
- package/dist/types/sqlite/utils/guid.d.ts +4 -0
- package/dist/types/sqlite/utils/index.d.ts +2 -0
- package/dist/types/utils/Deferred.d.ts +13 -0
- package/dist/types/utils/Lock.d.ts +30 -0
- package/dist/types/utils/MapAssertable.d.ts +11 -0
- package/dist/types/utils/assert.d.ts +20 -0
- package/dist/types/utils/clone.d.ts +1 -0
- package/dist/types/utils/extractErrorDetails.d.ts +8 -0
- package/dist/types/utils/getClassName.d.ts +4 -0
- package/dist/types/utils/getHandler.d.ts +7 -0
- package/dist/types/utils/getMessageHandlerNames.d.ts +12 -0
- package/dist/types/utils/index.d.ts +14 -0
- package/dist/types/utils/isClass.d.ts +1 -0
- package/dist/types/utils/sagaId.d.ts +6 -0
- package/dist/types/utils/setupOneTimeEmitterSubscription.d.ts +12 -0
- package/dist/types/utils/subscribe.d.ts +9 -0
- package/dist/types/utils/validateHandlers.d.ts +4 -0
- package/dist/types/workers/AbstractWorkerProjection.d.ts +25 -0
- package/dist/types/workers/WorkerProxyProjection.d.ts +25 -0
- package/dist/types/workers/index.d.ts +3 -0
- package/dist/types/workers/interfaces/IProxyProjection.d.ts +15 -0
- package/dist/types/workers/interfaces/IWorkerProjection.d.ts +19 -0
- package/dist/types/workers/interfaces/index.d.ts +2 -0
- package/dist/types/workers/protocol.d.ts +10 -0
- package/dist/types/workers/utils/ProjectionView.d.ts +2 -0
- package/dist/types/workers/utils/createWorker.d.ts +10 -0
- package/dist/types/workers/utils/createWorkerInstance.d.ts +11 -0
- package/dist/types/workers/utils/index.d.ts +5 -0
- package/dist/types/workers/utils/nodeEndpoint.d.ts +2 -0
- package/dist/types/workers/utils/workerProxyFactory.d.ts +14 -0
- package/package.json +129 -29
- package/jsconfig.json +0 -15
- package/src/AbstractAggregate.js +0 -277
- package/src/AbstractProjection.js +0 -192
- package/src/AbstractSaga.js +0 -171
- package/src/AggregateCommandHandler.js +0 -126
- package/src/CommandBus.js +0 -91
- package/src/CqrsContainerBuilder.js +0 -131
- package/src/EventStore.js +0 -457
- package/src/EventStream.js +0 -63
- package/src/SagaEventHandler.js +0 -141
- package/src/index.js +0 -21
- package/src/infrastructure/InMemoryEventStorage.js +0 -76
- package/src/infrastructure/InMemoryMessageBus.js +0 -132
- package/src/infrastructure/InMemorySnapshotStorage.js +0 -40
- package/src/infrastructure/InMemoryView.js +0 -265
- package/src/subscribe.js +0 -48
- package/src/utils/getClassName.js +0 -11
- package/src/utils/getHandledMessageTypes.js +0 -24
- package/src/utils/getHandler.js +0 -21
- package/src/utils/getMessageHandlerNames.js +0 -51
- package/src/utils/index.js +0 -6
- package/src/utils/isClass.js +0 -6
- package/src/utils/nullLogger.js +0 -8
- package/src/utils/validateHandlers.js +0 -25
- package/types/index.d.ts +0 -16
- package/types/interfaces/IAggregate.d.ts +0 -30
- package/types/interfaces/IAggregateSnapshotStorage.d.ts +0 -4
- package/types/interfaces/ICommandBus.d.ts +0 -6
- package/types/interfaces/ICommandHandler.d.ts +0 -3
- package/types/interfaces/IConcurrentView.d.ts +0 -22
- package/types/interfaces/IEventReceptor.d.ts +0 -3
- package/types/interfaces/IEventStorage.d.ts +0 -20
- package/types/interfaces/IEventStore.d.ts +0 -18
- package/types/interfaces/IEventStream.d.ts +0 -13
- package/types/interfaces/ILogger.d.ts +0 -3
- package/types/interfaces/IMessageBus.d.ts +0 -5
- package/types/interfaces/IObserver.d.ts +0 -11
- package/types/interfaces/IProjection.d.ts +0 -10
- package/types/interfaces/ISaga.d.ts +0 -27
- package/types/interfaces/Identifier.d.ts +0 -1
package/src/EventStore.js
DELETED
|
@@ -1,457 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const InMemoryBus = require('./infrastructure/InMemoryMessageBus');
|
|
4
|
-
const nullLogger = require('./utils/nullLogger');
|
|
5
|
-
const EventStream = require('./EventStream');
|
|
6
|
-
|
|
7
|
-
const SNAPSHOT_EVENT_TYPE = 'snapshot';
|
|
8
|
-
const service = 'EventStore';
|
|
9
|
-
|
|
10
|
-
const _defaults = {
|
|
11
|
-
publishAsync: true
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Validate event structure
|
|
16
|
-
*
|
|
17
|
-
* @param {IEvent} event
|
|
18
|
-
*/
|
|
19
|
-
function validateEvent(event) {
|
|
20
|
-
if (typeof event !== 'object' || !event) throw new TypeError('event must be an Object');
|
|
21
|
-
if (typeof event.type !== 'string' || !event.type.length) throw new TypeError('event.type must be a non-empty String');
|
|
22
|
-
if (!event.aggregateId && !event.sagaId) throw new TypeError('either event.aggregateId or event.sagaId is required');
|
|
23
|
-
if (event.sagaId && typeof event.sagaVersion === 'undefined') throw new TypeError('event.sagaVersion is required, when event.sagaId is defined');
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Ensure provided eventStorage matches the expected format
|
|
28
|
-
* @param {IEventStorage} storage
|
|
29
|
-
*/
|
|
30
|
-
function validateEventStorage(storage) {
|
|
31
|
-
if (!storage) throw new TypeError('storage argument required');
|
|
32
|
-
if (typeof storage !== 'object') throw new TypeError('storage argument must be an Object');
|
|
33
|
-
if (typeof storage.commitEvents !== 'function') throw new TypeError('storage.commitEvents must be a Function');
|
|
34
|
-
if (typeof storage.getEvents !== 'function') throw new TypeError('storage.getEvents must be a Function');
|
|
35
|
-
if (typeof storage.getAggregateEvents !== 'function') throw new TypeError('storage.getAggregateEvents must be a Function');
|
|
36
|
-
if (typeof storage.getSagaEvents !== 'function') throw new TypeError('storage.getSagaEvents must be a Function');
|
|
37
|
-
if (typeof storage.getNewId !== 'function') throw new TypeError('storage.getNewId must be a Function');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Check if storage emits events
|
|
42
|
-
*
|
|
43
|
-
* @param {object} storage
|
|
44
|
-
* @returns {boolean}
|
|
45
|
-
*/
|
|
46
|
-
function isEmitter(storage) {
|
|
47
|
-
return typeof storage.on === 'function';
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Ensure snapshotStorage matches the expected format
|
|
52
|
-
* @param {IAggregateSnapshotStorage} snapshotStorage
|
|
53
|
-
*/
|
|
54
|
-
function validateSnapshotStorage(snapshotStorage) {
|
|
55
|
-
if (typeof snapshotStorage !== 'object' || !snapshotStorage)
|
|
56
|
-
throw new TypeError('snapshotStorage argument must be an Object');
|
|
57
|
-
if (typeof snapshotStorage.getAggregateSnapshot !== 'function')
|
|
58
|
-
throw new TypeError('snapshotStorage.getAggregateSnapshot argument must be a Function');
|
|
59
|
-
if (typeof snapshotStorage.saveAggregateSnapshot !== 'function')
|
|
60
|
-
throw new TypeError('snapshotStorage.saveAggregateSnapshot argument must be a Function');
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Ensure messageBus matches the expected format
|
|
65
|
-
* @param {IMessageBus} messageBus
|
|
66
|
-
*/
|
|
67
|
-
function validateMessageBus(messageBus) {
|
|
68
|
-
if (typeof messageBus !== 'object' || !messageBus)
|
|
69
|
-
throw new TypeError('messageBus argument must be an Object');
|
|
70
|
-
if (typeof messageBus.on !== 'function')
|
|
71
|
-
throw new TypeError('messageBus.on argument must be a Function');
|
|
72
|
-
if (typeof messageBus.publish !== 'function')
|
|
73
|
-
throw new TypeError('messageBus.publish argument must be a Function');
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Create one-time eventEmitter subscription for one or multiple events that match a filter
|
|
79
|
-
*
|
|
80
|
-
* @param {IEventEmitter} emitter
|
|
81
|
-
* @param {string[]} messageTypes Array of event type to subscribe to
|
|
82
|
-
* @param {function(IEvent):any} [handler] Optional handler to execute for a first event received
|
|
83
|
-
* @param {function(IEvent):boolean} [filter] Optional filter to apply before executing a handler
|
|
84
|
-
* @param {ILogger} logger
|
|
85
|
-
* @return {Promise<IEvent>} Resolves to first event that passes filter
|
|
86
|
-
*/
|
|
87
|
-
function setupOneTimeEmitterSubscription(emitter, messageTypes, filter, handler, logger) {
|
|
88
|
-
if (typeof emitter !== 'object' || !emitter)
|
|
89
|
-
throw new TypeError('emitter argument must be an Object');
|
|
90
|
-
if (!Array.isArray(messageTypes) || messageTypes.some(m => !m || typeof m !== 'string'))
|
|
91
|
-
throw new TypeError('messageTypes argument must be an Array of non-empty Strings');
|
|
92
|
-
if (handler && typeof handler !== 'function')
|
|
93
|
-
throw new TypeError('handler argument, when specified, must be a Function');
|
|
94
|
-
if (filter && typeof filter !== 'function')
|
|
95
|
-
throw new TypeError('filter argument, when specified, must be a Function');
|
|
96
|
-
|
|
97
|
-
return new Promise(resolve => {
|
|
98
|
-
|
|
99
|
-
// handler will be invoked only once,
|
|
100
|
-
// even if multiple events have been emitted before subscription was destroyed
|
|
101
|
-
// https://nodejs.org/api/events.html#events_emitter_removelistener_eventname_listener
|
|
102
|
-
let handled = false;
|
|
103
|
-
|
|
104
|
-
function filteredHandler(event) {
|
|
105
|
-
if (filter && !filter(event)) return;
|
|
106
|
-
if (handled) return;
|
|
107
|
-
handled = true;
|
|
108
|
-
|
|
109
|
-
for (const messageType of messageTypes)
|
|
110
|
-
emitter.off(messageType, filteredHandler);
|
|
111
|
-
|
|
112
|
-
if (logger)
|
|
113
|
-
logger.log('debug', `'${event.type}' received, one-time subscription to '${messageTypes.join(',')}' removed`, { service });
|
|
114
|
-
|
|
115
|
-
if (handler)
|
|
116
|
-
handler(event);
|
|
117
|
-
|
|
118
|
-
resolve(event);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
for (const messageType of messageTypes)
|
|
122
|
-
emitter.on(messageType, filteredHandler);
|
|
123
|
-
|
|
124
|
-
if (logger)
|
|
125
|
-
logger.log('debug', `set up one-time ${filter ? 'filtered subscription' : 'subscription'} to '${messageTypes.join(',')}'`, { service });
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* @typedef {object} EventStoreConfig
|
|
131
|
-
* @property {boolean} [publishAsync]
|
|
132
|
-
*/
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* @class EventStore
|
|
136
|
-
* @implements {IEventStore}
|
|
137
|
-
*/
|
|
138
|
-
class EventStore {
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Default configuration
|
|
142
|
-
*
|
|
143
|
-
* @type {EventStoreConfig}
|
|
144
|
-
* @static
|
|
145
|
-
*/
|
|
146
|
-
static get defaults() {
|
|
147
|
-
return _defaults;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Configuration
|
|
152
|
-
*
|
|
153
|
-
* @type {EventStoreConfig}
|
|
154
|
-
* @readonly
|
|
155
|
-
*/
|
|
156
|
-
get config() {
|
|
157
|
-
return this._config;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Whether storage supports aggregate snapshots
|
|
162
|
-
*
|
|
163
|
-
* @type {boolean}
|
|
164
|
-
* @readonly
|
|
165
|
-
*/
|
|
166
|
-
get snapshotsSupported() {
|
|
167
|
-
return Boolean(this._snapshotStorage);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Creates an instance of EventStore.
|
|
172
|
-
*
|
|
173
|
-
* @param {object} options
|
|
174
|
-
* @param {IEventStorage} options.storage
|
|
175
|
-
* @param {IAggregateSnapshotStorage} [options.snapshotStorage]
|
|
176
|
-
* @param {IMessageBus} [options.messageBus]
|
|
177
|
-
* @param {function(IEvent):void} [options.eventValidator]
|
|
178
|
-
* @param {EventStoreConfig} [options.eventStoreConfig]
|
|
179
|
-
* @param {ILogger} [options.logger]
|
|
180
|
-
*/
|
|
181
|
-
constructor(options) {
|
|
182
|
-
validateEventStorage(options.storage);
|
|
183
|
-
if (options.snapshotStorage)
|
|
184
|
-
validateSnapshotStorage(options.snapshotStorage);
|
|
185
|
-
if (options.messageBus)
|
|
186
|
-
validateMessageBus(options.messageBus);
|
|
187
|
-
if (options.eventValidator !== undefined && typeof options.eventValidator !== 'function')
|
|
188
|
-
throw new TypeError('eventValidator, when provided, must be a function');
|
|
189
|
-
|
|
190
|
-
this._config = Object.freeze(Object.assign({}, EventStore.defaults, options.eventStoreConfig));
|
|
191
|
-
this._storage = options.storage;
|
|
192
|
-
this._snapshotStorage = options.snapshotStorage;
|
|
193
|
-
this._validator = options.eventValidator || validateEvent;
|
|
194
|
-
this._logger = options.logger || nullLogger;
|
|
195
|
-
|
|
196
|
-
/** @type {string[]} */
|
|
197
|
-
this._sagaStarters = [];
|
|
198
|
-
|
|
199
|
-
if (options.messageBus) {
|
|
200
|
-
this._publishTo = options.messageBus;
|
|
201
|
-
this._eventEmitter = options.messageBus;
|
|
202
|
-
}
|
|
203
|
-
else if (isEmitter(options.storage)) {
|
|
204
|
-
/** @type {IEventEmitter} */
|
|
205
|
-
this._eventEmitter = options.storage;
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
const internalMessageBus = new InMemoryBus();
|
|
209
|
-
this._publishTo = internalMessageBus;
|
|
210
|
-
this._eventEmitter = internalMessageBus;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Retrieve new ID from the storage
|
|
216
|
-
*
|
|
217
|
-
* @returns {Promise<Identifier>}
|
|
218
|
-
*/
|
|
219
|
-
async getNewId() {
|
|
220
|
-
return this._storage.getNewId();
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Retrieve all events of specific types
|
|
225
|
-
*
|
|
226
|
-
* @param {string[]} eventTypes
|
|
227
|
-
* @returns {AsyncIterableIterator<IEvent>}
|
|
228
|
-
*/
|
|
229
|
-
async* getAllEvents(eventTypes) {
|
|
230
|
-
if (eventTypes && !Array.isArray(eventTypes)) throw new TypeError('eventTypes, if specified, must be an Array');
|
|
231
|
-
|
|
232
|
-
this._logger.log('debug', `retrieving ${eventTypes ? eventTypes.join(', ') : 'all'} events...`, { service });
|
|
233
|
-
|
|
234
|
-
const eventsIterable = await this._storage.getEvents(eventTypes);
|
|
235
|
-
|
|
236
|
-
yield* eventsIterable;
|
|
237
|
-
|
|
238
|
-
this._logger.log('debug', `${eventTypes ? eventTypes.join(', ') : 'all'} events retrieved`, { service });
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Retrieve all events of specific Aggregate
|
|
243
|
-
*
|
|
244
|
-
* @param {Identifier} aggregateId
|
|
245
|
-
* @returns {Promise<IEventStream>}
|
|
246
|
-
*/
|
|
247
|
-
async getAggregateEvents(aggregateId) {
|
|
248
|
-
if (!aggregateId) throw new TypeError('aggregateId argument required');
|
|
249
|
-
|
|
250
|
-
this._logger.log('debug', `retrieving event stream for aggregate ${aggregateId}...`, { service });
|
|
251
|
-
|
|
252
|
-
const snapshot = this.snapshotsSupported ?
|
|
253
|
-
await this._snapshotStorage.getAggregateSnapshot(aggregateId) :
|
|
254
|
-
undefined;
|
|
255
|
-
|
|
256
|
-
const events = [];
|
|
257
|
-
if (snapshot)
|
|
258
|
-
events.push(snapshot);
|
|
259
|
-
|
|
260
|
-
const eventsIterable = await this._storage.getAggregateEvents(aggregateId, { snapshot });
|
|
261
|
-
for await (const event of eventsIterable)
|
|
262
|
-
events.push(event);
|
|
263
|
-
|
|
264
|
-
const eventStream = new EventStream(events);
|
|
265
|
-
this._logger.log('debug', `${eventStream} retrieved`, { service });
|
|
266
|
-
|
|
267
|
-
return eventStream;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* Retrieve events of specific Saga
|
|
272
|
-
*
|
|
273
|
-
* @param {Identifier} sagaId
|
|
274
|
-
* @param {object} filter
|
|
275
|
-
* @param {IEvent} filter.beforeEvent
|
|
276
|
-
* @returns {Promise<IEventStream>}
|
|
277
|
-
*/
|
|
278
|
-
async getSagaEvents(sagaId, filter) {
|
|
279
|
-
if (!sagaId) throw new TypeError('sagaId argument required');
|
|
280
|
-
if (!filter) throw new TypeError('filter argument required');
|
|
281
|
-
if (!filter.beforeEvent) throw new TypeError('filter.beforeEvent argument required');
|
|
282
|
-
if (filter.beforeEvent.sagaVersion === undefined) throw new TypeError('filter.beforeEvent.sagaVersion argument required');
|
|
283
|
-
|
|
284
|
-
this._logger.log('debug', `retrieving event stream for saga ${sagaId}, v${filter.beforeEvent.sagaVersion}...`, { service });
|
|
285
|
-
|
|
286
|
-
const events = [];
|
|
287
|
-
const eventsIterable = await this._storage.getSagaEvents(sagaId, filter);
|
|
288
|
-
for await (const event of eventsIterable)
|
|
289
|
-
events.push(event);
|
|
290
|
-
|
|
291
|
-
const eventStream = new EventStream(events);
|
|
292
|
-
this._logger.log('debug', `${eventStream.toString()} retrieved`, { service });
|
|
293
|
-
|
|
294
|
-
return eventStream;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Register event types that start sagas.
|
|
299
|
-
* Upon such event commit a new sagaId will be assigned
|
|
300
|
-
*
|
|
301
|
-
* @param {string[]} eventTypes
|
|
302
|
-
* @memberof EventStore
|
|
303
|
-
*/
|
|
304
|
-
registerSagaStarters(eventTypes = []) {
|
|
305
|
-
const uniqueEventTypes = eventTypes.filter(e => !this._sagaStarters.includes(e));
|
|
306
|
-
this._sagaStarters.push(...uniqueEventTypes);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Validate events, commit to storage and publish to messageBus, if needed
|
|
311
|
-
*
|
|
312
|
-
* @param {IEventStream} events - a set of events to commit
|
|
313
|
-
* @returns {Promise<IEventStream>} - resolves to signed and committed events
|
|
314
|
-
*/
|
|
315
|
-
async commit(events) {
|
|
316
|
-
if (!Array.isArray(events)) throw new TypeError('events argument must be an Array');
|
|
317
|
-
|
|
318
|
-
const containsSagaStarters = this._sagaStarters.length && events.some(e => this._sagaStarters.includes(e.type));
|
|
319
|
-
const augmentedEvents = containsSagaStarters ?
|
|
320
|
-
await this._attachSagaIdToSagaStarterEvents(events) :
|
|
321
|
-
events;
|
|
322
|
-
|
|
323
|
-
const eventStreamWithoutSnapshots = await this.save(augmentedEvents);
|
|
324
|
-
|
|
325
|
-
// after events are saved to the persistent storage,
|
|
326
|
-
// publish them to the event bus (i.e. RabbitMq)
|
|
327
|
-
if (this._publishTo)
|
|
328
|
-
await this.publish(eventStreamWithoutSnapshots);
|
|
329
|
-
|
|
330
|
-
return eventStreamWithoutSnapshots;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Generate and attach sagaId to events that start new sagas
|
|
335
|
-
*
|
|
336
|
-
* @param {IEventStream} events
|
|
337
|
-
* @returns {Promise<IEventStream>}
|
|
338
|
-
* @memberof EventStore
|
|
339
|
-
* @private
|
|
340
|
-
*/
|
|
341
|
-
async _attachSagaIdToSagaStarterEvents(events) {
|
|
342
|
-
const r = [];
|
|
343
|
-
for (const event of events) {
|
|
344
|
-
if (this._sagaStarters.includes(event.type)) {
|
|
345
|
-
if (event.sagaId)
|
|
346
|
-
throw new Error(`Event "${event.type}" already contains sagaId. Multiple sagas with same event type are not supported`);
|
|
347
|
-
|
|
348
|
-
r.push(Object.assign({
|
|
349
|
-
sagaId: await this.getNewId(),
|
|
350
|
-
sagaVersion: 0
|
|
351
|
-
}, event));
|
|
352
|
-
}
|
|
353
|
-
else {
|
|
354
|
-
r.push(event);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
return new EventStream(r);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
/**
|
|
361
|
-
* Save events to the persistent storage(s)
|
|
362
|
-
*
|
|
363
|
-
* @param {IEventStream} events Event stream that may include snapshot events
|
|
364
|
-
* @returns {Promise<IEventStream>} Event stream without snapshot events
|
|
365
|
-
*/
|
|
366
|
-
async save(events) {
|
|
367
|
-
if (!Array.isArray(events)) throw new TypeError('events argument must be an Array');
|
|
368
|
-
|
|
369
|
-
const snapshotEvents = events.filter(e => e.type === SNAPSHOT_EVENT_TYPE);
|
|
370
|
-
if (snapshotEvents.length > 1)
|
|
371
|
-
throw new Error(`cannot commit a stream with more than 1 ${SNAPSHOT_EVENT_TYPE} event`);
|
|
372
|
-
if (snapshotEvents.length && !this.snapshotsSupported)
|
|
373
|
-
throw new Error(`${SNAPSHOT_EVENT_TYPE} event type is not supported by the storage`);
|
|
374
|
-
|
|
375
|
-
const snapshot = snapshotEvents[0];
|
|
376
|
-
const eventStream = new EventStream(events.filter(e => e !== snapshot));
|
|
377
|
-
|
|
378
|
-
this._logger.log('debug', `validating ${eventStream}...`, { service });
|
|
379
|
-
eventStream.forEach(this._validator);
|
|
380
|
-
|
|
381
|
-
this._logger.log('debug', `saving ${eventStream}...`, { service });
|
|
382
|
-
await Promise.all([
|
|
383
|
-
this._storage.commitEvents(eventStream),
|
|
384
|
-
snapshot ?
|
|
385
|
-
this._snapshotStorage.saveAggregateSnapshot(snapshot) :
|
|
386
|
-
undefined
|
|
387
|
-
]);
|
|
388
|
-
|
|
389
|
-
return eventStream;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
/**
|
|
393
|
-
* After events are
|
|
394
|
-
* @param {IEventStream} eventStream
|
|
395
|
-
*/
|
|
396
|
-
async publish(eventStream) {
|
|
397
|
-
const publishEvents = () =>
|
|
398
|
-
Promise.all(eventStream.map(event => this._publishTo.publish(event)))
|
|
399
|
-
.then(() => {
|
|
400
|
-
this._logger.log('debug', `${eventStream} published`, { service });
|
|
401
|
-
}, error => {
|
|
402
|
-
this._logger.log('error', `${eventStream} publishing failed: ${error.message}`, { service, stack: error.stack });
|
|
403
|
-
throw error;
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
if (this.config.publishAsync) {
|
|
407
|
-
this._logger.log('debug', `publishing ${eventStream} asynchronously...`, { service });
|
|
408
|
-
setImmediate(publishEvents);
|
|
409
|
-
}
|
|
410
|
-
else {
|
|
411
|
-
this._logger.log('debug', `publishing ${eventStream} synchronously...`, { service });
|
|
412
|
-
await publishEvents();
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Setup a listener for a specific event type
|
|
418
|
-
*
|
|
419
|
-
* @param {string} messageType
|
|
420
|
-
* @param {function(IEvent): any} handler
|
|
421
|
-
*/
|
|
422
|
-
on(messageType, handler) {
|
|
423
|
-
if (typeof messageType !== 'string' || !messageType.length) throw new TypeError('messageType argument must be a non-empty String');
|
|
424
|
-
if (typeof handler !== 'function') throw new TypeError('handler argument must be a Function');
|
|
425
|
-
if (arguments.length !== 2) throw new TypeError(`2 arguments are expected, but ${arguments.length} received`);
|
|
426
|
-
|
|
427
|
-
this._eventEmitter.on(messageType, handler);
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
/**
|
|
431
|
-
* Get or create a named queue, which delivers events to a single handler only
|
|
432
|
-
*
|
|
433
|
-
* @param {string} name
|
|
434
|
-
*/
|
|
435
|
-
queue(name) {
|
|
436
|
-
if (typeof this._eventEmitter.queue !== 'function')
|
|
437
|
-
throw new Error('Named queues are not supported by the underlying message bus');
|
|
438
|
-
|
|
439
|
-
return this._eventEmitter.queue(name);
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
/**
|
|
443
|
-
* Creates one-time subscription for one or multiple events that match a filter
|
|
444
|
-
*
|
|
445
|
-
* @param {string|string[]} messageTypes - Array of event type to subscribe to
|
|
446
|
-
* @param {function(IEvent):any} [handler] - Optional handler to execute for a first event received
|
|
447
|
-
* @param {function(IEvent):boolean} [filter] - Optional filter to apply before executing a handler
|
|
448
|
-
* @return {Promise<IEvent>} Resolves to first event that passes filter
|
|
449
|
-
*/
|
|
450
|
-
once(messageTypes, handler, filter) {
|
|
451
|
-
const subscribeTo = Array.isArray(messageTypes) ? messageTypes : [messageTypes];
|
|
452
|
-
|
|
453
|
-
return setupOneTimeEmitterSubscription(this._eventEmitter, subscribeTo, filter, handler, this._logger);
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
module.exports = EventStore;
|
package/src/EventStream.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* An immutable collection of events
|
|
5
|
-
*
|
|
6
|
-
* @class EventStream
|
|
7
|
-
* @extends {Array}
|
|
8
|
-
* @implements {IEventStream}
|
|
9
|
-
*/
|
|
10
|
-
class EventStream extends Array {
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Creates an instance of EventStream
|
|
14
|
-
*
|
|
15
|
-
* @param {...(IEvent | Array<IEvent> | ReadonlyArray<IEvent>)} args
|
|
16
|
-
*/
|
|
17
|
-
constructor(...args) {
|
|
18
|
-
super();
|
|
19
|
-
|
|
20
|
-
const events = [].concat(...args);
|
|
21
|
-
for (const e of events)
|
|
22
|
-
super.push(Object.freeze(e));
|
|
23
|
-
|
|
24
|
-
Object.freeze(this);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Create new EventStream with events that match certain condition
|
|
29
|
-
*
|
|
30
|
-
* @param {function(IEvent, number, Array<IEvent>): boolean} condition
|
|
31
|
-
* @returns {EventStream}
|
|
32
|
-
* @memberof EventStream
|
|
33
|
-
*/
|
|
34
|
-
filter(condition) {
|
|
35
|
-
return new EventStream([...this].filter(condition));
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Map stream events to another collection
|
|
40
|
-
*
|
|
41
|
-
* @template TResult
|
|
42
|
-
* @param {function(IEvent, number, Array<IEvent>): TResult} mapFn
|
|
43
|
-
* @returns {Array<TResult>}
|
|
44
|
-
* @memberof EventStream
|
|
45
|
-
*/
|
|
46
|
-
map(mapFn) {
|
|
47
|
-
return [...this].map(mapFn);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Returns a string description of event stream
|
|
52
|
-
*
|
|
53
|
-
* @returns {string}
|
|
54
|
-
*/
|
|
55
|
-
toString() {
|
|
56
|
-
if (this.length === 1)
|
|
57
|
-
return `'${this[0].type}'`;
|
|
58
|
-
|
|
59
|
-
return `${this.length} events`;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
module.exports = EventStream;
|
package/src/SagaEventHandler.js
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/* eslint new-cap: "off" */
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
const subscribe = require('./subscribe');
|
|
5
|
-
const { isClass, getClassName } = require('./utils');
|
|
6
|
-
const nullLogger = require('./utils/nullLogger');
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Listens to Saga events,
|
|
10
|
-
* creates new saga or restores it from event store,
|
|
11
|
-
* applies new events
|
|
12
|
-
* and passes command(s) to command bus
|
|
13
|
-
*
|
|
14
|
-
* @class SagaEventHandler
|
|
15
|
-
* @implements {IEventReceptor}
|
|
16
|
-
*/
|
|
17
|
-
class SagaEventHandler {
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Creates an instance of SagaEventHandler
|
|
21
|
-
*
|
|
22
|
-
* @param {object} options
|
|
23
|
-
* @param {ISagaConstructor | ISagaFactory} options.sagaType
|
|
24
|
-
* @param {IEventStore} options.eventStore
|
|
25
|
-
* @param {ICommandBus} options.commandBus
|
|
26
|
-
* @param {ILogger} [options.logger]
|
|
27
|
-
* @param {string} [options.queueName]
|
|
28
|
-
* @param {string[]} [options.startsWith]
|
|
29
|
-
* @param {string[]} [options.handles]
|
|
30
|
-
*/
|
|
31
|
-
constructor(options) {
|
|
32
|
-
if (!options) throw new TypeError('options argument required');
|
|
33
|
-
if (!options.sagaType) throw new TypeError('options.sagaType argument required');
|
|
34
|
-
if (!options.eventStore) throw new TypeError('options.eventStore argument required');
|
|
35
|
-
if (!options.commandBus) throw new TypeError('options.commandBus argument required');
|
|
36
|
-
|
|
37
|
-
this._eventStore = options.eventStore;
|
|
38
|
-
this._commandBus = options.commandBus;
|
|
39
|
-
this._queueName = options.queueName;
|
|
40
|
-
this._logger = options.logger || nullLogger;
|
|
41
|
-
|
|
42
|
-
if (isClass(options.sagaType)) {
|
|
43
|
-
/** @type {ISagaConstructor} */
|
|
44
|
-
// @ts-ignore
|
|
45
|
-
const SagaType = options.sagaType;
|
|
46
|
-
|
|
47
|
-
this._sagaFactory = params => new SagaType(params);
|
|
48
|
-
this._startsWith = SagaType.startsWith;
|
|
49
|
-
this._handles = SagaType.handles;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
if (!Array.isArray(options.startsWith)) throw new TypeError('options.startsWith argument must be an Array');
|
|
53
|
-
if (!Array.isArray(options.handles)) throw new TypeError('options.handles argument must be an Array');
|
|
54
|
-
|
|
55
|
-
this._sagaFactory = options.sagaType;
|
|
56
|
-
this._startsWith = options.startsWith;
|
|
57
|
-
this._handles = options.handles;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
this._eventStore.registerSagaStarters(options.startsWith);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Overrides observer subscribe method
|
|
65
|
-
*/
|
|
66
|
-
subscribe(eventStore) {
|
|
67
|
-
subscribe(eventStore, this, {
|
|
68
|
-
messageTypes: [...this._startsWith, ...this._handles],
|
|
69
|
-
masterHandler: e => this.handle(e),
|
|
70
|
-
queueName: this._queueName
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Handle saga event
|
|
76
|
-
*
|
|
77
|
-
* @param {IEvent} event
|
|
78
|
-
* @returns {Promise<void>}
|
|
79
|
-
*/
|
|
80
|
-
async handle(event) {
|
|
81
|
-
if (!event) throw new TypeError('event argument required');
|
|
82
|
-
if (!event.type) throw new TypeError('event.type argument required');
|
|
83
|
-
if (!event.sagaId) throw new TypeError('event.sagaId argument required');
|
|
84
|
-
|
|
85
|
-
const saga = await this._restoreSaga(event);
|
|
86
|
-
|
|
87
|
-
const r = saga.apply(event);
|
|
88
|
-
if (r instanceof Promise)
|
|
89
|
-
await r;
|
|
90
|
-
|
|
91
|
-
while (saga.uncommittedMessages.length) {
|
|
92
|
-
|
|
93
|
-
const commands = saga.uncommittedMessages;
|
|
94
|
-
saga.resetUncommittedMessages();
|
|
95
|
-
this._logger.log('debug', `"${event.type}" event processed, ${commands.map(c => c.type).join(',') || 'no commands'} produced`, {
|
|
96
|
-
service: getClassName(saga)
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
for (const command of commands) {
|
|
100
|
-
|
|
101
|
-
// attach event context to produced command
|
|
102
|
-
if (command.context === undefined && event.context !== undefined)
|
|
103
|
-
command.context = event.context;
|
|
104
|
-
|
|
105
|
-
try {
|
|
106
|
-
await this._commandBus.sendRaw(command);
|
|
107
|
-
}
|
|
108
|
-
catch (err) {
|
|
109
|
-
if (typeof saga.onError === 'function') {
|
|
110
|
-
// let saga to handle the error
|
|
111
|
-
saga.onError(err, { event, command });
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
throw err;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Restore saga from event store
|
|
123
|
-
*
|
|
124
|
-
* @param {IEvent} event Event that triggered saga execution
|
|
125
|
-
* @returns {Promise<ISaga>}
|
|
126
|
-
* @private
|
|
127
|
-
*/
|
|
128
|
-
async _restoreSaga(event) {
|
|
129
|
-
if (!event.sagaId) throw new TypeError('event.sagaId argument required');
|
|
130
|
-
|
|
131
|
-
const events = await this._eventStore.getSagaEvents(event.sagaId, { beforeEvent: event });
|
|
132
|
-
|
|
133
|
-
/** @type {ISaga} */
|
|
134
|
-
const saga = this._sagaFactory.call(null, { id: event.sagaId, events });
|
|
135
|
-
this._logger.log('info', `Saga state restored from ${events}`, { service: getClassName(saga) });
|
|
136
|
-
|
|
137
|
-
return saga;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
module.exports = SagaEventHandler;
|
package/src/index.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
exports.ContainerBuilder = require('./CqrsContainerBuilder');
|
|
4
|
-
exports.EventStream = require('./EventStream');
|
|
5
|
-
|
|
6
|
-
exports.CommandBus = require('./CommandBus');
|
|
7
|
-
exports.EventStore = require('./EventStore');
|
|
8
|
-
|
|
9
|
-
exports.AbstractAggregate = require('./AbstractAggregate');
|
|
10
|
-
exports.AggregateCommandHandler = require('./AggregateCommandHandler');
|
|
11
|
-
exports.AbstractSaga = require('./AbstractSaga');
|
|
12
|
-
exports.SagaEventHandler = require('./SagaEventHandler');
|
|
13
|
-
exports.AbstractProjection = require('./AbstractProjection');
|
|
14
|
-
|
|
15
|
-
exports.InMemoryMessageBus = require('./infrastructure/InMemoryMessageBus');
|
|
16
|
-
exports.InMemoryEventStorage = require('./infrastructure/InMemoryEventStorage');
|
|
17
|
-
exports.InMemorySnapshotStorage = require('./infrastructure/InMemorySnapshotStorage');
|
|
18
|
-
exports.InMemoryView = require('./infrastructure/InMemoryView');
|
|
19
|
-
|
|
20
|
-
exports.getMessageHandlerNames = require('./utils/getMessageHandlerNames');
|
|
21
|
-
exports.subscribe = require('./subscribe');
|