| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- "use strict";
- var isArray = require("./array/is")
- , toShortString = require("./lib/to-short-string");
- var objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
- var assign = function (target, source) {
- for (var key in source) {
- if (objPropertyIsEnumerable.call(source, key)) target[key] = source[key];
- }
- };
- module.exports = function (validationDatum1/*, ...validationDatumN, options */) {
- var validationData = [validationDatum1];
- var globalOptions;
- if (arguments.length > 1) {
- var hasOptions = !isArray(arguments[arguments.length - 1]);
- if (hasOptions) globalOptions = arguments[arguments.length - 1];
- var lastDatumIndex = hasOptions ? arguments.length - 2 : arguments.length - 1;
- for (var i = 1; i <= lastDatumIndex; ++i) validationData.push(arguments[i]);
- }
- var result = [], errors;
- for (var j = 0; j < validationData.length; ++j) {
- var validationDatum = validationData[j];
- var options = { name: validationDatum[0] };
- if (globalOptions) assign(options, globalOptions);
- if (validationDatum[3]) assign(options, validationDatum[3]);
- var resultItem;
- if (typeof validationDatum[2] !== "function") {
- throw new TypeError(toShortString(validationDatum[2]) + " is not a function");
- }
- try {
- resultItem = validationDatum[2](validationDatum[1], options);
- } catch (error) {
- if (!errors) errors = [];
- errors.push(error);
- }
- if (errors) continue;
- result.push(resultItem);
- }
- if (!errors) return result;
- if (errors.length === 1) throw errors[0];
- var ErrorConstructor = (globalOptions && globalOptions.Error) || TypeError;
- var errorMessage = "Approached following errors:";
- for (var k = 0; k < errors.length; ++k) {
- errorMessage += "\n - " + errors[k].message.split("\n").join("\n ");
- }
- throw new ErrorConstructor(errorMessage);
- };
|