dynamo-document-builder 0.6.0 → 0.7.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 (310) hide show
  1. package/README.md +367 -0
  2. package/dist/attributes/attribute-map.cjs +52 -0
  3. package/dist/attributes/attribute-map.cjs.map +1 -1
  4. package/dist/attributes/attribute-map.d.ts +67 -0
  5. package/dist/attributes/attribute-map.mjs +52 -0
  6. package/dist/attributes/attribute-map.mjs.map +1 -1
  7. package/dist/commands/batch-get.cjs +43 -0
  8. package/dist/commands/batch-get.cjs.map +1 -1
  9. package/dist/commands/batch-get.d.ts +51 -3
  10. package/dist/commands/batch-get.mjs +44 -1
  11. package/dist/commands/batch-get.mjs.map +1 -1
  12. package/dist/commands/batch-projected-get.cjs +42 -0
  13. package/dist/commands/batch-projected-get.cjs.map +1 -1
  14. package/dist/commands/batch-projected-get.d.ts +56 -3
  15. package/dist/commands/batch-projected-get.mjs +42 -0
  16. package/dist/commands/batch-projected-get.mjs.map +1 -1
  17. package/dist/commands/batch-write.cjs +44 -0
  18. package/dist/commands/batch-write.cjs.map +1 -1
  19. package/dist/commands/batch-write.d.ts +54 -4
  20. package/dist/commands/batch-write.mjs +45 -1
  21. package/dist/commands/batch-write.mjs.map +1 -1
  22. package/dist/commands/condition-check.cjs +37 -0
  23. package/dist/commands/condition-check.cjs.map +1 -1
  24. package/dist/commands/condition-check.d.ts +45 -3
  25. package/dist/commands/condition-check.mjs +37 -0
  26. package/dist/commands/condition-check.mjs.map +1 -1
  27. package/dist/commands/conditional-delete.cjs +33 -0
  28. package/dist/commands/conditional-delete.cjs.map +1 -1
  29. package/dist/commands/conditional-delete.d.ts +46 -3
  30. package/dist/commands/conditional-delete.mjs +33 -0
  31. package/dist/commands/conditional-delete.mjs.map +1 -1
  32. package/dist/commands/conditional-put.cjs +34 -0
  33. package/dist/commands/conditional-put.cjs.map +1 -1
  34. package/dist/commands/conditional-put.d.ts +48 -4
  35. package/dist/commands/conditional-put.mjs +34 -0
  36. package/dist/commands/conditional-put.mjs.map +1 -1
  37. package/dist/commands/conditional-update.cjs +35 -0
  38. package/dist/commands/conditional-update.cjs.map +1 -1
  39. package/dist/commands/conditional-update.d.ts +48 -3
  40. package/dist/commands/conditional-update.mjs +35 -0
  41. package/dist/commands/conditional-update.mjs.map +1 -1
  42. package/dist/commands/delete.cjs +32 -0
  43. package/dist/commands/delete.cjs.map +1 -1
  44. package/dist/commands/delete.d.ts +44 -2
  45. package/dist/commands/delete.mjs +32 -0
  46. package/dist/commands/delete.mjs.map +1 -1
  47. package/dist/commands/get.cjs +33 -0
  48. package/dist/commands/get.cjs.map +1 -1
  49. package/dist/commands/get.d.ts +45 -2
  50. package/dist/commands/get.mjs +33 -0
  51. package/dist/commands/get.mjs.map +1 -1
  52. package/dist/commands/index.cjs +8 -0
  53. package/dist/commands/index.cjs.map +1 -1
  54. package/dist/commands/index.d.ts +160 -1
  55. package/dist/commands/index.mjs +4 -0
  56. package/dist/commands/index.mjs.map +1 -1
  57. package/dist/commands/projected-get.cjs +40 -0
  58. package/dist/commands/projected-get.cjs.map +1 -1
  59. package/dist/commands/projected-get.d.ts +54 -3
  60. package/dist/commands/projected-get.mjs +40 -0
  61. package/dist/commands/projected-get.mjs.map +1 -1
  62. package/dist/commands/projected-query.cjs +41 -0
  63. package/dist/commands/projected-query.cjs.map +1 -1
  64. package/dist/commands/projected-query.d.ts +56 -3
  65. package/dist/commands/projected-query.mjs +41 -0
  66. package/dist/commands/projected-query.mjs.map +1 -1
  67. package/dist/commands/projected-scan.cjs +41 -0
  68. package/dist/commands/projected-scan.cjs.map +1 -1
  69. package/dist/commands/projected-scan.d.ts +55 -3
  70. package/dist/commands/projected-scan.mjs +41 -0
  71. package/dist/commands/projected-scan.mjs.map +1 -1
  72. package/dist/commands/put.cjs +37 -0
  73. package/dist/commands/put.cjs.map +1 -1
  74. package/dist/commands/put.d.ts +50 -3
  75. package/dist/commands/put.mjs +37 -0
  76. package/dist/commands/put.mjs.map +1 -1
  77. package/dist/commands/query.cjs +35 -0
  78. package/dist/commands/query.cjs.map +1 -1
  79. package/dist/commands/query.d.ts +48 -3
  80. package/dist/commands/query.mjs +35 -0
  81. package/dist/commands/query.mjs.map +1 -1
  82. package/dist/commands/scan.cjs +33 -0
  83. package/dist/commands/scan.cjs.map +1 -1
  84. package/dist/commands/scan.d.ts +46 -3
  85. package/dist/commands/scan.mjs +33 -0
  86. package/dist/commands/scan.mjs.map +1 -1
  87. package/dist/commands/table-batch-get.cjs +123 -0
  88. package/dist/commands/table-batch-get.cjs.map +1 -0
  89. package/dist/commands/table-batch-get.d.ts +86 -0
  90. package/dist/commands/table-batch-get.mjs +121 -0
  91. package/dist/commands/table-batch-get.mjs.map +1 -0
  92. package/dist/commands/table-batch-write.cjs +119 -0
  93. package/dist/commands/table-batch-write.cjs.map +1 -0
  94. package/dist/commands/table-batch-write.d.ts +79 -0
  95. package/dist/commands/table-batch-write.mjs +117 -0
  96. package/dist/commands/table-batch-write.mjs.map +1 -0
  97. package/dist/commands/table-transact-get.cjs +73 -0
  98. package/dist/commands/table-transact-get.cjs.map +1 -0
  99. package/dist/commands/table-transact-get.d.ts +60 -0
  100. package/dist/commands/table-transact-get.mjs +71 -0
  101. package/dist/commands/table-transact-get.mjs.map +1 -0
  102. package/dist/commands/table-transact-write.cjs +76 -0
  103. package/dist/commands/table-transact-write.cjs.map +1 -0
  104. package/dist/commands/table-transact-write.d.ts +51 -0
  105. package/dist/commands/table-transact-write.mjs +74 -0
  106. package/dist/commands/table-transact-write.mjs.map +1 -0
  107. package/dist/commands/transact-get.cjs +38 -0
  108. package/dist/commands/transact-get.cjs.map +1 -1
  109. package/dist/commands/transact-get.d.ts +49 -3
  110. package/dist/commands/transact-get.mjs +39 -1
  111. package/dist/commands/transact-get.mjs.map +1 -1
  112. package/dist/commands/transact-write.cjs +37 -0
  113. package/dist/commands/transact-write.cjs.map +1 -1
  114. package/dist/commands/transact-write.d.ts +46 -1
  115. package/dist/commands/transact-write.mjs +37 -0
  116. package/dist/commands/transact-write.mjs.map +1 -1
  117. package/dist/commands/update.cjs +37 -0
  118. package/dist/commands/update.cjs.map +1 -1
  119. package/dist/commands/update.d.ts +50 -3
  120. package/dist/commands/update.mjs +37 -0
  121. package/dist/commands/update.mjs.map +1 -1
  122. package/dist/conditions/and.cjs +3 -0
  123. package/dist/conditions/and.cjs.map +1 -1
  124. package/dist/conditions/and.d.ts +4 -1
  125. package/dist/conditions/and.mjs +3 -0
  126. package/dist/conditions/and.mjs.map +1 -1
  127. package/dist/conditions/begins-with.cjs +3 -0
  128. package/dist/conditions/begins-with.cjs.map +1 -1
  129. package/dist/conditions/begins-with.d.ts +4 -1
  130. package/dist/conditions/begins-with.mjs +3 -0
  131. package/dist/conditions/begins-with.mjs.map +1 -1
  132. package/dist/conditions/between.cjs +3 -0
  133. package/dist/conditions/between.cjs.map +1 -1
  134. package/dist/conditions/between.d.ts +4 -1
  135. package/dist/conditions/between.mjs +3 -0
  136. package/dist/conditions/between.mjs.map +1 -1
  137. package/dist/conditions/condition-parser.d.ts +1 -1
  138. package/dist/conditions/contains.cjs +3 -0
  139. package/dist/conditions/contains.cjs.map +1 -1
  140. package/dist/conditions/contains.d.ts +4 -1
  141. package/dist/conditions/contains.mjs +3 -0
  142. package/dist/conditions/contains.mjs.map +1 -1
  143. package/dist/conditions/equals.cjs +3 -0
  144. package/dist/conditions/equals.cjs.map +1 -1
  145. package/dist/conditions/equals.d.ts +4 -1
  146. package/dist/conditions/equals.mjs +3 -0
  147. package/dist/conditions/equals.mjs.map +1 -1
  148. package/dist/conditions/exists.cjs +3 -0
  149. package/dist/conditions/exists.cjs.map +1 -1
  150. package/dist/conditions/exists.d.ts +4 -1
  151. package/dist/conditions/exists.mjs +3 -0
  152. package/dist/conditions/exists.mjs.map +1 -1
  153. package/dist/conditions/greater-than-or-equal.cjs +3 -0
  154. package/dist/conditions/greater-than-or-equal.cjs.map +1 -1
  155. package/dist/conditions/greater-than-or-equal.d.ts +4 -1
  156. package/dist/conditions/greater-than-or-equal.mjs +3 -0
  157. package/dist/conditions/greater-than-or-equal.mjs.map +1 -1
  158. package/dist/conditions/greater-than.cjs +3 -0
  159. package/dist/conditions/greater-than.cjs.map +1 -1
  160. package/dist/conditions/greater-than.d.ts +4 -1
  161. package/dist/conditions/greater-than.mjs +3 -0
  162. package/dist/conditions/greater-than.mjs.map +1 -1
  163. package/dist/conditions/index.cjs +2 -2
  164. package/dist/conditions/index.d.ts +185 -2
  165. package/dist/conditions/index.mjs +1 -1
  166. package/dist/conditions/is-in.cjs +3 -0
  167. package/dist/conditions/is-in.cjs.map +1 -1
  168. package/dist/conditions/is-in.d.ts +4 -1
  169. package/dist/conditions/is-in.mjs +3 -0
  170. package/dist/conditions/is-in.mjs.map +1 -1
  171. package/dist/conditions/less-than-or-equal.cjs +3 -0
  172. package/dist/conditions/less-than-or-equal.cjs.map +1 -1
  173. package/dist/conditions/less-than-or-equal.d.ts +4 -1
  174. package/dist/conditions/less-than-or-equal.mjs +3 -0
  175. package/dist/conditions/less-than-or-equal.mjs.map +1 -1
  176. package/dist/conditions/less-than.cjs +3 -0
  177. package/dist/conditions/less-than.cjs.map +1 -1
  178. package/dist/conditions/less-than.d.ts +4 -1
  179. package/dist/conditions/less-than.mjs +3 -0
  180. package/dist/conditions/less-than.mjs.map +1 -1
  181. package/dist/conditions/not-equals.cjs +3 -0
  182. package/dist/conditions/not-equals.cjs.map +1 -1
  183. package/dist/conditions/not-equals.d.ts +4 -1
  184. package/dist/conditions/not-equals.mjs +3 -0
  185. package/dist/conditions/not-equals.mjs.map +1 -1
  186. package/dist/conditions/not-exists.cjs +3 -0
  187. package/dist/conditions/not-exists.cjs.map +1 -1
  188. package/dist/conditions/not-exists.d.ts +4 -1
  189. package/dist/conditions/not-exists.mjs +3 -0
  190. package/dist/conditions/not-exists.mjs.map +1 -1
  191. package/dist/conditions/not.cjs +3 -0
  192. package/dist/conditions/not.cjs.map +1 -1
  193. package/dist/conditions/not.d.ts +4 -1
  194. package/dist/conditions/not.mjs +3 -0
  195. package/dist/conditions/not.mjs.map +1 -1
  196. package/dist/conditions/or.cjs +3 -0
  197. package/dist/conditions/or.cjs.map +1 -1
  198. package/dist/conditions/or.d.ts +4 -1
  199. package/dist/conditions/or.mjs +3 -0
  200. package/dist/conditions/or.mjs.map +1 -1
  201. package/dist/conditions/size.cjs +3 -0
  202. package/dist/conditions/size.cjs.map +1 -1
  203. package/dist/conditions/size.d.ts +4 -1
  204. package/dist/conditions/size.mjs +3 -0
  205. package/dist/conditions/size.mjs.map +1 -1
  206. package/dist/conditions/type-is.cjs +3 -0
  207. package/dist/conditions/type-is.cjs.map +1 -1
  208. package/dist/conditions/type-is.d.ts +4 -1
  209. package/dist/conditions/type-is.mjs +3 -0
  210. package/dist/conditions/type-is.mjs.map +1 -1
  211. package/dist/core/entity.cjs +171 -0
  212. package/dist/core/entity.cjs.map +1 -1
  213. package/dist/core/entity.d.ts +99 -4
  214. package/dist/core/entity.mjs +171 -0
  215. package/dist/core/entity.mjs.map +1 -1
  216. package/dist/core/index.d.ts +139 -2
  217. package/dist/core/key.cjs +1 -1
  218. package/dist/core/key.cjs.map +1 -1
  219. package/dist/core/key.d.ts +26 -2
  220. package/dist/core/key.mjs +1 -1
  221. package/dist/core/key.mjs.map +1 -1
  222. package/dist/core/table.cjs +30 -0
  223. package/dist/core/table.cjs.map +1 -1
  224. package/dist/core/table.d.ts +40 -1
  225. package/dist/core/table.mjs +31 -1
  226. package/dist/core/table.mjs.map +1 -1
  227. package/dist/errors.cjs +3 -0
  228. package/dist/errors.cjs.map +1 -1
  229. package/dist/errors.d.ts +3 -0
  230. package/dist/errors.mjs +3 -0
  231. package/dist/errors.mjs.map +1 -1
  232. package/dist/index.cjs +10 -2
  233. package/dist/index.cjs.map +1 -1
  234. package/dist/index.d.ts +11 -7
  235. package/dist/index.mjs +5 -1
  236. package/dist/index.mjs.map +1 -1
  237. package/dist/projections/index.d.ts +7 -1
  238. package/dist/projections/projection-parser.d.ts +1 -1
  239. package/dist/updates/add-to-set.cjs +5 -0
  240. package/dist/updates/add-to-set.cjs.map +1 -1
  241. package/dist/updates/add-to-set.d.ts +6 -1
  242. package/dist/updates/add-to-set.mjs +5 -0
  243. package/dist/updates/add-to-set.mjs.map +1 -1
  244. package/dist/updates/add.cjs +5 -0
  245. package/dist/updates/add.cjs.map +1 -1
  246. package/dist/updates/add.d.ts +6 -1
  247. package/dist/updates/add.mjs +5 -0
  248. package/dist/updates/add.mjs.map +1 -1
  249. package/dist/updates/append.cjs +5 -0
  250. package/dist/updates/append.cjs.map +1 -1
  251. package/dist/updates/append.d.ts +6 -1
  252. package/dist/updates/append.mjs +5 -0
  253. package/dist/updates/append.mjs.map +1 -1
  254. package/dist/updates/index.d.ts +78 -1
  255. package/dist/updates/prepend.cjs +5 -0
  256. package/dist/updates/prepend.cjs.map +1 -1
  257. package/dist/updates/prepend.d.ts +6 -1
  258. package/dist/updates/prepend.mjs +5 -0
  259. package/dist/updates/prepend.mjs.map +1 -1
  260. package/dist/updates/ref.cjs +6 -0
  261. package/dist/updates/ref.cjs.map +1 -1
  262. package/dist/updates/ref.d.ts +7 -1
  263. package/dist/updates/ref.mjs +6 -0
  264. package/dist/updates/ref.mjs.map +1 -1
  265. package/dist/updates/remove-from-set.cjs +5 -0
  266. package/dist/updates/remove-from-set.cjs.map +1 -1
  267. package/dist/updates/remove-from-set.d.ts +6 -1
  268. package/dist/updates/remove-from-set.mjs +5 -0
  269. package/dist/updates/remove-from-set.mjs.map +1 -1
  270. package/dist/updates/remove.cjs +3 -0
  271. package/dist/updates/remove.cjs.map +1 -1
  272. package/dist/updates/remove.d.ts +4 -1
  273. package/dist/updates/remove.mjs +3 -0
  274. package/dist/updates/remove.mjs.map +1 -1
  275. package/dist/updates/subtract.cjs +5 -0
  276. package/dist/updates/subtract.cjs.map +1 -1
  277. package/dist/updates/subtract.d.ts +6 -1
  278. package/dist/updates/subtract.mjs +5 -0
  279. package/dist/updates/subtract.mjs.map +1 -1
  280. package/dist/updates/update-parser.cjs +10 -0
  281. package/dist/updates/update-parser.cjs.map +1 -1
  282. package/dist/updates/update-parser.d.ts +17 -1
  283. package/dist/updates/update-parser.mjs +10 -0
  284. package/dist/updates/update-parser.mjs.map +1 -1
  285. package/package.json +2 -1
  286. package/dist/commands/base-command.cjs +0 -3
  287. package/dist/commands/base-command.cjs.map +0 -1
  288. package/dist/commands/base-command.d.ts +0 -27
  289. package/dist/commands/base-command.mjs +0 -2
  290. package/dist/commands/base-command.mjs.map +0 -1
  291. package/dist/conditions/condition-types.cjs +0 -3
  292. package/dist/conditions/condition-types.cjs.map +0 -1
  293. package/dist/conditions/condition-types.d.ts +0 -95
  294. package/dist/conditions/condition-types.mjs +0 -2
  295. package/dist/conditions/condition-types.mjs.map +0 -1
  296. package/dist/core/core-types.cjs +0 -3
  297. package/dist/core/core-types.cjs.map +0 -1
  298. package/dist/core/core-types.d.ts +0 -44
  299. package/dist/core/core-types.mjs +0 -2
  300. package/dist/core/core-types.mjs.map +0 -1
  301. package/dist/projections/projection-types.cjs +0 -3
  302. package/dist/projections/projection-types.cjs.map +0 -1
  303. package/dist/projections/projection-types.d.ts +0 -3
  304. package/dist/projections/projection-types.mjs +0 -2
  305. package/dist/projections/projection-types.mjs.map +0 -1
  306. package/dist/updates/update-types.cjs +0 -3
  307. package/dist/updates/update-types.cjs.map +0 -1
  308. package/dist/updates/update-types.d.ts +0 -45
  309. package/dist/updates/update-types.mjs +0 -2
  310. package/dist/updates/update-types.mjs.map +0 -1
@@ -0,0 +1,123 @@
1
+ 'use strict';
2
+
3
+ var tslib_es6 = require('../node_modules/tslib/tslib.es6.cjs');
4
+ var errors = require('../errors.cjs');
5
+ var libDynamodb = require('@aws-sdk/lib-dynamodb');
6
+ var internalConstants = require('../internal-constants.cjs');
7
+ var pMap = require('p-map');
8
+
9
+ var _TableBatchGet_config;
10
+ /**
11
+ * Table-level command to perform a batch get across multiple entity types.
12
+ *
13
+ * Unlike `BatchGet` which operates on a single entity type, this command accepts
14
+ * get operations from multiple entities via `entity.prepare(new BatchGet({ keys: [...] }))`
15
+ * and returns results grouped by entity in a tuple structure.
16
+ *
17
+ * Unprocessed keys are returned per entity in a tuple matching the input order.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const { items, unprocessedKeys } = await table.send(new TableBatchGet({
22
+ * gets: [
23
+ * userEntity.prepare(new BatchGet({
24
+ * keys: [{ userId: 'u1' }, { userId: 'u2' }],
25
+ * })),
26
+ * orderEntity.prepare(new BatchGet({
27
+ * keys: [{ orderId: 'o1' }],
28
+ * })),
29
+ * ],
30
+ * consistent: true, // Apply strongly consistent reads to all groups
31
+ * }))
32
+ *
33
+ * const [users, orders] = items
34
+ * // users: User[]
35
+ * // orders: Order[]
36
+ * ```
37
+ */
38
+ // biome-ignore lint/suspicious/noExplicitAny: gets span multiple heterogeneous entity schemas
39
+ class TableBatchGet {
40
+ constructor(config) {
41
+ _TableBatchGet_config.set(this, void 0);
42
+ tslib_es6.__classPrivateFieldSet(this, _TableBatchGet_config, config, "f");
43
+ }
44
+ execute(table) {
45
+ return tslib_es6.__awaiter(this, void 0, void 0, function* () {
46
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
47
+ for (const group of tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets) {
48
+ if (group.entity.table !== table) {
49
+ throw new errors.DocumentBuilderError(`Entity table "${group.entity.table.tableName}" does not match the executing table "${table.tableName}"`);
50
+ }
51
+ }
52
+ // Command-level consistent overrides all group-level settings.
53
+ // If not specified, fall back to the per-group OR logic (any group consistent → all consistent).
54
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
55
+ const consistent = (_a = tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").consistent) !== null && _a !== void 0 ? _a : tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.some((g) => g.consistent);
56
+ // Aggregate all keys from every entity group into a single list
57
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
58
+ const allKeys = tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.flatMap((g) => g.keys);
59
+ const batchGet = new libDynamodb.BatchGetCommand({
60
+ RequestItems: {
61
+ [table.tableName]: {
62
+ Keys: allKeys,
63
+ ConsistentRead: consistent,
64
+ },
65
+ },
66
+ ReturnConsumedCapacity: tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").returnConsumedCapacity,
67
+ });
68
+ const result = yield table.documentClient.send(batchGet, {
69
+ abortSignal: (_b = tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").abortController) === null || _b === void 0 ? void 0 : _b.signal,
70
+ requestTimeout: tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").timeoutMs,
71
+ });
72
+ const rawItems = ((_d = (_c = result.Responses) === null || _c === void 0 ? void 0 : _c[table.tableName]) !== null && _d !== void 0 ? _d : []);
73
+ // Match returned items back to their entity groups by comparing primary keys.
74
+ // DynamoDB does not guarantee order in batch get responses, so we must match by key.
75
+ const groupedItems = tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.map(() => []);
76
+ for (const item of rawItems) {
77
+ for (let i = 0; i < tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.length; i++) {
78
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
79
+ const group = tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets[i];
80
+ if (group.matchItem(item)) {
81
+ groupedItems[i].push(item);
82
+ break;
83
+ }
84
+ }
85
+ }
86
+ // Parse each group's matched items
87
+ const parsedItems = yield pMap(tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets,
88
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
89
+ (group, i) => tslib_es6.__awaiter(this, void 0, void 0, function* () { var _a; return group.parseResults(groupedItems[i], (_a = tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").skipValidation) !== null && _a !== void 0 ? _a : false); }), {
90
+ concurrency: internalConstants.BATCH_GET_VALIDATION_CONCURRENCY,
91
+ signal: (_e = tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").abortController) === null || _e === void 0 ? void 0 : _e.signal,
92
+ });
93
+ // Map unprocessed keys back to per-entity groups
94
+ const rawUnprocessedKeys =
95
+ // biome-ignore lint/suspicious/noExplicitAny: DynamoDB SDK returns untyped key objects
96
+ ((_h = (_g = (_f = result.UnprocessedKeys) === null || _f === void 0 ? void 0 : _f[table.tableName]) === null || _g === void 0 ? void 0 : _g.Keys) !== null && _h !== void 0 ? _h : []);
97
+ const unprocessedKeys = tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.map(() => undefined);
98
+ for (const key of rawUnprocessedKeys) {
99
+ for (let i = 0; i < tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.length; i++) {
100
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
101
+ const group = tslib_es6.__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets[i];
102
+ const matched = group.matchUnprocessedKey(key);
103
+ if (matched !== undefined) {
104
+ if (!unprocessedKeys[i])
105
+ unprocessedKeys[i] = [];
106
+ unprocessedKeys[i].push(matched);
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ return {
112
+ responseMetadata: result.$metadata,
113
+ consumedCapacity: (_j = result.ConsumedCapacity) === null || _j === void 0 ? void 0 : _j[0],
114
+ items: parsedItems,
115
+ unprocessedKeys: unprocessedKeys,
116
+ };
117
+ });
118
+ }
119
+ }
120
+ _TableBatchGet_config = new WeakMap();
121
+
122
+ exports.TableBatchGet = TableBatchGet;
123
+ //# sourceMappingURL=table-batch-get.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-batch-get.cjs","sources":["../../src/commands/table-batch-get.ts"],"sourcesContent":[null],"names":["__classPrivateFieldSet","__classPrivateFieldGet","DocumentBuilderError","BatchGetCommand","__awaiter","BATCH_GET_VALIDATION_CONCURRENCY"],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import { PreparedBatchGet, BaseConfig, TableCommand } from './index.js';
2
+ import { EntitySchema } from '../core/index.js';
3
+ import { DynamoTable } from '../core/table.js';
4
+ import { ConsumedCapacity } from '@aws-sdk/client-dynamodb';
5
+ import { ResponseMetadata } from '@aws-sdk/types';
6
+ import { ZodObject } from 'zod/v4';
7
+
8
+ /**
9
+ * Extracts the result item type from a PreparedBatchGet.
10
+ */
11
+ type ExtractSchema<T> = T extends PreparedBatchGet<infer S> ? EntitySchema<S> : never;
12
+ /**
13
+ * Maps an array of PreparedBatchGets to a tuple of their result item arrays.
14
+ */
15
+ type TableBatchGetItems<Gets extends PreparedBatchGet<ZodObject>[]> = {
16
+ [K in keyof Gets]: Array<ExtractSchema<Gets[K]>>;
17
+ };
18
+ /**
19
+ * Maps an array of PreparedBatchGets to a tuple of their unprocessed key arrays.
20
+ */
21
+ type TableBatchGetUnprocessedKeys<Gets extends PreparedBatchGet<ZodObject>[]> = {
22
+ [K in keyof Gets]: Array<Partial<ExtractSchema<Gets[K]>>> | undefined;
23
+ };
24
+ /**
25
+ * Configuration for the TableBatchGet command.
26
+ *
27
+ * @template Gets - Tuple of PreparedBatchGet types, one per entity group.
28
+ */
29
+ type TableBatchGetConfig<Gets extends PreparedBatchGet<any>[]> = BaseConfig & {
30
+ gets: [...Gets];
31
+ /**
32
+ * If set, overrides the `consistent` setting on all individual prepared groups.
33
+ * When `true`, DynamoDB will use strongly consistent reads for all entity groups.
34
+ * When `false`, DynamoDB will use eventually consistent reads for all entity groups.
35
+ * When not set, the command falls back to the per-group `consistent` setting
36
+ * (any group with `consistent: true` makes the entire request consistent).
37
+ */
38
+ consistent?: boolean;
39
+ };
40
+ /**
41
+ * Result of the TableBatchGet command.
42
+ *
43
+ * @template Gets - Tuple of PreparedBatchGet types, one per entity group.
44
+ */
45
+ type TableBatchGetResult<Gets extends PreparedBatchGet<any>[]> = {
46
+ responseMetadata?: ResponseMetadata;
47
+ consumedCapacity?: ConsumedCapacity | undefined;
48
+ items: TableBatchGetItems<Gets>;
49
+ unprocessedKeys: TableBatchGetUnprocessedKeys<Gets>;
50
+ };
51
+ /**
52
+ * Table-level command to perform a batch get across multiple entity types.
53
+ *
54
+ * Unlike `BatchGet` which operates on a single entity type, this command accepts
55
+ * get operations from multiple entities via `entity.prepare(new BatchGet({ keys: [...] }))`
56
+ * and returns results grouped by entity in a tuple structure.
57
+ *
58
+ * Unprocessed keys are returned per entity in a tuple matching the input order.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const { items, unprocessedKeys } = await table.send(new TableBatchGet({
63
+ * gets: [
64
+ * userEntity.prepare(new BatchGet({
65
+ * keys: [{ userId: 'u1' }, { userId: 'u2' }],
66
+ * })),
67
+ * orderEntity.prepare(new BatchGet({
68
+ * keys: [{ orderId: 'o1' }],
69
+ * })),
70
+ * ],
71
+ * consistent: true, // Apply strongly consistent reads to all groups
72
+ * }))
73
+ *
74
+ * const [users, orders] = items
75
+ * // users: User[]
76
+ * // orders: Order[]
77
+ * ```
78
+ */
79
+ declare class TableBatchGet<Gets extends PreparedBatchGet<any>[]> implements TableCommand<TableBatchGetResult<Gets>> {
80
+ #private;
81
+ constructor(config: TableBatchGetConfig<Gets>);
82
+ execute(table: DynamoTable): Promise<TableBatchGetResult<Gets>>;
83
+ }
84
+
85
+ export { TableBatchGet };
86
+ export type { TableBatchGetConfig, TableBatchGetResult };
@@ -0,0 +1,121 @@
1
+ import { __classPrivateFieldSet, __awaiter, __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.mjs';
2
+ import { DocumentBuilderError } from '../errors.mjs';
3
+ import { BatchGetCommand } from '@aws-sdk/lib-dynamodb';
4
+ import { BATCH_GET_VALIDATION_CONCURRENCY } from '../internal-constants.mjs';
5
+ import pMap from 'p-map';
6
+
7
+ var _TableBatchGet_config;
8
+ /**
9
+ * Table-level command to perform a batch get across multiple entity types.
10
+ *
11
+ * Unlike `BatchGet` which operates on a single entity type, this command accepts
12
+ * get operations from multiple entities via `entity.prepare(new BatchGet({ keys: [...] }))`
13
+ * and returns results grouped by entity in a tuple structure.
14
+ *
15
+ * Unprocessed keys are returned per entity in a tuple matching the input order.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const { items, unprocessedKeys } = await table.send(new TableBatchGet({
20
+ * gets: [
21
+ * userEntity.prepare(new BatchGet({
22
+ * keys: [{ userId: 'u1' }, { userId: 'u2' }],
23
+ * })),
24
+ * orderEntity.prepare(new BatchGet({
25
+ * keys: [{ orderId: 'o1' }],
26
+ * })),
27
+ * ],
28
+ * consistent: true, // Apply strongly consistent reads to all groups
29
+ * }))
30
+ *
31
+ * const [users, orders] = items
32
+ * // users: User[]
33
+ * // orders: Order[]
34
+ * ```
35
+ */
36
+ // biome-ignore lint/suspicious/noExplicitAny: gets span multiple heterogeneous entity schemas
37
+ class TableBatchGet {
38
+ constructor(config) {
39
+ _TableBatchGet_config.set(this, void 0);
40
+ __classPrivateFieldSet(this, _TableBatchGet_config, config, "f");
41
+ }
42
+ execute(table) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
45
+ for (const group of __classPrivateFieldGet(this, _TableBatchGet_config, "f").gets) {
46
+ if (group.entity.table !== table) {
47
+ throw new DocumentBuilderError(`Entity table "${group.entity.table.tableName}" does not match the executing table "${table.tableName}"`);
48
+ }
49
+ }
50
+ // Command-level consistent overrides all group-level settings.
51
+ // If not specified, fall back to the per-group OR logic (any group consistent → all consistent).
52
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
53
+ const consistent = (_a = __classPrivateFieldGet(this, _TableBatchGet_config, "f").consistent) !== null && _a !== void 0 ? _a : __classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.some((g) => g.consistent);
54
+ // Aggregate all keys from every entity group into a single list
55
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
56
+ const allKeys = __classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.flatMap((g) => g.keys);
57
+ const batchGet = new BatchGetCommand({
58
+ RequestItems: {
59
+ [table.tableName]: {
60
+ Keys: allKeys,
61
+ ConsistentRead: consistent,
62
+ },
63
+ },
64
+ ReturnConsumedCapacity: __classPrivateFieldGet(this, _TableBatchGet_config, "f").returnConsumedCapacity,
65
+ });
66
+ const result = yield table.documentClient.send(batchGet, {
67
+ abortSignal: (_b = __classPrivateFieldGet(this, _TableBatchGet_config, "f").abortController) === null || _b === void 0 ? void 0 : _b.signal,
68
+ requestTimeout: __classPrivateFieldGet(this, _TableBatchGet_config, "f").timeoutMs,
69
+ });
70
+ const rawItems = ((_d = (_c = result.Responses) === null || _c === void 0 ? void 0 : _c[table.tableName]) !== null && _d !== void 0 ? _d : []);
71
+ // Match returned items back to their entity groups by comparing primary keys.
72
+ // DynamoDB does not guarantee order in batch get responses, so we must match by key.
73
+ const groupedItems = __classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.map(() => []);
74
+ for (const item of rawItems) {
75
+ for (let i = 0; i < __classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.length; i++) {
76
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
77
+ const group = __classPrivateFieldGet(this, _TableBatchGet_config, "f").gets[i];
78
+ if (group.matchItem(item)) {
79
+ groupedItems[i].push(item);
80
+ break;
81
+ }
82
+ }
83
+ }
84
+ // Parse each group's matched items
85
+ const parsedItems = yield pMap(__classPrivateFieldGet(this, _TableBatchGet_config, "f").gets,
86
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
87
+ (group, i) => __awaiter(this, void 0, void 0, function* () { var _a; return group.parseResults(groupedItems[i], (_a = __classPrivateFieldGet(this, _TableBatchGet_config, "f").skipValidation) !== null && _a !== void 0 ? _a : false); }), {
88
+ concurrency: BATCH_GET_VALIDATION_CONCURRENCY,
89
+ signal: (_e = __classPrivateFieldGet(this, _TableBatchGet_config, "f").abortController) === null || _e === void 0 ? void 0 : _e.signal,
90
+ });
91
+ // Map unprocessed keys back to per-entity groups
92
+ const rawUnprocessedKeys =
93
+ // biome-ignore lint/suspicious/noExplicitAny: DynamoDB SDK returns untyped key objects
94
+ ((_h = (_g = (_f = result.UnprocessedKeys) === null || _f === void 0 ? void 0 : _f[table.tableName]) === null || _g === void 0 ? void 0 : _g.Keys) !== null && _h !== void 0 ? _h : []);
95
+ const unprocessedKeys = __classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.map(() => undefined);
96
+ for (const key of rawUnprocessedKeys) {
97
+ for (let i = 0; i < __classPrivateFieldGet(this, _TableBatchGet_config, "f").gets.length; i++) {
98
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
99
+ const group = __classPrivateFieldGet(this, _TableBatchGet_config, "f").gets[i];
100
+ const matched = group.matchUnprocessedKey(key);
101
+ if (matched !== undefined) {
102
+ if (!unprocessedKeys[i])
103
+ unprocessedKeys[i] = [];
104
+ unprocessedKeys[i].push(matched);
105
+ break;
106
+ }
107
+ }
108
+ }
109
+ return {
110
+ responseMetadata: result.$metadata,
111
+ consumedCapacity: (_j = result.ConsumedCapacity) === null || _j === void 0 ? void 0 : _j[0],
112
+ items: parsedItems,
113
+ unprocessedKeys: unprocessedKeys,
114
+ };
115
+ });
116
+ }
117
+ }
118
+ _TableBatchGet_config = new WeakMap();
119
+
120
+ export { TableBatchGet };
121
+ //# sourceMappingURL=table-batch-get.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-batch-get.mjs","sources":["../../src/commands/table-batch-get.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ 'use strict';
2
+
3
+ var tslib_es6 = require('../node_modules/tslib/tslib.es6.cjs');
4
+ var errors = require('../errors.cjs');
5
+ var libDynamodb = require('@aws-sdk/lib-dynamodb');
6
+ var internalConstants = require('../internal-constants.cjs');
7
+ var pMap = require('p-map');
8
+
9
+ var _TableBatchWrite_config;
10
+ /**
11
+ * Table-level command to perform a batch write across multiple entity types.
12
+ *
13
+ * Unlike `BatchWrite` which operates on a single entity type, this command accepts
14
+ * write operations from multiple entities via `entity.prepare(new BatchWrite({ ... }))`
15
+ * and executes them in a single DynamoDB BatchWrite request.
16
+ *
17
+ * Unprocessed puts and deletes are returned per entity in a tuple matching the input order.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const { unprocessedPuts, unprocessedDeletes } = await table.send(new TableBatchWrite({
22
+ * writes: [
23
+ * userEntity.prepare(new BatchWrite({
24
+ * items: [{ userId: 'u1', name: 'Alice' }],
25
+ * deletes: [{ userId: 'u2', name: 'Bob' }],
26
+ * })),
27
+ * orderEntity.prepare(new BatchWrite({
28
+ * items: [{ orderId: 'o1', status: 'pending', total: 99 }],
29
+ * })),
30
+ * ],
31
+ * }))
32
+ *
33
+ * const [userUnprocessedPuts, orderUnprocessedPuts] = unprocessedPuts
34
+ * const [userUnprocessedDeletes, orderUnprocessedDeletes] = unprocessedDeletes
35
+ * ```
36
+ */
37
+ // biome-ignore lint/suspicious/noExplicitAny: writes span multiple heterogeneous entity schemas
38
+ class TableBatchWrite {
39
+ constructor(config) {
40
+ _TableBatchWrite_config.set(this, void 0);
41
+ tslib_es6.__classPrivateFieldSet(this, _TableBatchWrite_config, config, "f");
42
+ }
43
+ execute(table) {
44
+ return tslib_es6.__awaiter(this, void 0, void 0, function* () {
45
+ var _a, _b, _c, _d, _e, _f, _g;
46
+ for (const group of tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes) {
47
+ if (group.entity.table !== table) {
48
+ throw new errors.DocumentBuilderError(`Entity table "${group.entity.table.tableName}" does not match the executing table "${table.tableName}"`);
49
+ }
50
+ }
51
+ // Build all requests across all entity groups, preserving group index for unprocessed mapping
52
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
53
+ const allRequests = (yield pMap(tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes, (group) => {
54
+ var _a, _b;
55
+ return group.buildRequests((_a = tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").skipValidation) !== null && _a !== void 0 ? _a : false, (_b = tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").abortController) === null || _b === void 0 ? void 0 : _b.signal);
56
+ }, {
57
+ concurrency: internalConstants.BATCH_WRITE_VALIDATION_CONCURRENCY,
58
+ signal: (_a = tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").abortController) === null || _a === void 0 ? void 0 : _a.signal,
59
+ })).flat();
60
+ const batchWrite = new libDynamodb.BatchWriteCommand({
61
+ RequestItems: {
62
+ [table.tableName]: allRequests,
63
+ },
64
+ ReturnConsumedCapacity: tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").returnConsumedCapacity,
65
+ ReturnItemCollectionMetrics: tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").returnItemCollectionMetrics,
66
+ });
67
+ const result = yield table.documentClient.send(batchWrite, {
68
+ abortSignal: (_b = tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").abortController) === null || _b === void 0 ? void 0 : _b.signal,
69
+ requestTimeout: tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").timeoutMs,
70
+ });
71
+ const unprocessedItems = (_d = (_c = result.UnprocessedItems) === null || _c === void 0 ? void 0 : _c[table.tableName]) !== null && _d !== void 0 ? _d : [];
72
+ // Map unprocessed items back to their respective entity groups
73
+ const unprocessedPuts = tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes.map(() => undefined);
74
+ const unprocessedDeletes = tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes.map(() => undefined);
75
+ for (const unprocessedItem of unprocessedItems) {
76
+ if ((_e = unprocessedItem.PutRequest) === null || _e === void 0 ? void 0 : _e.Item) {
77
+ const item = unprocessedItem.PutRequest.Item;
78
+ for (let i = 0; i < tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes.length; i++) {
79
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
80
+ const group = tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes[i];
81
+ const matched = group.matchUnprocessedPut(item);
82
+ if (matched !== undefined) {
83
+ if (!unprocessedPuts[i])
84
+ unprocessedPuts[i] = [];
85
+ unprocessedPuts[i].push(matched);
86
+ break;
87
+ }
88
+ }
89
+ }
90
+ else if ((_f = unprocessedItem.DeleteRequest) === null || _f === void 0 ? void 0 : _f.Key) {
91
+ // biome-ignore lint/suspicious/noExplicitAny: DynamoDB SDK returns untyped key objects
92
+ const key = unprocessedItem.DeleteRequest.Key;
93
+ for (let i = 0; i < tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes.length; i++) {
94
+ // biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
95
+ const group = tslib_es6.__classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes[i];
96
+ const matched = group.matchUnprocessedDelete(key);
97
+ if (matched !== undefined) {
98
+ if (!unprocessedDeletes[i])
99
+ unprocessedDeletes[i] = [];
100
+ unprocessedDeletes[i].push(matched);
101
+ break;
102
+ }
103
+ }
104
+ }
105
+ }
106
+ return {
107
+ responseMetadata: result.$metadata,
108
+ consumedCapacity: (_g = result.ConsumedCapacity) === null || _g === void 0 ? void 0 : _g[0],
109
+ itemCollectionMetrics: result.ItemCollectionMetrics,
110
+ unprocessedPuts: unprocessedPuts,
111
+ unprocessedDeletes: unprocessedDeletes,
112
+ };
113
+ });
114
+ }
115
+ }
116
+ _TableBatchWrite_config = new WeakMap();
117
+
118
+ exports.TableBatchWrite = TableBatchWrite;
119
+ //# sourceMappingURL=table-batch-write.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-batch-write.cjs","sources":["../../src/commands/table-batch-write.ts"],"sourcesContent":[null],"names":["__classPrivateFieldSet","__classPrivateFieldGet","DocumentBuilderError","BATCH_WRITE_VALIDATION_CONCURRENCY","BatchWriteCommand"],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { PreparedBatchWrite, BaseConfig, TableCommand } from './index.js';
2
+ import { DynamoTable } from '../core/table.js';
3
+ import { EntitySchema } from '../core/index.js';
4
+ import { ReturnItemCollectionMetrics, ConsumedCapacity, ItemCollectionMetrics } from '@aws-sdk/client-dynamodb';
5
+ import { ResponseMetadata } from '@aws-sdk/types';
6
+ import { ZodObject } from 'zod/v4';
7
+
8
+ /**
9
+ * Extracts the entity schema type from a PreparedBatchWrite.
10
+ */
11
+ type ExtractSchema<T> = T extends PreparedBatchWrite<infer S> ? EntitySchema<S> : never;
12
+ /**
13
+ * Maps an array of PreparedBatchWrites to a tuple of their unprocessed put arrays.
14
+ */
15
+ type TableBatchWriteUnprocessedPuts<Writes extends PreparedBatchWrite<ZodObject>[]> = {
16
+ [K in keyof Writes]: Array<ExtractSchema<Writes[K]>> | undefined;
17
+ };
18
+ /**
19
+ * Maps an array of PreparedBatchWrites to a tuple of their unprocessed delete arrays.
20
+ */
21
+ type TableBatchWriteUnprocessedDeletes<Writes extends PreparedBatchWrite<ZodObject>[]> = {
22
+ [K in keyof Writes]: Array<Partial<ExtractSchema<Writes[K]>>> | undefined;
23
+ };
24
+ /**
25
+ * Configuration for the TableBatchWrite command.
26
+ *
27
+ * @template Writes - Tuple of PreparedBatchWrite types, one per entity group.
28
+ */
29
+ type TableBatchWriteConfig<Writes extends PreparedBatchWrite<any>[]> = BaseConfig & {
30
+ writes: [...Writes];
31
+ returnItemCollectionMetrics?: ReturnItemCollectionMetrics;
32
+ };
33
+ /**
34
+ * Result of the TableBatchWrite command.
35
+ *
36
+ * @template Writes - Tuple of PreparedBatchWrite types, one per entity group.
37
+ */
38
+ type TableBatchWriteResult<Writes extends PreparedBatchWrite<any>[]> = {
39
+ responseMetadata?: ResponseMetadata;
40
+ consumedCapacity?: ConsumedCapacity | undefined;
41
+ itemCollectionMetrics?: ItemCollectionMetrics;
42
+ unprocessedPuts: TableBatchWriteUnprocessedPuts<Writes>;
43
+ unprocessedDeletes: TableBatchWriteUnprocessedDeletes<Writes>;
44
+ };
45
+ /**
46
+ * Table-level command to perform a batch write across multiple entity types.
47
+ *
48
+ * Unlike `BatchWrite` which operates on a single entity type, this command accepts
49
+ * write operations from multiple entities via `entity.prepare(new BatchWrite({ ... }))`
50
+ * and executes them in a single DynamoDB BatchWrite request.
51
+ *
52
+ * Unprocessed puts and deletes are returned per entity in a tuple matching the input order.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const { unprocessedPuts, unprocessedDeletes } = await table.send(new TableBatchWrite({
57
+ * writes: [
58
+ * userEntity.prepare(new BatchWrite({
59
+ * items: [{ userId: 'u1', name: 'Alice' }],
60
+ * deletes: [{ userId: 'u2', name: 'Bob' }],
61
+ * })),
62
+ * orderEntity.prepare(new BatchWrite({
63
+ * items: [{ orderId: 'o1', status: 'pending', total: 99 }],
64
+ * })),
65
+ * ],
66
+ * }))
67
+ *
68
+ * const [userUnprocessedPuts, orderUnprocessedPuts] = unprocessedPuts
69
+ * const [userUnprocessedDeletes, orderUnprocessedDeletes] = unprocessedDeletes
70
+ * ```
71
+ */
72
+ declare class TableBatchWrite<Writes extends PreparedBatchWrite<any>[]> implements TableCommand<TableBatchWriteResult<Writes>> {
73
+ #private;
74
+ constructor(config: TableBatchWriteConfig<Writes>);
75
+ execute(table: DynamoTable): Promise<TableBatchWriteResult<Writes>>;
76
+ }
77
+
78
+ export { TableBatchWrite };
79
+ export type { TableBatchWriteConfig, TableBatchWriteResult };