UNPKG

@setho/dynamodb-repository

Version:

DynamoDB repository for hash-key and hash-key/range indexed tables. Designed for Lambda use. Handles nice-to-haves like created and updated timestamps and default id creation.

54 lines 2.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UpdateExpressionsBuilder = void 0; class UpdateExpressionsBuilder { keyName; constructor(keyName) { this.keyName = keyName; } buildExpressionNames(item) { const keylessItem = this.removeKey(item); const itemKeys = Object.keys(keylessItem); return itemKeys.reduce((accumulator, k, index) => ({ ...accumulator, [`#prop_${index}`]: k }), {}); } buildExpressionValues(item) { const keylessItem = this.removeKey(item); const itemKeys = Object.keys(keylessItem); return itemKeys.reduce((accumulator, k, index) => ({ ...accumulator, [`:value_${index}`]: item[k] }), {}); } buildUpdateExpression(item) { const keylessItem = this.removeKey(item); const itemKeys = Object.keys(keylessItem); return `SET ${itemKeys.map((k, index) => `#prop_${index} = :value_${index}`).join(', ')}`; } removeKey(item) { const itemCopy = { ...item }; delete itemCopy[this.keyName]; return itemCopy; } } exports.UpdateExpressionsBuilder = UpdateExpressionsBuilder; // export const updateExpressionBuilder = (item: any): ExpressionBuilderResult => ({ // updateExpression: internalUpdateBuilder(item), // expressionAttributeNames: internalNameBuilder(item), // expressionAttributeValues: internalValueBuilder(item), // }); // const internalUpdateBuilder = (item: any): string => { // const itemKeys = Object.keys(item); // return `SET ${itemKeys.map((k, index) => `#prop_${index} = :value_${index}`).join(', ')}`; // }; // const internalNameBuilder = (item: any): any => { // const itemKeys = Object.keys(item); // return itemKeys.reduce( // (accumulator, k, index) => ({ ...accumulator, [`#prop_${index}`]: k }), // {}, // ); // }; // const internalValueBuilder = (item: any): any => { // const itemKeys = Object.keys(item); // return itemKeys.reduce( // (accumulator, k, index) => ({ ...accumulator, [`:value_${index}`]: item[k] }), // {}, // ); // }; //# sourceMappingURL=updateExpressionBuilder.js.map