UNPKG

datum-focus

Version:

Data shape, model, metadata, JSON, JSON Schema, GraphQL, MongoDB query and aggregations, iterator generators

67 lines (49 loc) 2.67 kB
export * from '../number'; export * from '../string'; export * from '../number'; export * from '../string'; export * from '../date'; import { Stream } from 'stream'; import { BOOLEAN } from "../boolean"; import { FUNCTION } from "../function"; import { Nil } from '../maybe'; import { isNumber, isPositiveInteger, NaN, NumberOrString } from "../number"; import { KnownRecord } from '../record'; import { isString } from '../string'; import { SYMBOL } from "../symbol"; export type ValidationTest = (val: unknown) => boolean; export const isArray = (val: unknown): val is Array<unknown> => Array.isArray(val); export const isBoolean = (val: unknown): val is boolean => typeof val === BOOLEAN; export const isArrayLike = (val: any): val is IterableIterator<[number, unknown]> => typeof val[Symbol.iterator] === 'function'; export const isEmpty = (val: unknown): val is Object => val == null || (isObject(val) && !(Object.keys(val) || val).length); export const isFunction = (val: unknown): val is Function => typeof val === FUNCTION; export const isLeapYear = (val: unknown): val is number => isPositiveInteger(val) && new Date(val, 1, 29).getMonth() === 1; export const isNaN = (val: unknown): val is NaN => Number.isNaN(val); export const isNil = (val: unknown): val is Nil => val === undefined || val === null; export const isNull = (val: unknown): val is null => val === null; export const isNumberOrString = (val: unknown): val is NumberOrString => isNumber(val) || isString(val); export const isObject = (val: unknown): val is Object => val === Object(val); export const isPrimitive = (val: unknown): boolean => Object(val) !== val; export const isPlainObject = (val: unknown): val is KnownRecord => !isNull(val) && isObject(val) && val.constructor === Object; export const isSet = (val: unknown): val is Set<unknown> => isArrayLike(val) && !isArray(val); /* export const isSorted = (arr: Array<number>): false | 1 | -1 => { let direction = -(arr[0] - arr[1]); for (let [i, val] of arr.entries()) { direction = !direction ? -(arr[i - 1] - arr[i]) : direction; if (i === arr.length - 1) { return !direction ? false : <1 | -1>(direction / Math.abs(direction)); } else if ((val - arr[i + 1]) * direction > 0) { return false; } } throw 'never'; }; */ export const isStream = (val: any): val is Stream => !isNull(val) && isObject(val) && typeof val.pipe === FUNCTION; /// export const isString = (val: unknown): boolean => (typeof val === 'string'); export const isSymbol = (val: unknown): val is Symbol => typeof val === SYMBOL; export const isUndefined = (val: unknown): val is undefined => val === undefined;