UNPKG

@zerooneit/expressive-tea

Version:
285 lines (284 loc) 6.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isAsyncFunction = exports.prototypeOf = exports.descriptorOf = exports.nameOfSymbol = exports.nameOfClass = exports.nameOf = exports.ancestorsOf = exports.getInheritedClass = exports.isPromise = exports.isEmpty = exports.isClass = exports.isObject = exports.isDate = exports.isCollection = exports.isArrayOrArrayClass = exports.isArray = exports.isBoolean = exports.isNumber = exports.isString = exports.primitiveOf = exports.isPrimitiveOrPrimitiveClass = exports.getClassOrSymbol = exports.classOf = exports.getClass = exports.getConstructor = void 0; /* istanbul ignore file */ /** * Get the provide constructor. * @param targetClass * @ignore */ const getConstructor = (targetClass) => typeof targetClass === 'function' ? targetClass : targetClass.constructor; exports.getConstructor = getConstructor; /** * Get the provide constructor if target is an instance. * @param target * @returns {*} * @ignore */ function getClass(target) { return target.prototype ? target : target.constructor; } exports.getClass = getClass; /** * Get the provide constructor if target is an instance. * @param target * @returns {*} * @alias getClass * @ignore */ function classOf(target) { return getClass(target); } exports.classOf = classOf; /** * * @param target * @returns {symbol} * @ignore */ function getClassOrSymbol(target) { return typeof target === 'symbol' ? target : getClass(target); } exports.getClassOrSymbol = getClassOrSymbol; /** * Return true if the given obj is a primitive. * @param target * @returns {boolean} * @ignore */ function isPrimitiveOrPrimitiveClass(target) { return isString(target) || isNumber(target) || isBoolean(target); } exports.isPrimitiveOrPrimitiveClass = isPrimitiveOrPrimitiveClass; /** * * @param target * @returns {"string" | "number" | "boolean" | "any"} * @ignore */ function primitiveOf(target) { if (isString(target)) { return 'string'; } if (isNumber(target)) { return 'number'; } if (isBoolean(target)) { return 'boolean'; } return 'any'; } exports.primitiveOf = primitiveOf; /** * * @param target * @returns {boolean} * @ignore */ function isString(target) { return checkType(target, 'string', String); } exports.isString = isString; /** * * @param target * @returns {boolean} * @ignore */ function isNumber(target) { return checkType(target, 'number', Number); } exports.isNumber = isNumber; /** * * @param target * @returns {boolean} * @ignore */ function isBoolean(target) { return checkType(target, 'boolean', Boolean); } exports.isBoolean = isBoolean; function checkType(target, type, TypeClass) { return typeof target === type || target instanceof TypeClass || target === TypeClass; } /** * * @param target * @returns {Boolean} * @ignore */ function isArray(target) { return Array.isArray(target); } exports.isArray = isArray; /** * Return true if the clazz is an array. * @param target * @returns {boolean} * @ignore */ function isArrayOrArrayClass(target) { if (target === Array) { return true; } return isArray(target); } exports.isArrayOrArrayClass = isArrayOrArrayClass; /** * Return true if the target. * @param target * @returns {boolean} * @ignore */ function isCollection(target) { return (isArrayOrArrayClass(target) || target === Map || target instanceof Map || target === Set || target instanceof Set || target === WeakMap || target instanceof WeakMap || target === WeakSet || target instanceof WeakSet); } exports.isCollection = isCollection; /** * * @param target * @returns {boolean} * @ignore */ function isDate(target) { return target === Date || target instanceof Date; } exports.isDate = isDate; /** * * @param target * @returns {boolean} * @ignore */ function isObject(target) { return target === Object; } exports.isObject = isObject; /** * * @param target * @returns {boolean} * @ignore */ function isClass(target) { return (!isPrimitiveOrPrimitiveClass(target) && !isObject(target) && !isDate(target) && target !== undefined && !isPromise(target)); } exports.isClass = isClass; /** * Return true if the value is an empty string, null or undefined. * @param value * @returns {boolean} * @ignore */ function isEmpty(value) { return value === '' || value === null || value === undefined; } exports.isEmpty = isEmpty; /** * * @param target * @returns {boolean} * @ignore */ function isPromise(target) { return target === Promise || target instanceof Promise; } exports.isPromise = isPromise; /** * * @param target * @returns {any} * @ignore */ function getInheritedClass(target) { return Object.getPrototypeOf(target); } exports.getInheritedClass = getInheritedClass; /** * * @param target * @returns {Array} * @ignore */ function ancestorsOf(target) { const classes = []; let currentTarget = getClass(target); while (nameOf(currentTarget) !== '') { classes.unshift(currentTarget); currentTarget = getInheritedClass(currentTarget); } return classes; } exports.ancestorsOf = ancestorsOf; /** * Get object name * @ignore */ function nameOf(obj) { switch (typeof obj) { default: return '' + obj; case 'symbol': return (0, exports.nameOfSymbol)(obj); case 'function': return nameOfClass(obj); } } exports.nameOf = nameOf; /** * Get the provide name. * @param targetClass * @ignore */ function nameOfClass(targetClass) { return typeof targetClass === 'function' ? targetClass.name : targetClass.constructor.name; } exports.nameOfClass = nameOfClass; /** * Get symbol name. * @param sym * @ignore */ const nameOfSymbol = (sym) => sym .toString() .replace('Symbol(', '') .replace(')', ''); exports.nameOfSymbol = nameOfSymbol; /** * * @param target * @param {string} propertyKey * @returns {PropertyDescriptor} * @ignore */ function descriptorOf(target, propertyKey) { return Object.getOwnPropertyDescriptor((target && target.prototype) || target, propertyKey); } exports.descriptorOf = descriptorOf; /** * * @param target * @returns {any} * @ignore */ function prototypeOf(target) { return classOf(target) === target ? target.prototype : target; } exports.prototypeOf = prototypeOf; function isAsyncFunction(fn) { return fn.constructor.name === 'AsyncFunction' || fn.constructor.name.includes('__awaiter'); } exports.isAsyncFunction = isAsyncFunction;