UNPKG

@grnsft/if-core

Version:

If core utilities.

45 lines 6.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validate = void 0; const zod_1 = require("zod"); const utils_1 = require("../utils"); const { InputValidationError } = utils_1.ERRORS; /** * Validates given `object` with given `schema`. */ const validate = (schema, object, index, errorConstructor = InputValidationError) => { const validationResult = schema.safeParse(object); if (!validationResult.success) { throw new errorConstructor(prettifyErrorMessage(validationResult.error.message, index)); } return validationResult.data; }; exports.validate = validate; /** * Error message formatter for zod issues. */ const prettifyErrorMessage = (issues, index) => { const issuesArray = JSON.parse(issues); return issuesArray.map((issue) => { const code = issue.code; let { path, message } = issue; const indexErrorMessage = index !== undefined ? ` at index ${index}` : ''; if (issue.code === zod_1.ZodIssueCode.invalid_union) { message = issue.unionErrors[0].issues[0].message; path = issue.unionErrors[0].issues[0].path; } const fullPath = flattenPath(path); if (!fullPath) { return message; } return `"${fullPath}" parameter is ${message.toLowerCase()}${indexErrorMessage}. Error code: ${code}.`; }); }; /** * Flattens an array representing a nested path into a string. */ const flattenPath = (path) => { const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part); return flattenPath.join('.'); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvdmFsaWRhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNEO0FBRXRELG9DQUFnQztBQUVoQyxNQUFNLEVBQUMsb0JBQW9CLEVBQUMsR0FBRyxjQUFNLENBQUM7QUFFdEM7O0dBRUc7QUFDSSxNQUFNLFFBQVEsR0FBRyxDQUN0QixNQUFvQixFQUNwQixNQUFXLEVBQ1gsS0FBYyxFQUNkLG1CQUFxQyxvQkFBb0IsRUFDekQsRUFBRTtJQUNGLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLGdCQUFnQixDQUN4QixvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQWZXLFFBQUEsUUFBUSxZQWVuQjtBQUVGOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUM5RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXZDLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWUsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsR0FBRyxLQUFLLENBQUM7UUFFNUIsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFMUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGtCQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNqRCxJQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sSUFBSSxRQUFRLGtCQUFrQixPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsaUJBQWlCLGlCQUFpQixJQUFJLEdBQUcsQ0FBQztJQUN6RyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUF5QixFQUFVLEVBQUU7SUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNsQyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDOUMsQ0FBQztJQUVGLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1pvZElzc3VlLCBab2RJc3N1ZUNvZGUsIFpvZFNjaGVtYX0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3Qge0lucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG9iamVjdGAgd2l0aCBnaXZlbiBgc2NoZW1hYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gPFQ+KFxuICBzY2hlbWE6IFpvZFNjaGVtYTxUPixcbiAgb2JqZWN0OiBhbnksXG4gIGluZGV4PzogbnVtYmVyLFxuICBlcnJvckNvbnN0cnVjdG9yOiBFcnJvckNvbnN0cnVjdG9yID0gSW5wdXRWYWxpZGF0aW9uRXJyb3JcbikgPT4ge1xuICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gc2NoZW1hLnNhZmVQYXJzZShvYmplY3QpO1xuXG4gIGlmICghdmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IGVycm9yQ29uc3RydWN0b3IoXG4gICAgICBwcmV0dGlmeUVycm9yTWVzc2FnZSh2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2UsIGluZGV4KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5kYXRhO1xufTtcblxuLyoqXG4gKiBFcnJvciBtZXNzYWdlIGZvcm1hdHRlciBmb3Igem9kIGlzc3Vlcy5cbiAqL1xuY29uc3QgcHJldHRpZnlFcnJvck1lc3NhZ2UgPSAoaXNzdWVzOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc0FycmF5ID0gSlNPTi5wYXJzZShpc3N1ZXMpO1xuXG4gIHJldHVybiBpc3N1ZXNBcnJheS5tYXAoKGlzc3VlOiBab2RJc3N1ZSkgPT4ge1xuICAgIGNvbnN0IGNvZGUgPSBpc3N1ZS5jb2RlO1xuICAgIGxldCB7cGF0aCwgbWVzc2FnZX0gPSBpc3N1ZTtcblxuICAgIGNvbnN0IGluZGV4RXJyb3JNZXNzYWdlID0gaW5kZXggIT09IHVuZGVmaW5lZCA/IGAgYXQgaW5kZXggJHtpbmRleH1gIDogJyc7XG5cbiAgICBpZiAoaXNzdWUuY29kZSA9PT0gWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24pIHtcbiAgICAgIG1lc3NhZ2UgPSBpc3N1ZS51bmlvbkVycm9yc1swXS5pc3N1ZXNbMF0ubWVzc2FnZTtcbiAgICAgIHBhdGggPSBpc3N1ZS51bmlvbkVycm9yc1swXS5pc3N1ZXNbMF0ucGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IGZsYXR0ZW5QYXRoKHBhdGgpO1xuXG4gICAgaWYgKCFmdWxsUGF0aCkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfSR7aW5kZXhFcnJvck1lc3NhZ2V9LiBFcnJvciBjb2RlOiAke2NvZGV9LmA7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBGbGF0dGVucyBhbiBhcnJheSByZXByZXNlbnRpbmcgYSBuZXN0ZWQgcGF0aCBpbnRvIGEgc3RyaW5nLlxuICovXG5jb25zdCBmbGF0dGVuUGF0aCA9IChwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZmxhdHRlblBhdGggPSBwYXRoLm1hcChwYXJ0ID0+XG4gICAgdHlwZW9mIHBhcnQgPT09ICdudW1iZXInID8gYFske3BhcnR9XWAgOiBwYXJ0XG4gICk7XG5cbiAgcmV0dXJuIGZsYXR0ZW5QYXRoLmpvaW4oJy4nKTtcbn07XG4iXX0=