node-cqrs 1.0.0-rc.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +245 -123
- package/LICENSE +202 -21
- package/NOTICE +15 -0
- package/README.md +429 -113
- 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.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.map +1 -0
- package/dist/cjs/interfaces/ICommandBus.js.map +1 -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.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.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.map +1 -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.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.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.map +1 -0
- package/dist/cjs/interfaces/IProjection.js.map +1 -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.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.map +1 -0
- package/dist/cjs/package.json +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.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.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.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.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.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.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.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/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/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/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/SqliteViewLocker.d.ts +31 -0
- package/dist/types/sqlite/index.d.ts +9 -0
- package/dist/types/sqlite/queries/index.d.ts +2 -0
- package/dist/types/sqlite/utils/getEventId.d.ts +5 -0
- package/dist/types/sqlite/utils/index.d.ts +2 -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/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/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 +106 -54
- package/dist/AbstractAggregate.js +0 -178
- package/dist/AbstractAggregate.js.map +0 -1
- package/dist/AbstractProjection.js +0 -138
- package/dist/AbstractProjection.js.map +0 -1
- package/dist/AbstractSaga.js +0 -99
- package/dist/AbstractSaga.js.map +0 -1
- package/dist/AggregateCommandHandler.js +0 -86
- package/dist/AggregateCommandHandler.js.map +0 -1
- package/dist/CommandBus.js +0 -74
- package/dist/CommandBus.js.map +0 -1
- package/dist/CqrsContainerBuilder.js +0 -92
- package/dist/CqrsContainerBuilder.js.map +0 -1
- package/dist/Event.js +0 -33
- package/dist/Event.js.map +0 -1
- package/dist/EventDispatcher.js +0 -131
- package/dist/EventDispatcher.js.map +0 -1
- package/dist/EventStore.js +0 -137
- package/dist/EventStore.js.map +0 -1
- package/dist/EventValidationProcessor.js +0 -29
- package/dist/EventValidationProcessor.js.map +0 -1
- package/dist/SagaEventHandler.js +0 -118
- package/dist/SagaEventHandler.js.map +0 -1
- package/dist/in-memory/InMemoryEventStorage.js +0 -73
- package/dist/in-memory/InMemoryEventStorage.js.map +0 -1
- package/dist/in-memory/InMemoryLock.js +0 -40
- package/dist/in-memory/InMemoryLock.js.map +0 -1
- package/dist/in-memory/InMemoryMessageBus.js +0 -111
- package/dist/in-memory/InMemoryMessageBus.js.map +0 -1
- package/dist/in-memory/InMemorySnapshotStorage.js +0 -70
- package/dist/in-memory/InMemorySnapshotStorage.js.map +0 -1
- package/dist/in-memory/InMemoryView.js +0 -167
- package/dist/in-memory/InMemoryView.js.map +0 -1
- package/dist/in-memory/index.js +0 -22
- package/dist/in-memory/index.js.map +0 -1
- package/dist/in-memory/utils/index.js +0 -18
- package/dist/in-memory/utils/index.js.map +0 -1
- package/dist/in-memory/utils/nextCycle.js +0 -9
- package/dist/in-memory/utils/nextCycle.js.map +0 -1
- package/dist/index.js +0 -35
- package/dist/index.js.map +0 -1
- package/dist/interfaces/IAggregate.js.map +0 -1
- package/dist/interfaces/IAggregateSnapshotStorage.js +0 -3
- package/dist/interfaces/IAggregateSnapshotStorage.js.map +0 -1
- package/dist/interfaces/ICommand.js.map +0 -1
- package/dist/interfaces/ICommandBus.js.map +0 -1
- package/dist/interfaces/IContainer.js.map +0 -1
- package/dist/interfaces/IDispatchPipelineProcessor.js +0 -9
- package/dist/interfaces/IDispatchPipelineProcessor.js.map +0 -1
- package/dist/interfaces/IEvent.js +0 -9
- package/dist/interfaces/IEvent.js.map +0 -1
- package/dist/interfaces/IEventBus.js +0 -9
- package/dist/interfaces/IEventBus.js.map +0 -1
- package/dist/interfaces/IEventDispatcher.js.map +0 -1
- package/dist/interfaces/IEventLocker.js +0 -10
- package/dist/interfaces/IEventLocker.js.map +0 -1
- package/dist/interfaces/IEventReceptor.js.map +0 -1
- package/dist/interfaces/IEventSet.js +0 -8
- package/dist/interfaces/IEventSet.js.map +0 -1
- package/dist/interfaces/IEventStorage.js +0 -13
- package/dist/interfaces/IEventStorage.js.map +0 -1
- package/dist/interfaces/IEventStore.js.map +0 -1
- package/dist/interfaces/IEventStream.js.map +0 -1
- package/dist/interfaces/IIdentifierProvider.js +0 -9
- package/dist/interfaces/IIdentifierProvider.js.map +0 -1
- package/dist/interfaces/ILogger.js.map +0 -1
- package/dist/interfaces/IMessage.js +0 -9
- package/dist/interfaces/IMessage.js.map +0 -1
- package/dist/interfaces/IMessageBus.js +0 -3
- package/dist/interfaces/IMessageBus.js.map +0 -1
- package/dist/interfaces/IObjectStorage.js.map +0 -1
- package/dist/interfaces/IObservable.js +0 -11
- package/dist/interfaces/IObservable.js.map +0 -1
- package/dist/interfaces/IObserver.js.map +0 -1
- package/dist/interfaces/IProjection.js.map +0 -1
- package/dist/interfaces/ISaga.js.map +0 -1
- package/dist/interfaces/IViewLocker.js +0 -17
- package/dist/interfaces/IViewLocker.js.map +0 -1
- package/dist/interfaces/Identifier.js.map +0 -1
- package/dist/interfaces/index.js +0 -43
- package/dist/interfaces/index.js.map +0 -1
- package/dist/interfaces/isObject.js.map +0 -1
- package/dist/rabbitmq/IContainer.js.map +0 -1
- package/dist/rabbitmq/RabbitMqEventBus.js +0 -89
- package/dist/rabbitmq/RabbitMqEventBus.js.map +0 -1
- package/dist/rabbitmq/RabbitMqEventInjector.js +0 -55
- package/dist/rabbitmq/RabbitMqEventInjector.js.map +0 -1
- package/dist/rabbitmq/RabbitMqGateway.js +0 -347
- package/dist/rabbitmq/RabbitMqGateway.js.map +0 -1
- package/dist/rabbitmq/TerminationHandler.js +0 -31
- package/dist/rabbitmq/TerminationHandler.js.map +0 -1
- package/dist/rabbitmq/constants.js +0 -6
- package/dist/rabbitmq/constants.js.map +0 -1
- package/dist/rabbitmq/index.js +0 -20
- package/dist/rabbitmq/index.js.map +0 -1
- package/dist/sqlite/AbstractSqliteAccessor.js +0 -50
- package/dist/sqlite/AbstractSqliteAccessor.js.map +0 -1
- package/dist/sqlite/AbstractSqliteObjectProjection.js +0 -26
- package/dist/sqlite/AbstractSqliteObjectProjection.js.map +0 -1
- package/dist/sqlite/AbstractSqliteView.js +0 -44
- package/dist/sqlite/AbstractSqliteView.js.map +0 -1
- package/dist/sqlite/IContainer.js.map +0 -1
- package/dist/sqlite/SqliteEventLocker.js +0 -94
- package/dist/sqlite/SqliteEventLocker.js.map +0 -1
- package/dist/sqlite/SqliteObjectStorage.js +0 -113
- package/dist/sqlite/SqliteObjectStorage.js.map +0 -1
- package/dist/sqlite/SqliteObjectView.js +0 -46
- package/dist/sqlite/SqliteObjectView.js.map +0 -1
- package/dist/sqlite/SqliteProjectionDataParams.js.map +0 -1
- package/dist/sqlite/SqliteViewLocker.js +0 -119
- package/dist/sqlite/SqliteViewLocker.js.map +0 -1
- package/dist/sqlite/index.js +0 -25
- package/dist/sqlite/index.js.map +0 -1
- package/dist/sqlite/queries/eventLockTableInit.js +0 -15
- package/dist/sqlite/queries/eventLockTableInit.js.map +0 -1
- package/dist/sqlite/queries/index.js +0 -19
- package/dist/sqlite/queries/index.js.map +0 -1
- package/dist/sqlite/queries/viewLockTableInit.js.map +0 -1
- package/dist/sqlite/utils/getEventId.js +0 -11
- package/dist/sqlite/utils/getEventId.js.map +0 -1
- package/dist/sqlite/utils/guid.js.map +0 -1
- package/dist/sqlite/utils/index.js +0 -19
- package/dist/sqlite/utils/index.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utils/Deferred.js.map +0 -1
- package/dist/utils/Lock.js +0 -50
- package/dist/utils/Lock.js.map +0 -1
- package/dist/utils/delay.js +0 -13
- package/dist/utils/delay.js.map +0 -1
- package/dist/utils/getClassName.js.map +0 -1
- package/dist/utils/getHandler.js +0 -19
- package/dist/utils/getHandler.js.map +0 -1
- package/dist/utils/getMessageHandlerNames.js +0 -34
- package/dist/utils/getMessageHandlerNames.js.map +0 -1
- package/dist/utils/index.js +0 -29
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/isClass.js.map +0 -1
- package/dist/utils/iteratorToArray.js +0 -10
- package/dist/utils/iteratorToArray.js.map +0 -1
- package/dist/utils/notEmpty.js +0 -6
- package/dist/utils/notEmpty.js.map +0 -1
- package/dist/utils/setupOneTimeEmitterSubscription.js +0 -46
- package/dist/utils/setupOneTimeEmitterSubscription.js.map +0 -1
- package/dist/utils/subscribe.js +0 -51
- package/dist/utils/subscribe.js.map +0 -1
- package/dist/utils/validateHandlers.js +0 -21
- package/dist/utils/validateHandlers.js.map +0 -1
- package/eslint.config.mjs +0 -838
- package/src/AbstractAggregate.ts +0 -223
- package/src/AbstractProjection.ts +0 -209
- package/src/AbstractSaga.ts +0 -118
- package/src/AggregateCommandHandler.ts +0 -131
- package/src/CommandBus.ts +0 -100
- package/src/CqrsContainerBuilder.ts +0 -124
- package/src/Event.ts +0 -32
- package/src/EventDispatcher.ts +0 -173
- package/src/EventStore.ts +0 -205
- package/src/EventValidationProcessor.ts +0 -33
- package/src/SagaEventHandler.ts +0 -160
- package/src/in-memory/InMemoryEventStorage.ts +0 -108
- package/src/in-memory/InMemoryLock.ts +0 -43
- package/src/in-memory/InMemoryMessageBus.ts +0 -140
- package/src/in-memory/InMemorySnapshotStorage.ts +0 -89
- package/src/in-memory/InMemoryView.ts +0 -208
- package/src/in-memory/index.ts +0 -5
- package/src/in-memory/utils/index.ts +0 -1
- package/src/in-memory/utils/nextCycle.ts +0 -4
- package/src/index.ts +0 -22
- package/src/interfaces/IAggregate.ts +0 -58
- package/src/interfaces/IAggregateSnapshotStorage.ts +0 -11
- package/src/interfaces/ICommand.ts +0 -3
- package/src/interfaces/ICommandBus.ts +0 -16
- package/src/interfaces/IContainer.ts +0 -27
- package/src/interfaces/IDispatchPipelineProcessor.ts +0 -35
- package/src/interfaces/IEvent.ts +0 -13
- package/src/interfaces/IEventBus.ts +0 -11
- package/src/interfaces/IEventDispatcher.ts +0 -7
- package/src/interfaces/IEventLocker.ts +0 -34
- package/src/interfaces/IEventReceptor.ts +0 -6
- package/src/interfaces/IEventSet.ts +0 -7
- package/src/interfaces/IEventStorage.ts +0 -53
- package/src/interfaces/IEventStore.ts +0 -13
- package/src/interfaces/IEventStream.ts +0 -3
- package/src/interfaces/IIdentifierProvider.ts +0 -17
- package/src/interfaces/ILogger.ts +0 -11
- package/src/interfaces/IMessage.ts +0 -22
- package/src/interfaces/IMessageBus.ts +0 -8
- package/src/interfaces/IObjectStorage.ts +0 -13
- package/src/interfaces/IObservable.ts +0 -31
- package/src/interfaces/IObserver.ts +0 -5
- package/src/interfaces/IProjection.ts +0 -20
- package/src/interfaces/ISaga.ts +0 -38
- package/src/interfaces/IViewLocker.ts +0 -46
- package/src/interfaces/Identifier.ts +0 -1
- package/src/interfaces/index.ts +0 -26
- package/src/interfaces/isObject.ts +0 -5
- package/src/rabbitmq/IContainer.ts +0 -16
- package/src/rabbitmq/RabbitMqEventBus.ts +0 -104
- package/src/rabbitmq/RabbitMqEventInjector.ts +0 -66
- package/src/rabbitmq/RabbitMqGateway.ts +0 -473
- package/src/rabbitmq/TerminationHandler.ts +0 -31
- package/src/rabbitmq/constants.ts +0 -2
- package/src/rabbitmq/index.ts +0 -3
- package/src/sqlite/AbstractSqliteAccessor.ts +0 -58
- package/src/sqlite/AbstractSqliteObjectProjection.ts +0 -31
- package/src/sqlite/AbstractSqliteView.ts +0 -53
- package/src/sqlite/IContainer.ts +0 -8
- package/src/sqlite/SqliteEventLocker.ts +0 -137
- package/src/sqlite/SqliteObjectStorage.ts +0 -142
- package/src/sqlite/SqliteObjectView.ts +0 -58
- package/src/sqlite/SqliteProjectionDataParams.ts +0 -16
- package/src/sqlite/SqliteViewLocker.ts +0 -167
- package/src/sqlite/index.ts +0 -8
- package/src/sqlite/queries/eventLockTableInit.ts +0 -10
- package/src/sqlite/queries/index.ts +0 -2
- package/src/sqlite/queries/viewLockTableInit.ts +0 -9
- package/src/sqlite/utils/getEventId.ts +0 -8
- package/src/sqlite/utils/guid.ts +0 -4
- package/src/sqlite/utils/index.ts +0 -2
- package/src/utils/Deferred.ts +0 -41
- package/src/utils/Lock.ts +0 -53
- package/src/utils/delay.ts +0 -8
- package/src/utils/getClassName.ts +0 -6
- package/src/utils/getHandler.ts +0 -20
- package/src/utils/getMessageHandlerNames.ts +0 -38
- package/src/utils/index.ts +0 -12
- package/src/utils/isClass.ts +0 -4
- package/src/utils/iteratorToArray.ts +0 -6
- package/src/utils/notEmpty.ts +0 -1
- package/src/utils/setupOneTimeEmitterSubscription.ts +0 -59
- package/src/utils/subscribe.ts +0 -65
- package/src/utils/validateHandlers.ts +0 -20
- package/types/AbstractAggregate.d.ts +0 -57
- package/types/AbstractProjection.d.ts +0 -60
- package/types/AbstractSaga.d.ts +0 -31
- package/types/AggregateCommandHandler.d.ts +0 -20
- package/types/CommandBus.d.ts +0 -27
- package/types/CqrsContainerBuilder.d.ts +0 -21
- package/types/Event.d.ts +0 -13
- package/types/EventDispatcher.d.ts +0 -32
- package/types/EventStore.d.ts +0 -34
- package/types/EventValidationProcessor.d.ts +0 -19
- package/types/SagaEventHandler.d.ts +0 -21
- package/types/in-memory/InMemoryEventStorage.d.ts +0 -24
- package/types/in-memory/InMemoryLock.d.ts +0 -21
- package/types/in-memory/InMemoryMessageBus.d.ts +0 -42
- package/types/in-memory/InMemorySnapshotStorage.d.ts +0 -37
- package/types/in-memory/InMemoryView.d.ts +0 -53
- package/types/in-memory/index.d.ts +0 -5
- package/types/in-memory/utils/index.d.ts +0 -1
- package/types/index.d.ts +0 -14
- package/types/interfaces/IAggregate.d.ts +0 -35
- package/types/interfaces/IAggregateSnapshotStorage.d.ts +0 -7
- package/types/interfaces/ICommand.d.ts +0 -2
- package/types/interfaces/ICommandBus.d.ts +0 -14
- package/types/interfaces/IContainer.d.ts +0 -23
- package/types/interfaces/IDispatchPipelineProcessor.d.ts +0 -25
- package/types/interfaces/IEvent.d.ts +0 -6
- package/types/interfaces/IEventBus.d.ts +0 -6
- package/types/interfaces/IEventDispatcher.d.ts +0 -6
- package/types/interfaces/IEventLocker.d.ts +0 -24
- package/types/interfaces/IEventReceptor.d.ts +0 -5
- package/types/interfaces/IEventSet.d.ts +0 -3
- package/types/interfaces/IEventStorage.d.ts +0 -36
- package/types/interfaces/IEventStore.d.ts +0 -9
- package/types/interfaces/IEventStream.d.ts +0 -2
- package/types/interfaces/IIdentifierProvider.d.ts +0 -10
- package/types/interfaces/IMessage.d.ts +0 -12
- package/types/interfaces/IMessageBus.d.ts +0 -7
- package/types/interfaces/IObjectStorage.d.ts +0 -8
- package/types/interfaces/IObservable.d.ts +0 -19
- package/types/interfaces/IObserver.d.ts +0 -4
- package/types/interfaces/IProjection.d.ts +0 -17
- package/types/interfaces/ISaga.d.ts +0 -30
- package/types/interfaces/Identifier.d.ts +0 -1
- package/types/interfaces/index.d.ts +0 -26
- package/types/interfaces/isObject.d.ts +0 -1
- package/types/rabbitmq/IContainer.d.ts +0 -14
- package/types/rabbitmq/RabbitMqEventBus.d.ts +0 -41
- package/types/rabbitmq/RabbitMqEventInjector.d.ts +0 -13
- package/types/rabbitmq/RabbitMqGateway.d.ts +0 -78
- package/types/rabbitmq/TerminationHandler.d.ts +0 -10
- package/types/rabbitmq/constants.d.ts +0 -2
- package/types/rabbitmq/index.d.ts +0 -3
- package/types/sqlite/AbstractSqliteAccessor.d.ts +0 -25
- package/types/sqlite/AbstractSqliteObjectProjection.d.ts +0 -8
- package/types/sqlite/AbstractSqliteView.d.ts +0 -18
- package/types/sqlite/IContainer.d.ts +0 -7
- package/types/sqlite/SqliteEventLocker.d.ts +0 -28
- package/types/sqlite/SqliteObjectStorage.d.ts +0 -16
- package/types/sqlite/SqliteObjectView.d.ts +0 -16
- package/types/sqlite/SqliteViewLocker.d.ts +0 -30
- package/types/sqlite/index.d.ts +0 -8
- package/types/sqlite/queries/index.d.ts +0 -2
- package/types/sqlite/utils/getEventId.d.ts +0 -5
- package/types/sqlite/utils/index.d.ts +0 -2
- package/types/utils/Lock.d.ts +0 -22
- package/types/utils/delay.d.ts +0 -5
- package/types/utils/getHandler.d.ts +0 -7
- package/types/utils/getMessageHandlerNames.d.ts +0 -5
- package/types/utils/index.d.ts +0 -12
- package/types/utils/isClass.d.ts +0 -1
- package/types/utils/iteratorToArray.d.ts +0 -1
- package/types/utils/notEmpty.d.ts +0 -1
- package/types/utils/setupOneTimeEmitterSubscription.d.ts +0 -12
- package/types/utils/subscribe.d.ts +0 -13
- /package/dist/{interfaces → cjs/interfaces}/IAggregate.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/ICommand.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/ICommandBus.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/IContainer.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/IEventDispatcher.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/IEventReceptor.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/IEventStore.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/IEventStream.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/ILogger.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/IObjectStorage.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/IObserver.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/IProjection.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/ISaga.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/Identifier.js +0 -0
- /package/dist/{interfaces → cjs/interfaces}/isObject.js +0 -0
- /package/dist/{rabbitmq → cjs/rabbitmq}/IContainer.js +0 -0
- /package/dist/{sqlite → cjs/sqlite}/IContainer.js +0 -0
- /package/dist/{sqlite → cjs/sqlite}/SqliteProjectionDataParams.js +0 -0
- /package/dist/{sqlite → cjs/sqlite}/queries/viewLockTableInit.js +0 -0
- /package/dist/{sqlite → cjs/sqlite}/utils/guid.js +0 -0
- /package/dist/{utils → cjs/utils}/Deferred.js +0 -0
- /package/dist/{utils → cjs/utils}/getClassName.js +0 -0
- /package/dist/{utils → cjs/utils}/isClass.js +0 -0
- /package/{types → dist/types}/in-memory/utils/nextCycle.d.ts +0 -0
- /package/{types → dist/types}/interfaces/ILogger.d.ts +0 -0
- /package/{types → dist/types}/interfaces/IViewLocker.d.ts +0 -0
- /package/{types → dist/types}/sqlite/SqliteProjectionDataParams.d.ts +0 -0
- /package/{types → dist/types}/sqlite/queries/eventLockTableInit.d.ts +0 -0
- /package/{types → dist/types}/sqlite/queries/viewLockTableInit.d.ts +0 -0
- /package/{types → dist/types}/sqlite/utils/guid.d.ts +0 -0
- /package/{types → dist/types}/utils/Deferred.d.ts +0 -0
- /package/{types → dist/types}/utils/getClassName.d.ts +0 -0
- /package/{types → dist/types}/utils/validateHandlers.d.ts +0 -0
package/src/AbstractAggregate.ts
DELETED
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
IAggregate,
|
|
3
|
-
IMutableAggregateState,
|
|
4
|
-
ICommand,
|
|
5
|
-
Identifier,
|
|
6
|
-
IEvent,
|
|
7
|
-
IEventSet,
|
|
8
|
-
IAggregateConstructorParams
|
|
9
|
-
} from './interfaces';
|
|
10
|
-
|
|
11
|
-
import { getClassName, validateHandlers, getHandler, getMessageHandlerNames } from './utils';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Deep-clone simple JS object
|
|
15
|
-
*/
|
|
16
|
-
function clone<T>(obj: T): T {
|
|
17
|
-
return JSON.parse(JSON.stringify(obj));
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const SNAPSHOT_EVENT_TYPE = 'snapshot';
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Base class for Aggregate definition
|
|
24
|
-
*/
|
|
25
|
-
export abstract class AbstractAggregate<TState extends IMutableAggregateState | object | void> implements IAggregate {
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* List of command names handled by the Aggregate.
|
|
29
|
-
*
|
|
30
|
-
* Can be overridden in the Aggregate implementation to explicitly define supported commands.
|
|
31
|
-
* If not overridden, all public methods will be treated as command handlers by default.
|
|
32
|
-
*
|
|
33
|
-
* @example ['createUser', 'changePassword'];
|
|
34
|
-
*/
|
|
35
|
-
static get handles(): string[] {
|
|
36
|
-
return getMessageHandlerNames(this);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
#id: Identifier;
|
|
40
|
-
#changes: IEvent[] = [];
|
|
41
|
-
#version: number = 0;
|
|
42
|
-
#snapshotVersion: number | undefined;
|
|
43
|
-
|
|
44
|
-
/** Internal aggregate state */
|
|
45
|
-
protected state: TState | undefined;
|
|
46
|
-
|
|
47
|
-
/** Command being handled by aggregate */
|
|
48
|
-
protected command?: ICommand;
|
|
49
|
-
|
|
50
|
-
/** Unique aggregate instance identifier */
|
|
51
|
-
get id(): Identifier {
|
|
52
|
-
return this.#id;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/** Aggregate instance version */
|
|
56
|
-
get version(): number {
|
|
57
|
-
return this.#version;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/** Restored snapshot version */
|
|
61
|
-
get snapshotVersion(): number | undefined {
|
|
62
|
-
return this.#snapshotVersion;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/** Events emitted by Aggregate */
|
|
66
|
-
get changes(): IEventSet {
|
|
67
|
-
return [...this.#changes];
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Override to define whether an aggregate state snapshot should be taken
|
|
72
|
-
*
|
|
73
|
-
* @example
|
|
74
|
-
* // create snapshot every 50 events
|
|
75
|
-
* return this.version % 50 === 0;
|
|
76
|
-
*/
|
|
77
|
-
// eslint-disable-next-line class-methods-use-this
|
|
78
|
-
get shouldTakeSnapshot(): boolean {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
constructor(options: IAggregateConstructorParams<TState>) {
|
|
83
|
-
const { id, state, events } = options;
|
|
84
|
-
if (!id)
|
|
85
|
-
throw new TypeError('id argument required');
|
|
86
|
-
if (state && typeof state !== 'object')
|
|
87
|
-
throw new TypeError('state argument, when provided, must be an Object');
|
|
88
|
-
if (events && !Array.isArray(events))
|
|
89
|
-
throw new TypeError('events argument, when provided, must be an Array');
|
|
90
|
-
|
|
91
|
-
this.#id = id;
|
|
92
|
-
|
|
93
|
-
validateHandlers(this);
|
|
94
|
-
|
|
95
|
-
if (state)
|
|
96
|
-
this.state = state;
|
|
97
|
-
|
|
98
|
-
if (events)
|
|
99
|
-
events.forEach(event => this.mutate(event));
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/** Pass command to command handler */
|
|
103
|
-
handle(command: ICommand) {
|
|
104
|
-
if (!command)
|
|
105
|
-
throw new TypeError('command argument required');
|
|
106
|
-
if (!command.type)
|
|
107
|
-
throw new TypeError('command.type argument required');
|
|
108
|
-
|
|
109
|
-
const handler = getHandler(this, command.type);
|
|
110
|
-
if (!handler)
|
|
111
|
-
throw new Error(`'${command.type}' handler is not defined or not a function`);
|
|
112
|
-
|
|
113
|
-
this.command = command;
|
|
114
|
-
|
|
115
|
-
return handler.call(this, command.payload, command.context);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/** Mutate aggregate state and increment aggregate version */
|
|
119
|
-
mutate(event: IEvent) {
|
|
120
|
-
if (event.aggregateVersion !== undefined)
|
|
121
|
-
this.#version = event.aggregateVersion;
|
|
122
|
-
|
|
123
|
-
if (event.type === SNAPSHOT_EVENT_TYPE) {
|
|
124
|
-
this.#snapshotVersion = event.aggregateVersion;
|
|
125
|
-
this.restoreSnapshot(event);
|
|
126
|
-
}
|
|
127
|
-
else if (this.state) {
|
|
128
|
-
const handler = 'mutate' in this.state ?
|
|
129
|
-
this.state.mutate :
|
|
130
|
-
getHandler(this.state, event.type);
|
|
131
|
-
if (handler)
|
|
132
|
-
handler.call(this.state, event);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
this.#version += 1;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/** Format and register aggregate event and mutate aggregate state */
|
|
139
|
-
protected emit<TPayload>(type: string, payload?: TPayload) {
|
|
140
|
-
if (typeof type !== 'string' || !type.length)
|
|
141
|
-
throw new TypeError('type argument must be a non-empty string');
|
|
142
|
-
|
|
143
|
-
const event = this.makeEvent<TPayload>(type, payload, this.command);
|
|
144
|
-
|
|
145
|
-
this.emitRaw(event);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/** Format event based on a current aggregate state and a command being executed */
|
|
149
|
-
protected makeEvent<TPayload>(type: string, payload?: TPayload, sourceCommand?: ICommand): IEvent<TPayload> {
|
|
150
|
-
const event: IEvent<TPayload> = {
|
|
151
|
-
aggregateId: this.id,
|
|
152
|
-
aggregateVersion: this.version,
|
|
153
|
-
type,
|
|
154
|
-
payload
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
if (sourceCommand) {
|
|
158
|
-
// augment event with command context
|
|
159
|
-
const { context, sagaId, sagaVersion } = sourceCommand;
|
|
160
|
-
if (context !== undefined)
|
|
161
|
-
event.context = context;
|
|
162
|
-
if (sagaId !== undefined)
|
|
163
|
-
event.sagaId = sagaId;
|
|
164
|
-
if (sagaVersion !== undefined)
|
|
165
|
-
event.sagaVersion = sagaVersion;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
return event;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/** Register aggregate event and mutate aggregate state */
|
|
172
|
-
protected emitRaw<TPayload>(event: IEvent<TPayload>): void {
|
|
173
|
-
if (!event)
|
|
174
|
-
throw new TypeError('event argument required');
|
|
175
|
-
if (!event.aggregateId)
|
|
176
|
-
throw new TypeError('event.aggregateId argument required');
|
|
177
|
-
if (typeof event.aggregateVersion !== 'number')
|
|
178
|
-
throw new TypeError('event.aggregateVersion argument must be a Number');
|
|
179
|
-
if (typeof event.type !== 'string' || !event.type.length)
|
|
180
|
-
throw new TypeError('event.type argument must be a non-empty String');
|
|
181
|
-
|
|
182
|
-
this.mutate(event);
|
|
183
|
-
|
|
184
|
-
this.#changes.push(event);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Take an aggregate state snapshot and add it to the changes queue
|
|
189
|
-
*/
|
|
190
|
-
takeSnapshot() {
|
|
191
|
-
this.emit(SNAPSHOT_EVENT_TYPE, this.makeSnapshot());
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/** Create an aggregate state snapshot */
|
|
195
|
-
makeSnapshot(): TState {
|
|
196
|
-
if (!this.state)
|
|
197
|
-
throw new Error('state property is empty, either define state or override makeSnapshot method');
|
|
198
|
-
|
|
199
|
-
return clone(this.state);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/** Restore aggregate state from a snapshot */
|
|
203
|
-
protected restoreSnapshot(snapshotEvent: IEvent<TState>) {
|
|
204
|
-
if (!snapshotEvent)
|
|
205
|
-
throw new TypeError('snapshotEvent argument required');
|
|
206
|
-
if (!snapshotEvent.type)
|
|
207
|
-
throw new TypeError('snapshotEvent.type argument required');
|
|
208
|
-
if (!snapshotEvent.payload)
|
|
209
|
-
throw new TypeError('snapshotEvent.payload argument required');
|
|
210
|
-
|
|
211
|
-
if (snapshotEvent.type !== SNAPSHOT_EVENT_TYPE)
|
|
212
|
-
throw new Error(`${SNAPSHOT_EVENT_TYPE} event type expected`);
|
|
213
|
-
if (!this.state)
|
|
214
|
-
throw new Error('state property is empty, either defined state or override restoreSnapshot method');
|
|
215
|
-
|
|
216
|
-
Object.assign(this.state, clone(snapshotEvent.payload));
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/** Get human-readable aggregate identifier */
|
|
220
|
-
toString(): string {
|
|
221
|
-
return `${getClassName(this)} ${this.id} (v${this.version})`;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import { describe } from './Event';
|
|
2
|
-
import { InMemoryView } from './in-memory/InMemoryView';
|
|
3
|
-
import {
|
|
4
|
-
IViewLocker,
|
|
5
|
-
IEventLocker,
|
|
6
|
-
IProjection,
|
|
7
|
-
ILogger,
|
|
8
|
-
IExtendableLogger,
|
|
9
|
-
IEventStore,
|
|
10
|
-
IEvent,
|
|
11
|
-
isViewLocker,
|
|
12
|
-
isEventLocker
|
|
13
|
-
} from './interfaces';
|
|
14
|
-
|
|
15
|
-
import {
|
|
16
|
-
getClassName,
|
|
17
|
-
validateHandlers,
|
|
18
|
-
getHandler,
|
|
19
|
-
subscribe,
|
|
20
|
-
getMessageHandlerNames
|
|
21
|
-
} from './utils';
|
|
22
|
-
|
|
23
|
-
export type AbstractProjectionParams<T> = {
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* The default view associated with the projection.
|
|
27
|
-
* Can optionally implement IViewLocker and/or IEventLocker.
|
|
28
|
-
*/
|
|
29
|
-
view?: T,
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Manages view restoration state to prevent early access to an inconsistent view
|
|
33
|
-
* or conflicts from concurrent restoration by other processes.
|
|
34
|
-
*/
|
|
35
|
-
viewLocker?: IViewLocker,
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Tracks event processing state to prevent concurrent handling by multiple processes.
|
|
39
|
-
*/
|
|
40
|
-
eventLocker?: IEventLocker,
|
|
41
|
-
|
|
42
|
-
logger?: ILogger | IExtendableLogger
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Base class for Projection definition
|
|
47
|
-
*/
|
|
48
|
-
export abstract class AbstractProjection<TView = any> implements IProjection<TView> {
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* List of event types handled by the projection. Can be overridden in the projection implementation.
|
|
52
|
-
* If not overridden, event types will be inferred from handler methods defined on the Projection class.
|
|
53
|
-
*/
|
|
54
|
-
static get handles(): string[] {
|
|
55
|
-
return getMessageHandlerNames(this);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
#view?: TView;
|
|
59
|
-
#viewLocker?: IViewLocker;
|
|
60
|
-
#eventLocker?: IEventLocker;
|
|
61
|
-
protected _logger?: ILogger;
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* The default view associated with the projection.
|
|
65
|
-
* Can optionally implement IViewLocker and/or IEventLocker.
|
|
66
|
-
*/
|
|
67
|
-
public get view(): TView {
|
|
68
|
-
return this.#view ?? (this.#view = new InMemoryView() as TView);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
protected set view(value: TView) {
|
|
72
|
-
this.#view = value;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Manages view restoration state to prevent early access to an inconsistent view
|
|
77
|
-
* or conflicts from concurrent restoration by other processes.
|
|
78
|
-
*/
|
|
79
|
-
protected get _viewLocker(): IViewLocker | undefined {
|
|
80
|
-
return this.#viewLocker ?? (isViewLocker(this.view) ? this.view : undefined);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
protected set _viewLocker(value: IViewLocker | undefined) {
|
|
84
|
-
this.#viewLocker = value;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Tracks event processing state to prevent concurrent handling by multiple processes.
|
|
89
|
-
*/
|
|
90
|
-
protected get _eventLocker(): IEventLocker | undefined {
|
|
91
|
-
return this.#eventLocker ?? (isEventLocker(this.view) ? this.view : undefined);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
protected set _eventLocker(value: IEventLocker | undefined) {
|
|
95
|
-
this.#eventLocker = value;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
constructor({
|
|
99
|
-
view,
|
|
100
|
-
viewLocker,
|
|
101
|
-
eventLocker,
|
|
102
|
-
logger
|
|
103
|
-
}: AbstractProjectionParams<TView> = {}) {
|
|
104
|
-
validateHandlers(this);
|
|
105
|
-
|
|
106
|
-
this.#view = view;
|
|
107
|
-
this.#viewLocker = viewLocker;
|
|
108
|
-
this.#eventLocker = eventLocker;
|
|
109
|
-
|
|
110
|
-
this._logger = logger && 'child' in logger ?
|
|
111
|
-
logger.child({ service: getClassName(this) }) :
|
|
112
|
-
logger;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/** Subscribe to event store */
|
|
116
|
-
async subscribe(eventStore: IEventStore): Promise<void> {
|
|
117
|
-
subscribe(eventStore, this, {
|
|
118
|
-
masterHandler: (e: IEvent) => this.project(e)
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
await this.restore(eventStore);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/** Pass event to projection event handler */
|
|
125
|
-
async project(event: IEvent): Promise<void> {
|
|
126
|
-
if (this._viewLocker && !this._viewLocker?.ready) {
|
|
127
|
-
this._logger?.debug('view is locked, awaiting until it is ready');
|
|
128
|
-
await this._viewLocker.once('ready');
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return this._project(event);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/** Pass event to projection event handler, without awaiting for restore operation to complete */
|
|
135
|
-
protected async _project(event: IEvent): Promise<void> {
|
|
136
|
-
const handler = getHandler(this, event.type);
|
|
137
|
-
if (!handler)
|
|
138
|
-
throw new Error(`'${event.type}' handler is not defined or not a function`);
|
|
139
|
-
|
|
140
|
-
if (this._eventLocker) {
|
|
141
|
-
const eventLockObtained = await this._eventLocker.tryMarkAsProjecting(event);
|
|
142
|
-
if (!eventLockObtained)
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
await handler.call(this, event);
|
|
147
|
-
|
|
148
|
-
if (this._eventLocker)
|
|
149
|
-
await this._eventLocker.markAsProjected(event);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/** Restore projection view from event store */
|
|
153
|
-
async restore(eventStore: IEventStore): Promise<void> {
|
|
154
|
-
// lock the view to ensure same restoring procedure
|
|
155
|
-
// won't be performed by another projection instance
|
|
156
|
-
if (this._viewLocker)
|
|
157
|
-
await this._viewLocker.lock();
|
|
158
|
-
|
|
159
|
-
await this._restore(eventStore);
|
|
160
|
-
|
|
161
|
-
if (this._viewLocker)
|
|
162
|
-
this._viewLocker.unlock();
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/** Restore projection view from event store */
|
|
166
|
-
protected async _restore(eventStore: IEventStore): Promise<void> {
|
|
167
|
-
if (!eventStore)
|
|
168
|
-
throw new TypeError('eventStore argument required');
|
|
169
|
-
if (typeof eventStore.getEventsByTypes !== 'function')
|
|
170
|
-
throw new TypeError('eventStore.getEventsByTypes must be a Function');
|
|
171
|
-
|
|
172
|
-
let lastEvent: IEvent | undefined;
|
|
173
|
-
|
|
174
|
-
if (this._eventLocker) {
|
|
175
|
-
this._logger?.debug('retrieving last event projected');
|
|
176
|
-
lastEvent = await this._eventLocker.getLastEvent();
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
this._logger?.debug(`retrieving ${lastEvent ? `events after ${describe(lastEvent)}` : 'all events'}...`);
|
|
180
|
-
|
|
181
|
-
const messageTypes = (this.constructor as typeof AbstractProjection).handles;
|
|
182
|
-
const eventsIterable = eventStore.getEventsByTypes(messageTypes, { afterEvent: lastEvent });
|
|
183
|
-
|
|
184
|
-
let eventsCount = 0;
|
|
185
|
-
const startTs = Date.now();
|
|
186
|
-
|
|
187
|
-
for await (const event of eventsIterable) {
|
|
188
|
-
try {
|
|
189
|
-
await this._project(event);
|
|
190
|
-
eventsCount += 1;
|
|
191
|
-
}
|
|
192
|
-
catch (err: any) {
|
|
193
|
-
this._onRestoringError(err, event);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
this._logger?.info(`view restored from ${eventsCount} event(s) in ${Date.now() - startTs} ms`);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/** Handle error on restoring. Logs and throws error by default */
|
|
201
|
-
protected _onRestoringError(error: Error, event: IEvent) {
|
|
202
|
-
this._logger?.error(`view restoring has failed (view will remain locked): ${error.message}`, {
|
|
203
|
-
service: getClassName(this),
|
|
204
|
-
event,
|
|
205
|
-
stack: error.stack
|
|
206
|
-
});
|
|
207
|
-
throw error;
|
|
208
|
-
}
|
|
209
|
-
}
|
package/src/AbstractSaga.ts
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { ICommand, Identifier, IEvent, ISaga, ISagaConstructorParams } from './interfaces';
|
|
2
|
-
|
|
3
|
-
import { getClassName, validateHandlers, getHandler } from './utils';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Base class for Saga definition
|
|
7
|
-
*/
|
|
8
|
-
export abstract class AbstractSaga implements ISaga {
|
|
9
|
-
|
|
10
|
-
/** List of events that start new saga, must be overridden in Saga implementation */
|
|
11
|
-
static get startsWith(): string[] {
|
|
12
|
-
throw new Error('startsWith must be overridden to return a list of event types that start saga');
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/** List of event types being handled by Saga, must be overridden in Saga implementation */
|
|
16
|
-
static get handles(): string[] {
|
|
17
|
-
return [];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** Saga ID */
|
|
21
|
-
get id(): Identifier {
|
|
22
|
-
return this.#id;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** Saga version */
|
|
26
|
-
get version(): number {
|
|
27
|
-
return this.#version;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/** Command execution queue */
|
|
31
|
-
get uncommittedMessages(): ICommand[] {
|
|
32
|
-
return Array.from(this.#messages);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
#id: Identifier;
|
|
36
|
-
#version = 0;
|
|
37
|
-
#messages: ICommand[] = [];
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Creates an instance of AbstractSaga
|
|
41
|
-
*/
|
|
42
|
-
constructor(options: ISagaConstructorParams) {
|
|
43
|
-
if (!options)
|
|
44
|
-
throw new TypeError('options argument required');
|
|
45
|
-
if (!options.id)
|
|
46
|
-
throw new TypeError('options.id argument required');
|
|
47
|
-
|
|
48
|
-
this.#id = options.id;
|
|
49
|
-
|
|
50
|
-
validateHandlers(this, 'startsWith');
|
|
51
|
-
validateHandlers(this, 'handles');
|
|
52
|
-
|
|
53
|
-
if (options.events) {
|
|
54
|
-
options.events.forEach(e => this.apply(e));
|
|
55
|
-
this.resetUncommittedMessages();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
Object.defineProperty(this, 'restored', { value: true });
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** Modify saga state by applying an event */
|
|
62
|
-
apply(event: IEvent): Promise<void> | void {
|
|
63
|
-
if (!event)
|
|
64
|
-
throw new TypeError('event argument required');
|
|
65
|
-
if (!event.type)
|
|
66
|
-
throw new TypeError('event.type argument required');
|
|
67
|
-
|
|
68
|
-
const handler = getHandler(this, event.type);
|
|
69
|
-
if (!handler)
|
|
70
|
-
throw new Error(`'${event.type}' handler is not defined or not a function`);
|
|
71
|
-
|
|
72
|
-
const r = handler.call(this, event);
|
|
73
|
-
if (r instanceof Promise) {
|
|
74
|
-
return r.then(() => {
|
|
75
|
-
this.#version += 1;
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
this.#version += 1;
|
|
80
|
-
return undefined;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/** Format a command and put it to the execution queue */
|
|
84
|
-
protected enqueue(commandType: string, aggregateId: Identifier | undefined, payload: object) {
|
|
85
|
-
if (typeof commandType !== 'string' || !commandType.length)
|
|
86
|
-
throw new TypeError('commandType argument must be a non-empty String');
|
|
87
|
-
if (!['string', 'number', 'undefined'].includes(typeof aggregateId))
|
|
88
|
-
throw new TypeError('aggregateId argument must be either string, number or undefined');
|
|
89
|
-
|
|
90
|
-
this.enqueueRaw({
|
|
91
|
-
aggregateId,
|
|
92
|
-
sagaId: this.id,
|
|
93
|
-
sagaVersion: this.version,
|
|
94
|
-
type: commandType,
|
|
95
|
-
payload
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/** Put a command to the execution queue */
|
|
100
|
-
protected enqueueRaw(command: ICommand) {
|
|
101
|
-
if (typeof command !== 'object' || !command)
|
|
102
|
-
throw new TypeError('command argument must be an Object');
|
|
103
|
-
if (typeof command.type !== 'string' || !command.type.length)
|
|
104
|
-
throw new TypeError('command.type argument must be a non-empty String');
|
|
105
|
-
|
|
106
|
-
this.#messages.push(command);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** Clear the execution queue */
|
|
110
|
-
resetUncommittedMessages() {
|
|
111
|
-
this.#messages.length = 0;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/** Get human-readable Saga name */
|
|
115
|
-
toString(): string {
|
|
116
|
-
return `${getClassName(this)} ${this.id} (v${this.version})`;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
IAggregate,
|
|
3
|
-
IAggregateConstructor,
|
|
4
|
-
IAggregateFactory,
|
|
5
|
-
ICommand,
|
|
6
|
-
ICommandBus,
|
|
7
|
-
ICommandHandler,
|
|
8
|
-
IContainer,
|
|
9
|
-
Identifier,
|
|
10
|
-
IEventSet,
|
|
11
|
-
IEventStore,
|
|
12
|
-
ILogger
|
|
13
|
-
} from './interfaces';
|
|
14
|
-
|
|
15
|
-
import {
|
|
16
|
-
iteratorToArray,
|
|
17
|
-
getClassName,
|
|
18
|
-
subscribe
|
|
19
|
-
} from './utils';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Aggregate command handler.
|
|
23
|
-
*
|
|
24
|
-
* Subscribes to event store and awaits aggregate commands.
|
|
25
|
-
* Upon command receiving creates an instance of aggregate,
|
|
26
|
-
* restores its state, passes command and commits emitted events to event store.
|
|
27
|
-
*/
|
|
28
|
-
export class AggregateCommandHandler implements ICommandHandler {
|
|
29
|
-
|
|
30
|
-
#eventStore: IEventStore;
|
|
31
|
-
#logger?: ILogger;
|
|
32
|
-
|
|
33
|
-
#aggregateFactory: IAggregateFactory<any>;
|
|
34
|
-
#handles: string[];
|
|
35
|
-
|
|
36
|
-
constructor({
|
|
37
|
-
eventStore,
|
|
38
|
-
aggregateType,
|
|
39
|
-
aggregateFactory,
|
|
40
|
-
handles,
|
|
41
|
-
logger
|
|
42
|
-
}: Pick<IContainer, 'eventStore' | 'logger'> & {
|
|
43
|
-
aggregateType?: IAggregateConstructor<any>,
|
|
44
|
-
aggregateFactory?: IAggregateFactory<any>,
|
|
45
|
-
handles?: string[]
|
|
46
|
-
}) {
|
|
47
|
-
if (!eventStore)
|
|
48
|
-
throw new TypeError('eventStore argument required');
|
|
49
|
-
|
|
50
|
-
this.#eventStore = eventStore;
|
|
51
|
-
this.#logger = logger && 'child' in logger ?
|
|
52
|
-
logger.child({ service: getClassName(this) }) :
|
|
53
|
-
logger;
|
|
54
|
-
|
|
55
|
-
if (aggregateType) {
|
|
56
|
-
const AggregateType = aggregateType;
|
|
57
|
-
this.#aggregateFactory = params => new AggregateType(params);
|
|
58
|
-
this.#handles = AggregateType.handles;
|
|
59
|
-
}
|
|
60
|
-
else if (aggregateFactory) {
|
|
61
|
-
if (!Array.isArray(handles) || !handles.length)
|
|
62
|
-
throw new TypeError('handles argument must be an non-empty Array');
|
|
63
|
-
|
|
64
|
-
this.#aggregateFactory = aggregateFactory;
|
|
65
|
-
this.#handles = handles;
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
throw new TypeError('either aggregateType or aggregateFactory is required');
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** Subscribe to all command types handled by aggregateType */
|
|
73
|
-
subscribe(commandBus: ICommandBus) {
|
|
74
|
-
subscribe(commandBus, this, {
|
|
75
|
-
messageTypes: this.#handles,
|
|
76
|
-
masterHandler: (c: ICommand) => this.execute(c)
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/** Restore aggregate from event store events */
|
|
81
|
-
async #restoreAggregate(id: Identifier): Promise<IAggregate> {
|
|
82
|
-
if (!id)
|
|
83
|
-
throw new TypeError('id argument required');
|
|
84
|
-
|
|
85
|
-
const eventsIterable = this.#eventStore.getAggregateEvents(id);
|
|
86
|
-
const events = await iteratorToArray(eventsIterable);
|
|
87
|
-
|
|
88
|
-
const aggregate = this.#aggregateFactory({ id, events });
|
|
89
|
-
|
|
90
|
-
this.#logger?.info(`${aggregate} state restored from ${events.length} event(s)`);
|
|
91
|
-
|
|
92
|
-
return aggregate;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/** Create new aggregate with new Id generated by event store */
|
|
96
|
-
async #createAggregate(): Promise<IAggregate> {
|
|
97
|
-
const id = await this.#eventStore.getNewId();
|
|
98
|
-
const aggregate = this.#aggregateFactory({ id });
|
|
99
|
-
this.#logger?.info(`${aggregate} created`);
|
|
100
|
-
|
|
101
|
-
return aggregate;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/** Pass a command to corresponding aggregate */
|
|
105
|
-
async execute(cmd: ICommand): Promise<IEventSet> {
|
|
106
|
-
if (!cmd)
|
|
107
|
-
throw new TypeError('cmd argument required');
|
|
108
|
-
if (!cmd.type)
|
|
109
|
-
throw new TypeError('cmd.type argument required');
|
|
110
|
-
|
|
111
|
-
const aggregate = cmd.aggregateId ?
|
|
112
|
-
await this.#restoreAggregate(cmd.aggregateId) :
|
|
113
|
-
await this.#createAggregate();
|
|
114
|
-
|
|
115
|
-
await aggregate.handle(cmd);
|
|
116
|
-
|
|
117
|
-
let events = aggregate.changes;
|
|
118
|
-
this.#logger?.info(`${aggregate} "${cmd.type}" command processed, ${events.length} event(s) produced`);
|
|
119
|
-
if (!events.length)
|
|
120
|
-
return events;
|
|
121
|
-
|
|
122
|
-
if (aggregate.shouldTakeSnapshot) {
|
|
123
|
-
aggregate.takeSnapshot();
|
|
124
|
-
events = aggregate.changes;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
await this.#eventStore.dispatch(events);
|
|
128
|
-
|
|
129
|
-
return events;
|
|
130
|
-
}
|
|
131
|
-
}
|