UNPKG

dynamodb-toolbox

Version:

Lightweight and type-safe query builder for DynamoDB and TypeScript.

64 lines (63 loc) 3.01 kB
"use strict"; 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;