@cratis/chronicle 6.19.0 → 6.21.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.
Files changed (74) hide show
  1. package/dist/eventSequences/EventSequence.d.ts.map +1 -1
  2. package/dist/eventSequences/EventSequence.js +8 -109
  3. package/dist/eventSequences/EventSequence.js.map +1 -1
  4. package/dist/eventSequences/createAppendNotification.d.ts +15 -0
  5. package/dist/eventSequences/createAppendNotification.d.ts.map +1 -0
  6. package/dist/eventSequences/createAppendNotification.js +25 -0
  7. package/dist/eventSequences/createAppendNotification.js.map +1 -0
  8. package/dist/eventSequences/prepareBatchAppend.d.ts +31 -0
  9. package/dist/eventSequences/prepareBatchAppend.d.ts.map +1 -0
  10. package/dist/eventSequences/prepareBatchAppend.js +54 -0
  11. package/dist/eventSequences/prepareBatchAppend.js.map +1 -0
  12. package/dist/eventSequences/prepareSingleAppend.d.ts +12 -0
  13. package/dist/eventSequences/prepareSingleAppend.d.ts.map +1 -0
  14. package/dist/eventSequences/prepareSingleAppend.js +22 -0
  15. package/dist/eventSequences/prepareSingleAppend.js.map +1 -0
  16. package/dist/testing/EventScenario.d.ts +29 -0
  17. package/dist/testing/EventScenario.d.ts.map +1 -0
  18. package/dist/testing/EventScenario.js +63 -0
  19. package/dist/testing/EventScenario.js.map +1 -0
  20. package/dist/testing/EventScenarioGiven.d.ts +9 -0
  21. package/dist/testing/EventScenarioGiven.d.ts.map +1 -0
  22. package/dist/testing/EventScenarioGiven.js +16 -0
  23. package/dist/testing/EventScenarioGiven.js.map +1 -0
  24. package/dist/testing/EventScenarioGivenBuilder.d.ts +9 -0
  25. package/dist/testing/EventScenarioGivenBuilder.d.ts.map +1 -0
  26. package/dist/testing/EventScenarioGivenBuilder.js +12 -0
  27. package/dist/testing/EventScenarioGivenBuilder.js.map +1 -0
  28. package/dist/testing/EventScenarioOptions.d.ts +21 -0
  29. package/dist/testing/EventScenarioOptions.d.ts.map +1 -0
  30. package/dist/testing/EventScenarioOptions.js +4 -0
  31. package/dist/testing/EventScenarioOptions.js.map +1 -0
  32. package/dist/testing/EventScenarioSeed.d.ts +5 -0
  33. package/dist/testing/EventScenarioSeed.d.ts.map +1 -0
  34. package/dist/testing/EventScenarioSeed.js +14 -0
  35. package/dist/testing/EventScenarioSeed.js.map +1 -0
  36. package/dist/testing/EventScenarioWhen.d.ts +11 -0
  37. package/dist/testing/EventScenarioWhen.d.ts.map +1 -0
  38. package/dist/testing/EventScenarioWhen.js +16 -0
  39. package/dist/testing/EventScenarioWhen.js.map +1 -0
  40. package/dist/testing/EventScenarioWhenBuilder.d.ts +9 -0
  41. package/dist/testing/EventScenarioWhenBuilder.d.ts.map +1 -0
  42. package/dist/testing/EventScenarioWhenBuilder.js +12 -0
  43. package/dist/testing/EventScenarioWhenBuilder.js.map +1 -0
  44. package/dist/testing/InProcessEventSequence.d.ts +60 -0
  45. package/dist/testing/InProcessEventSequence.d.ts.map +1 -0
  46. package/dist/testing/InProcessEventSequence.js +462 -0
  47. package/dist/testing/InProcessEventSequence.js.map +1 -0
  48. package/dist/testing/UnsupportedEventSequenceOperation.d.ts +5 -0
  49. package/dist/testing/UnsupportedEventSequenceOperation.d.ts.map +1 -0
  50. package/dist/testing/UnsupportedEventSequenceOperation.js +10 -0
  51. package/dist/testing/UnsupportedEventSequenceOperation.js.map +1 -0
  52. package/dist/testing/index.d.ts +7 -0
  53. package/dist/testing/index.d.ts.map +1 -1
  54. package/dist/testing/index.js +6 -0
  55. package/dist/testing/index.js.map +1 -1
  56. package/dist/tsconfig.tsbuildinfo +1 -1
  57. package/eventSequences/EventSequence.ts +12 -119
  58. package/eventSequences/createAppendNotification.ts +35 -0
  59. package/eventSequences/prepareBatchAppend.ts +63 -0
  60. package/eventSequences/prepareSingleAppend.ts +25 -0
  61. package/package.json +1 -1
  62. package/testing/EventScenario.batches.spec.ts +537 -0
  63. package/testing/EventScenario.fixtures.spec.ts +260 -0
  64. package/testing/EventScenario.rejections.spec.ts +273 -0
  65. package/testing/EventScenario.ts +79 -0
  66. package/testing/EventScenarioGiven.ts +13 -0
  67. package/testing/EventScenarioGivenBuilder.ts +11 -0
  68. package/testing/EventScenarioOptions.ts +20 -0
  69. package/testing/EventScenarioSeed.ts +17 -0
  70. package/testing/EventScenarioWhen.ts +14 -0
  71. package/testing/EventScenarioWhenBuilder.ts +11 -0
  72. package/testing/InProcessEventSequence.ts +460 -0
  73. package/testing/UnsupportedEventSequenceOperation.ts +10 -0
  74. package/testing/index.ts +7 -0
@@ -0,0 +1,462 @@
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 { createHash } from 'node:crypto';
4
+ import { EventObservationState } from '@cratis/chronicle.contracts';
5
+ import { AppendOperationsBroadcaster } from '../eventSequences/AppendOperationsBroadcaster.js';
6
+ import { prepareBatchAppend } from '../eventSequences/prepareBatchAppend.js';
7
+ import { createAppendNotification, mapAppendNotificationCausation } from '../eventSequences/createAppendNotification.js';
8
+ import { Guid } from '@cratis/fundamentals';
9
+ import { getEventTypeMetadata, getEventTypeFor } from '../events/eventTypeDecorator.js';
10
+ import { getTagsFor } from '../events/tagDecorator.js';
11
+ import { Tag } from '../events/Tag.js';
12
+ import { EventType } from '../events/EventType.js';
13
+ import { EventTypeId } from '../events/EventTypeId.js';
14
+ import { EventTypeGeneration } from '../events/EventTypeGeneration.js';
15
+ import { Identity } from '../identity/Identity.js';
16
+ import { EventSequenceId } from '../eventSequences/EventSequenceId.js';
17
+ import { EventSequenceNumber } from '../eventSequences/EventSequenceNumber.js';
18
+ import { prepareSingleAppend } from '../eventSequences/prepareSingleAppend.js';
19
+ import { toContractsGuid } from '../connection/Guid.js';
20
+ import { getUniqueEventMetadata, getUniquePropertyMetadata } from '../events/constraints/unique.js';
21
+ import { getRemovedConstraintNames } from '../events/constraints/removeConstraint.js';
22
+ import { UnsupportedEventSequenceOperation } from './UnsupportedEventSequenceOperation.js';
23
+ // JS trim() omits U+0085, which the kernel trims. Reject unproven non-ASCII whitespace and controls.
24
+ const unprovenFilterCharacters = /[\u007f-\u009f]|(?=[^\x00-\x7f])\p{White_Space}/u;
25
+ /** Fixture-backed, scenario-local append sequence; no kernel or observer scheduler is started. */
26
+ export class InProcessEventSequence {
27
+ id;
28
+ _catalog = new Map();
29
+ _history = [];
30
+ _store;
31
+ _namespace;
32
+ _clock;
33
+ _correlationId;
34
+ _setup = false;
35
+ _allowSeedAppend = false;
36
+ _stagedSeeds;
37
+ _stagedNotifications;
38
+ _busy = false;
39
+ _results = [];
40
+ appendOperations = new AppendOperationsBroadcaster();
41
+ constructor(options, eventTypes) {
42
+ if (options.eventSequenceId && options.eventSequenceId.value !== EventSequenceId.eventLog.value) {
43
+ throw this.unsupported('options.eventSequenceId', options.eventSequenceId.value, 'Custom sequences are not fixture-backed.');
44
+ }
45
+ this.id = options.eventSequenceId ?? EventSequenceId.eventLog;
46
+ if (options.eventStore !== undefined && options.eventStore !== 'test-event-store') {
47
+ throw this.unsupported('options.eventStore', options.eventStore, 'Custom event stores are not fixture-backed.');
48
+ }
49
+ if (options.namespace !== undefined && options.namespace !== 'default') {
50
+ throw this.unsupported('options.namespace', options.namespace, 'Custom namespaces are not fixture-backed.');
51
+ }
52
+ this._store = options.eventStore ?? 'test-event-store';
53
+ this._namespace = options.namespace ?? 'default';
54
+ this._clock = options.clock ?? (() => new Date());
55
+ this._correlationId = options.correlationId;
56
+ const ids = new Set();
57
+ for (const type of eventTypes) {
58
+ const metadata = getEventTypeMetadata(type);
59
+ if (!metadata)
60
+ throw this.unsupported('artifacts.eventTypes', type.name, 'Event type has no @eventType metadata.');
61
+ const eventType = metadata.eventType;
62
+ if (!eventType.id.value.trim() || eventType.id.value !== eventType.id.value.trim() ||
63
+ unprovenFilterCharacters.test(eventType.id.value) || eventType.id.value.includes(',')) {
64
+ throw this.unsupported('artifacts.eventTypes.id', eventType.id.value, 'Comma-separated or padded event IDs have unproven filter behavior.');
65
+ }
66
+ if (ids.has(eventType.id.value))
67
+ throw this.unsupported('artifacts.eventTypes', type.name, 'Duplicate event ID or generation history.');
68
+ ids.add(eventType.id.value);
69
+ if (eventType.generation.value !== 1 || eventType.tombstone) {
70
+ throw this.unsupported('artifacts.eventTypes', type.name, 'Only generation 1, non-tombstone events are proven.');
71
+ }
72
+ if (options.constraints !== 'disabled' && (getUniqueEventMetadata(type) || getRemovedConstraintNames(type).length ||
73
+ [...metadata.members.keys()].some(key => getUniquePropertyMetadata(type, key)))) {
74
+ throw this.unsupported('artifacts.eventTypes.constraints', type.name, 'Constraint metadata is not supported in this increment.');
75
+ }
76
+ if (getTagsFor(type).length)
77
+ throw this.unsupported('artifacts.eventTypes.tags', type.name, 'Tagged events are not fixture-backed.');
78
+ // Validate the complete schema, not only properties present on a particular event.
79
+ const schema = metadata.schema;
80
+ if (schema.type !== 'object' || schema.compliance?.length || schema.security?.length ||
81
+ schema.enum !== undefined || schema.items !== undefined || schema.format !== undefined ||
82
+ schema.additionalProperties !== false ||
83
+ schema.required?.length !== Object.keys(schema.properties ?? {}).length ||
84
+ !schema.properties || Object.keys(schema.properties).length === 0 ||
85
+ Object.entries(schema.properties).some(([key, property]) => !/^[a-z][a-zA-Z0-9]*$/.test(key) || !['string', 'boolean'].includes(property.type ?? '') ||
86
+ property.format !== undefined || property.compliance?.length || property.security?.length ||
87
+ property.items !== undefined || property.properties !== undefined || property.enum !== undefined ||
88
+ property.additionalProperties !== undefined)) {
89
+ throw this.unsupported('artifacts.eventTypes.schema', type.name, 'Only flat, unclassified string/boolean fields are fixture-backed.');
90
+ }
91
+ this._catalog.set(type, metadata);
92
+ }
93
+ }
94
+ get results() { return Object.freeze([...this._results]); }
95
+ get appendedEvents() { return Object.freeze(this._history.map(event => this.snapshot(event))); }
96
+ /** Validate and stage all setup appends, then commit and notify in single-append order. */
97
+ async seed(source, events) {
98
+ if (this._setup || this._busy)
99
+ throw this.unsupported('given.events', this.id.value, 'Overlapping setup calls are not fixture-backed.');
100
+ this._setup = true;
101
+ this._stagedSeeds = [];
102
+ this._stagedNotifications = [];
103
+ try {
104
+ for (const event of events) {
105
+ this._allowSeedAppend = true;
106
+ let pending;
107
+ try {
108
+ pending = this.append(source, event);
109
+ }
110
+ finally {
111
+ this._allowSeedAppend = false;
112
+ }
113
+ const result = await pending;
114
+ if (!result.isSuccess)
115
+ throw new Error(`EventScenario given setup failed: ${JSON.stringify(result)}`);
116
+ }
117
+ for (const [index, stored] of this._stagedSeeds.entries()) {
118
+ this._history.push(stored);
119
+ this.appendOperations.publish(this._stagedNotifications[index]);
120
+ // Let an async subscriber observe this append before the next enters history.
121
+ await Promise.resolve();
122
+ }
123
+ }
124
+ finally {
125
+ this._stagedSeeds = undefined;
126
+ this._stagedNotifications = undefined;
127
+ this._setup = false;
128
+ }
129
+ }
130
+ get transactional() { throw this.unsupported('transactional', this.id.value, 'Transactions require a kernel.'); }
131
+ async append(eventSourceId, event, options) {
132
+ if (this._busy || (this._setup && !this._allowSeedAppend)) {
133
+ throw this.unsupported('append', this.id.value, 'Overlapping calls do not have proven ordering.');
134
+ }
135
+ this._busy = true;
136
+ try {
137
+ if (!event || typeof event !== 'object')
138
+ throw this.unsupported('append.event', this.id.value, 'Only registered event instances are supported.');
139
+ if (!/^[A-Za-z0-9_-]+$/.test(eventSourceId))
140
+ throw this.unsupported('append.source', eventSourceId, 'Only simple source identifiers are fixture-backed.');
141
+ if (options && (Reflect.ownKeys(options).length || options.correlationId !== undefined || options.sourceType !== undefined ||
142
+ options.streamType !== undefined || options.streamId !== undefined || options.subject !== undefined ||
143
+ options.occurred !== undefined || options.eventSourceId !== undefined || options.concurrencyScope !== undefined ||
144
+ options.tags !== undefined || options.concurrencyScopes !== undefined)) {
145
+ throw this.unsupported('append.options', event.constructor.name, 'Append metadata, routing and concurrency are not fixture-backed.');
146
+ }
147
+ const metadata = this._catalog.get(event.constructor);
148
+ if (!metadata)
149
+ throw this.unsupported('append.event', event.constructor.name, 'Event is not in the selected, validated catalog.');
150
+ let prepared;
151
+ let content;
152
+ try {
153
+ prepared = prepareSingleAppend(event, this._correlationId ? { correlationId: this._correlationId() } : undefined);
154
+ content = JSON.parse(prepared.content);
155
+ }
156
+ catch (error) {
157
+ throw this.unsupported('append.serialization', event.constructor.name, `Payload or metadata could not be serialized: ${String(error)}.`);
158
+ }
159
+ try {
160
+ toContractsGuid(prepared.correlationId);
161
+ if (!/^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i.test(prepared.correlationId.toString()))
162
+ throw new Error('Invalid correlation ID.');
163
+ }
164
+ catch {
165
+ throw this.unsupported('append.correlationId', event.constructor.name, 'Correlation ID must be a valid GUID.');
166
+ }
167
+ if (prepared.identity !== Identity.system || prepared.causationChain.length !== 2 ||
168
+ Object.keys(prepared.causationChain[0].properties).length !== 0) {
169
+ throw this.unsupported('append.context', event.constructor.name, 'Ambient identity or causation metadata is not fixture-backed.');
170
+ }
171
+ const properties = metadata.schema.properties;
172
+ if (!content || typeof content !== 'object' || Array.isArray(content) ||
173
+ Object.keys(content).length !== Object.keys(properties).length ||
174
+ Object.entries(properties).some(([key, property]) => typeof content[key] !== property.type ||
175
+ (property.type === 'string' && !/^[\x20-\x21\x23-\x5b\x5d-\x7e\u00e9]*$/.test(content[key])))) {
176
+ throw this.unsupported('append.content', event.constructor.name, 'Content differs from the flat scalar schema; null, missing and extra values are not proven.');
177
+ }
178
+ const occurred = this._clock();
179
+ // Date has millisecond precision; only the UTC year range representable by DateTimeOffset is supported.
180
+ if (!(occurred instanceof Date) || Number.isNaN(occurred.getTime()) ||
181
+ occurred.getUTCFullYear() < 1 || occurred.getUTCFullYear() > 9999) {
182
+ throw this.unsupported('append.clock', event.constructor.name, 'Clock must return a valid Date within UTC years 1–9999 (millisecond precision).');
183
+ }
184
+ const canonical = Object.fromEntries(Object.entries(content).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0));
185
+ const hash = createHash('sha256').update(`${prepared.eventType.id.value}|${eventSourceId}|${JSON.stringify(canonical)}`).digest('base64');
186
+ const sequenceNumber = new EventSequenceNumber(BigInt(this._history.length + (this._stagedSeeds?.length ?? 0)));
187
+ const stored = {
188
+ eventType: prepared.eventType,
189
+ content,
190
+ context: {
191
+ eventStore: this._store, namespace: this._namespace,
192
+ sequenceNumber: sequenceNumber.value, eventSourceId,
193
+ eventSourceType: 'Default', eventStreamType: 'All', eventStreamId: 'Default',
194
+ subject: eventSourceId, hash, causedBy: prepared.identity, observationState: EventObservationState.Initial,
195
+ eventType: prepared.eventType, occurred, correlationId: prepared.correlationId.toString(),
196
+ causation: prepared.causationChain.map(item => ({ type: item.type.name, occurred: item.occurred, properties: { ...item.properties } })),
197
+ tags: prepared.tags.map(tag => new Tag(tag))
198
+ }
199
+ };
200
+ if (this._stagedSeeds)
201
+ this._stagedSeeds.push(this.snapshot(stored));
202
+ else
203
+ this._history.push(this.snapshot(stored));
204
+ const result = this.success(sequenceNumber, event.constructor.name);
205
+ if (!this._setup)
206
+ this._results.push(result);
207
+ if (this._stagedNotifications || this.appendOperations.hasSubscribers) {
208
+ const notification = [createAppendNotification(eventSourceId, event, result, prepared.correlationId.toString(), mapAppendNotificationCausation(prepared.causationChain), prepared.tags)];
209
+ if (this._stagedNotifications)
210
+ this._stagedNotifications.push(notification);
211
+ else
212
+ this.appendOperations.publish(notification);
213
+ }
214
+ return result;
215
+ }
216
+ finally {
217
+ // Keep the append in flight until its promise crosses an async boundary.
218
+ await Promise.resolve();
219
+ this._busy = false;
220
+ }
221
+ }
222
+ async appendMany(sourceOrEvents, eventsOrOptions, options) {
223
+ if (this._busy || this._setup)
224
+ throw this.unsupported('appendMany', this.id.value, 'Overlapping calls do not have proven ordering.');
225
+ this._busy = true;
226
+ try {
227
+ const entries = typeof sourceOrEvents === 'string' ? eventsOrOptions : sourceOrEvents;
228
+ const shared = typeof sourceOrEvents === 'string' ? options : eventsOrOptions;
229
+ if (!Array.isArray(entries))
230
+ throw this.unsupported('appendMany.arguments', this.id.value, 'Events must be an array.');
231
+ if (!entries.length)
232
+ throw this.unsupported('appendMany.empty', this.id.value, 'The kernel rejects an empty batch.');
233
+ this.validateBatchOptions(shared);
234
+ if (shared?.occurred !== undefined)
235
+ this.checkedDate(shared.occurred, 'appendMany.occurred');
236
+ for (const entry of entries) {
237
+ if (typeof sourceOrEvents === 'string')
238
+ break;
239
+ if (!entry || typeof entry !== 'object' || Reflect.ownKeys(entry).some(key => !['eventSourceId', 'event', 'eventSourceType', 'eventStreamType', 'eventStreamId', 'subject', 'occurred', 'tags'].includes(String(key)))) {
240
+ throw this.unsupported('appendMany.entry', this.id.value, 'Unrecognized per-entry metadata.');
241
+ }
242
+ const individual = entry;
243
+ if (individual.occurred !== undefined)
244
+ this.checkedDate(individual.occurred, 'appendMany.occurred');
245
+ const tags = individual.tags;
246
+ if (tags && (!Array.isArray(tags) || tags.some(tag => typeof tag !== 'string'))) {
247
+ throw this.unsupported('appendMany.tags', this.id.value, 'Only plain string tags are fixture-backed.');
248
+ }
249
+ }
250
+ let prepared;
251
+ try {
252
+ const batchOptions = shared?.correlationId === undefined && this._correlationId
253
+ ? { correlationId: this._correlationId(), sourceType: shared?.sourceType, streamType: shared?.streamType,
254
+ streamId: shared?.streamId, subject: shared?.subject, occurred: shared?.occurred, tags: shared?.tags }
255
+ : shared;
256
+ if (batchOptions?.correlationId !== undefined)
257
+ this.validateGuid(batchOptions.correlationId, 'appendMany.correlationId');
258
+ prepared = typeof sourceOrEvents === 'string'
259
+ ? prepareBatchAppend(sourceOrEvents, entries, batchOptions)
260
+ : prepareBatchAppend(sourceOrEvents, batchOptions);
261
+ }
262
+ catch (error) {
263
+ if (error instanceof UnsupportedEventSequenceOperation)
264
+ throw error;
265
+ throw this.unsupported('appendMany.serialization', this.id.value, `Batch preparation failed: ${String(error)}.`);
266
+ }
267
+ const { eventsForEventSourceIds, eventsToAppend, correlationId, batchCausationChain, identity } = prepared;
268
+ this.validateGuid(correlationId, 'appendMany.correlationId');
269
+ if (identity !== Identity.system || batchCausationChain.length !== 2 ||
270
+ Object.keys(batchCausationChain[0].properties).length !== 0 ||
271
+ batchCausationChain[1].type.name !== 'TypeScriptClient.AppendMany' ||
272
+ batchCausationChain[1].properties.count !== String(entries.length)) {
273
+ throw this.unsupported('appendMany.context', this.id.value, 'Ambient identity or causation metadata is not fixture-backed.');
274
+ }
275
+ const staged = eventsForEventSourceIds.map(({ eventSourceId, event }, index) => {
276
+ if (!event || typeof event !== 'object' || !this._catalog.has(event.constructor)) {
277
+ throw this.unsupported('appendMany.event', event?.constructor?.name ?? this.id.value, 'Event is not in the selected catalog.');
278
+ }
279
+ this.validateSource(eventSourceId, 'appendMany.source');
280
+ const wire = eventsToAppend[index];
281
+ for (const [name, value] of Object.entries({ sourceType: wire.EventSourceType, streamType: wire.EventStreamType,
282
+ streamId: wire.EventStreamId, subject: wire.Subject })) {
283
+ if (value !== undefined && (typeof value !== 'string' || !/^[A-Za-z0-9_-]+$/.test(value))) {
284
+ throw this.unsupported(`appendMany.${name}`, String(value), 'Only simple metadata identifiers are fixture-backed.');
285
+ }
286
+ }
287
+ if (wire.Tags.some(tag => !/^[A-Za-z0-9_-]+$/.test(tag))) {
288
+ throw this.unsupported('appendMany.tags', event.constructor.name, 'Only simple string tags are fixture-backed.');
289
+ }
290
+ const occurred = wire.Occurred ? this.checkedDate(new Date(wire.Occurred.Value), 'appendMany.occurred')
291
+ : this.checkedDate(this._clock(), 'appendMany.clock');
292
+ const content = this.checkedContent(event, wire.Content, 'appendMany.content');
293
+ const canonical = Object.fromEntries(Object.entries(content).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0));
294
+ const hash = createHash('sha256').update(`${wire.EventType.Id}|${eventSourceId}|${JSON.stringify(canonical)}`).digest('base64');
295
+ const sequenceNumber = new EventSequenceNumber(BigInt(this._history.length + index));
296
+ const eventType = getEventTypeFor(event.constructor);
297
+ const stored = { eventType, content, context: {
298
+ eventStore: this._store, namespace: this._namespace, sequenceNumber: sequenceNumber.value, eventSourceId,
299
+ eventSourceType: wire.EventSourceType || 'Default', eventStreamType: wire.EventStreamType || 'All',
300
+ eventStreamId: wire.EventStreamId || 'Default', subject: wire.Subject, hash, causedBy: identity,
301
+ observationState: EventObservationState.Initial, eventType, occurred, correlationId: correlationId.toString(),
302
+ causation: batchCausationChain.map(item => ({ type: item.type.name, occurred: item.occurred, properties: { ...item.properties } })),
303
+ tags: wire.Tags.map(tag => new Tag(tag))
304
+ } };
305
+ return { stored, result: this.success(sequenceNumber, event.constructor.name) };
306
+ });
307
+ // Stage and validate every entry before committing any event or result.
308
+ this._history.push(...staged.map(item => this.snapshot(item.stored)));
309
+ const results = staged.map(item => item.result);
310
+ this._results.push(...results);
311
+ if (this.appendOperations.hasSubscribers) {
312
+ const occurredAt = new Date();
313
+ const causationEntries = mapAppendNotificationCausation(batchCausationChain);
314
+ this.appendOperations.publish(staged.map(({ result }, index) => createAppendNotification(eventsForEventSourceIds[index].eventSourceId, eventsForEventSourceIds[index].event, result, correlationId.toString(), causationEntries, eventsToAppend[index].Tags, occurredAt)));
315
+ }
316
+ return results;
317
+ }
318
+ finally {
319
+ await Promise.resolve();
320
+ this._busy = false;
321
+ }
322
+ }
323
+ async getNextSequenceNumber() { return new EventSequenceNumber(BigInt(this._history.length)); }
324
+ async getTailSequenceNumber(source, sourceType, streamType, streamId, types) {
325
+ if (source !== undefined)
326
+ this.validateReadSource('getTailSequenceNumber.source', source);
327
+ this.validateRouteFilters('getTailSequenceNumber.filters', sourceType, streamType, streamId);
328
+ const ids = this.filterIds(types);
329
+ const last = [...this._history].reverse().find(event => (source === undefined || event.context.eventSourceId === source) &&
330
+ (sourceType === undefined || sourceType === 'Default' || event.context.eventSourceType === sourceType) &&
331
+ (streamType === undefined || streamType === 'All' || event.context.eventStreamType === streamType) &&
332
+ (streamId === undefined || streamId === 'Default' || event.context.eventStreamId === streamId) &&
333
+ (!ids.length || ids.includes(event.eventType.id.value)));
334
+ return last ? new EventSequenceNumber(last.context.sequenceNumber) : EventSequenceNumber.unset;
335
+ }
336
+ async getTailSequenceNumberForObserver(observer) {
337
+ throw this.unsupported('getTailSequenceNumberForObserver', observer.name, 'Observer discovery is not fixture-backed.');
338
+ }
339
+ async hasEventsFor(source) {
340
+ this.validateReadSource('hasEventsFor.source', source);
341
+ return this._history.some(event => event.context.eventSourceId === source);
342
+ }
343
+ async getForEventSourceIdAndEventTypes(source, types, streamType, streamId, sourceType) {
344
+ if (!types.length)
345
+ throw this.unsupported('getForEventSourceIdAndEventTypes.filters', source, 'Explicit event types are required.');
346
+ this.validateReadSource('getForEventSourceIdAndEventTypes.source', source);
347
+ this.validateRouteFilters('getForEventSourceIdAndEventTypes.filters', sourceType, streamType, streamId);
348
+ const ids = this.filterIds(types);
349
+ return this._history.filter(event => event.context.eventSourceId === source && ids.includes(event.eventType.id.value) &&
350
+ (sourceType === undefined || sourceType === 'Default' || event.context.eventSourceType === sourceType) &&
351
+ (streamType === undefined || streamType === 'All' || event.context.eventStreamType === streamType) &&
352
+ (streamId === undefined || streamId === 'Default' || event.context.eventStreamId === streamId)).map(event => this.snapshot(event));
353
+ }
354
+ async getFromSequenceNumber(sequence, source, types) {
355
+ if (sequence.value < 0n || sequence.value > EventSequenceNumber.unset.value) {
356
+ throw this.unsupported('getFromSequenceNumber.sequenceNumber', sequence.value.toString(), 'Sequence numbers must fit unsigned 64-bit wire values.');
357
+ }
358
+ if (source !== undefined)
359
+ this.validateReadSource('getFromSequenceNumber.source', source);
360
+ const ids = this.filterIds(types);
361
+ return this._history.filter(event => event.context.sequenceNumber >= sequence.value &&
362
+ (source === undefined || event.context.eventSourceId === source) &&
363
+ (!ids.length || ids.includes(event.eventType.id.value))).map(event => this.snapshot(event));
364
+ }
365
+ async redact() { throw this.unsupported('redact', this.id.value, 'Redaction requires kernel storage.'); }
366
+ async redactForEventSource() { throw this.unsupported('redactForEventSource', this.id.value, 'Redaction requires kernel storage.'); }
367
+ async completeStream() { throw this.unsupported('completeStream', this.id.value, 'Stream completion requires a kernel.'); }
368
+ filterIds(types) {
369
+ return (types ?? []).map(type => {
370
+ const metadata = this._catalog.get(type);
371
+ if (!metadata)
372
+ throw this.unsupported('read.eventTypes', type.name, 'Event type is not in the selected catalog.');
373
+ return metadata.eventType.id.value;
374
+ });
375
+ }
376
+ validateRouteFilters(operation, ...filters) {
377
+ for (const filter of filters) {
378
+ if (filter !== undefined && (typeof filter !== 'string' || !/^[A-Za-z0-9_-]+$/.test(filter))) {
379
+ throw this.unsupported(operation, String(filter), 'Only simple, nonblank route filters are fixture-backed.');
380
+ }
381
+ }
382
+ }
383
+ validateBatchOptions(options) {
384
+ if (options === undefined)
385
+ return;
386
+ if (!options || typeof options !== 'object' || Array.isArray(options)) {
387
+ throw this.unsupported('appendMany.options', this.id.value, 'Append options must be an object.');
388
+ }
389
+ const allowed = ['correlationId', 'sourceType', 'streamType', 'streamId', 'subject', 'occurred', 'tags'];
390
+ if (Reflect.ownKeys(options).some(key => !allowed.includes(String(key))) ||
391
+ options.concurrencyScope !== undefined || options.concurrencyScopes !== undefined || options.eventSourceId !== undefined) {
392
+ throw this.unsupported('appendMany.options', this.id.value, 'Concurrency and unrecognized metadata are not fixture-backed.');
393
+ }
394
+ if (options.tags && (!Array.isArray(options.tags) || options.tags.some(tag => typeof tag !== 'string'))) {
395
+ throw this.unsupported('appendMany.tags', this.id.value, 'Only plain string tags are fixture-backed.');
396
+ }
397
+ }
398
+ validateGuid(value, operation) {
399
+ try {
400
+ toContractsGuid(Guid.as(value));
401
+ if (!/^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i.test(value.toString()))
402
+ throw new Error('Invalid GUID.');
403
+ }
404
+ catch {
405
+ throw this.unsupported(operation, this.id.value, 'Correlation ID must be a valid GUID.');
406
+ }
407
+ }
408
+ checkedDate(value, operation) {
409
+ if (!(value instanceof Date) || Number.isNaN(value.getTime()) || value.getUTCFullYear() < 1 || value.getUTCFullYear() > 9999) {
410
+ throw this.unsupported(operation, this.id.value, 'Occurrence must be within UTC years 1–9999 at millisecond precision.');
411
+ }
412
+ return new Date(value);
413
+ }
414
+ validateSource(source, operation) {
415
+ if (typeof source !== 'string' || !/^[A-Za-z0-9_-]+$/.test(source)) {
416
+ throw this.unsupported(operation, String(source), 'Only simple source identifiers are fixture-backed.');
417
+ }
418
+ }
419
+ checkedContent(event, serialized, operation) {
420
+ let content;
421
+ try {
422
+ content = JSON.parse(serialized);
423
+ }
424
+ catch {
425
+ throw this.unsupported(operation, event.constructor.name, 'Content must be valid JSON.');
426
+ }
427
+ const properties = this._catalog.get(event.constructor).schema.properties;
428
+ if (!content || typeof content !== 'object' || Array.isArray(content) ||
429
+ Object.keys(content).length !== Object.keys(properties).length ||
430
+ Object.entries(properties).some(([key, property]) => typeof content[key] !== property.type ||
431
+ (property.type === 'string' && !/^[\x20-\x21\x23-\x5b\x5d-\x7e\u00e9]*$/.test(content[key])))) {
432
+ throw this.unsupported(operation, event.constructor.name, 'Content differs from the fixture-backed scalar schema.');
433
+ }
434
+ return content;
435
+ }
436
+ success(sequenceNumber, artifact) {
437
+ return Object.freeze({ sequenceNumber: Object.freeze(sequenceNumber), constraintViolations: Object.freeze([]),
438
+ errors: Object.freeze([]), isSuccess: true,
439
+ waitForCompletion: async () => { throw this.unsupported('waitForCompletion', artifact, 'No observers run in process.'); } });
440
+ }
441
+ snapshot(event) {
442
+ const eventType = new EventType(new EventTypeId(event.eventType.id.value), new EventTypeGeneration(event.eventType.generation.value), event.eventType.tombstone);
443
+ const causedBy = event.context.causedBy;
444
+ return {
445
+ eventType,
446
+ content: JSON.parse(JSON.stringify(event.content)),
447
+ context: { ...event.context, eventType, occurred: new Date(event.context.occurred),
448
+ causedBy: causedBy && new Identity(causedBy.subject, causedBy.name, causedBy.userName, causedBy.onBehalfOf),
449
+ causation: event.context.causation.map(item => ({ ...item, occurred: item.occurred && new Date(item.occurred), properties: { ...item.properties } })),
450
+ tags: event.context.tags.map(item => new Tag(item.value)) }
451
+ };
452
+ }
453
+ validateReadSource(operation, source) {
454
+ if (!source.trim() || source !== source.trim() || unprovenFilterCharacters.test(source)) {
455
+ throw this.unsupported(operation, source, 'Blank and padded source filters have unproven kernel normalization.');
456
+ }
457
+ }
458
+ unsupported(operation, artifact, reason) {
459
+ return new UnsupportedEventSequenceOperation(operation, artifact, reason);
460
+ }
461
+ }
462
+ //# sourceMappingURL=InProcessEventSequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InProcessEventSequence.js","sourceRoot":"","sources":["../../testing/InProcessEventSequence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** A kernel operation or definition outside the fixture-backed in-process boundary. */
2
+ export declare class UnsupportedEventSequenceOperation extends Error {
3
+ constructor(operation: string, artifact: string, reason: string);
4
+ }
5
+ //# sourceMappingURL=UnsupportedEventSequenceOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnsupportedEventSequenceOperation.d.ts","sourceRoot":"","sources":["../../testing/UnsupportedEventSequenceOperation.ts"],"names":[],"mappings":"AAGA,uFAAuF;AACvF,qBAAa,iCAAkC,SAAQ,KAAK;IACxD,YAAY,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAG9D;CACJ"}
@@ -0,0 +1,10 @@
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
+ /** A kernel operation or definition outside the fixture-backed in-process boundary. */
4
+ export class UnsupportedEventSequenceOperation extends Error {
5
+ constructor(operation, artifact, reason) {
6
+ super(`UnsupportedEventSequenceOperation: ${operation} (${artifact}): ${reason} Use a kernel-backed test.`);
7
+ this.name = 'UnsupportedEventSequenceOperation';
8
+ }
9
+ }
10
+ //# sourceMappingURL=UnsupportedEventSequenceOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnsupportedEventSequenceOperation.js","sourceRoot":"","sources":["../../testing/UnsupportedEventSequenceOperation.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,uFAAuF;AACvF,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IACxD,YAAY,SAAiB,EAAE,QAAgB,EAAE,MAAc;QAC3D,KAAK,CAAC,sCAAsC,SAAS,KAAK,QAAQ,MAAM,MAAM,4BAA4B,CAAC,CAAC;QAC5G,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;IACpD,CAAC;CACJ"}
@@ -1,3 +1,10 @@
1
+ export { EventScenario } from './EventScenario.js';
2
+ export type { EventScenarioOptions } from './EventScenarioOptions.js';
3
+ export { EventScenarioGivenBuilder } from './EventScenarioGivenBuilder.js';
4
+ export { EventScenarioGiven } from './EventScenarioGiven.js';
5
+ export { EventScenarioWhenBuilder } from './EventScenarioWhenBuilder.js';
6
+ export { EventScenarioWhen } from './EventScenarioWhen.js';
7
+ export { UnsupportedEventSequenceOperation } from './UnsupportedEventSequenceOperation.js';
1
8
  export { ReadModelScenario } from './ReadModelScenario.js';
2
9
  export { ReadModelScenarioGiven } from './ReadModelScenarioGiven.js';
3
10
  export { ReadModelScenarioGivenBuilder } from './ReadModelScenarioGivenBuilder.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../testing/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../testing/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC"}
@@ -1,5 +1,11 @@
1
1
  // Copyright (c) Cratis. All rights reserved.
2
2
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ export { EventScenario } from './EventScenario.js';
4
+ export { EventScenarioGivenBuilder } from './EventScenarioGivenBuilder.js';
5
+ export { EventScenarioGiven } from './EventScenarioGiven.js';
6
+ export { EventScenarioWhenBuilder } from './EventScenarioWhenBuilder.js';
7
+ export { EventScenarioWhen } from './EventScenarioWhen.js';
8
+ export { UnsupportedEventSequenceOperation } from './UnsupportedEventSequenceOperation.js';
3
9
  export { ReadModelScenario } from './ReadModelScenario.js';
4
10
  export { ReadModelScenarioGiven } from './ReadModelScenarioGiven.js';
5
11
  export { ReadModelScenarioGivenBuilder } from './ReadModelScenarioGivenBuilder.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../testing/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../testing/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC"}