dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
65 lines (64 loc) • 2.98 kB
JavaScript
;
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;