@model-ts/dynamodb 3.0.4 → 4.0.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 (45) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/__test__/client-with-cursor-encryption.test.js +1241 -1343
  3. package/dist/cjs/__test__/client-with-cursor-encryption.test.js.map +1 -1
  4. package/dist/cjs/__test__/client.test.js +1488 -1458
  5. package/dist/cjs/__test__/client.test.js.map +1 -1
  6. package/dist/cjs/__test__/diff.test.d.ts +1 -0
  7. package/dist/cjs/__test__/diff.test.js +160 -0
  8. package/dist/cjs/__test__/diff.test.js.map +1 -0
  9. package/dist/cjs/diff.d.ts +3 -0
  10. package/dist/cjs/diff.js +339 -0
  11. package/dist/cjs/diff.js.map +1 -0
  12. package/dist/cjs/provider.d.ts +149 -19
  13. package/dist/cjs/provider.js +131 -1
  14. package/dist/cjs/provider.js.map +1 -1
  15. package/dist/cjs/sandbox.js +2 -2
  16. package/dist/cjs/sandbox.js.map +1 -1
  17. package/dist/cjs/test-utils/setup.d.ts +1 -1
  18. package/dist/cjs/test-utils/setup.js +11 -5
  19. package/dist/cjs/test-utils/setup.js.map +1 -1
  20. package/dist/esm/__test__/client-with-cursor-encryption.test.js +1241 -1343
  21. package/dist/esm/__test__/client-with-cursor-encryption.test.js.map +1 -1
  22. package/dist/esm/__test__/client.test.js +1488 -1458
  23. package/dist/esm/__test__/client.test.js.map +1 -1
  24. package/dist/esm/__test__/diff.test.d.ts +1 -0
  25. package/dist/esm/__test__/diff.test.js +158 -0
  26. package/dist/esm/__test__/diff.test.js.map +1 -0
  27. package/dist/esm/diff.d.ts +3 -0
  28. package/dist/esm/diff.js +335 -0
  29. package/dist/esm/diff.js.map +1 -0
  30. package/dist/esm/provider.d.ts +149 -19
  31. package/dist/esm/provider.js +131 -1
  32. package/dist/esm/provider.js.map +1 -1
  33. package/dist/esm/sandbox.js +2 -2
  34. package/dist/esm/sandbox.js.map +1 -1
  35. package/dist/esm/test-utils/setup.d.ts +1 -1
  36. package/dist/esm/test-utils/setup.js +11 -5
  37. package/dist/esm/test-utils/setup.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/__test__/client-with-cursor-encryption.test.ts +1245 -1347
  40. package/src/__test__/client.test.ts +1584 -1482
  41. package/src/__test__/diff.test.ts +165 -0
  42. package/src/diff.ts +443 -0
  43. package/src/provider.ts +147 -3
  44. package/src/sandbox.ts +2 -2
  45. package/src/test-utils/setup.ts +9 -5
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatSnapshotDiff = void 0;
4
+ const INDENT_SIZE = 2;
5
+ const ITEM_FIELD_INDENT = 4;
6
+ const PRIORITY_FIELDS = ["PK", "SK"];
7
+ const PRIORITY_FIELD_SET = new Set(PRIORITY_FIELDS);
8
+ const ARRAY_ITEM_KEY = "[]";
9
+ const indent = (level) => " ".repeat(level);
10
+ const isPlainObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
11
+ const orderKeys = (keys) => {
12
+ const uniqueKeys = Array.from(new Set(keys));
13
+ const prioritized = PRIORITY_FIELDS.filter((key) => uniqueKeys.includes(key));
14
+ const rest = uniqueKeys
15
+ .filter((key) => !PRIORITY_FIELD_SET.has(key))
16
+ .sort();
17
+ return [...prioritized, ...rest];
18
+ };
19
+ const isEqual = (left, right) => {
20
+ if (left === right)
21
+ return true;
22
+ if (left === null || right === null)
23
+ return left === right;
24
+ if (left === undefined || right === undefined)
25
+ return left === right;
26
+ if (Array.isArray(left) && Array.isArray(right)) {
27
+ if (left.length !== right.length)
28
+ return false;
29
+ for (let i = 0; i < left.length; i += 1) {
30
+ if (!isEqual(left[i], right[i]))
31
+ return false;
32
+ }
33
+ return true;
34
+ }
35
+ if (isPlainObject(left) && isPlainObject(right)) {
36
+ const leftKeys = Object.keys(left).sort();
37
+ const rightKeys = Object.keys(right).sort();
38
+ if (leftKeys.length !== rightKeys.length)
39
+ return false;
40
+ for (let i = 0; i < leftKeys.length; i += 1) {
41
+ const key = leftKeys[i];
42
+ if (key !== rightKeys[i])
43
+ return false;
44
+ if (!isEqual(left[key], right[key]))
45
+ return false;
46
+ }
47
+ return true;
48
+ }
49
+ if (left instanceof Date && right instanceof Date) {
50
+ return left.toISOString() === right.toISOString();
51
+ }
52
+ return false;
53
+ };
54
+ const formatScalar = (value) => {
55
+ if (value === null)
56
+ return "null";
57
+ if (value === undefined)
58
+ return "undefined";
59
+ if (typeof value === "string")
60
+ return JSON.stringify(value);
61
+ if (typeof value === "number" || typeof value === "boolean")
62
+ return String(value);
63
+ if (typeof value === "bigint")
64
+ return `${value}n`;
65
+ if (value instanceof Date)
66
+ return JSON.stringify(value.toISOString());
67
+ return JSON.stringify(value);
68
+ };
69
+ const parseItemKey = (key, item) => {
70
+ var _a, _b;
71
+ const pk = typeof (item === null || item === void 0 ? void 0 : item.PK) === "string" ? item.PK : undefined;
72
+ const sk = typeof (item === null || item === void 0 ? void 0 : item.SK) === "string" ? item.SK : undefined;
73
+ if (pk && sk)
74
+ return { pk, sk };
75
+ const [rawPk, rawSk] = key.split("__");
76
+ return {
77
+ pk: (_a = pk !== null && pk !== void 0 ? pk : rawPk) !== null && _a !== void 0 ? _a : "?",
78
+ sk: (_b = sk !== null && sk !== void 0 ? sk : rawSk) !== null && _b !== void 0 ? _b : "?",
79
+ };
80
+ };
81
+ const formatItemHeader = (key, item) => {
82
+ const { pk, sk } = parseItemKey(key, item);
83
+ return `[${pk} / ${sk}]`;
84
+ };
85
+ const renderValueLines = (key, value, indentLevel) => {
86
+ const prefix = indent(indentLevel);
87
+ if (key === ARRAY_ITEM_KEY) {
88
+ return renderArrayItemLines(value, indentLevel);
89
+ }
90
+ if (isPlainObject(value)) {
91
+ const keys = orderKeys(Object.keys(value));
92
+ if (keys.length === 0) {
93
+ const label = key ? `${key}: {}` : "{}";
94
+ return [`${prefix}${label}`];
95
+ }
96
+ const lines = [];
97
+ if (key)
98
+ lines.push(`${prefix}${key}:`);
99
+ keys.forEach((childKey) => {
100
+ lines.push(...renderValueLines(childKey, value[childKey], indentLevel + INDENT_SIZE));
101
+ });
102
+ return lines;
103
+ }
104
+ if (Array.isArray(value)) {
105
+ if (value.length === 0) {
106
+ const label = key ? `${key}: []` : "[]";
107
+ return [`${prefix}${label}`];
108
+ }
109
+ const lines = [];
110
+ if (key)
111
+ lines.push(`${prefix}${key}:`);
112
+ value.forEach((item) => {
113
+ lines.push(...renderValueLines(ARRAY_ITEM_KEY, item, indentLevel + INDENT_SIZE));
114
+ });
115
+ return lines;
116
+ }
117
+ const label = key ? `${key}: ${formatScalar(value)}` : formatScalar(value);
118
+ return [`${prefix}${label}`];
119
+ };
120
+ const applyPrefix = (line, prefix) => {
121
+ if (line.startsWith(" "))
122
+ return `${prefix}${line.slice(1)}`;
123
+ return `${prefix} ${line}`;
124
+ };
125
+ const renderValueLinesWithPrefix = (key, value, indentLevel, prefix) => renderValueLines(key, value, indentLevel).map((line) => applyPrefix(line, prefix));
126
+ const renderArrayItemLines = (value, indentLevel) => {
127
+ const prefix = indent(indentLevel);
128
+ if (isPlainObject(value)) {
129
+ const keys = orderKeys(Object.keys(value));
130
+ if (keys.length === 0)
131
+ return [`${prefix}- {}`];
132
+ const lines = [];
133
+ const [firstKey, ...restKeys] = keys;
134
+ const firstLines = renderValueLines(firstKey, value[firstKey], indentLevel + INDENT_SIZE);
135
+ const trimmedFirstLine = firstLines[0].slice(indentLevel + INDENT_SIZE);
136
+ lines.push(`${prefix}- ${trimmedFirstLine}`);
137
+ lines.push(...firstLines.slice(1));
138
+ restKeys.forEach((key) => {
139
+ lines.push(...renderValueLines(key, value[key], indentLevel + INDENT_SIZE));
140
+ });
141
+ return lines;
142
+ }
143
+ if (Array.isArray(value)) {
144
+ if (value.length === 0)
145
+ return [`${prefix}- []`];
146
+ const lines = [`${prefix}-`];
147
+ value.forEach((item) => {
148
+ lines.push(...renderValueLines(ARRAY_ITEM_KEY, item, indentLevel + INDENT_SIZE));
149
+ });
150
+ return lines;
151
+ }
152
+ return [`${prefix}- ${formatScalar(value)}`];
153
+ };
154
+ const findArrayMatches = (before, after) => {
155
+ const rows = before.length + 1;
156
+ const cols = after.length + 1;
157
+ const dp = Array.from({ length: rows }, () => Array(cols).fill(0));
158
+ for (let i = before.length - 1; i >= 0; i -= 1) {
159
+ for (let j = after.length - 1; j >= 0; j -= 1) {
160
+ if (isEqual(before[i], after[j])) {
161
+ dp[i][j] = dp[i + 1][j + 1] + 1;
162
+ }
163
+ else {
164
+ dp[i][j] = Math.max(dp[i + 1][j], dp[i][j + 1]);
165
+ }
166
+ }
167
+ }
168
+ const matches = [];
169
+ let i = 0;
170
+ let j = 0;
171
+ while (i < before.length && j < after.length) {
172
+ if (isEqual(before[i], after[j])) {
173
+ matches.push({ beforeMatch: i, afterMatch: j });
174
+ i += 1;
175
+ j += 1;
176
+ }
177
+ else if (dp[i + 1][j] >= dp[i][j + 1]) {
178
+ i += 1;
179
+ }
180
+ else {
181
+ j += 1;
182
+ }
183
+ }
184
+ return matches;
185
+ };
186
+ const renderArraySegment = (beforeSegment, afterSegment, indentLevel) => {
187
+ const lines = [];
188
+ let changed = false;
189
+ if (beforeSegment.length === 0 && afterSegment.length === 0) {
190
+ return { lines, changed: false };
191
+ }
192
+ if (beforeSegment.length === afterSegment.length) {
193
+ for (let i = 0; i < beforeSegment.length; i += 1) {
194
+ const result = renderFieldDiff(ARRAY_ITEM_KEY, beforeSegment[i], afterSegment[i], indentLevel);
195
+ if (result.lines.length > 0)
196
+ lines.push(...result.lines);
197
+ if (result.changed)
198
+ changed = true;
199
+ }
200
+ return { lines, changed };
201
+ }
202
+ beforeSegment.forEach((value) => {
203
+ lines.push(...renderValueLinesWithPrefix(ARRAY_ITEM_KEY, value, indentLevel, "-"));
204
+ changed = true;
205
+ });
206
+ afterSegment.forEach((value) => {
207
+ lines.push(...renderValueLinesWithPrefix(ARRAY_ITEM_KEY, value, indentLevel, "+"));
208
+ changed = true;
209
+ });
210
+ return { lines, changed };
211
+ };
212
+ const renderArrayDiff = (key, before, after, indentLevel) => {
213
+ const lines = [`${indent(indentLevel)}${key}:`];
214
+ let changed = false;
215
+ const matches = findArrayMatches(before, after);
216
+ let beforeIndex = 0;
217
+ let afterIndex = 0;
218
+ matches.forEach(({ beforeMatch, afterMatch }) => {
219
+ const segment = renderArraySegment(before.slice(beforeIndex, beforeMatch), after.slice(afterIndex, afterMatch), indentLevel + INDENT_SIZE);
220
+ if (segment.lines.length > 0)
221
+ lines.push(...segment.lines);
222
+ if (segment.changed)
223
+ changed = true;
224
+ lines.push(...renderValueLines(ARRAY_ITEM_KEY, before[beforeMatch], indentLevel + INDENT_SIZE));
225
+ beforeIndex = beforeMatch + 1;
226
+ afterIndex = afterMatch + 1;
227
+ });
228
+ const tailSegment = renderArraySegment(before.slice(beforeIndex), after.slice(afterIndex), indentLevel + INDENT_SIZE);
229
+ if (tailSegment.lines.length > 0)
230
+ lines.push(...tailSegment.lines);
231
+ if (tailSegment.changed)
232
+ changed = true;
233
+ return { lines, changed };
234
+ };
235
+ const renderObjectDiff = (key, before, after, indentLevel) => {
236
+ const lines = [`${indent(indentLevel)}${key}:`];
237
+ let changed = false;
238
+ const keys = orderKeys([...Object.keys(before), ...Object.keys(after)]);
239
+ keys.forEach((childKey) => {
240
+ const result = renderFieldDiff(childKey, before[childKey], after[childKey], indentLevel + INDENT_SIZE);
241
+ if (result.lines.length > 0)
242
+ lines.push(...result.lines);
243
+ if (result.changed)
244
+ changed = true;
245
+ });
246
+ return { lines, changed };
247
+ };
248
+ const renderFieldDiff = (key, beforeValue, afterValue, indentLevel) => {
249
+ if (beforeValue === undefined && afterValue === undefined) {
250
+ return { lines: [], changed: false };
251
+ }
252
+ if (isEqual(beforeValue, afterValue)) {
253
+ return {
254
+ lines: renderValueLines(key, beforeValue, indentLevel),
255
+ changed: false,
256
+ };
257
+ }
258
+ if (beforeValue === undefined) {
259
+ return {
260
+ lines: renderValueLinesWithPrefix(key, afterValue, indentLevel, "+"),
261
+ changed: true,
262
+ };
263
+ }
264
+ if (afterValue === undefined) {
265
+ return {
266
+ lines: renderValueLinesWithPrefix(key, beforeValue, indentLevel, "-"),
267
+ changed: true,
268
+ };
269
+ }
270
+ if (Array.isArray(beforeValue) && Array.isArray(afterValue)) {
271
+ return renderArrayDiff(key, beforeValue, afterValue, indentLevel);
272
+ }
273
+ if (isPlainObject(beforeValue) && isPlainObject(afterValue)) {
274
+ return renderObjectDiff(key, beforeValue, afterValue, indentLevel);
275
+ }
276
+ return {
277
+ lines: [
278
+ ...renderValueLinesWithPrefix(key, beforeValue, indentLevel, "-"),
279
+ ...renderValueLinesWithPrefix(key, afterValue, indentLevel, "+"),
280
+ ],
281
+ changed: true,
282
+ };
283
+ };
284
+ const renderItemFields = (item, prefix) => {
285
+ const keys = orderKeys(Object.keys(item));
286
+ const lines = [];
287
+ keys.forEach((key) => {
288
+ lines.push(...renderValueLinesWithPrefix(key, item[key], ITEM_FIELD_INDENT, prefix));
289
+ });
290
+ return lines;
291
+ };
292
+ const renderItemFieldsDiff = (before, after) => {
293
+ const keys = orderKeys([...Object.keys(before), ...Object.keys(after)]);
294
+ const lines = [];
295
+ let changed = false;
296
+ keys.forEach((key) => {
297
+ const result = renderFieldDiff(key, before[key], after[key], ITEM_FIELD_INDENT);
298
+ if (result.lines.length > 0)
299
+ lines.push(...result.lines);
300
+ if (result.changed)
301
+ changed = true;
302
+ });
303
+ return { lines, changed };
304
+ };
305
+ const formatSnapshotDiff = (before, after) => {
306
+ const keys = new Set([...Object.keys(before), ...Object.keys(after)]);
307
+ const sortedKeys = Array.from(keys).sort((a, b) => {
308
+ var _a, _b;
309
+ const itemA = (_a = after[a]) !== null && _a !== void 0 ? _a : before[a];
310
+ const itemB = (_b = after[b]) !== null && _b !== void 0 ? _b : before[b];
311
+ return formatItemHeader(a, itemA).localeCompare(formatItemHeader(b, itemB));
312
+ });
313
+ const lines = [];
314
+ sortedKeys.forEach((key) => {
315
+ const beforeItem = before[key];
316
+ const afterItem = after[key];
317
+ const header = formatItemHeader(key, afterItem !== null && afterItem !== void 0 ? afterItem : beforeItem);
318
+ let itemLines = [];
319
+ if (!beforeItem && afterItem) {
320
+ itemLines = [`+ ${header}`, ...renderItemFields(afterItem, "+")];
321
+ }
322
+ else if (beforeItem && !afterItem) {
323
+ itemLines = [`- ${header}`, ...renderItemFields(beforeItem, "-")];
324
+ }
325
+ else if (beforeItem && afterItem) {
326
+ const diffResult = renderItemFieldsDiff(beforeItem, afterItem);
327
+ if (diffResult.changed)
328
+ itemLines = [header, ...diffResult.lines];
329
+ }
330
+ if (itemLines.length > 0) {
331
+ if (lines.length > 0)
332
+ lines.push("");
333
+ lines.push(...itemLines);
334
+ }
335
+ });
336
+ return lines.join("\n");
337
+ };
338
+ exports.formatSnapshotDiff = formatSnapshotDiff;
339
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/diff.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Client, Key, PaginationParams } from "./client";
1
+ import { Client, Key, PaginationParams, QueryParams } from "./client";
2
2
  import { DynamoDBModelInstance, DynamoDBModelConstructor, DynamoDBUnion, Decodable } from "./dynamodb-model";
3
3
  import { UpdateRawOperation, GetOperation, PutOperation, DeleteOperation, ConditionCheckOperation, BulkOperation } from "./operations";
4
4
  import { OutputOf, TypeOf, ModelOf } from "@model-ts/core";
@@ -10,7 +10,14 @@ export interface DynamoDBInternals<M extends Decodable> {
10
10
  }
11
11
  export declare const getProvider: (client: Client) => {
12
12
  classProps: {
13
+ /**
14
+ * The DynamoDB document client.
15
+ */
13
16
  dynamodb: Client;
17
+ /**
18
+ * Creates operation objects for batch processing and transactions.
19
+ * Supports get, put, update, updateRaw, delete, softDelete, and condition operations.
20
+ */
14
21
  operation: {
15
22
  <M extends DynamoDBModelConstructor<any>>(this: M, operation: "get", key: Key, params?: Omit<GetOperation<M>, "_model" | "_operation" | "key"> | undefined): GetOperation<M>;
16
23
  <M_1 extends DynamoDBModelConstructor<any>>(this: M_1, operation: "put", item: InstanceType<M_1>, params?: Omit<PutOperation<InstanceType<M_1>, M_1>, "_model" | "_operation" | "item"> | undefined): {
@@ -73,9 +80,27 @@ export declare const getProvider: (client: Client) => {
73
80
  }];
74
81
  (operation: "condition", key: Key, params: Omit<ConditionCheckOperation, "_operation" | "key">): ConditionCheckOperation;
75
82
  };
83
+ /**
84
+ * @internal
85
+ */
76
86
  __dynamoDBDecode<M_5 extends DynamoDBModelConstructor<any>>(this: M_5, value: unknown): InstanceType<M_5>;
87
+ /**
88
+ * @internal
89
+ */
77
90
  __dynamoDBEncode<T_1 extends DynamoDBModelInstance, M_6 extends DynamoDBModelConstructor<T_1>>(this: M_6, item: T_1): any;
91
+ /**
92
+ * Retrieves a single item from DynamoDB by its primary key.
93
+ * Prefer `load()` for built-in batching.
94
+ *
95
+ * @throws ItemNotFoundError if the item doesn't exist.
96
+ */
78
97
  get<M_7 extends DynamoDBModelConstructor<any>>(this: M_7, key: Key, params?: Omit<GetOperation<M_7>, "_model" | "_operation" | "key"> | undefined): Promise<import("./dynamodb-model").DecodableInstance<M_7>>;
98
+ /**
99
+ * Retrieves a single item from DynamoDB by its primary key.
100
+ * Uses built-in batching for usage in e.g. `Promise.all()`.
101
+ *
102
+ * @throws ItemNotFoundError if the item doesn't exist and `null` is not true.
103
+ */
79
104
  load<M_8 extends DynamoDBModelConstructor<any>, Null extends boolean = false, Recover extends boolean = false>(this: M_8, key: Key, params?: (Omit<GetOperation<M_8>, "_model" | "_operation" | "key"> & {
80
105
  null?: Null | undefined;
81
106
  recover?: Recover | undefined;
@@ -84,10 +109,35 @@ export declare const getProvider: (client: Client) => {
84
109
  }) | null : import("./dynamodb-model").DecodableInstance<M_8> & {
85
110
  isDeleted?: true | undefined;
86
111
  } : Null extends true ? import("./dynamodb-model").DecodableInstance<M_8> | null : import("./dynamodb-model").DecodableInstance<M_8>>;
112
+ /**
113
+ * Loads multiple items from DynamoDB by their primary keys.
114
+ * Returns an array of items or errors.
115
+ */
87
116
  loadMany<M_9 extends DynamoDBModelConstructor<any>>(this: M_9, keys: Key[], params?: Omit<GetOperation<M_9>, "_model" | "_operation" | "key"> | undefined): Promise<(Error | import("./dynamodb-model").DecodableInstance<M_9>)[]>;
117
+ /**
118
+ * Returns a page of query results using cursor-based pagination.
119
+ */
88
120
  paginate<M_10 extends DynamoDBModelConstructor<any>>(this: M_10, args: PaginationInput, params: PaginationParams): Promise<import("./pagination").PaginationResult<import("./dynamodb-model").DecodableInstance<M_10>>>;
89
- put<M_11 extends DynamoDBModelConstructor<any>>(this: M_11, item: InstanceType<M_11>, params?: Omit<PutOperation<InstanceType<M_11>, M_11>, "_model" | "_operation" | "item"> | undefined): Promise<InstanceType<M_11>>;
90
- updateRaw<M_12 extends DynamoDBModelConstructor<any>>(this: M_12, key: Key, attributes: Partial<InstanceType<M_12>> & {
121
+ /**
122
+ * Performs a DynamoDB query operation and returns matching items.
123
+ * Use `FetchAllPages: true` to automatically fetch all pages of results.
124
+ */
125
+ query<M_11 extends DynamoDBModelConstructor<any>>(this: M_11, params: QueryParams): Promise<import("./dynamodb-model").DecodableInstance<M_11>[] & {
126
+ meta: {
127
+ lastEvaluatedKey?: import("aws-sdk/clients/dynamodb").DocumentClient.Key | undefined;
128
+ };
129
+ }>;
130
+ /**
131
+ * Stores an item in DynamoDB.
132
+ *
133
+ * @throws KeyExistsError if the item already exists and `IgnoreExistence` is not true.
134
+ */
135
+ put<M_12 extends DynamoDBModelConstructor<any>>(this: M_12, item: InstanceType<M_12>, params?: Omit<PutOperation<InstanceType<M_12>, M_12>, "_model" | "_operation" | "item"> | undefined): Promise<InstanceType<M_12>>;
136
+ /**
137
+ * Performs a raw DynamoDB update operation using update expressions.
138
+ * Provides low-level access to DynamoDB's native update functionality.
139
+ */
140
+ updateRaw<M_13 extends DynamoDBModelConstructor<any>>(this: M_13, key: Key, attributes: Partial<InstanceType<M_13>> & {
91
141
  GSI2PK?: string | null | undefined;
92
142
  GSI3PK?: string | null | undefined;
93
143
  GSI4PK?: string | null | undefined;
@@ -125,12 +175,27 @@ export declare const getProvider: (client: Client) => {
125
175
  GSI17SK?: string | null | undefined;
126
176
  GSI18SK?: string | null | undefined;
127
177
  GSI19SK?: string | null | undefined;
128
- }, params?: Omit<UpdateRawOperation<M_12>, "_model" | "_operation" | "key" | "attributes"> | undefined): Promise<InstanceType<M_12>>;
129
- delete<M_13 extends DynamoDBModelConstructor<any>>(this: M_13, key: Key): Promise<null>;
130
- softDelete<M_14 extends DynamoDBModelConstructor<any>>(this: M_14, item: InstanceType<M_14>): Promise<InstanceType<M_14>>;
178
+ }, params?: Omit<UpdateRawOperation<M_13>, "_model" | "_operation" | "key" | "attributes"> | undefined): Promise<InstanceType<M_13>>;
179
+ /**
180
+ * Deletes an item from DynamoDB by its primary key.
181
+ * The item will be permanently removed from the table.
182
+ */
183
+ delete<M_14 extends DynamoDBModelConstructor<any>>(this: M_14, key: Key): Promise<null>;
184
+ /**
185
+ * Performs a soft delete by moving the item to a deleted state.
186
+ * The original item is deleted and a new item with a $$DELETED$$ prefix is created.
187
+ */
188
+ softDelete<M_15 extends DynamoDBModelConstructor<any>>(this: M_15, item: InstanceType<M_15>): Promise<InstanceType<M_15>>;
131
189
  };
132
190
  instanceProps: {
191
+ /**
192
+ * The DynamoDB document client instance.
193
+ */
133
194
  dynamodb: Client;
195
+ /**
196
+ * Returns all key attributes for this instance, including primary keys and GSI keys.
197
+ * Used for cursor generation and key-based operations.
198
+ */
134
199
  keys<T_2 extends DynamoDBModelInstance>(this: T_2): {
135
200
  PK: string;
136
201
  SK: string;
@@ -173,12 +238,41 @@ export declare const getProvider: (client: Client) => {
173
238
  GSI18SK?: string | undefined;
174
239
  GSI19SK?: string | undefined;
175
240
  };
241
+ /**
242
+ * Generates an (optionally encrypted) cursor for this instance.
243
+ * Cursors are used for pagination and must be treated as opaque tokens.
244
+ */
176
245
  cursor<T_3 extends DynamoDBModelInstance>(this: T_3): string;
246
+ /**
247
+ * Stores this instance in DynamoDB.
248
+ * @throws KeyExistsError if the item already exists and `IgnoreExistence` is not true.
249
+ */
177
250
  put<T_4 extends DynamoDBModelInstance>(this: T_4, params?: Omit<PutOperation<T_4, ModelOf<T_4>>, "_model" | "_operation" | "item"> | undefined): Promise<T_4>;
251
+ /**
252
+ * Updates this instance with new attribute values and persists the changes to DynamoDB.
253
+ * Handles version conflicts and automatically manages key changes if primary keys are updated.
254
+ * @throws RaceConditionError if the instance is out of sync with the stored value.
255
+ */
178
256
  update<T_5 extends DynamoDBModelInstance>(this: T_5, attributes: Partial<ModelOf<T_5>["_codec"]["_A"]>): Promise<T_5>;
257
+ /**
258
+ * Applies updates to this instance and returns the updated instance along with the operations to persist.
259
+ * Does not automatically persist the changes - use the returned operations with bulk() or individual operations.
260
+ */
179
261
  applyUpdate<T_6 extends DynamoDBModelInstance>(this: T_6, attributes: Partial<ModelOf<T_6>["_codec"]["_A"]>): [T_6, BulkOperation<T_6, ModelOf<T_6>> | BulkOperation<T_6, ModelOf<T_6>>[]];
262
+ /**
263
+ * Deletes this instance from DynamoDB.
264
+ * The item will be permanently removed from the table.
265
+ */
180
266
  delete<T_7 extends DynamoDBModelInstance>(this: T_7): Promise<null>;
267
+ /**
268
+ * Performs a soft delete on this instance.
269
+ * The original item is deleted and a new item with a $$DELETED$$ prefix is created.
270
+ */
181
271
  softDelete<T_8 extends DynamoDBModelInstance>(this: T_8): Promise<T_8>;
272
+ /**
273
+ * Creates operation objects for this instance for batch processing and transactions.
274
+ * Supports put, update, updateRaw, delete, softDelete, and condition operations.
275
+ */
182
276
  operation: {
183
277
  <T_9 extends DynamoDBModelInstance>(this: T_9, operation: "put", params?: Omit<PutOperation<T_9, ModelOf<T_9>>, "_model" | "_operation" | "item"> | undefined): {
184
278
  action: PutOperation<T_9, ModelOf<T_9>>;
@@ -242,29 +336,65 @@ export declare const getProvider: (client: Client) => {
242
336
  };
243
337
  };
244
338
  unionProps: {
339
+ /**
340
+ * The DynamoDB document client instance.
341
+ */
245
342
  dynamodb: Client;
246
- __dynamoDBDecode<M_15 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
343
+ /**
344
+ * @internal
345
+ */
346
+ __dynamoDBDecode<M_16 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
247
347
  [key: string]: any;
248
- }>(this: M_15, value: unknown): any;
249
- get<M_16 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
348
+ }>(this: M_16, value: unknown): any;
349
+ /**
350
+ * Retrieves a single item from DynamoDB by its primary key.
351
+ * Prefer `load()` for built-in batching.
352
+ *
353
+ * @throws ItemNotFoundError if the item doesn't exist.
354
+ */
355
+ get<M_17 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
250
356
  [key: string]: any;
251
- }>(this: M_16, key: Key, params?: Omit<GetOperation<M_16>, "_model" | "_operation" | "key"> | undefined): Promise<import("./dynamodb-model").DecodableInstance<M_16>>;
252
- load<M_17 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
357
+ }>(this: M_17, key: Key, params?: Omit<GetOperation<M_17>, "_model" | "_operation" | "key"> | undefined): Promise<import("./dynamodb-model").DecodableInstance<M_17>>;
358
+ /**
359
+ * Retrieves a single item from DynamoDB by its primary key.
360
+ * Uses built-in batching for usage in e.g. `Promise.all()`.
361
+ *
362
+ * @throws ItemNotFoundError if the item doesn't exist and `null` is not true.
363
+ */
364
+ load<M_18 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
253
365
  [key: string]: any;
254
- }, Null_1 extends boolean = false, Recover_1 extends boolean = false>(this: M_17, key: Key, params?: (Omit<GetOperation<M_17>, "_model" | "_operation" | "key"> & {
366
+ }, Null_1 extends boolean = false, Recover_1 extends boolean = false>(this: M_18, key: Key, params?: (Omit<GetOperation<M_18>, "_model" | "_operation" | "key"> & {
255
367
  null?: Null_1 | undefined;
256
368
  recover?: Recover_1 | undefined;
257
- }) | undefined): Promise<Recover_1 extends true ? Null_1 extends true ? (import("./dynamodb-model").DecodableInstance<M_17> & {
369
+ }) | undefined): Promise<Recover_1 extends true ? Null_1 extends true ? (import("./dynamodb-model").DecodableInstance<M_18> & {
258
370
  isDeleted?: true | undefined;
259
- }) | null : import("./dynamodb-model").DecodableInstance<M_17> & {
371
+ }) | null : import("./dynamodb-model").DecodableInstance<M_18> & {
260
372
  isDeleted?: true | undefined;
261
- } : Null_1 extends true ? import("./dynamodb-model").DecodableInstance<M_17> | null : import("./dynamodb-model").DecodableInstance<M_17>>;
262
- loadMany<M_18 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
373
+ } : Null_1 extends true ? import("./dynamodb-model").DecodableInstance<M_18> | null : import("./dynamodb-model").DecodableInstance<M_18>>;
374
+ /**
375
+ * Loads multiple items from DynamoDB by their primary keys.
376
+ * Returns an array of items or errors.
377
+ */
378
+ loadMany<M_19 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
379
+ [key: string]: any;
380
+ }>(this: M_19, keys: Key[], params?: Omit<GetOperation<M_19>, "_model" | "_operation" | "key"> | undefined): Promise<(Error | import("./dynamodb-model").DecodableInstance<M_19>)[]>;
381
+ /**
382
+ * Returns a page of query results using cursor-based pagination.
383
+ */
384
+ paginate<M_20 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
263
385
  [key: string]: any;
264
- }>(this: M_18, keys: Key[], params?: Omit<GetOperation<M_18>, "_model" | "_operation" | "key"> | undefined): Promise<(Error | import("./dynamodb-model").DecodableInstance<M_18>)[]>;
265
- paginate<M_19 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
386
+ }>(this: M_20, args: PaginationInput, params: PaginationParams): Promise<import("./pagination").PaginationResult<import("./dynamodb-model").DecodableInstance<M_20>>>;
387
+ /**
388
+ * Performs a DynamoDB query operation and returns matching items.
389
+ * Use `FetchAllPages: true` to automatically fetch all pages of results.
390
+ */
391
+ query<M_21 extends import("@model-ts/core").BaseUnion<[DynamoDBModelConstructor<any>, DynamoDBModelConstructor<any>, ...DynamoDBModelConstructor<any>[]]> & {
266
392
  [key: string]: any;
267
- }>(this: M_19, args: PaginationInput, params: PaginationParams): Promise<import("./pagination").PaginationResult<import("./dynamodb-model").DecodableInstance<M_19>>>;
393
+ }>(this: M_21, params: QueryParams): Promise<import("./dynamodb-model").DecodableInstance<M_21>[] & {
394
+ meta: {
395
+ lastEvaluatedKey?: import("aws-sdk/clients/dynamodb").DocumentClient.Key | undefined;
396
+ };
397
+ }>;
268
398
  };
269
399
  };
270
400
  export declare type DynamoDBProvider = ReturnType<typeof getProvider>;