| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 | var toString = Object.prototype.toString;/** * Get the native `typeof` a value. * * @param  {*} `val` * @return {*} Native javascript type */module.exports = function kindOf(val) {  var type = typeof val;  // primitivies  if (type === 'undefined') {    return 'undefined';  }  if (val === null) {    return 'null';  }  if (val === true || val === false || val instanceof Boolean) {    return 'boolean';  }  if (type === 'string' || val instanceof String) {    return 'string';  }  if (type === 'number' || val instanceof Number) {    return 'number';  }  // functions  if (type === 'function' || val instanceof Function) {    if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') {      return 'generatorfunction';    }    return 'function';  }  // array  if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {    return 'array';  }  // check for instances of RegExp and Date before calling `toString`  if (val instanceof RegExp) {    return 'regexp';  }  if (val instanceof Date) {    return 'date';  }  // other objects  type = toString.call(val);  if (type === '[object RegExp]') {    return 'regexp';  }  if (type === '[object Date]') {    return 'date';  }  if (type === '[object Arguments]') {    return 'arguments';  }  if (type === '[object Error]') {    return 'error';  }  if (type === '[object Promise]') {    return 'promise';  }  // buffer  if (isBuffer(val)) {    return 'buffer';  }  // es6: Map, WeakMap, Set, WeakSet  if (type === '[object Set]') {    return 'set';  }  if (type === '[object WeakSet]') {    return 'weakset';  }  if (type === '[object Map]') {    return 'map';  }  if (type === '[object WeakMap]') {    return 'weakmap';  }  if (type === '[object Symbol]') {    return 'symbol';  }    if (type === '[object Map Iterator]') {    return 'mapiterator';  }  if (type === '[object Set Iterator]') {    return 'setiterator';  }  if (type === '[object String Iterator]') {    return 'stringiterator';  }  if (type === '[object Array Iterator]') {    return 'arrayiterator';  }    // typed arrays  if (type === '[object Int8Array]') {    return 'int8array';  }  if (type === '[object Uint8Array]') {    return 'uint8array';  }  if (type === '[object Uint8ClampedArray]') {    return 'uint8clampedarray';  }  if (type === '[object Int16Array]') {    return 'int16array';  }  if (type === '[object Uint16Array]') {    return 'uint16array';  }  if (type === '[object Int32Array]') {    return 'int32array';  }  if (type === '[object Uint32Array]') {    return 'uint32array';  }  if (type === '[object Float32Array]') {    return 'float32array';  }  if (type === '[object Float64Array]') {    return 'float64array';  }  // must be a plain object  return 'object';};/** * If you need to support Safari 5-7 (8-10 yr-old browser), * take a look at https://github.com/feross/is-buffer */function isBuffer(val) {  return val.constructor    && typeof val.constructor.isBuffer === 'function'    && val.constructor.isBuffer(val);}
 |