@moyal/js-type
Version:
Minimal, robust type detection and value classification utility for JavaScript.
7 lines (6 loc) • 3.56 kB
JavaScript
/*!
* @moyal/js-type v1.0.3
* (c) 2000–present Ilan Moyal
* Released under the MIT License
*/
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).MoyalType={})}(this,(function(n){"use strict";class t{static version="1.0.3"}const e=["string","number","bigint","boolean","symbol"],r=Object.prototype.toString;function i(n){if(null===n)return"null";let t=typeof n;if("function"===t)(function(n){const t=Function.prototype.toString.call(n);return/^class\s/.test(t)})(n)&&(t="class");else if("object"===t&&(t=r.call(n).slice(8,-1).toLowerCase(),!e.includes(t))){const e=n.constructor;e&&"string"==typeof e.name&&(t=e.name,"Object"!==t&&"Array"!==t||(t=t.toLowerCase()))}return t}function o(n){return"string"===i(n)}function u(n,{allowNaN:t=!0,allowInfinity:e=!0}={}){if("number"!==i(n))return!1;const r=Number(n);return!(!t&&Number.isNaN(r))&&!(!e&&!Number.isFinite(r))}function c(n){return"bigint"===i(n)}function s(n){return"boolean"===i(n)}function l(n){if("[object Object]"!==r.call(n))return!1;const t=Object.getPrototypeOf(n);return t===Object.prototype||null===t}function f(n){const t=typeof n,e=r.call(n);return!("object"!==t&&"function"!==t||"[object Function]"!==e&&"[object GeneratorFunction]"!==e)}class a{constructor(n,t,e){this.originalValue=n,this.parsedValue=t,this.type=e}}function b(n){return"Map"===i(n)}function y(n){return"Set"===i(n)}function p(n){return null==n||(o(n)||Array.isArray(n)?0===n.length:b(n)||y(n)?0===n.size:!!l(n)&&0===Object.keys(n).length)}n.InferDataTypeResult=a,n.getTypeName=i,n.inferDataType=function(n){const t=i(n);if("string"!==t)return new a(n,n,t);const e=n.trim();if("true"===e||"false"===e)return new a(n,"true"===e,"boolean");const r=parseFloat(e);if(!isNaN(r)){if(r.toString()===Number(e).toString())return new a(n,r,"number")}return new a(n,n,"string")},n.isArray=function(n){return Array.isArray(n)},n.isAsyncFunction=function(n){return"[object AsyncFunction]"===r.call(n)},n.isBigInt=c,n.isBoolean=s,n.isDate=function(n){return"Date"===i(n)},n.isEmpty=p,n.isError=function(n){return null!=n&&"[object Error]"===r.call(n)},n.isFunction=function(n){return"function"===i(n)},n.isFunctionOrGeneratorFunction=f,n.isGeneratorFunction=function(n){return"[object GeneratorFunction]"===r.call(n)},n.isIntegral=function(n,t=null){return(c(n)||u(n)&&Math.floor(n)===n)&&(null==t||!0===t(n))},n.isIterable=function(n){return f(n?.[Symbol.iterator])},n.isMap=b,n.isNotEmpty=function(n){return!p(n)},n.isNull=function(n){return null===n},n.isNumber=u,n.isNumeric=function(n){return u(n)||c(n)},n.isObject=function(n){if(null===n||"object"!=typeof n||Array.isArray(n))return!1;const t=r.call(n);return!["[object String]","[object Number]","[object Boolean]","[object BigInt]","[object Symbol]","[object Function]"].includes(t)},n.isPlainObject=l,n.isPrimitive=function(n){return null!=n&&e.includes(i(n))},n.isPromise=function(n){return"Promise"===i(n)},n.isRegExp=function(n){return"RegExp"===i(n)},n.isSet=y,n.isString=o,n.isSymbol=function(n){return"symbol"===i(n)},n.isType=function(n,t){return i(n)===t},n.isUndefined=function(n){return void 0===n},n.isUserDefinedClass=function(n){return"class"===i(n)},n.isWeakMap=function(n){return"WeakMap"===i(n)},n.isWeakSet=function(n){return"WeakSet"===i(n)},n.parseBool=function(n){if(s(n))return n;if(o(n)){const t=n.trim().toLowerCase();if("true"===t)return!0;if("false"===t)return!1}},n.version=function(){return t.version}}));