node-cqrs 0.17.0 → 1.0.0-beta.1
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 +584 -92
- 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/{infrastructure/utils → cjs/errors}/index.js +1 -2
- 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/{infrastructure → cjs/in-memory}/InMemoryView.js +26 -45
- package/dist/cjs/in-memory/InMemoryView.js.map +1 -0
- package/dist/{utils → cjs/in-memory}/index.js +5 -8
- 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/{infrastructure → cjs/in-memory}/utils/nextCycle.js +1 -1
- 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/{interfaces.js → cjs/interfaces/IAggregate.js} +1 -2
- 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.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/{utils → cjs/utils}/getHandler.js +5 -7
- package/dist/cjs/utils/getHandler.js.map +1 -0
- package/dist/{utils → cjs/utils}/getMessageHandlerNames.js +2 -10
- 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/{utils → cjs/utils}/setupOneTimeEmitterSubscription.js +7 -8
- 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/{utils → cjs/utils}/validateHandlers.js +6 -6
- 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 +124 -35
- package/dist/AbstractAggregate.js +0 -178
- package/dist/AbstractAggregate.js.map +0 -1
- package/dist/AbstractProjection.js +0 -121
- 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 -85
- package/dist/AggregateCommandHandler.js.map +0 -1
- package/dist/CommandBus.js +0 -77
- package/dist/CommandBus.js.map +0 -1
- package/dist/CqrsContainerBuilder.js +0 -77
- package/dist/CqrsContainerBuilder.js.map +0 -1
- package/dist/Event.js +0 -43
- package/dist/Event.js.map +0 -1
- package/dist/EventStore.js +0 -229
- package/dist/EventStore.js.map +0 -1
- package/dist/SagaEventHandler.js +0 -117
- package/dist/SagaEventHandler.js.map +0 -1
- package/dist/index.js +0 -39
- package/dist/index.js.map +0 -1
- package/dist/infrastructure/InMemoryEventStorage.js +0 -53
- package/dist/infrastructure/InMemoryEventStorage.js.map +0 -1
- package/dist/infrastructure/InMemoryLock.js +0 -68
- package/dist/infrastructure/InMemoryLock.js.map +0 -1
- package/dist/infrastructure/InMemoryMessageBus.js +0 -95
- package/dist/infrastructure/InMemoryMessageBus.js.map +0 -1
- package/dist/infrastructure/InMemorySnapshotStorage.js +0 -26
- package/dist/infrastructure/InMemorySnapshotStorage.js.map +0 -1
- package/dist/infrastructure/InMemoryView.js.map +0 -1
- package/dist/infrastructure/utils/Deferred.js.map +0 -1
- package/dist/infrastructure/utils/index.js.map +0 -1
- package/dist/infrastructure/utils/nextCycle.js.map +0 -1
- package/dist/interfaces.js.map +0 -1
- package/dist/utils/getClassName.js.map +0 -1
- package/dist/utils/getHandledMessageTypes.js +0 -18
- package/dist/utils/getHandledMessageTypes.js.map +0 -1
- package/dist/utils/getHandler.js.map +0 -1
- package/dist/utils/getMessageHandlerNames.js.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/isClass.js.map +0 -1
- package/dist/utils/setupOneTimeEmitterSubscription.js.map +0 -1
- package/dist/utils/subscribe.js +0 -39
- package/dist/utils/subscribe.js.map +0 -1
- package/dist/utils/validateHandlers.js.map +0 -1
- package/src/AbstractAggregate.ts +0 -223
- package/src/AbstractProjection.ts +0 -172
- package/src/AbstractSaga.ts +0 -118
- package/src/AggregateCommandHandler.ts +0 -129
- package/src/CommandBus.ts +0 -98
- package/src/CqrsContainerBuilder.ts +0 -120
- package/src/Event.ts +0 -43
- package/src/EventStore.ts +0 -315
- package/src/SagaEventHandler.ts +0 -161
- package/src/index.ts +0 -26
- package/src/infrastructure/InMemoryEventStorage.ts +0 -68
- package/src/infrastructure/InMemoryLock.ts +0 -73
- package/src/infrastructure/InMemoryMessageBus.ts +0 -118
- package/src/infrastructure/InMemorySnapshotStorage.ts +0 -27
- package/src/infrastructure/InMemoryView.ts +0 -221
- package/src/infrastructure/utils/Deferred.ts +0 -41
- package/src/infrastructure/utils/index.ts +0 -2
- package/src/infrastructure/utils/nextCycle.ts +0 -4
- package/src/interfaces.ts +0 -328
- package/src/utils/getClassName.ts +0 -6
- package/src/utils/getHandledMessageTypes.ts +0 -20
- package/src/utils/getHandler.ts +0 -20
- package/src/utils/getMessageHandlerNames.ts +0 -44
- package/src/utils/index.ts +0 -8
- package/src/utils/isClass.ts +0 -4
- package/src/utils/setupOneTimeEmitterSubscription.ts +0 -57
- package/src/utils/subscribe.ts +0 -51
- package/src/utils/validateHandlers.ts +0 -19
- /package/dist/{infrastructure → cjs}/utils/Deferred.js +0 -0
- /package/dist/{utils → cjs/utils}/getClassName.js +0 -0
- /package/dist/{utils → cjs/utils}/isClass.js +0 -0
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ICommand,
|
|
3
|
-
IEvent,
|
|
4
|
-
IMessageBus,
|
|
5
|
-
IMessageHandler,
|
|
6
|
-
IObservable
|
|
7
|
-
} from "../interfaces";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Default implementation of the message bus.
|
|
11
|
-
* Keeps all subscriptions and messages in memory.
|
|
12
|
-
*/
|
|
13
|
-
export class InMemoryMessageBus implements IMessageBus {
|
|
14
|
-
|
|
15
|
-
#handlers: Map<string, Set<IMessageHandler>> = new Map();
|
|
16
|
-
#name: string | undefined;
|
|
17
|
-
#uniqueEventHandlers: boolean;
|
|
18
|
-
#queues: Map<string, InMemoryMessageBus> = new Map();
|
|
19
|
-
|
|
20
|
-
constructor({ name, uniqueEventHandlers = !!name }: {
|
|
21
|
-
name?: string,
|
|
22
|
-
uniqueEventHandlers?: boolean
|
|
23
|
-
} = {}) {
|
|
24
|
-
this.#name = name;
|
|
25
|
-
this.#uniqueEventHandlers = uniqueEventHandlers;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Subscribe to message type
|
|
30
|
-
*/
|
|
31
|
-
on(messageType: string, handler: IMessageHandler) {
|
|
32
|
-
if (typeof messageType !== 'string' || !messageType.length)
|
|
33
|
-
throw new TypeError('messageType argument must be a non-empty String');
|
|
34
|
-
if (typeof handler !== 'function')
|
|
35
|
-
throw new TypeError('handler argument must be a Function');
|
|
36
|
-
if (arguments.length !== 2)
|
|
37
|
-
throw new TypeError(`2 arguments are expected, but ${arguments.length} received`);
|
|
38
|
-
|
|
39
|
-
// Events published to a named queue must be consumed only once.
|
|
40
|
-
// For example, for sending a welcome email, NotificationReceptor will subscribe to "notifications:userCreated".
|
|
41
|
-
// Since we use an in-memory bus, there is no need to track message handling by multiple distributed subscribers,
|
|
42
|
-
// and we only need to make sure that no more than 1 such subscriber will be created
|
|
43
|
-
if (!this.#handlers.has(messageType))
|
|
44
|
-
this.#handlers.set(messageType, new Set());
|
|
45
|
-
else if (this.#uniqueEventHandlers)
|
|
46
|
-
throw new Error(`"${messageType}" handler is already set up on the "${this.#name}" queue`);
|
|
47
|
-
|
|
48
|
-
this.#handlers.get(messageType)?.add(handler);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Get or create a named queue.
|
|
53
|
-
* Named queues support only one handler per event type.
|
|
54
|
-
*/
|
|
55
|
-
queue(name: string): IObservable {
|
|
56
|
-
let queue = this.#queues.get(name);
|
|
57
|
-
if (!queue) {
|
|
58
|
-
queue = new InMemoryMessageBus({ name, uniqueEventHandlers: true });
|
|
59
|
-
this.#queues.set(name, queue);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return queue;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Remove subscription
|
|
67
|
-
*/
|
|
68
|
-
off(messageType: string, handler: IMessageHandler) {
|
|
69
|
-
if (typeof messageType !== 'string' || !messageType.length)
|
|
70
|
-
throw new TypeError('messageType argument must be a non-empty String');
|
|
71
|
-
if (typeof handler !== 'function')
|
|
72
|
-
throw new TypeError('handler argument must be a Function');
|
|
73
|
-
if (arguments.length !== 2)
|
|
74
|
-
throw new TypeError(`2 arguments are expected, but ${arguments.length} received`);
|
|
75
|
-
if (!this.#handlers.has(messageType))
|
|
76
|
-
throw new Error(`No ${messageType} subscribers found`);
|
|
77
|
-
|
|
78
|
-
this.#handlers.get(messageType)?.delete(handler);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Send command to exactly 1 command handler
|
|
83
|
-
*/
|
|
84
|
-
async send(command: ICommand): Promise<any> {
|
|
85
|
-
if (typeof command !== 'object' || !command)
|
|
86
|
-
throw new TypeError('command argument must be an Object');
|
|
87
|
-
if (typeof command.type !== 'string' || !command.type.length)
|
|
88
|
-
throw new TypeError('command.type argument must be a non-empty String');
|
|
89
|
-
|
|
90
|
-
const handlers = this.#handlers.get(command.type);
|
|
91
|
-
if (!handlers || !handlers.size)
|
|
92
|
-
throw new Error(`No '${command.type}' subscribers found`);
|
|
93
|
-
if (handlers.size > 1)
|
|
94
|
-
throw new Error(`More than one '${command.type}' subscriber found`);
|
|
95
|
-
|
|
96
|
-
const commandHandler = handlers.values().next().value;
|
|
97
|
-
|
|
98
|
-
return commandHandler(command);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Publish event to all subscribers (if any)
|
|
103
|
-
*/
|
|
104
|
-
async publish(event: IEvent): Promise<any> {
|
|
105
|
-
if (typeof event !== 'object' || !event)
|
|
106
|
-
throw new TypeError('event argument must be an Object');
|
|
107
|
-
if (typeof event.type !== 'string' || !event.type.length)
|
|
108
|
-
throw new TypeError('event.type argument must be a non-empty String');
|
|
109
|
-
|
|
110
|
-
const handlers = [
|
|
111
|
-
...this.#handlers.get(event.type) || [],
|
|
112
|
-
...Array.from(this.#queues.values()).map(namedQueue =>
|
|
113
|
-
(e: IEvent) => namedQueue.publish(e))
|
|
114
|
-
];
|
|
115
|
-
|
|
116
|
-
return Promise.all(handlers.map(handler => handler(event)));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { IAggregateSnapshotStorage, Identifier, IEvent } from "../interfaces";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* In-memory storage for aggregate snapshots.
|
|
5
|
-
* Storage content resets on app restart
|
|
6
|
-
*/
|
|
7
|
-
export class InMemorySnapshotStorage implements IAggregateSnapshotStorage {
|
|
8
|
-
|
|
9
|
-
#snapshots: Map<Identifier, IEvent> = new Map();
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Get latest aggregate snapshot
|
|
13
|
-
*/
|
|
14
|
-
async getAggregateSnapshot(aggregateId: Identifier): Promise<IEvent | undefined> {
|
|
15
|
-
return this.#snapshots.get(aggregateId);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Save new aggregate snapshot
|
|
20
|
-
*/
|
|
21
|
-
async saveAggregateSnapshot(snapshotEvent: IEvent) {
|
|
22
|
-
if (!snapshotEvent.aggregateId)
|
|
23
|
-
throw new TypeError('event.aggregateId is required');
|
|
24
|
-
|
|
25
|
-
this.#snapshots.set(snapshotEvent.aggregateId, snapshotEvent);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
import { InMemoryLock } from './InMemoryLock';
|
|
2
|
-
import { IProjectionView, Identifier } from "../interfaces";
|
|
3
|
-
import { nextCycle } from './utils';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Update given value with an update Cb and return updated value.
|
|
7
|
-
* Wrapper is needed for backward compatibility with update methods that were modifying the passed in objects directly
|
|
8
|
-
*/
|
|
9
|
-
function applyUpdate<T>(view: T | undefined, update: (r?: T) => T | undefined): T | undefined {
|
|
10
|
-
const valueReturnedByUpdate = update(view);
|
|
11
|
-
return valueReturnedByUpdate === undefined ?
|
|
12
|
-
view :
|
|
13
|
-
valueReturnedByUpdate;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* In-memory Projection View, which suspends get()'s until it is ready
|
|
18
|
-
*/
|
|
19
|
-
export class InMemoryView<TRecord> implements IProjectionView {
|
|
20
|
-
|
|
21
|
-
static factory<TView>(): TView {
|
|
22
|
-
return (new InMemoryView() as unknown) as TView;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
protected _map: Map<Identifier, TRecord> = new Map();
|
|
26
|
-
|
|
27
|
-
#lock: InMemoryLock;
|
|
28
|
-
|
|
29
|
-
#asyncWrites: boolean;
|
|
30
|
-
|
|
31
|
-
/** Whether the view is restored */
|
|
32
|
-
get ready(): boolean {
|
|
33
|
-
return !this.#lock.locked;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** Number of records in the View */
|
|
37
|
-
get size(): number {
|
|
38
|
-
return this._map.size;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
constructor(options?: {
|
|
42
|
-
/** Indicates if writes should be submitted asynchronously */
|
|
43
|
-
asyncWrites?: boolean
|
|
44
|
-
}) {
|
|
45
|
-
this.#asyncWrites = options?.asyncWrites ?? false;
|
|
46
|
-
|
|
47
|
-
this.#lock = new InMemoryLock();
|
|
48
|
-
|
|
49
|
-
// explicitly bind the `get` method to this object for easier using in Promises
|
|
50
|
-
Object.defineProperty(this, this.get.name, {
|
|
51
|
-
value: this.get.bind(this)
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/** Lock the view to prevent concurrent modifications */
|
|
56
|
-
async lock(): Promise<boolean> {
|
|
57
|
-
await this.#lock.lock();
|
|
58
|
-
return this.#lock.locked;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** Release the lock */
|
|
62
|
-
async unlock(): Promise<void> {
|
|
63
|
-
return this.#lock.unlock();
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/** Create a Promise which will resolve to a first emitted event of a given type */
|
|
67
|
-
once(eventType: 'ready'): Promise<any> {
|
|
68
|
-
if (eventType !== 'ready')
|
|
69
|
-
throw new TypeError(`Unexpected event type: ${eventType}`);
|
|
70
|
-
|
|
71
|
-
return this.#lock.once('unlocked');
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Check if view contains a record with a given key.
|
|
76
|
-
* This is the only synchronous method, so make sure to check the `ready` flag, if necessary
|
|
77
|
-
*
|
|
78
|
-
* @deprecated Use `async get()` instead
|
|
79
|
-
*/
|
|
80
|
-
has(key: Identifier): boolean {
|
|
81
|
-
return this._map.has(key);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/** Get record with a given key; await until the view is restored */
|
|
85
|
-
async get(key: Identifier, options?: { nowait?: boolean }): Promise<TRecord | undefined> {
|
|
86
|
-
if (!key)
|
|
87
|
-
throw new TypeError('key argument required');
|
|
88
|
-
|
|
89
|
-
if (!this.ready && !options?.nowait)
|
|
90
|
-
await this.once('ready');
|
|
91
|
-
|
|
92
|
-
await nextCycle();
|
|
93
|
-
|
|
94
|
-
return this._map.get(key);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Get record with a given key synchronously
|
|
99
|
-
*/
|
|
100
|
-
getSync(key: Identifier): TRecord | undefined {
|
|
101
|
-
if (!key)
|
|
102
|
-
throw new TypeError('key argument required');
|
|
103
|
-
|
|
104
|
-
return this._map.get(key);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/** Get all records matching an optional filter */
|
|
108
|
-
async getAll(filter?: (r: TRecord | undefined, i: Identifier) => boolean):
|
|
109
|
-
Promise<Array<[Identifier, TRecord | undefined]>> {
|
|
110
|
-
if (filter && typeof filter !== 'function')
|
|
111
|
-
throw new TypeError('filter argument, when defined, must be a Function');
|
|
112
|
-
|
|
113
|
-
if (!this.ready)
|
|
114
|
-
await this.once('ready');
|
|
115
|
-
|
|
116
|
-
await nextCycle();
|
|
117
|
-
|
|
118
|
-
const r: Array<[Identifier, TRecord | undefined]> = [];
|
|
119
|
-
for (const entry of this._map.entries()) {
|
|
120
|
-
if (!filter || filter(entry[1], entry[0]))
|
|
121
|
-
r.push(entry);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return r;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/** Create record with a given key and value */
|
|
128
|
-
async create(key: Identifier, value: TRecord = {} as TRecord) {
|
|
129
|
-
if (!key)
|
|
130
|
-
throw new TypeError('key argument required');
|
|
131
|
-
if (typeof value === 'function')
|
|
132
|
-
throw new TypeError('value argument must be an instance of an Object');
|
|
133
|
-
|
|
134
|
-
if (this.#asyncWrites)
|
|
135
|
-
await nextCycle();
|
|
136
|
-
|
|
137
|
-
if (this._map.has(key))
|
|
138
|
-
throw new Error(`Key '${key}' already exists`);
|
|
139
|
-
|
|
140
|
-
this._map.set(key, value);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/** Update existing view record */
|
|
144
|
-
async update(key: Identifier, update: (r: TRecord) => TRecord) {
|
|
145
|
-
if (!key)
|
|
146
|
-
throw new TypeError('key argument required');
|
|
147
|
-
if (typeof update !== 'function')
|
|
148
|
-
throw new TypeError('update argument must be a Function');
|
|
149
|
-
|
|
150
|
-
if (!this._map.has(key))
|
|
151
|
-
throw new Error(`Key '${key}' does not exist`);
|
|
152
|
-
|
|
153
|
-
return this._update(key, update);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/** Update existing view record or create new */
|
|
157
|
-
async updateEnforcingNew(key: Identifier, update: (r?: TRecord) => TRecord) {
|
|
158
|
-
if (!key)
|
|
159
|
-
throw new TypeError('key argument required');
|
|
160
|
-
if (typeof update !== 'function')
|
|
161
|
-
throw new TypeError('update argument must be a Function');
|
|
162
|
-
|
|
163
|
-
if (!this._map.has(key))
|
|
164
|
-
return this.create(key, applyUpdate(undefined, update));
|
|
165
|
-
|
|
166
|
-
return this._update(key, update);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/** Update all records that match filter criteria */
|
|
170
|
-
async updateAll(filter: (r: TRecord) => boolean, update: (r: TRecord) => TRecord) {
|
|
171
|
-
if (filter && typeof filter !== 'function')
|
|
172
|
-
throw new TypeError('filter argument, when specified, must be a Function');
|
|
173
|
-
if (typeof update !== 'function')
|
|
174
|
-
throw new TypeError('update argument must be a Function');
|
|
175
|
-
|
|
176
|
-
for (const [key, value] of this._map) {
|
|
177
|
-
if (!filter || filter(value))
|
|
178
|
-
await this._update(key, update);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/** Update existing record */
|
|
183
|
-
private async _update(key: Identifier, update: (r?: TRecord) => TRecord) {
|
|
184
|
-
const value = this._map.get(key);
|
|
185
|
-
const updatedValue = applyUpdate(value, update);
|
|
186
|
-
if (updatedValue === undefined)
|
|
187
|
-
return;
|
|
188
|
-
|
|
189
|
-
if (this.#asyncWrites)
|
|
190
|
-
await nextCycle();
|
|
191
|
-
|
|
192
|
-
this._map.set(key, updatedValue);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/** Delete record */
|
|
196
|
-
async delete(key: Identifier) {
|
|
197
|
-
if (!key)
|
|
198
|
-
throw new TypeError('key argument required');
|
|
199
|
-
|
|
200
|
-
if (this.#asyncWrites)
|
|
201
|
-
await nextCycle();
|
|
202
|
-
|
|
203
|
-
this._map.delete(key);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/** Delete all records that match filter criteria */
|
|
207
|
-
async deleteAll(filter: (r?: TRecord) => boolean) {
|
|
208
|
-
if (filter && typeof filter !== 'function')
|
|
209
|
-
throw new TypeError('filter argument, when specified, must be a Function');
|
|
210
|
-
|
|
211
|
-
for (const [key, value] of this._map) {
|
|
212
|
-
if (!filter || filter(value))
|
|
213
|
-
await this.delete(key);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/** Get view summary as string */
|
|
218
|
-
toString(): string {
|
|
219
|
-
return `${this.size} record${this.size !== 1 ? 's' : ''}`;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deferred promise that must be resolved from outside
|
|
3
|
-
*/
|
|
4
|
-
export class Deferred<TDeferredValue> {
|
|
5
|
-
|
|
6
|
-
readonly promise: Promise<TDeferredValue | void>;
|
|
7
|
-
|
|
8
|
-
get resolved() {
|
|
9
|
-
return this.#resolved;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
get rejected() {
|
|
13
|
-
return this.#rejected;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
get settled() {
|
|
17
|
-
return this.#resolved || this.#rejected;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#resolve!: (value?: TDeferredValue | PromiseLike<TDeferredValue>) => void;
|
|
21
|
-
#resolved: boolean = false;
|
|
22
|
-
#reject!: (reason?: any) => void;
|
|
23
|
-
#rejected: boolean = false;
|
|
24
|
-
|
|
25
|
-
constructor() {
|
|
26
|
-
this.promise = new Promise<TDeferredValue | void>((resolve, reject) => {
|
|
27
|
-
this.#resolve = resolve;
|
|
28
|
-
this.#reject = reject;
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
resolve(value?: TDeferredValue) {
|
|
33
|
-
this.#resolve(value);
|
|
34
|
-
this.#resolved = true;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
reject(reason?: any) {
|
|
38
|
-
this.#reject(reason);
|
|
39
|
-
this.#rejected = true;
|
|
40
|
-
}
|
|
41
|
-
}
|