Viewing File: /home/ubuntu/todaykat-frontend-base/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
//
Back to Directory
File Manager