effect-dynamodb 1.21.0 → 1.23.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.
- package/README.md +2 -0
- package/dist/Aggregate.d.ts +9 -4
- package/dist/Aggregate.d.ts.map +1 -1
- package/dist/Aggregate.js +644 -219
- package/dist/Aggregate.js.map +1 -1
- package/dist/Batch.d.ts +7 -0
- package/dist/Batch.d.ts.map +1 -1
- package/dist/Batch.js +132 -7
- package/dist/Batch.js.map +1 -1
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +18 -32
- package/dist/Collection.js.map +1 -1
- package/dist/DynamoClient.d.ts +40 -3
- package/dist/DynamoClient.d.ts.map +1 -1
- package/dist/DynamoClient.js +72 -20
- package/dist/DynamoClient.js.map +1 -1
- package/dist/Entity.d.ts +138 -55
- package/dist/Entity.d.ts.map +1 -1
- package/dist/Entity.js +3061 -626
- package/dist/Entity.js.map +1 -1
- package/dist/EventStore.d.ts +30 -8
- package/dist/EventStore.d.ts.map +1 -1
- package/dist/EventStore.js +203 -155
- package/dist/EventStore.js.map +1 -1
- package/dist/Query.d.ts +75 -3
- package/dist/Query.d.ts.map +1 -1
- package/dist/Query.js +228 -30
- package/dist/Query.js.map +1 -1
- package/dist/Transaction.d.ts +13 -2
- package/dist/Transaction.d.ts.map +1 -1
- package/dist/Transaction.js +48 -38
- package/dist/Transaction.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/BoundCrud.d.ts +31 -20
- package/dist/internal/BoundCrud.d.ts.map +1 -1
- package/dist/internal/BoundCrud.js +1 -1
- package/dist/internal/BoundCrud.js.map +1 -1
- package/dist/internal/BoundQuery.d.ts +47 -2
- package/dist/internal/BoundQuery.d.ts.map +1 -1
- package/dist/internal/BoundQuery.js +182 -18
- package/dist/internal/BoundQuery.js.map +1 -1
- package/dist/internal/EntityCombinators.d.ts +32 -10
- package/dist/internal/EntityCombinators.d.ts.map +1 -1
- package/dist/internal/EntityCombinators.js +16 -7
- package/dist/internal/EntityCombinators.js.map +1 -1
- package/dist/internal/EntityOps.d.ts +44 -10
- package/dist/internal/EntityOps.d.ts.map +1 -1
- package/dist/internal/EntityOps.js +48 -5
- package/dist/internal/EntityOps.js.map +1 -1
- package/dist/internal/Expr.d.ts +23 -0
- package/dist/internal/Expr.d.ts.map +1 -1
- package/dist/internal/Expr.js +84 -9
- package/dist/internal/Expr.js.map +1 -1
- package/dist/internal/ItemSize.d.ts +38 -0
- package/dist/internal/ItemSize.d.ts.map +1 -0
- package/dist/internal/ItemSize.js +62 -0
- package/dist/internal/ItemSize.js.map +1 -0
- package/dist/internal/TransactWriteOps.d.ts +112 -19
- package/dist/internal/TransactWriteOps.d.ts.map +1 -1
- package/dist/internal/TransactWriteOps.js +210 -33
- package/dist/internal/TransactWriteOps.js.map +1 -1
- package/dist/internal/TransactableOps.d.ts +33 -14
- package/dist/internal/TransactableOps.d.ts.map +1 -1
- package/dist/internal/TransactableOps.js +46 -19
- package/dist/internal/TransactableOps.js.map +1 -1
- package/package.json +2 -2
package/dist/EventStore.d.ts
CHANGED
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
* Built on the existing library primitives (DynamoSchema, KeyComposer, Query,
|
|
14
14
|
* DynamoClient, Marshaller).
|
|
15
15
|
*/
|
|
16
|
-
import
|
|
16
|
+
import * as DynamoSchema from "@effect-dynamodb/schema/DynamoSchema.js";
|
|
17
|
+
import { AdditionalItemConditionFailed, AppendTooLarge, type ConcurrentModification, DuplicateCommand, type OptimisticLockError, TransactionCancelled, type UniqueConstraintViolation, ValidationError, VersionConflict } from "@effect-dynamodb/schema/Errors.js";
|
|
17
18
|
import { type Duration, Effect, Option, Pipeable, Schedule, Schema } from "effect";
|
|
18
19
|
import { DynamoClient, type DynamoClientError } from "./DynamoClient.js";
|
|
19
20
|
import { type TransactWriteOp } from "./internal/TransactWriteOps.js";
|
|
@@ -104,8 +105,9 @@ export interface SnapshotSettings {
|
|
|
104
105
|
* command to this aggregate?" asks). It is invisible to `read` / `readFrom` /
|
|
105
106
|
* `currentVersion`, which filter on the event entity type.
|
|
106
107
|
*
|
|
107
|
-
* **Casing:** the sentinel sort key is composed with the
|
|
108
|
-
* `"lowercase"`), so
|
|
108
|
+
* **Casing:** the sentinel sort key is composed with the stream's key casing
|
|
109
|
+
* (its `casing`, else the schema's — default `"lowercase"`), so under a folding
|
|
110
|
+
* casing command ids that differ only in case collide. Use
|
|
109
111
|
* case-insensitively-unique ids (UUID / ULID). The raw id is stored as the
|
|
110
112
|
* `commandId` attribute regardless.
|
|
111
113
|
*/
|
|
@@ -129,16 +131,25 @@ export interface AppendOptions<TMetadata> {
|
|
|
129
131
|
* op union `Transaction.transactWrite` accepts (`EntityPut`, `EntityDelete`,
|
|
130
132
|
* `Transaction.check(...)`).
|
|
131
133
|
*
|
|
132
|
-
*
|
|
133
|
-
* `
|
|
134
|
-
*
|
|
134
|
+
* A put of a versioned or unique-constrained entity is written exactly as
|
|
135
|
+
* the entity's own `put` writes it (#133) — reading the item, continuing a
|
|
136
|
+
* replaced item's version and history, rotating its sentinels — and an
|
|
137
|
+
* append whose read raced a concurrent write is written again.
|
|
138
|
+
*
|
|
139
|
+
* A failure of an item's OWN condition (`.condition()`, `create()`,
|
|
140
|
+
* `Transaction.check`) is reported as `AdditionalItemConditionFailed`
|
|
141
|
+
* (carrying the 0-based indices into this array), never as
|
|
142
|
+
* `VersionConflict`. A guarded put the caller set no condition on fails as
|
|
143
|
+
* the entity's put would: `UniqueConstraintViolation`, a history
|
|
144
|
+
* `ValidationError`, or — a race lost on every attempt —
|
|
145
|
+
* `OptimisticLockError` / `ConcurrentModification`.
|
|
135
146
|
*/
|
|
136
147
|
readonly additionalItems?: ReadonlyArray<TransactWriteOp>;
|
|
137
148
|
/** Opt in to exactly-once command processing — see {@link AppendIdempotency}. */
|
|
138
149
|
readonly idempotency?: AppendIdempotency;
|
|
139
150
|
}
|
|
140
151
|
/** Error channel of {@link EventStream.append}. */
|
|
141
|
-
export type AppendError = VersionConflict | DuplicateCommand | AdditionalItemConditionFailed | AppendTooLarge | DynamoClientError | ValidationError | TransactionCancelled;
|
|
152
|
+
export type AppendError = VersionConflict | DuplicateCommand | AdditionalItemConditionFailed | AppendTooLarge | DynamoClientError | ValidationError | TransactionCancelled | UniqueConstraintViolation | OptimisticLockError | ConcurrentModification;
|
|
142
153
|
type StreamIdInput<T extends ReadonlyArray<string>> = {
|
|
143
154
|
readonly [K in T[number]]: string;
|
|
144
155
|
};
|
|
@@ -233,6 +244,16 @@ export interface EventStream<TEvent, TStreamIdFields extends ReadonlyArray<strin
|
|
|
233
244
|
* })
|
|
234
245
|
* ```
|
|
235
246
|
*
|
|
247
|
+
* `casing` overrides the key casing for this stream, as an index's or a vector
|
|
248
|
+
* index's `casing` does: the stream name, stream-id values and command ids in
|
|
249
|
+
* its keys all take it. When omitted, the stream name is lower-cased and the
|
|
250
|
+
* rest of the key follows the schema's casing — the layout streams have always
|
|
251
|
+
* had. Setting `casing` on a stream that already holds data moves its keys
|
|
252
|
+
* (unless the result happens to match), so its events, snapshot and idempotency
|
|
253
|
+
* sentinels are no longer read. The `__edd_e__` discriminators
|
|
254
|
+
* (`<stream>.event` etc.) are always lower-cased. In the next major, omitting
|
|
255
|
+
* `casing` will mean the schema's casing, as it does for indexes.
|
|
256
|
+
*
|
|
236
257
|
* @throws `[EDD-9027]` when `snapshot.every` is not a positive integer.
|
|
237
258
|
*/
|
|
238
259
|
export declare const makeStream: <const TEvents extends ReadonlyArray<Schema.Top>, TTable extends Table, const TStreamName extends string, const TStreamId extends {
|
|
@@ -244,6 +265,7 @@ export declare const makeStream: <const TEvents extends ReadonlyArray<Schema.Top
|
|
|
244
265
|
readonly streamId: TStreamId;
|
|
245
266
|
readonly metadata?: TMetadata;
|
|
246
267
|
readonly snapshot?: TSnapshot;
|
|
268
|
+
readonly casing?: DynamoSchema.Casing | undefined;
|
|
247
269
|
}) => EventStream<Schema.Schema.Type<TEvents[number]>, TStreamId["composite"], TMetadata extends Schema.Top ? Schema.Schema.Type<TMetadata> : undefined, TSnapshot extends SnapshotConfig<infer TStateSchema> ? Schema.Schema.Type<TStateSchema> : never>;
|
|
248
270
|
/**
|
|
249
271
|
* An EventStream whose operations have `DynamoClient` and `TableConfig` already
|
|
@@ -350,7 +372,7 @@ export interface IdempotentCommandOptions<TMetadata> extends CommandOptions<TMet
|
|
|
350
372
|
type CommandOptionsArgs<TMetadata, TConfig extends CommandHandlerOptions | undefined> = TConfig extends {
|
|
351
373
|
readonly idempotency: object;
|
|
352
374
|
} ? [options: IdempotentCommandOptions<TMetadata>] : [options?: CommandOptions<TMetadata> | undefined];
|
|
353
|
-
type CommandHandlerErrors<E> = E | VersionConflict | DuplicateCommand | AdditionalItemConditionFailed | AppendTooLarge | DynamoClientError | ValidationError | TransactionCancelled;
|
|
375
|
+
type CommandHandlerErrors<E> = E | VersionConflict | DuplicateCommand | AdditionalItemConditionFailed | AppendTooLarge | DynamoClientError | ValidationError | TransactionCancelled | UniqueConstraintViolation | OptimisticLockError | ConcurrentModification;
|
|
354
376
|
type CommandHandler<State, Command, TEvent, E, TStreamIdFields extends ReadonlyArray<string>, TMetadata, TConfig extends CommandHandlerOptions | undefined = undefined> = (streamId: StreamIdInput<TStreamIdFields>, command: Command, ...options: CommandOptionsArgs<TMetadata, TConfig>) => Effect.Effect<CommandHandlerResult<State, TEvent>, CommandHandlerErrors<E>, DynamoClient | TableConfig>;
|
|
355
377
|
type BoundCommandHandler<State, Command, TEvent, E, TStreamIdFields extends ReadonlyArray<string>, TMetadata, TConfig extends CommandHandlerOptions | undefined = undefined> = (streamId: StreamIdInput<TStreamIdFields>, command: Command, ...options: CommandOptionsArgs<TMetadata, TConfig>) => Effect.Effect<CommandHandlerResult<State, TEvent>, CommandHandlerErrors<E>, never>;
|
|
356
378
|
/**
|
package/dist/EventStore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventStore.d.ts","sourceRoot":"","sources":["../src/EventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EACL,6BAA6B,EAC7B,cAAc,EACd,gBAAgB,EAIhB,oBAAoB,EACpB,eAAe,EACf,eAAe,EAChB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,EAEL,KAAK,QAAQ,EACb,MAAM,EAEN,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACP,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,EAA2B,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAMlF;;;;;;GAMG;AACH,MAAM,WAAW,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK;IACvD,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3F,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,CAAA;IACtD,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC7B;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GACnE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACnC,SAAS,GAAG,SAAS,CAAA;AAuBzB,8CAA8C;AAC9C,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;CAClC;AAED,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAE,SAAQ,YAAY,CAAC,KAAK,CAAC;IAC7E,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACtB;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ,CAAC,KAAK;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG;IACrE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC;AAED,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAA;CAC1C;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa,CAAC,SAAS;IACtC,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B;;;;;;;;OAQG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAA;IACzD,iFAAiF;IACjF,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CACzC;AAED,mDAAmD;AACnD,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,gBAAgB,GAChB,6BAA6B,GAC7B,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,oBAAoB,CAAA;AAMxB,KAAK,aAAa,CAAC,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,IAAI;IACpD,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM;CAClC,CAAA;AAMD,QAAA,MAAM,iBAAiB,EAAE,OAAO,MAAkD,CAAA;AAClF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAA;AAMxD;;;;;GAKG;AACH,MAAM,WAAW,WAAW,CAC1B,MAAM,EACN,eAAe,SAAS,aAAa,CAAC,MAAM,CAAC,EAC7C,SAAS,EACT,MAAM,GAAG,KAAK,CACd,SAAQ,QAAQ,CAAC,QAAQ;IACzB,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAA;IAEhC;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAErD;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,CACX,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,eAAe,EAAE,YAAY,GAAG,WAAW,CAAC,CAAA;IAEvF;;;;;;OAMG;IACH,YAAY,CACV,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,GACvC,MAAM,CAAC,MAAM,CACd,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAC/B,iBAAiB,GAAG,eAAe,EACnC,YAAY,GAAG,WAAW,CAC3B,CAAA;IAED,MAAM,CACJ,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,GAC7C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,GAAG,WAAW,CAAC,CAAA;IAE/E,IAAI,CACF,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,GACvC,MAAM,CAAC,MAAM,CACd,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAC7D,iBAAiB,GAAG,eAAe,EACnC,YAAY,GAAG,WAAW,CAC3B,CAAA;IAED,QAAQ,CACN,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,CACd,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAC7D,iBAAiB,GAAG,eAAe,EACnC,YAAY,GAAG,WAAW,CAC3B,CAAA;IAED,cAAc,CACZ,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,GACvC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,EAAE,YAAY,GAAG,WAAW,CAAC,CAAA;IAEzF,QAAQ,CAAC,KAAK,EAAE;QACd,MAAM,CACJ,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,GACvC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;KAC/D,CAAA;CACF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,UAAU,GACrB,KAAK,CAAC,OAAO,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAC/C,MAAM,SAAS,KAAK,EACpB,KAAK,CAAC,WAAW,SAAS,MAAM,EAChC,KAAK,CAAC,SAAS,SAAS;IAAE,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAAE,EACrE,SAAS,SAAS,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,SAAS,EACpD,SAAS,SAAS,cAAc,GAAG,SAAS,GAAG,SAAS,EACxD,QAAQ;IACR,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAC9B,KAAG,WAAW,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EACnC,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,SAAS,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,SAAS,EACxE,SAAS,SAAS,cAAc,CAAC,MAAM,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CA2qBhG,CAAA;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,gBAAgB,CAC/B,MAAM,EACN,eAAe,SAAS,aAAa,CAAC,MAAM,CAAC,EAC7C,SAAS,EACT,MAAM,GAAG,KAAK,CACd,SAAQ,QAAQ,CAAC,QAAQ;IACzB,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAA;IAEhC,8CAA8C;IAC9C,QAAQ,CAAC,cAAc,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAErD,qFAAqF;IACrF,aAAa,CACX,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,eAAe,EAAE,KAAK,CAAC,CAAA;IAElE,4CAA4C;IAC5C,YAAY,CACV,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,GACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,iBAAiB,GAAG,eAAe,EAAE,KAAK,CAAC,CAAA;IAE7F,MAAM,CACJ,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,GAC7C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAA;IAE1D,IAAI,CACF,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,GACvC,MAAM,CAAC,MAAM,CACd,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAC7D,iBAAiB,GAAG,eAAe,EACnC,KAAK,CACN,CAAA;IAED,QAAQ,CACN,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,CACd,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAC7D,iBAAiB,GAAG,eAAe,EACnC,KAAK,CACN,CAAA;IAED,cAAc,CACZ,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,GACvC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe,EAAE,KAAK,CAAC,CAAA;IAEpE,QAAQ,CAAC,KAAK,EAAE;QACd,MAAM,CACJ,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,GACvC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;KAC/D,CAAA;IAED,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC,KACpD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;CAChC;AAMD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,IAAI,GAAI,MAAM,EAAE,eAAe,SAAS,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAC3F,QAAQ,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,KAC9D,MAAM,CAAC,MAAM,CACd,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,EAC5D,KAAK,EACL,YAAY,GAAG,WAAW,CA4BxB,CAAA;AAMJ;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,GAAG,SAAS,CAAA;IAEjF,iFAAiF;IACjF,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAA;KAAE,CAAA;CACrE;AAED,iFAAiF;AACjF,MAAM,WAAW,cAAc,CAAC,SAAS;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAA;CAC1D;AAED,kGAAkG;AAClG,MAAM,WAAW,wBAAwB,CAAC,SAAS,CAAE,SAAQ,cAAc,CAAC,SAAS,CAAC;IACpF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED;;;;GAIG;AACH,KAAK,kBAAkB,CACrB,SAAS,EACT,OAAO,SAAS,qBAAqB,GAAG,SAAS,IAC/C,OAAO,SAAS;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAChD,CAAC,OAAO,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC,GAC9C,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAA;AAErD,KAAK,oBAAoB,CAAC,CAAC,IACvB,CAAC,GACD,eAAe,GACf,gBAAgB,GAChB,6BAA6B,GAC7B,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,oBAAoB,CAAA;AAExB,KAAK,cAAc,CACjB,KAAK,EACL,OAAO,EACP,MAAM,EACN,CAAC,EACD,eAAe,SAAS,aAAa,CAAC,MAAM,CAAC,EAC7C,SAAS,EACT,OAAO,SAAS,qBAAqB,GAAG,SAAS,GAAG,SAAS,IAC3D,CACF,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,OAAO,EAAE,OAAO,EAChB,GAAG,OAAO,EAAE,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,KAC/C,MAAM,CAAC,MAAM,CAChB,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,EACnC,oBAAoB,CAAC,CAAC,CAAC,EACvB,YAAY,GAAG,WAAW,CAC3B,CAAA;AAED,KAAK,mBAAmB,CACtB,KAAK,EACL,OAAO,EACP,MAAM,EACN,CAAC,EACD,eAAe,SAAS,aAAa,CAAC,MAAM,CAAC,EAC7C,SAAS,EACT,OAAO,SAAS,qBAAqB,GAAG,SAAS,GAAG,SAAS,IAC3D,CACF,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,OAAO,EAAE,OAAO,EAChB,GAAG,OAAO,EAAE,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,KAC/C,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AA0JvF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,cAAc,EAAE;IAE3B,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,SAAS,qBAAqB,GAAG,SAAS,GAAG,SAAS,EAC7F,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAC3C,OAAO,CAAC,EAAE,OAAO,GAChB;QACD,CAAC,eAAe,SAAS,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,SAAS,KAAK,EAC7E,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,GACnE,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QACtF,CAAC,eAAe,SAAS,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,SAAS,KAAK,EAC7E,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,GAC9D,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;KAClF,CAAA;IAGD,CACE,KAAK,EACL,OAAO,EACP,MAAM,EACN,CAAC,EACD,eAAe,SAAS,aAAa,CAAC,MAAM,CAAC,EAC7C,SAAS,EACT,MAAM,SAAS,KAAK,EACpB,KAAK,CAAC,OAAO,SAAS,qBAAqB,GAAG,SAAS,GAAG,SAAS,EAEnE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAC3C,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,EACpE,OAAO,CAAC,EAAE,OAAO,GAChB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IAGtF,CACE,KAAK,EACL,OAAO,EACP,MAAM,EACN,CAAC,EACD,eAAe,SAAS,aAAa,CAAC,MAAM,CAAC,EAC7C,SAAS,EACT,MAAM,SAAS,KAAK,EACpB,KAAK,CAAC,OAAO,SAAS,qBAAqB,GAAG,SAAS,GAAG,SAAS,EAEnE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAC3C,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,EAC/D,OAAO,CAAC,EAAE,OAAO,GAChB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;CAOxD,CAAA;AAM3B;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE;IACjB,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;IACxF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;CAUrF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE;IACrB,CAAC,CAAC,EACA,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GACpC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;IAC/C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5B,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GACpC,CAAC,CAAA;CAcL,CAAA"}
|
|
1
|
+
{"version":3,"file":"EventStore.d.ts","sourceRoot":"","sources":["../src/EventStore.ts"],"names":[],"mappings":"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"}
|
package/dist/EventStore.js
CHANGED
|
@@ -19,7 +19,7 @@ import { AdditionalItemConditionFailed, AppendTooLarge, DuplicateCommand, isAwsC
|
|
|
19
19
|
import * as KeyComposer from "@effect-dynamodb/schema/KeyComposer.js";
|
|
20
20
|
import { DateTime, Effect, Function, Option, Pipeable, Schedule, Schema, } from "effect";
|
|
21
21
|
import { DynamoClient } from "./DynamoClient.js";
|
|
22
|
-
import { buildTransactWriteItems, } from "./internal/TransactWriteOps.js";
|
|
22
|
+
import { buildTransactWriteItems, GUARDED_TRANSACTION_ATTEMPTS, judgeCancellation, refuseOversizedTransaction, refuseRepeatedItems, transactItemTarget, } from "./internal/TransactWriteOps.js";
|
|
23
23
|
import { fromAttributeMap, toAttributeMap } from "./Marshaller.js";
|
|
24
24
|
import * as Query from "./Query.js";
|
|
25
25
|
import { resolveTtlAttributeName } from "./Table.js";
|
|
@@ -85,19 +85,46 @@ const EventStreamTypeId = Symbol.for("effect-dynamodb/EventStream");
|
|
|
85
85
|
* })
|
|
86
86
|
* ```
|
|
87
87
|
*
|
|
88
|
+
* `casing` overrides the key casing for this stream, as an index's or a vector
|
|
89
|
+
* index's `casing` does: the stream name, stream-id values and command ids in
|
|
90
|
+
* its keys all take it. When omitted, the stream name is lower-cased and the
|
|
91
|
+
* rest of the key follows the schema's casing — the layout streams have always
|
|
92
|
+
* had. Setting `casing` on a stream that already holds data moves its keys
|
|
93
|
+
* (unless the result happens to match), so its events, snapshot and idempotency
|
|
94
|
+
* sentinels are no longer read. The `__edd_e__` discriminators
|
|
95
|
+
* (`<stream>.event` etc.) are always lower-cased. In the next major, omitting
|
|
96
|
+
* `casing` will mean the schema's casing, as it does for indexes.
|
|
97
|
+
*
|
|
88
98
|
* @throws `[EDD-9027]` when `snapshot.every` is not a positive integer.
|
|
89
99
|
*/
|
|
90
100
|
export const makeStream = (config) => {
|
|
91
101
|
const schema = config.table.schema;
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
/**
|
|
103
|
+
* `__edd_e__` discriminator values. Always lower-cased, whatever the casing:
|
|
104
|
+
* they are matched exactly by every stream read, so they never vary with the
|
|
105
|
+
* stream's or the schema's casing.
|
|
106
|
+
*/
|
|
107
|
+
const typeLabel = config.streamName.toLowerCase();
|
|
108
|
+
const entityType = `${typeLabel}.event`;
|
|
109
|
+
const snapshotEntityType = `${typeLabel}.snapshot`;
|
|
94
110
|
/**
|
|
95
111
|
* Entity type of the command-dedup sentinel. Distinct from `entityType` so the
|
|
96
112
|
* sentinel is filtered out of every event query (`read`, `readFrom`,
|
|
97
113
|
* `currentVersion` all constrain `__edd_e__`), and it sorts before the event
|
|
98
114
|
* keys (`.command` < `.event`) so it also falls outside `readFrom` ranges.
|
|
99
115
|
*/
|
|
100
|
-
const commandEntityType = `${
|
|
116
|
+
const commandEntityType = `${typeLabel}.command`;
|
|
117
|
+
/**
|
|
118
|
+
* Stream keys. With `casing` set, the stream name goes to the key composer as
|
|
119
|
+
* written and that casing applies to the whole key, as an index's `casing`
|
|
120
|
+
* does. Without it, the name is lower-cased first and the schema's casing
|
|
121
|
+
* applies — the layout every stream has been written with so far.
|
|
122
|
+
*/
|
|
123
|
+
const keyOptions = config.casing === undefined ? undefined : { casing: config.casing };
|
|
124
|
+
const keyLabel = config.casing === undefined ? typeLabel : config.streamName;
|
|
125
|
+
const eventKeyLabel = `${keyLabel}.event`;
|
|
126
|
+
const snapshotKeyLabel = `${keyLabel}.snapshot`;
|
|
127
|
+
const commandKeyLabel = `${keyLabel}.command`;
|
|
101
128
|
const compositeFields = config.streamId.composite;
|
|
102
129
|
// -------------------------------------------------------------------------
|
|
103
130
|
// Snapshot config validation (EDD-9027) — fail fast at definition time.
|
|
@@ -121,16 +148,16 @@ export const makeStream = (config) => {
|
|
|
121
148
|
// ---------------------------------------------------------------------------
|
|
122
149
|
const composeStreamPk = (streamId) => {
|
|
123
150
|
const composites = KeyComposer.extractComposites(compositeFields, streamId);
|
|
124
|
-
return DynamoSchema.composeKey(schema,
|
|
151
|
+
return DynamoSchema.composeKey(schema, keyLabel, composites, keyOptions);
|
|
125
152
|
};
|
|
126
|
-
const composeEventSk = (version) => DynamoSchema.composeEventVersionKey(schema,
|
|
153
|
+
const composeEventSk = (version) => DynamoSchema.composeEventVersionKey(schema, eventKeyLabel, version, keyOptions);
|
|
127
154
|
/**
|
|
128
155
|
* Every event SK begins with this; nothing else in the stream partition does.
|
|
129
156
|
* Bounding event reads to it excludes the snapshot item at the key-condition
|
|
130
157
|
* level, which matters because DynamoDB applies `Limit` *before*
|
|
131
158
|
* `FilterExpression` — a filtered-out snapshot would still burn a `Limit` slot.
|
|
132
159
|
*/
|
|
133
|
-
const eventSkPrefix = DynamoSchema.composeEventVersionKeyPrefix(schema,
|
|
160
|
+
const eventSkPrefix = DynamoSchema.composeEventVersionKeyPrefix(schema, eventKeyLabel, keyOptions);
|
|
134
161
|
/** Inclusive upper bound of the event SK range (10-digit padding maximum). */
|
|
135
162
|
const maxEventSk = composeEventSk(DynamoSchema.MAX_EVENT_VERSION);
|
|
136
163
|
/**
|
|
@@ -138,7 +165,7 @@ export const makeStream = (config) => {
|
|
|
138
165
|
* `<stream>.event_1#…`), so it can never collide with an event SK, and it
|
|
139
166
|
* sorts after every event in the partition.
|
|
140
167
|
*/
|
|
141
|
-
const snapshotSk = DynamoSchema.composeKey(schema,
|
|
168
|
+
const snapshotSk = DynamoSchema.composeKey(schema, snapshotKeyLabel, [], keyOptions);
|
|
142
169
|
const composeStreamIdString = (streamId) => compositeFields.map((f) => streamId[f]).join("#");
|
|
143
170
|
// ---------------------------------------------------------------------------
|
|
144
171
|
// Codec helpers — write encodes, read decodes (symmetry with Entity/Aggregate)
|
|
@@ -283,164 +310,185 @@ export const makeStream = (config) => {
|
|
|
283
310
|
},
|
|
284
311
|
};
|
|
285
312
|
}));
|
|
286
|
-
//
|
|
287
|
-
//
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
// silently write from version 11, leaving a permanent gap. When
|
|
305
|
-
// expectedVersion > 0, require the event at exactly `expectedVersion` to
|
|
306
|
-
// exist so the appended range is contiguous with the stream head. Its
|
|
307
|
-
// failure surfaces as a ConditionalCheckFailed cancellation reason,
|
|
308
|
-
// mapping to VersionConflict below just like a stale-version Put failure.
|
|
309
|
-
//
|
|
310
|
-
// Only when events are actually being written: the guard exists to stop an
|
|
311
|
-
// AHEAD expectedVersion opening a permanent gap, and a zero-event append
|
|
312
|
-
// (pure `additionalItems` / sentinel side-write) writes no version and so
|
|
313
|
-
// can open no gap.
|
|
314
|
-
const contiguityCheck = needsContiguityCheck
|
|
315
|
-
? [
|
|
316
|
-
{
|
|
317
|
-
ConditionCheck: {
|
|
318
|
-
TableName: tableName,
|
|
319
|
-
Key: toAttributeMap({ pk, sk: composeEventSk(expectedVersion) }),
|
|
320
|
-
ConditionExpression: "attribute_exists(pk)",
|
|
321
|
-
},
|
|
322
|
-
},
|
|
323
|
-
]
|
|
324
|
-
: [];
|
|
325
|
-
// Item layout is load-bearing — cancellation reasons are positional:
|
|
326
|
-
// [0, C) version-contiguity ConditionCheck (C is 0 or 1)
|
|
327
|
-
// [C, C + E) event puts
|
|
328
|
-
// [C + E, C + E + A) additional ITEMS (caller op order preserved)
|
|
329
|
-
// C + E + A idempotency sentinel (last, so adding it never
|
|
330
|
-
// shifts the additional-item indices the caller sees)
|
|
331
|
-
//
|
|
332
|
-
// `A` is the count of EMITTED items, which is >= the number of caller ops:
|
|
333
|
-
// a `unique` / `retain` put expands into its item plus sentinels plus a
|
|
334
|
-
// snapshot (#113). The 1:1 "item index == caller index" assumption is gone,
|
|
335
|
-
// so the reason mapping below goes through `additionalProvenance` — the
|
|
336
|
-
// caller-facing `indices` on `AdditionalItemConditionFailed` are still
|
|
337
|
-
// indices into the caller's `additionalItems` array, unchanged.
|
|
338
|
-
const transactItems = [
|
|
339
|
-
...contiguityCheck,
|
|
340
|
-
...eventItems,
|
|
341
|
-
...additionalItems,
|
|
342
|
-
];
|
|
343
|
-
const checkCount = contiguityCheck.length;
|
|
344
|
-
const eventCount = eventItems.length;
|
|
345
|
-
const additionalCount = additionalItems.length;
|
|
346
|
-
const sentinelIndex = idempotency !== undefined ? transactItems.length : -1;
|
|
347
|
-
if (idempotency !== undefined) {
|
|
348
|
-
const sentinel = {
|
|
349
|
-
pk,
|
|
350
|
-
sk: DynamoSchema.composeKey(schema, commandEntityType, [idempotency.commandId]),
|
|
351
|
-
__edd_e__: commandEntityType,
|
|
352
|
-
streamId: streamIdStr,
|
|
353
|
-
commandId: idempotency.commandId,
|
|
354
|
-
version: expectedVersion + events.length,
|
|
355
|
-
timestamp: now,
|
|
356
|
-
};
|
|
357
|
-
if (idempotency.ttl !== undefined) {
|
|
358
|
-
const ttlSeconds = yield* Effect.try({
|
|
359
|
-
try: () => normalizeTtlSeconds(idempotency.ttl),
|
|
360
|
-
catch: (cause) => new ValidationError({
|
|
361
|
-
entityType: commandEntityType,
|
|
362
|
-
operation: "EventStore.append.idempotency.ttl",
|
|
363
|
-
cause,
|
|
364
|
-
}),
|
|
313
|
+
// A guarded put among the additional items reads its item; a race with
|
|
314
|
+
// that read cancels the append, which is then built and written again.
|
|
315
|
+
let lost;
|
|
316
|
+
for (let attempt = 0; attempt < GUARDED_TRANSACTION_ATTEMPTS; attempt++) {
|
|
317
|
+
// Caller-owned items, compiled through the same builder
|
|
318
|
+
// `Transaction.transactWrite` uses, so the two APIs cannot drift.
|
|
319
|
+
const additional = yield* buildTransactWriteItems(additionalOps, "EventStore.append.additionalItems");
|
|
320
|
+
const additionalItems = additional.items;
|
|
321
|
+
// Authoritative cap check: one additional op can compile to several items
|
|
322
|
+
// (#113), so the pre-flight lower bound above is not sufficient. Reporting
|
|
323
|
+
// the EXPANDED count is the point — "you passed 40 items" when the caller
|
|
324
|
+
// passed 30 ops is baffling without it.
|
|
325
|
+
if (fixedItems + additionalItems.length > TRANSACT_WRITE_ITEMS_LIMIT) {
|
|
326
|
+
return yield* new AppendTooLarge({
|
|
327
|
+
streamName: config.streamName,
|
|
328
|
+
streamId: streamIdStr,
|
|
329
|
+
count: fixedItems + additionalItems.length,
|
|
330
|
+
limit: TRANSACT_WRITE_ITEMS_LIMIT,
|
|
365
331
|
});
|
|
366
|
-
sentinel[resolveTtlAttributeName(tableConfig)] =
|
|
367
|
-
DateTime.toEpochSeconds(nowDateTime) + ttlSeconds;
|
|
368
332
|
}
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
333
|
+
// Version-contiguity guard: `attribute_not_exists(pk)` on the event puts
|
|
334
|
+
// only rejects STALE expected versions (the target slot already exists).
|
|
335
|
+
// An AHEAD expectedVersion (e.g. 10 when the stream is at 3) would
|
|
336
|
+
// silently write from version 11, leaving a permanent gap. When
|
|
337
|
+
// expectedVersion > 0, require the event at exactly `expectedVersion` to
|
|
338
|
+
// exist so the appended range is contiguous with the stream head. Its
|
|
339
|
+
// failure surfaces as a ConditionalCheckFailed cancellation reason,
|
|
340
|
+
// mapping to VersionConflict below just like a stale-version Put failure.
|
|
341
|
+
//
|
|
342
|
+
// Only when events are actually being written: the guard exists to stop an
|
|
343
|
+
// AHEAD expectedVersion opening a permanent gap, and a zero-event append
|
|
344
|
+
// (pure `additionalItems` / sentinel side-write) writes no version and so
|
|
345
|
+
// can open no gap.
|
|
346
|
+
const contiguityCheck = needsContiguityCheck
|
|
347
|
+
? [
|
|
348
|
+
{
|
|
349
|
+
ConditionCheck: {
|
|
350
|
+
TableName: tableName,
|
|
351
|
+
Key: toAttributeMap({ pk, sk: composeEventSk(expectedVersion) }),
|
|
352
|
+
ConditionExpression: "attribute_exists(pk)",
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
]
|
|
356
|
+
: [];
|
|
357
|
+
// Item layout is load-bearing — cancellation reasons are positional:
|
|
358
|
+
// [0, C) version-contiguity ConditionCheck (C is 0 or 1)
|
|
359
|
+
// [C, C + E) event puts
|
|
360
|
+
// [C + E, C + E + A) additional ITEMS (caller op order preserved)
|
|
361
|
+
// C + E + A idempotency sentinel (last, so adding it never
|
|
362
|
+
// shifts the additional-item indices the caller sees)
|
|
363
|
+
//
|
|
364
|
+
// `A` is the count of EMITTED items, which is >= the number of caller ops:
|
|
365
|
+
// a guarded put (#133) expands into its item plus its sentinel
|
|
366
|
+
// reservations and releases plus a snapshot. The 1:1 "item index == caller
|
|
367
|
+
// index" assumption is gone, so the reason mapping below goes through
|
|
368
|
+
// `judgeCancellation` — the caller-facing `indices` on
|
|
369
|
+
// `AdditionalItemConditionFailed` are still indices into the caller's
|
|
370
|
+
// `additionalItems` array, unchanged.
|
|
371
|
+
const transactItems = [
|
|
372
|
+
...contiguityCheck,
|
|
373
|
+
...eventItems,
|
|
374
|
+
...additionalItems,
|
|
375
|
+
];
|
|
376
|
+
const checkCount = contiguityCheck.length;
|
|
377
|
+
const eventCount = eventItems.length;
|
|
378
|
+
const sentinelIndex = idempotency !== undefined ? transactItems.length : -1;
|
|
379
|
+
if (idempotency !== undefined) {
|
|
380
|
+
const sentinel = {
|
|
381
|
+
pk,
|
|
382
|
+
sk: DynamoSchema.composeKey(schema, commandKeyLabel, [idempotency.commandId], keyOptions),
|
|
383
|
+
__edd_e__: commandEntityType,
|
|
393
384
|
streamId: streamIdStr,
|
|
394
385
|
commandId: idempotency.commandId,
|
|
386
|
+
version: expectedVersion + events.length,
|
|
387
|
+
timestamp: now,
|
|
388
|
+
};
|
|
389
|
+
if (idempotency.ttl !== undefined) {
|
|
390
|
+
const ttlSeconds = yield* Effect.try({
|
|
391
|
+
try: () => normalizeTtlSeconds(idempotency.ttl),
|
|
392
|
+
catch: (cause) => new ValidationError({
|
|
393
|
+
entityType: commandEntityType,
|
|
394
|
+
operation: "EventStore.append.idempotency.ttl",
|
|
395
|
+
cause,
|
|
396
|
+
}),
|
|
397
|
+
});
|
|
398
|
+
sentinel[resolveTtlAttributeName(tableConfig)] =
|
|
399
|
+
DateTime.toEpochSeconds(nowDateTime) + ttlSeconds;
|
|
400
|
+
}
|
|
401
|
+
transactItems.push({
|
|
402
|
+
Put: {
|
|
403
|
+
TableName: tableName,
|
|
404
|
+
Item: toAttributeMap(sentinel),
|
|
405
|
+
ConditionExpression: "attribute_not_exists(pk)",
|
|
406
|
+
},
|
|
395
407
|
});
|
|
396
408
|
}
|
|
397
|
-
//
|
|
398
|
-
//
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
409
|
+
// Checked before anything is sent: one op per item — an additional item
|
|
410
|
+
// repeating an event, the contiguity check or the idempotency sentinel
|
|
411
|
+
// is refused, as additional items repeating each other are — and the
|
|
412
|
+
// whole transaction within DynamoDB's 4 MB (#133).
|
|
413
|
+
const additionalStart = checkCount + eventCount;
|
|
414
|
+
const streamItemSource = (i) => i < checkCount
|
|
415
|
+
? "the version-contiguity check"
|
|
416
|
+
: i < additionalStart
|
|
417
|
+
? `the event at version ${expectedVersion + i - checkCount + 1}`
|
|
418
|
+
: "the idempotency sentinel";
|
|
419
|
+
const targets = transactItems.map((item, i) => i >= additionalStart && i < additionalStart + additionalItems.length
|
|
420
|
+
? additional.targets[i - additionalStart]
|
|
421
|
+
: transactItemTarget(item, tableName, ["pk", "sk"], entityType, streamItemSource(i)));
|
|
422
|
+
yield* refuseRepeatedItems(targets, "EventStore.append");
|
|
423
|
+
yield* refuseOversizedTransaction(transactItems, targets, "EventStore.append");
|
|
424
|
+
const outcome = yield* client.transactWriteItems({ TransactItems: transactItems }).pipe(Effect.as(undefined), Effect.catch((error) => {
|
|
425
|
+
if (!isAwsTransactionCancelled(error.cause)) {
|
|
426
|
+
return Effect.fail(error);
|
|
427
|
+
}
|
|
428
|
+
const rawReasons = error.cause.CancellationReasons ?? [];
|
|
429
|
+
const reasons = rawReasons.map((r) => ({
|
|
430
|
+
code: r?.Code,
|
|
431
|
+
message: r?.Message,
|
|
432
|
+
}));
|
|
433
|
+
const failedAt = (index) => index >= 0 && reasons[index]?.code === "ConditionalCheckFailed";
|
|
434
|
+
// Precedence is ordered by how terminal the caller's response should
|
|
435
|
+
// be: a duplicate can never succeed on retry, a version conflict
|
|
436
|
+
// invites a re-read, and only then are the additional items judged.
|
|
437
|
+
if (idempotency !== undefined && failedAt(sentinelIndex)) {
|
|
438
|
+
return Effect.fail(new DuplicateCommand({
|
|
402
439
|
streamName: config.streamName,
|
|
403
440
|
streamId: streamIdStr,
|
|
404
|
-
|
|
405
|
-
});
|
|
441
|
+
commandId: idempotency.commandId,
|
|
442
|
+
}));
|
|
406
443
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
//
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
444
|
+
// The contiguity ConditionCheck and the event puts both mean "the
|
|
445
|
+
// stream is not where you said it was", so they share one verdict.
|
|
446
|
+
for (let i = 0; i < checkCount + eventCount; i++) {
|
|
447
|
+
if (failedAt(i)) {
|
|
448
|
+
return Effect.fail(new VersionConflict({
|
|
449
|
+
streamName: config.streamName,
|
|
450
|
+
streamId: streamIdStr,
|
|
451
|
+
expectedVersion,
|
|
452
|
+
}));
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
// The additional items, attributed back to the caller OPS that
|
|
456
|
+
// produced them (several items can belong to one op). Only an op's
|
|
457
|
+
// own condition is `AdditionalItemConditionFailed`: a guarded put
|
|
458
|
+
// the caller set no condition on reports what the entity's own put
|
|
459
|
+
// would — a taken unique value, a history conflict — or, having
|
|
460
|
+
// lost a race to a concurrent write, is written again (#133).
|
|
461
|
+
const judged = judgeCancellation(additional, rawReasons, checkCount + eventCount);
|
|
462
|
+
if (judged?._tag === "fail")
|
|
463
|
+
return Effect.fail(judged.error);
|
|
464
|
+
if (judged?._tag === "conditions") {
|
|
465
|
+
return Effect.fail(new AdditionalItemConditionFailed({
|
|
466
|
+
streamName: config.streamName,
|
|
467
|
+
streamId: streamIdStr,
|
|
468
|
+
indices: judged.opIndices,
|
|
469
|
+
reasons,
|
|
470
|
+
}));
|
|
471
|
+
}
|
|
472
|
+
if (judged?._tag === "retry")
|
|
473
|
+
return Effect.succeed(judged.error);
|
|
474
|
+
// No conditional failure we can positionally justify (throttling,
|
|
475
|
+
// TransactionConflict, or a truncated/absent reason list) — never
|
|
476
|
+
// guess a VersionConflict.
|
|
477
|
+
return Effect.fail(new TransactionCancelled({
|
|
478
|
+
operation: "TransactWriteItems",
|
|
428
479
|
reasons,
|
|
429
|
-
|
|
480
|
+
cause: error.cause,
|
|
481
|
+
}));
|
|
482
|
+
}));
|
|
483
|
+
if (outcome === undefined) {
|
|
484
|
+
return {
|
|
485
|
+
version: expectedVersion + events.length,
|
|
486
|
+
events,
|
|
487
|
+
};
|
|
430
488
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
return new TransactionCancelled({
|
|
435
|
-
operation: "TransactWriteItems",
|
|
436
|
-
reasons,
|
|
437
|
-
cause: error.cause,
|
|
438
|
-
});
|
|
439
|
-
}));
|
|
440
|
-
return {
|
|
441
|
-
version: expectedVersion + events.length,
|
|
442
|
-
events,
|
|
443
|
-
};
|
|
489
|
+
lost = outcome;
|
|
490
|
+
}
|
|
491
|
+
return yield* Effect.fail(lost);
|
|
444
492
|
});
|
|
445
493
|
// ---------------------------------------------------------------------------
|
|
446
494
|
// read
|