dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
52 lines (51 loc) • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.applyCustomValidation = exports.isRequired = exports.defaultParseExtension = void 0;
const index_js_1 = require("../../../errors/index.js");
const formatArrayPath_js_1 = require("../../../schema/actions/utils/formatArrayPath.js");
const isString_js_1 = require("../../../utils/validation/isString.js");
const defaultParseExtension = (_, input) => ({
isExtension: false,
unextendedInput: input
});
exports.defaultParseExtension = defaultParseExtension;
const isRequired = (schema, mode) => {
var _a, _b;
switch (mode) {
case 'put':
return ((_a = schema.props) === null || _a === void 0 ? void 0 : _a.required) !== 'never';
case 'key':
case 'update':
return ((_b = schema.props) === null || _b === void 0 ? void 0 : _b.required) === 'always';
}
};
exports.isRequired = isRequired;
const getValidator = (schema, mode) => {
if (schema.props.key) {
return schema.props.keyValidator;
}
switch (mode) {
case 'key':
return schema.props.keyValidator;
case 'put':
return schema.props.putValidator;
case 'update':
return schema.props.updateValidator;
}
};
const applyCustomValidation = (schema, inputValue, options = {}) => {
const { mode = 'put', valuePath } = options;
const customValidator = getValidator(schema, mode);
if (customValidator !== undefined) {
const validationResult = customValidator(inputValue, schema);
if (validationResult !== true) {
const path = valuePath !== undefined ? (0, formatArrayPath_js_1.formatArrayPath)(valuePath) : undefined;
throw new index_js_1.DynamoDBToolboxError('parsing.customValidationFailed', {
message: `Custom validation${path !== undefined ? ` for attribute '${path}'` : ''} failed${(0, isString_js_1.isString)(validationResult) ? ` with message: ${validationResult}` : ''}.`,
path,
payload: { received: inputValue, validationResult }
});
}
}
};
exports.applyCustomValidation = applyCustomValidation;