UNPKG

one-schema

Version:
84 lines (83 loc) 3.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.registerValidator = exports.runExternalValidator = exports.hasValidatorIdForType = exports.hasValidatorId = void 0; var validatorResult_1 = require("./validatorResult"); var builtin_validators_1 = require("./builtin-validators"); var USER_DEFINED_VALIDATORS = {}; function getValidatorObjectForId(id) { if (builtin_validators_1.BUILT_IN_VALIDATORS.hasOwnProperty(id)) { return builtin_validators_1.BUILT_IN_VALIDATORS[id]; } if (USER_DEFINED_VALIDATORS.hasOwnProperty(id)) { return USER_DEFINED_VALIDATORS[id]; } return null; } function hasValidatorId(id, fieldValidator) { var type = fieldValidator ? fieldValidator.settings.type : null; var validatorDef = getValidatorObjectForId(id); if (!validatorDef) { return false; } if (type && Array.isArray(validatorDef.types)) { return validatorDef.types.indexOf(type) !== -1; } return true; } exports.hasValidatorId = hasValidatorId; function hasValidatorIdForType(id, type) { var validatorDef = getValidatorObjectForId(id); if (!validatorDef) { return false; } if (type && Array.isArray(validatorDef.types)) { return validatorDef.types.indexOf(type) !== -1; } return true; } exports.hasValidatorIdForType = hasValidatorIdForType; function runExternalValidator(value, validatorOptions, fieldValidator) { if (!validatorOptions || typeof validatorOptions.id !== 'string') { return validatorResult_1.vrError('has an invalid validator'); } var vid = validatorOptions.id; var validatorDef = getValidatorObjectForId(vid); if (!validatorDef) { return validatorResult_1.vrError("Invalid validator id " + vid); } var validatorFunction = validatorDef.fnc; if (typeof validatorFunction !== 'function') { return validatorResult_1.vrError("Missing function for validator id: " + vid); } var type = fieldValidator.settings.type; if (Array.isArray(validatorDef.types)) { if (validatorDef.types.indexOf(type) === -1) { return validatorResult_1.vrError("Invalid type " + type + " for " + vid); } } if (validatorFunction(value, validatorOptions)) { return validatorResult_1.vrSuccess(); } return validatorResult_1.vrError("validation check failed for validator id " + vid); } exports.runExternalValidator = runExternalValidator; function registerValidator(id, fnc, allowedTypes) { if (builtin_validators_1.BUILT_IN_VALIDATORS.hasOwnProperty(id)) { throw new Error("Already registered builtin validator with id " + id); } if (USER_DEFINED_VALIDATORS.hasOwnProperty(id)) { throw new Error("Already registered user defined validator with id " + id); } if (typeof fnc !== 'function') { throw new Error("Missing function for validator " + id + "!"); } if (typeof allowedTypes !== 'undefined' && !Array.isArray(allowedTypes)) { throw new Error("allowedTypes defined as non array with id " + id); } var validatorObject = { fnc: fnc, types: Array.isArray(allowedTypes) ? allowedTypes.concat([]) : undefined, }; USER_DEFINED_VALIDATORS[id] = validatorObject; } exports.registerValidator = registerValidator;