UNPKG

duenamodb

Version:

Simple DynamoDB client written in TypeScript.

81 lines 3.32 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 createUpdateItem = (tablename, partitionKeyName) => { return async (item, options) => { const updateOptions = (0, exports.createUpdateOptions)(partitionKeyName, item, options); if (!updateOptions) { return item; } const updatedItemSuccess = await (0, exports.updateItem)(tablename, { ...options.dynamodbOptions, ...updateOptions, }); if (!updatedItemSuccess) { return undefined; } const removeKeys = options.removeKeys ?? []; removeKeys.forEach(key => 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; const createUpdateOptions = (partitionKeyName, 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] }), {}))), } : {}; const UpdateUpdateExpression = (0, exports.createUpdateExpression)(updateKeys) ?? ''; const RemoveUpdateExpression = (0, exports.createRemoveExpression)(removeKeys) ?? ''; const key = updatedObject[partitionKeyName]; return { Key: { [partitionKeyName]: (0, util_dynamodb_1.convertToAttr)(key) }, 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