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.
- package/README.md +367 -0
- package/dist/attributes/attribute-map.cjs +52 -0
- package/dist/attributes/attribute-map.cjs.map +1 -1
- package/dist/attributes/attribute-map.d.ts +67 -0
- package/dist/attributes/attribute-map.mjs +52 -0
- package/dist/attributes/attribute-map.mjs.map +1 -1
- package/dist/commands/batch-get.cjs +43 -0
- package/dist/commands/batch-get.cjs.map +1 -1
- package/dist/commands/batch-get.d.ts +51 -3
- package/dist/commands/batch-get.mjs +44 -1
- package/dist/commands/batch-get.mjs.map +1 -1
- package/dist/commands/batch-projected-get.cjs +42 -0
- package/dist/commands/batch-projected-get.cjs.map +1 -1
- package/dist/commands/batch-projected-get.d.ts +56 -3
- package/dist/commands/batch-projected-get.mjs +42 -0
- package/dist/commands/batch-projected-get.mjs.map +1 -1
- package/dist/commands/batch-write.cjs +44 -0
- package/dist/commands/batch-write.cjs.map +1 -1
- package/dist/commands/batch-write.d.ts +54 -4
- package/dist/commands/batch-write.mjs +45 -1
- package/dist/commands/batch-write.mjs.map +1 -1
- package/dist/commands/condition-check.cjs +37 -0
- package/dist/commands/condition-check.cjs.map +1 -1
- package/dist/commands/condition-check.d.ts +45 -3
- package/dist/commands/condition-check.mjs +37 -0
- package/dist/commands/condition-check.mjs.map +1 -1
- package/dist/commands/conditional-delete.cjs +33 -0
- package/dist/commands/conditional-delete.cjs.map +1 -1
- package/dist/commands/conditional-delete.d.ts +46 -3
- package/dist/commands/conditional-delete.mjs +33 -0
- package/dist/commands/conditional-delete.mjs.map +1 -1
- package/dist/commands/conditional-put.cjs +34 -0
- package/dist/commands/conditional-put.cjs.map +1 -1
- package/dist/commands/conditional-put.d.ts +48 -4
- package/dist/commands/conditional-put.mjs +34 -0
- package/dist/commands/conditional-put.mjs.map +1 -1
- package/dist/commands/conditional-update.cjs +35 -0
- package/dist/commands/conditional-update.cjs.map +1 -1
- package/dist/commands/conditional-update.d.ts +48 -3
- package/dist/commands/conditional-update.mjs +35 -0
- package/dist/commands/conditional-update.mjs.map +1 -1
- package/dist/commands/delete.cjs +32 -0
- package/dist/commands/delete.cjs.map +1 -1
- package/dist/commands/delete.d.ts +44 -2
- package/dist/commands/delete.mjs +32 -0
- package/dist/commands/delete.mjs.map +1 -1
- package/dist/commands/get.cjs +33 -0
- package/dist/commands/get.cjs.map +1 -1
- package/dist/commands/get.d.ts +45 -2
- package/dist/commands/get.mjs +33 -0
- package/dist/commands/get.mjs.map +1 -1
- package/dist/commands/index.cjs +8 -0
- package/dist/commands/index.cjs.map +1 -1
- package/dist/commands/index.d.ts +160 -1
- package/dist/commands/index.mjs +4 -0
- package/dist/commands/index.mjs.map +1 -1
- package/dist/commands/projected-get.cjs +40 -0
- package/dist/commands/projected-get.cjs.map +1 -1
- package/dist/commands/projected-get.d.ts +54 -3
- package/dist/commands/projected-get.mjs +40 -0
- package/dist/commands/projected-get.mjs.map +1 -1
- package/dist/commands/projected-query.cjs +41 -0
- package/dist/commands/projected-query.cjs.map +1 -1
- package/dist/commands/projected-query.d.ts +56 -3
- package/dist/commands/projected-query.mjs +41 -0
- package/dist/commands/projected-query.mjs.map +1 -1
- package/dist/commands/projected-scan.cjs +41 -0
- package/dist/commands/projected-scan.cjs.map +1 -1
- package/dist/commands/projected-scan.d.ts +55 -3
- package/dist/commands/projected-scan.mjs +41 -0
- package/dist/commands/projected-scan.mjs.map +1 -1
- package/dist/commands/put.cjs +37 -0
- package/dist/commands/put.cjs.map +1 -1
- package/dist/commands/put.d.ts +50 -3
- package/dist/commands/put.mjs +37 -0
- package/dist/commands/put.mjs.map +1 -1
- package/dist/commands/query.cjs +35 -0
- package/dist/commands/query.cjs.map +1 -1
- package/dist/commands/query.d.ts +48 -3
- package/dist/commands/query.mjs +35 -0
- package/dist/commands/query.mjs.map +1 -1
- package/dist/commands/scan.cjs +33 -0
- package/dist/commands/scan.cjs.map +1 -1
- package/dist/commands/scan.d.ts +46 -3
- package/dist/commands/scan.mjs +33 -0
- package/dist/commands/scan.mjs.map +1 -1
- package/dist/commands/table-batch-get.cjs +123 -0
- package/dist/commands/table-batch-get.cjs.map +1 -0
- package/dist/commands/table-batch-get.d.ts +86 -0
- package/dist/commands/table-batch-get.mjs +121 -0
- package/dist/commands/table-batch-get.mjs.map +1 -0
- package/dist/commands/table-batch-write.cjs +119 -0
- package/dist/commands/table-batch-write.cjs.map +1 -0
- package/dist/commands/table-batch-write.d.ts +79 -0
- package/dist/commands/table-batch-write.mjs +117 -0
- package/dist/commands/table-batch-write.mjs.map +1 -0
- package/dist/commands/table-transact-get.cjs +73 -0
- package/dist/commands/table-transact-get.cjs.map +1 -0
- package/dist/commands/table-transact-get.d.ts +60 -0
- package/dist/commands/table-transact-get.mjs +71 -0
- package/dist/commands/table-transact-get.mjs.map +1 -0
- package/dist/commands/table-transact-write.cjs +76 -0
- package/dist/commands/table-transact-write.cjs.map +1 -0
- package/dist/commands/table-transact-write.d.ts +51 -0
- package/dist/commands/table-transact-write.mjs +74 -0
- package/dist/commands/table-transact-write.mjs.map +1 -0
- package/dist/commands/transact-get.cjs +38 -0
- package/dist/commands/transact-get.cjs.map +1 -1
- package/dist/commands/transact-get.d.ts +49 -3
- package/dist/commands/transact-get.mjs +39 -1
- package/dist/commands/transact-get.mjs.map +1 -1
- package/dist/commands/transact-write.cjs +37 -0
- package/dist/commands/transact-write.cjs.map +1 -1
- package/dist/commands/transact-write.d.ts +46 -1
- package/dist/commands/transact-write.mjs +37 -0
- package/dist/commands/transact-write.mjs.map +1 -1
- package/dist/commands/update.cjs +37 -0
- package/dist/commands/update.cjs.map +1 -1
- package/dist/commands/update.d.ts +50 -3
- package/dist/commands/update.mjs +37 -0
- package/dist/commands/update.mjs.map +1 -1
- package/dist/conditions/and.cjs +3 -0
- package/dist/conditions/and.cjs.map +1 -1
- package/dist/conditions/and.d.ts +4 -1
- package/dist/conditions/and.mjs +3 -0
- package/dist/conditions/and.mjs.map +1 -1
- package/dist/conditions/begins-with.cjs +3 -0
- package/dist/conditions/begins-with.cjs.map +1 -1
- package/dist/conditions/begins-with.d.ts +4 -1
- package/dist/conditions/begins-with.mjs +3 -0
- package/dist/conditions/begins-with.mjs.map +1 -1
- package/dist/conditions/between.cjs +3 -0
- package/dist/conditions/between.cjs.map +1 -1
- package/dist/conditions/between.d.ts +4 -1
- package/dist/conditions/between.mjs +3 -0
- package/dist/conditions/between.mjs.map +1 -1
- package/dist/conditions/condition-parser.d.ts +1 -1
- package/dist/conditions/contains.cjs +3 -0
- package/dist/conditions/contains.cjs.map +1 -1
- package/dist/conditions/contains.d.ts +4 -1
- package/dist/conditions/contains.mjs +3 -0
- package/dist/conditions/contains.mjs.map +1 -1
- package/dist/conditions/equals.cjs +3 -0
- package/dist/conditions/equals.cjs.map +1 -1
- package/dist/conditions/equals.d.ts +4 -1
- package/dist/conditions/equals.mjs +3 -0
- package/dist/conditions/equals.mjs.map +1 -1
- package/dist/conditions/exists.cjs +3 -0
- package/dist/conditions/exists.cjs.map +1 -1
- package/dist/conditions/exists.d.ts +4 -1
- package/dist/conditions/exists.mjs +3 -0
- package/dist/conditions/exists.mjs.map +1 -1
- package/dist/conditions/greater-than-or-equal.cjs +3 -0
- package/dist/conditions/greater-than-or-equal.cjs.map +1 -1
- package/dist/conditions/greater-than-or-equal.d.ts +4 -1
- package/dist/conditions/greater-than-or-equal.mjs +3 -0
- package/dist/conditions/greater-than-or-equal.mjs.map +1 -1
- package/dist/conditions/greater-than.cjs +3 -0
- package/dist/conditions/greater-than.cjs.map +1 -1
- package/dist/conditions/greater-than.d.ts +4 -1
- package/dist/conditions/greater-than.mjs +3 -0
- package/dist/conditions/greater-than.mjs.map +1 -1
- package/dist/conditions/index.cjs +2 -2
- package/dist/conditions/index.d.ts +185 -2
- package/dist/conditions/index.mjs +1 -1
- package/dist/conditions/is-in.cjs +3 -0
- package/dist/conditions/is-in.cjs.map +1 -1
- package/dist/conditions/is-in.d.ts +4 -1
- package/dist/conditions/is-in.mjs +3 -0
- package/dist/conditions/is-in.mjs.map +1 -1
- package/dist/conditions/less-than-or-equal.cjs +3 -0
- package/dist/conditions/less-than-or-equal.cjs.map +1 -1
- package/dist/conditions/less-than-or-equal.d.ts +4 -1
- package/dist/conditions/less-than-or-equal.mjs +3 -0
- package/dist/conditions/less-than-or-equal.mjs.map +1 -1
- package/dist/conditions/less-than.cjs +3 -0
- package/dist/conditions/less-than.cjs.map +1 -1
- package/dist/conditions/less-than.d.ts +4 -1
- package/dist/conditions/less-than.mjs +3 -0
- package/dist/conditions/less-than.mjs.map +1 -1
- package/dist/conditions/not-equals.cjs +3 -0
- package/dist/conditions/not-equals.cjs.map +1 -1
- package/dist/conditions/not-equals.d.ts +4 -1
- package/dist/conditions/not-equals.mjs +3 -0
- package/dist/conditions/not-equals.mjs.map +1 -1
- package/dist/conditions/not-exists.cjs +3 -0
- package/dist/conditions/not-exists.cjs.map +1 -1
- package/dist/conditions/not-exists.d.ts +4 -1
- package/dist/conditions/not-exists.mjs +3 -0
- package/dist/conditions/not-exists.mjs.map +1 -1
- package/dist/conditions/not.cjs +3 -0
- package/dist/conditions/not.cjs.map +1 -1
- package/dist/conditions/not.d.ts +4 -1
- package/dist/conditions/not.mjs +3 -0
- package/dist/conditions/not.mjs.map +1 -1
- package/dist/conditions/or.cjs +3 -0
- package/dist/conditions/or.cjs.map +1 -1
- package/dist/conditions/or.d.ts +4 -1
- package/dist/conditions/or.mjs +3 -0
- package/dist/conditions/or.mjs.map +1 -1
- package/dist/conditions/size.cjs +3 -0
- package/dist/conditions/size.cjs.map +1 -1
- package/dist/conditions/size.d.ts +4 -1
- package/dist/conditions/size.mjs +3 -0
- package/dist/conditions/size.mjs.map +1 -1
- package/dist/conditions/type-is.cjs +3 -0
- package/dist/conditions/type-is.cjs.map +1 -1
- package/dist/conditions/type-is.d.ts +4 -1
- package/dist/conditions/type-is.mjs +3 -0
- package/dist/conditions/type-is.mjs.map +1 -1
- package/dist/core/entity.cjs +171 -0
- package/dist/core/entity.cjs.map +1 -1
- package/dist/core/entity.d.ts +99 -4
- package/dist/core/entity.mjs +171 -0
- package/dist/core/entity.mjs.map +1 -1
- package/dist/core/index.d.ts +139 -2
- package/dist/core/key.cjs +1 -1
- package/dist/core/key.cjs.map +1 -1
- package/dist/core/key.d.ts +26 -2
- package/dist/core/key.mjs +1 -1
- package/dist/core/key.mjs.map +1 -1
- package/dist/core/table.cjs +30 -0
- package/dist/core/table.cjs.map +1 -1
- package/dist/core/table.d.ts +40 -1
- package/dist/core/table.mjs +31 -1
- package/dist/core/table.mjs.map +1 -1
- package/dist/errors.cjs +3 -0
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +3 -0
- package/dist/errors.mjs +3 -0
- package/dist/errors.mjs.map +1 -1
- package/dist/index.cjs +10 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +11 -7
- package/dist/index.mjs +5 -1
- package/dist/index.mjs.map +1 -1
- package/dist/projections/index.d.ts +7 -1
- package/dist/projections/projection-parser.d.ts +1 -1
- package/dist/updates/add-to-set.cjs +5 -0
- package/dist/updates/add-to-set.cjs.map +1 -1
- package/dist/updates/add-to-set.d.ts +6 -1
- package/dist/updates/add-to-set.mjs +5 -0
- package/dist/updates/add-to-set.mjs.map +1 -1
- package/dist/updates/add.cjs +5 -0
- package/dist/updates/add.cjs.map +1 -1
- package/dist/updates/add.d.ts +6 -1
- package/dist/updates/add.mjs +5 -0
- package/dist/updates/add.mjs.map +1 -1
- package/dist/updates/append.cjs +5 -0
- package/dist/updates/append.cjs.map +1 -1
- package/dist/updates/append.d.ts +6 -1
- package/dist/updates/append.mjs +5 -0
- package/dist/updates/append.mjs.map +1 -1
- package/dist/updates/index.d.ts +78 -1
- package/dist/updates/prepend.cjs +5 -0
- package/dist/updates/prepend.cjs.map +1 -1
- package/dist/updates/prepend.d.ts +6 -1
- package/dist/updates/prepend.mjs +5 -0
- package/dist/updates/prepend.mjs.map +1 -1
- package/dist/updates/ref.cjs +6 -0
- package/dist/updates/ref.cjs.map +1 -1
- package/dist/updates/ref.d.ts +7 -1
- package/dist/updates/ref.mjs +6 -0
- package/dist/updates/ref.mjs.map +1 -1
- package/dist/updates/remove-from-set.cjs +5 -0
- package/dist/updates/remove-from-set.cjs.map +1 -1
- package/dist/updates/remove-from-set.d.ts +6 -1
- package/dist/updates/remove-from-set.mjs +5 -0
- package/dist/updates/remove-from-set.mjs.map +1 -1
- package/dist/updates/remove.cjs +3 -0
- package/dist/updates/remove.cjs.map +1 -1
- package/dist/updates/remove.d.ts +4 -1
- package/dist/updates/remove.mjs +3 -0
- package/dist/updates/remove.mjs.map +1 -1
- package/dist/updates/subtract.cjs +5 -0
- package/dist/updates/subtract.cjs.map +1 -1
- package/dist/updates/subtract.d.ts +6 -1
- package/dist/updates/subtract.mjs +5 -0
- package/dist/updates/subtract.mjs.map +1 -1
- package/dist/updates/update-parser.cjs +10 -0
- package/dist/updates/update-parser.cjs.map +1 -1
- package/dist/updates/update-parser.d.ts +17 -1
- package/dist/updates/update-parser.mjs +10 -0
- package/dist/updates/update-parser.mjs.map +1 -1
- package/package.json +2 -1
- package/dist/commands/base-command.cjs +0 -3
- package/dist/commands/base-command.cjs.map +0 -1
- package/dist/commands/base-command.d.ts +0 -27
- package/dist/commands/base-command.mjs +0 -2
- package/dist/commands/base-command.mjs.map +0 -1
- package/dist/conditions/condition-types.cjs +0 -3
- package/dist/conditions/condition-types.cjs.map +0 -1
- package/dist/conditions/condition-types.d.ts +0 -95
- package/dist/conditions/condition-types.mjs +0 -2
- package/dist/conditions/condition-types.mjs.map +0 -1
- package/dist/core/core-types.cjs +0 -3
- package/dist/core/core-types.cjs.map +0 -1
- package/dist/core/core-types.d.ts +0 -44
- package/dist/core/core-types.mjs +0 -2
- package/dist/core/core-types.mjs.map +0 -1
- package/dist/projections/projection-types.cjs +0 -3
- package/dist/projections/projection-types.cjs.map +0 -1
- package/dist/projections/projection-types.d.ts +0 -3
- package/dist/projections/projection-types.mjs +0 -2
- package/dist/projections/projection-types.mjs.map +0 -1
- package/dist/updates/update-types.cjs +0 -3
- package/dist/updates/update-types.cjs.map +0 -1
- package/dist/updates/update-types.d.ts +0 -45
- package/dist/updates/update-types.mjs +0 -2
- 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 };
|