UNPKG

dynamodb-toolbox

Version:

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

36 lines (35 loc) 1.88 kB
import { EntityParser } from '../../../../entity/actions/parse/index.js'; import { expressUpdate } from '../../../../entity/actions/update/expressUpdate/index.js'; import { isEmpty } from '../../../../utils/isEmpty.js'; import { omit } from '../../../../utils/omit.js'; import { parseUpdateAttributesExtension } from './extension/index.js'; import { parseUpdateAttributesOptions } from './parseUpdateAttributesOptions.js'; export const updateAttributesParams = (entity, input, options = {}) => { var _a; const { parsedItem, item, key } = entity.build(EntityParser).parse(input, { mode: 'update', parseExtension: parseUpdateAttributesExtension }); const { ExpressionAttributeNames: updateExpressionAttributeNames, ExpressionAttributeValues: updateExpressionAttributeValues, ...update } = expressUpdate(entity, omit(item, ...Object.keys(key))); const { ExpressionAttributeNames: optionsExpressionAttributeNames, ExpressionAttributeValues: optionsExpressionAttributeValues, ...awsOptions } = parseUpdateAttributesOptions(entity, options); const ExpressionAttributeNames = { ...optionsExpressionAttributeNames, ...updateExpressionAttributeNames }; const ExpressionAttributeValues = { ...optionsExpressionAttributeValues, ...updateExpressionAttributeValues }; return { TableName: (_a = options.tableName) !== null && _a !== void 0 ? _a : entity.table.getName(), /** * @debt type "TODO: Rework extensions & not cast here (use `ParsedItem<ENTITY, { extension: UpdateItemExtension }>`)" */ ToolboxItem: parsedItem, Key: key, ...update, ...awsOptions, ...(!isEmpty(ExpressionAttributeNames) ? { ExpressionAttributeNames } : {}), ...(!isEmpty(ExpressionAttributeValues) ? { ExpressionAttributeValues } : {}) }; };