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.
- 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 +13 -31
- 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 +70 -19
- 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 +15 -6
- package/dist/EventStore.d.ts.map +1 -1
- package/dist/EventStore.js +169 -148
- 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
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* @internal Shared `TransactWriteItems` item-building for `Transaction.transactWrite`
|
|
3
3
|
* and `EventStore.append`'s `additionalItems`.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* which caller op each emitted item belongs to; consumers that map
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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** —
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
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
|
|
119
|
-
*
|
|
120
|
-
* that were written (#113), and
|
|
121
|
-
*
|
|
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;
|
|
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** —
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
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
|
|
150
|
-
"
|
|
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
|
|
225
|
-
*
|
|
226
|
-
* that were written (#113), and
|
|
227
|
-
*
|
|
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
|
-
|
|
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
|
-
// `
|
|
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":"AAAA;;;;;GAKG;AAGH,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;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,GAAiB,EACjB,QAA+B,EACd,EAAE;IACnB,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC7C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACtC,QAAQ,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,KAAK,QAAQ;YACX,iEAAiE;YACjE,mEAAmE;YACnE,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAChC,KAAK,SAAS;YACZ,OAAO,EAAE,CAAA;QACX,KAAK,cAAc;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IAChC,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC3D,cAAc,SAAS,+DAA+D;IACtF,qFAAqF;IACrF,yBAAyB,CAAA;AAE3B,sEAAsE;AACtE,MAAM,gBAAgB,GAAG,CAAC,QAA2D,EAAU,EAAE;IAC/F,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAChC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,cAAc,CAChG,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;QACxB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE;QACZ,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAA;AAC1E,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,MAAwB,EAAsB,EAAE;IAChG,MAAM,QAAQ,GAAG,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;IAC3D,uEAAuE;IACvE,4EAA4E;IAC5E,yBAAyB;IACzB,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAChD,CAAA;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,OAAO,CACL,iCAAiC,MAAM,8BAA8B,gBAAgB,CAAC,QAAQ,CAAC,KAAK;QACpG,gFAAgF;QAChF,iFAAiF;QACjF,uEAAuE,CACxE,CAAA;AACH,CAAC,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"TransactableOps.js","sourceRoot":"","sources":["../../src/internal/TransactableOps.ts"],"names":[],"mappings":"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"}
|