typeanalyser
Version:
Provides type detection and analysis for ANY Javascript object (including custom types) in any environment, even where native operators falter.
3 lines (2 loc) • 3.4 kB
JavaScript
function r(r){if(null===r)return"null";var e=typeof r,t=e;if("object"!==e&&"function"!==e&&"string"!==e)return e;if(r.hasOwnProperty("toString"))return"unknown";if("string"===e)return r.valueOf&&"Symbol"===r.valueOf().toString().slice(0,6)?"symbol":"string";if(e=Object.prototype.toString.call(r).slice(8,-1),!r.prototype&&"Function"===e)return"ArrowFunction";if("Object"!==e&&"Function"!==e||(e=e.toLowerCase()),"object"===t&&r.constructor){var n=r.constructor.name;if("Object"!==n)return n}return e}function e(r,e){e=void 0===e||e;var t={Type:"null",ReferenceVariable:"",hasCustomConstructor:!1,prototypeChainString:"",prototypeChain:null};if(null===r)return t;if(void 0===r)return t.Type="undefined",t;var n,o=Object.prototype.toString.call(r).slice(8,-1);["String","Number","Boolean","Undefined","Null","Symbol","Function","Object","BigInt"].includes(o)&&(o=o.toLowerCase()),r.prototype||"function"!==o||(o="ArrowFunction"),"object"==typeof r&&r.constructor&&"Object"!==(n=r.constructor.name)&&(o=n,t.hasCustomConstructor=!0),r.hasOwnProperty("toString")&&(o="unknownn");var i=function(r){var e=Object.getPrototypeOf(r),t=[];for(;null!=e;)t.push(e.constructor.name),e=Object.getPrototypeOf(e);return t}(r);return e?(t.prototypeChain=i,t.prototypeChainString=i.join(" -> ")):(i.pop(),i.length>1&&(t.prototypeChain=i,t.prototypeChainString=i.join(" -> "))),t.Type=o,r.name&&!n&&Object.prototype.hasOwnProperty.call(r,"name")&&(t.ReferenceVariable=r.name),t}function t(){return console.warn("Warning: enhancedTypeOf is deprecated. Please use getTypeOf."),r.apply(this,arguments)}function n(r,e){e=void 0===e||e;var t=typeof r;return"string"===t&&e&&(t=typeof(r=Number(r))),"bigint"===t?"bigint":"number"!==t?r&&Object.getPrototypeOf(r)===Number.prototype?"numberObject":"NaN":isNaN(r)?"NaN":Number.isFinite(r)?Number.isSafeInteger(r)?"safeInteger":Number.isSafeInteger(Number(r.toFixed()))?"safeFloat":"unsafeNumber":r<0?"-infinity":"infinity"}function o(r,e){var t=n(r,e=void 0===e||e);return"safeInteger"===t||"safeFloat"===t}function i(){return console.warn("Warning: isSafeNumber is deprecated. Please use isSafeNum."),o.apply(this,arguments)}function a(){return console.warn("Warning: typeOfNumber is deprecated. Please use getNumTypeOf."),n.apply(this,arguments)}function u(e,t,n){t=void 0!==t&&t,n=void 0===n?new Set:n;var o=["string","number","boolean","undefined","null"];t&&o.push("Date","URL","URLSearchParams","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array");var i=r(e);if(o.includes(i))return!0;if("object"===i||"Array"===i){if(n.has(e))return!1;if(n.add(e),"Array"===i){var a=0;for(var c in e)a++;if(a>e.length)return!1}for(var c in e)if(Object.prototype.hasOwnProperty.call(e,c)&&!u(e[c],t,n))return!1;return!0}return!1}function c(r,e){if(e=void 0===e?new WeakSet:e,"object"!=typeof r||null===r)return!1;if(e.has(r))return!0;for(var t in e.add(r),r)if(c(r[t],e))return!0;return!1}function f(){return console.warn("Warning: hasCircularReference is deprecated. Please use hasCircularRef."),c.apply(this,arguments)}export{t as enhancedTypeOf,n as getNumTypeOf,e as getTypeDetails,r as getTypeOf,c as hasCircularRef,f as hasCircularReference,u as isJSONSerializable,o as isSafeNum,i as isSafeNumber,a as typeOfNumber};
//# sourceMappingURL=type-analyser.esm.min.js.map