59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
import isSchema from './util/isSchema';
|
|
export function create(builder) {
|
|
return new Lazy(builder);
|
|
}
|
|
|
|
class Lazy {
|
|
constructor(builder) {
|
|
this.type = 'lazy';
|
|
this.__isYupSchema__ = true;
|
|
|
|
this._resolve = (value, options = {}) => {
|
|
let schema = this.builder(value, options);
|
|
if (!isSchema(schema)) throw new TypeError('lazy() functions must return a valid schema');
|
|
return schema.resolve(options);
|
|
};
|
|
|
|
this.builder = builder;
|
|
}
|
|
|
|
resolve(options) {
|
|
return this._resolve(options.value, options);
|
|
}
|
|
|
|
cast(value, options) {
|
|
return this._resolve(value, options).cast(value, options);
|
|
}
|
|
|
|
validate(value, options, maybeCb) {
|
|
// @ts-expect-error missing public callback on type
|
|
return this._resolve(value, options).validate(value, options, maybeCb);
|
|
}
|
|
|
|
validateSync(value, options) {
|
|
return this._resolve(value, options).validateSync(value, options);
|
|
}
|
|
|
|
validateAt(path, value, options) {
|
|
return this._resolve(value, options).validateAt(path, value, options);
|
|
}
|
|
|
|
validateSyncAt(path, value, options) {
|
|
return this._resolve(value, options).validateSyncAt(path, value, options);
|
|
}
|
|
|
|
describe() {
|
|
return null;
|
|
}
|
|
|
|
isValid(value, options) {
|
|
return this._resolve(value, options).isValid(value, options);
|
|
}
|
|
|
|
isValidSync(value, options) {
|
|
return this._resolve(value, options).isValidSync(value, options);
|
|
}
|
|
|
|
}
|
|
|
|
export default Lazy; |