@cratis/chronicle 6.53.0 → 6.54.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 (21) hide show
  1. package/README.md +1 -1
  2. package/connection/ChronicleConnection.ts +37 -0
  3. package/connection/for_ChronicleConnection/when_warning_about_tls_validation/tls_validation_warning.spec.ts +80 -0
  4. package/dist/connection/ChronicleConnection.d.ts +2 -0
  5. package/dist/connection/ChronicleConnection.d.ts.map +1 -1
  6. package/dist/connection/ChronicleConnection.js +33 -0
  7. package/dist/connection/ChronicleConnection.js.map +1 -1
  8. package/dist/projections/ProjectionDefinitionCompiler.d.ts.map +1 -1
  9. package/dist/projections/ProjectionDefinitionCompiler.js +22 -18
  10. package/dist/projections/ProjectionDefinitionCompiler.js.map +1 -1
  11. package/dist/projections/modelBound/childrenAndNestedBuilder.d.ts +6 -4
  12. package/dist/projections/modelBound/childrenAndNestedBuilder.d.ts.map +1 -1
  13. package/dist/projections/modelBound/childrenAndNestedBuilder.js +14 -12
  14. package/dist/projections/modelBound/childrenAndNestedBuilder.js.map +1 -1
  15. package/jobs/for_Jobs/against_a_kernel/when_managing_a_replay_job.integration.spec.ts +25 -15
  16. package/package.json +1 -1
  17. package/projections/ProjectionDefinitionCompiler.ts +21 -18
  18. package/projections/for_ProjectionDefinitionCompiler/against_a_kernel/when_subscribing_with_from_all_events.integration.spec.ts +52 -48
  19. package/projections/for_ProjectionDefinitionCompiler/when_compiling_from_all_events.spec.ts +52 -25
  20. package/projections/for_ProjectionDefinitionCompiler/when_compiling_from_all_events.standard.spec.ts +49 -9
  21. package/projections/modelBound/childrenAndNestedBuilder.ts +17 -12
@@ -189,9 +189,10 @@ function discoverIdentifiedBy(childType, eventKey) {
189
189
  * `@childrenFrom`/`@nested` properties the child/nested type itself declares.
190
190
  * @param definition - The children definition being populated.
191
191
  * @param childType - The resolved child/nested type, when available.
192
- * @param collectSharedMapping - Collects member mappings into the root's shared All definition.
192
+ * @param path - The contract path of this child or nested definition.
193
+ * @param collectSharedMapping - Collects member mappings into their owning All definition.
193
194
  */
194
- function populateFromType(definition, childType, collectSharedMapping) {
195
+ function populateFromType(definition, childType, path, collectSharedMapping) {
195
196
  if (!childType) {
196
197
  return;
197
198
  }
@@ -224,9 +225,8 @@ function populateFromType(definition, childType, collectSharedMapping) {
224
225
  }
225
226
  const prototype = childType.prototype;
226
227
  const properties = TypeIntrospector.getTrackedProperties(childType);
227
- // Like .NET, collect this type's members before descending into its children.
228
228
  for (const property of properties)
229
- collectSharedMapping?.(prototype, property);
229
+ collectSharedMapping?.(prototype, property, definition.All, `${path}.All`);
230
230
  for (const property of properties) {
231
231
  applyPropertyMappings(prototype, property, fromByEventType);
232
232
  // A clear on the member carrying @nested removes that nested object; a clear on
@@ -247,10 +247,10 @@ function populateFromType(definition, childType, collectSharedMapping) {
247
247
  }
248
248
  const childrenFromList = getChildrenFromMetadata(prototype, property);
249
249
  if (childrenFromList.length > 0) {
250
- definition.Children[property] = buildChildrenEntry(childType, property, childrenFromList, collectSharedMapping);
250
+ definition.Children[property] = buildChildrenEntry(childType, property, childrenFromList, collectSharedMapping, `${path}.Children.${property}`);
251
251
  }
252
252
  if (isNested(prototype, property)) {
253
- definition.Nested[property] = buildNestedEntry(childType, property, collectSharedMapping);
253
+ definition.Nested[property] = buildNestedEntry(childType, property, collectSharedMapping, `${path}.Nested.${property}`);
254
254
  }
255
255
  }
256
256
  definition.From = Array.from(fromByEventType.values());
@@ -262,10 +262,11 @@ function populateFromType(definition, childType, collectSharedMapping) {
262
262
  * @param type - The class declaring the property.
263
263
  * @param property - The property name.
264
264
  * @param metadataList - The `@childrenFrom` metadata entries declared on the property (one per creating event type).
265
- * @param collectSharedMapping - Collects member mappings into the root's shared All definition.
265
+ * @param collectSharedMapping - Collects member mappings into their owning All definition.
266
+ * @param path - The contract path of this children definition.
266
267
  * @returns The wire-shaped children definition.
267
268
  */
268
- export function buildChildrenEntry(type, property, metadataList, collectSharedMapping) {
269
+ export function buildChildrenEntry(type, property, metadataList, collectSharedMapping, path = `Children.${property}`) {
269
270
  const childType = resolveChildElementType(type, property);
270
271
  const definition = createEmptyChildrenDefinition(type, childType);
271
272
  const explicitIdentifiedBy = metadataList.find(metadata => metadata.identifiedBy)?.identifiedBy;
@@ -281,7 +282,7 @@ export function buildChildrenEntry(type, property, metadataList, collectSharedMa
281
282
  }
282
283
  });
283
284
  }
284
- populateFromType(definition, childType, collectSharedMapping);
285
+ populateFromType(definition, childType, path, collectSharedMapping);
285
286
  // For non-aggregate-only creating events, populate an unmapped child identifier from
286
287
  // the creating event's key. IdentifiedBy selects the child property; it is not itself
287
288
  // a property mapping. TypeScript has no [Key] decorator, so an explicit identifiedBy
@@ -320,10 +321,11 @@ export function buildChildrenEntry(type, property, metadataList, collectSharedMa
320
321
  * Builds the `ChildrenDefinition` for a `@nested` single-object property.
321
322
  * @param type - The class declaring the property.
322
323
  * @param property - The property name.
323
- * @param collectSharedMapping - Collects member mappings into the root's shared All definition.
324
+ * @param collectSharedMapping - Collects member mappings into their owning All definition.
325
+ * @param path - The contract path of this nested definition.
324
326
  * @returns The wire-shaped nested definition.
325
327
  */
326
- export function buildNestedEntry(type, property, collectSharedMapping) {
328
+ export function buildNestedEntry(type, property, collectSharedMapping, path = `Nested.${property}`) {
327
329
  const nestedType = resolveNestedType(type, property);
328
330
  const definition = createEmptyChildrenDefinition(type, nestedType);
329
331
  definition.IdentifiedBy = notSetPropertyPath;
@@ -333,7 +335,7 @@ export function buildNestedEntry(type, property, collectSharedMapping) {
333
335
  const eventType = toContractEventType(clearWith.eventType);
334
336
  definition.RemovedWith.push({ Key: eventType, Value: { Key: '$eventSourceId', ParentKey: '' } });
335
337
  }
336
- populateFromType(definition, nestedType, collectSharedMapping);
338
+ populateFromType(definition, nestedType, path, collectSharedMapping);
337
339
  return definition;
338
340
  }
339
341
  //# sourceMappingURL=childrenAndNestedBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"childrenAndNestedBuilder.js","sourceRoot":"","sources":["../../../projections/modelBound/childrenAndNestedBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"childrenAndNestedBuilder.js","sourceRoot":"","sources":["../../../projections/modelBound/childrenAndNestedBuilder.ts"],"names":[],"mappings":"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"}
@@ -68,18 +68,18 @@ describe.skipIf(!connectionString && !process.env.CI)('when managing a replay jo
68
68
  let stopUnknownJob: unknown;
69
69
  let deleteUnknownJob: unknown;
70
70
 
71
- const waitForActiveObserver = (lastHandledSequenceNumber?: bigint) => eventually(
72
- () => connection.observers.getObserverInformation({
73
- EventStore: storeName,
74
- Namespace: 'Default',
75
- ObserverId: 'Item',
76
- EventSequenceId: 'event-log'
77
- }),
78
- observer => observer.IsSubscribed && observer.RunningState === ObserverRunningState.Active &&
79
- (lastHandledSequenceNumber === undefined || observer.LastHandledEventSequenceNumber === lastHandledSequenceNumber),
80
- 15_000);
81
-
82
- // Readiness (30s) and the existing job-state waits (90s) leave 30s for RPC overhead.
71
+ const observerRequest = {
72
+ EventStore: storeName,
73
+ Namespace: 'Default',
74
+ ObserverId: 'Item',
75
+ EventSequenceId: 'event-log'
76
+ };
77
+ const waitForActiveObserver = () => eventually(
78
+ () => connection.observers.getObserverInformation(observerRequest),
79
+ observer => observer.IsSubscribed && observer.RunningState === ObserverRunningState.Active,
80
+ 30_000);
81
+
82
+ // Readiness (30s), append completion (90s), and job-state waits (90s) leave 30s for RPC overhead.
83
83
  beforeAll(async () => {
84
84
  client = new ChronicleClient(ChronicleOptions.fromConnectionString(connectionString!, {
85
85
  discoveryPatterns: [],
@@ -96,8 +96,18 @@ describe.skipIf(!connectionString && !process.env.CI)('when managing a replay jo
96
96
  eventSourceId: randomUUID(),
97
97
  event: Object.assign(new ItemAdded(), { name: `Item ${index}` })
98
98
  })));
99
- // ReplayForModel uses Observer.Replay too; wait for acknowledged progress before requesting it.
100
- await waitForActiveObserver(appended.at(-1)!.sequenceNumber.value);
99
+ // ReplayForModel uses Observer.Replay too; wait for the kernel's completion signal before requesting it.
100
+ appended.every(_ => _.isSuccess).should.equal(true, 'All 500 events must append before waiting for observers');
101
+ const lastAppend = appended.at(-1)!;
102
+ try {
103
+ const completion = await lastAppend.waitForCompletion(90_000);
104
+ completion.isSuccess.should.equal(true, `Observer completion failed: ${JSON.stringify(completion.failedPartitions)}`);
105
+ } catch (error) {
106
+ const lastState = await connection.observers.getObserverInformation(observerRequest, { signal: AbortSignal.timeout(5_000) })
107
+ .then(observer => `subscribed=${observer.IsSubscribed}, runningState=${observer.RunningState}, lastHandled=${observer.LastHandledEventSequenceNumber}`)
108
+ .catch((diagnosticError: unknown) => `observer state unavailable: ${String(diagnosticError)}`);
109
+ throw new Error(`Waiting for Item to finish handling the 500 appended events failed; ${lastState}`, { cause: error });
110
+ }
101
111
 
102
112
  jobId = await store.projections.replayForModel(Item);
103
113
 
@@ -118,7 +128,7 @@ describe.skipIf(!connectionString && !process.env.CI)('when managing a replay jo
118
128
 
119
129
  stopUnknownJob = await store.jobs.stop(randomUUID()).catch((error: unknown) => error);
120
130
  deleteUnknownJob = await store.jobs.delete(randomUUID()).catch((error: unknown) => error);
121
- }, 150_000);
131
+ }, 240_000);
122
132
 
123
133
  afterAll(() => client?.dispose());
124
134
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/chronicle",
3
- "version": "6.53.0",
3
+ "version": "6.54.0",
4
4
  "description": "Event sourcing for TypeScript and Node.js — the idiomatic client for Cratis Chronicle, the open-source event-sourcing database",
5
5
  "author": "Cratis",
6
6
  "license": "MIT",
@@ -294,23 +294,23 @@ export class ProjectionDefinitionCompiler {
294
294
  const allProperties: Record<string, string> = {};
295
295
  const subscribesToAllEvents = properties.some(property => getFromAllEventsMetadata(prototype, property) !== undefined);
296
296
  if (subscribesToAllEvents) overrides.set('SubscribesToAllEvents', '@fromAllEvents');
297
- let includeChildren = false;
298
- const collectSharedMapping = (memberPrototype: object, property: string, isRoot = false) => {
297
+ const all = { Properties: allProperties, IncludeChildren: false, AutoMap: AutoMap.Inherit };
298
+ const collectSharedMapping = (memberPrototype: object, property: string, destination: ChildrenDefinitionLike['All'], path: string) => {
299
299
  const fromAllEvents = getFromAllEventsMetadata(memberPrototype, property);
300
- // Preserve legacy child behavior: only the new decorator contributes child mappings.
301
- const fromEvery = isRoot ? getFromEveryMetadata(memberPrototype, property) : undefined;
302
- const mapping = fromAllEvents ?? fromEvery ?? (isRoot ? getFromAllMetadata(memberPrototype, property) : undefined);
300
+ const fromEvery = getFromEveryMetadata(memberPrototype, property);
301
+ const mapping = fromAllEvents ?? fromEvery ?? (path === 'All' ? getFromAllMetadata(memberPrototype, property) : undefined);
303
302
  if (!mapping) return;
303
+ const declaration = fromAllEvents ? '@fromAllEvents' : fromEvery ? '@fromEvery' : '@fromAll';
304
304
  if (fromAllEvents) {
305
- includeChildren = true;
306
- overrides.set('All', '@fromAllEvents');
305
+ destination.IncludeChildren = true;
306
+ overrides.set(path, declaration);
307
+ } else if (path !== 'All' && !overrides.has(path)) {
308
+ overrides.set(path, declaration);
307
309
  }
308
- // .NET collects child and nested members by bare name into the root All block,
309
- // not by a path prefixed with the containing collection or nested property.
310
- allProperties[property] = mapping.contextProperty
310
+ destination.Properties[property] = mapping.contextProperty
311
311
  ? eventContextPropertyExpression(mapping.contextProperty)
312
312
  : (mapping.property ?? property);
313
- overrides.set(`All.Properties.${property}`, fromAllEvents ? '@fromAllEvents' : fromEvery ? '@fromEvery' : '@fromAll');
313
+ overrides.set(`${path}.Properties.${property}`, declaration);
314
314
  };
315
315
 
316
316
  const fromEvents = getFromEventMetadata(type);
@@ -400,7 +400,7 @@ export class ProjectionDefinitionCompiler {
400
400
  overrides.set(`${eventContractPath('From', toContractEventType(clearWith.eventType))}.Properties.${property}`, '@clearWith');
401
401
  }
402
402
  }
403
- collectSharedMapping(prototype, property, true);
403
+ collectSharedMapping(prototype, property, all, 'All');
404
404
  }
405
405
 
406
406
  let from = Array.from(fromByEventType.values());
@@ -457,11 +457,7 @@ export class ProjectionDefinitionCompiler {
457
457
  Join: join,
458
458
  Children: childrenByProperty,
459
459
  FromEvery: [],
460
- All: {
461
- Properties: allProperties,
462
- IncludeChildren: includeChildren,
463
- AutoMap: AutoMap.Inherit
464
- },
460
+ All: all,
465
461
  ...(subscribesToAllEvents ? { SubscribesToAllEvents: true } : {}),
466
462
  RemovedWith: Array.from(removedWithByEventType.values()),
467
463
  RemovedWithJoin: Array.from(removedWithJoinByEventType.values()),
@@ -472,7 +468,14 @@ export class ProjectionDefinitionCompiler {
472
468
  Nested: nestedByProperty
473
469
  };
474
470
  const provenance = captureProjectionProvenance({ ...definition, From: preLoweringFrom, Join: preLoweringJoin }, true, overrides);
475
- if (!includeChildren && Object.keys(allProperties).length && Object.keys(allProperties).every(property =>
471
+ // The shared provenance reader captures root capabilities only; preserve the
472
+ // declaring level for child/nested all-event diagnostics collected above.
473
+ for (const [contractPath, declaration] of overrides) {
474
+ if (contractPath.startsWith('Children.') || contractPath.startsWith('Nested.')) {
475
+ provenance.push({ contractPath, declaration });
476
+ }
477
+ }
478
+ if (!all.IncludeChildren && Object.keys(allProperties).length && Object.keys(allProperties).every(property =>
476
479
  getFromAllMetadata(prototype, property) && !getFromEveryMetadata(prototype, property))) {
477
480
  const index = provenance.findIndex(entry => entry.contractPath === 'All');
478
481
  if (index >= 0) provenance[index] = { contractPath: 'All', declaration: '@fromAll' };
@@ -65,8 +65,8 @@ class AllWithChildMappings {
65
65
  @field(Array, { genericArguments: [AllMappedChild] }) @childrenFrom(ChildAdded, 'childId') children: AllMappedChild[] = [];
66
66
  }
67
67
 
68
- // Without root all-event subscription, the shared All block needs a root From entry
69
- // for ChildAdded as well as the child's creating entry.
68
+ // The root fromEvery mapping handles ChildAdded only because the root explicitly
69
+ // subscribes to it; the child's All mapping belongs to the child independently.
70
70
  @fromEvent(Started)
71
71
  @fromEvent(ChildAdded)
72
72
  class ChildOnlyMappings {
@@ -81,20 +81,6 @@ const artifacts: IClientArtifactsProvider = {
81
81
  eventTypeMigrations: [], globalForHandlers: []
82
82
  };
83
83
 
84
- async function eventually<T>(read: () => Promise<T>, accept: (value: T) => boolean): Promise<T> {
85
- const deadline = Date.now() + 20_000;
86
- let value = await read();
87
- while (!accept(value)) {
88
- if (Date.now() > deadline) {
89
- const state = JSON.stringify(value, (_key, member: unknown) => typeof member === 'bigint' ? member.toString() : member);
90
- throw new Error(`Timed out waiting for the projected state: ${state}`);
91
- }
92
- await new Promise(resolve => setTimeout(resolve, 100));
93
- value = await read();
94
- }
95
- return value;
96
- }
97
-
98
84
  describe.skipIf(!connectionString && !process.env.CI)('when opting into fromAllEvents against a kernel', () => {
99
85
  const knownSource = randomUUID();
100
86
  const unrelatedSource = randomUUID();
@@ -111,25 +97,32 @@ describe.skipIf(!connectionString && !process.env.CI)('when opting into fromAllE
111
97
  let allAfterUnrelated: AllWithChildren | null;
112
98
  let restrictedAfterUnrelated: RestrictedWithChildren | null;
113
99
  let allChildMappingsAfterChild: AllWithChildMappings | null;
100
+ let allChildMappingsAfterUpdate: AllWithChildMappings | null;
114
101
  let childOnlyAfterChild: ChildOnlyMappings | null;
115
102
  let childOnlyAfterUnrelated: ChildOnlyMappings | null;
116
103
  let unrelatedChildOnly: ChildOnlyMappings | null;
117
104
 
118
- async function append(source: string, event: object): Promise<bigint> {
105
+ async function append(source: string, event: object, waitForObservers = true): Promise<bigint> {
119
106
  const result = await store.eventLog.append(source, event);
120
107
  result.isSuccess.should.be.true;
108
+ if (waitForObservers) {
109
+ const completion = await result.waitForCompletion(20_000);
110
+ completion.isSuccess.should.equal(true, `Observer completion failed: ${JSON.stringify(completion.failedPartitions)}`);
111
+ }
121
112
  return result.sequenceNumber.value;
122
113
  }
123
114
 
124
115
  async function waitForObserver(observerId: string, sequenceNumber: bigint): Promise<void> {
125
116
  const connection = (store as unknown as { _connection: ChronicleConnection })._connection;
126
- await eventually(() => connection.observers.getObserverInformation({
117
+ const observer = await connection.observers.getObserverInformation({
127
118
  EventStore: storeName,
128
119
  Namespace: 'Default',
129
120
  ObserverId: observerId,
130
121
  EventSequenceId: 'event-log'
131
- }), observer => observer.IsSubscribed && observer.RunningState === ObserverRunningState.Active &&
132
- observer.LastHandledEventSequenceNumber >= sequenceNumber);
122
+ }, { signal: AbortSignal.timeout(5_000) });
123
+ observer.IsSubscribed.should.equal(true, `${observerId} must be subscribed`);
124
+ observer.RunningState.should.equal(ObserverRunningState.Active);
125
+ (observer.LastHandledEventSequenceNumber >= sequenceNumber).should.equal(true, `${observerId} must have handled ${sequenceNumber}`);
133
126
  }
134
127
 
135
128
  beforeAll(async () => {
@@ -138,27 +131,33 @@ describe.skipIf(!connectionString && !process.env.CI)('when opting into fromAllE
138
131
  }));
139
132
  store = await client.getEventStore(storeName);
140
133
 
141
- await append(knownSource, Object.assign(new Started(), { value: 'started' }));
142
- allAfterStarted = await eventually(() => store.readModels.findInstanceById(AllWithChildren, knownSource), model => model?.lastValue === 'started');
143
- await eventually(() => store.readModels.findInstanceById(RestrictedWithChildren, knownSource), model => model?.lastValue === 'started');
144
- await append(knownSource, Object.assign(new ChildAdded(), { childId: 'child-one', value: 'child-value' }));
145
- allAfterChild = await eventually(() => store.readModels.findInstanceById(AllWithChildren, knownSource), model => model?.children?.length === 1);
146
- restrictedAfterChild = await eventually(() => store.readModels.findInstanceById(RestrictedWithChildren, knownSource), model => model?.children?.length === 1);
147
- childOnlyAfterChild = await eventually(() => store.readModels.findInstanceById(ChildOnlyMappings, knownSource), model => model?.children?.length === 1);
148
- allChildMappingsAfterChild = await eventually(() => store.readModels.findInstanceById(AllWithChildMappings, knownSource), model => model?.children?.length === 1);
149
-
150
- await append(knownSource, Object.assign(new Unrelated(), { marker: 'no-value' }));
151
- allAfterUnrelated = await eventually(() => store.readModels.findInstanceById(AllWithChildren, knownSource),
152
- model => model !== null && model.lastValue === '');
153
-
154
- await append(unrelatedSource, Object.assign(new Unrelated(), { marker: 'new-source' }));
155
- allOnly = await eventually(() => store.readModels.findInstanceById(AllOnly, unrelatedSource), model => model !== null);
156
- unrelatedAll = await eventually(() => store.readModels.findInstanceById(AllWithChildren, unrelatedSource), model => model !== null);
157
- // A subscribed sentinel advances each restricted observer past both unrelated events.
158
- // Progress on an all-event projection is not a barrier for another observer.
134
+ const startedSequenceNumber = await append(knownSource, Object.assign(new Started(), { value: 'started' }));
135
+ await waitForObserver('AllWithChildren', startedSequenceNumber);
136
+ allAfterStarted = await store.readModels.findInstanceById(AllWithChildren, knownSource);
137
+ const childSequenceNumber = await append(knownSource, Object.assign(new ChildAdded(), { childId: 'child-one', value: 'child-value' }));
138
+ for (const observerId of ['AllWithChildren', 'RestrictedWithChildren', 'ChildOnlyMappings', 'AllWithChildMappings']) {
139
+ await waitForObserver(observerId, childSequenceNumber);
140
+ }
141
+ allAfterChild = await store.readModels.findInstanceById(AllWithChildren, knownSource);
142
+ restrictedAfterChild = await store.readModels.findInstanceById(RestrictedWithChildren, knownSource);
143
+ childOnlyAfterChild = await store.readModels.findInstanceById(ChildOnlyMappings, knownSource);
144
+ allChildMappingsAfterChild = await store.readModels.findInstanceById(AllWithChildMappings, knownSource);
145
+
146
+ const updatedSequenceNumber = await append(knownSource, Object.assign(new ChildAdded(), { childId: 'child-one', value: 'updated-child-value' }));
147
+ await waitForObserver('AllWithChildMappings', updatedSequenceNumber);
148
+ allChildMappingsAfterUpdate = await store.readModels.findInstanceById(AllWithChildMappings, knownSource);
149
+
150
+ // This client's completion request carries only a global tail, so restricted
151
+ // observers cannot complete an unrelated append until a subscribed sentinel follows.
152
+ await append(knownSource, Object.assign(new Unrelated(), { marker: 'no-value' }), false);
153
+ await append(unrelatedSource, Object.assign(new Unrelated(), { marker: 'new-source' }), false);
159
154
  const sentinelSequenceNumber = await append(sentinelSource, Object.assign(new Started(), { value: 'sentinel' }));
160
- await waitForObserver('RestrictedWithChildren', sentinelSequenceNumber);
161
- await waitForObserver('ChildOnlyMappings', sentinelSequenceNumber);
155
+ for (const observerId of ['AllOnly', 'AllWithChildren', 'RestrictedWithChildren', 'ChildOnlyMappings']) {
156
+ await waitForObserver(observerId, sentinelSequenceNumber);
157
+ }
158
+ allAfterUnrelated = await store.readModels.findInstanceById(AllWithChildren, knownSource);
159
+ allOnly = await store.readModels.findInstanceById(AllOnly, unrelatedSource);
160
+ unrelatedAll = await store.readModels.findInstanceById(AllWithChildren, unrelatedSource);
162
161
  restrictedAfterUnrelated = await store.readModels.findInstanceById(RestrictedWithChildren, knownSource);
163
162
  unrelatedRestricted = await store.readModels.findInstanceById(RestrictedWithChildren, unrelatedSource);
164
163
  childOnlyAfterUnrelated = await store.readModels.findInstanceById(ChildOnlyMappings, knownSource);
@@ -173,10 +172,11 @@ describe.skipIf(!connectionString && !process.env.CI)('when opting into fromAllE
173
172
  (unrelatedRestricted === null).should.be.true;
174
173
  });
175
174
  it('should give the explicit all-event mapping precedence over fromEvery', () => allAfterStarted!.lastValue.should.equal('started'));
176
- it('should apply the root all-event mapping to a child', () => {
175
+ it('should update the root on a child event without copying its mapping into the child', () => {
176
+ allAfterChild!.lastValue.should.equal('child-value');
177
177
  allAfterChild!.children.should.have.lengthOf(1);
178
178
  allAfterChild!.children[0].id.should.equal('child-one');
179
- allAfterChild!.children[0].lastValue.should.equal('child-value');
179
+ allAfterChild!.children[0].lastValue.should.equal('');
180
180
  });
181
181
  it('should not propagate the deprecated restricted alias mapping to children', () => {
182
182
  restrictedAfterChild!.children.should.have.lengthOf(1);
@@ -186,17 +186,21 @@ describe.skipIf(!connectionString && !process.env.CI)('when opting into fromAllE
186
186
  allAfterUnrelated!.lastValue.should.equal('');
187
187
  });
188
188
  it('should leave the restricted alias unchanged on an unrelated event', () => restrictedAfterUnrelated!.lastValue.should.equal(restrictedAfterChild!.lastValue));
189
- it('should apply a child-declared all-event mapping through the shared root All block', () => {
189
+ it('should apply a child-declared mapping on creation without changing an unmapped same-named root property', () => {
190
190
  allChildMappingsAfterChild!.children[0].lastValue.should.equal('child-value');
191
- // The child event's key routes the all-event fallback to the child, not the root.
192
- allChildMappingsAfterChild!.lastValue.should.equal('started');
191
+ allChildMappingsAfterChild!.source.should.equal(knownSource);
192
+ allChildMappingsAfterChild!.lastValue.should.equal('');
193
+ });
194
+ it('should update the existing child through its own All mapping on subsequent child events', () => {
195
+ allChildMappingsAfterUpdate!.children.should.have.lengthOf(1);
196
+ allChildMappingsAfterUpdate!.children[0].lastValue.should.equal('updated-child-value');
197
+ allChildMappingsAfterUpdate!.lastValue.should.equal('');
193
198
  });
194
199
  it('should keep the root subscription restricted when only the child declares fromAllEvents', () => {
195
200
  childOnlyAfterChild!.rootValue.should.equal('child-value');
196
201
  childOnlyAfterChild!.children[0].id.should.equal('child-one');
197
- // The explicitly subscribed root From entry maps the root, not the child's shared values.
198
- childOnlyAfterChild!.children[0].lastValue.should.equal('');
199
- childOnlyAfterUnrelated!.rootValue.should.equal('child-value');
202
+ childOnlyAfterChild!.children[0].lastValue.should.equal('child-value');
203
+ childOnlyAfterUnrelated!.rootValue.should.equal('updated-child-value');
200
204
  (unrelatedChildOnly === null).should.be.true;
201
205
  });
202
206
  });
@@ -116,13 +116,13 @@ describe('when compiling fromAllEvents on a child model', () => {
116
116
  (definition.SubscribesToAllEvents === undefined).should.be.true;
117
117
  ('SubscribesToAllEvents' in definition.Children.items).should.be.false;
118
118
  });
119
- it('should collect the child mapping by bare name in the root All without subscribing to all events', () => {
119
+ it('should collect the mapping only in the owning child All with its full diagnostic path', () => {
120
120
  const { compiled, definition } = compileModelBound(Parent);
121
- definition.All!.should.deep.equal({ Properties: { title: 'name' }, IncludeChildren: true, AutoMap: 0 });
122
- definition.Children.items.All!.Properties.should.deep.equal({});
121
+ definition.All!.should.deep.equal({ Properties: {}, IncludeChildren: false, AutoMap: 0 });
122
+ definition.Children.items.All!.should.deep.equal({ Properties: { title: 'name' }, IncludeChildren: true, AutoMap: 0 });
123
123
  compiled.provenance.get(definition)!.should.include.deep.members([
124
- { contractPath: 'All', declaration: '@fromAllEvents' },
125
- { contractPath: 'All.Properties.title', declaration: '@fromAllEvents' }
124
+ { contractPath: 'Children.items.All', declaration: '@fromAllEvents' },
125
+ { contractPath: 'Children.items.All.Properties.title', declaration: '@fromAllEvents' }
126
126
  ]);
127
127
  });
128
128
  it('should emit the subscription only at the root when the parent opts in', () => {
@@ -131,17 +131,26 @@ describe('when compiling fromAllEvents on a child model', () => {
131
131
  const { definition } = compileModelBound(AllParent);
132
132
  definition.SubscribesToAllEvents.should.be.true;
133
133
  definition.All!.should.deep.equal({
134
- Properties: { source: '$eventContext(EventSourceId)', title: 'name' }, IncludeChildren: true, AutoMap: 0
134
+ Properties: { source: '$eventContext(EventSourceId)' }, IncludeChildren: true, AutoMap: 0
135
135
  });
136
136
  ('SubscribesToAllEvents' in definition.Children.items).should.be.false;
137
137
  });
138
- it('should share one bare-name mapping when a later child member shadows a root member', () => {
139
- class AllParent extends Model { items: Child[] = []; }
140
- fromAllEvents('rootName')(AllParent.prototype, 'title');
141
- field(Array, { genericArguments: [Child] })(AllParent.prototype, 'items');
142
- childrenFrom(Added, 'id')(AllParent.prototype, 'items');
143
- compileModelBound(AllParent).definition.All!.Properties.should.deep.equal({ title: 'name' });
144
- });
138
+ for (const childFirst of [true, false]) {
139
+ it(`should keep same-named root and child sources independent with child declared ${childFirst ? 'first' : 'last'}`, () => {
140
+ class AllParent { title = ''; items: Child[] = []; }
141
+ const declareChild = () => {
142
+ field(Array, { genericArguments: [Child] })(AllParent.prototype, 'items');
143
+ childrenFrom(Added, 'id')(AllParent.prototype, 'items');
144
+ };
145
+ if (childFirst) declareChild();
146
+ field(String)(AllParent.prototype, 'title');
147
+ fromAllEvents('rootName')(AllParent.prototype, 'title');
148
+ if (!childFirst) declareChild();
149
+ const { definition } = compileModelBound(AllParent);
150
+ definition.All!.Properties.should.deep.equal({ title: 'rootName' });
151
+ definition.Children.items.All!.Properties.should.deep.equal({ title: 'name' });
152
+ });
153
+ }
145
154
  });
146
155
 
147
156
  describe('when compiling fromAllEvents on nested and inherited child models', () => {
@@ -172,16 +181,35 @@ describe('when compiling fromAllEvents on nested and inherited child models', ()
172
181
  field(Detail)(Parent.prototype, 'detail');
173
182
  nested(Parent.prototype, 'detail');
174
183
 
175
- it('should collect grandchild and nested mappings into the root without path prefixes or legacy child mappings', () => {
176
- const { definition } = compileModelBound(Parent);
177
- definition.All!.should.deep.equal({
178
- Properties: { title: 'name', label: 'label', sequence: '$eventContext(SequenceNumber)' },
179
- IncludeChildren: true, AutoMap: 0
180
- });
184
+ it('should keep grandchild and nested mappings on their declaring levels including inherited fromEvery', () => {
185
+ const { compiled, definition } = compileModelBound(Parent);
186
+ definition.All!.should.deep.equal({ Properties: {}, IncludeChildren: false, AutoMap: 0 });
181
187
  (definition.SubscribesToAllEvents === undefined).should.be.true;
182
- definition.Children.groups.Children.children.All!.Properties.should.deep.equal({});
183
- definition.Children.groups.Children.children.Nested.detail.All!.Properties.should.deep.equal({});
184
- definition.Nested.detail.All!.Properties.should.deep.equal({});
188
+ definition.Children.groups.All!.Properties.should.deep.equal({});
189
+ definition.Children.groups.Children.children.All!.Properties.should.deep.equal({ title: 'name', ignored: 'ignoredEvery' });
190
+ const detailMappings = { label: 'label', sequence: '$eventContext(SequenceNumber)' };
191
+ definition.Children.groups.Children.children.Nested.detail.All!.Properties.should.deep.equal(detailMappings);
192
+ definition.Nested.detail.All!.Properties.should.deep.equal(detailMappings);
193
+ compiled.provenance.get(definition)!.should.include.deep.members([
194
+ { contractPath: 'Children.groups.Children.children.All.Properties.ignored', declaration: '@fromEvery' },
195
+ { contractPath: 'Children.groups.Children.children.Nested.detail.All.Properties.sequence', declaration: '@fromAllEvents' },
196
+ { contractPath: 'Nested.detail.All.Properties.label', declaration: '@fromAllEvents' }
197
+ ]);
198
+ });
199
+ it('should keep a sibling fromEvery context mapping local without enabling IncludeChildren or the deprecated child alias', () => {
200
+ class RestrictedChild { id = ''; source = ''; ignored = ''; }
201
+ for (const property of ['id', 'source', 'ignored']) field(String)(RestrictedChild.prototype, property);
202
+ fromEvery(undefined, 'eventSourceId')(RestrictedChild.prototype, 'source');
203
+ fromAll('ignoredAlias')(RestrictedChild.prototype, 'ignored');
204
+ class RestrictedParent { items: RestrictedChild[] = []; }
205
+ field(Array, { genericArguments: [RestrictedChild] })(RestrictedParent.prototype, 'items');
206
+ childrenFrom(Added, 'id')(RestrictedParent.prototype, 'items');
207
+ const { definition } = compileModelBound(RestrictedParent);
208
+ definition.All!.should.deep.equal({ Properties: {}, IncludeChildren: false, AutoMap: 0 });
209
+ definition.Children.items.All!.should.deep.equal({
210
+ Properties: { source: '$eventContext(EventSourceId)' }, IncludeChildren: false, AutoMap: 0
211
+ });
212
+ compileModelBound(Parent).definition.Children.groups.Children.children.All!.Properties.title.should.equal('name');
185
213
  });
186
214
  it('should collect a nested-only mapping without widening the root subscription', () => {
187
215
  class NestedOnly { detail = new Detail(); }
@@ -189,9 +217,8 @@ describe('when compiling fromAllEvents on nested and inherited child models', ()
189
217
  field(Detail)(NestedOnly.prototype, 'detail');
190
218
  nested(NestedOnly.prototype, 'detail');
191
219
  const { definition } = compileModelBound(NestedOnly);
192
- definition.All!.should.deep.equal({
193
- Properties: { label: 'label', sequence: '$eventContext(SequenceNumber)' }, IncludeChildren: true, AutoMap: 0
194
- });
220
+ definition.All!.should.deep.equal({ Properties: {}, IncludeChildren: false, AutoMap: 0 });
221
+ definition.Nested.detail.All!.Properties.should.deep.equal({ label: 'label', sequence: '$eventContext(SequenceNumber)' });
195
222
  (definition.SubscribesToAllEvents === undefined).should.be.true;
196
223
  ('SubscribesToAllEvents' in definition.Nested.detail).should.be.false;
197
224
  });