root / HServer / 00.Server / 00.Program / node_modules / concat-stream / index.js
이력 | 보기 | 이력해설 | 다운로드 (3.65 KB)
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 |
} |