node-cqrs 1.0.0 → 1.1.0-alpha.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 +30 -1
- package/README.md +115 -101
- package/dist/cjs/AbstractProjection.js +43 -18
- package/dist/cjs/AbstractProjection.js.map +1 -1
- package/dist/cjs/AggregateCommandHandler.js +27 -13
- package/dist/cjs/AggregateCommandHandler.js.map +1 -1
- package/dist/cjs/CqrsContainerBuilder.js +6 -1
- package/dist/cjs/CqrsContainerBuilder.js.map +1 -1
- package/dist/cjs/EventDispatchPipeline.js +12 -2
- package/dist/cjs/EventDispatchPipeline.js.map +1 -1
- package/dist/cjs/EventDispatcher.js +39 -10
- package/dist/cjs/EventDispatcher.js.map +1 -1
- package/dist/cjs/EventStore.js +7 -2
- package/dist/cjs/EventStore.js.map +1 -1
- package/dist/cjs/SagaEventHandler.js +54 -40
- package/dist/cjs/SagaEventHandler.js.map +1 -1
- package/dist/cjs/in-memory/InMemoryEventStorage.js +39 -24
- package/dist/cjs/in-memory/InMemoryEventStorage.js.map +1 -1
- package/dist/cjs/in-memory/InMemoryMessageBus.js +11 -5
- package/dist/cjs/in-memory/InMemoryMessageBus.js.map +1 -1
- package/dist/cjs/interfaces/IDispatchPipelineProcessor.js.map +1 -1
- package/dist/cjs/interfaces/IMessageMeta.js +3 -0
- package/dist/cjs/interfaces/IMessageMeta.js.map +1 -0
- package/dist/cjs/interfaces/IObservable.js.map +1 -1
- package/dist/cjs/interfaces/index.js +1 -0
- package/dist/cjs/interfaces/index.js.map +1 -1
- package/dist/cjs/mongodb/AbstractMongoAccessor.js +51 -0
- package/dist/cjs/mongodb/AbstractMongoAccessor.js.map +1 -0
- package/dist/cjs/mongodb/AbstractMongoObjectProjection.js +26 -0
- package/dist/cjs/mongodb/AbstractMongoObjectProjection.js.map +1 -0
- package/dist/cjs/mongodb/AbstractMongoView.js +57 -0
- package/dist/cjs/mongodb/AbstractMongoView.js.map +1 -0
- package/dist/cjs/mongodb/IContainer.js +3 -0
- package/dist/cjs/mongodb/IContainer.js.map +1 -0
- package/dist/cjs/mongodb/MongoEventLocker.js +104 -0
- package/dist/cjs/mongodb/MongoEventLocker.js.map +1 -0
- package/dist/cjs/mongodb/MongoEventStorage.js +200 -0
- package/dist/cjs/mongodb/MongoEventStorage.js.map +1 -0
- package/dist/cjs/mongodb/MongoObjectStorage.js +101 -0
- package/dist/cjs/mongodb/MongoObjectStorage.js.map +1 -0
- package/dist/cjs/mongodb/MongoObjectView.js +41 -0
- package/dist/cjs/mongodb/MongoObjectView.js.map +1 -0
- package/dist/cjs/mongodb/MongoProjectionDataParams.js +3 -0
- package/dist/cjs/mongodb/MongoProjectionDataParams.js.map +1 -0
- package/dist/cjs/mongodb/MongoViewLocker.js +136 -0
- package/dist/cjs/mongodb/MongoViewLocker.js.map +1 -0
- package/dist/cjs/mongodb/index.js +28 -0
- package/dist/cjs/mongodb/index.js.map +1 -0
- package/dist/cjs/mongodb/registerExitCleanup.js +28 -0
- package/dist/cjs/mongodb/registerExitCleanup.js.map +1 -0
- package/dist/cjs/mongodb/utils/getEventId.js +14 -0
- package/dist/cjs/mongodb/utils/getEventId.js.map +1 -0
- package/dist/cjs/mongodb/utils/index.js +18 -0
- package/dist/cjs/mongodb/utils/index.js.map +1 -0
- package/dist/cjs/rabbitmq/RabbitMqCommandBus.js +21 -8
- package/dist/cjs/rabbitmq/RabbitMqCommandBus.js.map +1 -1
- package/dist/cjs/rabbitmq/RabbitMqEventBus.js +2 -2
- package/dist/cjs/rabbitmq/RabbitMqEventBus.js.map +1 -1
- package/dist/cjs/rabbitmq/RabbitMqGateway.js +89 -64
- package/dist/cjs/rabbitmq/RabbitMqGateway.js.map +1 -1
- package/dist/cjs/redis/AbstractRedisAccessor.js +51 -0
- package/dist/cjs/redis/AbstractRedisAccessor.js.map +1 -0
- package/dist/cjs/redis/AbstractRedisProjection.js +26 -0
- package/dist/cjs/redis/AbstractRedisProjection.js.map +1 -0
- package/dist/cjs/redis/IContainer.js +3 -0
- package/dist/cjs/redis/IContainer.js.map +1 -0
- package/dist/cjs/redis/RedisEventLocker.js +96 -0
- package/dist/cjs/redis/RedisEventLocker.js.map +1 -0
- package/dist/cjs/redis/RedisObjectStorage.js +125 -0
- package/dist/cjs/redis/RedisObjectStorage.js.map +1 -0
- package/dist/cjs/redis/RedisProjectionDataParams.js +3 -0
- package/dist/cjs/redis/RedisProjectionDataParams.js.map +1 -0
- package/dist/cjs/redis/RedisView.js +81 -0
- package/dist/cjs/redis/RedisView.js.map +1 -0
- package/dist/cjs/redis/RedisViewLocker.js +111 -0
- package/dist/cjs/redis/RedisViewLocker.js.map +1 -0
- package/dist/cjs/redis/index.js +30 -0
- package/dist/cjs/redis/index.js.map +1 -0
- package/dist/cjs/redis/utils/getEventId.js +14 -0
- package/dist/cjs/redis/utils/getEventId.js.map +1 -0
- package/dist/cjs/redis/utils/index.js +18 -0
- package/dist/cjs/redis/utils/index.js.map +1 -0
- package/dist/cjs/sqlite/AbstractSqliteView.js.map +1 -1
- package/dist/cjs/sqlite/SqliteEventStorage.js +215 -0
- package/dist/cjs/sqlite/SqliteEventStorage.js.map +1 -0
- package/dist/cjs/sqlite/SqliteObjectStorage.js +6 -6
- package/dist/cjs/sqlite/SqliteObjectStorage.js.map +1 -1
- package/dist/cjs/sqlite/SqliteObjectView.js.map +1 -1
- package/dist/cjs/sqlite/index.js +1 -0
- package/dist/cjs/sqlite/index.js.map +1 -1
- package/dist/cjs/sqlite/utils/bufferToGuid.js +9 -0
- package/dist/cjs/sqlite/utils/bufferToGuid.js.map +1 -0
- package/dist/cjs/sqlite/utils/getEventId.js +2 -5
- package/dist/cjs/sqlite/utils/getEventId.js.map +1 -1
- package/dist/cjs/sqlite/utils/guid.js +1 -1
- package/dist/cjs/sqlite/utils/guid.js.map +1 -1
- package/dist/cjs/sqlite/utils/index.js +1 -0
- package/dist/cjs/sqlite/utils/index.js.map +1 -1
- package/dist/cjs/telemetry/index.js +20 -0
- package/dist/cjs/telemetry/index.js.map +1 -0
- package/dist/cjs/telemetry/recordSpanError.js +19 -0
- package/dist/cjs/telemetry/recordSpanError.js.map +1 -0
- package/dist/cjs/telemetry/spanAttributes.js +26 -0
- package/dist/cjs/telemetry/spanAttributes.js.map +1 -0
- package/dist/cjs/telemetry/spanContext.js +25 -0
- package/dist/cjs/telemetry/spanContext.js.map +1 -0
- package/dist/cjs/utils/MapAssertable.js +25 -1
- package/dist/cjs/utils/MapAssertable.js.map +1 -1
- package/dist/esm/AbstractProjection.js +32 -7
- package/dist/esm/AbstractProjection.js.map +1 -1
- package/dist/esm/AggregateCommandHandler.js +22 -8
- package/dist/esm/AggregateCommandHandler.js.map +1 -1
- package/dist/esm/CqrsContainerBuilder.js +6 -1
- package/dist/esm/CqrsContainerBuilder.js.map +1 -1
- package/dist/esm/EventDispatchPipeline.js +12 -2
- package/dist/esm/EventDispatchPipeline.js.map +1 -1
- package/dist/esm/EventDispatcher.js +33 -4
- package/dist/esm/EventDispatcher.js.map +1 -1
- package/dist/esm/EventStore.js +7 -2
- package/dist/esm/EventStore.js.map +1 -1
- package/dist/esm/SagaEventHandler.js +42 -28
- package/dist/esm/SagaEventHandler.js.map +1 -1
- package/dist/esm/in-memory/InMemoryEventStorage.js +25 -10
- package/dist/esm/in-memory/InMemoryEventStorage.js.map +1 -1
- package/dist/esm/in-memory/InMemoryMessageBus.js +11 -5
- package/dist/esm/in-memory/InMemoryMessageBus.js.map +1 -1
- package/dist/esm/interfaces/IDispatchPipelineProcessor.js.map +1 -1
- package/dist/esm/interfaces/IMessageMeta.js +2 -0
- package/dist/esm/interfaces/IMessageMeta.js.map +1 -0
- package/dist/esm/interfaces/IObservable.js.map +1 -1
- package/dist/esm/interfaces/index.js +1 -0
- package/dist/esm/interfaces/index.js.map +1 -1
- package/dist/esm/mongodb/AbstractMongoAccessor.js +47 -0
- package/dist/esm/mongodb/AbstractMongoAccessor.js.map +1 -0
- package/dist/esm/mongodb/AbstractMongoObjectProjection.js +22 -0
- package/dist/esm/mongodb/AbstractMongoObjectProjection.js.map +1 -0
- package/dist/esm/mongodb/AbstractMongoView.js +53 -0
- package/dist/esm/mongodb/AbstractMongoView.js.map +1 -0
- package/dist/esm/mongodb/IContainer.js +2 -0
- package/dist/esm/mongodb/IContainer.js.map +1 -0
- package/dist/esm/mongodb/MongoEventLocker.js +100 -0
- package/dist/esm/mongodb/MongoEventLocker.js.map +1 -0
- package/dist/esm/mongodb/MongoEventStorage.js +196 -0
- package/dist/esm/mongodb/MongoEventStorage.js.map +1 -0
- package/dist/esm/mongodb/MongoObjectStorage.js +97 -0
- package/dist/esm/mongodb/MongoObjectStorage.js.map +1 -0
- package/dist/esm/mongodb/MongoObjectView.js +37 -0
- package/dist/esm/mongodb/MongoObjectView.js.map +1 -0
- package/dist/esm/mongodb/MongoProjectionDataParams.js +2 -0
- package/dist/esm/mongodb/MongoProjectionDataParams.js.map +1 -0
- package/dist/esm/mongodb/MongoViewLocker.js +132 -0
- package/dist/esm/mongodb/MongoViewLocker.js.map +1 -0
- package/dist/esm/mongodb/index.js +12 -0
- package/dist/esm/mongodb/index.js.map +1 -0
- package/dist/esm/mongodb/registerExitCleanup.js +24 -0
- package/dist/esm/mongodb/registerExitCleanup.js.map +1 -0
- package/dist/esm/mongodb/utils/getEventId.js +10 -0
- package/dist/esm/mongodb/utils/getEventId.js.map +1 -0
- package/dist/esm/mongodb/utils/index.js +2 -0
- package/dist/esm/mongodb/utils/index.js.map +1 -0
- package/dist/esm/rabbitmq/RabbitMqCommandBus.js +21 -8
- package/dist/esm/rabbitmq/RabbitMqCommandBus.js.map +1 -1
- package/dist/esm/rabbitmq/RabbitMqEventBus.js +2 -2
- package/dist/esm/rabbitmq/RabbitMqEventBus.js.map +1 -1
- package/dist/esm/rabbitmq/RabbitMqGateway.js +69 -44
- package/dist/esm/rabbitmq/RabbitMqGateway.js.map +1 -1
- package/dist/esm/redis/AbstractRedisAccessor.js +47 -0
- package/dist/esm/redis/AbstractRedisAccessor.js.map +1 -0
- package/dist/esm/redis/AbstractRedisProjection.js +22 -0
- package/dist/esm/redis/AbstractRedisProjection.js.map +1 -0
- package/dist/esm/redis/IContainer.js +2 -0
- package/dist/esm/redis/IContainer.js.map +1 -0
- package/dist/esm/redis/RedisEventLocker.js +92 -0
- package/dist/esm/redis/RedisEventLocker.js.map +1 -0
- package/dist/esm/redis/RedisObjectStorage.js +121 -0
- package/dist/esm/redis/RedisObjectStorage.js.map +1 -0
- package/dist/esm/redis/RedisProjectionDataParams.js +2 -0
- package/dist/esm/redis/RedisProjectionDataParams.js.map +1 -0
- package/dist/esm/redis/RedisView.js +77 -0
- package/dist/esm/redis/RedisView.js.map +1 -0
- package/dist/esm/redis/RedisViewLocker.js +107 -0
- package/dist/esm/redis/RedisViewLocker.js.map +1 -0
- package/dist/esm/redis/index.js +14 -0
- package/dist/esm/redis/index.js.map +1 -0
- package/dist/esm/redis/utils/getEventId.js +10 -0
- package/dist/esm/redis/utils/getEventId.js.map +1 -0
- package/dist/esm/redis/utils/index.js +2 -0
- package/dist/esm/redis/utils/index.js.map +1 -0
- package/dist/esm/sqlite/AbstractSqliteView.js.map +1 -1
- package/dist/esm/sqlite/SqliteEventStorage.js +211 -0
- package/dist/esm/sqlite/SqliteEventStorage.js.map +1 -0
- package/dist/esm/sqlite/SqliteObjectStorage.js +7 -7
- package/dist/esm/sqlite/SqliteObjectStorage.js.map +1 -1
- package/dist/esm/sqlite/SqliteObjectView.js.map +1 -1
- package/dist/esm/sqlite/index.js +1 -0
- package/dist/esm/sqlite/index.js.map +1 -1
- package/dist/esm/sqlite/utils/bufferToGuid.js +5 -0
- package/dist/esm/sqlite/utils/bufferToGuid.js.map +1 -0
- package/dist/esm/sqlite/utils/getEventId.js +2 -2
- package/dist/esm/sqlite/utils/getEventId.js.map +1 -1
- package/dist/esm/sqlite/utils/guid.js +1 -1
- package/dist/esm/sqlite/utils/guid.js.map +1 -1
- package/dist/esm/sqlite/utils/index.js +1 -0
- package/dist/esm/sqlite/utils/index.js.map +1 -1
- package/dist/esm/telemetry/index.js +4 -0
- package/dist/esm/telemetry/index.js.map +1 -0
- package/dist/esm/telemetry/recordSpanError.js +16 -0
- package/dist/esm/telemetry/recordSpanError.js.map +1 -0
- package/dist/esm/telemetry/spanAttributes.js +23 -0
- package/dist/esm/telemetry/spanAttributes.js.map +1 -0
- package/dist/esm/telemetry/spanContext.js +22 -0
- package/dist/esm/telemetry/spanContext.js.map +1 -0
- package/dist/esm/utils/MapAssertable.js +25 -1
- package/dist/esm/utils/MapAssertable.js.map +1 -1
- package/dist/types/AbstractProjection.d.ts +3 -1
- package/dist/types/AggregateCommandHandler.d.ts +3 -3
- package/dist/types/EventDispatchPipeline.d.ts +3 -1
- package/dist/types/EventDispatcher.d.ts +9 -1
- package/dist/types/EventStore.d.ts +4 -2
- package/dist/types/SagaEventHandler.d.ts +3 -3
- package/dist/types/in-memory/InMemoryEventStorage.d.ts +2 -1
- package/dist/types/in-memory/InMemoryMessageBus.d.ts +3 -3
- package/dist/types/interfaces/ICommandBus.d.ts +3 -2
- package/dist/types/interfaces/IContainer.d.ts +7 -0
- package/dist/types/interfaces/IDispatchPipelineProcessor.d.ts +2 -0
- package/dist/types/interfaces/IEventDispatcher.d.ts +3 -0
- package/dist/types/interfaces/IMessageMeta.d.ts +4 -0
- package/dist/types/interfaces/IObservable.d.ts +2 -1
- package/dist/types/interfaces/index.d.ts +1 -0
- package/dist/types/mongodb/AbstractMongoAccessor.d.ts +26 -0
- package/dist/types/mongodb/AbstractMongoObjectProjection.d.ts +8 -0
- package/dist/types/mongodb/AbstractMongoView.d.ts +25 -0
- package/dist/types/mongodb/IContainer.d.ts +11 -0
- package/dist/types/mongodb/MongoEventLocker.d.ts +47 -0
- package/dist/types/mongodb/MongoEventStorage.d.ts +27 -0
- package/dist/types/mongodb/MongoObjectStorage.d.ts +26 -0
- package/dist/types/mongodb/MongoObjectView.d.ts +16 -0
- package/dist/types/mongodb/MongoProjectionDataParams.d.ts +14 -0
- package/dist/types/mongodb/MongoViewLocker.d.ts +43 -0
- package/dist/types/mongodb/index.d.ts +11 -0
- package/dist/types/mongodb/registerExitCleanup.d.ts +10 -0
- package/dist/types/mongodb/utils/getEventId.d.ts +5 -0
- package/dist/types/mongodb/utils/index.d.ts +1 -0
- package/dist/types/rabbitmq/IContainer.d.ts +2 -2
- package/dist/types/rabbitmq/RabbitMqCommandBus.d.ts +5 -4
- package/dist/types/rabbitmq/RabbitMqEventBus.d.ts +2 -2
- package/dist/types/rabbitmq/RabbitMqGateway.d.ts +4 -4
- package/dist/types/redis/AbstractRedisAccessor.d.ts +26 -0
- package/dist/types/redis/AbstractRedisProjection.d.ts +8 -0
- package/dist/types/redis/IContainer.d.ts +7 -0
- package/dist/types/redis/RedisEventLocker.d.ts +36 -0
- package/dist/types/redis/RedisObjectStorage.d.ts +26 -0
- package/dist/types/redis/RedisProjectionDataParams.d.ts +21 -0
- package/dist/types/redis/RedisView.d.ts +33 -0
- package/dist/types/redis/RedisViewLocker.d.ts +35 -0
- package/dist/types/redis/index.d.ts +13 -0
- package/dist/types/redis/utils/getEventId.d.ts +5 -0
- package/dist/types/redis/utils/index.d.ts +1 -0
- package/dist/types/sqlite/AbstractSqliteView.d.ts +2 -2
- package/dist/types/sqlite/SqliteEventStorage.d.ts +18 -0
- package/dist/types/sqlite/SqliteObjectStorage.d.ts +7 -7
- package/dist/types/sqlite/SqliteObjectView.d.ts +7 -7
- package/dist/types/sqlite/index.d.ts +1 -0
- package/dist/types/sqlite/utils/bufferToGuid.d.ts +4 -0
- package/dist/types/sqlite/utils/getEventId.d.ts +1 -1
- package/dist/types/sqlite/utils/guid.d.ts +2 -1
- package/dist/types/sqlite/utils/index.d.ts +1 -0
- package/dist/types/telemetry/index.d.ts +3 -0
- package/dist/types/telemetry/recordSpanError.d.ts +6 -0
- package/dist/types/telemetry/spanAttributes.d.ts +14 -0
- package/dist/types/telemetry/spanContext.d.ts +12 -0
- package/dist/types/utils/MapAssertable.d.ts +8 -0
- package/package.json +43 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getEventId.js","sourceRoot":"","sources":["../../../../src/redis/utils/getEventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE;IACnD,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,EAAE,CAAC;IAEjB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/redis/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSqliteView.js","sourceRoot":"","sources":["../../../src/sqlite/AbstractSqliteView.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"AbstractSqliteView.js","sourceRoot":"","sources":["../../../src/sqlite/AbstractSqliteView.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAA+B,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAgC,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,MAAM,OAAgB,kBAAmB,SAAQ,sBAAsB;IAEnD,aAAa,CAAS;IACtB,UAAU,CAAmB;IAC7B,WAAW,CAAoB;IACxC,MAAM,CAAsB;IAEtC,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,YAAY,OAEa;QACxB,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,MAAM,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM;QACL,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,KAAc;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,YAAY;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;IACxC,CAAC;IAED,mBAAmB,CAAC,KAAkB;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,eAAe,CAAC,KAAkB;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,eAAe,CAAC,KAAkB;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CACD"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { assertString, parseSagaId } from "../utils/index.js";
|
|
3
|
+
import { ConcurrencyError } from "../errors/index.js";
|
|
4
|
+
import { AbstractSqliteAccessor } from "./AbstractSqliteAccessor.js";
|
|
5
|
+
import { guid, bufferToGuid } from "./utils/index.js";
|
|
6
|
+
function extractMeta(envelope) {
|
|
7
|
+
const { event: _event, ignoreConcurrencyError: _ignore, ...rest } = envelope;
|
|
8
|
+
if (Object.keys(rest).length === 0)
|
|
9
|
+
return null;
|
|
10
|
+
return rest;
|
|
11
|
+
}
|
|
12
|
+
export class SqliteEventStorage extends AbstractSqliteAccessor {
|
|
13
|
+
#insertEventQuery;
|
|
14
|
+
#insertSagaRefQuery;
|
|
15
|
+
#checkConcurrencyQuery;
|
|
16
|
+
#getRowidQuery;
|
|
17
|
+
#getAggregateEventsQuery;
|
|
18
|
+
#getSagaEventsQuery;
|
|
19
|
+
#getSagaRefsQuery;
|
|
20
|
+
#getEventsByTypesQuery;
|
|
21
|
+
initialize(db) {
|
|
22
|
+
db.pragma('foreign_keys = ON');
|
|
23
|
+
db.exec(`CREATE TABLE IF NOT EXISTS tbl_events (
|
|
24
|
+
id BLOB PRIMARY KEY,
|
|
25
|
+
aggregate_id BLOB,
|
|
26
|
+
aggregate_version INTEGER,
|
|
27
|
+
type TEXT NOT NULL,
|
|
28
|
+
data JSON NOT NULL,
|
|
29
|
+
meta JSON
|
|
30
|
+
)`);
|
|
31
|
+
db.exec(`CREATE TABLE IF NOT EXISTS tbl_event_sagas (
|
|
32
|
+
saga_descriptor TEXT NOT NULL,
|
|
33
|
+
origin_id BLOB NOT NULL,
|
|
34
|
+
event_id BLOB NOT NULL,
|
|
35
|
+
PRIMARY KEY (saga_descriptor, origin_id, event_id),
|
|
36
|
+
FOREIGN KEY (event_id) REFERENCES tbl_events(id)
|
|
37
|
+
)`);
|
|
38
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_events_aggregate_id ON tbl_events (aggregate_id)');
|
|
39
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_event_sagas_event_id ON tbl_event_sagas (event_id)');
|
|
40
|
+
this.#insertEventQuery = db.prepare(`
|
|
41
|
+
INSERT INTO tbl_events (id, aggregate_id, aggregate_version, type, data, meta)
|
|
42
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
43
|
+
`);
|
|
44
|
+
this.#insertSagaRefQuery = db.prepare(`
|
|
45
|
+
INSERT INTO tbl_event_sagas (saga_descriptor, origin_id, event_id)
|
|
46
|
+
VALUES (?, ?, ?)
|
|
47
|
+
`);
|
|
48
|
+
this.#checkConcurrencyQuery = db.prepare(`
|
|
49
|
+
SELECT 1 FROM tbl_events
|
|
50
|
+
WHERE aggregate_id = ? AND aggregate_version = ?
|
|
51
|
+
LIMIT 1
|
|
52
|
+
`);
|
|
53
|
+
this.#getRowidQuery = db.prepare(`
|
|
54
|
+
SELECT rowid FROM tbl_events WHERE id = ?
|
|
55
|
+
`);
|
|
56
|
+
this.#getAggregateEventsQuery = db.prepare(`
|
|
57
|
+
WITH tail AS (
|
|
58
|
+
SELECT id AS tail_id
|
|
59
|
+
FROM tbl_events
|
|
60
|
+
WHERE aggregate_id = @aggregateId
|
|
61
|
+
AND (@afterVersion IS NULL OR aggregate_version > @afterVersion)
|
|
62
|
+
ORDER BY rowid DESC
|
|
63
|
+
LIMIT 1
|
|
64
|
+
)
|
|
65
|
+
SELECT e.id, e.aggregate_id, e.aggregate_version, e.type, e.data, e.meta, e.rowid
|
|
66
|
+
FROM tbl_events e, tail
|
|
67
|
+
WHERE e.aggregate_id = @aggregateId
|
|
68
|
+
AND (@afterVersion IS NULL OR e.aggregate_version > @afterVersion)
|
|
69
|
+
AND (
|
|
70
|
+
@eventTypes IS NULL
|
|
71
|
+
OR e.type IN (SELECT value FROM json_each(@eventTypes))
|
|
72
|
+
OR (@tail = 'last' AND e.id = tail.tail_id)
|
|
73
|
+
)
|
|
74
|
+
ORDER BY e.rowid
|
|
75
|
+
`);
|
|
76
|
+
this.#getSagaEventsQuery = db.prepare(`
|
|
77
|
+
SELECT e.id, e.aggregate_id, e.aggregate_version, e.type, e.data, e.meta, e.rowid
|
|
78
|
+
FROM tbl_events e
|
|
79
|
+
LEFT JOIN tbl_event_sagas sr
|
|
80
|
+
ON sr.event_id = e.id
|
|
81
|
+
AND sr.saga_descriptor = @sagaDescriptor
|
|
82
|
+
AND sr.origin_id = @originId
|
|
83
|
+
WHERE e.rowid >= @originRowid AND e.rowid < @beforeRowid
|
|
84
|
+
AND (e.id = @originId OR sr.event_id IS NOT NULL)
|
|
85
|
+
ORDER BY e.rowid
|
|
86
|
+
`);
|
|
87
|
+
this.#getSagaRefsQuery = db.prepare(`
|
|
88
|
+
SELECT saga_descriptor, origin_id
|
|
89
|
+
FROM tbl_event_sagas
|
|
90
|
+
WHERE event_id = ?
|
|
91
|
+
`);
|
|
92
|
+
this.#getEventsByTypesQuery = db.prepare(`
|
|
93
|
+
SELECT id, aggregate_id, aggregate_version, type, data, meta, rowid
|
|
94
|
+
FROM tbl_events
|
|
95
|
+
WHERE rowid > ?
|
|
96
|
+
ORDER BY rowid
|
|
97
|
+
`);
|
|
98
|
+
}
|
|
99
|
+
// eslint-disable-next-line class-methods-use-this
|
|
100
|
+
getNewId() {
|
|
101
|
+
return randomUUID().replaceAll('-', '');
|
|
102
|
+
}
|
|
103
|
+
async commitEvents(events, options) {
|
|
104
|
+
await this.assertConnection();
|
|
105
|
+
const metaJson = options?.meta ? JSON.stringify(options.meta) : null;
|
|
106
|
+
this.db.transaction(() => {
|
|
107
|
+
for (const event of events) {
|
|
108
|
+
if (!options?.ignoreConcurrencyError && event.aggregateId && event.aggregateVersion !== undefined) {
|
|
109
|
+
const conflict = this.#checkConcurrencyQuery.get(guid(event.aggregateId), event.aggregateVersion);
|
|
110
|
+
if (conflict)
|
|
111
|
+
throw new ConcurrencyError(`Duplicate aggregateVersion ${event.aggregateVersion} for aggregate ${event.aggregateId}`);
|
|
112
|
+
}
|
|
113
|
+
const { sagaOrigins, id, ...eventData } = event;
|
|
114
|
+
assertString(id, 'event.id');
|
|
115
|
+
const eventId = guid(id);
|
|
116
|
+
this.#insertEventQuery.run(eventId, event.aggregateId !== undefined ? guid(event.aggregateId) : null, event.aggregateVersion ?? null, event.type, JSON.stringify(eventData), metaJson);
|
|
117
|
+
if (sagaOrigins) {
|
|
118
|
+
for (const [descriptor, originId] of Object.entries(sagaOrigins)) {
|
|
119
|
+
this.#insertSagaRefQuery.run(descriptor, guid(originId), eventId);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
})();
|
|
124
|
+
return events;
|
|
125
|
+
}
|
|
126
|
+
async *getAggregateEvents(aggregateId, options) {
|
|
127
|
+
await this.assertConnection();
|
|
128
|
+
const rows = this.#getAggregateEventsQuery.all({
|
|
129
|
+
aggregateId: guid(aggregateId),
|
|
130
|
+
afterVersion: options?.snapshot?.aggregateVersion ?? null,
|
|
131
|
+
eventTypes: options?.eventTypes
|
|
132
|
+
? JSON.stringify(options.eventTypes)
|
|
133
|
+
: null,
|
|
134
|
+
tail: options?.tail ?? null
|
|
135
|
+
});
|
|
136
|
+
for (const row of rows)
|
|
137
|
+
yield this.#reconstructEvent(row);
|
|
138
|
+
}
|
|
139
|
+
async *getSagaEvents(sagaId, { beforeEvent }) {
|
|
140
|
+
await this.assertConnection();
|
|
141
|
+
assertString(beforeEvent?.id, 'beforeEvent.id');
|
|
142
|
+
const { sagaDescriptor, originEventId } = parseSagaId(sagaId);
|
|
143
|
+
if (beforeEvent.sagaOrigins?.[sagaDescriptor] !== originEventId)
|
|
144
|
+
throw new TypeError('beforeEvent.sagaOrigins does not match sagaId');
|
|
145
|
+
const originRowid = this.#getRowidQuery.get(guid(originEventId));
|
|
146
|
+
if (!originRowid)
|
|
147
|
+
throw new Error(`origin event ${originEventId} not found`);
|
|
148
|
+
const beforeRowid = this.#getRowidQuery.get(guid(beforeEvent.id));
|
|
149
|
+
if (!beforeRowid)
|
|
150
|
+
throw new Error(`beforeEvent ${beforeEvent.id} not found`);
|
|
151
|
+
const rows = this.#getSagaEventsQuery.all({
|
|
152
|
+
sagaDescriptor,
|
|
153
|
+
originId: guid(originEventId),
|
|
154
|
+
originRowid: originRowid.rowid,
|
|
155
|
+
beforeRowid: beforeRowid.rowid
|
|
156
|
+
});
|
|
157
|
+
for (const row of rows)
|
|
158
|
+
yield this.#reconstructEvent(row);
|
|
159
|
+
}
|
|
160
|
+
async *getEventsByTypes(eventTypes, options) {
|
|
161
|
+
await this.assertConnection();
|
|
162
|
+
const lastEventId = options?.afterEvent?.id;
|
|
163
|
+
if (options?.afterEvent)
|
|
164
|
+
assertString(options.afterEvent.id, 'options.afterEvent.id');
|
|
165
|
+
let afterRowid = 0;
|
|
166
|
+
if (lastEventId) {
|
|
167
|
+
const row = this.#getRowidQuery.get(guid(lastEventId));
|
|
168
|
+
if (!row)
|
|
169
|
+
return;
|
|
170
|
+
afterRowid = row.rowid;
|
|
171
|
+
}
|
|
172
|
+
const rows = this.#getEventsByTypesQuery.all(afterRowid);
|
|
173
|
+
for (const row of rows) {
|
|
174
|
+
if (eventTypes.includes(row.type))
|
|
175
|
+
yield this.#reconstructEvent(row);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async process(batch) {
|
|
179
|
+
const events = [];
|
|
180
|
+
for (const item of batch) {
|
|
181
|
+
if (!item.event)
|
|
182
|
+
throw new Error('Event batch does not contain `event`');
|
|
183
|
+
events.push(item.event);
|
|
184
|
+
}
|
|
185
|
+
const meta = extractMeta(batch[0]);
|
|
186
|
+
const ignoreConcurrencyError = batch[0]?.ignoreConcurrencyError;
|
|
187
|
+
await this.commitEvents(events, { ignoreConcurrencyError, meta });
|
|
188
|
+
return batch;
|
|
189
|
+
}
|
|
190
|
+
#getSagaOriginsForEvent(eventIdBuf) {
|
|
191
|
+
const refs = this.#getSagaRefsQuery.all(eventIdBuf);
|
|
192
|
+
if (refs.length === 0)
|
|
193
|
+
return {};
|
|
194
|
+
const sagaOrigins = {};
|
|
195
|
+
for (const ref of refs)
|
|
196
|
+
sagaOrigins[ref.saga_descriptor] = bufferToGuid(ref.origin_id);
|
|
197
|
+
return sagaOrigins;
|
|
198
|
+
}
|
|
199
|
+
#reconstructEvent(row) {
|
|
200
|
+
const data = JSON.parse(row.data);
|
|
201
|
+
const sagaOrigins = this.#getSagaOriginsForEvent(row.id);
|
|
202
|
+
const event = {
|
|
203
|
+
id: bufferToGuid(row.id),
|
|
204
|
+
...data
|
|
205
|
+
};
|
|
206
|
+
if (Object.keys(sagaOrigins).length > 0)
|
|
207
|
+
event.sagaOrigins = sagaOrigins;
|
|
208
|
+
return event;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=SqliteEventStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteEventStorage.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteEventStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { guid } from "./utils/index.js";
|
|
2
2
|
import { AbstractSqliteAccessor } from "./AbstractSqliteAccessor.js";
|
|
3
|
-
import {
|
|
3
|
+
import { assertDefined, assertFunction } from "../utils/assert.js";
|
|
4
4
|
export class SqliteObjectStorage extends AbstractSqliteAccessor {
|
|
5
5
|
#tableName;
|
|
6
6
|
#getQuery;
|
|
@@ -41,7 +41,7 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
|
|
|
41
41
|
`);
|
|
42
42
|
}
|
|
43
43
|
async get(id) {
|
|
44
|
-
|
|
44
|
+
assertDefined(id, 'id');
|
|
45
45
|
await this.assertConnection();
|
|
46
46
|
const r = this.#getQuery.get(guid(id));
|
|
47
47
|
if (!r)
|
|
@@ -49,14 +49,14 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
|
|
|
49
49
|
return JSON.parse(r.data);
|
|
50
50
|
}
|
|
51
51
|
getSync(id) {
|
|
52
|
-
|
|
52
|
+
assertDefined(id, 'id');
|
|
53
53
|
const r = this.#getQuery.get(guid(id));
|
|
54
54
|
if (!r)
|
|
55
55
|
return undefined;
|
|
56
56
|
return JSON.parse(r.data);
|
|
57
57
|
}
|
|
58
58
|
async create(id, data) {
|
|
59
|
-
|
|
59
|
+
assertDefined(id, 'id');
|
|
60
60
|
await this.assertConnection();
|
|
61
61
|
this.#createSync(id, data);
|
|
62
62
|
}
|
|
@@ -66,7 +66,7 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
|
|
|
66
66
|
throw new Error(`Record '${id}' could not be created`);
|
|
67
67
|
}
|
|
68
68
|
async update(id, update) {
|
|
69
|
-
|
|
69
|
+
assertDefined(id, 'id');
|
|
70
70
|
assertFunction(update, 'update');
|
|
71
71
|
await this.assertConnection();
|
|
72
72
|
this.#updateSync(id, update);
|
|
@@ -91,7 +91,7 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
|
|
|
91
91
|
throw new Error(`Record '${id}' could not be updated`);
|
|
92
92
|
}
|
|
93
93
|
async updateEnforcingNew(id, update) {
|
|
94
|
-
|
|
94
|
+
assertDefined(id, 'id');
|
|
95
95
|
assertFunction(update, 'update');
|
|
96
96
|
await this.assertConnection();
|
|
97
97
|
const record = this.#getQuery.get(guid(id));
|
|
@@ -101,7 +101,7 @@ export class SqliteObjectStorage extends AbstractSqliteAccessor {
|
|
|
101
101
|
this.#createSync(id, update());
|
|
102
102
|
}
|
|
103
103
|
async delete(id) {
|
|
104
|
-
|
|
104
|
+
assertDefined(id, 'id');
|
|
105
105
|
await this.assertConnection();
|
|
106
106
|
const r = this.#deleteQuery.run(guid(id));
|
|
107
107
|
return r.changes === 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteObjectStorage.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteObjectStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"SqliteObjectStorage.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteObjectStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteObjectView.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteObjectView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,gBAA0B,SAAQ,kBAAkB;IAEhE,oBAAoB,CAA+B;IAEnD,YAAY,OAEX;QACA,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAClE,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAE9D,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,oBAAoB,GAAG,IAAI,mBAAmB,CAAU;YAC5D,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;YAC1D,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE;SAChE,CAAC,CAAC;IACJ,CAAC;IAED,qFAAqF;IAC3E,UAAU,CAAC,EAAY;QAChC,yEAAyE;IAC1E,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"SqliteObjectView.js","sourceRoot":"","sources":["../../../src/sqlite/SqliteObjectView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,gBAA0B,SAAQ,kBAAkB;IAEhE,oBAAoB,CAA+B;IAEnD,YAAY,OAEX;QACA,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAClE,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAE9D,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,oBAAoB,GAAG,IAAI,mBAAmB,CAAU;YAC5D,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;YAC1D,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE;SAChE,CAAC,CAAC;IACJ,CAAC;IAED,qFAAqF;IAC3E,UAAU,CAAC,EAAY;QAChC,yEAAyE;IAC1E,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAc;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK;YACd,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1B,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,EAAc;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAc,EAAE,IAAa;QACzC,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAc,EAAE,MAA+B;QAC3D,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAc,EAAE,MAAgC;QACxE,MAAM,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAc;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;CACD"}
|
package/dist/esm/sqlite/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export * from "./AbstractSqliteAccessor.js";
|
|
|
3
3
|
export * from "./AbstractSqliteObjectProjection.js";
|
|
4
4
|
export * from "./AbstractSqliteView.js";
|
|
5
5
|
export * from "./SqliteEventLocker.js";
|
|
6
|
+
export * from "./SqliteEventStorage.js";
|
|
6
7
|
export * from "./SqliteObjectStorage.js";
|
|
7
8
|
export * from "./SqliteObjectView.js";
|
|
8
9
|
export * from "./SqliteViewLocker.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AAEzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AAEzB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bufferToGuid.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/bufferToGuid.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
1
2
|
import { guid } from "./guid.js";
|
|
2
|
-
import md5 from 'md5';
|
|
3
3
|
/**
|
|
4
4
|
* Get assigned or generate new event ID from event content
|
|
5
5
|
*/
|
|
6
|
-
export const getEventId = (event) => guid(typeof event.id === 'string' ? event.id : md5(JSON.stringify(event)));
|
|
6
|
+
export const getEventId = (event) => guid(typeof event.id === 'string' ? event.id : createHash('md5').update(JSON.stringify(event)).digest('hex'));
|
|
7
7
|
//# sourceMappingURL=getEventId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEventId.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/getEventId.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getEventId.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/getEventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CACnD,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guid.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/guid.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guid.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/guid.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sqlite/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** SpanStatusCode.ERROR — inlined to avoid a runtime dependency on @opentelemetry/api */
|
|
2
|
+
const SPAN_STATUS_ERROR = 2;
|
|
3
|
+
/**
|
|
4
|
+
* Records the error on the provided span and marks the span status as ERROR.
|
|
5
|
+
* No-op when span is undefined.
|
|
6
|
+
*/
|
|
7
|
+
export function recordSpanError(span, error) {
|
|
8
|
+
if (!span)
|
|
9
|
+
return;
|
|
10
|
+
span.recordException(error);
|
|
11
|
+
span.setStatus({
|
|
12
|
+
code: SPAN_STATUS_ERROR,
|
|
13
|
+
message: error instanceof Error ? error.message : String(error)
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=recordSpanError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordSpanError.js","sourceRoot":"","sources":["../../../src/telemetry/recordSpanError.ts"],"names":[],"mappings":"AAEA,yFAAyF;AACzF,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB,EAAE,KAAc;IACrE,IAAI,CAAC,IAAI;QACR,OAAO;IAER,IAAI,CAAC,eAAe,CAAC,KAAY,CAAC,CAAC;IACnC,IAAI,CAAC,SAAS,CAAC;QACd,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const isSpanAttributeValue = (v) => typeof v === 'string'
|
|
2
|
+
|| typeof v === 'number'
|
|
3
|
+
|| typeof v === 'boolean';
|
|
4
|
+
/**
|
|
5
|
+
* Builds a `{ attributes }` object for use in `tracer.startSpan()` options,
|
|
6
|
+
* prefixing each key with `cqrs.<prefix>`.
|
|
7
|
+
* Entries with non-primitive values (not string/number/boolean) are omitted.
|
|
8
|
+
* An optional `keys` array limits which properties are included.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* tracer.startSpan('send', spanAttributes('command', cmd, ['type', 'aggregateId']), ctx)
|
|
12
|
+
*/
|
|
13
|
+
export function spanAttributes(prefix, attrs, keys = Object.keys(attrs)) {
|
|
14
|
+
const attributes = {};
|
|
15
|
+
for (const key of keys) {
|
|
16
|
+
const value = attrs[key];
|
|
17
|
+
if (!isSpanAttributeValue(value))
|
|
18
|
+
continue;
|
|
19
|
+
attributes[`cqrs.${prefix}.${String(key)}`] = value;
|
|
20
|
+
}
|
|
21
|
+
return { attributes };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=spanAttributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spanAttributes.js","sourceRoot":"","sources":["../../../src/telemetry/spanAttributes.ts"],"names":[],"mappings":"AAEA,MAAM,oBAAoB,GAAG,CAAC,CAAU,EAA2B,EAAE,CACpE,OAAO,CAAC,KAAK,QAAQ;OAClB,OAAO,CAAC,KAAK,QAAQ;OACrB,OAAO,CAAC,KAAK,SAAS,CAAC;AAE3B;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC7B,MAAc,EACd,KAAQ,EACR,OAAuB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAIzC,MAAM,UAAU,GAAuC,EAAE,CAAC;IAE1D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;YAC/B,SAAS;QAEV,UAAU,CAAC,QAAQ,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
let _api;
|
|
3
|
+
function getOtelApi() {
|
|
4
|
+
if (!_api) {
|
|
5
|
+
const _require = typeof require !== 'undefined' ? require : createRequire(`${process.cwd()}/`);
|
|
6
|
+
_api = _require('@opentelemetry/api');
|
|
7
|
+
}
|
|
8
|
+
return _api;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Returns the OTel context to use as the parent for a new span.
|
|
12
|
+
* If `meta.span` is present it is set as the active span on the current context;
|
|
13
|
+
* otherwise the current active context is returned unchanged.
|
|
14
|
+
*
|
|
15
|
+
* Imports `@opentelemetry/api` lazily so the core library has no hard runtime
|
|
16
|
+
* dependency on it — the browser bundle and environments without OTel stay lean.
|
|
17
|
+
*/
|
|
18
|
+
export function spanContext(meta) {
|
|
19
|
+
const { trace, context } = getOtelApi();
|
|
20
|
+
return meta?.span ? trace.setSpan(context.active(), meta.span) : context.active();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=spanContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spanContext.js","sourceRoot":"","sources":["../../../src/telemetry/spanContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,IAAI,IAAqD,CAAC;AAE1D,SAAS,UAAU;IAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/F,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAK,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,IAAsB;IACjD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;IACxC,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACnF,CAAC"}
|
|
@@ -1,14 +1,38 @@
|
|
|
1
1
|
export class MapAssertable extends Map {
|
|
2
2
|
#usageCounter = new Map();
|
|
3
|
+
#factories = new Map();
|
|
3
4
|
/**
|
|
4
5
|
* Ensures the key exists in the map, creating it with the factory if needed, and increments its usage counter.
|
|
5
6
|
*/
|
|
6
7
|
assert(key, factory) {
|
|
7
|
-
if (!this.has(key))
|
|
8
|
+
if (!this.has(key) && !this.#factories.has(key))
|
|
8
9
|
this.set(key, factory());
|
|
9
10
|
this.#usageCounter.set(key, (this.#usageCounter.get(key) ?? 0) + 1);
|
|
11
|
+
return this.get(key);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Stores a factory that will be called lazily on first `get()`.
|
|
15
|
+
* If the entry is released before being accessed, the factory is never invoked.
|
|
16
|
+
*/
|
|
17
|
+
setLazy(key, factory) {
|
|
18
|
+
this.delete(key);
|
|
19
|
+
this.#factories.set(key, factory);
|
|
20
|
+
}
|
|
21
|
+
get(key) {
|
|
22
|
+
const factory = this.#factories.get(key);
|
|
23
|
+
if (factory) {
|
|
24
|
+
this.#factories.delete(key);
|
|
25
|
+
this.set(key, factory());
|
|
26
|
+
}
|
|
10
27
|
return super.get(key);
|
|
11
28
|
}
|
|
29
|
+
has(key) {
|
|
30
|
+
return super.has(key) || this.#factories.has(key);
|
|
31
|
+
}
|
|
32
|
+
delete(key) {
|
|
33
|
+
this.#factories.delete(key);
|
|
34
|
+
return super.delete(key);
|
|
35
|
+
}
|
|
12
36
|
/**
|
|
13
37
|
* Decrements the usage counter for the key and removes it from the map if no longer used.
|
|
14
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapAssertable.js","sourceRoot":"","sources":["../../../src/utils/MapAssertable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MapAssertable.js","sourceRoot":"","sources":["../../../src/utils/MapAssertable.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAoB,SAAQ,GAAS;IAEjD,aAAa,GAAG,IAAI,GAAG,EAAa,CAAC;IACrC,UAAU,GAAG,IAAI,GAAG,EAAiB,CAAC;IAEtC;;OAEG;IACH,MAAM,CAAC,GAAM,EAAE,OAAgB;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAE1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,GAAM,EAAE,OAAgB;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAEQ,GAAG,CAAC,GAAM;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAEQ,GAAG,CAAC,GAAM;QAClB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAEQ,MAAM,CAAC,GAAM;QACrB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,GAAM;QACb,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;aACI,CAAC;YACL,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Tracer } from '@opentelemetry/api';
|
|
1
2
|
import { type IViewLocker, type IEventLocker, type IProjection, type ILogger, type IExtendableLogger, type IEvent, type IObservable, type IEventStorageReader } from './interfaces/index.ts';
|
|
2
3
|
export type AbstractProjectionParams<T> = {
|
|
3
4
|
/**
|
|
@@ -15,6 +16,7 @@ export type AbstractProjectionParams<T> = {
|
|
|
15
16
|
*/
|
|
16
17
|
eventLocker?: IEventLocker;
|
|
17
18
|
logger?: ILogger | IExtendableLogger;
|
|
19
|
+
tracerFactory?: (name: string) => Tracer;
|
|
18
20
|
};
|
|
19
21
|
/**
|
|
20
22
|
* Base class for Projection definition
|
|
@@ -44,7 +46,7 @@ export declare abstract class AbstractProjection<TView = any> implements IProjec
|
|
|
44
46
|
*/
|
|
45
47
|
protected get _eventLocker(): IEventLocker | null;
|
|
46
48
|
protected set _eventLocker(value: IEventLocker | undefined | null);
|
|
47
|
-
constructor({ view, viewLocker, eventLocker, logger }?: AbstractProjectionParams<TView>);
|
|
49
|
+
constructor({ view, viewLocker, eventLocker, tracerFactory, logger }?: AbstractProjectionParams<TView>);
|
|
48
50
|
/**
|
|
49
51
|
* Subscribe to event store
|
|
50
52
|
* and restore view state from not yet projected events
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IAggregate, IAggregateConstructor, IAggregateFactory, ICommand, ICommandHandler, IContainer, IEventSet, IObservable, RetryOnConcurrencyErrorOptions } from './interfaces/index.ts';
|
|
1
|
+
import type { IAggregate, IAggregateConstructor, IAggregateFactory, ICommand, ICommandHandler, IContainer, IEventSet, IMessageMeta, IObservable, RetryOnConcurrencyErrorOptions } from './interfaces/index.ts';
|
|
2
2
|
/**
|
|
3
3
|
* Aggregate command handler.
|
|
4
4
|
*
|
|
@@ -8,7 +8,7 @@ import type { IAggregate, IAggregateConstructor, IAggregateFactory, ICommand, IC
|
|
|
8
8
|
*/
|
|
9
9
|
export declare class AggregateCommandHandler<TAggregate extends IAggregate> implements ICommandHandler {
|
|
10
10
|
#private;
|
|
11
|
-
constructor({ eventStore, aggregateType, aggregateFactory, handles, executionLocker, restoresFrom, retryOnConcurrencyError, logger }: Pick<IContainer, 'eventStore' | 'executionLocker' | 'logger'> & {
|
|
11
|
+
constructor({ eventStore, aggregateType, aggregateFactory, handles, executionLocker, restoresFrom, retryOnConcurrencyError, tracerFactory, logger }: Pick<IContainer, 'eventStore' | 'executionLocker' | 'logger' | 'tracerFactory'> & {
|
|
12
12
|
aggregateType?: IAggregateConstructor<TAggregate, any>;
|
|
13
13
|
aggregateFactory?: IAggregateFactory<TAggregate, any>;
|
|
14
14
|
handles?: Readonly<string[]>;
|
|
@@ -18,5 +18,5 @@ export declare class AggregateCommandHandler<TAggregate extends IAggregate> impl
|
|
|
18
18
|
/** Subscribe to all command types handled by aggregateType */
|
|
19
19
|
subscribe(commandBus: IObservable): void;
|
|
20
20
|
/** Pass a command to corresponding aggregate */
|
|
21
|
-
execute(cmd: ICommand): Promise<IEventSet>;
|
|
21
|
+
execute(cmd: ICommand, meta?: IMessageMeta): Promise<IEventSet>;
|
|
22
22
|
}
|
|
@@ -9,8 +9,10 @@ export type EventBatchEnvelope = {
|
|
|
9
9
|
};
|
|
10
10
|
export declare class EventDispatchPipeline {
|
|
11
11
|
#private;
|
|
12
|
-
constructor(eventBus: IEventBus, concurrentLimit: number);
|
|
12
|
+
constructor(eventBus: IEventBus, concurrentLimit: number, onError?: (error: Error) => void);
|
|
13
13
|
addProcessor(preprocessor: IDispatchPipelineProcessor): void;
|
|
14
|
+
/** Get a promise that resolves when all in-flight fire-and-forget event bus publishes have settled */
|
|
15
|
+
drain(): Promise<unknown>;
|
|
14
16
|
revert(batch: DispatchPipelineBatch): Promise<void>;
|
|
15
17
|
push(envelope: EventBatchEnvelope): void;
|
|
16
18
|
}
|
|
@@ -19,12 +19,18 @@ export declare class EventDispatcher implements IEventDispatcher {
|
|
|
19
19
|
concurrentLimit: number;
|
|
20
20
|
/** Router that selects a pipeline name given events and meta */
|
|
21
21
|
eventDispatchRouter?: (events: IEventSet, meta?: Record<string, any>) => string | undefined;
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Called when a fire-and-forget event bus publish fails.
|
|
24
|
+
* If not set, publish errors are silently discarded.
|
|
25
|
+
*/
|
|
26
|
+
eventPublishErrorHandler?: (error: Error) => void;
|
|
27
|
+
constructor(o?: Pick<IContainer, 'eventBus' | 'eventDispatchPipeline' | 'tracerFactory'> & {
|
|
23
28
|
eventDispatcherConfig?: {
|
|
24
29
|
concurrentLimit?: number;
|
|
25
30
|
};
|
|
26
31
|
eventDispatchPipelines?: Record<string, IDispatchPipelineProcessor[]>;
|
|
27
32
|
eventDispatchRouter?: (events: IEventSet, meta?: Record<string, any>) => string | undefined;
|
|
33
|
+
eventPublishErrorHandler?: (error: Error) => void;
|
|
28
34
|
});
|
|
29
35
|
/** Add or create the default pipeline processors */
|
|
30
36
|
addPipelineProcessors(eventDispatchPipeline: IDispatchPipelineProcessor[], pipelineName?: string): void;
|
|
@@ -34,6 +40,8 @@ export declare class EventDispatcher implements IEventDispatcher {
|
|
|
34
40
|
addPipeline(name: string, processors?: IDispatchPipelineProcessor[], options?: {
|
|
35
41
|
concurrentLimit?: number;
|
|
36
42
|
}): EventDispatchPipeline;
|
|
43
|
+
/** Get a promise that resolves when all in-flight fire-and-forget event bus publishes have settled */
|
|
44
|
+
drain(): Promise<unknown>;
|
|
37
45
|
/** Dispatch events through a routed pipeline and publish to the shared eventBus */
|
|
38
46
|
dispatch(events: IEventSet, meta?: Record<string, any>): Promise<IEventSet>;
|
|
39
47
|
}
|