effect-dynamodb 1.36.0 → 1.37.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 +29 -17
- package/dist/Aggregate.d.ts.map +1 -1
- package/dist/Aggregate.js +795 -173
- package/dist/Aggregate.js.map +1 -1
- package/dist/Batch.d.ts.map +1 -1
- package/dist/Batch.js +196 -77
- package/dist/Batch.js.map +1 -1
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +11 -2
- package/dist/Collection.js.map +1 -1
- package/dist/Collections.d.ts +15 -6
- package/dist/Collections.d.ts.map +1 -1
- package/dist/Collections.js +2 -1
- package/dist/Collections.js.map +1 -1
- package/dist/DynamoClient.d.ts +119 -10
- package/dist/DynamoClient.d.ts.map +1 -1
- package/dist/DynamoClient.js +1148 -142
- package/dist/DynamoClient.js.map +1 -1
- package/dist/Entity.d.ts +126 -51
- package/dist/Entity.d.ts.map +1 -1
- package/dist/Entity.js +3477 -539
- package/dist/Entity.js.map +1 -1
- package/dist/EventStore.d.ts +4 -3
- package/dist/EventStore.d.ts.map +1 -1
- package/dist/EventStore.js +616 -53
- package/dist/EventStore.js.map +1 -1
- package/dist/Query.d.ts +311 -25
- package/dist/Query.d.ts.map +1 -1
- package/dist/Query.js +1159 -103
- package/dist/Query.js.map +1 -1
- package/dist/Table.d.ts +172 -3
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +85 -4
- package/dist/Table.js.map +1 -1
- package/dist/Transaction.d.ts +18 -2
- package/dist/Transaction.d.ts.map +1 -1
- package/dist/Transaction.js +62 -8
- package/dist/Transaction.js.map +1 -1
- package/dist/change-feed/DynamoStreamsClient.d.ts +1 -1
- package/dist/change-feed/DynamoStreamsClient.d.ts.map +1 -1
- package/dist/change-feed/DynamoStreamsClient.js +3 -1
- package/dist/change-feed/DynamoStreamsClient.js.map +1 -1
- package/dist/index.d.ts +6 -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/BoundQuery.d.ts +226 -32
- package/dist/internal/BoundQuery.d.ts.map +1 -1
- package/dist/internal/BoundQuery.js +96 -18
- package/dist/internal/BoundQuery.js.map +1 -1
- package/dist/internal/Capacity.d.ts +8 -0
- package/dist/internal/Capacity.d.ts.map +1 -1
- package/dist/internal/Capacity.js +24 -4
- package/dist/internal/Capacity.js.map +1 -1
- package/dist/internal/CredentialRefusal.d.ts +32 -0
- package/dist/internal/CredentialRefusal.d.ts.map +1 -0
- package/dist/internal/CredentialRefusal.js +80 -0
- package/dist/internal/CredentialRefusal.js.map +1 -0
- package/dist/internal/Cursor.d.ts +90 -0
- package/dist/internal/Cursor.d.ts.map +1 -0
- package/dist/internal/Cursor.js +179 -0
- package/dist/internal/Cursor.js.map +1 -0
- package/dist/internal/ExpressionLimits.d.ts +18 -2
- package/dist/internal/ExpressionLimits.d.ts.map +1 -1
- package/dist/internal/ExpressionLimits.js +35 -2
- package/dist/internal/ExpressionLimits.js.map +1 -1
- package/dist/internal/ProjectionEngine.d.ts +16 -0
- package/dist/internal/ProjectionEngine.d.ts.map +1 -1
- package/dist/internal/ProjectionEngine.js +242 -46
- package/dist/internal/ProjectionEngine.js.map +1 -1
- package/dist/internal/RangePlanner.d.ts +394 -0
- package/dist/internal/RangePlanner.d.ts.map +1 -0
- package/dist/internal/RangePlanner.js +1296 -0
- package/dist/internal/RangePlanner.js.map +1 -0
- package/dist/internal/Rekey.d.ts +78 -0
- package/dist/internal/Rekey.d.ts.map +1 -0
- package/dist/internal/Rekey.js +323 -0
- package/dist/internal/Rekey.js.map +1 -0
- package/dist/internal/TransactPlan.d.ts +8 -1
- package/dist/internal/TransactPlan.d.ts.map +1 -1
- package/dist/internal/TransactPlan.js +9 -2
- package/dist/internal/TransactPlan.js.map +1 -1
- package/dist/internal/TransactWriteOps.d.ts +10 -7
- package/dist/internal/TransactWriteOps.d.ts.map +1 -1
- package/dist/internal/TransactWriteOps.js +82 -6
- package/dist/internal/TransactWriteOps.js.map +1 -1
- package/dist/internal/TransactableOps.d.ts +31 -0
- package/dist/internal/TransactableOps.d.ts.map +1 -1
- package/dist/internal/TransactableOps.js +50 -1
- package/dist/internal/TransactableOps.js.map +1 -1
- package/dist/internal/WriteDiagnosis.d.ts.map +1 -1
- package/dist/internal/WriteDiagnosis.js +10 -7
- package/dist/internal/WriteDiagnosis.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal Cursor — the opaque string a query's `fetch` hands back (#171,
|
|
3
|
+
* design §10).
|
|
4
|
+
*
|
|
5
|
+
* Two formats:
|
|
6
|
+
*
|
|
7
|
+
* - **Legacy** — `btoa(JSON.stringify(key))`: a bare `LastEvaluatedKey`. Every
|
|
8
|
+
* query without a planner still emits it whenever it can carry the key
|
|
9
|
+
* exactly (every value `S` / `N`, and JSON text `btoa` accepts), so the
|
|
10
|
+
* cursors of plain queries are the bytes they always were.
|
|
11
|
+
* - **v2** — `"v2." + base64url(utf8(JSON))` of a {@link CursorV2}: a key with
|
|
12
|
+
* `B` values or text outside Latin-1 (on which `btoa` threw), and every
|
|
13
|
+
* cursor of a planned query, which carries its plan's fingerprint, mode and
|
|
14
|
+
* resume position.
|
|
15
|
+
*
|
|
16
|
+
* A cursor starting `v2.` is v2 (`.` is outside the base64 alphabet);
|
|
17
|
+
* anything else is legacy, read as `{ k }`.
|
|
18
|
+
*/
|
|
19
|
+
const V2 = "v2.";
|
|
20
|
+
const PLAN_MODES = new Set([
|
|
21
|
+
"key",
|
|
22
|
+
"skip-scan",
|
|
23
|
+
"filter",
|
|
24
|
+
"naive",
|
|
25
|
+
"jump",
|
|
26
|
+
"precise",
|
|
27
|
+
"empty",
|
|
28
|
+
]);
|
|
29
|
+
const encoder = new TextEncoder();
|
|
30
|
+
const decoder = new TextDecoder("utf-8", { fatal: true });
|
|
31
|
+
/** Standard base64 of `bytes` (no `Buffer`: the library is runtime-agnostic). */
|
|
32
|
+
export const toBase64 = (bytes) => {
|
|
33
|
+
let binary = "";
|
|
34
|
+
for (let i = 0; i < bytes.length; i += 0x8000) {
|
|
35
|
+
binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000));
|
|
36
|
+
}
|
|
37
|
+
return btoa(binary);
|
|
38
|
+
};
|
|
39
|
+
/** The bytes of standard (or, `url`, base64url) text; throws on text that is neither. */
|
|
40
|
+
export const fromBase64 = (text, url = false) => {
|
|
41
|
+
const standard = url ? text.replace(/-/g, "+").replace(/_/g, "/") : text;
|
|
42
|
+
const padded = url ? standard.padEnd(Math.ceil(standard.length / 4) * 4, "=") : standard;
|
|
43
|
+
const binary = atob(padded);
|
|
44
|
+
const bytes = new Uint8Array(binary.length);
|
|
45
|
+
for (let i = 0; i < binary.length; i++)
|
|
46
|
+
bytes[i] = binary.charCodeAt(i);
|
|
47
|
+
return bytes;
|
|
48
|
+
};
|
|
49
|
+
export const toBase64Url = (bytes) => toBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
50
|
+
/** A key attribute as a cursor carries it; `undefined` for a type no key has. */
|
|
51
|
+
export const toWire = (value) => {
|
|
52
|
+
if (value.S !== undefined)
|
|
53
|
+
return { S: value.S };
|
|
54
|
+
if (value.N !== undefined)
|
|
55
|
+
return { N: value.N };
|
|
56
|
+
if (value.B !== undefined)
|
|
57
|
+
return { B: toBase64(value.B) };
|
|
58
|
+
return undefined;
|
|
59
|
+
};
|
|
60
|
+
/** A wire value back as an attribute value. */
|
|
61
|
+
export const fromWire = (value) => "S" in value ? { S: value.S } : "N" in value ? { N: value.N } : { B: fromBase64(value.B) };
|
|
62
|
+
/** A key value (`S` text or `B` bytes) as a wire value. */
|
|
63
|
+
export const keyValueToWire = (value) => typeof value === "string" ? { S: value } : { B: toBase64(value) };
|
|
64
|
+
/** A wire value as a key value; `undefined` for an `N`, which no planned sort key holds. */
|
|
65
|
+
export const wireToKeyValue = (value) => "S" in value ? value.S : "B" in value ? fromBase64(value.B) : undefined;
|
|
66
|
+
/** A key's attributes as a cursor carries them; `undefined` when one has no wire form. */
|
|
67
|
+
export const keyToWire = (key) => {
|
|
68
|
+
const out = {};
|
|
69
|
+
for (const [name, value] of Object.entries(key)) {
|
|
70
|
+
const wire = toWire(value);
|
|
71
|
+
if (wire === undefined)
|
|
72
|
+
return undefined;
|
|
73
|
+
out[name] = wire;
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
};
|
|
77
|
+
/** A cursor's key back as an `ExclusiveStartKey`. */
|
|
78
|
+
export const keyFromWire = (key) => {
|
|
79
|
+
const out = {};
|
|
80
|
+
for (const [name, value] of Object.entries(key))
|
|
81
|
+
out[name] = fromWire(value);
|
|
82
|
+
return out;
|
|
83
|
+
};
|
|
84
|
+
/** Encode a v2 envelope. */
|
|
85
|
+
export const encodeV2 = (cursor) => V2 + toBase64Url(encoder.encode(JSON.stringify(cursor)));
|
|
86
|
+
const isLatin1 = (text) => {
|
|
87
|
+
for (let i = 0; i < text.length; i++)
|
|
88
|
+
if (text.charCodeAt(i) > 0xff)
|
|
89
|
+
return false;
|
|
90
|
+
return true;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* The cursor of a query without a planner, resuming after `key`: the legacy
|
|
94
|
+
* bytes whenever they carry it exactly (every value `S` / `N`, Latin-1 JSON —
|
|
95
|
+
* what every such cursor always was), else `{ v: 2, k }`. A `B` value
|
|
96
|
+
* serialises as `{"0":…}` in the legacy form and never round-trips, and
|
|
97
|
+
* `btoa` throws on text above U+00FF (design §19 E2).
|
|
98
|
+
*/
|
|
99
|
+
export const encodeKeyCursor = (key) => {
|
|
100
|
+
const json = JSON.stringify(key);
|
|
101
|
+
const plain = Object.values(key).every((value) => value.B === undefined && (value.S !== undefined || value.N !== undefined));
|
|
102
|
+
if (plain && isLatin1(json))
|
|
103
|
+
return btoa(json);
|
|
104
|
+
const wire = keyToWire(key);
|
|
105
|
+
// A key of a type no DynamoDB key has: as it always was.
|
|
106
|
+
return wire === undefined ? btoa(json) : encodeV2({ v: 2, k: wire });
|
|
107
|
+
};
|
|
108
|
+
const isRecord = (u) => typeof u === "object" && u !== null && !Array.isArray(u);
|
|
109
|
+
const isWireValue = (u) => {
|
|
110
|
+
if (!isRecord(u))
|
|
111
|
+
return false;
|
|
112
|
+
const keys = Object.keys(u);
|
|
113
|
+
if (keys.length !== 1)
|
|
114
|
+
return false;
|
|
115
|
+
const [tag] = keys;
|
|
116
|
+
if (tag === "S" || tag === "N")
|
|
117
|
+
return typeof u[tag] === "string";
|
|
118
|
+
if (tag === "B") {
|
|
119
|
+
if (typeof u.B !== "string")
|
|
120
|
+
return false;
|
|
121
|
+
try {
|
|
122
|
+
fromBase64(u.B);
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return false;
|
|
130
|
+
};
|
|
131
|
+
/** A key as a cursor carries it: every value a valid {@link WireValue}. */
|
|
132
|
+
export const isWireKey = (u) => isRecord(u) && Object.keys(u).length > 0 && Object.values(u).every(isWireValue);
|
|
133
|
+
/**
|
|
134
|
+
* Read a cursor of either format, or `undefined` when it is malformed: not
|
|
135
|
+
* base64 JSON, a v2 envelope of the wrong shape, or a legacy key whose values
|
|
136
|
+
* are not `S` / `N` attribute values (the only ones it ever carried).
|
|
137
|
+
*/
|
|
138
|
+
export const decode = (text) => {
|
|
139
|
+
let parsed;
|
|
140
|
+
try {
|
|
141
|
+
parsed = text.startsWith(V2)
|
|
142
|
+
? JSON.parse(decoder.decode(fromBase64(text.slice(V2.length), true)))
|
|
143
|
+
: JSON.parse(atob(text));
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
if (!text.startsWith(V2)) {
|
|
149
|
+
if (!isRecord(parsed) || Object.keys(parsed).length === 0)
|
|
150
|
+
return undefined;
|
|
151
|
+
const legacy = Object.values(parsed).every((value) => isWireValue(value) && !("B" in value));
|
|
152
|
+
return legacy ? { v: 2, k: parsed } : undefined;
|
|
153
|
+
}
|
|
154
|
+
if (!isRecord(parsed) || parsed.v !== 2)
|
|
155
|
+
return undefined;
|
|
156
|
+
const allowed = new Set(["v", "f", "s", "t", "k", "a", "d", "p"]);
|
|
157
|
+
if (Object.keys(parsed).some((key) => !allowed.has(key)))
|
|
158
|
+
return undefined;
|
|
159
|
+
if (parsed.f !== undefined && typeof parsed.f !== "string")
|
|
160
|
+
return undefined;
|
|
161
|
+
if (parsed.s !== undefined && !(typeof parsed.s === "string" && PLAN_MODES.has(parsed.s))) {
|
|
162
|
+
return undefined;
|
|
163
|
+
}
|
|
164
|
+
if (parsed.t !== undefined && !isWireValue(parsed.t))
|
|
165
|
+
return undefined;
|
|
166
|
+
if (parsed.k !== undefined && !isWireKey(parsed.k))
|
|
167
|
+
return undefined;
|
|
168
|
+
if (parsed.a !== undefined && !isWireValue(parsed.a))
|
|
169
|
+
return undefined;
|
|
170
|
+
if (parsed.d !== undefined && parsed.d !== 1)
|
|
171
|
+
return undefined;
|
|
172
|
+
if (parsed.p !== undefined && parsed.p !== 0 && parsed.p !== 1)
|
|
173
|
+
return undefined;
|
|
174
|
+
const positions = [parsed.k, parsed.a, parsed.d].filter((field) => field !== undefined);
|
|
175
|
+
if (positions.length > 1)
|
|
176
|
+
return undefined;
|
|
177
|
+
return parsed;
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=Cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cursor.js","sourceRoot":"","sources":["../../src/internal/Cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Used two ways, neither of them a pre-check:
|
|
6
6
|
*
|
|
7
7
|
* - by strategies that pick a request that fits — `Entity`'s wide-update split
|
|
8
|
-
* and its strongest-guard fallback ({@link expressionFits})
|
|
9
|
-
* nothing;
|
|
8
|
+
* and its strongest-guard fallback ({@link expressionFits}), the guard on a
|
|
9
|
+
* 1.36 row's move ({@link asReadGuard}) — refusing nothing;
|
|
10
10
|
* - by `WriteDiagnosis.ts`, to confirm DynamoDB's rejection of an expression
|
|
11
11
|
* against the request that was sent and name it.
|
|
12
12
|
*
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* rejected; an `IN` of 100 operands accepted and 101 rejected. The length is
|
|
16
16
|
* the expression string's own, placeholders unexpanded.
|
|
17
17
|
*/
|
|
18
|
+
import type { AttributeValue } from "@aws-sdk/client-dynamodb";
|
|
18
19
|
/** DynamoDB's limit on one expression's length, in characters. */
|
|
19
20
|
export declare const EXPRESSION_MAX_LENGTH = 4096;
|
|
20
21
|
/** DynamoDB's limit on one expression's operators and functions. */
|
|
@@ -42,4 +43,19 @@ export declare const expressionCost: (expression: string | undefined, kind?: "co
|
|
|
42
43
|
* strategy choosing a request that fits, never to refuse one.
|
|
43
44
|
*/
|
|
44
45
|
export declare const expressionFits: (expression: string, kind?: "condition" | "update") => boolean;
|
|
46
|
+
/**
|
|
47
|
+
* The condition that a stored row is still as it was read (#171): it exists,
|
|
48
|
+
* and every attribute but its table key (`pkField`, `sk`) holds the value
|
|
49
|
+
* read — `prefer`'s first (an `updatedAt`), then the rest by name, as many as
|
|
50
|
+
* fit DynamoDB's limits on one expression (all of any row but a very wide
|
|
51
|
+
* one). A Delete of a 1.36 row carries it, so a row a write changed in
|
|
52
|
+
* between cancels the move instead of being lost. `absent` names attributes
|
|
53
|
+
* the read did not have that a write may add without changing any other (an
|
|
54
|
+
* outbox drainer's claim): each must still be absent.
|
|
55
|
+
*/
|
|
56
|
+
export declare const asReadGuard: (stored: Record<string, AttributeValue>, pkField: string, prefer: ReadonlyArray<string>, absent?: ReadonlyArray<string>) => {
|
|
57
|
+
readonly ConditionExpression: string;
|
|
58
|
+
readonly ExpressionAttributeNames: Record<string, string>;
|
|
59
|
+
readonly ExpressionAttributeValues?: Record<string, AttributeValue>;
|
|
60
|
+
};
|
|
45
61
|
//# sourceMappingURL=ExpressionLimits.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpressionLimits.d.ts","sourceRoot":"","sources":["../../src/internal/ExpressionLimits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,OAAO,CAAA;AACzC,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,oDAAoD;AACpD,eAAO,MAAM,eAAe,MAAM,CAAA;AAQlC;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,YAAY,MAAM,EAAE,MAAM,WAAW,GAAG,QAAQ,KAAG,MAoBjF,CAAA;AAED,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,GAAI,YAAY,MAAM,KAAG,MAQtD,CAAA;AAED,2DAA2D;AAC3D,eAAO,MAAM,cAAc,GACzB,YAAY,MAAM,GAAG,SAAS,EAC9B,OAAM,WAAW,GAAG,QAAsB,KACzC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAGwB,CAAA;AAEhF;;;GAGG;AACH,eAAO,MAAM,cAAc,GACzB,YAAY,MAAM,EAClB,OAAM,WAAW,GAAG,QAAsB,KACzC,OAOF,CAAA"}
|
|
1
|
+
{"version":3,"file":"ExpressionLimits.d.ts","sourceRoot":"","sources":["../../src/internal/ExpressionLimits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE9D,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,OAAO,CAAA;AACzC,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,oDAAoD;AACpD,eAAO,MAAM,eAAe,MAAM,CAAA;AAQlC;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,YAAY,MAAM,EAAE,MAAM,WAAW,GAAG,QAAQ,KAAG,MAoBjF,CAAA;AAED,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,GAAI,YAAY,MAAM,KAAG,MAQtD,CAAA;AAED,2DAA2D;AAC3D,eAAO,MAAM,cAAc,GACzB,YAAY,MAAM,GAAG,SAAS,EAC9B,OAAM,WAAW,GAAG,QAAsB,KACzC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAGwB,CAAA;AAEhF;;;GAGG;AACH,eAAO,MAAM,cAAc,GACzB,YAAY,MAAM,EAClB,OAAM,WAAW,GAAG,QAAsB,KACzC,OAOF,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACtC,SAAS,MAAM,EACf,QAAQ,aAAa,CAAC,MAAM,CAAC,EAC7B,SAAQ,aAAa,CAAC,MAAM,CAAM,KACjC;IACD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzD,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAwBpE,CAAA"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Used two ways, neither of them a pre-check:
|
|
6
6
|
*
|
|
7
7
|
* - by strategies that pick a request that fits — `Entity`'s wide-update split
|
|
8
|
-
* and its strongest-guard fallback ({@link expressionFits})
|
|
9
|
-
* nothing;
|
|
8
|
+
* and its strongest-guard fallback ({@link expressionFits}), the guard on a
|
|
9
|
+
* 1.36 row's move ({@link asReadGuard}) — refusing nothing;
|
|
10
10
|
* - by `WriteDiagnosis.ts`, to confirm DynamoDB's rejection of an expression
|
|
11
11
|
* against the request that was sent and name it.
|
|
12
12
|
*
|
|
@@ -86,4 +86,37 @@ export const expressionFits = (expression, kind = "condition") => {
|
|
|
86
86
|
cost.operators <= EXPRESSION_MAX_OPERATORS &&
|
|
87
87
|
largestInOperands(expression) <= IN_MAX_OPERANDS);
|
|
88
88
|
};
|
|
89
|
+
/**
|
|
90
|
+
* The condition that a stored row is still as it was read (#171): it exists,
|
|
91
|
+
* and every attribute but its table key (`pkField`, `sk`) holds the value
|
|
92
|
+
* read — `prefer`'s first (an `updatedAt`), then the rest by name, as many as
|
|
93
|
+
* fit DynamoDB's limits on one expression (all of any row but a very wide
|
|
94
|
+
* one). A Delete of a 1.36 row carries it, so a row a write changed in
|
|
95
|
+
* between cancels the move instead of being lost. `absent` names attributes
|
|
96
|
+
* the read did not have that a write may add without changing any other (an
|
|
97
|
+
* outbox drainer's claim): each must still be absent.
|
|
98
|
+
*/
|
|
99
|
+
export const asReadGuard = (stored, pkField, prefer, absent = []) => {
|
|
100
|
+
const names = { "#gpk": pkField };
|
|
101
|
+
const values = {};
|
|
102
|
+
let expression = "attribute_exists(#gpk)";
|
|
103
|
+
for (const [i, attr] of absent.filter((attr) => stored[attr] === undefined).entries()) {
|
|
104
|
+
names[`#ga${i}`] = attr;
|
|
105
|
+
expression = `${expression} AND attribute_not_exists(#ga${i})`;
|
|
106
|
+
}
|
|
107
|
+
const attrs = [...new Set([...prefer, ...Object.keys(stored).sort()])].filter((attr) => attr !== pkField && attr !== "sk" && stored[attr] !== undefined);
|
|
108
|
+
for (const [i, attr] of attrs.entries()) {
|
|
109
|
+
const clause = `#g${i} = :g${i}`;
|
|
110
|
+
if (!expressionFits(`${expression} AND ${clause}`))
|
|
111
|
+
continue;
|
|
112
|
+
names[`#g${i}`] = attr;
|
|
113
|
+
values[`:g${i}`] = stored[attr];
|
|
114
|
+
expression = `${expression} AND ${clause}`;
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
ConditionExpression: expression,
|
|
118
|
+
ExpressionAttributeNames: names,
|
|
119
|
+
...(Object.keys(values).length > 0 && { ExpressionAttributeValues: values }),
|
|
120
|
+
};
|
|
121
|
+
};
|
|
89
122
|
//# sourceMappingURL=ExpressionLimits.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpressionLimits.js","sourceRoot":"","sources":["../../src/internal/ExpressionLimits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"ExpressionLimits.js","sourceRoot":"","sources":["../../src/internal/ExpressionLimits.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @internal
|
|
16
16
|
*/
|
|
17
|
+
import type { AttributeValue } from "@aws-sdk/client-dynamodb";
|
|
17
18
|
import { ConcurrentModification, type ConditionalCheckFailed, ValidationError } from "@effect-dynamodb/schema/Errors.js";
|
|
18
19
|
import { type Duration, Effect, Option, Schedule, type Schema } from "effect";
|
|
19
20
|
import type { StreamEvent } from "../EventStore.js";
|
|
@@ -81,6 +82,17 @@ export interface EngineEntity {
|
|
|
81
82
|
readonly _attachPrototype?: ((decoded: any) => any) | undefined;
|
|
82
83
|
readonly _multiItemWriteFeatures?: ReadonlyArray<string> | undefined;
|
|
83
84
|
readonly schemas: any;
|
|
85
|
+
readonly _primaryKey136: (key: Record<string, unknown>, force?: boolean) => Record<string, string> | undefined;
|
|
86
|
+
readonly _ownsRow136: (key: Record<string, unknown>, at: Record<string, unknown>, row: Record<string, AttributeValue>) => boolean;
|
|
87
|
+
readonly _spells136: (key: Record<string, unknown>) => boolean;
|
|
88
|
+
readonly _currentKeyOf136: (stored: Record<string, unknown>, force?: boolean) => {
|
|
89
|
+
readonly current: Record<string, string>;
|
|
90
|
+
} | "same" | undefined;
|
|
91
|
+
readonly _clearAlias136: (key: Record<string, unknown>, operation: string) => Effect.Effect<any, any, any>;
|
|
92
|
+
readonly _displaceValueless136: (tableName: string, keys: {
|
|
93
|
+
readonly pk: string;
|
|
94
|
+
readonly sk: string;
|
|
95
|
+
}, row: Record<string, AttributeValue>, operation: string) => Effect.Effect<boolean, any, any>;
|
|
84
96
|
}
|
|
85
97
|
/** @internal One source a row engine reads. */
|
|
86
98
|
export interface EngineSource {
|
|
@@ -230,6 +242,10 @@ interface Row {
|
|
|
230
242
|
readonly values: Record<string, unknown>;
|
|
231
243
|
readonly tombstone: boolean;
|
|
232
244
|
readonly createdAt: unknown;
|
|
245
|
+
/** The row's 1.36 key, when it was read there (#171): the write moves it. */
|
|
246
|
+
readonly at136?: Record<string, string> | undefined;
|
|
247
|
+
/** The row as stored, when it was read at its 1.36 key: the move deletes it only while it is so. */
|
|
248
|
+
readonly stored?: Record<string, AttributeValue> | undefined;
|
|
233
249
|
}
|
|
234
250
|
/** @internal */
|
|
235
251
|
export declare const makeEngine: (config: EngineConfig) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectionEngine.d.ts","sourceRoot":"","sources":["../../src/internal/ProjectionEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"ProjectionEngine.d.ts","sourceRoot":"","sources":["../../src/internal/ProjectionEngine.ts"],"names":[],"mappings":"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"}
|