diff --git a/build/files.js b/build/files.js index 81f075c70b..ec2399e9b5 100644 --- a/build/files.js +++ b/build/files.js @@ -180,11 +180,12 @@ const headRegexp = /(^module.exports = \w+;?)/m /(?:var|const) Buffer = require\('buffer'\)\.Buffer;/ , `/**/ const Buffer = require('safe-buffer').Buffer + const OurUint8Array = global.Uint8Array || function () {} function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } function _isUint8Array(obj) { - return Object.prototype.toString.call(obj) === '[object Uint8Array]' || Buffer.isBuffer(obj); + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } /**/ ` diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js index 2279be9f93..ea9f8b8531 100644 --- a/lib/_stream_readable.js +++ b/lib/_stream_readable.js @@ -54,11 +54,12 @@ var Stream = require('./internal/streams/stream'); // properly optimized away early in Ignition+TurboFan. /**/ var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } function _isUint8Array(obj) { - return Object.prototype.toString.call(obj) === '[object Uint8Array]' || Buffer.isBuffer(obj); + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } /**/ diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index ad38c6aa8d..72630a6585 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -80,11 +80,12 @@ var Stream = require('./internal/streams/stream'); /**/ var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } function _isUint8Array(obj) { - return Object.prototype.toString.call(obj) === '[object Uint8Array]' || Buffer.isBuffer(obj); + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } /**/ @@ -408,26 +409,15 @@ function doWrite(stream, state, writev, len, chunk, encoding, cb) { function onwriteError(stream, state, sync, er, cb) { --state.pendingcb; + if (sync) processNextTick(afterError, stream, state, cb, er);else afterError(stream, state, cb, er); - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - processNextTick(cb, er); - // this can emit finish, and it will always happen - // after error - processNextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - // this can emit finish, but finish must - // always follow error - finishMaybe(stream, state); - } + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} + +function afterError(stream, state, cb, err) { + cb(err); + finishMaybe(stream, state); } function onwriteStateUpdate(state) { @@ -660,4 +650,4 @@ Writable.prototype._undestroy = destroyImpl.undestroy; Writable.prototype._destroy = function (err, cb) { this.end(); cb(err); -}; +}; \ No newline at end of file