dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
36 lines (35 loc) • 1.88 kB
JavaScript
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 } : {})
};
};