UNPKG

duenamodb

Version:

Simple, strongly-typed helpers around the AWS SDK DynamoDB client.

92 lines 3.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateItem = exports.createUpdateOptions = exports.createRemoveExpression = exports.createUpdateExpression = exports.createUpdateItem = void 0; const client_dynamodb_1 = require("@aws-sdk/client-dynamodb"); const util_dynamodb_1 = require("@aws-sdk/util-dynamodb"); const client_1 = require("./client"); const expression_1 = require("./expression"); const object_1 = require("./object"); const createUpdateItem = (options) => { const { tablename, pkName, skName } = options; return async (item, options = {}) => { const { dynamodbOptions = {}, removeKeys = [] } = options; const updateOptions = createUpdateOptions(pkName, skName, item, options); if (!updateOptions) { return item; } const updatedItemSuccess = await (0, exports.updateItem)(tablename, { ...dynamodbOptions, ...updateOptions, }); if (!updatedItemSuccess) { return undefined; } for (const key of removeKeys) { delete item[key]; } return item; }; }; exports.createUpdateItem = createUpdateItem; const createUpdateExpression = (keys) => { if (keys.length === 0) { return; } const exp = keys.map((key) => `${(0, expression_1.expressionAttributeNameKey)(key)} = ${(0, expression_1.expressionAttributeValueKey)(key)}`); return `SET ${exp.join(" , ")}`; }; exports.createUpdateExpression = createUpdateExpression; const createRemoveExpression = (keys) => { if (keys.length === 0) { return; } const expression = keys.map(expression_1.expressionAttributeNameKey); return `REMOVE ${expression.join(" , ")}`; }; exports.createRemoveExpression = createRemoveExpression; function createUpdateOptions(pkName, skName, updatedObject, options) { if (!options.removeKeys && !options.updateKeys) { return; } const updateKeys = options.updateKeys ?? []; const removeKeys = options.removeKeys ?? []; const ExpressionAttributeNames = (0, expression_1.expressionAttributeNames)([ ...updateKeys, ...removeKeys, ]); const ExpressionAttributeValues = updateKeys.length > 0 ? { ExpressionAttributeValues: (0, util_dynamodb_1.marshall)((0, expression_1.expressionAttributeValues)(updateKeys.reduce((acc, key) => { acc[key] = updatedObject[key]; return acc; }, {}))), } : {}; const UpdateUpdateExpression = (0, exports.createUpdateExpression)(updateKeys) ?? ""; const RemoveUpdateExpression = (0, exports.createRemoveExpression)(removeKeys) ?? ""; const key = updatedObject[pkName]; const sortKey = skName ? updatedObject[skName] : undefined; return { Key: { [pkName]: (0, util_dynamodb_1.convertToAttr)(key), ...(0, object_1.maybeMerge)(skName, (0, object_1.maybeConvertToAttr)(sortKey)), }, ExpressionAttributeNames, UpdateExpression: `${UpdateUpdateExpression} ${RemoveUpdateExpression}`, ...ExpressionAttributeValues, }; } exports.createUpdateOptions = createUpdateOptions; const updateItem = async (tableName, input) => { const command = new client_dynamodb_1.UpdateItemCommand({ ...input, TableName: tableName, }); const res = await client_1.DDBClient.instance.send(command); if (res.$metadata.httpStatusCode !== 200) { throw res; } return true; }; exports.updateItem = updateItem; //# sourceMappingURL=update.js.map