@model-ts/dynamodb 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/__test__/client-env-guard.test.d.ts +1 -0
  3. package/dist/cjs/__test__/client-env-guard.test.js +28 -0
  4. package/dist/cjs/__test__/client-env-guard.test.js.map +1 -0
  5. package/dist/cjs/__test__/conformance.test.d.ts +1 -0
  6. package/dist/cjs/__test__/conformance.test.js +1835 -0
  7. package/dist/cjs/__test__/conformance.test.js.map +1 -0
  8. package/dist/cjs/__test__/in-memory.spec.test.d.ts +1 -0
  9. package/dist/cjs/__test__/in-memory.spec.test.js +185 -0
  10. package/dist/cjs/__test__/in-memory.spec.test.js.map +1 -0
  11. package/dist/cjs/__test__/rollback.test.d.ts +1 -0
  12. package/dist/cjs/__test__/rollback.test.js +196 -0
  13. package/dist/cjs/__test__/rollback.test.js.map +1 -0
  14. package/dist/cjs/client.d.ts +2 -2
  15. package/dist/cjs/client.js +14 -6
  16. package/dist/cjs/client.js.map +1 -1
  17. package/dist/cjs/errors.d.ts +13 -1
  18. package/dist/cjs/errors.js +12 -1
  19. package/dist/cjs/errors.js.map +1 -1
  20. package/dist/cjs/in-memory/document-client.d.ts +45 -0
  21. package/dist/cjs/in-memory/document-client.js +795 -0
  22. package/dist/cjs/in-memory/document-client.js.map +1 -0
  23. package/dist/cjs/in-memory/expression.d.ts +42 -0
  24. package/dist/cjs/in-memory/expression.js +585 -0
  25. package/dist/cjs/in-memory/expression.js.map +1 -0
  26. package/dist/cjs/in-memory/index.d.ts +2 -0
  27. package/dist/cjs/in-memory/index.js +6 -0
  28. package/dist/cjs/in-memory/index.js.map +1 -0
  29. package/dist/cjs/in-memory/spec.d.ts +23 -0
  30. package/dist/cjs/in-memory/spec.js +141 -0
  31. package/dist/cjs/in-memory/spec.js.map +1 -0
  32. package/dist/cjs/in-memory/store.d.ts +73 -0
  33. package/dist/cjs/in-memory/store.js +267 -0
  34. package/dist/cjs/in-memory/store.js.map +1 -0
  35. package/dist/cjs/in-memory/treap.d.ts +31 -0
  36. package/dist/cjs/in-memory/treap.js +187 -0
  37. package/dist/cjs/in-memory/treap.js.map +1 -0
  38. package/dist/cjs/in-memory/utils.d.ts +10 -0
  39. package/dist/cjs/in-memory/utils.js +38 -0
  40. package/dist/cjs/in-memory/utils.js.map +1 -0
  41. package/dist/cjs/sandbox.d.ts +2 -0
  42. package/dist/cjs/sandbox.js +172 -1
  43. package/dist/cjs/sandbox.js.map +1 -1
  44. package/dist/esm/__test__/client-env-guard.test.d.ts +1 -0
  45. package/dist/esm/__test__/client-env-guard.test.js +26 -0
  46. package/dist/esm/__test__/client-env-guard.test.js.map +1 -0
  47. package/dist/esm/__test__/conformance.test.d.ts +1 -0
  48. package/dist/esm/__test__/conformance.test.js +1833 -0
  49. package/dist/esm/__test__/conformance.test.js.map +1 -0
  50. package/dist/esm/__test__/in-memory.spec.test.d.ts +1 -0
  51. package/dist/esm/__test__/in-memory.spec.test.js +183 -0
  52. package/dist/esm/__test__/in-memory.spec.test.js.map +1 -0
  53. package/dist/esm/__test__/rollback.test.d.ts +1 -0
  54. package/dist/esm/__test__/rollback.test.js +194 -0
  55. package/dist/esm/__test__/rollback.test.js.map +1 -0
  56. package/dist/esm/client.d.ts +2 -2
  57. package/dist/esm/client.js +14 -6
  58. package/dist/esm/client.js.map +1 -1
  59. package/dist/esm/errors.d.ts +13 -1
  60. package/dist/esm/errors.js +10 -0
  61. package/dist/esm/errors.js.map +1 -1
  62. package/dist/esm/in-memory/document-client.d.ts +45 -0
  63. package/dist/esm/in-memory/document-client.js +791 -0
  64. package/dist/esm/in-memory/document-client.js.map +1 -0
  65. package/dist/esm/in-memory/expression.d.ts +42 -0
  66. package/dist/esm/in-memory/expression.js +577 -0
  67. package/dist/esm/in-memory/expression.js.map +1 -0
  68. package/dist/esm/in-memory/index.d.ts +2 -0
  69. package/dist/esm/in-memory/index.js +3 -0
  70. package/dist/esm/in-memory/index.js.map +1 -0
  71. package/dist/esm/in-memory/spec.d.ts +23 -0
  72. package/dist/esm/in-memory/spec.js +138 -0
  73. package/dist/esm/in-memory/spec.js.map +1 -0
  74. package/dist/esm/in-memory/store.d.ts +73 -0
  75. package/dist/esm/in-memory/store.js +258 -0
  76. package/dist/esm/in-memory/store.js.map +1 -0
  77. package/dist/esm/in-memory/treap.d.ts +31 -0
  78. package/dist/esm/in-memory/treap.js +183 -0
  79. package/dist/esm/in-memory/treap.js.map +1 -0
  80. package/dist/esm/in-memory/utils.d.ts +10 -0
  81. package/dist/esm/in-memory/utils.js +28 -0
  82. package/dist/esm/in-memory/utils.js.map +1 -0
  83. package/dist/esm/sandbox.d.ts +2 -0
  84. package/dist/esm/sandbox.js +172 -1
  85. package/dist/esm/sandbox.js.map +1 -1
  86. package/package.json +2 -1
  87. package/src/__test__/client-env-guard.test.ts +31 -0
  88. package/src/__test__/conformance.test.ts +2042 -0
  89. package/src/__test__/in-memory.spec.test.ts +230 -0
  90. package/src/__test__/rollback.test.ts +279 -0
  91. package/src/client.ts +17 -4
  92. package/src/errors.ts +24 -0
  93. package/src/in-memory/document-client.ts +1140 -0
  94. package/src/in-memory/expression.ts +730 -0
  95. package/src/in-memory/index.ts +2 -0
  96. package/src/in-memory/spec.ts +159 -0
  97. package/src/in-memory/store.ts +360 -0
  98. package/src/in-memory/treap.ts +239 -0
  99. package/src/in-memory/utils.ts +45 -0
  100. package/src/sandbox.ts +227 -1
@@ -0,0 +1,585 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compareValues = exports.matchesRangeCondition = exports.parseUpdateExpression = exports.evaluateConditionExpression = exports.parseKeyConditionExpression = void 0;
4
+ const errors_1 = require("../errors");
5
+ const MISSING = Symbol("missing");
6
+ const KEY_COND_BEGINS_WITH = /^(.+?)\s*=\s*(.+?)\s+and\s+begins_with\((.+?),\s*(.+?)\)$/i;
7
+ const KEY_COND_BETWEEN = /^(.+?)\s*=\s*(.+?)\s+and\s+(.+?)\s+between\s+(.+?)\s+and\s+(.+)$/i;
8
+ const KEY_COND_COMPARE = /^(.+?)\s*=\s*(.+?)\s+and\s+(.+?)\s*(<=|<|>=|>|=)\s*(.+)$/i;
9
+ const KEY_COND_HASH_ONLY = /^(.+?)\s*=\s*(.+)$/i;
10
+ const parseKeyConditionExpression = (expression, context) => {
11
+ const source = expression.trim();
12
+ const beginsMatch = source.match(KEY_COND_BEGINS_WITH);
13
+ if (beginsMatch) {
14
+ const [, hashAttrToken, hashValueToken, rangeAttrToken, rangeValueToken] = beginsMatch;
15
+ const hashAttribute = resolveAttributeToken(hashAttrToken, context);
16
+ const rangeAttribute = resolveAttributeToken(rangeAttrToken, context);
17
+ const rangeValue = resolveValueToken(rangeValueToken, undefined, context);
18
+ if (typeof rangeValue !== "string") {
19
+ throw new errors_1.NotSupportedError({
20
+ method: context.method,
21
+ featurePath: "KeyConditionExpression.begins_with.value",
22
+ reason: "begins_with currently supports string operands only.",
23
+ });
24
+ }
25
+ return {
26
+ hashAttribute,
27
+ hashValue: resolveValueToken(hashValueToken, undefined, context),
28
+ range: {
29
+ attribute: rangeAttribute,
30
+ condition: { type: "begins_with", value: rangeValue },
31
+ },
32
+ };
33
+ }
34
+ const betweenMatch = source.match(KEY_COND_BETWEEN);
35
+ if (betweenMatch) {
36
+ const [, hashAttrToken, hashValueToken, rangeAttrToken, lowerToken, upperToken] = betweenMatch;
37
+ return {
38
+ hashAttribute: resolveAttributeToken(hashAttrToken, context),
39
+ hashValue: resolveValueToken(hashValueToken, undefined, context),
40
+ range: {
41
+ attribute: resolveAttributeToken(rangeAttrToken, context),
42
+ condition: {
43
+ type: "between",
44
+ lower: resolveValueToken(lowerToken, undefined, context),
45
+ upper: resolveValueToken(upperToken, undefined, context),
46
+ },
47
+ },
48
+ };
49
+ }
50
+ const compareMatch = source.match(KEY_COND_COMPARE);
51
+ if (compareMatch) {
52
+ const [, hashAttrToken, hashValueToken, rangeAttrToken, operator, rangeValueToken] = compareMatch;
53
+ return {
54
+ hashAttribute: resolveAttributeToken(hashAttrToken, context),
55
+ hashValue: resolveValueToken(hashValueToken, undefined, context),
56
+ range: {
57
+ attribute: resolveAttributeToken(rangeAttrToken, context),
58
+ condition: {
59
+ type: operator,
60
+ value: resolveValueToken(rangeValueToken, undefined, context),
61
+ },
62
+ },
63
+ };
64
+ }
65
+ const hashOnlyMatch = source.match(KEY_COND_HASH_ONLY);
66
+ if (hashOnlyMatch) {
67
+ const [, hashAttrToken, hashValueToken] = hashOnlyMatch;
68
+ return {
69
+ hashAttribute: resolveAttributeToken(hashAttrToken, context),
70
+ hashValue: resolveValueToken(hashValueToken, undefined, context),
71
+ };
72
+ }
73
+ throw new errors_1.NotSupportedError({
74
+ method: context.method,
75
+ featurePath: "KeyConditionExpression",
76
+ reason: "Unsupported key condition expression grammar.",
77
+ });
78
+ };
79
+ exports.parseKeyConditionExpression = parseKeyConditionExpression;
80
+ const evaluateConditionExpression = (expression, item, context) => {
81
+ const orGroups = splitTopLevelByKeyword(expression, "or");
82
+ if (orGroups.length === 0) {
83
+ throw new errors_1.NotSupportedError({
84
+ method: context.method,
85
+ featurePath: "ConditionExpression",
86
+ reason: "Empty condition expressions are not supported.",
87
+ });
88
+ }
89
+ return orGroups.some((group) => {
90
+ const andClauses = splitTopLevelByKeyword(group, "and");
91
+ return andClauses.every((clause) => evaluateSingleClause(clause, item, context));
92
+ });
93
+ };
94
+ exports.evaluateConditionExpression = evaluateConditionExpression;
95
+ const parseUpdateExpression = (expression, context) => {
96
+ var _a, _b;
97
+ const normalized = expression.trim();
98
+ if (!normalized) {
99
+ throw new errors_1.NotSupportedError({
100
+ method: context.method,
101
+ featurePath: "UpdateExpression",
102
+ reason: "UpdateExpression must not be empty.",
103
+ });
104
+ }
105
+ const setMatch = normalized.match(/\bSET\b/i);
106
+ const removeMatch = normalized.match(/\bREMOVE\b/i);
107
+ if (!setMatch && !removeMatch) {
108
+ throw new errors_1.NotSupportedError({
109
+ method: context.method,
110
+ featurePath: "UpdateExpression",
111
+ reason: "Only SET and REMOVE update operators are supported.",
112
+ });
113
+ }
114
+ const setStart = (_a = setMatch === null || setMatch === void 0 ? void 0 : setMatch.index) !== null && _a !== void 0 ? _a : -1;
115
+ const removeStart = (_b = removeMatch === null || removeMatch === void 0 ? void 0 : removeMatch.index) !== null && _b !== void 0 ? _b : -1;
116
+ let setClause = "";
117
+ let removeClause = "";
118
+ if (setStart >= 0) {
119
+ const setBodyStart = setStart + setMatch[0].length;
120
+ const setBodyEnd = removeStart >= 0 ? removeStart : normalized.length;
121
+ setClause = normalized.slice(setBodyStart, setBodyEnd).trim();
122
+ if (!setClause) {
123
+ throw new errors_1.NotSupportedError({
124
+ method: context.method,
125
+ featurePath: "UpdateExpression.SET",
126
+ reason: "Malformed SET assignment.",
127
+ });
128
+ }
129
+ }
130
+ if (removeStart >= 0) {
131
+ const removeBodyStart = removeStart + removeMatch[0].length;
132
+ removeClause = normalized.slice(removeBodyStart).trim();
133
+ if (!removeClause) {
134
+ throw new errors_1.NotSupportedError({
135
+ method: context.method,
136
+ featurePath: "UpdateExpression.REMOVE",
137
+ reason: "Malformed REMOVE assignment.",
138
+ });
139
+ }
140
+ }
141
+ const set = setClause
142
+ ? splitTopLevelByDelimiter(setClause, ",")
143
+ .map((segment) => segment.trim())
144
+ .filter(Boolean)
145
+ .map((assignment) => {
146
+ const split = splitTopLevelAssignment(assignment);
147
+ if (!split) {
148
+ throw new errors_1.NotSupportedError({
149
+ method: context.method,
150
+ featurePath: "UpdateExpression.SET",
151
+ reason: "Malformed SET assignment.",
152
+ });
153
+ }
154
+ const attribute = resolveAttributeToken(split.left, context);
155
+ const value = resolveUpdateSetValueToken(split.right, context.item, context);
156
+ return { attribute, value };
157
+ })
158
+ : [];
159
+ const remove = removeClause
160
+ ? splitTopLevelByDelimiter(removeClause, ",")
161
+ .map((segment) => segment.trim())
162
+ .filter(Boolean)
163
+ .map((token) => resolveAttributeToken(token, context))
164
+ : [];
165
+ return { set, remove };
166
+ };
167
+ exports.parseUpdateExpression = parseUpdateExpression;
168
+ const matchesRangeCondition = (value, condition) => {
169
+ if (value === undefined || value === null)
170
+ return false;
171
+ switch (condition.type) {
172
+ case "begins_with":
173
+ return String(value).startsWith(condition.value);
174
+ case "between":
175
+ return exports.compareValues(value, condition.lower) >= 0 && exports.compareValues(value, condition.upper) <= 0;
176
+ case "=":
177
+ return exports.compareValues(value, condition.value) === 0;
178
+ case "<":
179
+ return exports.compareValues(value, condition.value) < 0;
180
+ case "<=":
181
+ return exports.compareValues(value, condition.value) <= 0;
182
+ case ">":
183
+ return exports.compareValues(value, condition.value) > 0;
184
+ case ">=":
185
+ return exports.compareValues(value, condition.value) >= 0;
186
+ }
187
+ };
188
+ exports.matchesRangeCondition = matchesRangeCondition;
189
+ const compareValues = (left, right) => {
190
+ if (typeof left === "number" && typeof right === "number") {
191
+ return left - right;
192
+ }
193
+ const leftString = String(left);
194
+ const rightString = String(right);
195
+ if (leftString < rightString)
196
+ return -1;
197
+ if (leftString > rightString)
198
+ return 1;
199
+ return 0;
200
+ };
201
+ exports.compareValues = compareValues;
202
+ function evaluateSingleClause(clause, item, context) {
203
+ const source = clause.trim();
204
+ const existsMatch = source.match(/^attribute_exists\((.+)\)$/i);
205
+ if (existsMatch) {
206
+ const value = resolveAttributeValue(existsMatch[1].trim(), item, context);
207
+ return value !== MISSING;
208
+ }
209
+ const notExistsMatch = source.match(/^attribute_not_exists\((.+)\)$/i);
210
+ if (notExistsMatch) {
211
+ const value = resolveAttributeValue(notExistsMatch[1].trim(), item, context);
212
+ return value === MISSING;
213
+ }
214
+ const beginsWithMatch = source.match(/^begins_with\((.+?),\s*(.+)\)$/i);
215
+ if (beginsWithMatch) {
216
+ const [, attrToken, valueToken] = beginsWithMatch;
217
+ const current = resolveAttributeValue(attrToken.trim(), item, context);
218
+ const expected = resolveValueToken(valueToken.trim(), item, context);
219
+ if (current === MISSING || expected === MISSING)
220
+ return false;
221
+ return String(current).startsWith(String(expected));
222
+ }
223
+ const containsMatch = source.match(/^contains\((.+?),\s*(.+)\)$/i);
224
+ if (containsMatch) {
225
+ const [, attrToken, valueToken] = containsMatch;
226
+ const current = resolveAttributeValue(attrToken.trim(), item, context);
227
+ const expected = resolveValueToken(valueToken.trim(), item, context);
228
+ if (current === MISSING || expected === MISSING)
229
+ return false;
230
+ return containsValue(current, expected);
231
+ }
232
+ const attributeTypeMatch = source.match(/^attribute_type\((.+?),\s*(.+)\)$/i);
233
+ if (attributeTypeMatch) {
234
+ const [, attrToken, typeToken] = attributeTypeMatch;
235
+ const current = resolveAttributeValue(attrToken.trim(), item, context);
236
+ const expectedType = resolveValueToken(typeToken.trim(), item, context);
237
+ if (current === MISSING)
238
+ return false;
239
+ if (typeof expectedType !== "string") {
240
+ throw new errors_1.NotSupportedError({
241
+ method: context.method,
242
+ featurePath: "ConditionExpression.attribute_type",
243
+ reason: "attribute_type expects a DynamoDB type string.",
244
+ });
245
+ }
246
+ return attributeMatchesType(current, expectedType);
247
+ }
248
+ const betweenMatch = source.match(/^(.+?)\s+between\s+(.+?)\s+and\s+(.+)$/i);
249
+ if (betweenMatch) {
250
+ const [, attrToken, lowerToken, upperToken] = betweenMatch;
251
+ const current = resolveAttributeValue(attrToken.trim(), item, context);
252
+ const lower = resolveValueToken(lowerToken.trim(), item, context);
253
+ const upper = resolveValueToken(upperToken.trim(), item, context);
254
+ if (current === MISSING || lower === MISSING || upper === MISSING)
255
+ return false;
256
+ return exports.compareValues(current, lower) >= 0 && exports.compareValues(current, upper) <= 0;
257
+ }
258
+ const compareMatch = source.match(/^(.+?)\s*(=|<>|<=|<|>=|>)\s*(.+)$/);
259
+ if (compareMatch) {
260
+ const [, leftToken, operator, rightToken] = compareMatch;
261
+ const left = resolveValueToken(leftToken.trim(), item, context);
262
+ const right = resolveValueToken(rightToken.trim(), item, context);
263
+ if (left === MISSING || right === MISSING)
264
+ return false;
265
+ const result = exports.compareValues(left, right);
266
+ switch (operator) {
267
+ case "=":
268
+ return result === 0;
269
+ case "<>":
270
+ return result !== 0;
271
+ case "<":
272
+ return result < 0;
273
+ case "<=":
274
+ return result <= 0;
275
+ case ">":
276
+ return result > 0;
277
+ case ">=":
278
+ return result >= 0;
279
+ default:
280
+ return false;
281
+ }
282
+ }
283
+ throw new errors_1.NotSupportedError({
284
+ method: context.method,
285
+ featurePath: "ConditionExpression",
286
+ reason: `Unsupported clause: ${source}`,
287
+ });
288
+ }
289
+ const PLACEHOLDER_VALUE = /^:[A-Za-z_][A-Za-z0-9_]*$/;
290
+ const PLACEHOLDER_NAME = /^#[A-Za-z_][A-Za-z0-9_]*$/;
291
+ const NUMBER_LITERAL = /^-?\d+(?:\.\d+)?$/;
292
+ const STRING_LITERAL = /^".*"$|^'.*'$/;
293
+ const ATTRIBUTE_NAME = /^[A-Za-z_][A-Za-z0-9_.-]*$/;
294
+ function resolveAttributeToken(token, context) {
295
+ var _a;
296
+ const trimmed = token.trim();
297
+ if (PLACEHOLDER_NAME.test(trimmed)) {
298
+ const resolved = (_a = context.expressionAttributeNames) === null || _a === void 0 ? void 0 : _a[trimmed];
299
+ if (!resolved) {
300
+ throw new errors_1.NotSupportedError({
301
+ method: context.method,
302
+ featurePath: `ExpressionAttributeNames.${trimmed}`,
303
+ reason: "Missing expression attribute name placeholder.",
304
+ });
305
+ }
306
+ return resolved;
307
+ }
308
+ if (!ATTRIBUTE_NAME.test(trimmed)) {
309
+ throw new errors_1.NotSupportedError({
310
+ method: context.method,
311
+ featurePath: "ExpressionAttributeNames",
312
+ reason: `Unsupported attribute token: ${trimmed}`,
313
+ });
314
+ }
315
+ return trimmed;
316
+ }
317
+ function resolveValueToken(token, item, context) {
318
+ const trimmed = token.trim();
319
+ if (PLACEHOLDER_VALUE.test(trimmed)) {
320
+ if (!context.expressionAttributeValues) {
321
+ throw new errors_1.NotSupportedError({
322
+ method: context.method,
323
+ featurePath: "ExpressionAttributeValues",
324
+ reason: "ExpressionAttributeValues are required for value placeholders.",
325
+ });
326
+ }
327
+ if (!(trimmed in context.expressionAttributeValues)) {
328
+ throw new errors_1.NotSupportedError({
329
+ method: context.method,
330
+ featurePath: `ExpressionAttributeValues.${trimmed}`,
331
+ reason: "Missing expression attribute value placeholder.",
332
+ });
333
+ }
334
+ return context.expressionAttributeValues[trimmed];
335
+ }
336
+ if (PLACEHOLDER_NAME.test(trimmed)) {
337
+ const attributeName = resolveAttributeToken(trimmed, context);
338
+ return item && attributeName in item ? item[attributeName] : MISSING;
339
+ }
340
+ if (STRING_LITERAL.test(trimmed)) {
341
+ return trimmed.slice(1, -1);
342
+ }
343
+ const sizeMatch = trimmed.match(/^size\((.+)\)$/i);
344
+ if (sizeMatch) {
345
+ const value = resolveAttributeValue(sizeMatch[1].trim(), item, context);
346
+ if (value === MISSING)
347
+ return MISSING;
348
+ return sizeOfValue(value, context);
349
+ }
350
+ if (NUMBER_LITERAL.test(trimmed)) {
351
+ return Number(trimmed);
352
+ }
353
+ if (trimmed === "true")
354
+ return true;
355
+ if (trimmed === "false")
356
+ return false;
357
+ if (trimmed === "null")
358
+ return null;
359
+ if (ATTRIBUTE_NAME.test(trimmed)) {
360
+ return item && trimmed in item ? item[trimmed] : MISSING;
361
+ }
362
+ throw new errors_1.NotSupportedError({
363
+ method: context.method,
364
+ featurePath: "ExpressionValue",
365
+ reason: `Unsupported value token: ${trimmed}`,
366
+ });
367
+ }
368
+ function resolveAttributeValue(token, item, context) {
369
+ const attributeName = resolveAttributeToken(token, context);
370
+ if (!item)
371
+ return MISSING;
372
+ if (!(attributeName in item))
373
+ return MISSING;
374
+ return item[attributeName];
375
+ }
376
+ function splitTopLevelByKeyword(expression, keyword) {
377
+ const clauses = [];
378
+ let current = "";
379
+ let depth = 0;
380
+ const marker = ` ${keyword} `;
381
+ for (let i = 0; i < expression.length; i += 1) {
382
+ const char = expression[i];
383
+ if (char === "(")
384
+ depth += 1;
385
+ if (char === ")")
386
+ depth = Math.max(0, depth - 1);
387
+ if (depth === 0 &&
388
+ expression.slice(i, i + marker.length).toLowerCase() === marker) {
389
+ clauses.push(current.trim());
390
+ current = "";
391
+ i += marker.length - 1;
392
+ continue;
393
+ }
394
+ current += char;
395
+ }
396
+ if (current.trim())
397
+ clauses.push(current.trim());
398
+ return clauses;
399
+ }
400
+ function splitTopLevelByDelimiter(expression, delimiter) {
401
+ const segments = [];
402
+ let current = "";
403
+ let depth = 0;
404
+ for (let i = 0; i < expression.length; i += 1) {
405
+ const char = expression[i];
406
+ if (char === "(")
407
+ depth += 1;
408
+ if (char === ")")
409
+ depth = Math.max(0, depth - 1);
410
+ if (depth === 0 && char === delimiter) {
411
+ segments.push(current);
412
+ current = "";
413
+ continue;
414
+ }
415
+ current += char;
416
+ }
417
+ if (current.length > 0)
418
+ segments.push(current);
419
+ return segments;
420
+ }
421
+ function splitTopLevelAssignment(assignment) {
422
+ let depth = 0;
423
+ for (let i = 0; i < assignment.length; i += 1) {
424
+ const char = assignment[i];
425
+ if (char === "(")
426
+ depth += 1;
427
+ if (char === ")")
428
+ depth = Math.max(0, depth - 1);
429
+ if (depth === 0 && char === "=") {
430
+ const left = assignment.slice(0, i).trim();
431
+ const right = assignment.slice(i + 1).trim();
432
+ if (!left || !right)
433
+ return null;
434
+ return { left, right };
435
+ }
436
+ }
437
+ return null;
438
+ }
439
+ function resolveUpdateSetValueToken(token, item, context) {
440
+ const trimmed = token.trim();
441
+ const arithmetic = splitTopLevelArithmetic(trimmed);
442
+ if (arithmetic) {
443
+ const left = resolveUpdateSetValueToken(arithmetic.left, item, context);
444
+ const right = resolveUpdateSetValueToken(arithmetic.right, item, context);
445
+ if (typeof left !== "number" || typeof right !== "number") {
446
+ throw new errors_1.NotSupportedError({
447
+ method: context.method,
448
+ featurePath: "UpdateExpression.SET",
449
+ reason: "Arithmetic update operands must be numbers.",
450
+ });
451
+ }
452
+ return arithmetic.operator === "+" ? left + right : left - right;
453
+ }
454
+ const ifNotExists = parseFunctionCall(trimmed, "if_not_exists");
455
+ if (ifNotExists) {
456
+ if (ifNotExists.length !== 2) {
457
+ throw new errors_1.NotSupportedError({
458
+ method: context.method,
459
+ featurePath: "UpdateExpression.SET",
460
+ reason: "if_not_exists expects exactly two arguments.",
461
+ });
462
+ }
463
+ const existing = resolveAttributeValue(ifNotExists[0], item, context);
464
+ if (existing !== MISSING)
465
+ return existing;
466
+ return resolveUpdateSetValueToken(ifNotExists[1], item, context);
467
+ }
468
+ const listAppend = parseFunctionCall(trimmed, "list_append");
469
+ if (listAppend) {
470
+ if (listAppend.length !== 2) {
471
+ throw new errors_1.NotSupportedError({
472
+ method: context.method,
473
+ featurePath: "UpdateExpression.SET",
474
+ reason: "list_append expects exactly two arguments.",
475
+ });
476
+ }
477
+ const left = resolveUpdateSetValueToken(listAppend[0], item, context);
478
+ const right = resolveUpdateSetValueToken(listAppend[1], item, context);
479
+ if (!Array.isArray(left) || !Array.isArray(right)) {
480
+ throw new errors_1.NotSupportedError({
481
+ method: context.method,
482
+ featurePath: "UpdateExpression.SET",
483
+ reason: "list_append expects list operands.",
484
+ });
485
+ }
486
+ return [...left, ...right];
487
+ }
488
+ const value = resolveValueToken(trimmed, item, context);
489
+ if (value === MISSING) {
490
+ throw new errors_1.NotSupportedError({
491
+ method: context.method,
492
+ featurePath: "UpdateExpression.SET",
493
+ reason: "The provided expression refers to an attribute that does not exist in the item.",
494
+ });
495
+ }
496
+ return value;
497
+ }
498
+ function splitTopLevelArithmetic(source) {
499
+ let depth = 0;
500
+ for (let i = 0; i < source.length; i += 1) {
501
+ const char = source[i];
502
+ if (char === "(")
503
+ depth += 1;
504
+ if (char === ")")
505
+ depth = Math.max(0, depth - 1);
506
+ if (depth !== 0)
507
+ continue;
508
+ if (char === "+" || char === "-") {
509
+ const left = source.slice(0, i).trim();
510
+ const right = source.slice(i + 1).trim();
511
+ if (!left || !right)
512
+ continue;
513
+ return {
514
+ left,
515
+ right,
516
+ operator: char,
517
+ };
518
+ }
519
+ }
520
+ return null;
521
+ }
522
+ function parseFunctionCall(source, fnName) {
523
+ const regex = new RegExp(`^${fnName}\\((.*)\\)$`, "i");
524
+ const match = source.match(regex);
525
+ if (!match)
526
+ return null;
527
+ return splitTopLevelByDelimiter(match[1], ",")
528
+ .map((segment) => segment.trim())
529
+ .filter(Boolean);
530
+ }
531
+ function sizeOfValue(value, context) {
532
+ if (typeof value === "string" || Array.isArray(value))
533
+ return value.length;
534
+ if (value instanceof Uint8Array || Buffer.isBuffer(value))
535
+ return value.length;
536
+ if (value instanceof Set)
537
+ return value.size;
538
+ if (value && typeof value === "object")
539
+ return Object.keys(value).length;
540
+ throw new errors_1.NotSupportedError({
541
+ method: context.method,
542
+ featurePath: "ConditionExpression.size",
543
+ reason: "size supports string, binary, list, set, and map values only.",
544
+ });
545
+ }
546
+ function containsValue(container, expected) {
547
+ if (typeof container === "string")
548
+ return container.includes(String(expected));
549
+ if (Array.isArray(container))
550
+ return container.some((entry) => entry === expected);
551
+ if (container instanceof Set)
552
+ return container.has(expected);
553
+ if (container && typeof container === "object") {
554
+ return Object.prototype.hasOwnProperty.call(container, String(expected));
555
+ }
556
+ return false;
557
+ }
558
+ function attributeMatchesType(value, expectedType) {
559
+ const t = expectedType.toUpperCase();
560
+ if (t === "S")
561
+ return typeof value === "string";
562
+ if (t === "N")
563
+ return typeof value === "number";
564
+ if (t === "BOOL")
565
+ return typeof value === "boolean";
566
+ if (t === "NULL")
567
+ return value === null;
568
+ if (t === "L")
569
+ return Array.isArray(value);
570
+ if (t === "M")
571
+ return !!value && typeof value === "object" && !Array.isArray(value) && !Buffer.isBuffer(value) && !(value instanceof Set);
572
+ if (t === "B")
573
+ return Buffer.isBuffer(value) || value instanceof Uint8Array;
574
+ if (value instanceof Set) {
575
+ const values = [...value.values()];
576
+ if (t === "SS")
577
+ return values.every((entry) => typeof entry === "string");
578
+ if (t === "NS")
579
+ return values.every((entry) => typeof entry === "number");
580
+ if (t === "BS")
581
+ return values.every((entry) => Buffer.isBuffer(entry) || entry instanceof Uint8Array);
582
+ }
583
+ return false;
584
+ }
585
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/in-memory/expression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./document-client";
2
+ export * from "./spec";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./document-client"), exports);
5
+ tslib_1.__exportStar(require("./spec"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/in-memory/index.ts"],"names":[],"mappings":";;;AAAA,4DAAiC;AACjC,iDAAsB"}
@@ -0,0 +1,23 @@
1
+ import { GSI } from "../gsi";
2
+ export declare type InMemoryIndexName = "primary" | GSI;
3
+ export interface InMemoryMethodSpec {
4
+ supportedParams: string[];
5
+ unsupportedParams?: string[];
6
+ }
7
+ export interface InMemorySpec {
8
+ version: string;
9
+ scope: string;
10
+ projection: "ALL";
11
+ excludedIndexes: string[];
12
+ indexes: InMemoryIndexName[];
13
+ methods: {
14
+ [method: string]: InMemoryMethodSpec;
15
+ };
16
+ unsupportedMethods: string[];
17
+ }
18
+ export declare const IN_MEMORY_INDEXES: InMemoryIndexName[];
19
+ export declare const IN_MEMORY_SPEC: InMemorySpec;
20
+ export declare const IN_MEMORY_CONDITIONS: {
21
+ excludedGSI: string;
22
+ gsiProjection: string;
23
+ };