effect-dynamodb 1.22.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.
Files changed (68) hide show
  1. package/dist/Aggregate.d.ts +9 -4
  2. package/dist/Aggregate.d.ts.map +1 -1
  3. package/dist/Aggregate.js +644 -219
  4. package/dist/Aggregate.js.map +1 -1
  5. package/dist/Batch.d.ts +7 -0
  6. package/dist/Batch.d.ts.map +1 -1
  7. package/dist/Batch.js +132 -7
  8. package/dist/Batch.js.map +1 -1
  9. package/dist/Collection.d.ts.map +1 -1
  10. package/dist/Collection.js +13 -31
  11. package/dist/Collection.js.map +1 -1
  12. package/dist/DynamoClient.d.ts +40 -3
  13. package/dist/DynamoClient.d.ts.map +1 -1
  14. package/dist/DynamoClient.js +70 -19
  15. package/dist/DynamoClient.js.map +1 -1
  16. package/dist/Entity.d.ts +138 -55
  17. package/dist/Entity.d.ts.map +1 -1
  18. package/dist/Entity.js +3061 -626
  19. package/dist/Entity.js.map +1 -1
  20. package/dist/EventStore.d.ts +15 -6
  21. package/dist/EventStore.d.ts.map +1 -1
  22. package/dist/EventStore.js +169 -148
  23. package/dist/EventStore.js.map +1 -1
  24. package/dist/Query.d.ts +75 -3
  25. package/dist/Query.d.ts.map +1 -1
  26. package/dist/Query.js +228 -30
  27. package/dist/Query.js.map +1 -1
  28. package/dist/Transaction.d.ts +13 -2
  29. package/dist/Transaction.d.ts.map +1 -1
  30. package/dist/Transaction.js +48 -38
  31. package/dist/Transaction.js.map +1 -1
  32. package/dist/index.d.ts +3 -3
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +1 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/internal/BoundCrud.d.ts +31 -20
  37. package/dist/internal/BoundCrud.d.ts.map +1 -1
  38. package/dist/internal/BoundCrud.js +1 -1
  39. package/dist/internal/BoundCrud.js.map +1 -1
  40. package/dist/internal/BoundQuery.d.ts +47 -2
  41. package/dist/internal/BoundQuery.d.ts.map +1 -1
  42. package/dist/internal/BoundQuery.js +182 -18
  43. package/dist/internal/BoundQuery.js.map +1 -1
  44. package/dist/internal/EntityCombinators.d.ts +32 -10
  45. package/dist/internal/EntityCombinators.d.ts.map +1 -1
  46. package/dist/internal/EntityCombinators.js +16 -7
  47. package/dist/internal/EntityCombinators.js.map +1 -1
  48. package/dist/internal/EntityOps.d.ts +44 -10
  49. package/dist/internal/EntityOps.d.ts.map +1 -1
  50. package/dist/internal/EntityOps.js +48 -5
  51. package/dist/internal/EntityOps.js.map +1 -1
  52. package/dist/internal/Expr.d.ts +23 -0
  53. package/dist/internal/Expr.d.ts.map +1 -1
  54. package/dist/internal/Expr.js +84 -9
  55. package/dist/internal/Expr.js.map +1 -1
  56. package/dist/internal/ItemSize.d.ts +38 -0
  57. package/dist/internal/ItemSize.d.ts.map +1 -0
  58. package/dist/internal/ItemSize.js +62 -0
  59. package/dist/internal/ItemSize.js.map +1 -0
  60. package/dist/internal/TransactWriteOps.d.ts +112 -19
  61. package/dist/internal/TransactWriteOps.d.ts.map +1 -1
  62. package/dist/internal/TransactWriteOps.js +210 -33
  63. package/dist/internal/TransactWriteOps.js.map +1 -1
  64. package/dist/internal/TransactableOps.d.ts +33 -14
  65. package/dist/internal/TransactableOps.d.ts.map +1 -1
  66. package/dist/internal/TransactableOps.js +46 -19
  67. package/dist/internal/TransactableOps.js.map +1 -1
  68. package/package.json +2 -2
@@ -2,9 +2,10 @@
2
2
  * @internal Shared `TransactWriteItems` item-building for `Transaction.transactWrite`
3
3
  * and `EventStore.append`'s `additionalItems`.
4
4
  *
5
- * The builder is a pure compile step — its `R` is `TableConfig` only (no
6
- * `DynamoClient`) — so both call sites can assemble items before deciding what
7
- * to do with them (execute directly, or merge into a larger transaction).
5
+ * Both call sites assemble items before deciding what to do with them
6
+ * (execute directly, or merge into a larger transaction). A put of a versioned
7
+ * or unique-constrained entity reads the item it replaces (#133), so the
8
+ * builder needs `DynamoClient` as well as `TableConfig`.
8
9
  *
9
10
  * Keeping one builder is what lets `EventStore.append({ additionalItems })` and
10
11
  * `Transaction.transactWrite` accept exactly the same op union: they cannot
@@ -15,7 +16,8 @@ import { Effect } from "effect";
15
16
  import { extractTransactable } from "../Entity.js";
16
17
  import { toAttributeMap } from "../Marshaller.js";
17
18
  import { resolveTtlAttributeName } from "../Table.js";
18
- import { compileExpr, isExpr, parseShorthand } from "./Expr.js";
19
+ import { compileExpr, emptyPartProblem, isExpr, parseShorthand } from "./Expr.js";
20
+ import { TRANSACT_WRITE_MAX_BYTES, transactItemBytes } from "./ItemSize.js";
19
21
  import { composePrimaryKey, rejectUnsupportedOp, resolveTableNames, validateAndBuildPutItem, } from "./TransactableOps.js";
20
22
  // ---------------------------------------------------------------------------
21
23
  // ConditionCheck — composable from EntityGet + condition expression
@@ -33,6 +35,22 @@ const compileOpCondition = (entity, cond) => {
33
35
  const expr = isExpr(cond) ? cond : parseShorthand(cond);
34
36
  return compileExpr(expr, entity._resolveDbName);
35
37
  };
38
+ /**
39
+ * An op's condition with an empty part where none may be (#133) is refused
40
+ * before anything is sent — see `emptyPartProblem`.
41
+ */
42
+ const refuseEmptyParts = (entity, operation, opType, cond) => {
43
+ const problem = cond === undefined
44
+ ? undefined
45
+ : emptyPartProblem(isExpr(cond) ? cond : parseShorthand(cond));
46
+ return problem === undefined
47
+ ? Effect.void
48
+ : Effect.fail(new ValidationError({
49
+ entityType: entity.entityType,
50
+ operation: `${operation}.condition`,
51
+ cause: `${operation} (${opType}): ${problem} Nothing was sent.`,
52
+ }));
53
+ };
36
54
  /**
37
55
  * Spread a compiled condition onto a `Put` / `Delete` / `ConditionCheck` entry.
38
56
  * `ExpressionAttributeValues` is omitted when empty — DynamoDB rejects an empty
@@ -48,16 +66,102 @@ const conditionFields = (condition) => condition === undefined
48
66
  ? { ExpressionAttributeValues: condition.values }
49
67
  : {}),
50
68
  };
69
+ /**
70
+ * Refuse a transaction whose items exceed DynamoDB's 4 MB aggregate limit —
71
+ * BEFORE it is sent, with the entity that contributes most named, rather
72
+ * than DynamoDB's bare `ValidationException`. Sizes are a LOWER bound by
73
+ * DynamoDB's item-size rules ({@link transactItemBytes}), so a transaction
74
+ * DynamoDB would accept is never refused; a retain put counts twice — its
75
+ * item and its snapshot carry the same attributes.
76
+ */
77
+ export const refuseOversizedTransaction = (items, targets, operation) => {
78
+ let total = 0;
79
+ let largest = { index: 0, bytes: -1 };
80
+ for (const [index, item] of items.entries()) {
81
+ const bytes = transactItemBytes(item);
82
+ total += bytes;
83
+ if (bytes > largest.bytes)
84
+ largest = { index, bytes };
85
+ }
86
+ if (total <= TRANSACT_WRITE_MAX_BYTES)
87
+ return Effect.void;
88
+ const target = targets[largest.index];
89
+ return Effect.fail(new ValidationError({
90
+ entityType: target?.entityType ?? "unknown",
91
+ operation,
92
+ cause: `${operation}: the transaction's ${items.length} items total at least ${total} bytes ` +
93
+ `by DynamoDB's item-size rules, over its limit of ${TRANSACT_WRITE_MAX_BYTES} bytes (4 MB) for one ` +
94
+ "transaction. The largest is " +
95
+ (target === undefined ? "" : `${target.source}'s, at ${target.key}, `) +
96
+ `${largest.bytes} bytes. A put of a retain entity counts twice: its item and its ` +
97
+ "version snapshot. Split the operations into smaller transactions. Nothing was written.",
98
+ }));
99
+ };
100
+ /**
101
+ * The target of a transact entry in `tableName`, keyed by `keyFields` (the
102
+ * table's primary key attributes): read from a Put's item, or any other
103
+ * entry's `Key`.
104
+ */
105
+ export const transactItemTarget = (item, tableName, keyFields, entityType, source) => {
106
+ const attributes = item.Put?.Item ?? item.Delete?.Key ?? item.Update?.Key ?? item.ConditionCheck?.Key;
107
+ const parts = keyFields.map((field) => {
108
+ const value = attributes?.[field];
109
+ return { field, value, text: value?.S ?? value?.N ?? JSON.stringify(value ?? null) };
110
+ });
111
+ return {
112
+ identity: [
113
+ tableName,
114
+ ...parts.map((p) => `${p.field}=${JSON.stringify(p.value ?? null)}`),
115
+ ].join("\u0000"),
116
+ entityType,
117
+ source,
118
+ key: parts.map((p) => `${p.field}=${p.text}`).join(", "),
119
+ };
120
+ };
121
+ /**
122
+ * Refuse a transaction that writes (or checks) one item more than once —
123
+ * BEFORE it is sent. DynamoDB allows one operation per item in a transaction
124
+ * and rejects the whole request otherwise; worse, the reasons it reports for
125
+ * a guarded put can read as a lost race (`[None, ConditionalCheckFailed]`), so
126
+ * the put would be retried and finally misreported as `OptimisticLockError`
127
+ * on one backend, and as a raw validation error on another. The targets
128
+ * include the items an op derives — uniqueness sentinels (reserved or
129
+ * released) and version snapshots — so two items swapping unique values, which
130
+ * release and claim the same sentinels, are refused too.
131
+ */
132
+ export const refuseRepeatedItems = (targets, operation) => {
133
+ const seen = new Map();
134
+ for (const target of targets) {
135
+ const first = seen.get(target.identity);
136
+ if (first === undefined) {
137
+ seen.set(target.identity, target);
138
+ continue;
139
+ }
140
+ return Effect.fail(new ValidationError({
141
+ entityType: first.entityType,
142
+ operation,
143
+ cause: `${operation}: the transaction touches one item more than once — ${first.source} and ` +
144
+ `${target.source} both target the item at ${target.key}. DynamoDB allows one ` +
145
+ "operation per item in a transaction, counting the uniqueness sentinels and version " +
146
+ "snapshots a put writes. Split the operations into separate writes. Nothing was written.",
147
+ }));
148
+ }
149
+ return Effect.void;
150
+ };
51
151
  /**
52
152
  * Compile a list of Entity write ops into marshalled `TransactWriteItems` entries,
53
153
  * preserving caller order.
54
154
  *
55
- * **One caller op may emit several items.** A `put` of an entity with `unique`
56
- * constraints or `versioned: { retain: true }` expands into the main item plus
57
- * one guarded sentinel per satisfiable constraint plus the v1 snapshot — all
58
- * derived from the payload, so no read is needed (#113). `provenance` records
59
- * which caller op each emitted item belongs to; consumers that map cancellation
60
- * reasons positionally MUST use it instead of assuming 1:1.
155
+ * **One caller op may emit several items.** A put of a versioned or
156
+ * unique-constrained entity is a guarded put (#133): it reads the item, and
157
+ * emits the item guarded on what was read, plus its sentinel reservations and
158
+ * releases and its retain snapshot (see {@link GuardedPut}). `provenance`
159
+ * records which caller op each emitted item belongs to; consumers that map
160
+ * cancellation reasons positionally MUST use it instead of assuming 1:1, and
161
+ * read a guarded put's reasons through {@link judgeCancellation}.
162
+ *
163
+ * Refuses items that repeat one item ({@link refuseRepeatedItems}) among those
164
+ * it builds; a caller adding items of its own checks them against `targets`.
61
165
  *
62
166
  * Does NOT enforce `TRANSACT_WRITE_ITEMS_LIMIT` — the caller counts, because the
63
167
  * total may include items this builder never sees (event puts, dedup sentinels).
@@ -65,13 +169,22 @@ const conditionFields = (condition) => condition === undefined
65
169
  */
66
170
  export const buildTransactWriteItems = (operations, operation) => Effect.gen(function* () {
67
171
  if (operations.length === 0)
68
- return { items: [], provenance: [] };
172
+ return { items: [], provenance: [], targets: [], guarded: [] };
69
173
  const opInfos = [];
70
174
  for (let opIndex = 0; opIndex < operations.length; opIndex++) {
71
175
  const op = operations[opIndex];
72
176
  // Check for ConditionCheckOp first (has its own TypeId)
73
177
  if (op != null && typeof op === "object" && ConditionCheckTypeId in op) {
74
178
  const checkOp = op;
179
+ // A check that asserts nothing (`Expression.condition({})`) would be
180
+ // sent as an empty ConditionExpression, which DynamoDB rejects (#134).
181
+ if (checkOp._condition.expression.trim() === "") {
182
+ return yield* new ValidationError({
183
+ entityType: checkOp._entity.entityType,
184
+ operation: `${operation}.check`,
185
+ cause: `${operation}: Transaction.check() was given an empty condition. Nothing was sent.`,
186
+ });
187
+ }
75
188
  opInfos.push({
76
189
  type: "conditionCheck",
77
190
  entity: checkOp._entity,
@@ -91,8 +204,10 @@ export const buildTransactWriteItems = (operations, operation) => Effect.gen(fun
91
204
  }
92
205
  if (info.opType === "put") {
93
206
  yield* rejectUnsupportedOp(info.entity, operation, "put", info.putKind, info.input);
207
+ yield* refuseEmptyParts(info.entity, operation, "put", info.condition);
94
208
  opInfos.push({
95
209
  type: "put",
210
+ putKind: info.putKind,
96
211
  entity: info.entity,
97
212
  opIndex,
98
213
  input: info.input,
@@ -101,6 +216,7 @@ export const buildTransactWriteItems = (operations, operation) => Effect.gen(fun
101
216
  }
102
217
  else if (info.opType === "delete") {
103
218
  yield* rejectUnsupportedOp(info.entity, operation, "delete", undefined);
219
+ yield* refuseEmptyParts(info.entity, operation, "delete", info.condition);
104
220
  opInfos.push({
105
221
  type: "delete",
106
222
  entity: info.entity,
@@ -120,14 +236,39 @@ export const buildTransactWriteItems = (operations, operation) => Effect.gen(fun
120
236
  const tableNames = yield* resolveTableNames(opInfos);
121
237
  const items = [];
122
238
  const provenance = [];
123
- const push = (item, from) => {
239
+ const targets = [];
240
+ const guarded = [];
241
+ let tableName = "";
242
+ let keyFields = [];
243
+ const push = (item, from, derived = false) => {
124
244
  items.push(item);
125
245
  provenance.push(from);
246
+ targets.push(transactItemTarget(item, tableName, keyFields, from.entityType, `operation ${from.opIndex} (${from.entityType}${derived ? ", through a uniqueness sentinel or version snapshot it writes" : ""})`));
126
247
  };
127
248
  for (const op of opInfos) {
128
- const tableName = tableNames.get(op.entity);
249
+ tableName = tableNames.get(op.entity);
250
+ const primary = op.entity.indexes.primary;
251
+ keyFields = [primary.pk.field, primary.sk.field];
129
252
  if (op.type === "put") {
130
253
  const built = yield* validateAndBuildPutItem(op.entity, op.input, `${operation}.put`);
254
+ if (op.entity._incarnationToken || op.entity._multiItemWriteFeatures.includes("unique")) {
255
+ const plan = yield* op.entity._planPut({
256
+ tableName,
257
+ ttlAttrName: resolveTtlAttributeName(yield* op.entity._tableTag),
258
+ now: built.now,
259
+ item: built.item,
260
+ createdAtSupplied: built.createdAtSupplied,
261
+ userCondition: op.condition,
262
+ create: op.putKind === "create",
263
+ operation,
264
+ key: op.input,
265
+ });
266
+ guarded.push({ opIndex: op.opIndex, start: items.length, plan });
267
+ for (const [i, item] of plan.items.entries()) {
268
+ push(item, { opIndex: op.opIndex, kind: "guarded", entityType: op.entity.entityType }, i > 0);
269
+ }
270
+ continue;
271
+ }
131
272
  push({
132
273
  Put: {
133
274
  TableName: tableName,
@@ -135,25 +276,6 @@ export const buildTransactWriteItems = (operations, operation) => Effect.gen(fun
135
276
  ...conditionFields(op.condition),
136
277
  },
137
278
  }, { opIndex: op.opIndex, kind: "main", entityType: op.entity.entityType });
138
- // Uniqueness sentinels + the v1 retain snapshot. Emitted immediately
139
- // after their item so a reader of the request sees them as one group;
140
- // `provenance` is what actually carries the association.
141
- const ttlAttrName = resolveTtlAttributeName(yield* op.entity._tableTag);
142
- for (const side of op.entity._buildPutSideItems(built.item, built.now, ttlAttrName)) {
143
- push({
144
- Put: {
145
- TableName: tableName,
146
- Item: toAttributeMap(side.item),
147
- ...(side.guard ?? {}),
148
- },
149
- }, {
150
- opIndex: op.opIndex,
151
- kind: side.kind,
152
- constraintName: side.constraintName,
153
- fields: side.fields,
154
- entityType: op.entity.entityType,
155
- });
156
- }
157
279
  }
158
280
  else if (op.type === "delete") {
159
281
  push({
@@ -175,6 +297,61 @@ export const buildTransactWriteItems = (operations, operation) => Effect.gen(fun
175
297
  }, { opIndex: op.opIndex, kind: "main", entityType: op.entity.entityType });
176
298
  }
177
299
  }
178
- return { items, provenance };
300
+ yield* refuseRepeatedItems(targets, operation);
301
+ return { items, provenance, targets, guarded };
179
302
  });
303
+ // ---------------------------------------------------------------------------
304
+ // judgeCancellation
305
+ // ---------------------------------------------------------------------------
306
+ /** Attempts a transaction with guarded puts makes before it reports a lost race. */
307
+ export const GUARDED_TRANSACTION_ATTEMPTS = 3;
308
+ /**
309
+ * What a cancelled transaction of {@link buildTransactWriteItems} items means,
310
+ * from its positional reasons (`offset`: where those items start in the
311
+ * request). In order of precedence:
312
+ *
313
+ * - `fail` — a guarded put's final verdict: a unique value is taken
314
+ * (`UniqueConstraintViolation`) or its history conflicts (`ValidationError`).
315
+ * Never a caller-condition error: the caller set none.
316
+ * - `conditions` — the caller ops whose OWN condition (`.condition()`,
317
+ * `create()`'s, `Transaction.check`'s) rejected the write.
318
+ * - `retry` — a guarded put lost a race to a concurrent write (or met retained
319
+ * history its read did not see): build and write the transaction again. Its
320
+ * `error` is what to report when every attempt loses.
321
+ *
322
+ * `undefined`: no conditional failure among these items explains it.
323
+ */
324
+ export const judgeCancellation = (built, reasons, offset = 0) => {
325
+ const conditions = new Set();
326
+ let retry;
327
+ const inGuarded = new Set();
328
+ for (const { opIndex, start, plan } of built.guarded) {
329
+ for (let i = 0; i < plan.items.length; i++)
330
+ inGuarded.add(start + i);
331
+ const verdict = plan.verdict(reasons.slice(offset + start, offset + start + plan.items.length));
332
+ if (verdict === undefined)
333
+ continue;
334
+ if (verdict._tag === "Fail")
335
+ return { _tag: "fail", opIndex, error: verdict.error };
336
+ if (verdict._tag === "Condition")
337
+ conditions.add(opIndex);
338
+ else
339
+ retry ??= verdict;
340
+ }
341
+ for (let i = 0; i < built.items.length; i++) {
342
+ if (inGuarded.has(i))
343
+ continue;
344
+ if (reasons[offset + i]?.Code !== "ConditionalCheckFailed")
345
+ continue;
346
+ const from = built.provenance[i];
347
+ if (from !== undefined)
348
+ conditions.add(from.opIndex);
349
+ }
350
+ if (conditions.size > 0) {
351
+ return { _tag: "conditions", opIndices: [...conditions].sort((a, b) => a - b) };
352
+ }
353
+ if (retry !== undefined)
354
+ return { _tag: "retry", error: retry.error, stored: retry.stored };
355
+ return undefined;
356
+ };
180
357
  //# sourceMappingURL=TransactWriteOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransactWriteOps.js","sourceRoot":"","sources":["../../src/internal/TransactWriteOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TransactWriteOps.js","sourceRoot":"","sources":["../../src/internal/TransactWriteOps.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,23 @@ import { ValidationError } from "@effect-dynamodb/schema/Errors.js";
9
9
  import * as KeyComposer from "@effect-dynamodb/schema/KeyComposer.js";
10
10
  import { DateTime, Effect, Schema } from "effect";
11
11
  import type { Entity } from "../Entity.js";
12
+ /**
13
+ * @internal Hidden per-incarnation token of a versioned entity (#133): set
14
+ * when an item is created, it tells an item apart from a deleted-and-recreated
15
+ * one at the same version. Named like
16
+ * `__edd_e__` so it cannot collide with a model field; never decoded.
17
+ */
18
+ export declare const INCARNATION_TOKEN = "__edd_i__";
19
+ /**
20
+ * @internal Hidden string set naming the unique-constraint fields an item
21
+ * holds a DEFAULT for (#133): a decoding-default field that is also an index
22
+ * composite is stored when omitted, but a default never creates a unique
23
+ * sentinel — so no sentinel is composed, rotated or deleted for a field
24
+ * listed here until a write supplies a value for it.
25
+ */
26
+ export declare const UNSENTINELED_DEFAULTS = "__edd_d__";
27
+ /** @internal A fresh incarnation token. */
28
+ export declare const freshIncarnationToken: Effect.Effect<string>;
12
29
  /**
13
30
  * Generate a wire-form timestamp value for the configured encoding from a
14
31
  * Clock-backed `now: DateTime.Utc` (resolved by the caller via `yield*
@@ -72,17 +89,16 @@ export declare const batchRejectReason: (entity: Entity, opType: "put" | "delete
72
89
  * writes an item with no embedding, so it silently drops out of the index.
73
90
  *
74
91
  * **The multi-item lifecycle features split by direction (#113).** `unique`,
75
- * `versioned: { retain }` and `softDelete` all need MORE than one item per write.
76
- * The line between "expand" and "reject" is whether the extra items are
77
- * derivable from the caller's payload or only from stored state:
92
+ * `versioned: { retain }` and `softDelete` all need MORE than one item per write:
78
93
  *
79
- * - **put** — the sentinel and the v1 snapshot come from the payload being
80
- * written. `transactWrite` expands into them (`Entity._buildPutSideItems`).
81
- * - **delete** — the sentinel to release is keyed by the *stored* item's unique
82
- * values, a retain snapshot copies the *stored* row, and a soft-delete
83
- * tombstone IS the stored row relocated to a new sort key. All three need a
84
- * read this path does not do (and a read would introduce a TOCTOU window that
85
- * only another ConditionCheck could close). Rejected with **EDD-9048**.
94
+ * - **put** — expanded. A put of a versioned or unique-constrained entity is
95
+ * planned exactly as `Entity.put` plans it (#133): the item is read, and the
96
+ * Put is guarded on what was read, beside its sentinel reservations and
97
+ * (owned) releases and its retain snapshot (`Entity._planPut`).
98
+ * - **delete** — rejected with **EDD-9048**. The sentinel to release is keyed by
99
+ * the *stored* item's unique values, a retain snapshot copies the *stored* row,
100
+ * and a soft-delete tombstone IS the stored row relocated to a new sort key;
101
+ * the transaction path builds a delete from its key alone.
86
102
  *
87
103
  * `Batch.write` rejects BOTH directions (**EDD-9049**) — see `batchRejectReason`.
88
104
  *
@@ -115,14 +131,17 @@ export declare const composePrimaryKey: (entity: Entity, key: Record<string, unk
115
131
  * are handled in the encode pass — no per-field serialization needed.
116
132
  *
117
133
  * Returns the unmarshalled `item` alongside the marshalled one, plus the `now`
118
- * the timestamps were generated from. `Entity._buildPutSideItems` needs both to
119
- * derive uniqueness sentinels and the v1 version snapshot from the same values
120
- * that were written (#113), and re-deriving `now` there would risk a skew
121
- * between an item's `createdAt` and its snapshot's TTL.
134
+ * the timestamps were generated from, and whether the input supplied
135
+ * `createdAt`. `Entity._planPut` needs them to derive uniqueness sentinels and
136
+ * the retain snapshot from the same values that were written (#113), and to
137
+ * keep a replaced item's `createdAt` (#133); re-deriving `now` there would risk
138
+ * a skew between an item's `createdAt` and its snapshot's TTL.
122
139
  */
123
140
  export declare const validateAndBuildPutItem: (entity: Entity, input: Record<string, unknown>, operation: string) => Effect.Effect<{
124
141
  readonly item: Record<string, unknown>;
125
142
  readonly marshalled: Record<string, import("@aws-sdk/client-dynamodb").AttributeValue>;
126
143
  readonly now: DateTime.Utc;
144
+ /** Whether the input supplied `createdAt` (a replacing put keeps the stored one otherwise). */
145
+ readonly createdAtSupplied: boolean;
127
146
  }, ValidationError>;
128
147
  //# sourceMappingURL=TransactableOps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransactableOps.d.ts","sourceRoot":"","sources":["../../src/internal/TransactableOps.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,WAAW,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAG1C;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,GACrC,KAAK,QAAQ,CAAC,GAAG,EACjB,UAAU,cAAc,GAAG,IAAI,KAC9B,MAAM,GAAG,MAaX,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,MAGzB,CAAA;AAY3B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,QAAQ,KAAK,GAAG,QAAQ,KAAG,MAAM,GAAG,SAcrF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,QAAQ,KAAK,GAAG,QAAQ,EACxB,SAAS,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS;AAChD;;;;GAIG;AACH,QAAQ,OAAO,KACd,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAkFrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,aAAa,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,wiBAU/E,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAaxB,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,MAAM,EACd,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,MAAM,KAChB,MAAM,CAAC,MAAM,CACd;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,0BAA0B,EAAE,cAAc,CAAC,CAAA;IACtF,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAA;CAC3B,EACD,eAAe,CA8Eb,CAAA"}
1
+ {"version":3,"file":"TransactableOps.d.ts","sourceRoot":"","sources":["../../src/internal/TransactableOps.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,WAAW,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAG1C;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,cAAc,CAAA;AAIhD,2CAA2C;AAC3C,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAEvD,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,GACrC,KAAK,QAAQ,CAAC,GAAG,EACjB,UAAU,cAAc,GAAG,IAAI,KAC9B,MAAM,GAAG,MAaX,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,MAGzB,CAAA;AAY3B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,QAAQ,KAAK,GAAG,QAAQ,KAAG,MAAM,GAAG,SAcrF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,QAAQ,KAAK,GAAG,QAAQ,EACxB,SAAS,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS;AAChD;;;;GAIG;AACH,QAAQ,OAAO,KACd,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAkFrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,aAAa,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,wiBAU/E,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAaxB,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,MAAM,EACd,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,MAAM,KAChB,MAAM,CAAC,MAAM,CACd;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,0BAA0B,EAAE,cAAc,CAAC,CAAA;IACtF,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAA;IAC1B,+FAA+F;IAC/F,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;CACpC,EACD,eAAe,CAoFb,CAAA"}
@@ -5,9 +5,28 @@
5
5
  * and put-item construction (validation + key composition + system fields).
6
6
  */
7
7
  import { ValidationError } from "@effect-dynamodb/schema/Errors.js";
8
+ import { makeDefaultCrypto } from "@effect-dynamodb/schema/internal/DefaultCrypto.js";
8
9
  import * as KeyComposer from "@effect-dynamodb/schema/KeyComposer.js";
9
10
  import { DateTime, Effect, Schema } from "effect";
10
11
  import { toAttributeMap } from "../Marshaller.js";
12
+ /**
13
+ * @internal Hidden per-incarnation token of a versioned entity (#133): set
14
+ * when an item is created, it tells an item apart from a deleted-and-recreated
15
+ * one at the same version. Named like
16
+ * `__edd_e__` so it cannot collide with a model field; never decoded.
17
+ */
18
+ export const INCARNATION_TOKEN = "__edd_i__";
19
+ /**
20
+ * @internal Hidden string set naming the unique-constraint fields an item
21
+ * holds a DEFAULT for (#133): a decoding-default field that is also an index
22
+ * composite is stored when omitted, but a default never creates a unique
23
+ * sentinel — so no sentinel is composed, rotated or deleted for a field
24
+ * listed here until a write supplies a value for it.
25
+ */
26
+ export const UNSENTINELED_DEFAULTS = "__edd_d__";
27
+ const incarnationCrypto = makeDefaultCrypto();
28
+ /** @internal A fresh incarnation token. */
29
+ export const freshIncarnationToken = Effect.orDie(incarnationCrypto.randomUUIDv4);
11
30
  /**
12
31
  * Generate a wire-form timestamp value for the configured encoding from a
13
32
  * Clock-backed `now: DateTime.Utc` (resolved by the caller via `yield*
@@ -106,17 +125,16 @@ export const batchRejectReason = (entity, opType) => {
106
125
  * writes an item with no embedding, so it silently drops out of the index.
107
126
  *
108
127
  * **The multi-item lifecycle features split by direction (#113).** `unique`,
109
- * `versioned: { retain }` and `softDelete` all need MORE than one item per write.
110
- * The line between "expand" and "reject" is whether the extra items are
111
- * derivable from the caller's payload or only from stored state:
128
+ * `versioned: { retain }` and `softDelete` all need MORE than one item per write:
112
129
  *
113
- * - **put** — the sentinel and the v1 snapshot come from the payload being
114
- * written. `transactWrite` expands into them (`Entity._buildPutSideItems`).
115
- * - **delete** — the sentinel to release is keyed by the *stored* item's unique
116
- * values, a retain snapshot copies the *stored* row, and a soft-delete
117
- * tombstone IS the stored row relocated to a new sort key. All three need a
118
- * read this path does not do (and a read would introduce a TOCTOU window that
119
- * only another ConditionCheck could close). Rejected with **EDD-9048**.
130
+ * - **put** — expanded. A put of a versioned or unique-constrained entity is
131
+ * planned exactly as `Entity.put` plans it (#133): the item is read, and the
132
+ * Put is guarded on what was read, beside its sentinel reservations and
133
+ * (owned) releases and its retain snapshot (`Entity._planPut`).
134
+ * - **delete** — rejected with **EDD-9048**. The sentinel to release is keyed by
135
+ * the *stored* item's unique values, a retain snapshot copies the *stored* row,
136
+ * and a soft-delete tombstone IS the stored row relocated to a new sort key;
137
+ * the transaction path builds a delete from its key alone.
120
138
  *
121
139
  * `Batch.write` rejects BOTH directions (**EDD-9049**) — see `batchRejectReason`.
122
140
  *
@@ -146,8 +164,8 @@ input) => {
146
164
  if (opType === "delete" && entity._multiItemWriteFeatures.length > 0) {
147
165
  return Effect.fail(fail(`[EDD-9048] deleting an entity configured with ${describeFeatures(entity._multiItemWriteFeatures)}`, "the extra items a delete must write are derived from the STORED item — the sentinel " +
148
166
  "to release is keyed by its unique values, a retain snapshot copies it, and a " +
149
- "soft-delete tombstone is that row relocated to a new sort key. This path never " +
150
- "reads, so it cannot build them. Run the delete as its own operation " +
167
+ "soft-delete tombstone is that row relocated to a new sort key. This path builds a " +
168
+ "delete from its key alone, so it cannot build them. Run the delete as its own operation " +
151
169
  "(db.entities.X.delete(...)), which reads the item first."));
152
170
  }
153
171
  // --- entity-configuration level -----------------------------------------
@@ -221,10 +239,11 @@ export const composePrimaryKey = (entity, key) => {
221
239
  * are handled in the encode pass — no per-field serialization needed.
222
240
  *
223
241
  * Returns the unmarshalled `item` alongside the marshalled one, plus the `now`
224
- * the timestamps were generated from. `Entity._buildPutSideItems` needs both to
225
- * derive uniqueness sentinels and the v1 version snapshot from the same values
226
- * that were written (#113), and re-deriving `now` there would risk a skew
227
- * between an item's `createdAt` and its snapshot's TTL.
242
+ * the timestamps were generated from, and whether the input supplied
243
+ * `createdAt`. `Entity._planPut` needs them to derive uniqueness sentinels and
244
+ * the retain snapshot from the same values that were written (#113), and to
245
+ * keep a replaced item's `createdAt` (#133); re-deriving `now` there would risk
246
+ * a skew between an item's `createdAt` and its snapshot's TTL.
228
247
  */
229
248
  export const validateAndBuildPutItem = (entity, input, operation) => Effect.gen(function* () {
230
249
  // Clock-backed time source resolved once per op; threaded into the sync
@@ -232,13 +251,18 @@ export const validateAndBuildPutItem = (entity, input, operation) => Effect.gen(
232
251
  const now = yield* DateTime.now;
233
252
  const inputSchema = entity.schemas.inputSchema;
234
253
  // Encode → fall back to decode-then-encode (mirrors Entity.put).
235
- const encoded = yield* Schema.encodeUnknownEffect(inputSchema)(input).pipe(Effect.catch(() => Schema.decodeUnknownEffect(inputSchema)(input).pipe(Effect.flatMap((decoded) => Schema.encodeUnknownEffect(inputSchema)(decoded)))), Effect.mapError((cause) => new ValidationError({
254
+ // Omitted decoding defaults are stored, exactly as `Entity.put` does.
255
+ const filled = yield* entity._fillDecodingDefaults(input);
256
+ const unsentineled = entity._unsentineledDefaults(input);
257
+ const encoded = yield* Schema.encodeUnknownEffect(inputSchema)(filled).pipe(Effect.catch(() => Schema.decodeUnknownEffect(inputSchema)(filled).pipe(Effect.flatMap((decoded) => Schema.encodeUnknownEffect(inputSchema)(decoded)))), Effect.mapError((cause) => new ValidationError({
236
258
  entityType: entity.entityType,
237
259
  operation,
238
260
  cause,
239
261
  })));
240
262
  const item = { ...encoded };
241
263
  item.__edd_e__ = entity.entityType;
264
+ if (unsentineled.length > 0)
265
+ item[UNSENTINELED_DEFAULTS] = new Set(unsentineled);
242
266
  // Same normalisation `Entity.put` applies. Without it a `BigIntFromString`
243
267
  // composite composed `txn_420` here and `txn_000…0420` there, so the two
244
268
  // APIs wrote two different rows for the same logical item and neither
@@ -250,6 +274,7 @@ export const validateAndBuildPutItem = (entity, input, operation) => Effect.gen(
250
274
  // (already encoded to wire by `Schema.encode`); else generate a wire
251
275
  // primitive directly.
252
276
  const sf = entity.systemFields;
277
+ const createdAtSupplied = sf.createdAt !== null && item[sf.createdAt] !== undefined;
253
278
  if (sf.createdAt) {
254
279
  if (item[sf.createdAt] === undefined) {
255
280
  item[sf.createdAt] = generateTimestampPrimitive(now, sf.createdAtEncoding);
@@ -262,11 +287,13 @@ export const validateAndBuildPutItem = (entity, input, operation) => Effect.gen(
262
287
  }
263
288
  if (sf.version)
264
289
  item[sf.version] = 1;
290
+ if (entity._incarnationToken)
291
+ item[INCARNATION_TOKEN] = yield* freshIncarnationToken;
265
292
  // Rename domain fields to their stored attribute names, in the same
266
293
  // position `Entity.put` does (after keys + system fields, before sparse
267
294
  // flattening). Omitting it gave a `field:`-renamed entity a differently
268
295
  // shaped item depending on whether `put` or `transactWrite` wrote it — and
269
- // `_buildPutSideItems` derives the v1 retain snapshot from this same item,
296
+ // `_planPut` derives the retain snapshot from this same item,
270
297
  // so the snapshot inherited the wrong shape too (#111).
271
298
  entity._renameToDynamo(item);
272
299
  // Flatten sparse-map fields into per-entry top-level attributes. Throws
@@ -281,6 +308,6 @@ export const validateAndBuildPutItem = (entity, input, operation) => Effect.gen(
281
308
  cause: e instanceof Error ? e.message : String(e),
282
309
  });
283
310
  }
284
- return { item, marshalled: toAttributeMap(item), now };
311
+ return { item, marshalled: toAttributeMap(item), now, createdAtSupplied };
285
312
  });
286
313
  //# sourceMappingURL=TransactableOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransactableOps.js","sourceRoot":"","sources":["../../src/internal/TransactableOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TransactableOps.js","sourceRoot":"","sources":["../../src/internal/TransactableOps.ts"],"names":[],"mappings":"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"}