]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/npm-registry-client/node_modules/concat-stream/index.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / npm-registry-client / node_modules / concat-stream / index.js
1 var Writable = require('readable-stream').Writable
2 var inherits = require('inherits')
3
4 if (typeof Uint8Array === 'undefined') {
5   var U8 = require('typedarray').Uint8Array
6 } else {
7   var U8 = Uint8Array
8 }
9
10 function ConcatStream(opts, cb) {
11   if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)
12
13   if (typeof opts === 'function') {
14     cb = opts
15     opts = {}
16   }
17   if (!opts) opts = {}
18
19   var encoding = opts.encoding
20   var shouldInferEncoding = false
21
22   if (!encoding) {
23     shouldInferEncoding = true
24   } else {
25     encoding =  String(encoding).toLowerCase()
26     if (encoding === 'u8' || encoding === 'uint8') {
27       encoding = 'uint8array'
28     }
29   }
30
31   Writable.call(this, { objectMode: true })
32
33   this.encoding = encoding
34   this.shouldInferEncoding = shouldInferEncoding
35
36   if (cb) this.on('finish', function () { cb(this.getBody()) })
37   this.body = []
38 }
39
40 module.exports = ConcatStream
41 inherits(ConcatStream, Writable)
42
43 ConcatStream.prototype._write = function(chunk, enc, next) {
44   this.body.push(chunk)
45   next()
46 }
47
48 ConcatStream.prototype.inferEncoding = function (buff) {
49   var firstBuffer = buff === undefined ? this.body[0] : buff;
50   if (Buffer.isBuffer(firstBuffer)) return 'buffer'
51   if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'
52   if (Array.isArray(firstBuffer)) return 'array'
53   if (typeof firstBuffer === 'string') return 'string'
54   if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object'
55   return 'buffer'
56 }
57
58 ConcatStream.prototype.getBody = function () {
59   if (!this.encoding && this.body.length === 0) return []
60   if (this.shouldInferEncoding) this.encoding = this.inferEncoding()
61   if (this.encoding === 'array') return arrayConcat(this.body)
62   if (this.encoding === 'string') return stringConcat(this.body)
63   if (this.encoding === 'buffer') return bufferConcat(this.body)
64   if (this.encoding === 'uint8array') return u8Concat(this.body)
65   return this.body
66 }
67
68 var isArray = Array.isArray || function (arr) {
69   return Object.prototype.toString.call(arr) == '[object Array]'
70 }
71
72 function isArrayish (arr) {
73   return /Array\]$/.test(Object.prototype.toString.call(arr))
74 }
75
76 function isBufferish (p) {
77   return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function')
78 }
79
80 function stringConcat (parts) {
81   var strings = []
82   var needsToString = false
83   for (var i = 0; i < parts.length; i++) {
84     var p = parts[i]
85     if (typeof p === 'string') {
86       strings.push(p)
87     } else if (Buffer.isBuffer(p)) {
88       strings.push(p)
89     } else if (isBufferish(p)) {
90       strings.push(new Buffer(p))
91     } else {
92       strings.push(new Buffer(String(p)))
93     }
94   }
95   if (Buffer.isBuffer(parts[0])) {
96     strings = Buffer.concat(strings)
97     strings = strings.toString('utf8')
98   } else {
99     strings = strings.join('')
100   }
101   return strings
102 }
103
104 function bufferConcat (parts) {
105   var bufs = []
106   for (var i = 0; i < parts.length; i++) {
107     var p = parts[i]
108     if (Buffer.isBuffer(p)) {
109       bufs.push(p)
110     } else if (isBufferish(p)) {
111       bufs.push(new Buffer(p))
112     } else {
113       bufs.push(new Buffer(String(p)))
114     }
115   }
116   return Buffer.concat(bufs)
117 }
118
119 function arrayConcat (parts) {
120   var res = []
121   for (var i = 0; i < parts.length; i++) {
122     res.push.apply(res, parts[i])
123   }
124   return res
125 }
126
127 function u8Concat (parts) {
128   var len = 0
129   for (var i = 0; i < parts.length; i++) {
130     if (typeof parts[i] === 'string') {
131       parts[i] = new Buffer(parts[i])
132     }
133     len += parts[i].length
134   }
135   var u8 = new U8(len)
136   for (var i = 0, offset = 0; i < parts.length; i++) {
137     var part = parts[i]
138     for (var j = 0; j < part.length; j++) {
139       u8[offset++] = part[j]
140     }
141   }
142   return u8
143 }