streams: refactor LazyTransform to internal/
authorBrendan Ashworth <brendan.ashworth@me.com>
Wed, 26 Aug 2015 21:41:28 +0000 (14:41 -0700)
committerJeremiah Senkpiel <fishrock123@rocketmail.com>
Tue, 15 Sep 2015 17:53:21 +0000 (13:53 -0400)
This commit refactors LazyTransform from the crypto implementation
(lib/crypto.js) into an internal module (not publicy accessible) in
internal/streams/lazy_transform.js. This promotes a more modular core
design and removes code bloat in crypto, as LazyTransform didn't
specifically have anything to do with cryptography, but rather a fast
way to support two APIs on a stream.

PR-URL: https://github.com/nodejs/node/pull/2566
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
lib/crypto.js
lib/internal/streams/lazy_transform.js [new file with mode: 0644]
node.gyp

index bfe7837..b32d9af 100644 (file)
@@ -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 (file)
index 0000000..7e290b1
--- /dev/null
@@ -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
+  });
+});
index 0bc27ae..e7153ba 100644 (file)
--- 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',
     ],
   },