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
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DispatchPipelineBatch, DispatchPipelineEnvelope, IContainer, IDispatchPipelineProcessor } from './interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Dispatch-pipeline processor that ensures each event has an `id`.
|
|
4
|
+
*
|
|
5
|
+
* Some components (e.g. `SagaEventHandler`) require `event.id` to correlate saga instances.
|
|
6
|
+
* Put this processor early in the `eventDispatchPipeline` to auto-assign ids to events that don't have them.
|
|
7
|
+
*/
|
|
8
|
+
export declare class EventIdAugmentor implements IDispatchPipelineProcessor {
|
|
9
|
+
#private;
|
|
10
|
+
constructor({ identifierProvider }: Pick<IContainer, 'identifierProvider'>);
|
|
11
|
+
process(batch: DispatchPipelineBatch<DispatchPipelineEnvelope>): Promise<readonly DispatchPipelineEnvelope[]>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type IEvent, type IEventSet, type IMessageHandler, type IObservable, type IEventStream, type IEventStore, type EventQueryAfter, type EventQueryBefore, type Identifier, type IEventBus, type IContainer, type AggregateEventsQueryParams } from './interfaces/index.ts';
|
|
2
|
+
export declare class EventStore implements IEventStore {
|
|
3
|
+
#private;
|
|
4
|
+
eventBus: IEventBus;
|
|
5
|
+
constructor({ eventStorage, eventStorageReader, identifierProvider, snapshotStorage, eventBus, eventDispatcher, eventDispatchPipeline, eventDispatchPipelines, logger }: Pick<IContainer, 'eventStorage' | 'eventStorageReader' | 'identifierProvider' | 'snapshotStorage' | 'eventBus' | 'eventDispatcher' | 'logger' | 'eventDispatchPipeline' | 'eventDispatchPipelines'>);
|
|
6
|
+
/**
|
|
7
|
+
* Generates and returns a new unique identifier using the configured identifier provider.
|
|
8
|
+
*
|
|
9
|
+
* @returns A promise resolving to a unique identifier suitable for aggregates, sagas, and events.
|
|
10
|
+
*/
|
|
11
|
+
getNewId(): Promise<Identifier>;
|
|
12
|
+
getEventsByTypes(eventTypes: Readonly<string[]>, options?: EventQueryAfter): IEventStream;
|
|
13
|
+
/** Retrieve all events of specific Aggregate */
|
|
14
|
+
getAggregateEvents(aggregateId: Identifier, options?: AggregateEventsQueryParams): IEventStream;
|
|
15
|
+
/** Retrieve events of specific Saga */
|
|
16
|
+
getSagaEvents(sagaId: Identifier, filter: EventQueryBefore): AsyncGenerator<Readonly<IEvent>, void, any>;
|
|
17
|
+
/**
|
|
18
|
+
* Validate events, commit to storage and publish to eventBus, if needed
|
|
19
|
+
*
|
|
20
|
+
* @param events - a set of events to commit
|
|
21
|
+
* @returns Signed and committed events
|
|
22
|
+
*/
|
|
23
|
+
dispatch(events: IEventSet, meta?: Record<string, any>): Promise<IEventSet>;
|
|
24
|
+
on(messageType: string, handler: IMessageHandler): void;
|
|
25
|
+
off(messageType: string, handler: IMessageHandler): void;
|
|
26
|
+
queue(name: string): IObservable;
|
|
27
|
+
/** Creates one-time subscription for one or multiple events that match a filter */
|
|
28
|
+
once(messageTypes: string | string[], handler?: IMessageHandler, filter?: (e: IEvent) => boolean): Promise<IEvent>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IContainer, IEvent, IEventReceptor, IObservable, ISagaConstructor, ISagaFactory } from './interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Listens to Saga events,
|
|
4
|
+
* creates new saga or restores it from event store,
|
|
5
|
+
* applies new events
|
|
6
|
+
* and passes command(s) to command bus
|
|
7
|
+
*/
|
|
8
|
+
export declare class SagaEventHandler implements IEventReceptor {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(options: Pick<IContainer, 'eventStore' | 'commandBus' | 'executionLocker' | 'logger'> & {
|
|
11
|
+
sagaType?: ISagaConstructor;
|
|
12
|
+
sagaFactory?: ISagaFactory;
|
|
13
|
+
sagaDescriptor?: string;
|
|
14
|
+
queueName?: string;
|
|
15
|
+
startsWith?: string[];
|
|
16
|
+
handles?: string[];
|
|
17
|
+
});
|
|
18
|
+
/** Overrides observer subscribe method */
|
|
19
|
+
subscribe(eventStore: IObservable): void;
|
|
20
|
+
/** Handle saga event */
|
|
21
|
+
handle(event: IEvent): Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thrown by event storage implementations when a concurrency conflict is detected
|
|
3
|
+
* (e.g. duplicate aggregate version). When this error is thrown during event dispatch,
|
|
4
|
+
* AggregateCommandHandler can automatically retry the command by re-creating
|
|
5
|
+
* the aggregate from the event store.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ConcurrencyError extends Error {
|
|
8
|
+
constructor(message?: string, options?: ErrorOptions);
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ConcurrencyError.ts';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IIdentifierProvider, IEvent, IEventSet, EventQueryAfter, IEventStorageReader, IEventStream, Identifier, IDispatchPipelineProcessor, DispatchPipelineBatch, AggregateEventsQueryParams } from '../interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* A simple event storage implementation intended to use for tests only.
|
|
4
|
+
* Storage content resets on each app restart.
|
|
5
|
+
*/
|
|
6
|
+
export declare class InMemoryEventStorage implements IEventStorageReader, IIdentifierProvider, IDispatchPipelineProcessor {
|
|
7
|
+
#private;
|
|
8
|
+
getNewId(): string;
|
|
9
|
+
commitEvents(events: IEventSet, options?: {
|
|
10
|
+
ignoreConcurrencyError?: boolean;
|
|
11
|
+
}): Promise<IEventSet>;
|
|
12
|
+
getAggregateEvents(aggregateId: Identifier, options?: AggregateEventsQueryParams): IEventStream;
|
|
13
|
+
getSagaEvents(sagaId: Identifier, { beforeEvent }: {
|
|
14
|
+
beforeEvent: IEvent;
|
|
15
|
+
}): IEventStream;
|
|
16
|
+
getEventsByTypes(eventTypes: Readonly<string[]>, options?: EventQueryAfter): IEventStream;
|
|
17
|
+
/**
|
|
18
|
+
* Processes a batch of dispatch pipeline items, extracts the events,
|
|
19
|
+
* commits them to the in-memory storage, and returns the original batch.
|
|
20
|
+
*
|
|
21
|
+
* This method is part of the `IDispatchPipelineProcessor` interface.
|
|
22
|
+
*/
|
|
23
|
+
process(batch: DispatchPipelineBatch): Promise<DispatchPipelineBatch>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { IViewLocker } from '../interfaces/IViewLocker.js';
|
|
2
|
+
export declare class InMemoryLock implements IViewLocker {
|
|
3
|
+
#private;
|
|
4
|
+
/**
|
|
5
|
+
* Indicates if lock is acquired
|
|
6
|
+
*/
|
|
7
|
+
get locked(): boolean;
|
|
8
|
+
get ready(): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Acquire the lock on the current instance.
|
|
11
|
+
* Resolves when the lock is successfully acquired
|
|
12
|
+
*/
|
|
13
|
+
lock(): Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Release the lock acquired earlier
|
|
16
|
+
*/
|
|
17
|
+
unlock(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Wait until the lock is released.
|
|
20
|
+
* Resolves immediately if the lock is not acquired
|
|
21
|
+
*/
|
|
22
|
+
once(event: 'ready'): Promise<void>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ICommand, ICommandBus, IEvent, IEventBus, IMessageHandler, IObservable, IObservableQueueProvider } from '../interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Default implementation of the message bus.
|
|
4
|
+
* Keeps all subscriptions and messages in memory.
|
|
5
|
+
*/
|
|
6
|
+
export declare class InMemoryMessageBus implements IEventBus, ICommandBus, IObservableQueueProvider {
|
|
7
|
+
protected handlers: Map<string, Set<IMessageHandler>>;
|
|
8
|
+
protected uniqueEventHandlers: boolean;
|
|
9
|
+
protected queueName: string | undefined;
|
|
10
|
+
protected queues: Map<string, InMemoryMessageBus>;
|
|
11
|
+
constructor({ queueName, uniqueEventHandlers }?: {
|
|
12
|
+
queueName?: string;
|
|
13
|
+
uniqueEventHandlers?: boolean;
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Subscribe to message type
|
|
17
|
+
*/
|
|
18
|
+
on(messageType: string, handler: IMessageHandler): void;
|
|
19
|
+
/**
|
|
20
|
+
* Get or create a named queue.
|
|
21
|
+
* Named queues support only one handler per event type.
|
|
22
|
+
*/
|
|
23
|
+
queue(queueName: string): IObservable;
|
|
24
|
+
/**
|
|
25
|
+
* Remove subscription
|
|
26
|
+
*/
|
|
27
|
+
off(messageType: string, handler: IMessageHandler): void;
|
|
28
|
+
/**
|
|
29
|
+
* Send command to exactly 1 command handler
|
|
30
|
+
*/
|
|
31
|
+
send(commandType: string, aggregateId?: string, options?: {
|
|
32
|
+
payload?: object;
|
|
33
|
+
context?: object;
|
|
34
|
+
}): Promise<any>;
|
|
35
|
+
/**
|
|
36
|
+
* Send pre-built command to exactly 1 command handler
|
|
37
|
+
*/
|
|
38
|
+
send(command: ICommand): Promise<any>;
|
|
39
|
+
/** @deprecated Use {@link send} */
|
|
40
|
+
sendRaw(command: ICommand): Promise<any>;
|
|
41
|
+
/**
|
|
42
|
+
* Publish event to all subscribers (if any)
|
|
43
|
+
*/
|
|
44
|
+
publish(event: IEvent, meta?: Record<string, any>): Promise<unknown[]>;
|
|
45
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type DispatchPipelineBatch, type IAggregateSnapshotStorage, type IContainer, type IDispatchPipelineProcessor, type ISnapshotEvent } from '../interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory storage for aggregate snapshots.
|
|
4
|
+
* Storage content resets on app restart
|
|
5
|
+
*/
|
|
6
|
+
export declare class InMemorySnapshotStorage implements IAggregateSnapshotStorage, IDispatchPipelineProcessor {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(c?: Partial<Pick<IContainer, 'logger'>>);
|
|
9
|
+
/**
|
|
10
|
+
* Get latest aggregate snapshot
|
|
11
|
+
*/
|
|
12
|
+
getAggregateSnapshot(aggregateId: string): Promise<ISnapshotEvent | undefined>;
|
|
13
|
+
/**
|
|
14
|
+
* Save new aggregate snapshot
|
|
15
|
+
*/
|
|
16
|
+
saveAggregateSnapshot(snapshotEvent: ISnapshotEvent): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Delete aggregate snapshot
|
|
19
|
+
*/
|
|
20
|
+
deleteAggregateSnapshot<TState>(snapshotEvent: ISnapshotEvent<TState>): Promise<void> | void;
|
|
21
|
+
/**
|
|
22
|
+
* Processes a batch of events, saves any snapshot events found, and returns the batch
|
|
23
|
+
* without the snapshot events.
|
|
24
|
+
*
|
|
25
|
+
* This method is part of the `IDispatchPipelineProcessor` interface.
|
|
26
|
+
*/
|
|
27
|
+
process(batch: DispatchPipelineBatch): Promise<DispatchPipelineBatch>;
|
|
28
|
+
/**
|
|
29
|
+
* Reverts the snapshots associated with the events in the given batch.
|
|
30
|
+
* It filters the batch for snapshot events and deletes the corresponding aggregate snapshots.
|
|
31
|
+
*
|
|
32
|
+
* This method is part of the `IDispatchPipelineProcessor` interface.
|
|
33
|
+
*
|
|
34
|
+
* @param batch The batch of events to revert snapshots for.
|
|
35
|
+
*/
|
|
36
|
+
revert(batch: DispatchPipelineBatch): Promise<void>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { IViewLocker, Identifier, IObjectStorage } from '../interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory Projection View, which suspends get()'s until it is ready
|
|
4
|
+
*/
|
|
5
|
+
export declare class InMemoryView<TRecord> implements IViewLocker, IObjectStorage<TRecord> {
|
|
6
|
+
#private;
|
|
7
|
+
static factory<TView>(): TView;
|
|
8
|
+
protected _map: Map<Identifier, TRecord>;
|
|
9
|
+
/** Whether the view is restored */
|
|
10
|
+
get ready(): boolean;
|
|
11
|
+
/** Number of records in the View */
|
|
12
|
+
get size(): number;
|
|
13
|
+
constructor();
|
|
14
|
+
/** Lock the view to prevent concurrent modifications */
|
|
15
|
+
lock(): Promise<boolean>;
|
|
16
|
+
/** Release the lock */
|
|
17
|
+
unlock(): Promise<void>;
|
|
18
|
+
/** Create a Promise which will resolve to a first emitted event of a given type */
|
|
19
|
+
once(eventType: 'ready'): Promise<any>;
|
|
20
|
+
/**
|
|
21
|
+
* Check if view contains a record with a given key.
|
|
22
|
+
* This is the only synchronous method, so make sure to check the `ready` flag, if necessary
|
|
23
|
+
*
|
|
24
|
+
* @deprecated Use `async get()` instead
|
|
25
|
+
*/
|
|
26
|
+
has(key: Identifier): boolean;
|
|
27
|
+
/** Get record with a given key; await until the view is restored */
|
|
28
|
+
get(key: Identifier, options?: {
|
|
29
|
+
nowait?: boolean;
|
|
30
|
+
}): Promise<TRecord | undefined>;
|
|
31
|
+
/**
|
|
32
|
+
* Get record with a given key synchronously
|
|
33
|
+
*/
|
|
34
|
+
getSync(key: Identifier): TRecord | undefined;
|
|
35
|
+
/** Get all records matching an optional filter */
|
|
36
|
+
getAll(filter?: (r: TRecord | undefined, i: Identifier) => boolean): Promise<Array<[Identifier, TRecord | undefined]>>;
|
|
37
|
+
/** Create record with a given key and value */
|
|
38
|
+
create(key: Identifier, value?: TRecord): Promise<void>;
|
|
39
|
+
/** Update existing view record */
|
|
40
|
+
update(key: Identifier, update: (r: TRecord) => TRecord): Promise<void>;
|
|
41
|
+
/** Update existing view record or create new */
|
|
42
|
+
updateEnforcingNew(key: Identifier, update: (r?: TRecord) => TRecord): Promise<void>;
|
|
43
|
+
/** Update all records that match filter criteria */
|
|
44
|
+
updateAll(filter: (r: TRecord) => boolean, update: (r: TRecord) => TRecord): Promise<void>;
|
|
45
|
+
/** Update existing record */
|
|
46
|
+
private _update;
|
|
47
|
+
/** Delete record */
|
|
48
|
+
delete(key: Identifier): Promise<void>;
|
|
49
|
+
/** Delete all records that match filter criteria */
|
|
50
|
+
deleteAll(filter: (r?: TRecord) => boolean): Promise<void>;
|
|
51
|
+
/** Get view summary as string */
|
|
52
|
+
toString(): string;
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './nextCycle.ts';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { CqrsContainerBuilder as ContainerBuilder } from './CqrsContainerBuilder.ts';
|
|
2
|
+
export * from './CommandBus.ts';
|
|
3
|
+
export * from './EventStore.ts';
|
|
4
|
+
export * from './EventIdAugmentor.ts';
|
|
5
|
+
export * from './AbstractAggregate.ts';
|
|
6
|
+
export * from './AggregateCommandHandler.ts';
|
|
7
|
+
export * from './AbstractSaga.ts';
|
|
8
|
+
export * from './SagaEventHandler.ts';
|
|
9
|
+
export * from './AbstractProjection.ts';
|
|
10
|
+
export * from './EventDispatcher.ts';
|
|
11
|
+
export * from './in-memory/index.ts';
|
|
12
|
+
export * as Event from './Event.ts';
|
|
13
|
+
export { getMessageHandlerNames, subscribe } from './utils/index.ts';
|
|
14
|
+
export * from './interfaces/index.ts';
|
|
15
|
+
export * from './errors/index.ts';
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { ICommand } from './ICommand.ts';
|
|
2
|
+
import type { Identifier } from './Identifier.ts';
|
|
3
|
+
import type { IEvent } from './IEvent.ts';
|
|
4
|
+
import type { IEventSet } from './IEventSet.ts';
|
|
5
|
+
import type { IMutableState } from './IMutableState.ts';
|
|
6
|
+
/**
|
|
7
|
+
* Core interface representing an Aggregate in a CQRS architecture.
|
|
8
|
+
* An aggregate encapsulates business logic and state, handling commands
|
|
9
|
+
* and applying events to transition between states.
|
|
10
|
+
*/
|
|
11
|
+
export interface IAggregate {
|
|
12
|
+
/**
|
|
13
|
+
* Applies a single event to update the aggregate's internal state.
|
|
14
|
+
*
|
|
15
|
+
* This method is used primarily when rehydrating the aggregate
|
|
16
|
+
* from the persisted sequence of events
|
|
17
|
+
*
|
|
18
|
+
* @param event - The event to be applied
|
|
19
|
+
*/
|
|
20
|
+
mutate(event: IEvent): void;
|
|
21
|
+
/**
|
|
22
|
+
* Processes a command by executing the aggregate's business logic,
|
|
23
|
+
* resulting in new events that capture the state changes.
|
|
24
|
+
* It serves as the primary entry point for invoking aggregate behavior
|
|
25
|
+
*
|
|
26
|
+
* @param command - The command to be processed
|
|
27
|
+
* @returns A set of events produced by the command
|
|
28
|
+
*/
|
|
29
|
+
handle(command: ICommand): IEventSet | Promise<IEventSet>;
|
|
30
|
+
}
|
|
31
|
+
export type IAggregateConstructorParams<TState extends IMutableState | object | void> = {
|
|
32
|
+
/** Unique aggregate identifier */
|
|
33
|
+
id: Identifier;
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated The aggregate no longer receives all events in the constructor.
|
|
36
|
+
* Instead, events are loaded and passed to the `mutate` method after instantiation.
|
|
37
|
+
*/
|
|
38
|
+
events?: IEventSet;
|
|
39
|
+
/** Aggregate state instance */
|
|
40
|
+
state?: TState;
|
|
41
|
+
};
|
|
42
|
+
export type RetryOnConcurrencyErrorDecision = boolean | 'ignore';
|
|
43
|
+
export type RetryOnConcurrencyErrorResolver = (err: unknown, events: IEventSet | undefined, attempt: number) => RetryOnConcurrencyErrorDecision;
|
|
44
|
+
export type RetryOnConcurrencyErrorConfig = {
|
|
45
|
+
maxRetries?: number;
|
|
46
|
+
ignoreAfterMaxRetries?: boolean;
|
|
47
|
+
};
|
|
48
|
+
export type RetryOnConcurrencyErrorOptions = RetryOnConcurrencyErrorDecision | RetryOnConcurrencyErrorConfig | RetryOnConcurrencyErrorResolver | number;
|
|
49
|
+
export interface IAggregateConstructor<TAggregate extends IAggregate, TState extends IMutableState | object | void> {
|
|
50
|
+
/**
|
|
51
|
+
* List of command types handled by the aggregate.
|
|
52
|
+
*
|
|
53
|
+
* Used to subscribe AggregateCommandHandler to the command bus.
|
|
54
|
+
*/
|
|
55
|
+
readonly handles: string[];
|
|
56
|
+
/**
|
|
57
|
+
* Optional list of event types that are required to restore the aggregate state.
|
|
58
|
+
*
|
|
59
|
+
* If provided, AggregateCommandHandler can request only these events from storage
|
|
60
|
+
* (typically together with a `tail: 'last'` marker to restore the version).
|
|
61
|
+
*/
|
|
62
|
+
readonly restoresFrom?: Readonly<string[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Defines retry behavior when a ConcurrencyError is thrown during event dispatch.
|
|
65
|
+
*
|
|
66
|
+
* - `undefined` (default): retry up to 5 times on ConcurrencyError
|
|
67
|
+
* - `false`: no retry
|
|
68
|
+
* - `true`: retry up to 5 times on ConcurrencyError
|
|
69
|
+
* - `'ignore'`: on ConcurrencyError, force-dispatch immediately with `ignoreConcurrencyError: true`
|
|
70
|
+
* - `number`: retry up to the specified number of times on ConcurrencyError
|
|
71
|
+
* - `{ maxRetries?: number, ignoreAfterMaxRetries?: boolean }`: configure retries
|
|
72
|
+
* - `(err, events, attempt) => RetryOnConcurrencyErrorDecision`:
|
|
73
|
+
* custom function to decide whether to retry (`true`), stop (`false`) or ignore (`'ignore'`)
|
|
74
|
+
*/
|
|
75
|
+
readonly retryOnConcurrencyError?: RetryOnConcurrencyErrorOptions;
|
|
76
|
+
new (options: IAggregateConstructorParams<TState>): TAggregate;
|
|
77
|
+
}
|
|
78
|
+
export type IAggregateFactory<TAggregate extends IAggregate, TState extends IMutableState | object | void> = (options: IAggregateConstructorParams<TState>) => TAggregate;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Identifier } from './Identifier.ts';
|
|
2
|
+
import type { ISnapshotEvent } from './ISnapshotEvent.ts';
|
|
3
|
+
export interface IAggregateSnapshotStorage {
|
|
4
|
+
getAggregateSnapshot<TState>(aggregateId: Identifier): Promise<ISnapshotEvent<TState> | undefined> | ISnapshotEvent<TState> | undefined;
|
|
5
|
+
saveAggregateSnapshot<TState>(snapshotEvent: ISnapshotEvent<TState>): Promise<void> | void;
|
|
6
|
+
deleteAggregateSnapshot<TState>(snapshotEvent: ISnapshotEvent<TState>): Promise<void> | void;
|
|
7
|
+
}
|
|
8
|
+
export declare const isAggregateSnapshotStorage: (obj: unknown) => obj is IAggregateSnapshotStorage;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ICommand } from './ICommand.ts';
|
|
2
|
+
import type { IObservable } from './IObservable.ts';
|
|
3
|
+
import type { IObserver } from './IObserver.ts';
|
|
4
|
+
export interface ICommandBus extends IObservable {
|
|
5
|
+
send(command: ICommand): Promise<any>;
|
|
6
|
+
send(commandType: string, aggregateId?: string, options?: {
|
|
7
|
+
payload?: object;
|
|
8
|
+
context?: object;
|
|
9
|
+
}): Promise<any>;
|
|
10
|
+
/** @deprecated Use {@link send} */
|
|
11
|
+
sendRaw(command: ICommand): Promise<any>;
|
|
12
|
+
}
|
|
13
|
+
export interface ICommandHandler extends IObserver {
|
|
14
|
+
subscribe(commandBus: ICommandBus): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Container } from 'di0';
|
|
2
|
+
import type { ICommandBus } from './ICommandBus.ts';
|
|
3
|
+
import type { IEventDispatcher } from './IEventDispatcher.ts';
|
|
4
|
+
import type { IEventStore } from './IEventStore.ts';
|
|
5
|
+
import type { IEventBus } from './IEventBus.ts';
|
|
6
|
+
import type { IDispatchPipelineProcessor } from './IDispatchPipelineProcessor.ts';
|
|
7
|
+
import type { IEventStorageReader } from './IEventStorageReader.ts';
|
|
8
|
+
import type { IAggregateSnapshotStorage } from './IAggregateSnapshotStorage.ts';
|
|
9
|
+
import type { IIdentifierProvider } from './IIdentifierProvider.ts';
|
|
10
|
+
import type { IExtendableLogger, ILogger } from './ILogger.ts';
|
|
11
|
+
import type { ILocker } from './ILocker.ts';
|
|
12
|
+
export interface IContainer extends Container {
|
|
13
|
+
eventBus: IEventBus;
|
|
14
|
+
eventStore: IEventStore;
|
|
15
|
+
/**
|
|
16
|
+
* Storage alias used by dispatch pipelines (write/persist role).
|
|
17
|
+
* In simple setups this is the same implementation as eventStorageReader.
|
|
18
|
+
*/
|
|
19
|
+
eventStorage?: IEventStorageReader;
|
|
20
|
+
/**
|
|
21
|
+
* Reader alias consumed by EventStore and other restore/read flows.
|
|
22
|
+
* Can point to a dedicated read implementation in split-storage setups.
|
|
23
|
+
*/
|
|
24
|
+
eventStorageReader?: IEventStorageReader;
|
|
25
|
+
identifierProvider?: IIdentifierProvider;
|
|
26
|
+
snapshotStorage?: IAggregateSnapshotStorage;
|
|
27
|
+
eventIdAugmenter?: IDispatchPipelineProcessor;
|
|
28
|
+
commandBus: ICommandBus;
|
|
29
|
+
eventDispatcher?: IEventDispatcher;
|
|
30
|
+
/** Default event dispatch pipeline */
|
|
31
|
+
eventDispatchPipeline?: IDispatchPipelineProcessor[];
|
|
32
|
+
/** Multiple event dispatch pipelines per origin */
|
|
33
|
+
eventDispatchPipelines?: Record<string, IDispatchPipelineProcessor[]>;
|
|
34
|
+
executionLocker?: ILocker;
|
|
35
|
+
logger?: ILogger | IExtendableLogger;
|
|
36
|
+
process?: NodeJS.Process;
|
|
37
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IEvent } from './IEvent.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a wrapper for an event that can optionally contain additional metadata.
|
|
4
|
+
* Used to extend event processing with context-specific data required by processors.
|
|
5
|
+
*/
|
|
6
|
+
export type DispatchPipelineEnvelope = {
|
|
7
|
+
/**
|
|
8
|
+
* Origin of the event. Can be used to distinguish between events coming from different sources.
|
|
9
|
+
*/
|
|
10
|
+
origin?: string;
|
|
11
|
+
/**
|
|
12
|
+
* When true, storage writers may bypass optimistic-concurrency checks for this batch.
|
|
13
|
+
*/
|
|
14
|
+
ignoreConcurrencyError?: boolean;
|
|
15
|
+
event?: IEvent;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* A batch of event envelopes. Can contain custom envelope types extending EventEnvelope.
|
|
19
|
+
*/
|
|
20
|
+
export type DispatchPipelineBatch<T extends DispatchPipelineEnvelope = DispatchPipelineEnvelope> = Readonly<Array<T>>;
|
|
21
|
+
/**
|
|
22
|
+
* Defines a processor that operates on a batch of event envelopes.
|
|
23
|
+
* Allows transformations, side-effects, or filtering of events during dispatch.
|
|
24
|
+
*/
|
|
25
|
+
export interface IDispatchPipelineProcessor<T extends DispatchPipelineEnvelope = {}> {
|
|
26
|
+
process(batch: DispatchPipelineBatch<T>): Promise<DispatchPipelineBatch<T>>;
|
|
27
|
+
revert?(batch: DispatchPipelineBatch<T>): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export declare const isDispatchPipelineProcessor: (obj: unknown) => obj is IDispatchPipelineProcessor;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Identifier } from './Identifier.ts';
|
|
2
|
+
import type { IMessage } from './IMessage.ts';
|
|
3
|
+
export type IEvent<TPayload = any> = IMessage<TPayload> & {
|
|
4
|
+
/** Unique event identifier */
|
|
5
|
+
id?: Identifier;
|
|
6
|
+
};
|
|
7
|
+
export declare const isEvent: (event: unknown) => event is IEvent;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IEvent } from './IEvent.ts';
|
|
2
|
+
import { type IObservable } from './IObservable.ts';
|
|
3
|
+
export interface IEventBus extends IObservable {
|
|
4
|
+
publish(event: IEvent, meta?: Record<string, any>): Promise<any>;
|
|
5
|
+
}
|
|
6
|
+
export declare const isEventBus: (obj: unknown) => boolean;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { IEvent } from './IEvent.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Interface for tracking event processing state to prevent concurrent processing
|
|
4
|
+
* by multiple processes.
|
|
5
|
+
*/
|
|
6
|
+
export interface IEventLocker {
|
|
7
|
+
/**
|
|
8
|
+
* Retrieves the last projected event,
|
|
9
|
+
* allowing the projection state to be restored from subsequent events.
|
|
10
|
+
*/
|
|
11
|
+
getLastEvent(): Promise<IEvent | undefined> | IEvent | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Marks an event as projecting to prevent it from being processed
|
|
14
|
+
* by another projection instance using the same storage.
|
|
15
|
+
*
|
|
16
|
+
* @returns `false` if the event is already being processed or has been processed.
|
|
17
|
+
*/
|
|
18
|
+
tryMarkAsProjecting(event: IEvent): Promise<boolean> | boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Marks an event as projected.
|
|
21
|
+
*/
|
|
22
|
+
markAsProjected(event: IEvent): Promise<void> | void;
|
|
23
|
+
/**
|
|
24
|
+
* Records an event as the last projected event (restore checkpoint).
|
|
25
|
+
*/
|
|
26
|
+
markAsLastEvent(event: IEvent): Promise<void> | void;
|
|
27
|
+
}
|
|
28
|
+
export declare const isEventLocker: (view: unknown) => view is IEventLocker;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Identifier } from './Identifier.ts';
|
|
2
|
+
import type { IEvent } from './IEvent.ts';
|
|
3
|
+
import type { IEventStream } from './IEventStream.ts';
|
|
4
|
+
import type { ISnapshotEvent } from './ISnapshotEvent.ts';
|
|
5
|
+
export type EventQueryAfter = {
|
|
6
|
+
/** Get events emitted after this specific event */
|
|
7
|
+
afterEvent?: IEvent;
|
|
8
|
+
};
|
|
9
|
+
export type EventQueryBefore = {
|
|
10
|
+
/** Get events emitted before this specific event */
|
|
11
|
+
beforeEvent?: IEvent;
|
|
12
|
+
};
|
|
13
|
+
export type AggregateEventsQueryParams = {
|
|
14
|
+
/**
|
|
15
|
+
* Optional snapshot event. If provided, storage should return only events after
|
|
16
|
+
* the snapshot's aggregateVersion.
|
|
17
|
+
*/
|
|
18
|
+
snapshot?: ISnapshotEvent;
|
|
19
|
+
/**
|
|
20
|
+
* Optional list of event types to return.
|
|
21
|
+
*
|
|
22
|
+
* IMPORTANT: If you filter eventTypes, make sure you still restore the aggregate
|
|
23
|
+
* version correctly (e.g. via `tail: 'last'`), otherwise emitted events may get
|
|
24
|
+
* incorrect aggregateVersion values.
|
|
25
|
+
*/
|
|
26
|
+
eventTypes?: Readonly<string[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Optionally include the last aggregate event (after snapshot), regardless of type.
|
|
29
|
+
* Useful together with `eventTypes` to restore the aggregate version without pulling
|
|
30
|
+
* the full stream.
|
|
31
|
+
*/
|
|
32
|
+
tail?: 'last';
|
|
33
|
+
};
|
|
34
|
+
export interface IEventStorageReader {
|
|
35
|
+
/**
|
|
36
|
+
* Retrieves events of specified types that were emitted after a given event.
|
|
37
|
+
*/
|
|
38
|
+
getEventsByTypes(eventTypes: Readonly<string[]>, options?: EventQueryAfter): IEventStream;
|
|
39
|
+
/**
|
|
40
|
+
* Retrieves all events (and optionally a snapshot) associated with a specific aggregate.
|
|
41
|
+
*/
|
|
42
|
+
getAggregateEvents(aggregateId: Identifier, options?: AggregateEventsQueryParams): IEventStream;
|
|
43
|
+
/**
|
|
44
|
+
* Retrieves events associated with a saga instance.
|
|
45
|
+
*/
|
|
46
|
+
getSagaEvents(sagaId: Identifier, options: EventQueryBefore): IEventStream;
|
|
47
|
+
}
|
|
48
|
+
export declare const isEventStorageReader: (storage: unknown) => storage is IEventStorageReader;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IEventDispatcher } from './IEventDispatcher.ts';
|
|
2
|
+
import type { IEvent } from './IEvent.ts';
|
|
3
|
+
import type { IEventStorageReader } from './IEventStorageReader.ts';
|
|
4
|
+
import type { IIdentifierProvider } from './IIdentifierProvider.ts';
|
|
5
|
+
import type { IMessageHandler, IObservable } from './IObservable.ts';
|
|
6
|
+
import type { IObservableQueueProvider } from './IObservableQueueProvider.ts';
|
|
7
|
+
export interface IEventStore extends IObservable, IObservableQueueProvider, IEventDispatcher, IEventStorageReader, IIdentifierProvider {
|
|
8
|
+
once(messageTypes: string | string[], handler?: IMessageHandler, filter?: (e: IEvent) => boolean): Promise<IEvent>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Identifier } from './Identifier.ts';
|
|
2
|
+
export interface IIdentifierProvider {
|
|
3
|
+
/**
|
|
4
|
+
* Generates and returns a new unique identifier suitable for aggregates, sagas, and events.
|
|
5
|
+
*
|
|
6
|
+
* @returns A promise resolving to an identifier or an identifier itself.
|
|
7
|
+
*/
|
|
8
|
+
getNewId(): Identifier | Promise<Identifier>;
|
|
9
|
+
}
|
|
10
|
+
export declare const isIdentifierProvider: (obj: any) => obj is IIdentifierProvider;
|