UNPKG

altheia-async-data-validator

Version:

A very simple, fast and customizable async data validator

100 lines (99 loc) 3.61 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Altheia = void 0; const isPlainObject_1 = __importDefault(require("lodash/isPlainObject")); const lang_1 = __importDefault(require("./lang")); const validator_1 = require("./validator"); const base_1 = require("./validators/base"); // Default extractors const any_1 = __importDefault(require("./validators/any")); const array_1 = __importDefault(require("./validators/array")); const boolean_1 = __importDefault(require("./validators/boolean")); const date_1 = __importDefault(require("./validators/date")); const function_1 = __importDefault(require("./validators/function")); const internet_1 = __importDefault(require("./validators/internet")); const number_1 = __importDefault(require("./validators/number")); const object_1 = __importDefault(require("./validators/object")); const string_1 = __importDefault(require("./validators/string")); const Instance = (lang) => { const inst = ((schema) => { return new validator_1.Validator(schema, inst); }); inst.langList = Object.assign({}, lang_1.default); inst.templates = {}; inst.Base = base_1.TypeBase; inst.instance = (newLang = {}) => { return Instance(Object.assign(Object.assign({}, inst.langList), newLang)); }; inst.use = (plugin) => { const test = new plugin.Class(); inst[test.name || test.constructor.name] = () => { return new plugin.Class(inst); }; if (plugin.messages) { inst.lang(plugin.messages); } return inst; }; inst.lang = (key, tpl) => { if (typeof key === 'object' && (0, isPlainObject_1.default)(key)) { inst.langList = Object.assign(Object.assign({}, inst.langList), key); } else if (typeof key === 'string' && tpl) { inst.langList[key] = tpl; } }; inst.template = (name, schema) => { inst.templates[name] = schema; }; inst.is = (name) => { if (typeof inst.templates[name] === 'undefined') { throw new Error(`unknow template ${name}`); } return inst.templates[name].clone(); }; inst.formatError = ({ type, args, result }, // eslint-disable-next-line default-param-last label = 'value', position) => { // Get messages from error let msg; if (typeof inst.langList[type] !== 'undefined') { msg = inst.langList[type](label, args, result); } else { msg = 'Invalid value'; } const formatted = { label, type, message: msg, }; if (typeof position === 'number') { formatted.position = position; } // nested errors if (result && result.errors) { formatted.errors = result.errors.map((error) => inst.formatError(error.test, error.label, error.position)); } return formatted; }; // Declare basic plugins inst.use(any_1.default); inst.use(array_1.default); inst.use(boolean_1.default); inst.use(date_1.default); inst.use(function_1.default); inst.use(internet_1.default); inst.use(number_1.default); inst.use(object_1.default); inst.use(string_1.default); // Add passed lang object if (lang && (0, isPlainObject_1.default)(lang)) { inst.lang(lang); } return inst; }; exports.Altheia = Instance();