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,117 @@
|
|
|
1
|
+
import { __classPrivateFieldSet, __awaiter, __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.mjs';
|
|
2
|
+
import { DocumentBuilderError } from '../errors.mjs';
|
|
3
|
+
import { BatchWriteCommand } from '@aws-sdk/lib-dynamodb';
|
|
4
|
+
import { BATCH_WRITE_VALIDATION_CONCURRENCY } from '../internal-constants.mjs';
|
|
5
|
+
import pMap from 'p-map';
|
|
6
|
+
|
|
7
|
+
var _TableBatchWrite_config;
|
|
8
|
+
/**
|
|
9
|
+
* Table-level command to perform a batch write across multiple entity types.
|
|
10
|
+
*
|
|
11
|
+
* Unlike `BatchWrite` which operates on a single entity type, this command accepts
|
|
12
|
+
* write operations from multiple entities via `entity.prepare(new BatchWrite({ ... }))`
|
|
13
|
+
* and executes them in a single DynamoDB BatchWrite request.
|
|
14
|
+
*
|
|
15
|
+
* Unprocessed puts and deletes are returned per entity in a tuple matching the input order.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const { unprocessedPuts, unprocessedDeletes } = await table.send(new TableBatchWrite({
|
|
20
|
+
* writes: [
|
|
21
|
+
* userEntity.prepare(new BatchWrite({
|
|
22
|
+
* items: [{ userId: 'u1', name: 'Alice' }],
|
|
23
|
+
* deletes: [{ userId: 'u2', name: 'Bob' }],
|
|
24
|
+
* })),
|
|
25
|
+
* orderEntity.prepare(new BatchWrite({
|
|
26
|
+
* items: [{ orderId: 'o1', status: 'pending', total: 99 }],
|
|
27
|
+
* })),
|
|
28
|
+
* ],
|
|
29
|
+
* }))
|
|
30
|
+
*
|
|
31
|
+
* const [userUnprocessedPuts, orderUnprocessedPuts] = unprocessedPuts
|
|
32
|
+
* const [userUnprocessedDeletes, orderUnprocessedDeletes] = unprocessedDeletes
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
// biome-ignore lint/suspicious/noExplicitAny: writes span multiple heterogeneous entity schemas
|
|
36
|
+
class TableBatchWrite {
|
|
37
|
+
constructor(config) {
|
|
38
|
+
_TableBatchWrite_config.set(this, void 0);
|
|
39
|
+
__classPrivateFieldSet(this, _TableBatchWrite_config, config, "f");
|
|
40
|
+
}
|
|
41
|
+
execute(table) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
44
|
+
for (const group of __classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes) {
|
|
45
|
+
if (group.entity.table !== table) {
|
|
46
|
+
throw new DocumentBuilderError(`Entity table "${group.entity.table.tableName}" does not match the executing table "${table.tableName}"`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Build all requests across all entity groups, preserving group index for unprocessed mapping
|
|
50
|
+
// biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
|
|
51
|
+
const allRequests = (yield pMap(__classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes, (group) => {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
return group.buildRequests((_a = __classPrivateFieldGet(this, _TableBatchWrite_config, "f").skipValidation) !== null && _a !== void 0 ? _a : false, (_b = __classPrivateFieldGet(this, _TableBatchWrite_config, "f").abortController) === null || _b === void 0 ? void 0 : _b.signal);
|
|
54
|
+
}, {
|
|
55
|
+
concurrency: BATCH_WRITE_VALIDATION_CONCURRENCY,
|
|
56
|
+
signal: (_a = __classPrivateFieldGet(this, _TableBatchWrite_config, "f").abortController) === null || _a === void 0 ? void 0 : _a.signal,
|
|
57
|
+
})).flat();
|
|
58
|
+
const batchWrite = new BatchWriteCommand({
|
|
59
|
+
RequestItems: {
|
|
60
|
+
[table.tableName]: allRequests,
|
|
61
|
+
},
|
|
62
|
+
ReturnConsumedCapacity: __classPrivateFieldGet(this, _TableBatchWrite_config, "f").returnConsumedCapacity,
|
|
63
|
+
ReturnItemCollectionMetrics: __classPrivateFieldGet(this, _TableBatchWrite_config, "f").returnItemCollectionMetrics,
|
|
64
|
+
});
|
|
65
|
+
const result = yield table.documentClient.send(batchWrite, {
|
|
66
|
+
abortSignal: (_b = __classPrivateFieldGet(this, _TableBatchWrite_config, "f").abortController) === null || _b === void 0 ? void 0 : _b.signal,
|
|
67
|
+
requestTimeout: __classPrivateFieldGet(this, _TableBatchWrite_config, "f").timeoutMs,
|
|
68
|
+
});
|
|
69
|
+
const unprocessedItems = (_d = (_c = result.UnprocessedItems) === null || _c === void 0 ? void 0 : _c[table.tableName]) !== null && _d !== void 0 ? _d : [];
|
|
70
|
+
// Map unprocessed items back to their respective entity groups
|
|
71
|
+
const unprocessedPuts = __classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes.map(() => undefined);
|
|
72
|
+
const unprocessedDeletes = __classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes.map(() => undefined);
|
|
73
|
+
for (const unprocessedItem of unprocessedItems) {
|
|
74
|
+
if ((_e = unprocessedItem.PutRequest) === null || _e === void 0 ? void 0 : _e.Item) {
|
|
75
|
+
const item = unprocessedItem.PutRequest.Item;
|
|
76
|
+
for (let i = 0; i < __classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes.length; i++) {
|
|
77
|
+
// biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
|
|
78
|
+
const group = __classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes[i];
|
|
79
|
+
const matched = group.matchUnprocessedPut(item);
|
|
80
|
+
if (matched !== undefined) {
|
|
81
|
+
if (!unprocessedPuts[i])
|
|
82
|
+
unprocessedPuts[i] = [];
|
|
83
|
+
unprocessedPuts[i].push(matched);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if ((_f = unprocessedItem.DeleteRequest) === null || _f === void 0 ? void 0 : _f.Key) {
|
|
89
|
+
// biome-ignore lint/suspicious/noExplicitAny: DynamoDB SDK returns untyped key objects
|
|
90
|
+
const key = unprocessedItem.DeleteRequest.Key;
|
|
91
|
+
for (let i = 0; i < __classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes.length; i++) {
|
|
92
|
+
// biome-ignore lint/suspicious/noExplicitAny: heterogeneous group schemas require any
|
|
93
|
+
const group = __classPrivateFieldGet(this, _TableBatchWrite_config, "f").writes[i];
|
|
94
|
+
const matched = group.matchUnprocessedDelete(key);
|
|
95
|
+
if (matched !== undefined) {
|
|
96
|
+
if (!unprocessedDeletes[i])
|
|
97
|
+
unprocessedDeletes[i] = [];
|
|
98
|
+
unprocessedDeletes[i].push(matched);
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
responseMetadata: result.$metadata,
|
|
106
|
+
consumedCapacity: (_g = result.ConsumedCapacity) === null || _g === void 0 ? void 0 : _g[0],
|
|
107
|
+
itemCollectionMetrics: result.ItemCollectionMetrics,
|
|
108
|
+
unprocessedPuts: unprocessedPuts,
|
|
109
|
+
unprocessedDeletes: unprocessedDeletes,
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
_TableBatchWrite_config = new WeakMap();
|
|
115
|
+
|
|
116
|
+
export { TableBatchWrite };
|
|
117
|
+
//# sourceMappingURL=table-batch-write.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-batch-write.mjs","sources":["../../src/commands/table-batch-write.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
|
|
7
|
+
var _TableTransactGet_config;
|
|
8
|
+
/**
|
|
9
|
+
* Table-level command to perform a transactional read across multiple entity types.
|
|
10
|
+
*
|
|
11
|
+
* Unlike `TransactGet` which operates on a single entity type, this command accepts
|
|
12
|
+
* get operations from multiple entities via `entity.prepare(new TransactGet({ keys: [...] }))`
|
|
13
|
+
* and returns results grouped by entity in a tuple structure.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const { items } = await table.send(new TableTransactGet({
|
|
18
|
+
* gets: [
|
|
19
|
+
* userEntity.prepare(new TransactGet({ keys: [{ userId: 'u1' }] })),
|
|
20
|
+
* orderEntity.prepare(new TransactGet({ keys: [{ orderId: 'o1' }, { orderId: 'o2' }] })),
|
|
21
|
+
* ],
|
|
22
|
+
* }))
|
|
23
|
+
*
|
|
24
|
+
* const [users, orders] = items
|
|
25
|
+
* // users: (User | undefined)[]
|
|
26
|
+
* // orders: (Order | undefined)[]
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
class TableTransactGet {
|
|
30
|
+
constructor(config) {
|
|
31
|
+
_TableTransactGet_config.set(this, void 0);
|
|
32
|
+
tslib_es6.__classPrivateFieldSet(this, _TableTransactGet_config, config, "f");
|
|
33
|
+
}
|
|
34
|
+
execute(table) {
|
|
35
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () {
|
|
36
|
+
var _a, _b, _c, _d;
|
|
37
|
+
for (const group of tslib_es6.__classPrivateFieldGet(this, _TableTransactGet_config, "f").gets) {
|
|
38
|
+
if (group.entity.table !== table) {
|
|
39
|
+
throw new errors.DocumentBuilderError(`Entity table "${group.entity.table.tableName}" does not match the executing table "${table.tableName}"`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const transactItems = tslib_es6.__classPrivateFieldGet(this, _TableTransactGet_config, "f").gets.flatMap(group => group.keys.map(key => ({ Get: key })));
|
|
43
|
+
const transactGet = new libDynamodb.TransactGetCommand({
|
|
44
|
+
TransactItems: transactItems,
|
|
45
|
+
ReturnConsumedCapacity: tslib_es6.__classPrivateFieldGet(this, _TableTransactGet_config, "f").returnConsumedCapacity,
|
|
46
|
+
});
|
|
47
|
+
const result = yield table.documentClient.send(transactGet, {
|
|
48
|
+
abortSignal: (_a = tslib_es6.__classPrivateFieldGet(this, _TableTransactGet_config, "f").abortController) === null || _a === void 0 ? void 0 : _a.signal,
|
|
49
|
+
requestTimeout: tslib_es6.__classPrivateFieldGet(this, _TableTransactGet_config, "f").timeoutMs,
|
|
50
|
+
});
|
|
51
|
+
const rawResponses = (_b = result.Responses) !== null && _b !== void 0 ? _b : [];
|
|
52
|
+
// Split raw responses back into per-entity groups and parse each group
|
|
53
|
+
let offset = 0;
|
|
54
|
+
const groupedItems = [];
|
|
55
|
+
for (const group of tslib_es6.__classPrivateFieldGet(this, _TableTransactGet_config, "f").gets) {
|
|
56
|
+
const count = group.keys.length;
|
|
57
|
+
const slice = rawResponses.slice(offset, offset + count).map(r => r.Item);
|
|
58
|
+
const parsed = yield group.parseResults(slice, (_c = tslib_es6.__classPrivateFieldGet(this, _TableTransactGet_config, "f").skipValidation) !== null && _c !== void 0 ? _c : false);
|
|
59
|
+
groupedItems.push(parsed);
|
|
60
|
+
offset += count;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
items: groupedItems,
|
|
64
|
+
responseMetadata: result.$metadata,
|
|
65
|
+
consumedCapacity: (_d = result.ConsumedCapacity) === null || _d === void 0 ? void 0 : _d[0],
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
_TableTransactGet_config = new WeakMap();
|
|
71
|
+
|
|
72
|
+
exports.TableTransactGet = TableTransactGet;
|
|
73
|
+
//# sourceMappingURL=table-transact-get.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-transact-get.cjs","sources":["../../src/commands/table-transact-get.ts"],"sourcesContent":[null],"names":["__classPrivateFieldSet","__classPrivateFieldGet","DocumentBuilderError","TransactGetCommand"],"mappings":";;;;;;;AAwCA;;;;;;;;;;;;;;;;;;;;AAoBG;MACU,gBAAgB,CAAA;AAK3B,IAAA,WAAA,CAAY,MAAoC,EAAA;QAFhD,wBAAA,CAAA,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAGE,QAAAA,gCAAA,CAAA,IAAI,EAAA,wBAAA,EAAW,MAAM,EAAA,GAAA,CAAA;IACvB;AAEa,IAAA,OAAO,CAAC,KAAkB,EAAA;;;YACrC,KAAK,MAAM,KAAK,IAAIC,gCAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,IAAI,EAAE;gBACrC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAChC,oBAAA,MAAM,IAAIC,2BAAoB,CAC5B,CAAA,cAAA,EAAiB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAA,sCAAA,EAAyC,KAAK,CAAC,SAAS,CAAA,CAAA,CAAG,CACzG;gBACH;YACF;AAEA,YAAA,MAAM,aAAa,GAAGD,gCAAA,CAAA,IAAI,gCAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAE/F,YAAA,MAAM,WAAW,GAAG,IAAIE,8BAAkB,CAAC;AACzC,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,sBAAsB,EAAEF,gCAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,sBAAsB;AAC5D,aAAA,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC1D,WAAW,EAAE,MAAAA,gCAAA,CAAA,IAAI,gCAAQ,CAAC,eAAe,0CAAE,MAAM;AACjD,gBAAA,cAAc,EAAEA,gCAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,SAAS;AACvC,aAAA,CAAC;YAEF,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;;YAG3C,IAAI,MAAM,GAAG,CAAC;YACd,MAAM,YAAY,GAA0B,EAAE;YAE9C,KAAK,MAAM,KAAK,IAAIA,gCAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,IAAI,EAAE;AACrC,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM;gBAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACzE,gBAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA,EAAA,GAAAA,gCAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAC;AACpF,gBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,MAAM,IAAI,KAAK;YACjB;YAEA,OAAO;AACL,gBAAA,KAAK,EAAE,YAA2C;gBAClD,gBAAgB,EAAE,MAAM,CAAC,SAAS;AAClC,gBAAA,gBAAgB,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC;aAC/C;QACH,CAAC,CAAA;AAAA,IAAA;AACF;;;;;"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { PreparedGetTransaction, BaseConfig, BaseResult, TableCommand } from './index.js';
|
|
2
|
+
import { DynamoTable } from '../core/table.js';
|
|
3
|
+
import { EntitySchema } from '../core/index.js';
|
|
4
|
+
import { ZodObject } from 'zod/v4';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Extracts the result item type from a PreparedGetTransaction.
|
|
8
|
+
*/
|
|
9
|
+
type ExtractSchema<T> = T extends PreparedGetTransaction<infer S> ? EntitySchema<S> : never;
|
|
10
|
+
/**
|
|
11
|
+
* Maps an array of PreparedGetTransactions to a tuple of their result item arrays.
|
|
12
|
+
*/
|
|
13
|
+
type TableTransactGetItems<Gets extends PreparedGetTransaction<ZodObject>[]> = {
|
|
14
|
+
[K in keyof Gets]: Array<ExtractSchema<Gets[K]> | undefined>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Configuration for the TableTransactGet command.
|
|
18
|
+
*
|
|
19
|
+
* @template Gets - Tuple of PreparedGetTransaction types, one per entity group.
|
|
20
|
+
*/
|
|
21
|
+
type TableTransactGetConfig<Gets extends PreparedGetTransaction<ZodObject>[]> = BaseConfig & {
|
|
22
|
+
gets: [...Gets];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Result of the TableTransactGet command.
|
|
26
|
+
*
|
|
27
|
+
* @template Gets - Tuple of PreparedGetTransaction types, one per entity group.
|
|
28
|
+
*/
|
|
29
|
+
type TableTransactGetResult<Gets extends PreparedGetTransaction<ZodObject>[]> = BaseResult & {
|
|
30
|
+
items: TableTransactGetItems<Gets>;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Table-level command to perform a transactional read across multiple entity types.
|
|
34
|
+
*
|
|
35
|
+
* Unlike `TransactGet` which operates on a single entity type, this command accepts
|
|
36
|
+
* get operations from multiple entities via `entity.prepare(new TransactGet({ keys: [...] }))`
|
|
37
|
+
* and returns results grouped by entity in a tuple structure.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const { items } = await table.send(new TableTransactGet({
|
|
42
|
+
* gets: [
|
|
43
|
+
* userEntity.prepare(new TransactGet({ keys: [{ userId: 'u1' }] })),
|
|
44
|
+
* orderEntity.prepare(new TransactGet({ keys: [{ orderId: 'o1' }, { orderId: 'o2' }] })),
|
|
45
|
+
* ],
|
|
46
|
+
* }))
|
|
47
|
+
*
|
|
48
|
+
* const [users, orders] = items
|
|
49
|
+
* // users: (User | undefined)[]
|
|
50
|
+
* // orders: (Order | undefined)[]
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
declare class TableTransactGet<Gets extends PreparedGetTransaction<ZodObject>[]> implements TableCommand<TableTransactGetResult<Gets>> {
|
|
54
|
+
#private;
|
|
55
|
+
constructor(config: TableTransactGetConfig<Gets>);
|
|
56
|
+
execute(table: DynamoTable): Promise<TableTransactGetResult<Gets>>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { TableTransactGet };
|
|
60
|
+
export type { TableTransactGetConfig, TableTransactGetResult };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { __classPrivateFieldSet, __awaiter, __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.mjs';
|
|
2
|
+
import { DocumentBuilderError } from '../errors.mjs';
|
|
3
|
+
import { TransactGetCommand } from '@aws-sdk/lib-dynamodb';
|
|
4
|
+
|
|
5
|
+
var _TableTransactGet_config;
|
|
6
|
+
/**
|
|
7
|
+
* Table-level command to perform a transactional read across multiple entity types.
|
|
8
|
+
*
|
|
9
|
+
* Unlike `TransactGet` which operates on a single entity type, this command accepts
|
|
10
|
+
* get operations from multiple entities via `entity.prepare(new TransactGet({ keys: [...] }))`
|
|
11
|
+
* and returns results grouped by entity in a tuple structure.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const { items } = await table.send(new TableTransactGet({
|
|
16
|
+
* gets: [
|
|
17
|
+
* userEntity.prepare(new TransactGet({ keys: [{ userId: 'u1' }] })),
|
|
18
|
+
* orderEntity.prepare(new TransactGet({ keys: [{ orderId: 'o1' }, { orderId: 'o2' }] })),
|
|
19
|
+
* ],
|
|
20
|
+
* }))
|
|
21
|
+
*
|
|
22
|
+
* const [users, orders] = items
|
|
23
|
+
* // users: (User | undefined)[]
|
|
24
|
+
* // orders: (Order | undefined)[]
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
class TableTransactGet {
|
|
28
|
+
constructor(config) {
|
|
29
|
+
_TableTransactGet_config.set(this, void 0);
|
|
30
|
+
__classPrivateFieldSet(this, _TableTransactGet_config, config, "f");
|
|
31
|
+
}
|
|
32
|
+
execute(table) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
var _a, _b, _c, _d;
|
|
35
|
+
for (const group of __classPrivateFieldGet(this, _TableTransactGet_config, "f").gets) {
|
|
36
|
+
if (group.entity.table !== table) {
|
|
37
|
+
throw new DocumentBuilderError(`Entity table "${group.entity.table.tableName}" does not match the executing table "${table.tableName}"`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const transactItems = __classPrivateFieldGet(this, _TableTransactGet_config, "f").gets.flatMap(group => group.keys.map(key => ({ Get: key })));
|
|
41
|
+
const transactGet = new TransactGetCommand({
|
|
42
|
+
TransactItems: transactItems,
|
|
43
|
+
ReturnConsumedCapacity: __classPrivateFieldGet(this, _TableTransactGet_config, "f").returnConsumedCapacity,
|
|
44
|
+
});
|
|
45
|
+
const result = yield table.documentClient.send(transactGet, {
|
|
46
|
+
abortSignal: (_a = __classPrivateFieldGet(this, _TableTransactGet_config, "f").abortController) === null || _a === void 0 ? void 0 : _a.signal,
|
|
47
|
+
requestTimeout: __classPrivateFieldGet(this, _TableTransactGet_config, "f").timeoutMs,
|
|
48
|
+
});
|
|
49
|
+
const rawResponses = (_b = result.Responses) !== null && _b !== void 0 ? _b : [];
|
|
50
|
+
// Split raw responses back into per-entity groups and parse each group
|
|
51
|
+
let offset = 0;
|
|
52
|
+
const groupedItems = [];
|
|
53
|
+
for (const group of __classPrivateFieldGet(this, _TableTransactGet_config, "f").gets) {
|
|
54
|
+
const count = group.keys.length;
|
|
55
|
+
const slice = rawResponses.slice(offset, offset + count).map(r => r.Item);
|
|
56
|
+
const parsed = yield group.parseResults(slice, (_c = __classPrivateFieldGet(this, _TableTransactGet_config, "f").skipValidation) !== null && _c !== void 0 ? _c : false);
|
|
57
|
+
groupedItems.push(parsed);
|
|
58
|
+
offset += count;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
items: groupedItems,
|
|
62
|
+
responseMetadata: result.$metadata,
|
|
63
|
+
consumedCapacity: (_d = result.ConsumedCapacity) === null || _d === void 0 ? void 0 : _d[0],
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
_TableTransactGet_config = new WeakMap();
|
|
69
|
+
|
|
70
|
+
export { TableTransactGet };
|
|
71
|
+
//# sourceMappingURL=table-transact-get.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-transact-get.mjs","sources":["../../src/commands/table-transact-get.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAwCA;;;;;;;;;;;;;;;;;;;;AAoBG;MACU,gBAAgB,CAAA;AAK3B,IAAA,WAAA,CAAY,MAAoC,EAAA;QAFhD,wBAAA,CAAA,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAGE,QAAA,sBAAA,CAAA,IAAI,EAAA,wBAAA,EAAW,MAAM,EAAA,GAAA,CAAA;IACvB;AAEa,IAAA,OAAO,CAAC,KAAkB,EAAA;;;YACrC,KAAK,MAAM,KAAK,IAAI,sBAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,IAAI,EAAE;gBACrC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAChC,oBAAA,MAAM,IAAI,oBAAoB,CAC5B,CAAA,cAAA,EAAiB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAA,sCAAA,EAAyC,KAAK,CAAC,SAAS,CAAA,CAAA,CAAG,CACzG;gBACH;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,sBAAA,CAAA,IAAI,gCAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAE/F,YAAA,MAAM,WAAW,GAAG,IAAI,kBAAkB,CAAC;AACzC,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,sBAAsB,EAAE,sBAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,sBAAsB;AAC5D,aAAA,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC1D,WAAW,EAAE,MAAA,sBAAA,CAAA,IAAI,gCAAQ,CAAC,eAAe,0CAAE,MAAM;AACjD,gBAAA,cAAc,EAAE,sBAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,SAAS;AACvC,aAAA,CAAC;YAEF,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;;YAG3C,IAAI,MAAM,GAAG,CAAC;YACd,MAAM,YAAY,GAA0B,EAAE;YAE9C,KAAK,MAAM,KAAK,IAAI,sBAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,IAAI,EAAE;AACrC,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM;gBAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACzE,gBAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA,EAAA,GAAA,sBAAA,CAAA,IAAI,EAAA,wBAAA,EAAA,GAAA,CAAQ,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAC;AACpF,gBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,MAAM,IAAI,KAAK;YACjB;YAEA,OAAO;AACL,gBAAA,KAAK,EAAE,YAA2C;gBAClD,gBAAgB,EAAE,MAAM,CAAC,SAAS;AAClC,gBAAA,gBAAgB,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC;aAC/C;QACH,CAAC,CAAA;AAAA,IAAA;AACF;;;;;"}
|
|
@@ -0,0 +1,76 @@
|
|
|
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 _TableTransactWrite_config;
|
|
10
|
+
/**
|
|
11
|
+
* Table-level command to perform an atomic write transaction across multiple entity types.
|
|
12
|
+
*
|
|
13
|
+
* Unlike `TransactWrite` which operates on a single entity type, this command accepts
|
|
14
|
+
* operations from multiple entities via `entity.prepare([...])` and executes them as
|
|
15
|
+
* a single all-or-nothing DynamoDB transaction.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* await table.send(new TableTransactWrite({
|
|
20
|
+
* transactions: [
|
|
21
|
+
* userEntity.prepare([
|
|
22
|
+
* new Put({ item: { userId: 'u1', name: 'Alice' } }),
|
|
23
|
+
* new Delete({ key: { userId: 'u2', name: 'Bob' } }),
|
|
24
|
+
* ]),
|
|
25
|
+
* orderEntity.prepare([
|
|
26
|
+
* new Update({ key: { orderId: 'o1' }, update: { status: 'shipped' } }),
|
|
27
|
+
* ]),
|
|
28
|
+
* ],
|
|
29
|
+
* }))
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
class TableTransactWrite {
|
|
33
|
+
constructor(config) {
|
|
34
|
+
_TableTransactWrite_config.set(this, void 0);
|
|
35
|
+
tslib_es6.__classPrivateFieldSet(this, _TableTransactWrite_config, config, "f");
|
|
36
|
+
}
|
|
37
|
+
execute(table) {
|
|
38
|
+
return tslib_es6.__awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
var _a, _b;
|
|
40
|
+
for (const { entity } of tslib_es6.__classPrivateFieldGet(this, _TableTransactWrite_config, "f").transactions) {
|
|
41
|
+
if (entity.table !== table) {
|
|
42
|
+
throw new errors.DocumentBuilderError(`Entity table "${entity.table.tableName}" does not match the executing table "${table.tableName}"`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const transactItems = (yield pMap(tslib_es6.__classPrivateFieldGet(this, _TableTransactWrite_config, "f").transactions, ({ entity, writes }) => {
|
|
46
|
+
var _a;
|
|
47
|
+
return pMap(writes, write => write.prepareWriteTransaction(entity), {
|
|
48
|
+
concurrency: internalConstants.TRANSACTION_WRITE_VALIDATION_CONCURRENCY,
|
|
49
|
+
signal: (_a = tslib_es6.__classPrivateFieldGet(this, _TableTransactWrite_config, "f").abortController) === null || _a === void 0 ? void 0 : _a.signal,
|
|
50
|
+
});
|
|
51
|
+
}, {
|
|
52
|
+
concurrency: internalConstants.TRANSACTION_WRITE_VALIDATION_CONCURRENCY,
|
|
53
|
+
signal: (_a = tslib_es6.__classPrivateFieldGet(this, _TableTransactWrite_config, "f").abortController) === null || _a === void 0 ? void 0 : _a.signal,
|
|
54
|
+
})).flat();
|
|
55
|
+
const writeTransaction = new libDynamodb.TransactWriteCommand({
|
|
56
|
+
TransactItems: transactItems,
|
|
57
|
+
ReturnConsumedCapacity: tslib_es6.__classPrivateFieldGet(this, _TableTransactWrite_config, "f").returnConsumedCapacity,
|
|
58
|
+
ReturnItemCollectionMetrics: tslib_es6.__classPrivateFieldGet(this, _TableTransactWrite_config, "f").returnItemCollectionMetrics,
|
|
59
|
+
ClientRequestToken: tslib_es6.__classPrivateFieldGet(this, _TableTransactWrite_config, "f").idempotencyToken,
|
|
60
|
+
});
|
|
61
|
+
const result = yield table.documentClient.send(writeTransaction, {
|
|
62
|
+
abortSignal: (_b = tslib_es6.__classPrivateFieldGet(this, _TableTransactWrite_config, "f").abortController) === null || _b === void 0 ? void 0 : _b.signal,
|
|
63
|
+
requestTimeout: tslib_es6.__classPrivateFieldGet(this, _TableTransactWrite_config, "f").timeoutMs,
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
responseMetadata: result.$metadata,
|
|
67
|
+
consumedCapacity: result.ConsumedCapacity,
|
|
68
|
+
itemCollectionMetrics: result.ItemCollectionMetrics,
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
_TableTransactWrite_config = new WeakMap();
|
|
74
|
+
|
|
75
|
+
exports.TableTransactWrite = TableTransactWrite;
|
|
76
|
+
//# sourceMappingURL=table-transact-write.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-transact-write.cjs","sources":["../../src/commands/table-transact-write.ts"],"sourcesContent":[null],"names":["__classPrivateFieldSet","__classPrivateFieldGet","DocumentBuilderError","TRANSACTION_WRITE_VALIDATION_CONCURRENCY","TransactWriteCommand"],"mappings":";;;;;;;;;AAkCA;;;;;;;;;;;;;;;;;;;;;AAqBG;MACU,kBAAkB,CAAA;AAG7B,IAAA,WAAA,CAAY,MAAgC,EAAA;QAF5C,0BAAA,CAAA,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAGE,QAAAA,gCAAA,CAAA,IAAI,EAAA,0BAAA,EAAW,MAAM,EAAA,GAAA,CAAA;IACvB;AAEa,IAAA,OAAO,CAAC,KAAkB,EAAA;;;YACrC,KAAK,MAAM,EAAE,MAAM,EAAE,IAAIC,gCAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,YAAY,EAAE;AAClD,gBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1B,oBAAA,MAAM,IAAIC,2BAAoB,CAC5B,CAAA,cAAA,EAAiB,MAAM,CAAC,KAAK,CAAC,SAAS,yCAAyC,KAAK,CAAC,SAAS,CAAA,CAAA,CAAG,CACnG;gBACH;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,CACpB,MAAM,IAAI,CACRD,iCAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,YAAY,EACzB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAuC,KAAI;;AAC1D,gBAAA,OAAA,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE;AAC3D,oBAAA,WAAW,EAAEE,0DAAwC;oBACrD,MAAM,EAAE,MAAAF,gCAAA,CAAA,IAAI,kCAAQ,CAAC,eAAe,0CAAE,MAAM;AAC7C,iBAAA,CAAC;aAAA,EACJ;AACE,gBAAA,WAAW,EAAEE,0DAAwC;gBACrD,MAAM,EAAE,MAAAF,gCAAA,CAAA,IAAI,kCAAQ,CAAC,eAAe,0CAAE,MAAM;AAC7C,aAAA,CACF,EACD,IAAI,EAAE;AAER,YAAA,MAAM,gBAAgB,GAAG,IAAIG,gCAAoB,CAAC;AAChD,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,sBAAsB,EAAEH,gCAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,sBAAsB;AAC3D,gBAAA,2BAA2B,EAAEA,gCAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,2BAA2B;AACrE,gBAAA,kBAAkB,EAAEA,gCAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,gBAAgB;AAClD,aAAA,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC/D,WAAW,EAAE,MAAAA,gCAAA,CAAA,IAAI,kCAAQ,CAAC,eAAe,0CAAE,MAAM;AACjD,gBAAA,cAAc,EAAEA,gCAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,SAAS;AACvC,aAAA,CAAC;YAEF,OAAO;gBACL,gBAAgB,EAAE,MAAM,CAAC,SAAS;gBAClC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;aACpD;QACH,CAAC,CAAA;AAAA,IAAA;AACF;;;;;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { BaseConfig, PreparedWriteTransaction, TableCommand } from './index.js';
|
|
2
|
+
import { DynamoTable } from '../core/table.js';
|
|
3
|
+
import { ReturnItemCollectionMetrics, ConsumedCapacity, ItemCollectionMetrics } from '@aws-sdk/client-dynamodb';
|
|
4
|
+
import { ResponseMetadata } from '@aws-sdk/types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for the TableTransactWrite command.
|
|
8
|
+
*/
|
|
9
|
+
type TableTransactWriteConfig = BaseConfig & {
|
|
10
|
+
transactions: PreparedWriteTransaction<any>[];
|
|
11
|
+
idempotencyToken?: string;
|
|
12
|
+
returnItemCollectionMetrics?: ReturnItemCollectionMetrics;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Result of the TableTransactWrite command.
|
|
16
|
+
*/
|
|
17
|
+
type TableTransactWriteResult = {
|
|
18
|
+
responseMetadata?: ResponseMetadata;
|
|
19
|
+
consumedCapacity?: ConsumedCapacity[] | undefined;
|
|
20
|
+
itemCollectionMetrics?: ItemCollectionMetrics;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Table-level command to perform an atomic write transaction across multiple entity types.
|
|
24
|
+
*
|
|
25
|
+
* Unlike `TransactWrite` which operates on a single entity type, this command accepts
|
|
26
|
+
* operations from multiple entities via `entity.prepare([...])` and executes them as
|
|
27
|
+
* a single all-or-nothing DynamoDB transaction.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* await table.send(new TableTransactWrite({
|
|
32
|
+
* transactions: [
|
|
33
|
+
* userEntity.prepare([
|
|
34
|
+
* new Put({ item: { userId: 'u1', name: 'Alice' } }),
|
|
35
|
+
* new Delete({ key: { userId: 'u2', name: 'Bob' } }),
|
|
36
|
+
* ]),
|
|
37
|
+
* orderEntity.prepare([
|
|
38
|
+
* new Update({ key: { orderId: 'o1' }, update: { status: 'shipped' } }),
|
|
39
|
+
* ]),
|
|
40
|
+
* ],
|
|
41
|
+
* }))
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
declare class TableTransactWrite implements TableCommand<TableTransactWriteResult> {
|
|
45
|
+
#private;
|
|
46
|
+
constructor(config: TableTransactWriteConfig);
|
|
47
|
+
execute(table: DynamoTable): Promise<TableTransactWriteResult>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { TableTransactWrite };
|
|
51
|
+
export type { TableTransactWriteConfig, TableTransactWriteResult };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { __classPrivateFieldSet, __awaiter, __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.mjs';
|
|
2
|
+
import { DocumentBuilderError } from '../errors.mjs';
|
|
3
|
+
import { TransactWriteCommand } from '@aws-sdk/lib-dynamodb';
|
|
4
|
+
import { TRANSACTION_WRITE_VALIDATION_CONCURRENCY } from '../internal-constants.mjs';
|
|
5
|
+
import pMap from 'p-map';
|
|
6
|
+
|
|
7
|
+
var _TableTransactWrite_config;
|
|
8
|
+
/**
|
|
9
|
+
* Table-level command to perform an atomic write transaction across multiple entity types.
|
|
10
|
+
*
|
|
11
|
+
* Unlike `TransactWrite` which operates on a single entity type, this command accepts
|
|
12
|
+
* operations from multiple entities via `entity.prepare([...])` and executes them as
|
|
13
|
+
* a single all-or-nothing DynamoDB transaction.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* await table.send(new TableTransactWrite({
|
|
18
|
+
* transactions: [
|
|
19
|
+
* userEntity.prepare([
|
|
20
|
+
* new Put({ item: { userId: 'u1', name: 'Alice' } }),
|
|
21
|
+
* new Delete({ key: { userId: 'u2', name: 'Bob' } }),
|
|
22
|
+
* ]),
|
|
23
|
+
* orderEntity.prepare([
|
|
24
|
+
* new Update({ key: { orderId: 'o1' }, update: { status: 'shipped' } }),
|
|
25
|
+
* ]),
|
|
26
|
+
* ],
|
|
27
|
+
* }))
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
class TableTransactWrite {
|
|
31
|
+
constructor(config) {
|
|
32
|
+
_TableTransactWrite_config.set(this, void 0);
|
|
33
|
+
__classPrivateFieldSet(this, _TableTransactWrite_config, config, "f");
|
|
34
|
+
}
|
|
35
|
+
execute(table) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
for (const { entity } of __classPrivateFieldGet(this, _TableTransactWrite_config, "f").transactions) {
|
|
39
|
+
if (entity.table !== table) {
|
|
40
|
+
throw new DocumentBuilderError(`Entity table "${entity.table.tableName}" does not match the executing table "${table.tableName}"`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const transactItems = (yield pMap(__classPrivateFieldGet(this, _TableTransactWrite_config, "f").transactions, ({ entity, writes }) => {
|
|
44
|
+
var _a;
|
|
45
|
+
return pMap(writes, write => write.prepareWriteTransaction(entity), {
|
|
46
|
+
concurrency: TRANSACTION_WRITE_VALIDATION_CONCURRENCY,
|
|
47
|
+
signal: (_a = __classPrivateFieldGet(this, _TableTransactWrite_config, "f").abortController) === null || _a === void 0 ? void 0 : _a.signal,
|
|
48
|
+
});
|
|
49
|
+
}, {
|
|
50
|
+
concurrency: TRANSACTION_WRITE_VALIDATION_CONCURRENCY,
|
|
51
|
+
signal: (_a = __classPrivateFieldGet(this, _TableTransactWrite_config, "f").abortController) === null || _a === void 0 ? void 0 : _a.signal,
|
|
52
|
+
})).flat();
|
|
53
|
+
const writeTransaction = new TransactWriteCommand({
|
|
54
|
+
TransactItems: transactItems,
|
|
55
|
+
ReturnConsumedCapacity: __classPrivateFieldGet(this, _TableTransactWrite_config, "f").returnConsumedCapacity,
|
|
56
|
+
ReturnItemCollectionMetrics: __classPrivateFieldGet(this, _TableTransactWrite_config, "f").returnItemCollectionMetrics,
|
|
57
|
+
ClientRequestToken: __classPrivateFieldGet(this, _TableTransactWrite_config, "f").idempotencyToken,
|
|
58
|
+
});
|
|
59
|
+
const result = yield table.documentClient.send(writeTransaction, {
|
|
60
|
+
abortSignal: (_b = __classPrivateFieldGet(this, _TableTransactWrite_config, "f").abortController) === null || _b === void 0 ? void 0 : _b.signal,
|
|
61
|
+
requestTimeout: __classPrivateFieldGet(this, _TableTransactWrite_config, "f").timeoutMs,
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
responseMetadata: result.$metadata,
|
|
65
|
+
consumedCapacity: result.ConsumedCapacity,
|
|
66
|
+
itemCollectionMetrics: result.ItemCollectionMetrics,
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
_TableTransactWrite_config = new WeakMap();
|
|
72
|
+
|
|
73
|
+
export { TableTransactWrite };
|
|
74
|
+
//# sourceMappingURL=table-transact-write.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-transact-write.mjs","sources":["../../src/commands/table-transact-write.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAkCA;;;;;;;;;;;;;;;;;;;;;AAqBG;MACU,kBAAkB,CAAA;AAG7B,IAAA,WAAA,CAAY,MAAgC,EAAA;QAF5C,0BAAA,CAAA,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAGE,QAAA,sBAAA,CAAA,IAAI,EAAA,0BAAA,EAAW,MAAM,EAAA,GAAA,CAAA;IACvB;AAEa,IAAA,OAAO,CAAC,KAAkB,EAAA;;;YACrC,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,sBAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,YAAY,EAAE;AAClD,gBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1B,oBAAA,MAAM,IAAI,oBAAoB,CAC5B,CAAA,cAAA,EAAiB,MAAM,CAAC,KAAK,CAAC,SAAS,yCAAyC,KAAK,CAAC,SAAS,CAAA,CAAA,CAAG,CACnG;gBACH;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,CACpB,MAAM,IAAI,CACR,uBAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,YAAY,EACzB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAuC,KAAI;;AAC1D,gBAAA,OAAA,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE;AAC3D,oBAAA,WAAW,EAAE,wCAAwC;oBACrD,MAAM,EAAE,MAAA,sBAAA,CAAA,IAAI,kCAAQ,CAAC,eAAe,0CAAE,MAAM;AAC7C,iBAAA,CAAC;aAAA,EACJ;AACE,gBAAA,WAAW,EAAE,wCAAwC;gBACrD,MAAM,EAAE,MAAA,sBAAA,CAAA,IAAI,kCAAQ,CAAC,eAAe,0CAAE,MAAM;AAC7C,aAAA,CACF,EACD,IAAI,EAAE;AAER,YAAA,MAAM,gBAAgB,GAAG,IAAI,oBAAoB,CAAC;AAChD,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,sBAAsB,EAAE,sBAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,sBAAsB;AAC3D,gBAAA,2BAA2B,EAAE,sBAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,2BAA2B;AACrE,gBAAA,kBAAkB,EAAE,sBAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,gBAAgB;AAClD,aAAA,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC/D,WAAW,EAAE,MAAA,sBAAA,CAAA,IAAI,kCAAQ,CAAC,eAAe,0CAAE,MAAM;AACjD,gBAAA,cAAc,EAAE,sBAAA,CAAA,IAAI,EAAA,0BAAA,EAAA,GAAA,CAAQ,CAAC,SAAS;AACvC,aAAA,CAAC;YAEF,OAAO;gBACL,gBAAgB,EAAE,MAAM,CAAC,SAAS;gBAClC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;aACpD;QACH,CAAC,CAAA;AAAA,IAAA;AACF;;;;;"}
|
|
@@ -6,11 +6,49 @@ var internalConstants = require('../internal-constants.cjs');
|
|
|
6
6
|
var pMap = require('p-map');
|
|
7
7
|
|
|
8
8
|
var _TransactGet_config;
|
|
9
|
+
/**
|
|
10
|
+
* Command to perform a transactional read of multiple items (all-or-nothing, strongly consistent).
|
|
11
|
+
*
|
|
12
|
+
* @template Schema - The Zod schema defining the structure of the entity.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { DynamoTable, DynamoEntity, key, TransactGet } from 'dynamo-document-builder';
|
|
17
|
+
*
|
|
18
|
+
* const table = new DynamoTable({
|
|
19
|
+
* tableName: 'ExampleTable',
|
|
20
|
+
* documentClient,
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* const userEntity = new DynamoEntity({
|
|
24
|
+
* table,
|
|
25
|
+
* schema: z.object({
|
|
26
|
+
* userId: z.string(),
|
|
27
|
+
* name: z.string(),
|
|
28
|
+
* }),
|
|
29
|
+
* partitionKey: user => key('USER', user.userId),
|
|
30
|
+
* sortKey: () => 'METADATA',
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* const transactGetCommand = new TransactGet({
|
|
34
|
+
* keys: [
|
|
35
|
+
* { userId: 'user1' },
|
|
36
|
+
* { userId: 'user2' },
|
|
37
|
+
* ],
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* const { items } = await userEntity.send(transactGetCommand);
|
|
41
|
+
* // items array has same order as keys, undefined if not found
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
9
44
|
class TransactGet {
|
|
10
45
|
constructor(config) {
|
|
11
46
|
_TransactGet_config.set(this, void 0);
|
|
12
47
|
tslib_es6.__classPrivateFieldSet(this, _TransactGet_config, config, "f");
|
|
13
48
|
}
|
|
49
|
+
get keys() {
|
|
50
|
+
return tslib_es6.__classPrivateFieldGet(this, _TransactGet_config, "f").keys;
|
|
51
|
+
}
|
|
14
52
|
execute(entity) {
|
|
15
53
|
return tslib_es6.__awaiter(this, void 0, void 0, function* () {
|
|
16
54
|
var _a, _b, _c, _d;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transact-get.cjs","sources":["../../src/commands/transact-get.ts"],"sourcesContent":[null],"names":["__classPrivateFieldSet","__classPrivateFieldGet","TransactGetCommand","__awaiter","TRANSACTION_GET_VALIDATION_CONCURRENCY"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"transact-get.cjs","sources":["../../src/commands/transact-get.ts"],"sourcesContent":[null],"names":["__classPrivateFieldSet","__classPrivateFieldGet","TransactGetCommand","__awaiter","TRANSACTION_GET_VALIDATION_CONCURRENCY"],"mappings":";;;;;;;;AA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCG;MACU,WAAW,CAAA;AAKtB,IAAA,WAAA,CAAY,MAAiC,EAAA;QAF7C,mBAAA,CAAA,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAGE,QAAAA,gCAAA,CAAA,IAAI,EAAA,mBAAA,EAAW,MAAM,EAAA,GAAA,CAAA;IACvB;AAEA,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAOC,gCAAA,CAAA,IAAI,EAAA,mBAAA,EAAA,GAAA,CAAQ,CAAC,IAAI;IAC1B;AAEa,IAAA,OAAO,CAAC,MAA4B,EAAA;;;AAC/C,YAAA,MAAM,aAAa,GAAGA,gCAAA,CAAA,IAAI,2BAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AAClD,gBAAA,GAAG,EAAE;AACH,oBAAA,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;AACjC,oBAAA,GAAG,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC;AACjC,iBAAA;AACF,aAAA,CAAC,CAAC;AAEH,YAAA,MAAM,WAAW,GAAG,IAAIC,8BAAkB,CAAC;AACzC,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,sBAAsB,EAAED,gCAAA,CAAA,IAAI,EAAA,mBAAA,EAAA,GAAA,CAAQ,CAAC,sBAAsB;AAC5D,aAAA,CAAC;AAEF,YAAA,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC5E,WAAW,EAAE,MAAAA,gCAAA,CAAA,IAAI,2BAAQ,CAAC,eAAe,0CAAE,MAAM;AACjD,gBAAA,cAAc,EAAEA,gCAAA,CAAA,IAAI,EAAA,mBAAA,EAAA,GAAA,CAAQ,CAAC,SAAS;AACvC,aAAA,CAAC;YAEF,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,iBAAiB,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;YAClD,IAAI,KAAK,GAA4C,EAAE;AACvD,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,gBAAA,IAAIA,iCAAA,IAAI,EAAA,mBAAA,EAAA,GAAA,CAAQ,CAAC,cAAc,EAAE;AAC/B,oBAAA,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAwC,CAAC;gBACrF;qBAAO;oBACL,KAAK,GAAG,MAAM,IAAI,CAChB,QAAQ,EACR,CAAM,QAAQ,KAAGE,mBAAA,CAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA;AACf,wBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;4BACjB,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAChD;AACA,wBAAA,OAAO,SAAS;AAClB,oBAAA,CAAC,CAAA,EACD;AACE,wBAAA,WAAW,EAAEC,wDAAsC;wBACnD,MAAM,EAAE,MAAAH,gCAAA,CAAA,IAAI,2BAAQ,CAAC,eAAe,0CAAE,MAAM;AAC7C,qBAAA,CACF;gBACH;YACF;YAEA,OAAO;gBACL,KAAK;gBACL,gBAAgB,EAAE,iBAAiB,CAAC,SAAS;AAC7C,gBAAA,gBAAgB,EAAE,CAAA,EAAA,GAAA,iBAAiB,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC;aAC1D;QACH,CAAC,CAAA;AAAA,IAAA;AACF;;;;;"}
|