import {StringPredicate} from './lib/predicates/string'; import {NumberPredicate} from './lib/predicates/number'; import {BooleanPredicate} from './lib/predicates/boolean'; import {Predicate, PredicateOptions} from './lib/predicates/predicate'; import {ArrayPredicate} from './lib/predicates/array'; import {ObjectPredicate, Shape} from './lib/predicates/object'; import {DatePredicate} from './lib/predicates/date'; import {ErrorPredicate} from './lib/predicates/error'; import {MapPredicate} from './lib/predicates/map'; import {WeakMapPredicate} from './lib/predicates/weak-map'; import {SetPredicate} from './lib/predicates/set'; import {WeakSetPredicate} from './lib/predicates/weak-set'; import {BasePredicate} from './lib/predicates/base-predicate'; import {AnyPredicate} from './lib/predicates/any'; type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array; export interface Predicates { /** * Test the value to be a string. */ readonly string: StringPredicate; /** * Test the value to be a number. */ readonly number: NumberPredicate; /** * Test the value to be a boolean. */ readonly boolean: BooleanPredicate; /** * Test the value to be undefined. */ readonly undefined: Predicate; /** * Test the value to be null. */ readonly null: Predicate; /** * Test the value to be null or undefined. */ readonly nullOrUndefined: Predicate; /** * Test the value to be not a number. */ readonly nan: Predicate; /** * Test the value to be a Symbol. */ readonly symbol: Predicate; /** * Test the value to be an array. */ readonly array: ArrayPredicate; /** * Test the value to be an object. */ readonly object: ObjectPredicate; /** * Test the value to be a Date. */ readonly date: DatePredicate; /** * Test the value to be an Error. */ readonly error: ErrorPredicate; /** * Test the value to be a Map. */ readonly map: MapPredicate; /** * Test the value to be a WeakMap. */ readonly weakMap: WeakMapPredicate; /** * Test the value to be a Set. */ readonly set: SetPredicate; /** * Test the value to be a WeakSet. */ readonly weakSet: WeakSetPredicate; /** * Test the value to be a Function. */ readonly function: Predicate; /** * Test the value to be a Buffer. */ readonly buffer: Predicate; /** * Test the value to be a RegExp. */ readonly regExp: Predicate; /** * Test the value to be a Promise. */ readonly promise: Predicate>; /** * Test the value to be a typed array. */ readonly typedArray: Predicate; /** * Test the value to be a Int8Array. */ readonly int8Array: Predicate; /** * Test the value to be a Uint8Array. */ readonly uint8Array: Predicate; /** * Test the value to be a Uint8ClampedArray. */ readonly uint8ClampedArray: Predicate; /** * Test the value to be a Int16Array. */ readonly int16Array: Predicate; /** * Test the value to be a Uint16Array. */ readonly uint16Array: Predicate; /** * Test the value to be a Int32Array. */ readonly int32Array: Predicate; /** * Test the value to be a Uint32Array. */ readonly uint32Array: Predicate; /** * Test the value to be a Float32Array. */ readonly float32Array: Predicate; /** * Test the value to be a Float64Array. */ readonly float64Array: Predicate; /** * Test the value to be a ArrayBuffer. */ readonly arrayBuffer: Predicate; /** * Test the value to be a DataView. */ readonly dataView: Predicate; /** * Test the value to be Iterable. */ readonly iterable: Predicate>; /** * Test that the value matches at least one of the given predicates. */ any(p1: BasePredicate): AnyPredicate; any(p1: BasePredicate, p2: BasePredicate): AnyPredicate; any(p1: BasePredicate, p2: BasePredicate, p3: BasePredicate): AnyPredicate; any(p1: BasePredicate, p2: BasePredicate, p3: BasePredicate, p4: BasePredicate): AnyPredicate; any(p1: BasePredicate, p2: BasePredicate, p3: BasePredicate, p4: BasePredicate, p5: BasePredicate): AnyPredicate; any(p1: BasePredicate, p2: BasePredicate, p3: BasePredicate, p4: BasePredicate, p5: BasePredicate, p6: BasePredicate): AnyPredicate; any(p1: BasePredicate, p2: BasePredicate, p3: BasePredicate, p4: BasePredicate, p5: BasePredicate, p6: BasePredicate, p7: BasePredicate): AnyPredicate; any(p1: BasePredicate, p2: BasePredicate, p3: BasePredicate, p4: BasePredicate, p5: BasePredicate, p6: BasePredicate, p7: BasePredicate, p8: BasePredicate): AnyPredicate; any(p1: BasePredicate, p2: BasePredicate, p3: BasePredicate, p4: BasePredicate, p5: BasePredicate, p6: BasePredicate, p7: BasePredicate, p8: BasePredicate, p9: BasePredicate): AnyPredicate; any(p1: BasePredicate, p2: BasePredicate, p3: BasePredicate, p4: BasePredicate, p5: BasePredicate, p6: BasePredicate, p7: BasePredicate, p8: BasePredicate, p9: BasePredicate, p10: BasePredicate): AnyPredicate; any(...predicate: BasePredicate[]): AnyPredicate; } export default (object: T, options?: PredicateOptions): T & Predicates => { Object.defineProperties(object, { string: { get: () => new StringPredicate(options) }, number: { get: () => new NumberPredicate(options) }, boolean: { get: () => new BooleanPredicate(options) }, undefined: { get: () => new Predicate('undefined', options) }, null: { get: () => new Predicate('null', options) }, nullOrUndefined: { get: () => new Predicate('nullOrUndefined', options) }, nan: { get: () => new Predicate('nan', options) }, symbol: { get: () => new Predicate('symbol', options) }, array: { get: () => new ArrayPredicate(options) }, object: { get: () => new ObjectPredicate(options) }, date: { get: () => new DatePredicate(options) }, error: { get: () => new ErrorPredicate(options) }, map: { get: () => new MapPredicate(options) }, weakMap: { get: () => new WeakMapPredicate(options) }, set: { get: () => new SetPredicate(options) }, weakSet: { get: () => new WeakSetPredicate(options) }, function: { get: () => new Predicate('Function', options) }, buffer: { get: () => new Predicate('Buffer', options) }, regExp: { get: () => new Predicate('RegExp', options) }, promise: { get: () => new Predicate('Promise', options) }, typedArray: { get: () => new Predicate('TypedArray', options) }, int8Array: { get: () => new Predicate('Int8Array', options) }, uint8Array: { get: () => new Predicate('Uint8Array', options) }, uint8ClampedArray: { get: () => new Predicate('Uint8ClampedArray', options) }, int16Array: { get: () => new Predicate('Int16Array', options) }, uint16Array: { get: () => new Predicate('Uint16Array', options) }, int32Array: { get: () => new Predicate('Int32Array', options) }, uint32Array: { get: () => new Predicate('Uint32Array', options) }, float32Array: { get: () => new Predicate('Float32Array', options) }, float64Array: { get: () => new Predicate('Float64Array', options) }, arrayBuffer: { get: () => new Predicate('ArrayBuffer', options) }, dataView: { get: () => new Predicate('DataView', options) }, iterable: { get: () => new Predicate('Iterable', options) }, any: { value: (...predicates: BasePredicate[]) => new AnyPredicate(predicates, options) } }); return object as T & Predicates; }; export { StringPredicate, NumberPredicate, BooleanPredicate, ArrayPredicate, ObjectPredicate, DatePredicate, ErrorPredicate, MapPredicate, WeakMapPredicate, SetPredicate, WeakSetPredicate, AnyPredicate, Shape };