dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
64 lines (63 loc) • 3.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getCommandInput = exports.execute = void 0;
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
const index_js_1 = require("../../../errors/index.js");
const capacity_js_1 = require("../../../options/capacity.js");
const clientRequestToken_js_1 = require("../../../options/clientRequestToken.js");
const metrics_js_1 = require("../../../options/metrics.js");
const rejectExtraOptions_js_1 = require("../../../options/rejectExtraOptions.js");
const transaction_js_1 = require("./transaction.js");
const execute = async (..._transactions) => {
const [headTransactionOrOptions = {}, ...tailTransactions] = _transactions;
const transactions = tailTransactions;
let options = {};
if ((0, transaction_js_1.isWriteTransactionImplementation)(headTransactionOrOptions)) {
transactions.unshift(headTransactionOrOptions);
}
else {
options = headTransactionOrOptions;
}
const firstTransaction = transactions[0];
if (firstTransaction === undefined) {
throw new index_js_1.DynamoDBToolboxError('actions.incompleteAction', {
message: 'Cannot execute WriteTransactions: No transaction supplied'
});
}
const { documentClient, capacity, metrics, clientRequestToken, ...documentClientOptions } = options;
const docClient = documentClient !== null && documentClient !== void 0 ? documentClient : firstTransaction.entity.table.getDocumentClient();
const { TransactItems = [], ...restCommandInput } = (0, exports.getCommandInput)(transactions, {
capacity,
metrics,
clientRequestToken
});
const toolboxItems = [];
for (const transactItem of TransactItems) {
const { ToolboxItem } = transactItem;
toolboxItems.push(ToolboxItem);
delete transactItem.ToolboxItem;
}
const response = await docClient.send(new lib_dynamodb_1.TransactWriteCommand({ TransactItems, ...restCommandInput }), documentClientOptions);
return { ToolboxItems: toolboxItems, ...response };
};
exports.execute = execute;
const parseOptions = (options) => {
const commandOptions = {};
const { clientRequestToken, capacity, metrics, ...extraOptions } = options;
(0, rejectExtraOptions_js_1.rejectExtraOptions)(extraOptions);
if (clientRequestToken !== undefined) {
commandOptions.ClientRequestToken = (0, clientRequestToken_js_1.parseClientRequestToken)(clientRequestToken);
}
if (capacity !== undefined) {
commandOptions.ReturnConsumedCapacity = (0, capacity_js_1.parseCapacityOption)(capacity);
}
if (metrics !== undefined) {
commandOptions.ReturnItemCollectionMetrics = (0, metrics_js_1.parseMetricsOption)(metrics);
}
return commandOptions;
};
const getCommandInput = (transactions, options = {}) => ({
...parseOptions(options),
TransactItems: transactions.map(command => command.params())
});
exports.getCommandInput = getCommandInput;