diff --git a/lib/crypto.js b/lib/crypto.js index bfe7837cb4ea54..b32d9aff90b72b 100644 --- a/lib/crypto.js +++ b/lib/crypto.js @@ -20,6 +20,7 @@ const constants = require('constants'); const stream = require('stream'); const util = require('util'); const internalUtil = require('internal/util'); +const LazyTransform = require('internal/streams/lazy_transform'); const DH_GENERATOR = 2; @@ -42,37 +43,6 @@ const assert = require('assert'); const StringDecoder = require('string_decoder').StringDecoder; -function LazyTransform(options) { - this._options = options; -} -util.inherits(LazyTransform, stream.Transform); - -[ - '_readableState', - '_writableState', - '_transformState' -].forEach(function(prop, i, props) { - Object.defineProperty(LazyTransform.prototype, prop, { - get: function() { - stream.Transform.call(this, this._options); - this._writableState.decodeStrings = false; - this._writableState.defaultEncoding = 'binary'; - return this[prop]; - }, - set: function(val) { - Object.defineProperty(this, prop, { - value: val, - enumerable: true, - configurable: true, - writable: true - }); - }, - configurable: true, - enumerable: true - }); -}); - - exports.createHash = exports.Hash = Hash; function Hash(algorithm, options) { if (!(this instanceof Hash)) diff --git a/lib/internal/streams/lazy_transform.js b/lib/internal/streams/lazy_transform.js new file mode 100644 index 00000000000000..7e290b16cf5cae --- /dev/null +++ b/lib/internal/streams/lazy_transform.js @@ -0,0 +1,39 @@ +// 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 stream = require('stream'); +const util = require('util'); + +module.exports = LazyTransform; + +function LazyTransform(options) { + this._options = options; +} +util.inherits(LazyTransform, stream.Transform); + +[ + '_readableState', + '_writableState', + '_transformState' +].forEach(function(prop, i, props) { + Object.defineProperty(LazyTransform.prototype, prop, { + get: function() { + stream.Transform.call(this, this._options); + this._writableState.decodeStrings = false; + this._writableState.defaultEncoding = 'binary'; + return this[prop]; + }, + set: function(val) { + Object.defineProperty(this, prop, { + value: val, + enumerable: true, + configurable: true, + writable: true + }); + }, + configurable: true, + enumerable: true + }); +}); diff --git a/node.gyp b/node.gyp index 0bc27ae4f63b16..e7153ba1f9681e 100644 --- a/node.gyp +++ b/node.gyp @@ -73,6 +73,7 @@ 'lib/internal/socket_list.js', 'lib/internal/repl.js', 'lib/internal/util.js', + 'lib/internal/streams/lazy_transform.js', ], },