UNPKG

skex

Version:

A modern schema validation and filtration library with great TypeScript support.

67 lines (36 loc) 1.56 kB
/* IMPORT */ import CompoundWithState from './compound_with_state'; import Registry from '../registry'; import {isNil} from '../utils'; import type {NillableState, Traverser, Schema} from '../types'; /* MAIN */ class Nillable<T> extends CompoundWithState<T | null | undefined, T | null | undefined, NillableState<T | null | undefined, T | null | undefined, T>> { /* CONSTRUCTOR */ constructor ( state: NillableState<T | null | undefined, T | null | undefined, T> ) { super ( state, state.nillable ); } /* PUBLIC API */ filter ( value: unknown, defaultable: false, quiet: true ): boolean; filter ( value: unknown, defaultable?: boolean, quiet?: false ): T | null | undefined; filter ( value: unknown, defaultable?: boolean, quiet?: boolean ): T | null | undefined | boolean; filter ( value: unknown, defaultable: boolean = true, quiet: boolean = false ): T | null | undefined | boolean { if ( isNil ( value ) ) return value; try { return this.state.nillable.filter ( value, defaultable, quiet ); } catch { return this._filterDefault ( defaultable, quiet ); } } test ( value: unknown ): value is T | null | undefined { if ( isNil ( value ) ) return true; return this.state.nillable.test ( value ); } traverse ( traverser: Traverser, parent?: Schema, key?: string | number ): void { traverser ( this, parent, key ); this.state.nillable.traverse ( traverser, this ); } } /* INIT */ Registry.register ( 'nillable', Nillable ); /* EXPORT */ export default Nillable;