Skip to content

Commit

Permalink
stream: combine properties using defineProperties
Browse files Browse the repository at this point in the history
Backport-PR-URL: #32164
PR-URL: #31187
Refs: #31144
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
  • Loading branch information
antsmartian authored and MylesBorins committed Mar 10, 2020
1 parent 4640ea2 commit 90a4d43
Showing 1 changed file with 49 additions and 82 deletions.
131 changes: 49 additions & 82 deletions lib/_stream_writable.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const {
Array,
FunctionPrototype,
ObjectDefineProperty,
ObjectDefineProperties,
ObjectSetPrototypeOf,
Symbol,
SymbolHasInstance,
Expand Down Expand Up @@ -358,46 +359,6 @@ Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
return this;
};

ObjectDefineProperty(Writable.prototype, 'writableBuffer', {
// Making it explicit this property is not enumerable
// because otherwise some prototype manipulation in
// userland will fail
enumerable: false,
get: function() {
return this._writableState && this._writableState.getBuffer();
}
});

ObjectDefineProperty(Writable.prototype, 'writableEnded', {
// Making it explicit this property is not enumerable
// because otherwise some prototype manipulation in
// userland will fail
enumerable: false,
get: function() {
return this._writableState ? this._writableState.ending : false;
}
});

ObjectDefineProperty(Writable.prototype, 'writableHighWaterMark', {
// Making it explicit this property is not enumerable
// because otherwise some prototype manipulation in
// userland will fail
enumerable: false,
get: function() {
return this._writableState && this._writableState.highWaterMark;
}
});

ObjectDefineProperty(Writable.prototype, 'writableCorked', {
// Making it explicit this property is not enumerable
// because otherwise some prototype manipulation in
// userland will fail
enumerable: false,
get: function() {
return this._writableState ? this._writableState.corked : 0;
}
});

// If we're already writing something, then just put this
// in the queue, and wait our turn. Otherwise, call _write
// If we return false, then we need a drain event, so set that flag.
Expand Down Expand Up @@ -669,16 +630,6 @@ Writable.prototype.end = function(chunk, encoding, cb) {
return this;
};

ObjectDefineProperty(Writable.prototype, 'writableLength', {
// Making it explicit this property is not enumerable
// because otherwise some prototype manipulation in
// userland will fail
enumerable: false,
get() {
return this._writableState.length;
}
});

function needFinish(state) {
return (state.ending &&
state.length === 0 &&
Expand Down Expand Up @@ -762,44 +713,60 @@ function onCorkedFinish(corkReq, state, err) {
state.corkedRequestsFree.next = corkReq;
}

ObjectDefineProperty(Writable.prototype, 'destroyed', {
// Making it explicit this property is not enumerable
// because otherwise some prototype manipulation in
// userland will fail
enumerable: false,
get() {
if (this._writableState === undefined) {
return false;
ObjectDefineProperties(Writable.prototype, {

destroyed: {
get() {
return this._writableState ? this._writableState.destroyed : false;
},
set(value) {
// Backward compatibility, the user is explicitly managing destroyed
if (this._writableState) {
this._writableState.destroyed = value;
}
}
return this._writableState.destroyed;
},
set(value) {
// We ignore the value if the stream
// has not been initialized yet
if (!this._writableState) {
return;

writableFinished: {
get() {
return this._writableState ? this._writableState.finished : false;
}
},

// Backward compatibility, the user is explicitly
// managing destroyed
this._writableState.destroyed = value;
}
});
writableObjectMode: {
get() {
return this._writableState ? this._writableState.objectMode : false;
}
},

ObjectDefineProperty(Writable.prototype, 'writableObjectMode', {
enumerable: false,
get() {
return this._writableState ? this._writableState.objectMode : false;
}
});
writableBuffer: {
get() {
return this._writableState && this._writableState.getBuffer();
}
},

writableEnded: {
get() {
return this._writableState ? this._writableState.ending : false;
}
},

writableHighWaterMark: {
get() {
return this._writableState && this._writableState.highWaterMark;
}
},

ObjectDefineProperty(Writable.prototype, 'writableFinished', {
// Making it explicit this property is not enumerable
// because otherwise some prototype manipulation in
// userland will fail
enumerable: false,
get() {
return this._writableState ? this._writableState.finished : false;
writableCorked: {
get() {
return this._writableState ? this._writableState.corked : 0;
}
},

writableLength: {
get() {
return this._writableState && this._writableState.length;
}
}
});

Expand Down

0 comments on commit 90a4d43

Please sign in to comment.