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