@cratis/chronicle 6.27.0 → 6.29.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 (72) hide show
  1. package/ChronicleClient.ts +1 -1
  2. package/ChronicleOptions.ts +14 -1
  3. package/EventStore.ts +6 -4
  4. package/connection/ChronicleConnection.auth.spec.ts +15 -11
  5. package/dist/ChronicleClient.js +1 -1
  6. package/dist/ChronicleClient.js.map +1 -1
  7. package/dist/ChronicleOptions.d.ts +9 -0
  8. package/dist/ChronicleOptions.d.ts.map +1 -1
  9. package/dist/ChronicleOptions.js +10 -1
  10. package/dist/ChronicleOptions.js.map +1 -1
  11. package/dist/EventStore.d.ts +2 -1
  12. package/dist/EventStore.d.ts.map +1 -1
  13. package/dist/EventStore.js +4 -4
  14. package/dist/EventStore.js.map +1 -1
  15. package/dist/projections/ProjectionDefinitionCompiler.d.ts +4 -1
  16. package/dist/projections/ProjectionDefinitionCompiler.d.ts.map +1 -1
  17. package/dist/projections/ProjectionDefinitionCompiler.js +6 -2
  18. package/dist/projections/ProjectionDefinitionCompiler.js.map +1 -1
  19. package/dist/projections/Projections.d.ts +4 -1
  20. package/dist/projections/Projections.d.ts.map +1 -1
  21. package/dist/projections/Projections.js +5 -2
  22. package/dist/projections/Projections.js.map +1 -1
  23. package/dist/projections/modelBound/childrenFrom.d.ts +19 -0
  24. package/dist/projections/modelBound/childrenFrom.d.ts.map +1 -1
  25. package/dist/projections/modelBound/childrenFrom.js +14 -13
  26. package/dist/projections/modelBound/childrenFrom.js.map +1 -1
  27. package/dist/projections/modelBound/index.d.ts +1 -1
  28. package/dist/projections/modelBound/index.d.ts.map +1 -1
  29. package/dist/readModels/ReadModelNamingPolicy.d.ts +13 -0
  30. package/dist/readModels/ReadModelNamingPolicy.d.ts.map +1 -0
  31. package/dist/readModels/ReadModelNamingPolicy.js +4 -0
  32. package/dist/readModels/ReadModelNamingPolicy.js.map +1 -0
  33. package/dist/readModels/ReadModels.d.ts +3 -1
  34. package/dist/readModels/ReadModels.d.ts.map +1 -1
  35. package/dist/readModels/ReadModels.js +5 -2
  36. package/dist/readModels/ReadModels.js.map +1 -1
  37. package/dist/readModels/buildReadModelDefinition.d.ts +3 -0
  38. package/dist/readModels/buildReadModelDefinition.d.ts.map +1 -1
  39. package/dist/readModels/buildReadModelDefinition.js +1 -1
  40. package/dist/readModels/buildReadModelDefinition.js.map +1 -1
  41. package/dist/readModels/for_ReadModelNamingPolicy/given/registered_read_models.d.ts +47 -0
  42. package/dist/readModels/for_ReadModelNamingPolicy/given/registered_read_models.d.ts.map +1 -0
  43. package/dist/readModels/for_ReadModelNamingPolicy/given/registered_read_models.js +115 -0
  44. package/dist/readModels/for_ReadModelNamingPolicy/given/registered_read_models.js.map +1 -0
  45. package/dist/readModels/index.d.ts +1 -0
  46. package/dist/readModels/index.d.ts.map +1 -1
  47. package/dist/readModels/index.js.map +1 -1
  48. package/dist/reducers/Reducers.d.ts +6 -1
  49. package/dist/reducers/Reducers.d.ts.map +1 -1
  50. package/dist/reducers/Reducers.js +8 -2
  51. package/dist/reducers/Reducers.js.map +1 -1
  52. package/dist/tsconfig.tsbuildinfo +1 -1
  53. package/package.json +1 -1
  54. package/projections/ProjectionDefinitionCompiler.ts +6 -2
  55. package/projections/Projections.childrenFromOptions.spec.ts +118 -0
  56. package/projections/Projections.ts +5 -2
  57. package/projections/modelBound/childrenFrom.ts +41 -5
  58. package/projections/modelBound/index.ts +1 -1
  59. package/readModels/ReadModelNamingPolicy.ts +16 -0
  60. package/readModels/ReadModels.ts +5 -2
  61. package/readModels/buildReadModelDefinition.ts +5 -2
  62. package/readModels/for_ReadModelNamingPolicy/given/registered_read_models.ts +137 -0
  63. package/readModels/for_ReadModelNamingPolicy/when_configuring_options/with_a_naming_policy.spec.ts +96 -0
  64. package/readModels/for_ReadModelNamingPolicy/when_registering/a_declarative_projection.spec.ts +40 -0
  65. package/readModels/for_ReadModelNamingPolicy/when_registering/a_model_bound_projection.spec.ts +40 -0
  66. package/readModels/for_ReadModelNamingPolicy/when_registering/a_model_bound_read_model_directly.spec.ts +40 -0
  67. package/readModels/for_ReadModelNamingPolicy/when_registering/a_projection_directly.spec.ts +40 -0
  68. package/readModels/for_ReadModelNamingPolicy/when_registering/a_reducer.spec.ts +40 -0
  69. package/readModels/for_ReadModelNamingPolicy/when_registering/a_reducer_read_model_directly.spec.ts +40 -0
  70. package/readModels/index.ts +1 -0
  71. package/reducers/Reducers.ts +8 -2
  72. package/testing/ReadModelScenario.childrenFrom.spec.ts +35 -0
@@ -19,6 +19,7 @@ import { ReducerEventDispatcher } from './ReducerEventDispatcher.js';
19
19
  import { getReadModelMetadata } from '../readModels/index.js';
20
20
  import { getReadModelId } from '../readModels/readModel.js';
21
21
  import { buildReadModelDefinition } from '../readModels/buildReadModelDefinition.js';
22
+ import type { ReadModelNamingPolicy } from '../readModels/ReadModelNamingPolicy.js';
22
23
  import { assertUniqueReadModelIds } from '../readModels/assertUniqueReadModelIds.js';
23
24
  import { JsonSchemaGenerator } from '../schemas/index.js';
24
25
  import type { IEventStore } from '../IEventStore.js';
@@ -117,6 +118,9 @@ export class Reducers implements IReducers {
117
118
  * @param _namespace - The namespace within the event store.
118
119
  * @param lifecycle - The connection lifecycle used to react to disconnect events.
119
120
  * @param _defaultSinkTypeId - The default sink type identifier used when registering read models.
121
+ * @param _eventStore - The event store handed to reducers that request it.
122
+ * @param _artifactActivator - Optional per-delivery activator.
123
+ * @param _readModelNamingPolicy - Optional policy naming the container of each read model.
120
124
  */
121
125
  constructor(
122
126
  private readonly _clientArtifacts: IClientArtifactsProvider,
@@ -126,7 +130,8 @@ export class Reducers implements IReducers {
126
130
  lifecycle: ConnectionLifecycle,
127
131
  private readonly _defaultSinkTypeId: string,
128
132
  private readonly _eventStore?: IEventStore,
129
- private readonly _artifactActivator?: ClientArtifactsActivator
133
+ private readonly _artifactActivator?: ClientArtifactsActivator,
134
+ private readonly _readModelNamingPolicy?: ReadModelNamingPolicy
130
135
  ) {
131
136
  this._lifecycle = lifecycle;
132
137
  lifecycle.onDisconnected(async () => {
@@ -190,7 +195,8 @@ export class Reducers implements IReducers {
190
195
  schema: this.getReducerSchema(reducerType, readModelName),
191
196
  sinkTypeId: this._defaultSinkTypeId,
192
197
  observerType: ReadModelObserverType.Reducer,
193
- observerIdentifier: id
198
+ observerIdentifier: id,
199
+ namingPolicy: this._readModelNamingPolicy
194
200
  });
195
201
  });
196
202
 
@@ -0,0 +1,35 @@
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
+ import { chai, describe, it } from 'vitest';
5
+ import { eventType } from '../events/eventTypeDecorator.js';
6
+ import { childrenFrom } from '../projections/modelBound/childrenFrom.js';
7
+ import { fromEvent } from '../projections/modelBound/fromEvent.js';
8
+ import { ReadModelScenario, UnsupportedProjectionOperation } from './index.js';
9
+
10
+ chai.should();
11
+
12
+ class ScenarioItemAdded {
13
+ itemId = '';
14
+ name = '';
15
+ }
16
+ eventType('scenario-keyed-item-added')(ScenarioItemAdded);
17
+
18
+ class ScenarioItem {
19
+ id = '';
20
+ name = '';
21
+ }
22
+
23
+ class ScenarioOrder {
24
+ items: ScenarioItem[] = [];
25
+ }
26
+ childrenFrom(ScenarioItemAdded, { childType: ScenarioItem, key: 'itemId' })(ScenarioOrder.prototype, 'items');
27
+ fromEvent(ScenarioItemAdded)(ScenarioOrder);
28
+
29
+ describe('when a read model scenario evaluates keyed children from the options form', () => {
30
+ it('should reject children projections explicitly when the scenario is created', () => {
31
+ (() => new ReadModelScenario(ScenarioOrder, { eventTypes: [ScenarioItemAdded], reducers: [], projections: [] }))
32
+ .should.throw(UnsupportedProjectionOperation)
33
+ .with.property('message').that.includes('Children.items (@childrenFrom)').and.includes('children projections');
34
+ });
35
+ });