70 lines
2.1 KiB
JavaScript
70 lines
2.1 KiB
JavaScript
![]() |
var DataView = require('./_DataView'),
|
||
|
Map = require('./_Map'),
|
||
|
Promise = require('./_Promise'),
|
||
|
Set = require('./_Set'),
|
||
|
WeakMap = require('./_WeakMap'),
|
||
|
baseGetTag = require('./_baseGetTag'),
|
||
|
toSource = require('./_toSource');
|
||
|
|
||
|
/** `Object#toString` result references. */
|
||
|
var mapTag = '[object Map]',
|
||
|
objectTag = '[object Object]',
|
||
|
promiseTag = '[object Promise]',
|
||
|
setTag = '[object Set]',
|
||
|
weakMapTag = '[object WeakMap]';
|
||
|
|
||
|
var dataViewTag = '[object DataView]';
|
||
|
|
||
|
/** Used for built-in method references. */
|
||
|
var objectProto = Object.prototype;
|
||
|
|
||
|
/**
|
||
|
* Used to resolve the
|
||
|
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||
|
* of values.
|
||
|
*/
|
||
|
var objectToString = objectProto.toString;
|
||
|
|
||
|
/** Used to detect maps, sets, and weakmaps. */
|
||
|
var dataViewCtorString = toSource(DataView),
|
||
|
mapCtorString = toSource(Map),
|
||
|
promiseCtorString = toSource(Promise),
|
||
|
setCtorString = toSource(Set),
|
||
|
weakMapCtorString = toSource(WeakMap);
|
||
|
|
||
|
/**
|
||
|
* Gets the `toStringTag` of `value`.
|
||
|
*
|
||
|
* @private
|
||
|
* @param {*} value The value to query.
|
||
|
* @returns {string} Returns the `toStringTag`.
|
||
|
*/
|
||
|
var getTag = baseGetTag;
|
||
|
|
||
|
// Fallback for data views, maps, sets, and weak maps in IE 11,
|
||
|
// for data views in Edge < 14, and promises in Node.js.
|
||
|
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
|
||
|
(Map && getTag(new Map) != mapTag) ||
|
||
|
(Promise && getTag(Promise.resolve()) != promiseTag) ||
|
||
|
(Set && getTag(new Set) != setTag) ||
|
||
|
(WeakMap && getTag(new WeakMap) != weakMapTag)) {
|
||
|
getTag = function(value) {
|
||
|
var result = objectToString.call(value),
|
||
|
Ctor = result == objectTag ? value.constructor : undefined,
|
||
|
ctorString = Ctor ? toSource(Ctor) : undefined;
|
||
|
|
||
|
if (ctorString) {
|
||
|
switch (ctorString) {
|
||
|
case dataViewCtorString: return dataViewTag;
|
||
|
case mapCtorString: return mapTag;
|
||
|
case promiseCtorString: return promiseTag;
|
||
|
case setCtorString: return setTag;
|
||
|
case weakMapCtorString: return weakMapTag;
|
||
|
}
|
||
|
}
|
||
|
return result;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = getTag;
|