@cratis/chronicle 6.3.0 → 6.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Constraints.d.ts","sourceRoot":"","sources":["../../../events/constraints/Constraints.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI9C;;GAEG;AACH,qBAAa,WAAY,YAAW,YAAY;IAUxC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAXrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAElE;;;;;OAKG;gBAEkB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,wBAAwB;IAG/D,kBAAkB;IACZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,kBAAkB;IACZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAmE/B,kBAAkB;IAClB,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO;CAGpC"}
1
+ {"version":3,"file":"Constraints.d.ts","sourceRoot":"","sources":["../../../events/constraints/Constraints.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI9C;;GAEG;AACH,qBAAa,WAAY,YAAW,YAAY;IAUxC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAXrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAElE;;;;;OAKG;gBAEkB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,wBAAwB;IAG/D,kBAAkB;IACZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,kBAAkB;IACZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAwE/B,kBAAkB;IAClB,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO;CAGpC"}
@@ -48,10 +48,15 @@ export class Constraints {
48
48
  };
49
49
  if (capture.uniqueConstraint) {
50
50
  const uc = capture.uniqueConstraint;
51
+ const removalEventTypeIds = uc.removedWithEventTypeIds ?? [];
52
+ const legacyEventTypeId = uc.removedWithEventTypeId;
51
53
  return {
52
54
  Name: capture.name,
53
55
  Type: ConstraintType.Unique,
54
- RemovedWith: uc.removedWithEventTypeId ? [uc.removedWithEventTypeId] : [],
56
+ RemovedWith: [...new Set([
57
+ ...(legacyEventTypeId && !removalEventTypeIds.includes(legacyEventTypeId) ? [legacyEventTypeId] : []),
58
+ ...removalEventTypeIds
59
+ ])],
55
60
  Definition: {
56
61
  Value0: {
57
62
  EventDefinitions: uc.eventDefinitions.map(ed => ({
@@ -1 +1 @@
1
- {"version":3,"file":"Constraints.js","sourceRoot":"","sources":["../../../events/constraints/Constraints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Constraints.js","sourceRoot":"","sources":["../../../events/constraints/Constraints.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,8 @@ export interface IUniqueConstraintBuilder {
24
24
  */
25
25
  ignoreCasing(): IUniqueConstraintBuilder;
26
26
  /**
27
- * Specifies the event type that removes this unique constraint (e.g. a deletion event).
27
+ * Adds an event type that removes this unique property constraint (e.g. a deletion event).
28
+ * Repeated calls retain distinct event types in registration order.
28
29
  * @param eventType - The event constructor that removes the constraint.
29
30
  * @returns This builder for fluent chaining.
30
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"IUniqueConstraintBuilder.d.ts","sourceRoot":"","sources":["../../../events/constraints/IUniqueConstraintBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAAC;IAEjD;;;;;OAKG;IACH,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,wBAAwB,CAAC;IAEhH;;;OAGG;IACH,YAAY,IAAI,wBAAwB,CAAC;IAEzC;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,QAAQ,GAAG,wBAAwB,CAAC;IAE3D;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CAAC;IAEvD;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,MAAM,GAAG,wBAAwB,CAAC;CAC5E"}
1
+ {"version":3,"file":"IUniqueConstraintBuilder.d.ts","sourceRoot":"","sources":["../../../events/constraints/IUniqueConstraintBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAAC;IAEjD;;;;;OAKG;IACH,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,wBAAwB,CAAC;IAEhH;;;OAGG;IACH,YAAY,IAAI,wBAAwB,CAAC;IAEzC;;;;;OAKG;IACH,WAAW,CAAC,SAAS,EAAE,QAAQ,GAAG,wBAAwB,CAAC;IAE3D;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CAAC;IAEvD;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,MAAM,GAAG,wBAAwB,CAAC;CAC5E"}
@@ -10,7 +10,10 @@ export interface UniqueConstraintCapture {
10
10
  name?: string;
11
11
  eventDefinitions: UniqueConstraintEventEntry[];
12
12
  ignoreCasing: boolean;
13
+ /** The most recently specified removal event type (retained for legacy capture consumers). */
13
14
  removedWithEventTypeId?: string;
15
+ /** Distinct removal event types in registration order. */
16
+ removedWithEventTypeIds?: string[];
14
17
  message?: string;
15
18
  }
16
19
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"UniqueConstraintBuilder.d.ts","sourceRoot":"","sources":["../../../events/constraints/UniqueConstraintBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAoC,MAAM,sBAAsB,CAAC;AAEvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAUtE,8DAA8D;AAC9D,MAAM,WAAW,0BAA0B;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,0BAA0B,EAAE,CAAC;IAC/C,YAAY,EAAE,OAAO,CAAC;IACtB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,wBAAwB;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;gBAEvC,OAAO,EAAE,uBAAuB;IAI5C,kBAAkB;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB;IAKhD,kBAAkB;IAClB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,wBAAwB;IAY/G,kBAAkB;IAClB,YAAY,IAAI,wBAAwB;IAKxC,kBAAkB;IAClB,WAAW,CAAC,SAAS,EAAE,QAAQ,GAAG,wBAAwB;IAM1D,kBAAkB;IAClB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB;IAKtD,kBAAkB;IAClB,eAAe,CAAC,eAAe,EAAE,MAAM,MAAM,GAAG,wBAAwB;CAI3E"}
1
+ {"version":3,"file":"UniqueConstraintBuilder.d.ts","sourceRoot":"","sources":["../../../events/constraints/UniqueConstraintBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAoC,MAAM,sBAAsB,CAAC;AAEvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAUtE,8DAA8D;AAC9D,MAAM,WAAW,0BAA0B;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,0BAA0B,EAAE,CAAC;IAC/C,YAAY,EAAE,OAAO,CAAC;IACtB,8FAA8F;IAC9F,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0DAA0D;IAC1D,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,wBAAwB;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;gBAEvC,OAAO,EAAE,uBAAuB;IAI5C,kBAAkB;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB;IAKhD,kBAAkB;IAClB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,wBAAwB;IAY/G,kBAAkB;IAClB,YAAY,IAAI,wBAAwB;IAKxC,kBAAkB;IAClB,WAAW,CAAC,SAAS,EAAE,QAAQ,GAAG,wBAAwB;IAW1D,kBAAkB;IAClB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB;IAKtD,kBAAkB;IAClB,eAAe,CAAC,eAAe,EAAE,MAAM,MAAM,GAAG,wBAAwB;CAI3E"}
@@ -43,8 +43,13 @@ export class UniqueConstraintBuilder {
43
43
  }
44
44
  /** @inheritdoc */
45
45
  removedWith(eventType) {
46
- const et = getEventTypeFor(eventType);
47
- this._capture.removedWithEventTypeId = et.id.value;
46
+ const eventTypeId = getEventTypeFor(eventType).id.value;
47
+ const removalEventTypeIds = this._capture.removedWithEventTypeIds ??=
48
+ this._capture.removedWithEventTypeId ? [this._capture.removedWithEventTypeId] : [];
49
+ if (!removalEventTypeIds.includes(eventTypeId)) {
50
+ removalEventTypeIds.push(eventTypeId);
51
+ }
52
+ this._capture.removedWithEventTypeId = eventTypeId;
48
53
  return this;
49
54
  }
50
55
  /** @inheritdoc */
@@ -1 +1 @@
1
- {"version":3,"file":"UniqueConstraintBuilder.js","sourceRoot":"","sources":["../../../events/constraints/UniqueConstraintBuilder.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,EAAiC,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,uEAAuE;AACvE,SAAS,mBAAmB,CAAI,QAA6B;IACzD,MAAM,OAAO,GAAG,IAAI,gCAAgC,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAU,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC;AAiBD;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACf,QAAQ,CAA0B;IAEnD,YAAY,OAAgC;QACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,IAAY;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,EAAE,CAAS,SAA8B,EAAE,GAAG,UAAsC;QAChF,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACxD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;QACzF,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,YAAY;QACR,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,WAAW,CAAC,SAAmB;QAC3B,MAAM,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,WAAW,CAAC,OAAe;QACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,eAAe,CAAC,eAA6B;QACzC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,eAAe,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
1
+ {"version":3,"file":"UniqueConstraintBuilder.js","sourceRoot":"","sources":["../../../events/constraints/UniqueConstraintBuilder.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,qGAAqG;AAErG,OAAO,EAAiC,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,uEAAuE;AACvE,SAAS,mBAAmB,CAAI,QAA6B;IACzD,MAAM,OAAO,GAAG,IAAI,gCAAgC,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAU,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC;AAoBD;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACf,QAAQ,CAA0B;IAEnD,YAAY,OAAgC;QACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,IAAY;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,EAAE,CAAS,SAA8B,EAAE,GAAG,UAAsC;QAChF,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACxD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;QACzF,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,YAAY;QACR,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,WAAW,CAAC,SAAmB;QAC3B,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACxD,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,uBAAuB;YAC7D,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,WAAW,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,WAAW,CAAC,OAAe;QACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,eAAe,CAAC,eAA6B;QACzC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,eAAe,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -57,10 +57,15 @@ export class Constraints implements IConstraints {
57
57
 
58
58
  if (capture.uniqueConstraint) {
59
59
  const uc = capture.uniqueConstraint;
60
+ const removalEventTypeIds = uc.removedWithEventTypeIds ?? [];
61
+ const legacyEventTypeId = uc.removedWithEventTypeId;
60
62
  return {
61
63
  Name: capture.name,
62
64
  Type: ConstraintType.Unique,
63
- RemovedWith: uc.removedWithEventTypeId ? [uc.removedWithEventTypeId] : [],
65
+ RemovedWith: [...new Set([
66
+ ...(legacyEventTypeId && !removalEventTypeIds.includes(legacyEventTypeId) ? [legacyEventTypeId] : []),
67
+ ...removalEventTypeIds
68
+ ])],
64
69
  Definition: {
65
70
  Value0: {
66
71
  EventDefinitions: uc.eventDefinitions.map(ed => ({
@@ -31,7 +31,8 @@ export interface IUniqueConstraintBuilder {
31
31
  ignoreCasing(): IUniqueConstraintBuilder;
32
32
 
33
33
  /**
34
- * Specifies the event type that removes this unique constraint (e.g. a deletion event).
34
+ * Adds an event type that removes this unique property constraint (e.g. a deletion event).
35
+ * Repeated calls retain distinct event types in registration order.
35
36
  * @param eventType - The event constructor that removes the constraint.
36
37
  * @returns This builder for fluent chaining.
37
38
  */
@@ -24,7 +24,10 @@ export interface UniqueConstraintCapture {
24
24
  name?: string;
25
25
  eventDefinitions: UniqueConstraintEventEntry[];
26
26
  ignoreCasing: boolean;
27
+ /** The most recently specified removal event type (retained for legacy capture consumers). */
27
28
  removedWithEventTypeId?: string;
29
+ /** Distinct removal event types in registration order. */
30
+ removedWithEventTypeIds?: string[];
28
31
  message?: string;
29
32
  }
30
33
 
@@ -66,8 +69,13 @@ export class UniqueConstraintBuilder implements IUniqueConstraintBuilder {
66
69
 
67
70
  /** @inheritdoc */
68
71
  removedWith(eventType: Function): IUniqueConstraintBuilder {
69
- const et = getEventTypeFor(eventType);
70
- this._capture.removedWithEventTypeId = et.id.value;
72
+ const eventTypeId = getEventTypeFor(eventType).id.value;
73
+ const removalEventTypeIds = this._capture.removedWithEventTypeIds ??=
74
+ this._capture.removedWithEventTypeId ? [this._capture.removedWithEventTypeId] : [];
75
+ if (!removalEventTypeIds.includes(eventTypeId)) {
76
+ removalEventTypeIds.push(eventTypeId);
77
+ }
78
+ this._capture.removedWithEventTypeId = eventTypeId;
71
79
  return this;
72
80
  }
73
81
 
@@ -0,0 +1,137 @@
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 { beforeEach, chai, describe, it, vi } from 'vitest';
5
+ import { ConstraintType } from '@cratis/chronicle.contracts';
6
+ import type { IClientArtifactsProvider } from '../../../artifacts';
7
+ import type { ChronicleConnection } from '../../../connection';
8
+ import { eventType } from '../../eventTypeDecorator';
9
+ import { ConstraintBuilder } from '../ConstraintBuilder';
10
+ import { constraint } from '../constraint';
11
+ import { Constraints } from '../Constraints';
12
+ import type { IConstraint } from '../IConstraint';
13
+ import type { IConstraintBuilder } from '../IConstraintBuilder';
14
+
15
+ const should = chai.should();
16
+
17
+ class AddressReserved { emailAddress = ''; }
18
+ class AddressReleased {}
19
+ class AddressExpired {}
20
+ class AddressRevoked {}
21
+ eventType('address-reserved')(AddressReserved);
22
+ eventType('address-released')(AddressReleased);
23
+ eventType('address-expired')(AddressExpired);
24
+ eventType('address-revoked')(AddressRevoked);
25
+
26
+ async function registerConstraint(constraintType: new () => IConstraint) {
27
+ const register = vi.fn().mockResolvedValue({});
28
+ const connection = { constraints: { register } } as unknown as ChronicleConnection;
29
+ const artifacts = {
30
+ eventTypes: [], readModels: [], reactors: [], reducers: [], seeders: [], constraints: [constraintType],
31
+ projections: [], webhooks: [], eventTypeMigrations: [], globalForHandlers: []
32
+ } as IClientArtifactsProvider;
33
+ const constraints = new Constraints('store', connection, artifacts);
34
+ await constraints.register();
35
+ return register.mock.calls[0][0];
36
+ }
37
+
38
+ function propertyConstraint(...removalEvents: Function[]): new () => IConstraint {
39
+ class ReservedAddressConstraint implements IConstraint {
40
+ define(builder: IConstraintBuilder): void {
41
+ builder.perEventSourceType().perEventStreamType().perEventStreamId()
42
+ .unique(unique => {
43
+ unique.on(AddressReserved, event => event.emailAddress).ignoreCasing();
44
+ removalEvents.forEach(eventType => unique.removedWith(eventType));
45
+ });
46
+ }
47
+ }
48
+ constraint('reserved-address')(ReservedAddressConstraint);
49
+ return ReservedAddressConstraint;
50
+ }
51
+
52
+ describe('when registering a unique property constraint without removal events', () => {
53
+ it('should register no removal event types', async () => {
54
+ const request = await registerConstraint(propertyConstraint());
55
+ request.Constraints[0].RemovedWith.should.deep.equal([]);
56
+ });
57
+ });
58
+
59
+ describe('when registering a unique property constraint with one removal event', () => {
60
+ it('should register the removal event type', async () => {
61
+ const request = await registerConstraint(propertyConstraint(AddressReleased));
62
+ request.Constraints[0].RemovedWith.should.deep.equal(['address-released']);
63
+ });
64
+ });
65
+
66
+ describe('when registering a unique property constraint with several removal events', () => {
67
+ let request: Awaited<ReturnType<typeof registerConstraint>>;
68
+ beforeEach(async () => {
69
+ request = await registerConstraint(propertyConstraint(AddressReleased, AddressExpired, AddressRevoked));
70
+ });
71
+
72
+ it('should register all removal event types in declaration order', () => {
73
+ request.Constraints[0].RemovedWith.should.deep.equal(['address-released', 'address-expired', 'address-revoked']);
74
+ });
75
+
76
+ it('should preserve the event properties, casing setting and scope', () => {
77
+ const registered = request.Constraints[0];
78
+ registered.Type.should.equal(ConstraintType.Unique);
79
+ registered.Definition.Value0.EventDefinitions.should.deep.equal([
80
+ { EventTypeId: 'address-reserved', Properties: ['emailAddress'] }
81
+ ]);
82
+ registered.Definition.Value0.IgnoreCasing.should.be.true;
83
+ registered.Scope.should.deep.equal({ EventSourceType: '*', EventStreamType: '*', EventStreamId: '*' });
84
+ request.EventStore.should.equal('store');
85
+ });
86
+ });
87
+
88
+ describe('when registering a unique property constraint with duplicate removal events', () => {
89
+ it('should register each event type only once in first-registration order', async () => {
90
+ const request = await registerConstraint(propertyConstraint(AddressReleased, AddressExpired, AddressReleased, AddressRevoked, AddressExpired));
91
+ request.Constraints[0].RemovedWith.should.deep.equal(['address-released', 'address-expired', 'address-revoked']);
92
+ });
93
+ });
94
+
95
+ describe('when registering a legacy single-field unique property capture', () => {
96
+ it('should retain the singular removal event type', async () => {
97
+ class LegacyConstraint implements IConstraint {
98
+ define(builder: IConstraintBuilder): void {
99
+ (builder as ConstraintBuilder).capture.uniqueConstraint = {
100
+ eventDefinitions: [{ eventTypeId: 'address-reserved', properties: ['emailAddress'] }],
101
+ ignoreCasing: false,
102
+ removedWithEventTypeId: 'address-released'
103
+ };
104
+ }
105
+ }
106
+ constraint('legacy-address')(LegacyConstraint);
107
+ const request = await registerConstraint(LegacyConstraint);
108
+ request.Constraints[0].RemovedWith.should.deep.equal(['address-released']);
109
+ });
110
+ });
111
+
112
+ describe('when registering a unique property capture with legacy and accumulated removal events', () => {
113
+ it('should retain both the legacy event and new events without duplicates', async () => {
114
+ class MixedCaptureConstraint implements IConstraint {
115
+ define(builder: IConstraintBuilder): void {
116
+ (builder as ConstraintBuilder).capture.uniqueConstraint = {
117
+ eventDefinitions: [{ eventTypeId: 'address-reserved', properties: ['emailAddress'] }],
118
+ ignoreCasing: false,
119
+ removedWithEventTypeId: 'address-released',
120
+ removedWithEventTypeIds: ['address-expired', 'address-revoked', 'address-expired']
121
+ };
122
+ }
123
+ }
124
+ constraint('mixed-address')(MixedCaptureConstraint);
125
+ const request = await registerConstraint(MixedCaptureConstraint);
126
+ request.Constraints[0].RemovedWith.should.deep.equal(['address-released', 'address-expired', 'address-revoked']);
127
+ });
128
+ });
129
+
130
+ describe('when capturing several removal events through the fluent builder', () => {
131
+ it('should retain the last event in the legacy singular field', () => {
132
+ const builder = new ConstraintBuilder('reserved-address');
133
+ builder.unique(unique => unique.removedWith(AddressReleased).removedWith(AddressExpired));
134
+ should.equal(builder.capture.uniqueConstraint?.removedWithEventTypeId, 'address-expired');
135
+ builder.capture.uniqueConstraint!.removedWithEventTypeIds!.should.deep.equal(['address-released', 'address-expired']);
136
+ });
137
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/chronicle",
3
- "version": "6.3.0",
3
+ "version": "6.3.1",
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",