mirror of
https://github.com/nodejs/node.git
synced 2025-05-22 08:35:19 +00:00

This only affects the writable side of LazyTransform and should not change the behavior of any LazyTransform streams (Cipher, Decipher, Cipheriv, Decipheriv, Hash, Hmac). If the user does not set defaultEncoding when creating a transform stream, WritableState uses 'utf8' by default. Only LazyTransform overwrites this with 'buffer' for strict backward compatibility. This was necessary when crypto.DEFAULT_ENCODING still existed. Now that DEFAULT_ENCODING has been removed, defaultEncoding is always 'buffer'. The writable side of LazyTransform appears to treat 'utf8' and 'buffer' in exactly the same way. Therefore, there seems to be no need to overwrite _writableState.defaultEncoding at this point. Nevertheless, because Node.js has failed to hide implementation details such as _writableState from the ecosystem, we may want to consider this a breaking change. Refs: https://github.com/nodejs/node/pull/47182 Refs: https://github.com/nodejs/node/pull/8611 PR-URL: https://github.com/nodejs/node/pull/49140 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
// LazyTransform is a special type of Transform stream that is lazily loaded.
|
|
// This is used for performance with bi-API-ship: when two APIs are available
|
|
// for the stream, one conventional and one non-conventional.
|
|
'use strict';
|
|
|
|
const {
|
|
ObjectDefineProperties,
|
|
ObjectDefineProperty,
|
|
ObjectSetPrototypeOf,
|
|
} = primordials;
|
|
|
|
const stream = require('stream');
|
|
|
|
module.exports = LazyTransform;
|
|
|
|
function LazyTransform(options) {
|
|
this._options = options;
|
|
}
|
|
ObjectSetPrototypeOf(LazyTransform.prototype, stream.Transform.prototype);
|
|
ObjectSetPrototypeOf(LazyTransform, stream.Transform);
|
|
|
|
function makeGetter(name) {
|
|
return function() {
|
|
stream.Transform.call(this, this._options);
|
|
this._writableState.decodeStrings = false;
|
|
return this[name];
|
|
};
|
|
}
|
|
|
|
function makeSetter(name) {
|
|
return function(val) {
|
|
ObjectDefineProperty(this, name, {
|
|
__proto__: null,
|
|
value: val,
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
});
|
|
};
|
|
}
|
|
|
|
ObjectDefineProperties(LazyTransform.prototype, {
|
|
_readableState: {
|
|
__proto__: null,
|
|
get: makeGetter('_readableState'),
|
|
set: makeSetter('_readableState'),
|
|
configurable: true,
|
|
enumerable: true,
|
|
},
|
|
_writableState: {
|
|
__proto__: null,
|
|
get: makeGetter('_writableState'),
|
|
set: makeSetter('_writableState'),
|
|
configurable: true,
|
|
enumerable: true,
|
|
},
|
|
});
|