UNPKG

@moyal/js-type

Version:

Minimal, robust type detection and value classification utility for JavaScript.

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