datum-focus
Version:
Data shape, model, metadata, JSON, JSON Schema, GraphQL, MongoDB query and aggregations, iterator generators
67 lines (49 loc) • 2.67 kB
text/typescript
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;