aboutsummaryrefslogtreecommitdiff
path: root/node_modules/event-emitter/pipe.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/event-emitter/pipe.js')
-rw-r--r--node_modules/event-emitter/pipe.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/node_modules/event-emitter/pipe.js b/node_modules/event-emitter/pipe.js
new file mode 100644
index 000000000..0088efefa
--- /dev/null
+++ b/node_modules/event-emitter/pipe.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var aFrom = require('es5-ext/array/from')
+ , remove = require('es5-ext/array/#/remove')
+ , value = require('es5-ext/object/valid-object')
+ , d = require('d')
+ , emit = require('./').methods.emit
+
+ , defineProperty = Object.defineProperty
+ , hasOwnProperty = Object.prototype.hasOwnProperty
+ , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+
+module.exports = function (e1, e2/*, name*/) {
+ var pipes, pipe, desc, name;
+
+ (value(e1) && value(e2));
+ name = arguments[2];
+ if (name === undefined) name = 'emit';
+
+ pipe = {
+ close: function () { remove.call(pipes, e2); }
+ };
+ if (hasOwnProperty.call(e1, '__eePipes__')) {
+ (pipes = e1.__eePipes__).push(e2);
+ return pipe;
+ }
+ defineProperty(e1, '__eePipes__', d('c', pipes = [e2]));
+ desc = getOwnPropertyDescriptor(e1, name);
+ if (!desc) {
+ desc = d('c', undefined);
+ } else {
+ delete desc.get;
+ delete desc.set;
+ }
+ desc.value = function () {
+ var i, emitter, data = aFrom(pipes);
+ emit.apply(this, arguments);
+ for (i = 0; (emitter = data[i]); ++i) emit.apply(emitter, arguments);
+ };
+ defineProperty(e1, name, desc);
+ return pipe;
+};