@newdash/newdash
Version:
javascript/typescript utility library
87 lines (86 loc) • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isNativeClass = exports.isClass = void 0;
const isEmpty_1 = require("./isEmpty");
/**
* @ignore
* @internal
* @private
*/
const nativeClasses = [
Array,
Int8Array,
Uint8Array,
Uint8ClampedArray,
Int16Array,
Uint16Array,
Int32Array,
Uint32Array,
Float32Array,
Float64Array,
BigInt64Array,
BigUint64Array,
globalThis.SharedArrayBuffer,
DataView,
Date,
BigInt,
ArrayBuffer,
RegExp,
Symbol,
Map,
WeakMap,
Set,
WeakSet,
Promise,
Proxy,
Number,
String,
Error,
EvalError,
RangeError
].filter((v) => v !== undefined);
/**
* check if `value` is `Class` object
*
* the `Function` will return `false`
*
* @since 5.15.0
* @category Lang
*
* @param obj
*
* ```js
* class A {}
* function a() {}
* isClass(A) // => true
* isClass(a) // => false
* ```
*/
function isClass(obj) {
if (obj === undefined || obj === null) {
return false;
}
if (typeof obj === "function" && typeof obj?.constructor === "function") {
if (/^class [\s\S]*?$/.test(Function.prototype.toString.call(obj))) {
return true;
}
if (isNativeClass(obj)) {
return true;
}
}
if (typeof obj === "function" && !(0, isEmpty_1.isEmpty)(obj.prototype)) {
return true;
}
return false;
}
exports.isClass = isClass;
/**
* check a class is native class or not
* @category Lang
* @since 5.18.0
* @param c class type
*/
function isNativeClass(c) {
return nativeClasses.includes(c);
}
exports.isNativeClass = isNativeClass;