UNPKG

dynamodb-toolbox

Version:

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

65 lines (64 loc) 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseUpdateAttributesExtension = void 0; const index_js_1 = require("../../../../../entity/actions/update/symbols/index.js"); const number_js_1 = require("../../../../../entity/actions/update/updateItemParams/extension/number.js"); const reference_js_1 = require("../../../../../entity/actions/update/updateItemParams/extension/reference.js"); const set_js_1 = require("../../../../../entity/actions/update/updateItemParams/extension/set.js"); const index_js_2 = require("../../../../../errors/index.js"); const formatArrayPath_js_1 = require("../../../../../schema/actions/utils/formatArrayPath.js"); const any_js_1 = require("./any.js"); const list_js_1 = require("./list.js"); const map_js_1 = require("./map.js"); const record_js_1 = require("./record.js"); const parseUpdateAttributesExtension = (schema, input, options = {}) => { const { transform = true, valuePath } = options; if ((0, index_js_1.isRemoval)(input)) { return { isExtension: true, *extensionParser() { const { props } = schema; const { required } = props; const path = valuePath !== undefined ? (0, formatArrayPath_js_1.formatArrayPath)(valuePath) : undefined; if (required !== 'never') { throw new index_js_2.DynamoDBToolboxError('parsing.attributeRequired', { message: `Attribute ${path !== undefined ? `'${path}' ` : ''}is required and cannot be removed`, path }); } const parsedValue = input; if (transform) { yield parsedValue; } else { return parsedValue; } const transformedValue = input; return transformedValue; } }; } if ((0, index_js_1.isGetting)(input) && input[index_js_1.$GET] !== undefined) { return (0, reference_js_1.parseReferenceExtension)(schema, input, options); } switch (schema.type) { case 'any': return (0, any_js_1.parseAnyExtension)(schema, input, options); case 'number': return (0, number_js_1.parseNumberExtension)(schema, input, options); case 'set': return (0, set_js_1.parseSetExtension)(schema, input, options); case 'list': return (0, list_js_1.parseListExtension)(schema, input, options); case 'map': return (0, map_js_1.parseMapExtension)(schema, input, options); case 'record': return (0, record_js_1.parseRecordExtension)(schema, input, options); default: return { isExtension: false, unextendedInput: input }; } }; exports.parseUpdateAttributesExtension = parseUpdateAttributesExtension;