node-cqrs 0.16.4 → 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +615 -79
- package/LICENSE +202 -21
- package/NOTICE +15 -0
- package/README.md +429 -112
- package/dist/cjs/AbstractAggregate.js +193 -0
- package/dist/cjs/AbstractAggregate.js.map +1 -0
- package/dist/cjs/AbstractProjection.js +165 -0
- package/dist/cjs/AbstractProjection.js.map +1 -0
- package/dist/cjs/AbstractSaga.js +109 -0
- package/dist/cjs/AbstractSaga.js.map +1 -0
- package/dist/cjs/AggregateCommandHandler.js +182 -0
- package/dist/cjs/AggregateCommandHandler.js.map +1 -0
- package/dist/cjs/CommandBus.js +9 -0
- package/dist/cjs/CommandBus.js.map +1 -0
- package/dist/cjs/CqrsContainerBuilder.js +97 -0
- package/dist/cjs/CqrsContainerBuilder.js.map +1 -0
- package/dist/cjs/Event.js +19 -0
- package/dist/cjs/Event.js.map +1 -0
- package/dist/cjs/EventDispatchPipeline.js +83 -0
- package/dist/cjs/EventDispatchPipeline.js.map +1 -0
- package/dist/cjs/EventDispatcher.js +93 -0
- package/dist/cjs/EventDispatcher.js.map +1 -0
- package/dist/cjs/EventIdAugmentor.js +30 -0
- package/dist/cjs/EventIdAugmentor.js.map +1 -0
- package/dist/cjs/EventStore.js +106 -0
- package/dist/cjs/EventStore.js.map +1 -0
- package/dist/cjs/SagaEventHandler.js +153 -0
- package/dist/cjs/SagaEventHandler.js.map +1 -0
- package/dist/cjs/errors/ConcurrencyError.js +21 -0
- package/dist/cjs/errors/ConcurrencyError.js.map +1 -0
- package/dist/cjs/errors/index.js +18 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/in-memory/InMemoryEventStorage.js +106 -0
- package/dist/cjs/in-memory/InMemoryEventStorage.js.map +1 -0
- package/dist/cjs/in-memory/InMemoryLock.js +44 -0
- package/dist/cjs/in-memory/InMemoryLock.js.map +1 -0
- package/dist/cjs/in-memory/InMemoryMessageBus.js +93 -0
- package/dist/cjs/in-memory/InMemoryMessageBus.js.map +1 -0
- package/dist/cjs/in-memory/InMemorySnapshotStorage.js +101 -0
- package/dist/cjs/in-memory/InMemorySnapshotStorage.js.map +1 -0
- package/dist/cjs/in-memory/InMemoryView.js +154 -0
- package/dist/cjs/in-memory/InMemoryView.js.map +1 -0
- package/dist/cjs/in-memory/index.js +22 -0
- package/dist/cjs/in-memory/index.js.map +1 -0
- package/dist/cjs/in-memory/utils/index.js +18 -0
- package/dist/cjs/in-memory/utils/index.js.map +1 -0
- package/dist/cjs/in-memory/utils/nextCycle.js +9 -0
- package/dist/cjs/in-memory/utils/nextCycle.js.map +1 -0
- package/dist/cjs/index.js +58 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interfaces/IAggregate.js +3 -0
- package/dist/cjs/interfaces/IAggregate.js.map +1 -0
- package/dist/cjs/interfaces/IAggregateSnapshotStorage.js +13 -0
- package/dist/cjs/interfaces/IAggregateSnapshotStorage.js.map +1 -0
- package/dist/cjs/interfaces/ICommand.js +3 -0
- package/dist/cjs/interfaces/ICommand.js.map +1 -0
- package/dist/cjs/interfaces/ICommandBus.js +3 -0
- package/dist/cjs/interfaces/ICommandBus.js.map +1 -0
- package/dist/cjs/interfaces/IContainer.js +3 -0
- package/dist/cjs/interfaces/IContainer.js.map +1 -0
- package/dist/cjs/interfaces/IDispatchPipelineProcessor.js +9 -0
- package/dist/cjs/interfaces/IDispatchPipelineProcessor.js.map +1 -0
- package/dist/cjs/interfaces/IEvent.js +10 -0
- package/dist/cjs/interfaces/IEvent.js.map +1 -0
- package/dist/cjs/interfaces/IEventBus.js +9 -0
- package/dist/cjs/interfaces/IEventBus.js.map +1 -0
- package/dist/cjs/interfaces/IEventDispatcher.js +3 -0
- package/dist/cjs/interfaces/IEventDispatcher.js.map +1 -0
- package/dist/cjs/interfaces/IEventLocker.js +15 -0
- package/dist/cjs/interfaces/IEventLocker.js.map +1 -0
- package/dist/cjs/interfaces/IEventReceptor.js +3 -0
- package/dist/cjs/interfaces/IEventReceptor.js.map +1 -0
- package/dist/cjs/interfaces/IEventSet.js +8 -0
- package/dist/cjs/interfaces/IEventSet.js.map +1 -0
- package/dist/cjs/interfaces/IEventStorageReader.js +13 -0
- package/dist/cjs/interfaces/IEventStorageReader.js.map +1 -0
- package/dist/cjs/interfaces/IEventStore.js +3 -0
- package/dist/cjs/interfaces/IEventStore.js.map +1 -0
- package/dist/cjs/interfaces/IEventStream.js +3 -0
- package/dist/cjs/interfaces/IEventStream.js.map +1 -0
- package/dist/cjs/interfaces/IIdentifierProvider.js +9 -0
- package/dist/cjs/interfaces/IIdentifierProvider.js.map +1 -0
- package/dist/cjs/interfaces/ILocker.js +9 -0
- package/dist/cjs/interfaces/ILocker.js.map +1 -0
- package/dist/cjs/interfaces/ILogger.js +3 -0
- package/dist/cjs/interfaces/ILogger.js.map +1 -0
- package/dist/cjs/interfaces/IMessage.js +10 -0
- package/dist/cjs/interfaces/IMessage.js.map +1 -0
- package/dist/cjs/interfaces/IMutableState.js +3 -0
- package/dist/cjs/interfaces/IMutableState.js.map +1 -0
- package/dist/cjs/interfaces/IObjectStorage.js +3 -0
- package/dist/cjs/interfaces/IObjectStorage.js.map +1 -0
- package/dist/cjs/interfaces/IObservable.js +11 -0
- package/dist/cjs/interfaces/IObservable.js.map +1 -0
- package/dist/cjs/interfaces/IObservableQueueProvider.js +9 -0
- package/dist/cjs/interfaces/IObservableQueueProvider.js.map +1 -0
- package/dist/cjs/interfaces/IObserver.js +3 -0
- package/dist/cjs/interfaces/IObserver.js.map +1 -0
- package/dist/cjs/interfaces/IProjection.js +3 -0
- package/dist/cjs/interfaces/IProjection.js.map +1 -0
- package/dist/cjs/interfaces/ISaga.js +3 -0
- package/dist/cjs/interfaces/ISaga.js.map +1 -0
- package/dist/cjs/interfaces/ISnapshotEvent.js +10 -0
- package/dist/cjs/interfaces/ISnapshotEvent.js.map +1 -0
- package/dist/cjs/interfaces/IViewLocker.js +21 -0
- package/dist/cjs/interfaces/IViewLocker.js.map +1 -0
- package/dist/cjs/interfaces/Identifier.js +3 -0
- package/dist/cjs/interfaces/Identifier.js.map +1 -0
- package/dist/cjs/interfaces/index.js +46 -0
- package/dist/cjs/interfaces/index.js.map +1 -0
- package/dist/cjs/interfaces/isObject.js +9 -0
- package/dist/cjs/interfaces/isObject.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/rabbitmq/IContainer.js +3 -0
- package/dist/cjs/rabbitmq/IContainer.js.map +1 -0
- package/dist/cjs/rabbitmq/RabbitMqCommandBus.js +84 -0
- package/dist/cjs/rabbitmq/RabbitMqCommandBus.js.map +1 -0
- package/dist/cjs/rabbitmq/RabbitMqEventBus.js +121 -0
- package/dist/cjs/rabbitmq/RabbitMqEventBus.js.map +1 -0
- package/dist/cjs/rabbitmq/RabbitMqGateway.js +578 -0
- package/dist/cjs/rabbitmq/RabbitMqGateway.js.map +1 -0
- package/dist/cjs/rabbitmq/index.js +21 -0
- package/dist/cjs/rabbitmq/index.js.map +1 -0
- package/dist/cjs/rabbitmq/utils/index.js +19 -0
- package/dist/cjs/rabbitmq/utils/index.js.map +1 -0
- package/dist/cjs/rabbitmq/utils/registerExitCleanup.js +28 -0
- package/dist/cjs/rabbitmq/utils/registerExitCleanup.js.map +1 -0
- package/dist/cjs/rabbitmq/utils/resolveProvider.js +9 -0
- package/dist/cjs/rabbitmq/utils/resolveProvider.js.map +1 -0
- package/dist/cjs/sqlite/AbstractSqliteAccessor.js +50 -0
- package/dist/cjs/sqlite/AbstractSqliteAccessor.js.map +1 -0
- package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js +26 -0
- package/dist/cjs/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
- package/dist/cjs/sqlite/AbstractSqliteView.js +50 -0
- package/dist/cjs/sqlite/AbstractSqliteView.js.map +1 -0
- package/dist/cjs/sqlite/IContainer.js +3 -0
- package/dist/cjs/sqlite/IContainer.js.map +1 -0
- package/dist/cjs/sqlite/SqliteEventLocker.js +93 -0
- package/dist/cjs/sqlite/SqliteEventLocker.js.map +1 -0
- package/dist/cjs/sqlite/SqliteObjectStorage.js +114 -0
- package/dist/cjs/sqlite/SqliteObjectStorage.js.map +1 -0
- package/dist/cjs/sqlite/SqliteObjectView.js +48 -0
- package/dist/cjs/sqlite/SqliteObjectView.js.map +1 -0
- package/dist/cjs/sqlite/SqliteProjectionDataParams.js +3 -0
- package/dist/cjs/sqlite/SqliteProjectionDataParams.js.map +1 -0
- package/dist/cjs/sqlite/SqliteViewLocker.js +119 -0
- package/dist/cjs/sqlite/SqliteViewLocker.js.map +1 -0
- package/dist/cjs/sqlite/index.js +26 -0
- package/dist/cjs/sqlite/index.js.map +1 -0
- package/dist/cjs/sqlite/queries/eventLockTableInit.js +15 -0
- package/dist/cjs/sqlite/queries/eventLockTableInit.js.map +1 -0
- package/dist/cjs/sqlite/queries/index.js +19 -0
- package/dist/cjs/sqlite/queries/index.js.map +1 -0
- package/dist/cjs/sqlite/queries/viewLockTableInit.js +14 -0
- package/dist/cjs/sqlite/queries/viewLockTableInit.js.map +1 -0
- package/dist/cjs/sqlite/utils/getEventId.js +14 -0
- package/dist/cjs/sqlite/utils/getEventId.js.map +1 -0
- package/dist/cjs/sqlite/utils/guid.js +9 -0
- package/dist/cjs/sqlite/utils/guid.js.map +1 -0
- package/dist/cjs/sqlite/utils/index.js +19 -0
- package/dist/cjs/sqlite/utils/index.js.map +1 -0
- package/dist/cjs/utils/Deferred.js +38 -0
- package/dist/cjs/utils/Deferred.js.map +1 -0
- package/dist/cjs/utils/Lock.js +102 -0
- package/dist/cjs/utils/Lock.js.map +1 -0
- package/dist/cjs/utils/MapAssertable.js +30 -0
- package/dist/cjs/utils/MapAssertable.js.map +1 -0
- package/dist/cjs/utils/assert.js +88 -0
- package/dist/cjs/utils/assert.js.map +1 -0
- package/dist/cjs/utils/clone.js +13 -0
- package/dist/cjs/utils/clone.js.map +1 -0
- package/dist/cjs/utils/extractErrorDetails.js +37 -0
- package/dist/cjs/utils/extractErrorDetails.js.map +1 -0
- package/dist/cjs/utils/getClassName.js +10 -0
- package/dist/cjs/utils/getClassName.js.map +1 -0
- package/dist/cjs/utils/getHandler.js +18 -0
- package/dist/cjs/utils/getHandler.js.map +1 -0
- package/dist/cjs/utils/getMessageHandlerNames.js +30 -0
- package/dist/cjs/utils/getMessageHandlerNames.js.map +1 -0
- package/dist/cjs/utils/index.js +31 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/isClass.js +8 -0
- package/dist/cjs/utils/isClass.js.map +1 -0
- package/dist/cjs/utils/sagaId.js +23 -0
- package/dist/cjs/utils/sagaId.js.map +1 -0
- package/dist/cjs/utils/setupOneTimeEmitterSubscription.js +45 -0
- package/dist/cjs/utils/setupOneTimeEmitterSubscription.js.map +1 -0
- package/dist/cjs/utils/subscribe.js +43 -0
- package/dist/cjs/utils/subscribe.js.map +1 -0
- package/dist/cjs/utils/validateHandlers.js +21 -0
- package/dist/cjs/utils/validateHandlers.js.map +1 -0
- package/dist/cjs/workers/AbstractWorkerProjection.js +56 -0
- package/dist/cjs/workers/AbstractWorkerProjection.js.map +1 -0
- package/dist/cjs/workers/WorkerProxyProjection.js +142 -0
- package/dist/cjs/workers/WorkerProxyProjection.js.map +1 -0
- package/dist/cjs/workers/index.js +20 -0
- package/dist/cjs/workers/index.js.map +1 -0
- package/dist/cjs/workers/interfaces/IProxyProjection.js +3 -0
- package/dist/cjs/workers/interfaces/IProxyProjection.js.map +1 -0
- package/dist/cjs/workers/interfaces/IWorkerProjection.js +3 -0
- package/dist/cjs/workers/interfaces/IWorkerProjection.js.map +1 -0
- package/dist/cjs/workers/interfaces/index.js +3 -0
- package/dist/cjs/workers/interfaces/index.js.map +1 -0
- package/dist/cjs/workers/protocol.js +16 -0
- package/dist/cjs/workers/protocol.js.map +1 -0
- package/dist/cjs/workers/utils/ProjectionView.js +3 -0
- package/dist/cjs/workers/utils/ProjectionView.js.map +1 -0
- package/dist/cjs/workers/utils/createWorker.js +87 -0
- package/dist/cjs/workers/utils/createWorker.js.map +1 -0
- package/dist/cjs/workers/utils/createWorkerInstance.js +59 -0
- package/dist/cjs/workers/utils/createWorkerInstance.js.map +1 -0
- package/dist/cjs/workers/utils/index.js +21 -0
- package/dist/cjs/workers/utils/index.js.map +1 -0
- package/dist/cjs/workers/utils/nodeEndpoint.js +8 -0
- package/dist/cjs/workers/utils/nodeEndpoint.js.map +1 -0
- package/dist/cjs/workers/utils/workerProxyFactory.js +21 -0
- package/dist/cjs/workers/utils/workerProxyFactory.js.map +1 -0
- package/dist/esm/AbstractAggregate.js +189 -0
- package/dist/esm/AbstractAggregate.js.map +1 -0
- package/dist/esm/AbstractProjection.js +161 -0
- package/dist/esm/AbstractProjection.js.map +1 -0
- package/dist/esm/AbstractSaga.js +105 -0
- package/dist/esm/AbstractSaga.js.map +1 -0
- package/dist/esm/AggregateCommandHandler.js +178 -0
- package/dist/esm/AggregateCommandHandler.js.map +1 -0
- package/dist/esm/CommandBus.js +5 -0
- package/dist/esm/CommandBus.js.map +1 -0
- package/dist/esm/CqrsContainerBuilder.js +93 -0
- package/dist/esm/CqrsContainerBuilder.js.map +1 -0
- package/dist/esm/Event.js +15 -0
- package/dist/esm/Event.js.map +1 -0
- package/dist/esm/EventDispatchPipeline.js +79 -0
- package/dist/esm/EventDispatchPipeline.js.map +1 -0
- package/dist/esm/EventDispatcher.js +89 -0
- package/dist/esm/EventDispatcher.js.map +1 -0
- package/dist/esm/EventIdAugmentor.js +26 -0
- package/dist/esm/EventIdAugmentor.js.map +1 -0
- package/dist/esm/EventStore.js +102 -0
- package/dist/esm/EventStore.js.map +1 -0
- package/dist/esm/SagaEventHandler.js +116 -0
- package/dist/esm/SagaEventHandler.js.map +1 -0
- package/dist/esm/errors/ConcurrencyError.js +17 -0
- package/dist/esm/errors/ConcurrencyError.js.map +1 -0
- package/dist/esm/errors/index.js +2 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/in-memory/InMemoryEventStorage.js +102 -0
- package/dist/esm/in-memory/InMemoryEventStorage.js.map +1 -0
- package/dist/esm/in-memory/InMemoryLock.js +40 -0
- package/dist/esm/in-memory/InMemoryLock.js.map +1 -0
- package/dist/esm/in-memory/InMemoryMessageBus.js +89 -0
- package/dist/esm/in-memory/InMemoryMessageBus.js.map +1 -0
- package/dist/esm/in-memory/InMemorySnapshotStorage.js +64 -0
- package/dist/esm/in-memory/InMemorySnapshotStorage.js.map +1 -0
- package/dist/esm/in-memory/InMemoryView.js +150 -0
- package/dist/esm/in-memory/InMemoryView.js.map +1 -0
- package/dist/esm/in-memory/index.js +6 -0
- package/dist/esm/in-memory/index.js.map +1 -0
- package/dist/esm/in-memory/utils/index.js +2 -0
- package/dist/esm/in-memory/utils/index.js.map +1 -0
- package/dist/esm/in-memory/utils/nextCycle.js +5 -0
- package/dist/esm/in-memory/utils/nextCycle.js.map +1 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interfaces/IAggregate.js +2 -0
- package/dist/esm/interfaces/IAggregate.js.map +1 -0
- package/dist/esm/interfaces/IAggregateSnapshotStorage.js +9 -0
- package/dist/esm/interfaces/IAggregateSnapshotStorage.js.map +1 -0
- package/dist/esm/interfaces/ICommand.js +2 -0
- package/dist/esm/interfaces/ICommand.js.map +1 -0
- package/dist/esm/interfaces/ICommandBus.js +2 -0
- package/dist/esm/interfaces/ICommandBus.js.map +1 -0
- package/dist/esm/interfaces/IContainer.js +2 -0
- package/dist/esm/interfaces/IContainer.js.map +1 -0
- package/dist/esm/interfaces/IDispatchPipelineProcessor.js +5 -0
- package/dist/esm/interfaces/IDispatchPipelineProcessor.js.map +1 -0
- package/dist/esm/interfaces/IEvent.js +6 -0
- package/dist/esm/interfaces/IEvent.js.map +1 -0
- package/dist/esm/interfaces/IEventBus.js +5 -0
- package/dist/esm/interfaces/IEventBus.js.map +1 -0
- package/dist/esm/interfaces/IEventDispatcher.js +2 -0
- package/dist/esm/interfaces/IEventDispatcher.js.map +1 -0
- package/dist/esm/interfaces/IEventLocker.js +11 -0
- package/dist/esm/interfaces/IEventLocker.js.map +1 -0
- package/dist/esm/interfaces/IEventReceptor.js +2 -0
- package/dist/esm/interfaces/IEventReceptor.js.map +1 -0
- package/dist/esm/interfaces/IEventSet.js +4 -0
- package/dist/esm/interfaces/IEventSet.js.map +1 -0
- package/dist/esm/interfaces/IEventStorageReader.js +9 -0
- package/dist/esm/interfaces/IEventStorageReader.js.map +1 -0
- package/dist/esm/interfaces/IEventStore.js +2 -0
- package/dist/esm/interfaces/IEventStore.js.map +1 -0
- package/dist/esm/interfaces/IEventStream.js +2 -0
- package/dist/esm/interfaces/IEventStream.js.map +1 -0
- package/dist/esm/interfaces/IIdentifierProvider.js +5 -0
- package/dist/esm/interfaces/IIdentifierProvider.js.map +1 -0
- package/dist/esm/interfaces/ILocker.js +5 -0
- package/dist/esm/interfaces/ILocker.js.map +1 -0
- package/dist/esm/interfaces/ILogger.js +2 -0
- package/dist/esm/interfaces/ILogger.js.map +1 -0
- package/dist/esm/interfaces/IMessage.js +6 -0
- package/dist/esm/interfaces/IMessage.js.map +1 -0
- package/dist/esm/interfaces/IMutableState.js +2 -0
- package/dist/esm/interfaces/IMutableState.js.map +1 -0
- package/dist/esm/interfaces/IObjectStorage.js +2 -0
- package/dist/esm/interfaces/IObjectStorage.js.map +1 -0
- package/dist/esm/interfaces/IObservable.js +7 -0
- package/dist/esm/interfaces/IObservable.js.map +1 -0
- package/dist/esm/interfaces/IObservableQueueProvider.js +5 -0
- package/dist/esm/interfaces/IObservableQueueProvider.js.map +1 -0
- package/dist/esm/interfaces/IObserver.js +2 -0
- package/dist/esm/interfaces/IObserver.js.map +1 -0
- package/dist/esm/interfaces/IProjection.js +2 -0
- package/dist/esm/interfaces/IProjection.js.map +1 -0
- package/dist/esm/interfaces/ISaga.js +2 -0
- package/dist/esm/interfaces/ISaga.js.map +1 -0
- package/dist/esm/interfaces/ISnapshotEvent.js +6 -0
- package/dist/esm/interfaces/ISnapshotEvent.js.map +1 -0
- package/dist/esm/interfaces/IViewLocker.js +17 -0
- package/dist/esm/interfaces/IViewLocker.js.map +1 -0
- package/dist/esm/interfaces/Identifier.js +2 -0
- package/dist/esm/interfaces/Identifier.js.map +1 -0
- package/dist/esm/interfaces/index.js +30 -0
- package/dist/esm/interfaces/index.js.map +1 -0
- package/dist/esm/interfaces/isObject.js +5 -0
- package/dist/esm/interfaces/isObject.js.map +1 -0
- package/dist/esm/rabbitmq/IContainer.js +2 -0
- package/dist/esm/rabbitmq/IContainer.js.map +1 -0
- package/dist/esm/rabbitmq/RabbitMqCommandBus.js +80 -0
- package/dist/esm/rabbitmq/RabbitMqCommandBus.js.map +1 -0
- package/dist/esm/rabbitmq/RabbitMqEventBus.js +117 -0
- package/dist/esm/rabbitmq/RabbitMqEventBus.js.map +1 -0
- package/dist/esm/rabbitmq/RabbitMqGateway.js +541 -0
- package/dist/esm/rabbitmq/RabbitMqGateway.js.map +1 -0
- package/dist/esm/rabbitmq/index.js +5 -0
- package/dist/esm/rabbitmq/index.js.map +1 -0
- package/dist/esm/rabbitmq/utils/index.js +3 -0
- package/dist/esm/rabbitmq/utils/index.js.map +1 -0
- package/dist/esm/rabbitmq/utils/registerExitCleanup.js +24 -0
- package/dist/esm/rabbitmq/utils/registerExitCleanup.js.map +1 -0
- package/dist/esm/rabbitmq/utils/resolveProvider.js +6 -0
- package/dist/esm/rabbitmq/utils/resolveProvider.js.map +1 -0
- package/dist/esm/sqlite/AbstractSqliteAccessor.js +46 -0
- package/dist/esm/sqlite/AbstractSqliteAccessor.js.map +1 -0
- package/dist/esm/sqlite/AbstractSqliteObjectProjection.js +22 -0
- package/dist/esm/sqlite/AbstractSqliteObjectProjection.js.map +1 -0
- package/dist/esm/sqlite/AbstractSqliteView.js +46 -0
- package/dist/esm/sqlite/AbstractSqliteView.js.map +1 -0
- package/dist/esm/sqlite/IContainer.js +2 -0
- package/dist/esm/sqlite/IContainer.js.map +1 -0
- package/dist/esm/sqlite/SqliteEventLocker.js +89 -0
- package/dist/esm/sqlite/SqliteEventLocker.js.map +1 -0
- package/dist/esm/sqlite/SqliteObjectStorage.js +110 -0
- package/dist/esm/sqlite/SqliteObjectStorage.js.map +1 -0
- package/dist/esm/sqlite/SqliteObjectView.js +44 -0
- package/dist/esm/sqlite/SqliteObjectView.js.map +1 -0
- package/dist/esm/sqlite/SqliteProjectionDataParams.js +2 -0
- package/dist/esm/sqlite/SqliteProjectionDataParams.js.map +1 -0
- package/dist/esm/sqlite/SqliteViewLocker.js +115 -0
- package/dist/esm/sqlite/SqliteViewLocker.js.map +1 -0
- package/dist/esm/sqlite/index.js +10 -0
- package/dist/esm/sqlite/index.js.map +1 -0
- package/dist/esm/sqlite/queries/eventLockTableInit.js +11 -0
- package/dist/esm/sqlite/queries/eventLockTableInit.js.map +1 -0
- package/dist/esm/sqlite/queries/index.js +3 -0
- package/dist/esm/sqlite/queries/index.js.map +1 -0
- package/dist/esm/sqlite/queries/viewLockTableInit.js +10 -0
- package/dist/esm/sqlite/queries/viewLockTableInit.js.map +1 -0
- package/dist/esm/sqlite/utils/getEventId.js +7 -0
- package/dist/esm/sqlite/utils/getEventId.js.map +1 -0
- package/dist/esm/sqlite/utils/guid.js +5 -0
- package/dist/esm/sqlite/utils/guid.js.map +1 -0
- package/dist/esm/sqlite/utils/index.js +3 -0
- package/dist/esm/sqlite/utils/index.js.map +1 -0
- package/dist/esm/utils/Deferred.js +34 -0
- package/dist/esm/utils/Deferred.js.map +1 -0
- package/dist/esm/utils/Lock.js +97 -0
- package/dist/esm/utils/Lock.js.map +1 -0
- package/dist/esm/utils/MapAssertable.js +26 -0
- package/dist/esm/utils/MapAssertable.js.map +1 -0
- package/dist/esm/utils/assert.js +70 -0
- package/dist/esm/utils/assert.js.map +1 -0
- package/dist/esm/utils/clone.js +10 -0
- package/dist/esm/utils/clone.js.map +1 -0
- package/dist/esm/utils/extractErrorDetails.js +33 -0
- package/dist/esm/utils/extractErrorDetails.js.map +1 -0
- package/dist/esm/utils/getClassName.js +7 -0
- package/dist/esm/utils/getClassName.js.map +1 -0
- package/dist/esm/utils/getHandler.js +15 -0
- package/dist/esm/utils/getHandler.js.map +1 -0
- package/dist/esm/utils/getMessageHandlerNames.js +27 -0
- package/dist/esm/utils/getMessageHandlerNames.js.map +1 -0
- package/dist/esm/utils/index.js +15 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/isClass.js +5 -0
- package/dist/esm/utils/isClass.js.map +1 -0
- package/dist/esm/utils/sagaId.js +18 -0
- package/dist/esm/utils/sagaId.js.map +1 -0
- package/dist/esm/utils/setupOneTimeEmitterSubscription.js +42 -0
- package/dist/esm/utils/setupOneTimeEmitterSubscription.js.map +1 -0
- package/dist/esm/utils/subscribe.js +40 -0
- package/dist/esm/utils/subscribe.js.map +1 -0
- package/dist/esm/utils/validateHandlers.js +18 -0
- package/dist/esm/utils/validateHandlers.js.map +1 -0
- package/dist/esm/workers/AbstractWorkerProjection.js +52 -0
- package/dist/esm/workers/AbstractWorkerProjection.js.map +1 -0
- package/dist/esm/workers/WorkerProxyProjection.js +105 -0
- package/dist/esm/workers/WorkerProxyProjection.js.map +1 -0
- package/dist/esm/workers/index.js +4 -0
- package/dist/esm/workers/index.js.map +1 -0
- package/dist/esm/workers/interfaces/IProxyProjection.js +2 -0
- package/dist/esm/workers/interfaces/IProxyProjection.js.map +1 -0
- package/dist/esm/workers/interfaces/IWorkerProjection.js +2 -0
- package/dist/esm/workers/interfaces/IWorkerProjection.js.map +1 -0
- package/dist/esm/workers/interfaces/index.js +2 -0
- package/dist/esm/workers/interfaces/index.js.map +1 -0
- package/dist/esm/workers/protocol.js +11 -0
- package/dist/esm/workers/protocol.js.map +1 -0
- package/dist/esm/workers/utils/ProjectionView.js +2 -0
- package/dist/esm/workers/utils/ProjectionView.js.map +1 -0
- package/dist/esm/workers/utils/createWorker.js +51 -0
- package/dist/esm/workers/utils/createWorker.js.map +1 -0
- package/dist/esm/workers/utils/createWorkerInstance.js +23 -0
- package/dist/esm/workers/utils/createWorkerInstance.js.map +1 -0
- package/dist/esm/workers/utils/index.js +5 -0
- package/dist/esm/workers/utils/index.js.map +1 -0
- package/dist/esm/workers/utils/nodeEndpoint.js +5 -0
- package/dist/esm/workers/utils/nodeEndpoint.js.map +1 -0
- package/dist/esm/workers/utils/workerProxyFactory.js +18 -0
- package/dist/esm/workers/utils/workerProxyFactory.js.map +1 -0
- package/dist/types/AbstractAggregate.d.ts +80 -0
- package/dist/types/AbstractProjection.d.ts +77 -0
- package/dist/types/AbstractSaga.d.ts +42 -0
- package/dist/types/AggregateCommandHandler.d.ts +22 -0
- package/dist/types/CommandBus.d.ts +4 -0
- package/dist/types/CqrsContainerBuilder.d.ts +21 -0
- package/dist/types/Event.d.ts +9 -0
- package/dist/types/EventDispatchPipeline.d.ts +16 -0
- package/dist/types/EventDispatcher.d.ts +39 -0
- package/dist/types/EventIdAugmentor.d.ts +12 -0
- package/dist/types/EventStore.d.ts +29 -0
- package/dist/types/SagaEventHandler.d.ts +22 -0
- package/dist/types/errors/ConcurrencyError.d.ts +9 -0
- package/dist/types/errors/index.d.ts +1 -0
- package/dist/types/in-memory/InMemoryEventStorage.d.ts +24 -0
- package/dist/types/in-memory/InMemoryLock.d.ts +23 -0
- package/dist/types/in-memory/InMemoryMessageBus.d.ts +45 -0
- package/dist/types/in-memory/InMemorySnapshotStorage.d.ts +37 -0
- package/dist/types/in-memory/InMemoryView.d.ts +53 -0
- package/dist/types/in-memory/index.d.ts +5 -0
- package/dist/types/in-memory/utils/index.d.ts +1 -0
- package/dist/types/in-memory/utils/nextCycle.d.ts +4 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/interfaces/IAggregate.d.ts +78 -0
- package/dist/types/interfaces/IAggregateSnapshotStorage.d.ts +8 -0
- package/dist/types/interfaces/ICommand.d.ts +2 -0
- package/dist/types/interfaces/ICommandBus.d.ts +15 -0
- package/dist/types/interfaces/IContainer.d.ts +37 -0
- package/dist/types/interfaces/IDispatchPipelineProcessor.d.ts +29 -0
- package/dist/types/interfaces/IEvent.d.ts +7 -0
- package/dist/types/interfaces/IEventBus.d.ts +6 -0
- package/dist/types/interfaces/IEventDispatcher.d.ts +6 -0
- package/dist/types/interfaces/IEventLocker.d.ts +28 -0
- package/dist/types/interfaces/IEventReceptor.d.ts +5 -0
- package/dist/types/interfaces/IEventSet.d.ts +3 -0
- package/dist/types/interfaces/IEventStorageReader.d.ts +48 -0
- package/dist/types/interfaces/IEventStore.d.ts +9 -0
- package/dist/types/interfaces/IEventStream.d.ts +2 -0
- package/dist/types/interfaces/IIdentifierProvider.d.ts +10 -0
- package/dist/types/interfaces/ILocker.d.ts +8 -0
- package/dist/types/interfaces/ILogger.d.ts +22 -0
- package/dist/types/interfaces/IMessage.d.ts +23 -0
- package/dist/types/interfaces/IMutableState.d.ts +14 -0
- package/dist/types/interfaces/IObjectStorage.d.ts +8 -0
- package/dist/types/interfaces/IObservable.d.ts +15 -0
- package/dist/types/interfaces/IObservableQueueProvider.d.ts +8 -0
- package/dist/types/interfaces/IObserver.d.ts +4 -0
- package/dist/types/interfaces/IProjection.d.ts +17 -0
- package/dist/types/interfaces/ISaga.d.ts +38 -0
- package/dist/types/interfaces/ISnapshotEvent.d.ts +7 -0
- package/dist/types/interfaces/IViewLocker.d.ts +34 -0
- package/dist/types/interfaces/Identifier.d.ts +1 -0
- package/dist/types/interfaces/index.d.ts +29 -0
- package/dist/types/interfaces/isObject.d.ts +1 -0
- package/dist/types/rabbitmq/IContainer.d.ts +19 -0
- package/dist/types/rabbitmq/RabbitMqCommandBus.d.ts +38 -0
- package/dist/types/rabbitmq/RabbitMqEventBus.d.ts +44 -0
- package/dist/types/rabbitmq/RabbitMqGateway.d.ts +133 -0
- package/dist/types/rabbitmq/index.d.ts +4 -0
- package/dist/types/rabbitmq/utils/index.d.ts +2 -0
- package/dist/types/rabbitmq/utils/registerExitCleanup.d.ts +10 -0
- package/dist/types/rabbitmq/utils/resolveProvider.d.ts +3 -0
- package/dist/types/sqlite/AbstractSqliteAccessor.d.ts +25 -0
- package/dist/types/sqlite/AbstractSqliteObjectProjection.d.ts +8 -0
- package/dist/types/sqlite/AbstractSqliteView.d.ts +23 -0
- package/dist/types/sqlite/IContainer.d.ts +7 -0
- package/dist/types/sqlite/SqliteEventLocker.d.ts +30 -0
- package/dist/types/sqlite/SqliteObjectStorage.d.ts +17 -0
- package/dist/types/sqlite/SqliteObjectView.d.ts +19 -0
- package/dist/types/sqlite/SqliteProjectionDataParams.d.ts +14 -0
- package/dist/types/sqlite/SqliteViewLocker.d.ts +31 -0
- package/dist/types/sqlite/index.d.ts +9 -0
- package/dist/types/sqlite/queries/eventLockTableInit.d.ts +1 -0
- package/dist/types/sqlite/queries/index.d.ts +2 -0
- package/dist/types/sqlite/queries/viewLockTableInit.d.ts +1 -0
- package/dist/types/sqlite/utils/getEventId.d.ts +5 -0
- package/dist/types/sqlite/utils/guid.d.ts +4 -0
- package/dist/types/sqlite/utils/index.d.ts +2 -0
- package/dist/types/utils/Deferred.d.ts +13 -0
- package/dist/types/utils/Lock.d.ts +30 -0
- package/dist/types/utils/MapAssertable.d.ts +11 -0
- package/dist/types/utils/assert.d.ts +20 -0
- package/dist/types/utils/clone.d.ts +1 -0
- package/dist/types/utils/extractErrorDetails.d.ts +8 -0
- package/dist/types/utils/getClassName.d.ts +4 -0
- package/dist/types/utils/getHandler.d.ts +7 -0
- package/dist/types/utils/getMessageHandlerNames.d.ts +12 -0
- package/dist/types/utils/index.d.ts +14 -0
- package/dist/types/utils/isClass.d.ts +1 -0
- package/dist/types/utils/sagaId.d.ts +6 -0
- package/dist/types/utils/setupOneTimeEmitterSubscription.d.ts +12 -0
- package/dist/types/utils/subscribe.d.ts +9 -0
- package/dist/types/utils/validateHandlers.d.ts +4 -0
- package/dist/types/workers/AbstractWorkerProjection.d.ts +25 -0
- package/dist/types/workers/WorkerProxyProjection.d.ts +25 -0
- package/dist/types/workers/index.d.ts +3 -0
- package/dist/types/workers/interfaces/IProxyProjection.d.ts +15 -0
- package/dist/types/workers/interfaces/IWorkerProjection.d.ts +19 -0
- package/dist/types/workers/interfaces/index.d.ts +2 -0
- package/dist/types/workers/protocol.d.ts +10 -0
- package/dist/types/workers/utils/ProjectionView.d.ts +2 -0
- package/dist/types/workers/utils/createWorker.d.ts +10 -0
- package/dist/types/workers/utils/createWorkerInstance.d.ts +11 -0
- package/dist/types/workers/utils/index.d.ts +5 -0
- package/dist/types/workers/utils/nodeEndpoint.d.ts +2 -0
- package/dist/types/workers/utils/workerProxyFactory.d.ts +14 -0
- package/package.json +129 -29
- package/jsconfig.json +0 -15
- package/src/AbstractAggregate.js +0 -277
- package/src/AbstractProjection.js +0 -192
- package/src/AbstractSaga.js +0 -171
- package/src/AggregateCommandHandler.js +0 -126
- package/src/CommandBus.js +0 -91
- package/src/CqrsContainerBuilder.js +0 -131
- package/src/EventStore.js +0 -457
- package/src/EventStream.js +0 -63
- package/src/SagaEventHandler.js +0 -141
- package/src/index.js +0 -21
- package/src/infrastructure/InMemoryEventStorage.js +0 -76
- package/src/infrastructure/InMemoryMessageBus.js +0 -132
- package/src/infrastructure/InMemorySnapshotStorage.js +0 -40
- package/src/infrastructure/InMemoryView.js +0 -265
- package/src/subscribe.js +0 -48
- package/src/utils/getClassName.js +0 -11
- package/src/utils/getHandledMessageTypes.js +0 -24
- package/src/utils/getHandler.js +0 -21
- package/src/utils/getMessageHandlerNames.js +0 -51
- package/src/utils/index.js +0 -6
- package/src/utils/isClass.js +0 -6
- package/src/utils/nullLogger.js +0 -8
- package/src/utils/validateHandlers.js +0 -25
- package/types/index.d.ts +0 -16
- package/types/interfaces/IAggregate.d.ts +0 -30
- package/types/interfaces/IAggregateSnapshotStorage.d.ts +0 -4
- package/types/interfaces/ICommandBus.d.ts +0 -6
- package/types/interfaces/ICommandHandler.d.ts +0 -3
- package/types/interfaces/IConcurrentView.d.ts +0 -22
- package/types/interfaces/IEventReceptor.d.ts +0 -3
- package/types/interfaces/IEventStorage.d.ts +0 -20
- package/types/interfaces/IEventStore.d.ts +0 -18
- package/types/interfaces/IEventStream.d.ts +0 -13
- package/types/interfaces/ILogger.d.ts +0 -3
- package/types/interfaces/IMessageBus.d.ts +0 -5
- package/types/interfaces/IObserver.d.ts +0 -11
- package/types/interfaces/IProjection.d.ts +0 -10
- package/types/interfaces/ISaga.d.ts +0 -27
- package/types/interfaces/Identifier.d.ts +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type SqliteProjectionDataParams = {
|
|
2
|
+
/**
|
|
3
|
+
* Unique identifier for the projection, used with the schema version to distinguish data ownership.
|
|
4
|
+
*/
|
|
5
|
+
projectionName: string;
|
|
6
|
+
/**
|
|
7
|
+
* The version of the schema used for data produced by the projection.
|
|
8
|
+
* When the projection's output format changes, this version should be incremented.
|
|
9
|
+
* A version change indicates that previously stored data is obsolete and must be rebuilt.
|
|
10
|
+
*
|
|
11
|
+
* @example "20250519", "1.0.0"
|
|
12
|
+
*/
|
|
13
|
+
schemaVersion: string;
|
|
14
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Database } from 'better-sqlite3';
|
|
2
|
+
import type { IContainer } from 'node-cqrs';
|
|
3
|
+
import type { IViewLocker } from '../interfaces/index.ts';
|
|
4
|
+
import type { SqliteProjectionDataParams } from './SqliteProjectionDataParams.ts';
|
|
5
|
+
import { AbstractSqliteAccessor } from './AbstractSqliteAccessor.ts';
|
|
6
|
+
export type SqliteViewLockerParams = SqliteProjectionDataParams & {
|
|
7
|
+
/**
|
|
8
|
+
* (Optional) SQLite table name where event locks along with the latest event are stored
|
|
9
|
+
*
|
|
10
|
+
* @default "tbl_view_lock"
|
|
11
|
+
*/
|
|
12
|
+
viewLockTableName?: string;
|
|
13
|
+
/**
|
|
14
|
+
* (Optional) Time-to-live (TTL) duration (in milliseconds) for which a view remains locked
|
|
15
|
+
*
|
|
16
|
+
* @default 120_000
|
|
17
|
+
*/
|
|
18
|
+
viewLockTtl?: number;
|
|
19
|
+
};
|
|
20
|
+
export declare class SqliteViewLocker extends AbstractSqliteAccessor implements IViewLocker {
|
|
21
|
+
#private;
|
|
22
|
+
constructor(o: Partial<Pick<IContainer, 'viewModelSqliteDb' | 'viewModelSqliteDbFactory' | 'logger'>> & SqliteViewLockerParams);
|
|
23
|
+
protected initialize(db: Database): void;
|
|
24
|
+
get ready(): boolean;
|
|
25
|
+
lock(): Promise<boolean>;
|
|
26
|
+
private scheduleLockProlongation;
|
|
27
|
+
private cancelLockProlongation;
|
|
28
|
+
private prolongLock;
|
|
29
|
+
unlock(): Promise<void>;
|
|
30
|
+
once(event: 'ready'): Promise<void>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import './IContainer.ts';
|
|
2
|
+
export * from './AbstractSqliteAccessor.ts';
|
|
3
|
+
export * from './AbstractSqliteObjectProjection.ts';
|
|
4
|
+
export * from './AbstractSqliteView.ts';
|
|
5
|
+
export * from './SqliteEventLocker.ts';
|
|
6
|
+
export * from './SqliteObjectStorage.ts';
|
|
7
|
+
export * from './SqliteObjectView.ts';
|
|
8
|
+
export * from './SqliteViewLocker.ts';
|
|
9
|
+
export * from './utils/index.ts';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const eventLockTableInit: (eventLockTableName: string) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const viewLockTableInit: (viewLockTableName: string) => string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deferred promise that must be resolved from outside
|
|
3
|
+
*/
|
|
4
|
+
export declare class Deferred<TDeferredValue> {
|
|
5
|
+
#private;
|
|
6
|
+
readonly promise: Promise<TDeferredValue | void>;
|
|
7
|
+
get resolved(): boolean;
|
|
8
|
+
get rejected(): boolean;
|
|
9
|
+
get settled(): boolean;
|
|
10
|
+
constructor();
|
|
11
|
+
resolve(value?: TDeferredValue): void;
|
|
12
|
+
reject(reason?: any): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ILocker, ILockerLease } from '../interfaces/ILocker.ts';
|
|
2
|
+
export declare class LockLease implements ILockerLease {
|
|
3
|
+
readonly lock: Lock;
|
|
4
|
+
readonly name?: string;
|
|
5
|
+
constructor(lock: Lock, name?: string);
|
|
6
|
+
release(): void;
|
|
7
|
+
[Symbol.dispose](): void;
|
|
8
|
+
}
|
|
9
|
+
export declare class Lock implements ILocker {
|
|
10
|
+
#private;
|
|
11
|
+
isLocked(name?: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Acquire named or global lock
|
|
14
|
+
*
|
|
15
|
+
* @returns Promise that resolves once lock is acquired
|
|
16
|
+
*/
|
|
17
|
+
acquire(name?: string): Promise<LockLease>;
|
|
18
|
+
/**
|
|
19
|
+
* @returns Promise that resolves once lock is released
|
|
20
|
+
*/
|
|
21
|
+
waitForUnlock(name?: string): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Release named or global lock
|
|
24
|
+
*/
|
|
25
|
+
release(name?: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Execute callback with lock acquired, then release lock
|
|
28
|
+
*/
|
|
29
|
+
runExclusively<T>(name: string | undefined, callback: () => Promise<T> | T): Promise<T>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare class MapAssertable<K, V> extends Map<K, V> {
|
|
2
|
+
#private;
|
|
3
|
+
/**
|
|
4
|
+
* Ensures the key exists in the map, creating it with the factory if needed, and increments its usage counter.
|
|
5
|
+
*/
|
|
6
|
+
assert(key: K, factory: () => V): V;
|
|
7
|
+
/**
|
|
8
|
+
* Decrements the usage counter for the key and removes it from the map if no longer used.
|
|
9
|
+
*/
|
|
10
|
+
release(key: K): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type IMessage } from '../interfaces/IMessage.ts';
|
|
2
|
+
import { type IEvent } from '../interfaces/IEvent.ts';
|
|
3
|
+
import { type ISnapshotEvent } from '../interfaces/ISnapshotEvent.ts';
|
|
4
|
+
import { type IObservable } from '../interfaces/IObservable.ts';
|
|
5
|
+
export declare function assertDefined<T>(value: T, argName: string): asserts value is NonNullable<T>;
|
|
6
|
+
export declare function assertString(value: unknown, argName: string): asserts value is string;
|
|
7
|
+
export declare function assertFunction(value: unknown, argName: string): asserts value is Function;
|
|
8
|
+
export declare function assertObject(value: unknown, argName: string): asserts value is object;
|
|
9
|
+
export declare function assertArray(value: unknown, argName: string): asserts value is unknown[];
|
|
10
|
+
export declare function assertStringArray(value: unknown, argName: string): asserts value is string[];
|
|
11
|
+
export declare function assertOptionalArray(value: unknown, argName: string): asserts value is unknown[];
|
|
12
|
+
export declare function assertMessage(value: unknown, argName: string): asserts value is IMessage;
|
|
13
|
+
export declare function assertEvent(value: unknown, argName: string): asserts value is IEvent;
|
|
14
|
+
export declare function assertSnapshotEvent(value: unknown, argName: string): asserts value is ISnapshotEvent;
|
|
15
|
+
export declare function assertObservable(value: unknown, argName: string): asserts value is IObservable;
|
|
16
|
+
export declare function assertNumber(value: unknown, argName: string): asserts value is number;
|
|
17
|
+
export declare function assertClass(value: unknown, argName: string): asserts value is new (...args: any[]) => any;
|
|
18
|
+
export declare function assertNonNegativeInteger(value: unknown, argName: string): asserts value is number;
|
|
19
|
+
export declare function assertBoolean(value: unknown, argName: string): asserts value is boolean;
|
|
20
|
+
export declare function assertNotDefined(value: unknown, argName: string): asserts value is undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function clone<T>(value: T): T;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IMessageHandler } from '../interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Gets a handler for a specific message type, prefers a public (w\o _ prefix) method, if available
|
|
4
|
+
*/
|
|
5
|
+
export declare function getHandler(context: {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}, messageType: string): IMessageHandler | null;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type ObserverConstructor<T extends object> = abstract new (...args: any[]) => T;
|
|
2
|
+
/**
|
|
3
|
+
* Get message handler names from an observer instance.
|
|
4
|
+
* Assumes private method names start with underscore (`_`).
|
|
5
|
+
*/
|
|
6
|
+
export declare function getMessageHandlerNames<T extends object>(observerInstance: T): Extract<keyof T, string>[];
|
|
7
|
+
/**
|
|
8
|
+
* Get message handler names from an observer class constructor.
|
|
9
|
+
* Assumes private method names start with underscore (`_`).
|
|
10
|
+
*/
|
|
11
|
+
export declare function getMessageHandlerNames<T extends object>(observerClass: ObserverConstructor<T>): Extract<keyof T, string>[];
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from './assert.ts';
|
|
2
|
+
export * from './clone.ts';
|
|
3
|
+
export * from './Deferred.ts';
|
|
4
|
+
export * from './extractErrorDetails.ts';
|
|
5
|
+
export * from './getClassName.ts';
|
|
6
|
+
export * from './getHandler.ts';
|
|
7
|
+
export * from './getMessageHandlerNames.ts';
|
|
8
|
+
export * from './isClass.ts';
|
|
9
|
+
export * from './Lock.ts';
|
|
10
|
+
export * from './MapAssertable.ts';
|
|
11
|
+
export * from './setupOneTimeEmitterSubscription.ts';
|
|
12
|
+
export * from './sagaId.ts';
|
|
13
|
+
export * from './subscribe.ts';
|
|
14
|
+
export * from './validateHandlers.ts';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isClass(func: unknown): func is new (...args: any[]) => any;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Identifier } from '../interfaces/Identifier.ts';
|
|
2
|
+
export declare const makeSagaId: (sagaDescriptor: string, originEventId: string) => string;
|
|
3
|
+
export declare const parseSagaId: (sagaId: Identifier) => {
|
|
4
|
+
sagaDescriptor: string;
|
|
5
|
+
originEventId: string;
|
|
6
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IEvent, ILogger, IObservable } from '../interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Create one-time eventEmitter subscription for one or multiple events that match a filter
|
|
4
|
+
*
|
|
5
|
+
* @param {IObservable} emitter
|
|
6
|
+
* @param {string[]} messageTypes Array of event type to subscribe to
|
|
7
|
+
* @param {function(IEvent):any} [handler] Optional handler to execute for a first event received
|
|
8
|
+
* @param {function(IEvent):boolean} [filter] Optional filter to apply before executing a handler
|
|
9
|
+
* @param {ILogger} logger
|
|
10
|
+
* @return {Promise<IEvent>} Resolves to first event that passes filter
|
|
11
|
+
*/
|
|
12
|
+
export declare function setupOneTimeEmitterSubscription(emitter: IObservable, messageTypes: string[], filter?: (e: IEvent) => boolean, handler?: (e: IEvent) => void, logger?: ILogger): Promise<IEvent>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type IMessageHandler, type IObservable } from '../interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Subscribe observer to observable
|
|
4
|
+
*/
|
|
5
|
+
export declare function subscribe(observable: IObservable, observer: object, options?: {
|
|
6
|
+
messageTypes?: string[];
|
|
7
|
+
masterHandler?: IMessageHandler;
|
|
8
|
+
queueName?: string;
|
|
9
|
+
}): void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AbstractProjection } from '../AbstractProjection.ts';
|
|
2
|
+
import { type ProjectionView } from './utils/index.ts';
|
|
3
|
+
import type { IWorkerProjection, IWorkerProjectionType } from './interfaces/index.ts';
|
|
4
|
+
import type { IContainer, IEvent } from '../interfaces/index.ts';
|
|
5
|
+
/**
|
|
6
|
+
* Projection base class that can run projection handlers and the associated view in a worker thread
|
|
7
|
+
* to isolate CPU-heavy work and keep the main thread responsive
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class AbstractWorkerProjection<TView> extends AbstractProjection<TView> implements IWorkerProjection<TView> {
|
|
10
|
+
/**
|
|
11
|
+
* In a worker thread, creates and exposes the projection singleton.
|
|
12
|
+
*/
|
|
13
|
+
static createInstanceInWorkerThread<V, T extends AbstractWorkerProjection<V>>(this: new () => T, factory?: () => T): T | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a factory that returns a `WorkerProxyProjection` for this projection type.
|
|
16
|
+
* Use it in the main thread (for example, `builder.registerProjection(MyProjection.workerProxyFactory)`),
|
|
17
|
+
* so events are proxied to the worker instance while exposing the remote view API.
|
|
18
|
+
*/
|
|
19
|
+
static workerProxyFactory<TProjection extends IWorkerProjection<any>, TContainer extends IContainer = IContainer, TView = ProjectionView<TProjection>>(this: IWorkerProjectionType<TView, TProjection>, container?: TContainer): import("./WorkerProxyProjection.ts").WorkerProxyProjection<TView, TProjection>;
|
|
20
|
+
static get workerModulePath(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Returns the last projected event if the view implements IEventLocker, otherwise undefined.
|
|
23
|
+
*/
|
|
24
|
+
getLastProjectedEvent(): Promise<IEvent | undefined>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IEvent, IEventStorageReader, IEventStore, IExtendableLogger, ILogger } from '../interfaces/index.ts';
|
|
2
|
+
import type { IProxyProjection, IWorkerProjection, ProxyProjectionParams } from './interfaces/index.ts';
|
|
3
|
+
import * as Comlink from 'comlink';
|
|
4
|
+
/**
|
|
5
|
+
* Projection being automatically created in the main thread to proxy events
|
|
6
|
+
* and view calls to AbstractWorkerThreadProjection instance
|
|
7
|
+
*/
|
|
8
|
+
export declare class WorkerProxyProjection<TView, TProjection extends IWorkerProjection<TView> = IWorkerProjection<TView>> implements IProxyProjection<TView> {
|
|
9
|
+
#private;
|
|
10
|
+
get remoteProjection(): Comlink.Remote<TProjection>;
|
|
11
|
+
get view(): Comlink.Remote<TView>;
|
|
12
|
+
constructor({ workerModulePath, messageTypes, logger }: ProxyProjectionParams & {
|
|
13
|
+
logger?: IExtendableLogger | ILogger;
|
|
14
|
+
});
|
|
15
|
+
subscribe(eventStore: IEventStore): void;
|
|
16
|
+
restore(eventStore: IEventStorageReader): Promise<void>;
|
|
17
|
+
/** Restore view state from not-yet-projected events */
|
|
18
|
+
protected _restore(eventStore: IEventStorageReader): Promise<void>;
|
|
19
|
+
protected _onWorkerError: (error: unknown) => void;
|
|
20
|
+
protected _onWorkerExit: (exitCode: number) => void;
|
|
21
|
+
ensureWorkerReady(): Promise<void>;
|
|
22
|
+
project(event: IEvent): Promise<void>;
|
|
23
|
+
protected _project(event: IEvent): Promise<void>;
|
|
24
|
+
dispose(): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type * as Comlink from 'comlink';
|
|
2
|
+
import type { IProjection } from '../../interfaces/index.js';
|
|
3
|
+
export type ProxyProjectionParams = {
|
|
4
|
+
/**
|
|
5
|
+
* Required in the main thread to spawn a worker (derived projection module path).
|
|
6
|
+
* Not used in the worker thread.
|
|
7
|
+
*/
|
|
8
|
+
workerModulePath: string;
|
|
9
|
+
messageTypes: string[];
|
|
10
|
+
};
|
|
11
|
+
export interface IProxyProjection<TView> extends IProjection<Comlink.Remote<TView>> {
|
|
12
|
+
}
|
|
13
|
+
export interface IProxyProjectionType<TView, TProxyProjection extends IProxyProjection<TView> = IProxyProjection<TView>> {
|
|
14
|
+
new (params: ProxyProjectionParams): TProxyProjection;
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IEvent, IProjection } from '../../interfaces/index.js';
|
|
2
|
+
export interface IWorkerProjection<TView> extends IProjection<TView> {
|
|
3
|
+
/**
|
|
4
|
+
* Returns the last projected event, if event-locking state is available.
|
|
5
|
+
*/
|
|
6
|
+
getLastProjectedEvent(): Promise<IEvent | undefined>;
|
|
7
|
+
/**
|
|
8
|
+
* Projects an event without waiting for view lock readiness.
|
|
9
|
+
*
|
|
10
|
+
* Implemented by AbstractWorkerProjection and used by worker RPC wiring
|
|
11
|
+
* for restore and direct projection paths.
|
|
12
|
+
*/
|
|
13
|
+
_project(event: IEvent): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface IWorkerProjectionType<TView, TProjection extends IWorkerProjection<TView> = IWorkerProjection<TView>> {
|
|
16
|
+
new (): TProjection;
|
|
17
|
+
readonly workerModulePath: string;
|
|
18
|
+
readonly handles: string[];
|
|
19
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MessagePort } from 'node:worker_threads';
|
|
2
|
+
export interface IWorkerData {
|
|
3
|
+
projectionPort: MessagePort;
|
|
4
|
+
viewPort: MessagePort;
|
|
5
|
+
}
|
|
6
|
+
export declare const isWorkerData: (obj: unknown) => obj is IWorkerData;
|
|
7
|
+
export type WorkerInitMessage = {
|
|
8
|
+
type: 'ready';
|
|
9
|
+
};
|
|
10
|
+
export declare const isWorkerInitMessage: (msg: unknown) => msg is WorkerInitMessage;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Worker } from 'node:worker_threads';
|
|
2
|
+
import { type IWorkerData } from '../protocol.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Create a worker instance, await a handshake or a failure
|
|
5
|
+
*
|
|
6
|
+
* @param workerModulePath - Path to worker module
|
|
7
|
+
* @param ports - Container with MessagePorts for communication with worker projection and view instances
|
|
8
|
+
* @returns Worker instance
|
|
9
|
+
*/
|
|
10
|
+
export declare function createWorker(workerModulePath: string, ports: IWorkerData): Promise<Worker>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IProjection } from '../../interfaces/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Create and expose a worker-thread projection from a projection class type.
|
|
4
|
+
* The class is instantiated inside the worker with `new ProjectionType()`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createWorkerInstance<TProjection extends IProjection<any>>(ProjectionType: new () => TProjection, projectionMethodsToWire?: readonly Extract<keyof TProjection, string>[]): TProjection;
|
|
7
|
+
/**
|
|
8
|
+
* Create and expose a worker-thread projection from a projection factory.
|
|
9
|
+
* The factory is executed inside the worker and should return the projection instance.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createWorkerInstance<TProjection extends IProjection<any>>(projectionFactory: () => TProjection, projectionMethodsToWire?: readonly Extract<keyof TProjection, string>[]): TProjection;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IContainer } from '../../interfaces/index.ts';
|
|
2
|
+
import type { IProxyProjectionType, IWorkerProjectionType, IWorkerProjection } from '../interfaces/index.ts';
|
|
3
|
+
import { WorkerProxyProjection } from '../WorkerProxyProjection.ts';
|
|
4
|
+
import type { ProjectionView } from './ProjectionView.ts';
|
|
5
|
+
/**
|
|
6
|
+
* Create a main-thread proxy factory for a worker projection type.
|
|
7
|
+
* Uses the default `WorkerProxyProjection` class for the proxy instance.
|
|
8
|
+
*/
|
|
9
|
+
export declare function workerProxyFactory<TProjection extends IWorkerProjection<any>, TContainer extends IContainer = IContainer, TView = ProjectionView<TProjection>>(WorkerProjectionType: IWorkerProjectionType<TView, TProjection>): (container?: TContainer) => WorkerProxyProjection<TView, TProjection>;
|
|
10
|
+
/**
|
|
11
|
+
* Create a main-thread proxy factory for a worker projection type using
|
|
12
|
+
* a custom proxy projection class.
|
|
13
|
+
*/
|
|
14
|
+
export declare function workerProxyFactory<TProjection extends IWorkerProjection<any>, TContainer extends IContainer = IContainer, TView = ProjectionView<TProjection>, TProxyProjectionType extends IProxyProjectionType<TView, any> = IProxyProjectionType<TView, any>>(WorkerProjectionType: IWorkerProjectionType<TView, TProjection>, ProxyProjectionType: TProxyProjectionType): (container?: TContainer) => InstanceType<TProxyProjectionType>;
|
package/package.json
CHANGED
|
@@ -1,51 +1,151 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-cqrs",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.0-beta.0",
|
|
4
|
+
"description": "TypeScript CQRS/Event Sourcing toolkit for Node.js with DI, sagas, projections, and optional Worker, RabbitMQ, and SQLite adapters",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"cqrs",
|
|
8
|
+
"event-sourcing",
|
|
9
|
+
"eventsourcing",
|
|
10
|
+
"ddd",
|
|
11
|
+
"domain-driven-design",
|
|
12
|
+
"event-store",
|
|
13
|
+
"command-bus",
|
|
14
|
+
"event-bus",
|
|
15
|
+
"projection",
|
|
16
|
+
"saga",
|
|
17
|
+
"typescript",
|
|
18
|
+
"nodejs",
|
|
19
|
+
"worker-threads",
|
|
20
|
+
"rabbitmq",
|
|
21
|
+
"sqlite"
|
|
22
|
+
],
|
|
5
23
|
"repository": {
|
|
6
24
|
"type": "git",
|
|
7
25
|
"url": "https://github.com/snatalenko/node-cqrs.git"
|
|
8
26
|
},
|
|
27
|
+
"main": "./dist/cjs/index.js",
|
|
28
|
+
"types": "./dist/types/index.d.ts",
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/types/index.d.ts",
|
|
32
|
+
"require": "./dist/cjs/index.js",
|
|
33
|
+
"import": "./dist/esm/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./workers": {
|
|
36
|
+
"types": "./dist/types/workers/index.d.ts",
|
|
37
|
+
"require": "./dist/cjs/workers/index.js",
|
|
38
|
+
"import": "./dist/esm/workers/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./rabbitmq": {
|
|
41
|
+
"types": "./dist/types/rabbitmq/index.d.ts",
|
|
42
|
+
"require": "./dist/cjs/rabbitmq/index.js",
|
|
43
|
+
"import": "./dist/esm/rabbitmq/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./sqlite": {
|
|
46
|
+
"types": "./dist/types/sqlite/index.d.ts",
|
|
47
|
+
"require": "./dist/cjs/sqlite/index.js",
|
|
48
|
+
"import": "./dist/esm/sqlite/index.js"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
9
51
|
"directories": {
|
|
10
52
|
"doc": "docs",
|
|
11
53
|
"example": "examples",
|
|
12
54
|
"test": "tests"
|
|
13
55
|
},
|
|
14
|
-
"keywords": [
|
|
15
|
-
"cqrs",
|
|
16
|
-
"eventsourcing",
|
|
17
|
-
"ddd",
|
|
18
|
-
"domain",
|
|
19
|
-
"eventstore"
|
|
20
|
-
],
|
|
21
|
-
"main": "src/index.js",
|
|
22
|
-
"types": "types/index.d.ts",
|
|
23
56
|
"engines": {
|
|
24
|
-
"node": ">=
|
|
57
|
+
"node": ">=16.0.0"
|
|
25
58
|
},
|
|
26
59
|
"scripts": {
|
|
27
|
-
"
|
|
28
|
-
"test": "
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
60
|
+
"cleanup": "rm -rf ./dist ./coverage",
|
|
61
|
+
"test": "jest",
|
|
62
|
+
"examples": "npm run example:user-domain-framework-free && npm run example:user-domain-ts && npm run example:sagas-simple && npm run example:sagas-overlaps && npm run example:user-domain-cjs && npm run example:workers-worker-projection && npm run example:browser",
|
|
63
|
+
"example:user-domain-ts": "node examples/user-domain/ts/index.ts",
|
|
64
|
+
"example:user-domain-framework-free": "node examples/user-domain/framework-free/index.ts",
|
|
65
|
+
"example:user-domain-cjs": "npm run build:cjs && node examples/user-domain/cjs/index.cjs",
|
|
66
|
+
"example:sagas-simple": "node examples/sagas/simple/index.ts",
|
|
67
|
+
"example:sagas-overlaps": "node examples/sagas/overlaps/index.ts",
|
|
68
|
+
"example:workers-worker-projection": "npm run build:cjs && node examples/workers/worker-projection/index.cjs",
|
|
69
|
+
"example:browser": "npm run build:browser && echo \"\nOpen ./examples/browser/index.html in your browser (check DevTools console)\n\"",
|
|
70
|
+
"pretest:examples": "npm run build:cjs",
|
|
71
|
+
"test:examples": "jest --roots='<rootDir>/examples'",
|
|
72
|
+
"test:coverage": "npm t -- --collect-coverage",
|
|
73
|
+
"test:rabbitmq": "jest --verbose --roots='<rootDir>/tests/integration/rabbitmq'",
|
|
74
|
+
"test:sqlite": "jest --verbose --roots='<rootDir>/tests/integration/sqlite'",
|
|
75
|
+
"pretest:workers": "npm run build:cjs",
|
|
76
|
+
"test:workers": "jest --verbose --roots='<rootDir>/tests/integration/workers'",
|
|
77
|
+
"changelog": "conventional-changelog -n ./scripts/changelog/index.cjs -r 0 > CHANGELOG.md",
|
|
78
|
+
"build:cjs": "tsc -p ./tsconfig.cjs.json && cp ./scripts/etc/cjs-package.json ./dist/cjs/package.json",
|
|
79
|
+
"build:esm": "tsc -p ./tsconfig.esm.json",
|
|
80
|
+
"build:browser:bundle-min": "rollup -c ./rollup.browser.config.mjs --environment MINIFY:true",
|
|
81
|
+
"build:browser:bundle": "rollup -c ./rollup.browser.config.mjs",
|
|
82
|
+
"build:browser": "npm run build:esm && npm run build:browser:bundle && npm run build:browser:bundle-min",
|
|
83
|
+
"build": "npm run build:esm && npm run build:cjs",
|
|
84
|
+
"prepare": "npm run build",
|
|
85
|
+
"preversion": "npm test",
|
|
86
|
+
"version": "./scripts/cleanup_obsolete_tags.sh v$npm_package_version && npm run changelog && git add CHANGELOG.md",
|
|
87
|
+
"lint": "eslint"
|
|
36
88
|
},
|
|
37
89
|
"author": "@snatalenko",
|
|
38
|
-
"license": "
|
|
90
|
+
"license": "Apache-2.0",
|
|
39
91
|
"homepage": "https://github.com/snatalenko/node-cqrs#readme",
|
|
92
|
+
"files": [
|
|
93
|
+
"dist/**",
|
|
94
|
+
"!dist/.tsbuildinfo*",
|
|
95
|
+
"README.md",
|
|
96
|
+
"LICENSE",
|
|
97
|
+
"NOTICE",
|
|
98
|
+
"CHANGELOG.md"
|
|
99
|
+
],
|
|
40
100
|
"dependencies": {
|
|
41
|
-
"
|
|
101
|
+
"async-iterable-buffer": "^1.1.0",
|
|
102
|
+
"async-parallel-pipe": "^1.0.2",
|
|
103
|
+
"di0": "^1.3.0"
|
|
42
104
|
},
|
|
43
105
|
"devDependencies": {
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
106
|
+
"@rollup/plugin-commonjs": "^29.0.2",
|
|
107
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
108
|
+
"@rollup/plugin-terser": "^1.0.0",
|
|
109
|
+
"@types/amqplib": "^0.10.8",
|
|
110
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
111
|
+
"@types/jest": "^29.5.14",
|
|
112
|
+
"@types/md5": "^2.3.6",
|
|
113
|
+
"@types/node": "^25.5.0",
|
|
114
|
+
"@typescript-eslint/eslint-plugin": "^8.29.0",
|
|
115
|
+
"@typescript-eslint/parser": "^8.29.0",
|
|
116
|
+
"amqplib": "^0.10.9",
|
|
117
|
+
"better-sqlite3": "^12.6.2",
|
|
118
|
+
"comlink": "^4.4.2",
|
|
119
|
+
"conventional-changelog": "^3.1.25",
|
|
120
|
+
"eslint": "^9.39.4",
|
|
121
|
+
"eslint-plugin-jest": "^28.14.0",
|
|
122
|
+
"globals": "^17.4.0",
|
|
123
|
+
"jest": "^29.7.0",
|
|
124
|
+
"md5": "^2.3.0",
|
|
125
|
+
"rollup": "^4.59.0",
|
|
126
|
+
"ts-jest": "^29.4.6",
|
|
127
|
+
"ts-node": "^10.9.2",
|
|
128
|
+
"typescript": "^5.9.3",
|
|
129
|
+
"typescript-eslint": "^8.57.0"
|
|
130
|
+
},
|
|
131
|
+
"peerDependencies": {
|
|
132
|
+
"amqplib": "^0.10.9",
|
|
133
|
+
"better-sqlite3": "^12.6.2",
|
|
134
|
+
"comlink": "^4.4.2",
|
|
135
|
+
"md5": "^2.3.0"
|
|
136
|
+
},
|
|
137
|
+
"peerDependenciesMeta": {
|
|
138
|
+
"better-sqlite3": {
|
|
139
|
+
"optional": true
|
|
140
|
+
},
|
|
141
|
+
"amqplib": {
|
|
142
|
+
"optional": true
|
|
143
|
+
},
|
|
144
|
+
"comlink": {
|
|
145
|
+
"optional": true
|
|
146
|
+
},
|
|
147
|
+
"md5": {
|
|
148
|
+
"optional": true
|
|
149
|
+
}
|
|
50
150
|
}
|
|
51
151
|
}
|
package/jsconfig.json
DELETED