react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / concat-stream / index.js
80708 viewsvar Writable = require('readable-stream').Writable1var inherits = require('inherits')23if (typeof Uint8Array === 'undefined') {4var U8 = require('typedarray').Uint8Array5} else {6var U8 = Uint8Array7}89function ConcatStream(opts, cb) {10if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)1112if (typeof opts === 'function') {13cb = opts14opts = {}15}16if (!opts) opts = {}1718var encoding = opts.encoding19var shouldInferEncoding = false2021if (!encoding) {22shouldInferEncoding = true23} else {24encoding = String(encoding).toLowerCase()25if (encoding === 'u8' || encoding === 'uint8') {26encoding = 'uint8array'27}28}2930Writable.call(this, { objectMode: true })3132this.encoding = encoding33this.shouldInferEncoding = shouldInferEncoding3435if (cb) this.on('finish', function () { cb(this.getBody()) })36this.body = []37}3839module.exports = ConcatStream40inherits(ConcatStream, Writable)4142ConcatStream.prototype._write = function(chunk, enc, next) {43this.body.push(chunk)44next()45}4647ConcatStream.prototype.inferEncoding = function (buff) {48var firstBuffer = buff === undefined ? this.body[0] : buff;49if (Buffer.isBuffer(firstBuffer)) return 'buffer'50if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'51if (Array.isArray(firstBuffer)) return 'array'52if (typeof firstBuffer === 'string') return 'string'53if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object'54return 'buffer'55}5657ConcatStream.prototype.getBody = function () {58if (!this.encoding && this.body.length === 0) return []59if (this.shouldInferEncoding) this.encoding = this.inferEncoding()60if (this.encoding === 'array') return arrayConcat(this.body)61if (this.encoding === 'string') return stringConcat(this.body)62if (this.encoding === 'buffer') return bufferConcat(this.body)63if (this.encoding === 'uint8array') return u8Concat(this.body)64return this.body65}6667var isArray = Array.isArray || function (arr) {68return Object.prototype.toString.call(arr) == '[object Array]'69}7071function isArrayish (arr) {72return /Array\]$/.test(Object.prototype.toString.call(arr))73}7475function stringConcat (parts) {76var strings = []77var needsToString = false78for (var i = 0; i < parts.length; i++) {79var p = parts[i]80if (typeof p === 'string') {81strings.push(p)82} else if (Buffer.isBuffer(p)) {83strings.push(p)84} else {85strings.push(Buffer(p))86}87}88if (Buffer.isBuffer(parts[0])) {89strings = Buffer.concat(strings)90strings = strings.toString('utf8')91} else {92strings = strings.join('')93}94return strings95}9697function bufferConcat (parts) {98var bufs = []99for (var i = 0; i < parts.length; i++) {100var p = parts[i]101if (Buffer.isBuffer(p)) {102bufs.push(p)103} else if (typeof p === 'string' || isArrayish(p)104|| (p && typeof p.subarray === 'function')) {105bufs.push(Buffer(p))106} else bufs.push(Buffer(String(p)))107}108return Buffer.concat(bufs)109}110111function arrayConcat (parts) {112var res = []113for (var i = 0; i < parts.length; i++) {114res.push.apply(res, parts[i])115}116return res117}118119function u8Concat (parts) {120var len = 0121for (var i = 0; i < parts.length; i++) {122if (typeof parts[i] === 'string') {123parts[i] = Buffer(parts[i])124}125len += parts[i].length126}127var u8 = new U8(len)128for (var i = 0, offset = 0; i < parts.length; i++) {129var part = parts[i]130for (var j = 0; j < part.length; j++) {131u8[offset++] = part[j]132}133}134return u8135}136137138