@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
JavaScript
;
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