UNPKG

2.12 kBJavaScriptView Raw
1import DataView from './_DataView';
2import Map from './_Map';
3import Promise from './_Promise';
4import Set from './_Set';
5import WeakMap from './_WeakMap';
6import toSource from './_toSource';
7
8/** `Object#toString` result references. */
9var mapTag = '[object Map]',
10 objectTag = '[object Object]',
11 promiseTag = '[object Promise]',
12 setTag = '[object Set]',
13 weakMapTag = '[object WeakMap]';
14
15var dataViewTag = '[object DataView]';
16
17/** Used for built-in method references. */
18var objectProto = Object.prototype;
19
20/**
21 * Used to resolve the
22 * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
23 * of values.
24 */
25var objectToString = objectProto.toString;
26
27/** Used to detect maps, sets, and weakmaps. */
28var dataViewCtorString = toSource(DataView),
29 mapCtorString = toSource(Map),
30 promiseCtorString = toSource(Promise),
31 setCtorString = toSource(Set),
32 weakMapCtorString = toSource(WeakMap);
33
34/**
35 * Gets the `toStringTag` of `value`.
36 *
37 * @private
38 * @param {*} value The value to query.
39 * @returns {string} Returns the `toStringTag`.
40 */
41function getTag(value) {
42 return objectToString.call(value);
43}
44
45// Fallback for data views, maps, sets, and weak maps in IE 11,
46// for data views in Edge, and promises in Node.js.
47if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
48 (Map && getTag(new Map) != mapTag) ||
49 (Promise && getTag(Promise.resolve()) != promiseTag) ||
50 (Set && getTag(new Set) != setTag) ||
51 (WeakMap && getTag(new WeakMap) != weakMapTag)) {
52 getTag = function(value) {
53 var result = objectToString.call(value),
54 Ctor = result == objectTag ? value.constructor : undefined,
55 ctorString = Ctor ? toSource(Ctor) : undefined;
56
57 if (ctorString) {
58 switch (ctorString) {
59 case dataViewCtorString: return dataViewTag;
60 case mapCtorString: return mapTag;
61 case promiseCtorString: return promiseTag;
62 case setCtorString: return setTag;
63 case weakMapCtorString: return weakMapTag;
64 }
65 }
66 return result;
67 };
68}
69
70export default getTag;