UNPKG

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.42 kB
var typeAnalyser=function(e){"use strict";function r(e){if(null===e)return"null";var r=typeof e,t=r;if("object"!==r&&"function"!==r&&"string"!==r)return r;if(e.hasOwnProperty("toString"))return"unknown";if("string"===r)return e.valueOf&&"Symbol"===e.valueOf().toString().slice(0,6)?"symbol":"string";if(r=Object.prototype.toString.call(e).slice(8,-1),!e.prototype&&"Function"===r)return"ArrowFunction";if("Object"!==r&&"Function"!==r||(r=r.toLowerCase()),"object"===t&&e.constructor){var n=e.constructor.name;if("Object"!==n)return n}return r}function t(e,r){r=void 0===r||r;var t=typeof e;return"string"===t&&r&&(t=typeof(e=Number(e))),"bigint"===t?"bigint":"number"!==t?e&&Object.getPrototypeOf(e)===Number.prototype?"numberObject":"NaN":isNaN(e)?"NaN":Number.isFinite(e)?Number.isSafeInteger(e)?"safeInteger":Number.isSafeInteger(Number(e.toFixed()))?"safeFloat":"unsafeNumber":e<0?"-infinity":"infinity"}function n(e,r){var n=t(e,r=void 0===r||r);return"safeInteger"===n||"safeFloat"===n}function i(e,r){if(r=void 0===r?new WeakSet:r,"object"!=typeof e||null===e)return!1;if(r.has(e))return!0;for(var t in r.add(e),e)if(i(e[t],r))return!0;return!1}return e.enhancedTypeOf=function(){return console.warn("Warning: enhancedTypeOf is deprecated. Please use getTypeOf."),r.apply(this,arguments)},e.getNumTypeOf=t,e.getTypeDetails=function(e,r){r=void 0===r||r;var t={Type:"null",ReferenceVariable:"",hasCustomConstructor:!1,prototypeChainString:"",prototypeChain:null};if(null===e)return t;if(void 0===e)return t.Type="undefined",t;var n,i=Object.prototype.toString.call(e).slice(8,-1);["String","Number","Boolean","Undefined","Null","Symbol","Function","Object","BigInt"].includes(i)&&(i=i.toLowerCase()),e.prototype||"function"!==i||(i="ArrowFunction"),"object"==typeof e&&e.constructor&&"Object"!==(n=e.constructor.name)&&(i=n,t.hasCustomConstructor=!0),e.hasOwnProperty("toString")&&(i="unknownn");var o=function(e){var r=Object.getPrototypeOf(e),t=[];for(;null!=r;)t.push(r.constructor.name),r=Object.getPrototypeOf(r);return t}(e);return r?(t.prototypeChain=o,t.prototypeChainString=o.join(" -> ")):(o.pop(),o.length>1&&(t.prototypeChain=o,t.prototypeChainString=o.join(" -> "))),t.Type=i,e.name&&!n&&Object.prototype.hasOwnProperty.call(e,"name")&&(t.ReferenceVariable=e.name),t},e.getTypeOf=r,e.hasCircularRef=i,e.hasCircularReference=function(){return console.warn("Warning: hasCircularReference is deprecated. Please use hasCircularRef."),i.apply(this,arguments)},e.isJSONSerializable=function e(t,n,i){n=void 0!==n&&n,i=void 0===i?new Set:i;var o=["string","number","boolean","undefined","null"];n&&o.push("Date","URL","URLSearchParams","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array");var a=r(t);if(o.includes(a))return!0;if("object"===a||"Array"===a){if(i.has(t))return!1;if(i.add(t),"Array"===a){var u=0;for(var c in t)u++;if(u>t.length)return!1}for(var c in t)if(Object.prototype.hasOwnProperty.call(t,c)&&!e(t[c],n,i))return!1;return!0}return!1},e.isSafeNum=n,e.isSafeNumber=function(){return console.warn("Warning: isSafeNumber is deprecated. Please use isSafeNum."),n.apply(this,arguments)},e.typeOfNumber=function(){return console.warn("Warning: typeOfNumber is deprecated. Please use getNumTypeOf."),t.apply(this,arguments)},e}({}); //# sourceMappingURL=type-analyser.iife.min.js.map