Initial commit
[yaffs-website] / node_modules / grunt-contrib-watch / node_modules / lodash / internal / initCloneByTag.js
1 var bufferClone = require('./bufferClone');
2
3 /** `Object#toString` result references. */
4 var boolTag = '[object Boolean]',
5     dateTag = '[object Date]',
6     numberTag = '[object Number]',
7     regexpTag = '[object RegExp]',
8     stringTag = '[object String]';
9
10 var arrayBufferTag = '[object ArrayBuffer]',
11     float32Tag = '[object Float32Array]',
12     float64Tag = '[object Float64Array]',
13     int8Tag = '[object Int8Array]',
14     int16Tag = '[object Int16Array]',
15     int32Tag = '[object Int32Array]',
16     uint8Tag = '[object Uint8Array]',
17     uint8ClampedTag = '[object Uint8ClampedArray]',
18     uint16Tag = '[object Uint16Array]',
19     uint32Tag = '[object Uint32Array]';
20
21 /** Used to match `RegExp` flags from their coerced string values. */
22 var reFlags = /\w*$/;
23
24 /**
25  * Initializes an object clone based on its `toStringTag`.
26  *
27  * **Note:** This function only supports cloning values with tags of
28  * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
29  *
30  * @private
31  * @param {Object} object The object to clone.
32  * @param {string} tag The `toStringTag` of the object to clone.
33  * @param {boolean} [isDeep] Specify a deep clone.
34  * @returns {Object} Returns the initialized clone.
35  */
36 function initCloneByTag(object, tag, isDeep) {
37   var Ctor = object.constructor;
38   switch (tag) {
39     case arrayBufferTag:
40       return bufferClone(object);
41
42     case boolTag:
43     case dateTag:
44       return new Ctor(+object);
45
46     case float32Tag: case float64Tag:
47     case int8Tag: case int16Tag: case int32Tag:
48     case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
49       var buffer = object.buffer;
50       return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);
51
52     case numberTag:
53     case stringTag:
54       return new Ctor(object);
55
56     case regexpTag:
57       var result = new Ctor(object.source, reFlags.exec(object));
58       result.lastIndex = object.lastIndex;
59   }
60   return result;
61 }
62
63 module.exports = initCloneByTag;