one-schema
Version:
one-schema object validator
84 lines (83 loc) • 3.34 kB
JavaScript
;
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;