[SignalingServer] Optimize dependent modules
[platform/framework/web/wrtjs.git] / device_home / node_modules / blob / index.js
1 /**\r
2  * Create a blob builder even when vendor prefixes exist\r
3  */\r
4 \r
5 var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r
6   typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r
7   typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r
8   typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r
9   false;\r
10 \r
11 /**\r
12  * Check if Blob constructor is supported\r
13  */\r
14 \r
15 var blobSupported = (function() {\r
16   try {\r
17     var a = new Blob(['hi']);\r
18     return a.size === 2;\r
19   } catch(e) {\r
20     return false;\r
21   }\r
22 })();\r
23 \r
24 /**\r
25  * Check if Blob constructor supports ArrayBufferViews\r
26  * Fails in Safari 6, so we need to map to ArrayBuffers there.\r
27  */\r
28 \r
29 var blobSupportsArrayBufferView = blobSupported && (function() {\r
30   try {\r
31     var b = new Blob([new Uint8Array([1,2])]);\r
32     return b.size === 2;\r
33   } catch(e) {\r
34     return false;\r
35   }\r
36 })();\r
37 \r
38 /**\r
39  * Check if BlobBuilder is supported\r
40  */\r
41 \r
42 var blobBuilderSupported = BlobBuilder\r
43   && BlobBuilder.prototype.append\r
44   && BlobBuilder.prototype.getBlob;\r
45 \r
46 /**\r
47  * Helper function that maps ArrayBufferViews to ArrayBuffers\r
48  * Used by BlobBuilder constructor and old browsers that didn't\r
49  * support it in the Blob constructor.\r
50  */\r
51 \r
52 function mapArrayBufferViews(ary) {\r
53   return ary.map(function(chunk) {\r
54     if (chunk.buffer instanceof ArrayBuffer) {\r
55       var buf = chunk.buffer;\r
56 \r
57       // if this is a subarray, make a copy so we only\r
58       // include the subarray region from the underlying buffer\r
59       if (chunk.byteLength !== buf.byteLength) {\r
60         var copy = new Uint8Array(chunk.byteLength);\r
61         copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r
62         buf = copy.buffer;\r
63       }\r
64 \r
65       return buf;\r
66     }\r
67 \r
68     return chunk;\r
69   });\r
70 }\r
71 \r
72 function BlobBuilderConstructor(ary, options) {\r
73   options = options || {};\r
74 \r
75   var bb = new BlobBuilder();\r
76   mapArrayBufferViews(ary).forEach(function(part) {\r
77     bb.append(part);\r
78   });\r
79 \r
80   return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r
81 };\r
82 \r
83 function BlobConstructor(ary, options) {\r
84   return new Blob(mapArrayBufferViews(ary), options || {});\r
85 };\r
86 \r
87 if (typeof Blob !== 'undefined') {\r
88   BlobBuilderConstructor.prototype = Blob.prototype;\r
89   BlobConstructor.prototype = Blob.prototype;\r
90 }\r
91 \r
92 module.exports = (function() {\r
93   if (blobSupported) {\r
94     return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r
95   } else if (blobBuilderSupported) {\r
96     return BlobBuilderConstructor;\r
97   } else {\r
98     return undefined;\r
99   }\r
100 })();\r