%PDF- %PDF-
Direktori : /var/www/html/node_modules/yup/es/ |
Current File : /var/www/html/node_modules/yup/es/array.js |
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } import isAbsent from './util/isAbsent'; import isSchema from './util/isSchema'; import printValue from './util/printValue'; import { array as locale } from './locale'; import runTests from './util/runTests'; import ValidationError from './ValidationError'; import BaseSchema from './schema'; export function create(type) { return new ArraySchema(type); } export default class ArraySchema extends BaseSchema { constructor(type) { super({ type: 'array' }); // `undefined` specifically means uninitialized, as opposed to // "no subtype" this.innerType = void 0; this.innerType = type; this.withMutation(() => { this.transform(function (values) { if (typeof values === 'string') try { values = JSON.parse(values); } catch (err) { values = null; } return this.isType(values) ? values : null; }); }); } _typeCheck(v) { return Array.isArray(v); } get _subType() { return this.innerType; } _cast(_value, _opts) { const value = super._cast(_value, _opts); //should ignore nulls here if (!this._typeCheck(value) || !this.innerType) return value; let isChanged = false; const castArray = value.map((v, idx) => { const castElement = this.innerType.cast(v, _extends({}, _opts, { path: `${_opts.path || ''}[${idx}]` })); if (castElement !== v) { isChanged = true; } return castElement; }); return isChanged ? castArray : value; } _validate(_value, options = {}, callback) { var _options$abortEarly, _options$recursive; let errors = []; let sync = options.sync; let path = options.path; let innerType = this.innerType; let endEarly = (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly; let recursive = (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive; let originalValue = options.originalValue != null ? options.originalValue : _value; super._validate(_value, options, (err, value) => { if (err) { if (!ValidationError.isError(err) || endEarly) { return void callback(err, value); } errors.push(err); } if (!recursive || !innerType || !this._typeCheck(value)) { callback(errors[0] || null, value); return; } originalValue = originalValue || value; // #950 Ensure that sparse array empty slots are validated let tests = new Array(value.length); for (let idx = 0; idx < value.length; idx++) { let item = value[idx]; let path = `${options.path || ''}[${idx}]`; // object._validate note for isStrict explanation let innerOptions = _extends({}, options, { path, strict: true, parent: value, index: idx, originalValue: originalValue[idx] }); tests[idx] = (_, cb) => innerType.validate(item, innerOptions, cb); } runTests({ sync, path, value, errors, endEarly, tests }, callback); }); } clone(spec) { const next = super.clone(spec); next.innerType = this.innerType; return next; } concat(schema) { let next = super.concat(schema); next.innerType = this.innerType; if (schema.innerType) next.innerType = next.innerType ? // @ts-expect-error Lazy doesn't have concat() next.innerType.concat(schema.innerType) : schema.innerType; return next; } of(schema) { // FIXME: this should return a new instance of array without the default to be let next = this.clone(); if (!isSchema(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema not: ' + printValue(schema)); // FIXME(ts): next.innerType = schema; return next; } length(length, message = locale.length) { return this.test({ message, name: 'length', exclusive: true, params: { length }, test(value) { return isAbsent(value) || value.length === this.resolve(length); } }); } min(min, message) { message = message || locale.min; return this.test({ message, name: 'min', exclusive: true, params: { min }, // FIXME(ts): Array<typeof T> test(value) { return isAbsent(value) || value.length >= this.resolve(min); } }); } max(max, message) { message = message || locale.max; return this.test({ message, name: 'max', exclusive: true, params: { max }, test(value) { return isAbsent(value) || value.length <= this.resolve(max); } }); } ensure() { return this.default(() => []).transform((val, original) => { // We don't want to return `null` for nullable schema if (this._typeCheck(val)) return val; return original == null ? [] : [].concat(original); }); } compact(rejector) { let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a); return this.transform(values => values != null ? values.filter(reject) : values); } describe() { let base = super.describe(); if (this.innerType) base.innerType = this.innerType.describe(); return base; } nullable(isNullable = true) { return super.nullable(isNullable); } defined() { return super.defined(); } required(msg) { return super.required(msg); } } create.prototype = ArraySchema.prototype; // // Interfaces //