UNPKG

2.26 kBJavaScriptView Raw
1var cloneArrayBuffer = require('./_cloneArrayBuffer'),
2 cloneDataView = require('./_cloneDataView'),
3 cloneRegExp = require('./_cloneRegExp'),
4 cloneSymbol = require('./_cloneSymbol'),
5 cloneTypedArray = require('./_cloneTypedArray');
6
7/** `Object#toString` result references. */
8var boolTag = '[object Boolean]',
9 dateTag = '[object Date]',
10 mapTag = '[object Map]',
11 numberTag = '[object Number]',
12 regexpTag = '[object RegExp]',
13 setTag = '[object Set]',
14 stringTag = '[object String]',
15 symbolTag = '[object Symbol]';
16
17var arrayBufferTag = '[object ArrayBuffer]',
18 dataViewTag = '[object DataView]',
19 float32Tag = '[object Float32Array]',
20 float64Tag = '[object Float64Array]',
21 int8Tag = '[object Int8Array]',
22 int16Tag = '[object Int16Array]',
23 int32Tag = '[object Int32Array]',
24 uint8Tag = '[object Uint8Array]',
25 uint8ClampedTag = '[object Uint8ClampedArray]',
26 uint16Tag = '[object Uint16Array]',
27 uint32Tag = '[object Uint32Array]';
28
29/**
30 * Initializes an object clone based on its `toStringTag`.
31 *
32 * **Note:** This function only supports cloning values with tags of
33 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
34 *
35 * @private
36 * @param {Object} object The object to clone.
37 * @param {string} tag The `toStringTag` of the object to clone.
38 * @param {boolean} [isDeep] Specify a deep clone.
39 * @returns {Object} Returns the initialized clone.
40 */
41function initCloneByTag(object, tag, isDeep) {
42 var Ctor = object.constructor;
43 switch (tag) {
44 case arrayBufferTag:
45 return cloneArrayBuffer(object);
46
47 case boolTag:
48 case dateTag:
49 return new Ctor(+object);
50
51 case dataViewTag:
52 return cloneDataView(object, isDeep);
53
54 case float32Tag: case float64Tag:
55 case int8Tag: case int16Tag: case int32Tag:
56 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
57 return cloneTypedArray(object, isDeep);
58
59 case mapTag:
60 return new Ctor;
61
62 case numberTag:
63 case stringTag:
64 return new Ctor(object);
65
66 case regexpTag:
67 return cloneRegExp(object);
68
69 case setTag:
70 return new Ctor;
71
72 case symbolTag:
73 return cloneSymbol(object);
74 }
75}
76
77module.exports = initCloneByTag;