@photon-grove/evt 0.1.2 → 0.2.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 (66) hide show
  1. package/README.md +15 -3
  2. package/dist/dynamodb/head.d.ts +6 -0
  3. package/dist/dynamodb/head.d.ts.map +1 -1
  4. package/dist/dynamodb/head.js +11 -0
  5. package/dist/dynamodb/head.js.map +1 -1
  6. package/dist/dynamodb/index.d.ts +1 -1
  7. package/dist/dynamodb/index.d.ts.map +1 -1
  8. package/dist/dynamodb/index.js +1 -1
  9. package/dist/dynamodb/index.js.map +1 -1
  10. package/dist/dynamodb/repository.d.ts +9 -2
  11. package/dist/dynamodb/repository.d.ts.map +1 -1
  12. package/dist/dynamodb/repository.js +114 -35
  13. package/dist/dynamodb/repository.js.map +1 -1
  14. package/dist/dynamodb/requests.d.ts +36 -5
  15. package/dist/dynamodb/requests.d.ts.map +1 -1
  16. package/dist/dynamodb/requests.js +56 -13
  17. package/dist/dynamodb/requests.js.map +1 -1
  18. package/dist/errors.d.ts +38 -4
  19. package/dist/errors.d.ts.map +1 -1
  20. package/dist/errors.js +45 -4
  21. package/dist/errors.js.map +1 -1
  22. package/dist/index.d.ts +3 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +3 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/memory/repository.d.ts +3 -2
  27. package/dist/memory/repository.d.ts.map +1 -1
  28. package/dist/memory/repository.js +78 -29
  29. package/dist/memory/repository.js.map +1 -1
  30. package/dist/postgres/repository.d.ts +9 -2
  31. package/dist/postgres/repository.d.ts.map +1 -1
  32. package/dist/postgres/repository.js +107 -36
  33. package/dist/postgres/repository.js.map +1 -1
  34. package/dist/postgres/schema.d.ts.map +1 -1
  35. package/dist/postgres/schema.js +16 -0
  36. package/dist/postgres/schema.js.map +1 -1
  37. package/dist/repository.d.ts +75 -0
  38. package/dist/repository.d.ts.map +1 -1
  39. package/dist/repository.js +89 -3
  40. package/dist/repository.js.map +1 -1
  41. package/dist/staging.d.ts +28 -0
  42. package/dist/staging.d.ts.map +1 -0
  43. package/dist/staging.js +89 -0
  44. package/dist/staging.js.map +1 -0
  45. package/dist/store.d.ts +11 -1
  46. package/dist/store.d.ts.map +1 -1
  47. package/dist/store.js +30 -71
  48. package/dist/store.js.map +1 -1
  49. package/dist/transaction.d.ts +113 -0
  50. package/dist/transaction.d.ts.map +1 -0
  51. package/dist/transaction.js +207 -0
  52. package/dist/transaction.js.map +1 -0
  53. package/package.json +1 -1
  54. package/src/dynamodb/head.ts +15 -0
  55. package/src/dynamodb/index.ts +1 -0
  56. package/src/dynamodb/repository.ts +162 -41
  57. package/src/dynamodb/requests.ts +98 -14
  58. package/src/errors.ts +63 -4
  59. package/src/index.ts +16 -7
  60. package/src/memory/repository.ts +93 -32
  61. package/src/postgres/repository.ts +133 -48
  62. package/src/postgres/schema.ts +16 -0
  63. package/src/repository.ts +169 -2
  64. package/src/staging.ts +138 -0
  65. package/src/store.ts +47 -96
  66. package/src/transaction.ts +322 -0
@@ -1,10 +1,11 @@
1
1
  // The `TransactWriteItems` actions of a commit and of a snapshot write, built from the storage
2
2
  // format alone (storage format, "Writes"). Every commit opens with the two control checks, the
3
- // feature marker's and the rebuild lock's, then its projector operations, then writes the stream:
4
- // its head update, its event puts, and its snapshot put when it has one.
3
+ // feature marker's and the rebuild lock's, then its projector operations, then writes each stream:
4
+ // its head update, its event puts, and its snapshot put when it has one. A transaction then checks
5
+ // the head of every stream it fenced.
5
6
  import { int64Argument, safeIntegerArgument } from '../fields.js';
6
7
  import { EvtError } from '../errors.js';
7
- import { headUpdate } from './head.js';
8
+ import { headFence, headUpdate } from './head.js';
8
9
  import { HEAD_SORT_KEY, SNAPSHOT_SORT_KEY, eventItem, snapshotItem } from './item.js';
9
10
  import { FEATURES_PK, REBUILD_LOCK_PK } from './marker.js';
10
11
  import { DYNAMODB_BACKEND } from './views.js';
@@ -60,19 +61,48 @@ export function rebuildLockCheck(table) {
60
61
  /**
61
62
  * The actions of a commit with at least one event, in order, by a writer that validated the
62
63
  * feature manifest at `markerVersion`. `ttl` is given only for a stream with retention. A projector
63
- * group for any backend but DynamoDB is refused. Exported for the compatibility fixtures: its
64
- * signature changes when commits span streams.
64
+ * group for any backend but DynamoDB is refused. Exported for the compatibility fixtures.
65
65
  */
66
66
  export function commitTransaction(table, commit, markerVersion, ttl) {
67
- const first = commit.events[0];
68
- const last = commit.events.at(-1);
69
- if (first === undefined || last === undefined) {
67
+ if (commit.events.length === 0) {
70
68
  throw new RangeError('a commit transaction needs at least one event');
71
69
  }
70
+ const transaction = { streams: [commit], fences: [], projections: commit.projections ?? [] };
71
+ return transactionItems(table, transaction, markerVersion, () => ttl);
72
+ }
73
+ /**
74
+ * The actions of a normalized transaction that writes or fences at least one stream, in order:
75
+ * the control checks, the projector operations in declaration order, every written stream's head
76
+ * update, event puts and snapshot put, then a check on every fenced stream's head. `ttl` gives a
77
+ * written stream's `ttl`s when it has retention. Exported for the compatibility fixtures.
78
+ */
79
+ export function transactionItems(table, transaction, markerVersion, ttl) {
80
+ return buildTransaction(table, transaction, markerVersion, ttl).items;
81
+ }
82
+ /** {@link transactionItems}, with where each stream's and fence's actions sit. */
83
+ export function buildTransaction(table, transaction, markerVersion, ttl) {
72
84
  const items = [markerCheck(table, markerVersion), rebuildLockCheck(table)];
73
- items.push(...projectorItems(commit));
85
+ items.push(...projectorItems(transaction.projections));
86
+ const projectorEnd = items.length;
87
+ const streams = [];
88
+ for (const commit of transaction.streams) {
89
+ const head = items.length;
90
+ items.push(...streamItems(table, commit, ttl(commit)));
91
+ const eventsEnd = head + 1 + commit.events.length;
92
+ streams.push({ commit, head, eventsEnd, snapshot: items.length > eventsEnd ? eventsEnd : null });
93
+ }
94
+ const fences = transaction.fences.map((fence) => {
95
+ items.push(fenceCheck(table, fence));
96
+ return { index: items.length - 1, fence };
97
+ });
98
+ return { items, layout: { projectorEnd, streams, fences } };
99
+ }
100
+ // A written stream's actions: its head update, its event puts and its snapshot put.
101
+ function streamItems(table, commit, ttl) {
102
+ const first = commit.events[0];
103
+ const last = commit.events.at(-1);
74
104
  const head = headUpdate(commit.entityId, first.sequence, last.sequence, ttl?.head);
75
- items.push(headUpdateItem(table, head));
105
+ const items = [headUpdateItem(table, head)];
76
106
  for (const event of commit.events) {
77
107
  items.push(eventPut(table, event, ttl?.items));
78
108
  }
@@ -89,6 +119,19 @@ export function commitTransaction(table, commit, markerVersion, ttl) {
89
119
  }
90
120
  return items;
91
121
  }
122
+ // The check on a fenced stream's head item: it still has the head the transaction read.
123
+ function fenceCheck(table, fence) {
124
+ const action = headFence(fence.entityId, fence.head);
125
+ const check = {
126
+ TableName: table,
127
+ Key: headKey(fence.entityId),
128
+ ConditionExpression: action.conditionExpression,
129
+ };
130
+ if (action.values.length > 0) {
131
+ check.ExpressionAttributeValues = Object.fromEntries(action.values.map(([placeholder, value]) => [placeholder, number(value)]));
132
+ }
133
+ return { ConditionCheck: check };
134
+ }
92
135
  /**
93
136
  * The actions of a snapshot written outside a commit: the marker check, the head guard, and the
94
137
  * put, which never lowers the stored snapshot. It carries no rebuild-lock check. `ttl` is given
@@ -137,10 +180,10 @@ function snapshotGuard(table, entityId, eventSequence, ttl) {
137
180
  },
138
181
  };
139
182
  }
140
- /** The DynamoDB actions of a commit's projector groups, in order. */
141
- export function projectorItems(commit) {
183
+ /** The DynamoDB actions of projector groups, in order. */
184
+ export function projectorItems(groups) {
142
185
  const items = [];
143
- for (const group of commit.projections ?? []) {
186
+ for (const group of groups) {
144
187
  if (group.backend !== DYNAMODB_BACKEND) {
145
188
  throw new EvtError('invalidCommit', `invalid commit: a DynamoDB repository can't write a ${group.backend} projector group`);
146
189
  }
@@ -1 +1 @@
1
- {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/dynamodb/requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/dynamodb/requests.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -11,6 +11,10 @@
11
11
  * - `conflict`: optimistic concurrency failed. Another writer committed since the stream was
12
12
  * read. Reload and run the command again.
13
13
  * - `sequenceGap`: a commit or a load skips a sequence. A conflict.
14
+ * - `fenceConflict`: another writer moved a stream the transaction read but didn't write. A
15
+ * conflict, retryable when the engine observed the fenced head.
16
+ * - `retentionConflict`: a transaction fenced a stream whose entity type has retention, which a
17
+ * fence can't protect. Nothing was written.
14
18
  * - `streamHeadDrift`: a stream's head disagrees with its events or snapshot. Never retried.
15
19
  * - `commitTooLarge`: the commit is over the transaction budget. Nothing was written.
16
20
  * - `compactionUncovered`: no snapshot covers the events compaction was asked to delete.
@@ -31,7 +35,7 @@
31
35
  * - `replay`: a stored event failed to upcast or decode while an aggregate loaded.
32
36
  * - `snapshot`: a stored snapshot failed to decode while an aggregate loaded.
33
37
  */
34
- export type EvtErrorCode = 'invalidJson' | 'invalidRecord' | 'invalidArgument' | 'invalidCommit' | 'conflict' | 'sequenceGap' | 'streamHeadDrift' | 'commitTooLarge' | 'compactionUncovered' | 'reservedEntityId' | 'unsupportedFeature' | 'streamHeadsNotMigrated' | 'storeNotInitialized' | 'featureManifestChanged' | 'transient' | 'rebuildInProgress' | 'historyDependentProjection' | 'projectorOnlyCommit' | 'replay' | 'snapshot';
38
+ export type EvtErrorCode = 'invalidJson' | 'invalidRecord' | 'invalidArgument' | 'invalidCommit' | 'conflict' | 'sequenceGap' | 'fenceConflict' | 'retentionConflict' | 'streamHeadDrift' | 'commitTooLarge' | 'compactionUncovered' | 'reservedEntityId' | 'unsupportedFeature' | 'streamHeadsNotMigrated' | 'storeNotInitialized' | 'featureManifestChanged' | 'transient' | 'rebuildInProgress' | 'historyDependentProjection' | 'projectorOnlyCommit' | 'replay' | 'snapshot';
35
39
  export declare class EvtError extends Error {
36
40
  readonly name: string;
37
41
  readonly code: EvtErrorCode;
@@ -167,6 +171,32 @@ export declare class RebuildInProgressError extends EvtError {
167
171
  readonly code = "rebuildInProgress";
168
172
  constructor();
169
173
  }
174
+ /** Where a read fence's head came from (ADR 0004): the engine's own read, or the caller. */
175
+ export type FenceProvenance = 'engine' | 'caller';
176
+ /**
177
+ * A read fence failed: another writer moved a stream the transaction read but didn't write past
178
+ * the head it observed. A fence the engine filled is retryable, since loading again observes the
179
+ * new head. A caller-stamped one isn't: the caller's input is stale. Nothing was written.
180
+ */
181
+ export declare class FenceConflictError extends EvtError {
182
+ readonly name = "FenceConflictError";
183
+ readonly code = "fenceConflict";
184
+ readonly entityId: string;
185
+ /** The head the transaction fenced the stream at. */
186
+ readonly head: bigint;
187
+ readonly provenance: FenceProvenance;
188
+ constructor(entityId: string, head: bigint, provenance: FenceProvenance);
189
+ }
190
+ /**
191
+ * A transaction fenced a stream whose entity type has retention: TTL deletes items in no order, so
192
+ * a fence on a retained stream protects nothing. Nothing was written.
193
+ */
194
+ export declare class RetentionConflictError extends EvtError {
195
+ readonly name = "RetentionConflictError";
196
+ readonly code = "retentionConflict";
197
+ readonly entityType: string;
198
+ constructor(entityType: string);
199
+ }
170
200
  /**
171
201
  * Compaction was refused because the store declares the entity's type history-dependent: its
172
202
  * projectors' rebuild replays the events compaction would delete. Nothing was deleted.
@@ -206,11 +236,15 @@ export declare class SnapshotError extends EvtError {
206
236
  readonly entityId: string;
207
237
  constructor(entityId: string, cause: unknown);
208
238
  }
209
- /** Whether an error is an optimistic-concurrency conflict: a `conflict` or a `sequenceGap`. */
239
+ /**
240
+ * Whether an error is an optimistic-concurrency conflict: a `conflict`, a `sequenceGap` or a
241
+ * `fenceConflict`.
242
+ */
210
243
  export declare function isConflict(error: unknown): boolean;
211
244
  /**
212
- * Whether reloading and running the command again may succeed: after a conflict, while a rebuild
213
- * holds the store, after the feature manifest changed under the writer, or after throttling.
245
+ * Whether reloading and running the command again may succeed: after a conflict (a fence the
246
+ * caller stamped excepted), while a rebuild holds the store, after the feature manifest changed
247
+ * under the writer, or after throttling.
214
248
  */
215
249
  export declare function isRetryable(error: unknown): boolean;
216
250
  /** An error's message, or the value itself as text. */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/errors.js CHANGED
@@ -174,6 +174,38 @@ export class RebuildInProgressError extends EvtError {
174
174
  super('rebuildInProgress', 'a projection rebuild is in progress');
175
175
  }
176
176
  }
177
+ /**
178
+ * A read fence failed: another writer moved a stream the transaction read but didn't write past
179
+ * the head it observed. A fence the engine filled is retryable, since loading again observes the
180
+ * new head. A caller-stamped one isn't: the caller's input is stale. Nothing was written.
181
+ */
182
+ export class FenceConflictError extends EvtError {
183
+ name = 'FenceConflictError';
184
+ code = 'fenceConflict';
185
+ entityId;
186
+ /** The head the transaction fenced the stream at. */
187
+ head;
188
+ provenance;
189
+ constructor(entityId, head, provenance) {
190
+ super('fenceConflict', `read fence failed for ${entityId} at head ${head} (${provenance})`);
191
+ this.entityId = entityId;
192
+ this.head = head;
193
+ this.provenance = provenance;
194
+ }
195
+ }
196
+ /**
197
+ * A transaction fenced a stream whose entity type has retention: TTL deletes items in no order, so
198
+ * a fence on a retained stream protects nothing. Nothing was written.
199
+ */
200
+ export class RetentionConflictError extends EvtError {
201
+ name = 'RetentionConflictError';
202
+ code = 'retentionConflict';
203
+ entityType;
204
+ constructor(entityType) {
205
+ super('retentionConflict', `read fences refused for retention-enabled entity type ${entityType}`);
206
+ this.entityType = entityType;
207
+ }
208
+ }
177
209
  /**
178
210
  * Compaction was refused because the store declares the entity's type history-dependent: its
179
211
  * projectors' rebuild replays the events compaction would delete. Nothing was deleted.
@@ -231,15 +263,24 @@ export class SnapshotError extends EvtError {
231
263
  this.entityId = entityId;
232
264
  }
233
265
  }
234
- /** Whether an error is an optimistic-concurrency conflict: a `conflict` or a `sequenceGap`. */
266
+ /**
267
+ * Whether an error is an optimistic-concurrency conflict: a `conflict`, a `sequenceGap` or a
268
+ * `fenceConflict`.
269
+ */
235
270
  export function isConflict(error) {
236
- return error instanceof EvtError && (error.code === 'conflict' || error.code === 'sequenceGap');
271
+ return (error instanceof EvtError &&
272
+ (error.code === 'conflict' || error.code === 'sequenceGap' || error.code === 'fenceConflict'));
237
273
  }
238
274
  /**
239
- * Whether reloading and running the command again may succeed: after a conflict, while a rebuild
240
- * holds the store, after the feature manifest changed under the writer, or after throttling.
275
+ * Whether reloading and running the command again may succeed: after a conflict (a fence the
276
+ * caller stamped excepted), while a rebuild holds the store, after the feature manifest changed
277
+ * under the writer, or after throttling.
241
278
  */
242
279
  export function isRetryable(error) {
280
+ // A caller-stamped fence stays stale however often the command runs again.
281
+ if (error instanceof FenceConflictError) {
282
+ return error.provenance === 'engine';
283
+ }
243
284
  if (isConflict(error)) {
244
285
  return true;
245
286
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,6FAA6F;AAC7F,uEAAuE;AAyDvE,MAAM,OAAO,QAAS,SAAQ,KAAK;IACf,IAAI,GAAW,UAAU,CAAA;IAClC,IAAI,CAAc;IAE3B,YAAY,IAAkB,EAAE,OAAe,EAAE,OAA2B;QAC1E,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED,yFAAyF;AACzF,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACvB,IAAI,GAAG,eAAe,CAAA;IACtB,IAAI,GAAG,UAAU,CAAA;IAC1B,QAAQ,CAAQ;IAEzB,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CAAC,UAAU,EAAE,sBAAsB,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;CACF;AAED,+FAA+F;AAC/F,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAC1B,IAAI,GAAG,kBAAkB,CAAA;IACzB,IAAI,GAAG,aAAa,CAAA;IAC7B,QAAQ,CAAQ;IACzB,wCAAwC;IAC/B,KAAK,CAAQ;IACtB,wDAAwD;IAC/C,KAAK,CAAQ;IAEtB,YAAY,QAAgB,EAAE,KAAa,EAAE,KAAa;QACxD,KAAK,CACH,aAAa,EACb,sBAAsB,QAAQ,oCAAoC,KAAK,OAAO,KAAK,OAAO;YACxF,kDAAkD,CACrD,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IAC9B,IAAI,GAAG,sBAAsB,CAAA;IAC7B,IAAI,GAAG,iBAAiB,CAAA;IACjC,QAAQ,CAAQ;IACzB,4DAA4D;IACnD,MAAM,CAAe;IAC9B,qEAAqE;IAC5D,OAAO,CAAQ;IAExB,YAAY,QAAgB,EAAE,MAAqB,EAAE,OAAe;QAClE,KAAK,CACH,iBAAiB,EACjB,+BAA+B,QAAQ,iBAAiB,MAAM,IAAI,QAAQ,IAAI;YAC5E,gBAAgB,OAAO,EAAE,CAC5B,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF;AAED,gGAAgG;AAChG,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC7B,IAAI,GAAG,qBAAqB,CAAA;IAC5B,IAAI,GAAG,gBAAgB,CAAA;IAChC,OAAO,CAAQ;IACf,KAAK,CAAQ;IACb,WAAW,CAAQ;IAE5B,YAAY,OAAe,EAAE,KAAa,EAAE,WAAmB;QAC7D,KAAK,CACH,gBAAgB,EAChB,sCAAsC,OAAO,aAAa,KAAK,UAAU;YACvE,gBAAgB,WAAW,EAAE,CAChC,CAAA;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;CACF;AAED,oFAAoF;AACpF,MAAM,OAAO,wBAAyB,SAAQ,QAAQ;IAClC,IAAI,GAAG,0BAA0B,CAAA;IACjC,IAAI,GAAG,qBAAqB,CAAA;IACrC,QAAQ,CAAQ;IAChB,OAAO,CAAQ;IACxB,+EAA+E;IACtE,OAAO,CAAe;IAE/B,YAAY,QAAgB,EAAE,OAAe,EAAE,OAAsB;QACnE,KAAK,CACH,qBAAqB,EACrB,qEAAqE;YACnE,WAAW,QAAQ,aAAa,OAAO,qBAAqB,OAAO,IAAI,SAAS,GAAG,CACtF,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF;AAED,uFAAuF;AACvF,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IAC/B,IAAI,GAAG,uBAAuB,CAAA;IAC9B,IAAI,GAAG,kBAAkB,CAAA;IAClC,QAAQ,CAAQ;IAEzB,YAAY,QAAgB;QAC1B,KAAK,CACH,kBAAkB,EAClB,aAAa,QAAQ,yDAAyD,CAC/E,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;CACF;AAQD;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,QAAQ;IACjC,IAAI,GAAG,yBAAyB,CAAA;IAChC,IAAI,GAAG,oBAAoB,CAAA;IAC7C,8CAA8C;IACrC,WAAW,CAAwB;IAE5C,YAAY,WAAmC;QAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClF,KAAK,CAAC,oBAAoB,EAAE,wCAAwC,KAAK,sBAAsB,CAAC,CAAA;QAChG,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,2BAA4B,SAAQ,QAAQ;IACrC,IAAI,GAAG,6BAA6B,CAAA;IACpC,IAAI,GAAG,wBAAwB,CAAA;IAEjD;QACE,KAAK,CACH,wBAAwB,EACxB,yFAAyF;YACvF,kCAAkC,CACrC,CAAA;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,wBAAyB,SAAQ,QAAQ;IAClC,IAAI,GAAG,0BAA0B,CAAA;IACjC,IAAI,GAAG,qBAAqB,CAAA;IAE9C;QACE,KAAK,CACH,qBAAqB,EACrB,2FAA2F;YACzF,2EAA2E,CAC9E,CAAA;IACH,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,2BAA4B,SAAQ,QAAQ;IACrC,IAAI,GAAG,6BAA6B,CAAA;IACpC,IAAI,GAAG,wBAAwB,CAAA;IAEjD,YAAY,OAA2B;QACrC,KAAK,CAAC,wBAAwB,EAAE,4CAA4C,EAAE,OAAO,CAAC,CAAA;IACxF,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,QAAQ;IACxB,IAAI,GAAG,gBAAgB,CAAA;IACvB,IAAI,GAAG,WAAW,CAAA;IAEpC,YAAY,MAAc,EAAE,OAA2B;QACrD,KAAK,CAAC,WAAW,EAAE,sBAAsB,MAAM,EAAE,EAAE,OAAO,CAAC,CAAA;IAC7D,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAChC,IAAI,GAAG,wBAAwB,CAAA;IAC/B,IAAI,GAAG,mBAAmB,CAAA;IAE5C;QACE,KAAK,CAAC,mBAAmB,EAAE,qCAAqC,CAAC,CAAA;IACnE,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,+BAAgC,SAAQ,QAAQ;IACzC,IAAI,GAAG,iCAAiC,CAAA;IACxC,IAAI,GAAG,4BAA4B,CAAA;IAC5C,UAAU,CAAQ;IAClB,QAAQ,CAAQ;IAEzB,YAAY,UAAkB,EAAE,QAAgB;QAC9C,KAAK,CACH,4BAA4B,EAC5B,eAAe,UAAU,8DAA8D;YACrF,uCAAuC,QAAQ,GAAG,CACrD,CAAA;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,QAAQ;IAClC,IAAI,GAAG,0BAA0B,CAAA;IACjC,IAAI,GAAG,qBAAqB,CAAA;IAC9C,wDAAwD;IAC/C,UAAU,CAAQ;IAE3B,YAAY,UAAkB;QAC5B,KAAK,CACH,qBAAqB,EACrB,oBAAoB,UAAU,oDAAoD;YAChF,kCAAkC,CACrC,CAAA;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;CACF;AAED,+FAA+F;AAC/F,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACrB,IAAI,GAAG,aAAa,CAAA;IACpB,IAAI,GAAG,QAAQ,CAAA;IACxB,SAAS,CAAQ;IAC1B,uEAAuE;IAC9D,OAAO,CAAQ;IACf,KAAK,CAAqB;IAEnC,YACE,SAAiB,EACjB,OAAe,EACf,KAA0B,EAC1B,MAAc,EACd,KAAe;QAEf,MAAM,KAAK,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAA;QAC3D,KAAK,CAAC,QAAQ,EAAE,uBAAuB,KAAK,IAAI,SAAS,KAAK,OAAO,KAAK,MAAM,EAAE,EAAE,EAAC,KAAK,EAAC,CAAC,CAAA;QAC5F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;CACF;AAED,+FAA+F;AAC/F,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACvB,IAAI,GAAG,eAAe,CAAA;IACtB,IAAI,GAAG,UAAU,CAAA;IAC1B,QAAQ,CAAQ;IAEzB,YAAY,QAAgB,EAAE,KAAc;QAC1C,KAAK,CAAC,UAAU,EAAE,gCAAgC,QAAQ,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAC,KAAK,EAAC,CAAC,CAAA;QAC3F,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;CACF;AAED,+FAA+F;AAC/F,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,KAAK,YAAY,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;AACjG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,KAAK,YAAY,QAAQ;QACzB,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB;YACjC,KAAK,CAAC,IAAI,KAAK,wBAAwB;YACvC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAC9B,CAAA;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,14 +2,15 @@ export { type Aggregate, type AggregateDefinition, type Decision, type EventDefi
2
2
  export { base64Decode, base64Encode } from './base64.js';
3
3
  export { type Codec, type JsonOptions, type StandardResult, type StandardSchemaV1, json, } from './codec.js';
4
4
  export { encodeEnvelope, decodeEnvelope, messageAttributes } from './envelope.js';
5
- export { CommitTooLargeError, CompactionUncoveredError, ConflictError, EvtError, type EvtErrorCode, FeatureManifestChangedError, HistoryDependentProjectionError, ProjectorOnlyCommitError, RebuildInProgressError, ReplayError, ReservedEntityIdError, SequenceGapError, SnapshotError, StoreNotInitializedError, StreamHeadDriftError, StreamHeadsNotMigratedError, TransientError, UnsupportedFeatureError, type FeaturePair, isConflict, isRetryable, } from './errors.js';
5
+ export { CommitTooLargeError, CompactionUncoveredError, ConflictError, EvtError, type EvtErrorCode, FeatureManifestChangedError, FenceConflictError, type FenceProvenance, HistoryDependentProjectionError, ProjectorOnlyCommitError, RebuildInProgressError, ReplayError, ReservedEntityIdError, RetentionConflictError, SequenceGapError, SnapshotError, StoreNotInitializedError, StreamHeadDriftError, StreamHeadsNotMigratedError, TransientError, UnsupportedFeatureError, type FeaturePair, isConflict, isRetryable, } from './errors.js';
6
6
  export { type SerializedEvent, type SerializedSnapshot, decodeEvent, decodeSnapshot, encodeEvent, encodeSnapshot, eventId, } from './event.js';
7
7
  export { type FeatureManifest, type ManifestTexts, STREAM_HEADS_FEATURE, STREAM_HEADS_VERSION, SUPPORTED_FEATURES, decodeManifest, encodeManifest, } from './features.js';
8
8
  export { JsonNumber, type JsonValue, parseJson, stringifyJson } from './json.js';
9
9
  export { type Metadata, type Origin, decodeMetadata, effectiveCausationId, emptyMetadata, encodeMetadata, } from './metadata.js';
10
- export type { CallOptions, Commit, NewSnapshot, ProjectorGroup, Repository, StoreInitializer, } from './repository.js';
10
+ export { type CallOptions, type Commit, type NewSnapshot, type NormalizedTransaction, type ProjectorGroup, type ReadFence, type Repository, type StoreInitializer, type TransactionCommit, type TransactionalRepository, normalizeTransaction, } from './repository.js';
11
11
  export { DEFAULT_RETRY_POLICY, type RetryPolicy, retryDelay, } from './retry.js';
12
12
  export { MAX_COMMIT_ITEM_BYTES, snapshotCommitSize, snapshotEventsDue } from './snapshots.js';
13
13
  export { compareUtf8, utf8Length } from './utf8.js';
14
+ export { type CallerFence, StreamRead, Transaction, type TransactionResult } from './transaction.js';
14
15
  export { DEFAULT_SNAPSHOT_INTERVAL, type ExecuteOptions, type ExecuteResult, type Loaded, type RetryOptions, Store, type StoreOptions, } from './store.js';
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa,CAAA;AACtD,OAAO,EACL,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,IAAI,GACL,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,QAAQ,EACR,KAAK,YAAY,EACjB,2BAA2B,EAC3B,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EACd,uBAAuB,EACvB,KAAK,WAAW,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAC,UAAU,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,WAAW,CAAA;AAC9E,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,WAAW,EACX,MAAM,EACN,WAAW,EACX,cAAc,EACd,UAAU,EACV,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,oBAAoB,EACpB,KAAK,WAAW,EAChB,UAAU,GACX,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAA;AAC3F,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,WAAW,CAAA;AACjD,OAAO,EACL,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,EACL,KAAK,YAAY,GAClB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa,CAAA;AACtD,OAAO,EACL,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,IAAI,GACL,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,QAAQ,EACR,KAAK,YAAY,EACjB,2BAA2B,EAC3B,kBAAkB,EAClB,KAAK,eAAe,EACpB,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EACd,uBAAuB,EACvB,KAAK,WAAW,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAC,UAAU,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,WAAW,CAAA;AAC9E,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,oBAAoB,EACpB,KAAK,WAAW,EAChB,UAAU,GACX,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAA;AAC3F,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,WAAW,CAAA;AACjD,OAAO,EAAC,KAAK,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAC,MAAM,kBAAkB,CAAA;AAClG,OAAO,EACL,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,EACL,KAAK,YAAY,GAClB,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -5,13 +5,15 @@ export { defineAggregate, defineEvents, jsonUpcaster, } from './aggregate.js';
5
5
  export { base64Decode, base64Encode } from './base64.js';
6
6
  export { json, } from './codec.js';
7
7
  export { encodeEnvelope, decodeEnvelope, messageAttributes } from './envelope.js';
8
- export { CommitTooLargeError, CompactionUncoveredError, ConflictError, EvtError, FeatureManifestChangedError, HistoryDependentProjectionError, ProjectorOnlyCommitError, RebuildInProgressError, ReplayError, ReservedEntityIdError, SequenceGapError, SnapshotError, StoreNotInitializedError, StreamHeadDriftError, StreamHeadsNotMigratedError, TransientError, UnsupportedFeatureError, isConflict, isRetryable, } from './errors.js';
8
+ export { CommitTooLargeError, CompactionUncoveredError, ConflictError, EvtError, FeatureManifestChangedError, FenceConflictError, HistoryDependentProjectionError, ProjectorOnlyCommitError, RebuildInProgressError, ReplayError, ReservedEntityIdError, RetentionConflictError, SequenceGapError, SnapshotError, StoreNotInitializedError, StreamHeadDriftError, StreamHeadsNotMigratedError, TransientError, UnsupportedFeatureError, isConflict, isRetryable, } from './errors.js';
9
9
  export { decodeEvent, decodeSnapshot, encodeEvent, encodeSnapshot, eventId, } from './event.js';
10
10
  export { STREAM_HEADS_FEATURE, STREAM_HEADS_VERSION, SUPPORTED_FEATURES, decodeManifest, encodeManifest, } from './features.js';
11
11
  export { JsonNumber, parseJson, stringifyJson } from './json.js';
12
12
  export { decodeMetadata, effectiveCausationId, emptyMetadata, encodeMetadata, } from './metadata.js';
13
+ export { normalizeTransaction, } from './repository.js';
13
14
  export { DEFAULT_RETRY_POLICY, retryDelay, } from './retry.js';
14
15
  export { MAX_COMMIT_ITEM_BYTES, snapshotCommitSize, snapshotEventsDue } from './snapshots.js';
15
16
  export { compareUtf8, utf8Length } from './utf8.js';
17
+ export { StreamRead, Transaction } from './transaction.js';
16
18
  export { DEFAULT_SNAPSHOT_INTERVAL, Store, } from './store.js';
17
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wFAAwF;AACxF,mFAAmF;AAEnF,OAAO,EAWL,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa,CAAA;AACtD,OAAO,EAKL,IAAI,GACL,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,QAAQ,EAER,2BAA2B,EAC3B,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EACd,uBAAuB,EAEvB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,OAAO,EAGL,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAA;AACnB,OAAO,EAGL,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAC,UAAU,EAAkB,SAAS,EAAE,aAAa,EAAC,MAAM,WAAW,CAAA;AAC9E,OAAO,EAGL,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAA;AAStB,OAAO,EACL,oBAAoB,EAEpB,UAAU,GACX,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAA;AAC3F,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,WAAW,CAAA;AACjD,OAAO,EACL,yBAAyB,EAKzB,KAAK,GAEN,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wFAAwF;AACxF,mFAAmF;AAEnF,OAAO,EAWL,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa,CAAA;AACtD,OAAO,EAKL,IAAI,GACL,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,QAAQ,EAER,2BAA2B,EAC3B,kBAAkB,EAElB,+BAA+B,EAC/B,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EACd,uBAAuB,EAEvB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,OAAO,EAGL,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAA;AACnB,OAAO,EAGL,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAC,UAAU,EAAkB,SAAS,EAAE,aAAa,EAAC,MAAM,WAAW,CAAA;AAC9E,OAAO,EAGL,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,OAAO,EAWL,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,oBAAoB,EAEpB,UAAU,GACX,MAAM,YAAY,CAAA;AACnB,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAA;AAC3F,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,WAAW,CAAA;AACjD,OAAO,EAAmB,UAAU,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAA;AAClG,OAAO,EACL,yBAAyB,EAKzB,KAAK,GAEN,MAAM,YAAY,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { SerializedEvent, SerializedSnapshot } from '../event.js';
2
2
  import { type FeatureManifest } from '../features.js';
3
- import { type CallOptions, type Commit, type Repository, type StoreInitializer } from '../repository.js';
3
+ import { type CallOptions, type Commit, type StoreInitializer, type TransactionCommit, type TransactionalRepository } from '../repository.js';
4
4
  /** The state of the rebuild fence's two rows that a commit's lock check reads. */
5
5
  export interface RebuildState {
6
6
  /** The generation counter: odd while a rebuild holds the store or after a force-release. */
@@ -22,10 +22,11 @@ export interface RebuildState {
22
22
  * on its feature manifest, so {@link initialize} is needed only where code treats every backend
23
23
  * alike.
24
24
  */
25
- export declare class MemRepository implements Repository, StoreInitializer {
25
+ export declare class MemRepository implements TransactionalRepository, StoreInitializer {
26
26
  #private;
27
27
  initialize(options?: CallOptions): Promise<boolean>;
28
28
  commit(commit: Commit, options?: CallOptions): Promise<void>;
29
+ commitTransaction(transaction: TransactionCommit, options?: CallOptions): Promise<void>;
29
30
  events(entityId: string, options?: CallOptions): Promise<SerializedEvent[]>;
30
31
  eventsAfter(entityId: string, after: bigint, options?: CallOptions): Promise<SerializedEvent[]>;
31
32
  latest(entityId: string, n: number, options?: CallOptions): Promise<SerializedEvent[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/memory/repository.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAA;AACpE,OAAO,EACL,KAAK,eAAe,EAMrB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,gBAAgB,EAKtB,MAAM,kBAAkB,CAAA;AAUzB,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,4FAA4F;IAC5F,UAAU,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAA;CACtC;AAYD;;;;;;;;;;GAUG;AACH,qBAAa,aAAc,YAAW,UAAU,EAAE,gBAAgB;;IAI1D,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAUxD;IAEK,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CjE;IAEK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAEhF;IAEK,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAO5B;IAEK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAU3F;IAEK,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAK1F;IAEK,WAAW,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BvF;IAEK,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC5F;CAmCF;AA+DD,8FAA8F;AAC9F,MAAM,WAAW,YAAY;IAC3B,uFAAuF;IACvF,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;IACjD,gEAAgE;IAChE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,wDAAwD;IACxD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAC5C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAqB9D;AAED,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,QAAQ,IAAI,eAAe,GAAG,IAAI,CAAA;IAClC,2FAA2F;IAC3F,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,eAAe,CAAA;IAChE,qEAAqE;IACrE,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;CACtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,CA8BpE"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/memory/repository.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@
2
2
  // per stream that every commit raises, optimistic concurrency against it, the feature marker and
3
3
  // the rebuild-lock check, and the same failure classification and transaction budget. It's for
4
4
  // tests and local development.
5
- import { ConflictError, CompactionUncoveredError, EvtError, HistoryDependentProjectionError, RebuildInProgressError, SequenceGapError, StreamHeadDriftError, StreamHeadsNotMigratedError, } from '../errors.js';
5
+ import { ConflictError, CompactionUncoveredError, EvtError, FenceConflictError, HistoryDependentProjectionError, RebuildInProgressError, SequenceGapError, StreamHeadDriftError, StreamHeadsNotMigratedError, } from '../errors.js';
6
6
  import { checkSupported, checkWritable, declaresStreamHeads, entityTypeSet, withStreamHeads, } from '../features.js';
7
7
  import { int64Argument } from '../fields.js';
8
- import { checkBudget, checkNotReserved, commitSizes, validateCommit, } from '../repository.js';
8
+ import { checkBudget, checkFenceRetention, checkNotReserved, normalizeTransaction, rankFailures, transactionSizes, validateCommit, } from '../repository.js';
9
9
  // Read a repository's private state, for the fixtures. The class's static block sets them.
10
10
  let streamsOf;
11
11
  let controlsOf;
@@ -36,38 +36,73 @@ export class MemRepository {
36
36
  options?.signal?.throwIfAborted();
37
37
  validateCommit(commit);
38
38
  checkNotReserved(commit.entityId);
39
- if (commit.events.length === 0) {
40
- return;
39
+ if (commit.events.length > 0) {
40
+ this.#write(normalizeTransaction({ streams: [commit] }));
41
41
  }
42
+ }
43
+ async commitTransaction(transaction, options) {
44
+ options?.signal?.throwIfAborted();
45
+ const normalized = normalizeTransaction(transaction);
46
+ if (normalized.streams.length > 0 || normalized.fences.length > 0) {
47
+ this.#write(normalized);
48
+ }
49
+ }
50
+ // Writes a transaction, or refuses it with nothing written, in the order the live backends
51
+ // check: the budget, the marker and the fences' retention, the rebuild lock, then every stream
52
+ // and fence, ranked.
53
+ #write(transaction) {
42
54
  // Every backend budgets a commit the same way, so an oversized one fails before any write.
43
- checkBudget(commitSizes(commit, () => undefined));
55
+ checkBudget(transactionSizes(transaction, () => undefined));
44
56
  // The control rows come first, as the two checks that open every live commit: the marker,
45
57
  // then the rebuild lock, which an unsettled generation fails, a force-released one included.
46
58
  this.#checkManifest();
59
+ const retention = this.#controls.manifest?.retention ?? [];
60
+ checkFenceRetention(transaction, (entityType) => retention.includes(entityType));
47
61
  const { rebuild } = this.#controls;
48
62
  if (rebuild.lock !== null || rebuild.generation % 2n !== 0n) {
49
63
  throw new RebuildInProgressError();
50
64
  }
51
- const held = this.#streams.get(commit.entityId) ?? emptyStream();
52
- checkWrite(commit, held);
53
- // Copy everything before the first write, so a copy that throws leaves the stream as it was.
54
- const events = commit.events.map(cloneEvent);
55
- const last = events.at(-1).sequence;
56
- const snapshot = commit.snapshot && {
57
- entityType: commit.snapshot.entityType,
58
- entityId: commit.entityId,
59
- sequence: commit.snapshot.sequence,
60
- eventSequence: last,
61
- payload: copy(commit.snapshot.payload),
62
- };
63
- for (const event of events) {
64
- held.events.set(event.sequence, event);
65
+ const failures = [];
66
+ for (const stream of transaction.streams) {
67
+ const failure = checkWrite(stream, this.#streams.get(stream.entityId) ?? emptyStream());
68
+ if (failure !== null) {
69
+ failures.push(failure);
70
+ }
71
+ }
72
+ for (const fence of transaction.fences) {
73
+ const failure = checkFence(fence, this.#streams.get(fence.entityId) ?? emptyStream());
74
+ if (failure !== null) {
75
+ failures.push(failure);
76
+ }
77
+ }
78
+ const failure = rankFailures(failures);
79
+ if (failure !== undefined) {
80
+ throw failure;
65
81
  }
66
- held.head = held.head > last ? held.head : last;
67
- if (snapshot) {
68
- held.snapshot = snapshot;
82
+ // Copy everything before the first write, so a copy that throws leaves every stream as it was.
83
+ const writes = transaction.streams.map((commit) => {
84
+ const events = commit.events.map(cloneEvent);
85
+ const last = events.at(-1).sequence;
86
+ const snapshot = commit.snapshot && {
87
+ entityType: commit.snapshot.entityType,
88
+ entityId: commit.entityId,
89
+ sequence: commit.snapshot.sequence,
90
+ eventSequence: last,
91
+ payload: copy(commit.snapshot.payload),
92
+ };
93
+ return { entityId: commit.entityId, events, last, snapshot };
94
+ });
95
+ for (const { entityId, events, last, snapshot } of writes) {
96
+ const held = this.#streams.get(entityId) ?? emptyStream();
97
+ for (const event of events) {
98
+ held.events.set(event.sequence, event);
99
+ }
100
+ held.head = held.head > last ? held.head : last;
101
+ if (snapshot) {
102
+ held.snapshot = snapshot;
103
+ }
104
+ this.#streams.set(entityId, held);
69
105
  }
70
- this.#streams.set(commit.entityId, held);
71
106
  }
72
107
  async events(entityId, options) {
73
108
  return this.eventsAfter(entityId, 0n, options);
@@ -169,24 +204,38 @@ export class MemRepository {
169
204
  return events;
170
205
  }
171
206
  }
172
- // Refuses a commit the stored stream doesn't accept, as the live backends' conditions do. The
173
- // head update needs no head for a create and the head to be the sequence before the first event
174
- // for an append. Then no event may exist already, and a snapshot must follow the stored one.
207
+ // The failure of a commit the stored stream doesn't accept, as the live backends' conditions find
208
+ // it, or null. The head update needs no head for a create and the head to be the sequence before
209
+ // the first event for an append. Then no event may exist already, and a snapshot must follow the
210
+ // stored one.
175
211
  function checkWrite(commit, held) {
176
212
  const first = commit.events[0].sequence;
177
213
  const headPasses = first <= 1n ? held.head === 0n : held.head === first - 1n;
178
214
  if (!headPasses) {
179
- throw probe(commit.entityId, held, first);
215
+ return probe(commit.entityId, held, first);
180
216
  }
181
217
  // The head update passed and an event put would fail: an event sits above the head.
182
218
  if (commit.events.some((event) => held.events.has(event.sequence))) {
183
- throw drift(commit.entityId, held.head, derivedHead(held));
219
+ return drift(commit.entityId, held.head, derivedHead(held));
184
220
  }
185
221
  const snapshot = commit.snapshot;
186
222
  const stored = held.snapshot?.sequence ?? 0n;
187
223
  if (snapshot && snapshot.sequence !== stored + 1n) {
188
- throw new ConflictError(commit.entityId, `snapshot sequence moved: stored ${stored}, commit writes ${snapshot.sequence}`);
224
+ return new ConflictError(commit.entityId, `snapshot sequence moved: stored ${stored}, commit writes ${snapshot.sequence}`);
225
+ }
226
+ return null;
227
+ }
228
+ // The failure of a fence whose stream's head moved, or null: drift when the head disagrees with
229
+ // the log, and otherwise a fence conflict.
230
+ function checkFence(fence, held) {
231
+ if (held.head === fence.head) {
232
+ return null;
233
+ }
234
+ const derived = derivedHead(held);
235
+ if (held.head !== derived) {
236
+ return drift(fence.entityId, held.head, derived);
189
237
  }
238
+ return new FenceConflictError(fence.entityId, fence.head, fence.provenance);
190
239
  }
191
240
  // Classifies a failed head update the way the live backends' failure-path probe does: a stored
192
241
  // head that disagrees with the head derived from the log is drift. Memory has no concurrent