Initial commit for OpenECOMP SDN-C OA&M
[sdnc/oam.git] / dgbuilder / dgeflows / node_modules / body-parser / node_modules / on-finished / node_modules / ee-first / index.js
diff --git a/dgbuilder/dgeflows/node_modules/body-parser/node_modules/on-finished/node_modules/ee-first/index.js b/dgbuilder/dgeflows/node_modules/body-parser/node_modules/on-finished/node_modules/ee-first/index.js
new file mode 100644 (file)
index 0000000..1d66203
--- /dev/null
@@ -0,0 +1,68 @@
+\r
+module.exports = function first(stuff, done) {\r
+  if (!Array.isArray(stuff))\r
+    throw new TypeError('arg must be an array of [ee, events...] arrays')\r
+\r
+  var cleanups = []\r
+\r
+  for (var i = 0; i < stuff.length; i++) {\r
+    var arr = stuff[i]\r
+\r
+    if (!Array.isArray(arr) || arr.length < 2)\r
+      throw new TypeError('each array member must be [ee, events...]')\r
+\r
+    var ee = arr[0]\r
+\r
+    for (var j = 1; j < arr.length; j++) {\r
+      var event = arr[j]\r
+      var fn = listener(event, callback)\r
+\r
+      // listen to the event\r
+      ee.on(event, fn)\r
+      // push this listener to the list of cleanups\r
+      cleanups.push({\r
+        ee: ee,\r
+        event: event,\r
+        fn: fn,\r
+      })\r
+    }\r
+  }\r
+\r
+  function callback() {\r
+    cleanup()\r
+    done.apply(null, arguments)\r
+  }\r
+\r
+  function cleanup() {\r
+    var x\r
+    for (var i = 0; i < cleanups.length; i++) {\r
+      x = cleanups[i]\r
+      x.ee.removeListener(x.event, x.fn)\r
+    }\r
+  }\r
+\r
+  function thunk(fn) {\r
+    done = fn\r
+  }\r
+\r
+  thunk.cancel = cleanup\r
+\r
+  return thunk\r
+}\r
+\r
+function listener(event, done) {\r
+  return function onevent(arg1) {\r
+    var args = new Array(arguments.length)\r
+    var ee = this\r
+    var err = event === 'error'\r
+      ? arg1\r
+      : null\r
+\r
+    // copy args to prevent arguments escaping scope\r
+    for (var i = 0; i < args.length; i++) {\r
+      args[i] = arguments[i]\r
+    }\r
+\r
+    done(err, ee, event, args)\r
+  }\r
+}\r