@cratis/chronicle 6.47.0 → 6.49.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/ChronicleClient.ts +3 -0
- package/EventStore.ts +10 -3
- package/IEventStore.ts +8 -0
- package/artifacts/DefaultClientArtifactsProvider.ts +5 -0
- package/artifacts/IClientArtifactsProvider.ts +3 -0
- package/connection/ChronicleConnection.ts +6 -0
- package/connection/ChronicleServices.ts +2 -0
- package/connection/ConnectionLifecycle.ts +22 -0
- package/dist/ChronicleClient.d.ts.map +1 -1
- package/dist/ChronicleClient.js +3 -0
- package/dist/ChronicleClient.js.map +1 -1
- package/dist/EventStore.d.ts +2 -0
- package/dist/EventStore.d.ts.map +1 -1
- package/dist/EventStore.js +9 -3
- package/dist/EventStore.js.map +1 -1
- package/dist/IEventStore.d.ts +7 -0
- package/dist/IEventStore.d.ts.map +1 -1
- package/dist/artifacts/DefaultClientArtifactsProvider.d.ts +2 -0
- package/dist/artifacts/DefaultClientArtifactsProvider.d.ts.map +1 -1
- package/dist/artifacts/DefaultClientArtifactsProvider.js +4 -0
- package/dist/artifacts/DefaultClientArtifactsProvider.js.map +1 -1
- package/dist/artifacts/IClientArtifactsProvider.d.ts +2 -0
- package/dist/artifacts/IClientArtifactsProvider.d.ts.map +1 -1
- package/dist/connection/ChronicleConnection.d.ts +1 -0
- package/dist/connection/ChronicleConnection.d.ts.map +1 -1
- package/dist/connection/ChronicleConnection.js +5 -1
- package/dist/connection/ChronicleConnection.js.map +1 -1
- package/dist/connection/ChronicleServices.d.ts +2 -1
- package/dist/connection/ChronicleServices.d.ts.map +1 -1
- package/dist/connection/ConnectionLifecycle.d.ts +8 -0
- package/dist/connection/ConnectionLifecycle.d.ts.map +1 -1
- package/dist/connection/ConnectionLifecycle.js +21 -0
- package/dist/connection/ConnectionLifecycle.js.map +1 -1
- package/dist/eventSequences/AppendOptions.d.ts +12 -0
- package/dist/eventSequences/AppendOptions.d.ts.map +1 -1
- package/dist/eventSequences/EventForEventSourceId.d.ts +11 -0
- package/dist/eventSequences/EventForEventSourceId.d.ts.map +1 -1
- package/dist/eventSequences/EventLog.d.ts +2 -1
- package/dist/eventSequences/EventLog.d.ts.map +1 -1
- package/dist/eventSequences/EventLog.js +2 -2
- package/dist/eventSequences/EventLog.js.map +1 -1
- package/dist/eventSequences/EventSequence.d.ts +4 -1
- package/dist/eventSequences/EventSequence.d.ts.map +1 -1
- package/dist/eventSequences/EventSequence.js +32 -6
- package/dist/eventSequences/EventSequence.js.map +1 -1
- package/dist/eventSequences/ITransactionalEventSequence.d.ts +5 -2
- package/dist/eventSequences/ITransactionalEventSequence.d.ts.map +1 -1
- package/dist/eventSequences/TransactionalEventSequence.d.ts +3 -2
- package/dist/eventSequences/TransactionalEventSequence.d.ts.map +1 -1
- package/dist/eventSequences/TransactionalEventSequence.js +4 -4
- package/dist/eventSequences/TransactionalEventSequence.js.map +1 -1
- package/dist/eventSequences/resolveEventSourceRouting.d.ts +39 -0
- package/dist/eventSequences/resolveEventSourceRouting.d.ts.map +1 -0
- package/dist/eventSequences/resolveEventSourceRouting.js +92 -0
- package/dist/eventSequences/resolveEventSourceRouting.js.map +1 -0
- package/dist/eventSources/ConcurrencyDimensions.d.ts +19 -0
- package/dist/eventSources/ConcurrencyDimensions.d.ts.map +1 -0
- package/dist/eventSources/ConcurrencyDimensions.js +19 -0
- package/dist/eventSources/ConcurrencyDimensions.js.map +1 -0
- package/dist/eventSources/DuplicateEventSourceName.d.ts +6 -0
- package/dist/eventSources/DuplicateEventSourceName.d.ts.map +1 -0
- package/dist/eventSources/DuplicateEventSourceName.js +12 -0
- package/dist/eventSources/DuplicateEventSourceName.js.map +1 -0
- package/dist/eventSources/DuplicateEventStreamName.d.ts +7 -0
- package/dist/eventSources/DuplicateEventStreamName.d.ts.map +1 -0
- package/dist/eventSources/DuplicateEventStreamName.js +14 -0
- package/dist/eventSources/DuplicateEventStreamName.js.map +1 -0
- package/dist/eventSources/EventRoutingContradictsEventSource.d.ts +9 -0
- package/dist/eventSources/EventRoutingContradictsEventSource.d.ts.map +1 -0
- package/dist/eventSources/EventRoutingContradictsEventSource.js +18 -0
- package/dist/eventSources/EventRoutingContradictsEventSource.js.map +1 -0
- package/dist/eventSources/EventSourceDefinition.d.ts +20 -0
- package/dist/eventSources/EventSourceDefinition.d.ts.map +1 -0
- package/dist/eventSources/EventSourceDefinition.js +4 -0
- package/dist/eventSources/EventSourceDefinition.js.map +1 -0
- package/dist/eventSources/EventSources.d.ts +31 -0
- package/dist/eventSources/EventSources.d.ts.map +1 -0
- package/dist/eventSources/EventSources.js +90 -0
- package/dist/eventSources/EventSources.js.map +1 -0
- package/dist/eventSources/EventStreamDefinition.d.ts +13 -0
- package/dist/eventSources/EventStreamDefinition.d.ts.map +1 -0
- package/dist/eventSources/EventStreamDefinition.js +4 -0
- package/dist/eventSources/EventStreamDefinition.js.map +1 -0
- package/dist/eventSources/EventStreamDoesNotBelongToEventSource.d.ts +7 -0
- package/dist/eventSources/EventStreamDoesNotBelongToEventSource.d.ts.map +1 -0
- package/dist/eventSources/EventStreamDoesNotBelongToEventSource.js +14 -0
- package/dist/eventSources/EventStreamDoesNotBelongToEventSource.js.map +1 -0
- package/dist/eventSources/EventStreamRequiresEventSource.d.ts +6 -0
- package/dist/eventSources/EventStreamRequiresEventSource.d.ts.map +1 -0
- package/dist/eventSources/EventStreamRequiresEventSource.js +12 -0
- package/dist/eventSources/EventStreamRequiresEventSource.js.map +1 -0
- package/dist/eventSources/IEventSources.d.ts +27 -0
- package/dist/eventSources/IEventSources.d.ts.map +1 -0
- package/dist/eventSources/IEventSources.js +4 -0
- package/dist/eventSources/IEventSources.js.map +1 -0
- package/dist/eventSources/ResolvedEventRouting.d.ts +37 -0
- package/dist/eventSources/ResolvedEventRouting.d.ts.map +1 -0
- package/dist/eventSources/ResolvedEventRouting.js +60 -0
- package/dist/eventSources/ResolvedEventRouting.js.map +1 -0
- package/dist/eventSources/UnknownEventSource.d.ts +6 -0
- package/dist/eventSources/UnknownEventSource.d.ts.map +1 -0
- package/dist/eventSources/UnknownEventSource.js +12 -0
- package/dist/eventSources/UnknownEventSource.js.map +1 -0
- package/dist/eventSources/eventSource.d.ts +60 -0
- package/dist/eventSources/eventSource.d.ts.map +1 -0
- package/dist/eventSources/eventSource.js +72 -0
- package/dist/eventSources/eventSource.js.map +1 -0
- package/dist/eventSources/index.d.ts +17 -0
- package/dist/eventSources/index.d.ts.map +1 -0
- package/dist/eventSources/index.js +13 -0
- package/dist/eventSources/index.js.map +1 -0
- package/dist/events/EventContext.d.ts +5 -0
- package/dist/events/EventContext.d.ts.map +1 -1
- package/dist/events/WireEventContext.d.ts +2 -0
- package/dist/events/WireEventContext.d.ts.map +1 -1
- package/dist/events/toClientEventContext.d.ts.map +1 -1
- package/dist/events/toClientEventContext.js +1 -0
- package/dist/events/toClientEventContext.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/projections/eventContextPropertyExpression.d.ts.map +1 -1
- package/dist/projections/eventContextPropertyExpression.js +1 -0
- package/dist/projections/eventContextPropertyExpression.js.map +1 -1
- package/dist/readModels/IReadModelWatcher.d.ts +30 -0
- package/dist/readModels/IReadModelWatcher.d.ts.map +1 -0
- package/dist/readModels/IReadModelWatcher.js +4 -0
- package/dist/readModels/IReadModelWatcher.js.map +1 -0
- package/dist/readModels/IReadModels.d.ts +16 -2
- package/dist/readModels/IReadModels.d.ts.map +1 -1
- package/dist/readModels/ReadModelChangeContext.d.ts +9 -0
- package/dist/readModels/ReadModelChangeContext.d.ts.map +1 -0
- package/dist/readModels/ReadModelChangeContext.js +4 -0
- package/dist/readModels/ReadModelChangeContext.js.map +1 -0
- package/dist/readModels/ReadModelChangeType.d.ts +7 -0
- package/dist/readModels/ReadModelChangeType.d.ts.map +1 -0
- package/dist/readModels/ReadModelChangeType.js +10 -0
- package/dist/readModels/ReadModelChangeType.js.map +1 -0
- package/dist/readModels/ReadModelChangeset.d.ts +6 -0
- package/dist/readModels/ReadModelChangeset.d.ts.map +1 -1
- package/dist/readModels/ReadModelWatchOptions.d.ts +19 -0
- package/dist/readModels/ReadModelWatchOptions.d.ts.map +1 -0
- package/dist/readModels/ReadModelWatchOptions.js +4 -0
- package/dist/readModels/ReadModelWatchOptions.js.map +1 -0
- package/dist/readModels/ReadModelWatcher.d.ts +52 -0
- package/dist/readModels/ReadModelWatcher.d.ts.map +1 -0
- package/dist/readModels/ReadModelWatcher.js +276 -0
- package/dist/readModels/ReadModelWatcher.js.map +1 -0
- package/dist/readModels/ReadModels.d.ts +11 -1
- package/dist/readModels/ReadModels.d.ts.map +1 -1
- package/dist/readModels/ReadModels.js +47 -11
- package/dist/readModels/ReadModels.js.map +1 -1
- package/dist/readModels/for_ReadModelWatcher/given/a_kernel_stream.d.ts +15 -0
- package/dist/readModels/for_ReadModelWatcher/given/a_kernel_stream.d.ts.map +1 -0
- package/dist/readModels/for_ReadModelWatcher/given/a_kernel_stream.js +45 -0
- package/dist/readModels/for_ReadModelWatcher/given/a_kernel_stream.js.map +1 -0
- package/dist/readModels/for_ReadModelWatcher/given/a_watched_read_model.d.ts +21 -0
- package/dist/readModels/for_ReadModelWatcher/given/a_watched_read_model.d.ts.map +1 -0
- package/dist/readModels/for_ReadModelWatcher/given/a_watched_read_model.js +35 -0
- package/dist/readModels/for_ReadModelWatcher/given/a_watched_read_model.js.map +1 -0
- package/dist/readModels/index.d.ts +4 -0
- package/dist/readModels/index.d.ts.map +1 -1
- package/dist/readModels/index.js +1 -0
- package/dist/readModels/index.js.map +1 -1
- package/dist/testing/ReactorScenario.d.ts.map +1 -1
- package/dist/testing/ReactorScenario.js +2 -0
- package/dist/testing/ReactorScenario.js.map +1 -1
- package/dist/testing/projections/ProjectionReadModelProcessor.d.ts.map +1 -1
- package/dist/testing/projections/ProjectionReadModelProcessor.js +2 -1
- package/dist/testing/projections/ProjectionReadModelProcessor.js.map +1 -1
- package/dist/transactions/IUnitOfWork.d.ts +3 -1
- package/dist/transactions/IUnitOfWork.d.ts.map +1 -1
- package/dist/transactions/TransactionalEventRouting.d.ts +12 -0
- package/dist/transactions/TransactionalEventRouting.d.ts.map +1 -0
- package/dist/transactions/TransactionalEventRouting.js +4 -0
- package/dist/transactions/TransactionalEventRouting.js.map +1 -0
- package/dist/transactions/UnitOfWork.d.ts +2 -1
- package/dist/transactions/UnitOfWork.d.ts.map +1 -1
- package/dist/transactions/UnitOfWork.js +11 -2
- package/dist/transactions/UnitOfWork.js.map +1 -1
- package/dist/transactions/index.d.ts +1 -0
- package/dist/transactions/index.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/DecoratorType.d.ts +3 -1
- package/dist/types/DecoratorType.d.ts.map +1 -1
- package/dist/types/DecoratorType.js +2 -0
- package/dist/types/DecoratorType.js.map +1 -1
- package/eventSequences/AppendOptions.ts +14 -0
- package/eventSequences/EventForEventSourceId.ts +13 -0
- package/eventSequences/EventLog.ts +4 -2
- package/eventSequences/EventSequence.ts +33 -6
- package/eventSequences/ITransactionalEventSequence.ts +5 -2
- package/eventSequences/TransactionalEventSequence.ts +5 -4
- package/eventSequences/resolveEventSourceRouting.ts +125 -0
- package/eventSources/ConcurrencyDimensions.ts +26 -0
- package/eventSources/DuplicateEventSourceName.ts +10 -0
- package/eventSources/DuplicateEventStreamName.ts +10 -0
- package/eventSources/EventRoutingContradictsEventSource.ts +10 -0
- package/eventSources/EventSourceDefinition.ts +27 -0
- package/eventSources/EventSources.ts +93 -0
- package/eventSources/EventStreamDefinition.ts +18 -0
- package/eventSources/EventStreamDoesNotBelongToEventSource.ts +10 -0
- package/eventSources/EventStreamRequiresEventSource.ts +10 -0
- package/eventSources/IEventSources.ts +33 -0
- package/eventSources/ResolvedEventRouting.ts +78 -0
- package/eventSources/UnknownEventSource.ts +10 -0
- package/eventSources/eventSource.ts +116 -0
- package/eventSources/for_EventSources/against_a_kernel/when_appending_through_registered_sources.integration.spec.ts +106 -0
- package/eventSources/for_EventSources/when_appending_through_a_definition.spec.ts +190 -0
- package/eventSources/for_EventSources/when_batch_requires_differing_guards.spec.ts +139 -0
- package/eventSources/for_EventSources/when_discovering_and_registering.spec.ts +94 -0
- package/eventSources/index.ts +19 -0
- package/events/EventContext.ts +6 -0
- package/events/WireEventContext.ts +2 -0
- package/events/for_EventContext/with_event_source.spec.ts +22 -0
- package/events/toClientEventContext.ts +1 -0
- package/for_ChronicleClient/when_reconnecting/with_waiting_read_model_watchers.spec.ts +117 -0
- package/for_EventStore/when_implementing_a_legacy_event_store.spec.ts +19 -0
- package/index.ts +3 -0
- package/jobs/for_Jobs/against_a_kernel/when_managing_a_replay_job.integration.spec.ts +24 -4
- package/package.json +3 -3
- package/projections/eventContextPropertyExpression.ts +2 -1
- package/reactors/for_Reactors/against_a_kernel/when_replaying_reactors_with_once_only_handlers.integration.spec.ts +27 -8
- package/readModels/IReadModelWatcher.ts +35 -0
- package/readModels/IReadModels.ts +17 -2
- package/readModels/ReadModelChangeContext.ts +11 -0
- package/readModels/ReadModelChangeType.ts +9 -0
- package/readModels/ReadModelChangeset.ts +9 -0
- package/readModels/ReadModelWatchOptions.ts +23 -0
- package/readModels/ReadModelWatcher.ts +271 -0
- package/readModels/ReadModels.ts +60 -11
- package/readModels/for_ReadModelWatcher/against_a_kernel/when_watching_changes.integration.spec.ts +104 -0
- package/readModels/for_ReadModelWatcher/given/a_kernel_stream.ts +50 -0
- package/readModels/for_ReadModelWatcher/given/a_watched_read_model.ts +37 -0
- package/readModels/for_ReadModelWatcher/watchCompatibility.standard.spec.ts +29 -0
- package/readModels/for_ReadModelWatcher/when_a_stream_cannot_recover.spec.ts +86 -0
- package/readModels/for_ReadModelWatcher/when_applying_backpressure.spec.ts +80 -0
- package/readModels/for_ReadModelWatcher/when_failing_with_buffered_changes.spec.ts +39 -0
- package/readModels/for_ReadModelWatcher/when_not_opting_into_resume.spec.ts +62 -0
- package/readModels/for_ReadModelWatcher/when_notifying_resubscription.spec.ts +128 -0
- package/readModels/for_ReadModelWatcher/when_opting_into_overflow.spec.ts +39 -0
- package/readModels/for_ReadModelWatcher/when_receiving_changes.spec.ts +69 -0
- package/readModels/for_ReadModelWatcher/when_reconnecting.spec.ts +99 -0
- package/readModels/for_ReadModelWatcher/when_reconnecting_during_conversion.spec.ts +84 -0
- package/readModels/for_ReadModelWatcher/when_recovering_a_stream.spec.ts +106 -0
- package/readModels/for_ReadModelWatcher/when_stopping.spec.ts +85 -0
- package/readModels/for_ReadModelWatcher/when_subscribing.spec.ts +62 -0
- package/readModels/for_ReadModels/when_watching.spec.ts +85 -0
- package/readModels/index.ts +4 -0
- package/testing/EventScenario.event-sources.spec.ts +34 -0
- package/testing/ReactorScenario.spec.ts +18 -1
- package/testing/ReactorScenario.ts +1 -0
- package/testing/projections/ProjectionReadModelProcessor.ts +2 -1
- package/transactions/IUnitOfWork.ts +3 -1
- package/transactions/TransactionalEventRouting.ts +16 -0
- package/transactions/UnitOfWork.ts +13 -2
- package/transactions/for_UnitOfWork/when_committing_events_with_event_source_routing.spec.ts +41 -0
- package/transactions/index.ts +1 -0
- package/types/DecoratorType.ts +4 -1
|
@@ -15,13 +15,13 @@ export class TransactionalEventSequence {
|
|
|
15
15
|
return this._unitOfWorkManager.current;
|
|
16
16
|
}
|
|
17
17
|
/** @inheritdoc */
|
|
18
|
-
async append(eventSourceId, event) {
|
|
19
|
-
this.unitOfWork.addEvent(this._eventSequence.id, eventSourceId, event);
|
|
18
|
+
async append(eventSourceId, event, routing) {
|
|
19
|
+
this.unitOfWork.addEvent(this._eventSequence.id, eventSourceId, event, routing);
|
|
20
20
|
}
|
|
21
21
|
/** @inheritdoc */
|
|
22
|
-
async appendMany(eventSourceId, events) {
|
|
22
|
+
async appendMany(eventSourceId, events, routing) {
|
|
23
23
|
for (const event of events) {
|
|
24
|
-
this.unitOfWork.addEvent(this._eventSequence.id, eventSourceId, event);
|
|
24
|
+
this.unitOfWork.addEvent(this._eventSequence.id, eventSourceId, event, routing);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionalEventSequence.js","sourceRoot":"","sources":["../../eventSequences/TransactionalEventSequence.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;
|
|
1
|
+
{"version":3,"file":"TransactionalEventSequence.js","sourceRoot":"","sources":["../../eventSequences/TransactionalEventSequence.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAQrG;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAEd,cAAc;IACd,kBAAkB;IAFvC,YACqB,cAA8B,EAC9B,kBAAsC;8BADtC,cAAc;kCACd,kBAAkB;IACpC,CAAC;IAEJ,kBAAkB;IAClB,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,MAAM,CAAC,aAAqB,EAAE,KAAa,EAAE,OAAmC;QAClF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,UAAU,CAAC,aAAqB,EAAE,MAAgB,EAAE,OAAmC;QACzF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ResolvedEventRouting } from '../eventSources/ResolvedEventRouting.js';
|
|
2
|
+
import type { IEventSources } from '../eventSources/IEventSources.js';
|
|
3
|
+
import type { AppendOptions } from './AppendOptions.js';
|
|
4
|
+
import type { ConcurrencyScope } from './ConcurrencyScope.js';
|
|
5
|
+
import type { EventForEventSourceId } from './EventForEventSourceId.js';
|
|
6
|
+
import { EventSequenceNumber } from './EventSequenceNumber.js';
|
|
7
|
+
/** Resolves the definition routing of a single append, or undefined for a legacy append. */
|
|
8
|
+
export declare function resolveSingleRouting(eventSources: IEventSources | undefined, options?: AppendOptions): ResolvedEventRouting | undefined;
|
|
9
|
+
/** Resolves the definition routing of one event of a batch; per-event values win over the shared options. */
|
|
10
|
+
export declare function resolveBatchRouting(eventSources: IEventSources | undefined, event: EventForEventSourceId, options?: AppendOptions): ResolvedEventRouting | undefined;
|
|
11
|
+
/** A derived guard required by a registered-definition event of a batch. */
|
|
12
|
+
export interface RequiredGuard {
|
|
13
|
+
/** The routing whose dimensions produce the guard. */
|
|
14
|
+
readonly routing: ResolvedEventRouting;
|
|
15
|
+
/** The stream id the guard's stream-id dimension (if any) applies to. */
|
|
16
|
+
readonly streamId: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Determines the single derived guard every event source id of a batch needs.
|
|
20
|
+
* The Kernel accepts one concurrency scope per event source id, so equivalent predicates share one
|
|
21
|
+
* scope (an unguarded event never suppresses a guarded one) and differing predicates are rejected
|
|
22
|
+
* before anything is written.
|
|
23
|
+
* @param routings - The resolved routing per event, aligned with {@link events}.
|
|
24
|
+
* @param events - The batch events.
|
|
25
|
+
* @param sharedStreamId - The shared stream id from the append options.
|
|
26
|
+
* @param explicitIds - Event source ids that carry an explicit scope; they are never derived.
|
|
27
|
+
* @returns The guard to derive per event source id.
|
|
28
|
+
* @throws Error when one event source id needs differing guards.
|
|
29
|
+
*/
|
|
30
|
+
export declare function planDerivedGuards(routings: Array<ResolvedEventRouting | undefined>, events: EventForEventSourceId[], sharedStreamId: string | undefined, explicitIds?: ReadonlySet<string>): Map<string, RequiredGuard>;
|
|
31
|
+
/** The tail reader a derived concurrency scope needs. */
|
|
32
|
+
export type TailReader = (eventSourceId?: string, sourceType?: string, streamType?: string, streamId?: string) => Promise<EventSequenceNumber>;
|
|
33
|
+
/**
|
|
34
|
+
* Derives an optimistic concurrency scope from the dimensions a definition declares.
|
|
35
|
+
* Only call this when no explicit scope exists; explicit scopes always win.
|
|
36
|
+
* @returns The scope, or undefined when the definition declares no dimensions.
|
|
37
|
+
*/
|
|
38
|
+
export declare function deriveConcurrencyScope(routing: ResolvedEventRouting, eventSourceId: string, streamId: string | undefined, readTail: TailReader): Promise<ConcurrencyScope | undefined>;
|
|
39
|
+
//# sourceMappingURL=resolveEventSourceRouting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveEventSourceRouting.d.ts","sourceRoot":"","sources":["../../eventSequences/resolveEventSourceRouting.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,4FAA4F;AAC5F,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,aAAa,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,oBAAoB,GAAG,SAAS,CAGvI;AAED,6GAA6G;AAC7G,wBAAgB,mBAAmB,CAC/B,YAAY,EAAE,aAAa,GAAG,SAAS,EACvC,KAAK,EAAE,qBAAqB,EAC5B,OAAO,CAAC,EAAE,aAAa,GACxB,oBAAoB,GAAG,SAAS,CASlC;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAeD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,KAAK,CAAC,oBAAoB,GAAG,SAAS,CAAC,EACjD,MAAM,EAAE,qBAAqB,EAAE,EAC/B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAC7C,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAmB5B;AAED,yDAAyD;AACzD,MAAM,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE/I;;;;GAIG;AACH,wBAAsB,sBAAsB,CACxC,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,UAAU,GACrB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAmBvC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
import { ConcurrencyDimensions } from '../eventSources/ConcurrencyDimensions.js';
|
|
4
|
+
import { ResolvedEventRouting } from '../eventSources/ResolvedEventRouting.js';
|
|
5
|
+
import { EventSequenceNumber } from './EventSequenceNumber.js';
|
|
6
|
+
/** Resolves the definition routing of a single append, or undefined for a legacy append. */
|
|
7
|
+
export function resolveSingleRouting(eventSources, options) {
|
|
8
|
+
return ResolvedEventRouting.resolve(eventSources, options?.eventSource, options?.eventStream, { sourceType: options?.sourceType, streamType: options?.streamType });
|
|
9
|
+
}
|
|
10
|
+
/** Resolves the definition routing of one event of a batch; per-event values win over the shared options. */
|
|
11
|
+
export function resolveBatchRouting(eventSources, event, options) {
|
|
12
|
+
const ownSource = event.eventSource !== undefined;
|
|
13
|
+
const source = event.eventSource ?? options?.eventSource;
|
|
14
|
+
// A stream belongs to its event source: never inherit the shared stream into a different source.
|
|
15
|
+
const stream = event.eventStream ?? (ownSource ? undefined : options?.eventStream);
|
|
16
|
+
return ResolvedEventRouting.resolve(eventSources, source, stream, {
|
|
17
|
+
sourceType: event.eventSourceType ?? options?.sourceType,
|
|
18
|
+
streamType: event.eventStreamType ?? options?.streamType
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/** The predicate a guard evaluates: only the values of the dimensions the routing selects. */
|
|
22
|
+
function guardPredicate(routing, eventSourceId, streamId) {
|
|
23
|
+
const dimensions = routing.dimensions;
|
|
24
|
+
if (dimensions === ConcurrencyDimensions.none)
|
|
25
|
+
return undefined;
|
|
26
|
+
const has = (flag) => (dimensions & flag) !== 0;
|
|
27
|
+
return JSON.stringify([
|
|
28
|
+
has(ConcurrencyDimensions.eventSourceId) ? eventSourceId : null,
|
|
29
|
+
has(ConcurrencyDimensions.eventSourceType) ? routing.sourceType : null,
|
|
30
|
+
has(ConcurrencyDimensions.eventStreamType) ? routing.streamType ?? null : null,
|
|
31
|
+
has(ConcurrencyDimensions.eventStreamId) ? streamId ?? null : null
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Determines the single derived guard every event source id of a batch needs.
|
|
36
|
+
* The Kernel accepts one concurrency scope per event source id, so equivalent predicates share one
|
|
37
|
+
* scope (an unguarded event never suppresses a guarded one) and differing predicates are rejected
|
|
38
|
+
* before anything is written.
|
|
39
|
+
* @param routings - The resolved routing per event, aligned with {@link events}.
|
|
40
|
+
* @param events - The batch events.
|
|
41
|
+
* @param sharedStreamId - The shared stream id from the append options.
|
|
42
|
+
* @param explicitIds - Event source ids that carry an explicit scope; they are never derived.
|
|
43
|
+
* @returns The guard to derive per event source id.
|
|
44
|
+
* @throws Error when one event source id needs differing guards.
|
|
45
|
+
*/
|
|
46
|
+
export function planDerivedGuards(routings, events, sharedStreamId, explicitIds = new Set()) {
|
|
47
|
+
const guards = new Map();
|
|
48
|
+
routings.forEach((routing, index) => {
|
|
49
|
+
const { eventSourceId, eventStreamId } = events[index];
|
|
50
|
+
if (!routing || explicitIds.has(eventSourceId))
|
|
51
|
+
return;
|
|
52
|
+
const streamId = eventStreamId ?? sharedStreamId;
|
|
53
|
+
const predicate = guardPredicate(routing, eventSourceId, streamId);
|
|
54
|
+
if (predicate === undefined)
|
|
55
|
+
return;
|
|
56
|
+
const existing = guards.get(eventSourceId);
|
|
57
|
+
if (!existing) {
|
|
58
|
+
guards.set(eventSourceId, { guard: { routing, streamId }, predicate });
|
|
59
|
+
}
|
|
60
|
+
else if (existing.predicate !== predicate) {
|
|
61
|
+
throw new Error(`Event source id '${eventSourceId}' needs differing concurrency guards within one batch ` +
|
|
62
|
+
`('${existing.guard.routing.eventSource}' and '${routing.eventSource}'), but Chronicle accepts one concurrency scope per event source id. ` +
|
|
63
|
+
'Pass an explicit shared concurrencyScopes entry for the id, or append the events in separate batches.');
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
return new Map([...guards].map(([id, { guard }]) => [id, guard]));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Derives an optimistic concurrency scope from the dimensions a definition declares.
|
|
70
|
+
* Only call this when no explicit scope exists; explicit scopes always win.
|
|
71
|
+
* @returns The scope, or undefined when the definition declares no dimensions.
|
|
72
|
+
*/
|
|
73
|
+
export async function deriveConcurrencyScope(routing, eventSourceId, streamId, readTail) {
|
|
74
|
+
const dimensions = routing.dimensions;
|
|
75
|
+
if (dimensions === ConcurrencyDimensions.none)
|
|
76
|
+
return undefined;
|
|
77
|
+
const has = (flag) => (dimensions & flag) !== 0;
|
|
78
|
+
const scopedSource = has(ConcurrencyDimensions.eventSourceId) ? eventSourceId : undefined;
|
|
79
|
+
const scopedSourceType = has(ConcurrencyDimensions.eventSourceType) ? routing.sourceType : undefined;
|
|
80
|
+
const scopedStreamType = has(ConcurrencyDimensions.eventStreamType) ? routing.streamType : undefined;
|
|
81
|
+
const scopedStreamId = has(ConcurrencyDimensions.eventStreamId) ? streamId : undefined;
|
|
82
|
+
const tail = await readTail(scopedSource, scopedSourceType, scopedStreamType, scopedStreamId);
|
|
83
|
+
return {
|
|
84
|
+
// An empty scope is checked against "no matching event", like an explicit first append.
|
|
85
|
+
sequenceNumber: tail.value === EventSequenceNumber.unset.value ? EventSequenceNumber.beforeFirst.value : tail.value,
|
|
86
|
+
eventSourceId: scopedSource !== undefined,
|
|
87
|
+
eventSourceType: scopedSourceType,
|
|
88
|
+
eventStreamType: scopedStreamType,
|
|
89
|
+
eventStreamId: scopedStreamId
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=resolveEventSourceRouting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveEventSourceRouting.js","sourceRoot":"","sources":["../../eventSequences/resolveEventSourceRouting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flags describing which dimensions of an append take part in a concurrency check.
|
|
3
|
+
* Values match the wire contract and can be combined with bitwise OR.
|
|
4
|
+
*/
|
|
5
|
+
export declare const ConcurrencyDimensions: {
|
|
6
|
+
/** No dimensions declared; the append keeps its existing concurrency behavior. */
|
|
7
|
+
readonly none: 0;
|
|
8
|
+
/** The event source identifier. */
|
|
9
|
+
readonly eventSourceId: 1;
|
|
10
|
+
/** The event source type. */
|
|
11
|
+
readonly eventSourceType: 2;
|
|
12
|
+
/** The event stream type. */
|
|
13
|
+
readonly eventStreamType: 4;
|
|
14
|
+
/** The event stream identifier. */
|
|
15
|
+
readonly eventStreamId: 8;
|
|
16
|
+
};
|
|
17
|
+
/** A bitwise combination of {@link ConcurrencyDimensions} values. */
|
|
18
|
+
export type ConcurrencyDimensionFlags = number;
|
|
19
|
+
//# sourceMappingURL=ConcurrencyDimensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConcurrencyDimensions.d.ts","sourceRoot":"","sources":["../../eventSources/ConcurrencyDimensions.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,qBAAqB;IAC9B,kFAAkF;aAClF,IAAI,EAAE,CAAC;IAEP,mCAAmC;aACnC,aAAa,EAAE,CAAC;IAEhB,6BAA6B;aAC7B,eAAe,EAAE,CAAC;IAElB,6BAA6B;aAC7B,eAAe,EAAE,CAAC;IAElB,mCAAmC;aACnC,aAAa,EAAE,CAAC;CACV,CAAC;AAEX,qEAAqE;AACrE,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/**
|
|
4
|
+
* Flags describing which dimensions of an append take part in a concurrency check.
|
|
5
|
+
* Values match the wire contract and can be combined with bitwise OR.
|
|
6
|
+
*/
|
|
7
|
+
export const ConcurrencyDimensions = {
|
|
8
|
+
/** No dimensions declared; the append keeps its existing concurrency behavior. */
|
|
9
|
+
none: 0,
|
|
10
|
+
/** The event source identifier. */
|
|
11
|
+
eventSourceId: 1,
|
|
12
|
+
/** The event source type. */
|
|
13
|
+
eventSourceType: 2,
|
|
14
|
+
/** The event stream type. */
|
|
15
|
+
eventStreamType: 4,
|
|
16
|
+
/** The event stream identifier. */
|
|
17
|
+
eventStreamId: 8
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=ConcurrencyDimensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConcurrencyDimensions.js","sourceRoot":"","sources":["../../eventSources/ConcurrencyDimensions.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,kFAAkF;IAClF,IAAI,EAAE,CAAC;IAEP,mCAAmC;IACnC,aAAa,EAAE,CAAC;IAEhB,6BAA6B;IAC7B,eAAe,EAAE,CAAC;IAElB,6BAA6B;IAC7B,eAAe,EAAE,CAAC;IAElB,mCAAmC;IACnC,aAAa,EAAE,CAAC;CACV,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DuplicateEventSourceName.d.ts","sourceRoot":"","sources":["../../eventSources/DuplicateEventSourceName.ts"],"names":[],"mappings":"AAGA,wEAAwE;AACxE,qBAAa,wBAAyB,SAAQ,KAAK;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAxC,YAAqB,WAAW,EAAE,MAAM,EAGvC;CACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/** Thrown when two discovered event source definitions share a name. */
|
|
4
|
+
export class DuplicateEventSourceName extends Error {
|
|
5
|
+
eventSource;
|
|
6
|
+
constructor(eventSource) {
|
|
7
|
+
super(`More than one event source definition is named '${eventSource}'.`);
|
|
8
|
+
this.eventSource = eventSource;
|
|
9
|
+
this.name = 'DuplicateEventSourceName';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=DuplicateEventSourceName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DuplicateEventSourceName.js","sourceRoot":"","sources":["../../eventSources/DuplicateEventSourceName.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,wEAAwE;AACxE,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAC1B,WAAW;IAAhC,YAAqB,WAAmB;QACpC,KAAK,CAAC,mDAAmD,WAAW,IAAI,CAAC,CAAC;2BADzD,WAAW;QAE5B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC3C,CAAC;CACJ"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Thrown when an event source definition declares the same stream name twice. */
|
|
2
|
+
export declare class DuplicateEventStreamName extends Error {
|
|
3
|
+
readonly eventSource: string;
|
|
4
|
+
readonly stream: string;
|
|
5
|
+
constructor(eventSource: string, stream: string);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=DuplicateEventStreamName.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DuplicateEventStreamName.d.ts","sourceRoot":"","sources":["../../eventSources/DuplicateEventStreamName.ts"],"names":[],"mappings":"AAGA,kFAAkF;AAClF,qBAAa,wBAAyB,SAAQ,KAAK;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAjE,YAAqB,WAAW,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM,EAGhE;CACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/** Thrown when an event source definition declares the same stream name twice. */
|
|
4
|
+
export class DuplicateEventStreamName extends Error {
|
|
5
|
+
eventSource;
|
|
6
|
+
stream;
|
|
7
|
+
constructor(eventSource, stream) {
|
|
8
|
+
super(`The event source '${eventSource}' declares the event stream '${stream}' more than once.`);
|
|
9
|
+
this.eventSource = eventSource;
|
|
10
|
+
this.stream = stream;
|
|
11
|
+
this.name = 'DuplicateEventStreamName';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=DuplicateEventStreamName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DuplicateEventStreamName.js","sourceRoot":"","sources":["../../eventSources/DuplicateEventStreamName.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,kFAAkF;AAClF,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAC1B,WAAW;IAAmB,MAAM;IAAzD,YAAqB,WAAmB,EAAW,MAAc;QAC7D,KAAK,CAAC,qBAAqB,WAAW,gCAAgC,MAAM,mBAAmB,CAAC,CAAC;2BADhF,WAAW;sBAAmB,MAAM;QAErD,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC3C,CAAC;CACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Thrown when explicit routing values contradict the event source definition. */
|
|
2
|
+
export declare class EventRoutingContradictsEventSource extends Error {
|
|
3
|
+
readonly eventSource: string;
|
|
4
|
+
readonly dimension: string;
|
|
5
|
+
readonly expected: string;
|
|
6
|
+
readonly actual: string;
|
|
7
|
+
constructor(eventSource: string, dimension: string, expected: string, actual: string);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=EventRoutingContradictsEventSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventRoutingContradictsEventSource.d.ts","sourceRoot":"","sources":["../../eventSources/EventRoutingContradictsEventSource.ts"],"names":[],"mappings":"AAGA,kFAAkF;AAClF,qBAAa,kCAAmC,SAAQ,KAAK;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAxH,YAAqB,WAAW,EAAE,MAAM,EAAW,SAAS,EAAE,MAAM,EAAW,QAAQ,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM,EAGvH;CACJ"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/** Thrown when explicit routing values contradict the event source definition. */
|
|
4
|
+
export class EventRoutingContradictsEventSource extends Error {
|
|
5
|
+
eventSource;
|
|
6
|
+
dimension;
|
|
7
|
+
expected;
|
|
8
|
+
actual;
|
|
9
|
+
constructor(eventSource, dimension, expected, actual) {
|
|
10
|
+
super(`The explicit ${dimension} '${actual}' contradicts the event source '${eventSource}', which requires '${expected}'.`);
|
|
11
|
+
this.eventSource = eventSource;
|
|
12
|
+
this.dimension = dimension;
|
|
13
|
+
this.expected = expected;
|
|
14
|
+
this.actual = actual;
|
|
15
|
+
this.name = 'EventRoutingContradictsEventSource';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=EventRoutingContradictsEventSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventRoutingContradictsEventSource.js","sourceRoot":"","sources":["../../eventSources/EventRoutingContradictsEventSource.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,kFAAkF;AAClF,MAAM,OAAO,kCAAmC,SAAQ,KAAK;IACpC,WAAW;IAAmB,SAAS;IAAmB,QAAQ;IAAmB,MAAM;IAAhH,YAAqB,WAAmB,EAAW,SAAiB,EAAW,QAAgB,EAAW,MAAc;QACpH,KAAK,CAAC,gBAAgB,SAAS,KAAK,MAAM,mCAAmC,WAAW,sBAAsB,QAAQ,IAAI,CAAC,CAAC;2BAD3G,WAAW;yBAAmB,SAAS;wBAAmB,QAAQ;sBAAmB,MAAM;QAE5G,IAAI,CAAC,IAAI,GAAG,oCAAoC,CAAC;IACrD,CAAC;CACJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Constructor } from '@cratis/fundamentals';
|
|
2
|
+
import type { ConcurrencyDimensionFlags } from './ConcurrencyDimensions.js';
|
|
3
|
+
import type { EventStreamDefinition } from './EventStreamDefinition.js';
|
|
4
|
+
/**
|
|
5
|
+
* Describes a registered event source: a stable name, its default concurrency dimensions and its streams.
|
|
6
|
+
* Routing belongs to the append, not to event types.
|
|
7
|
+
*/
|
|
8
|
+
export interface EventSourceDefinition {
|
|
9
|
+
/** The class carrying the definition. */
|
|
10
|
+
readonly type: Constructor;
|
|
11
|
+
/** The stable name of the event source; this is the event source type of appended events. */
|
|
12
|
+
readonly name: string;
|
|
13
|
+
/** The description of the event source. */
|
|
14
|
+
readonly description: string;
|
|
15
|
+
/** The default dimensions that take part in concurrency checks. */
|
|
16
|
+
readonly concurrency: ConcurrencyDimensionFlags;
|
|
17
|
+
/** The streams declared by the event source. */
|
|
18
|
+
readonly streams: ReadonlyArray<EventStreamDefinition>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=EventSourceDefinition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventSourceDefinition.d.ts","sourceRoot":"","sources":["../../eventSources/EventSourceDefinition.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAAC;IAEhD,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;CAC1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventSourceDefinition.js","sourceRoot":"","sources":["../../eventSources/EventSourceDefinition.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Constructor } from '@cratis/fundamentals';
|
|
2
|
+
import type { IClientArtifactsProvider } from '../artifacts/index.js';
|
|
3
|
+
import type { ChronicleConnection } from '../connection/index.js';
|
|
4
|
+
import type { EventSourceDefinition } from './EventSourceDefinition.js';
|
|
5
|
+
import type { IEventSources } from './IEventSources.js';
|
|
6
|
+
/**
|
|
7
|
+
* Implements {@link IEventSources}, discovering `@eventSource` classes and registering them with the Kernel.
|
|
8
|
+
*/
|
|
9
|
+
export declare class EventSources implements IEventSources {
|
|
10
|
+
private readonly _eventStore;
|
|
11
|
+
private readonly _connection;
|
|
12
|
+
private readonly _clientArtifacts;
|
|
13
|
+
private _byType;
|
|
14
|
+
private _byName;
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new {@link EventSources}.
|
|
17
|
+
* @param _eventStore - The name of the event store the definitions belong to.
|
|
18
|
+
* @param _connection - The connection used to communicate with the Kernel.
|
|
19
|
+
* @param _clientArtifacts - Provider for discovered client artifact types.
|
|
20
|
+
*/
|
|
21
|
+
constructor(_eventStore: string, _connection: ChronicleConnection, _clientArtifacts: IClientArtifactsProvider);
|
|
22
|
+
/** @inheritdoc */
|
|
23
|
+
get all(): ReadonlyArray<EventSourceDefinition>;
|
|
24
|
+
/** @inheritdoc */
|
|
25
|
+
discover(): Promise<void>;
|
|
26
|
+
/** @inheritdoc */
|
|
27
|
+
register(): Promise<void>;
|
|
28
|
+
/** @inheritdoc */
|
|
29
|
+
getFor(eventSource: Constructor | string): EventSourceDefinition;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=EventSources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventSources.d.ts","sourceRoot":"","sources":["../../eventSources/EventSources.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGlE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAKxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,qBAAa,YAAa,YAAW,aAAa;IAW1C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAZrC,OAAO,CAAC,OAAO,CAAiD;IAChE,OAAO,CAAC,OAAO,CAA4C;IAE3D;;;;;OAKG;IACH,YACqB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,wBAAwB,EAC3D;IAEJ,kBAAkB;IAClB,IAAI,GAAG,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAE9C;IAED,kBAAkB;IACZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAyB9B;IAED,kBAAkB;IACZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB9B;IAED,kBAAkB;IAClB,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,qBAAqB,CAI/D;CACJ"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
import { EventSourceOwner } from '@cratis/chronicle.contracts';
|
|
4
|
+
import { ensureCommandSuccess } from '../connection/callResults.js';
|
|
5
|
+
import { getEventSourceMetadata, getEventStreamsFor } from './eventSource.js';
|
|
6
|
+
import { DuplicateEventSourceName } from './DuplicateEventSourceName.js';
|
|
7
|
+
import { DuplicateEventStreamName } from './DuplicateEventStreamName.js';
|
|
8
|
+
import { UnknownEventSource } from './UnknownEventSource.js';
|
|
9
|
+
/**
|
|
10
|
+
* Implements {@link IEventSources}, discovering `@eventSource` classes and registering them with the Kernel.
|
|
11
|
+
*/
|
|
12
|
+
export class EventSources {
|
|
13
|
+
_eventStore;
|
|
14
|
+
_connection;
|
|
15
|
+
_clientArtifacts;
|
|
16
|
+
_byType = new Map();
|
|
17
|
+
_byName = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new {@link EventSources}.
|
|
20
|
+
* @param _eventStore - The name of the event store the definitions belong to.
|
|
21
|
+
* @param _connection - The connection used to communicate with the Kernel.
|
|
22
|
+
* @param _clientArtifacts - Provider for discovered client artifact types.
|
|
23
|
+
*/
|
|
24
|
+
constructor(_eventStore, _connection, _clientArtifacts) {
|
|
25
|
+
this._eventStore = _eventStore;
|
|
26
|
+
this._connection = _connection;
|
|
27
|
+
this._clientArtifacts = _clientArtifacts;
|
|
28
|
+
}
|
|
29
|
+
/** @inheritdoc */
|
|
30
|
+
get all() {
|
|
31
|
+
return [...this._byType.values()];
|
|
32
|
+
}
|
|
33
|
+
/** @inheritdoc */
|
|
34
|
+
async discover() {
|
|
35
|
+
const byType = new Map();
|
|
36
|
+
const byName = new Map();
|
|
37
|
+
for (const type of this._clientArtifacts.eventSources ?? []) {
|
|
38
|
+
const metadata = getEventSourceMetadata(type);
|
|
39
|
+
if (!metadata)
|
|
40
|
+
continue;
|
|
41
|
+
if (byName.has(metadata.name))
|
|
42
|
+
throw new DuplicateEventSourceName(metadata.name);
|
|
43
|
+
const streams = getEventStreamsFor(type);
|
|
44
|
+
const seen = new Set();
|
|
45
|
+
for (const stream of streams) {
|
|
46
|
+
if (seen.has(stream.name))
|
|
47
|
+
throw new DuplicateEventStreamName(metadata.name, stream.name);
|
|
48
|
+
seen.add(stream.name);
|
|
49
|
+
}
|
|
50
|
+
const definition = {
|
|
51
|
+
type,
|
|
52
|
+
name: metadata.name,
|
|
53
|
+
description: metadata.description,
|
|
54
|
+
concurrency: metadata.concurrency,
|
|
55
|
+
streams: streams.map(stream => ({ ...stream }))
|
|
56
|
+
};
|
|
57
|
+
byType.set(type, definition);
|
|
58
|
+
byName.set(definition.name, definition);
|
|
59
|
+
}
|
|
60
|
+
this._byType = byType;
|
|
61
|
+
this._byName = byName;
|
|
62
|
+
}
|
|
63
|
+
/** @inheritdoc */
|
|
64
|
+
async register() {
|
|
65
|
+
if (this._byType.size === 0)
|
|
66
|
+
return;
|
|
67
|
+
ensureCommandSuccess('register event sources', await this._connection.eventSources.registerEventSources({
|
|
68
|
+
EventStore: this._eventStore,
|
|
69
|
+
Sources: this.all.map(definition => ({
|
|
70
|
+
Name: definition.name,
|
|
71
|
+
Description: definition.description,
|
|
72
|
+
Owner: EventSourceOwner.Client,
|
|
73
|
+
Concurrency: definition.concurrency,
|
|
74
|
+
Streams: definition.streams.map(stream => ({
|
|
75
|
+
Name: stream.name,
|
|
76
|
+
Description: stream.description,
|
|
77
|
+
Concurrency: stream.concurrency
|
|
78
|
+
}))
|
|
79
|
+
}))
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
/** @inheritdoc */
|
|
83
|
+
getFor(eventSource) {
|
|
84
|
+
const definition = typeof eventSource === 'string' ? this._byName.get(eventSource) : this._byType.get(eventSource);
|
|
85
|
+
if (!definition)
|
|
86
|
+
throw new UnknownEventSource(typeof eventSource === 'string' ? eventSource : eventSource.name);
|
|
87
|
+
return definition;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=EventSources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventSources.js","sourceRoot":"","sources":["../../eventSources/EventSources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ConcurrencyDimensionFlags } from './ConcurrencyDimensions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Describes an event stream declared by an event source definition.
|
|
4
|
+
*/
|
|
5
|
+
export interface EventStreamDefinition {
|
|
6
|
+
/** The stable name of the stream; this is the event stream type of appended events. */
|
|
7
|
+
readonly name: string;
|
|
8
|
+
/** The description of the stream. */
|
|
9
|
+
readonly description: string;
|
|
10
|
+
/** The dimensions that take part in concurrency checks for the stream. Falls back to the event source when none. */
|
|
11
|
+
readonly concurrency: ConcurrencyDimensionFlags;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=EventStreamDefinition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventStreamDefinition.d.ts","sourceRoot":"","sources":["../../eventSources/EventStreamDefinition.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,qCAAqC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,oHAAoH;IACpH,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAAC;CACnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventStreamDefinition.js","sourceRoot":"","sources":["../../eventSources/EventStreamDefinition.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Thrown when an append names a stream the event source does not declare. */
|
|
2
|
+
export declare class EventStreamDoesNotBelongToEventSource extends Error {
|
|
3
|
+
readonly eventSource: string;
|
|
4
|
+
readonly stream: string;
|
|
5
|
+
constructor(eventSource: string, stream: string);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=EventStreamDoesNotBelongToEventSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventStreamDoesNotBelongToEventSource.d.ts","sourceRoot":"","sources":["../../eventSources/EventStreamDoesNotBelongToEventSource.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E,qBAAa,qCAAsC,SAAQ,KAAK;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAjE,YAAqB,WAAW,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM,EAGhE;CACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/** Thrown when an append names a stream the event source does not declare. */
|
|
4
|
+
export class EventStreamDoesNotBelongToEventSource extends Error {
|
|
5
|
+
eventSource;
|
|
6
|
+
stream;
|
|
7
|
+
constructor(eventSource, stream) {
|
|
8
|
+
super(`The event stream '${stream}' is not declared by the event source '${eventSource}'.`);
|
|
9
|
+
this.eventSource = eventSource;
|
|
10
|
+
this.stream = stream;
|
|
11
|
+
this.name = 'EventStreamDoesNotBelongToEventSource';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=EventStreamDoesNotBelongToEventSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventStreamDoesNotBelongToEventSource.js","sourceRoot":"","sources":["../../eventSources/EventStreamDoesNotBelongToEventSource.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,8EAA8E;AAC9E,MAAM,OAAO,qCAAsC,SAAQ,KAAK;IACvC,WAAW;IAAmB,MAAM;IAAzD,YAAqB,WAAmB,EAAW,MAAc;QAC7D,KAAK,CAAC,qBAAqB,MAAM,0CAA0C,WAAW,IAAI,CAAC,CAAC;2BAD3E,WAAW;sBAAmB,MAAM;QAErD,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;IACxD,CAAC;CACJ"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Thrown when an append names a stream without naming the event source that declares it. */
|
|
2
|
+
export declare class EventStreamRequiresEventSource extends Error {
|
|
3
|
+
readonly stream: string;
|
|
4
|
+
constructor(stream: string);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=EventStreamRequiresEventSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventStreamRequiresEventSource.d.ts","sourceRoot":"","sources":["../../eventSources/EventStreamRequiresEventSource.ts"],"names":[],"mappings":"AAGA,6FAA6F;AAC7F,qBAAa,8BAA+B,SAAQ,KAAK;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAnC,YAAqB,MAAM,EAAE,MAAM,EAGlC;CACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/** Thrown when an append names a stream without naming the event source that declares it. */
|
|
4
|
+
export class EventStreamRequiresEventSource extends Error {
|
|
5
|
+
stream;
|
|
6
|
+
constructor(stream) {
|
|
7
|
+
super(`The event stream '${stream}' can only be used together with an event source.`);
|
|
8
|
+
this.stream = stream;
|
|
9
|
+
this.name = 'EventStreamRequiresEventSource';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=EventStreamRequiresEventSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventStreamRequiresEventSource.js","sourceRoot":"","sources":["../../eventSources/EventStreamRequiresEventSource.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,6FAA6F;AAC7F,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAChC,MAAM;IAA3B,YAAqB,MAAc;QAC/B,KAAK,CAAC,qBAAqB,MAAM,mDAAmD,CAAC,CAAC;sBADrE,MAAM;QAEvB,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IACjD,CAAC;CACJ"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Constructor } from '@cratis/fundamentals';
|
|
2
|
+
import type { EventSourceDefinition } from './EventSourceDefinition.js';
|
|
3
|
+
/**
|
|
4
|
+
* Defines the discovery and registration of event source definitions.
|
|
5
|
+
*/
|
|
6
|
+
export interface IEventSources {
|
|
7
|
+
/** Gets all discovered event source definitions. */
|
|
8
|
+
readonly all: ReadonlyArray<EventSourceDefinition>;
|
|
9
|
+
/**
|
|
10
|
+
* Discovers the event source definitions from the client artifacts.
|
|
11
|
+
* @throws DuplicateEventSourceName when two definitions share a name.
|
|
12
|
+
* @throws DuplicateEventStreamName when a definition declares the same stream twice.
|
|
13
|
+
*/
|
|
14
|
+
discover(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Registers the discovered definitions with the Kernel. Registration is an upsert; the Kernel retains
|
|
17
|
+
* historical definitions that are no longer registered. Does nothing when there are no definitions.
|
|
18
|
+
*/
|
|
19
|
+
register(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the definition by class or name.
|
|
22
|
+
* @param eventSource - The class decorated with `@eventSource`, or the definition name.
|
|
23
|
+
* @throws UnknownEventSource when there is no such definition.
|
|
24
|
+
*/
|
|
25
|
+
getFor(eventSource: Constructor | string): EventSourceDefinition;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=IEventSources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IEventSources.d.ts","sourceRoot":"","sources":["../../eventSources/IEventSources.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAEnD;;;;OAIG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;;OAIG;IACH,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,qBAAqB,CAAC;CACpE"}
|