Initial commit for OpenECOMP SDN-C OA&M
[sdnc/oam.git] / dgbuilder / dgeflows / node_modules / serve-static / node_modules / send / node_modules / on-finished / node_modules / ee-first / index.js
1 \r
2 module.exports = function first(stuff, done) {\r
3   if (!Array.isArray(stuff))\r
4     throw new TypeError('arg must be an array of [ee, events...] arrays')\r
5 \r
6   var cleanups = []\r
7 \r
8   for (var i = 0; i < stuff.length; i++) {\r
9     var arr = stuff[i]\r
10 \r
11     if (!Array.isArray(arr) || arr.length < 2)\r
12       throw new TypeError('each array member must be [ee, events...]')\r
13 \r
14     var ee = arr[0]\r
15 \r
16     for (var j = 1; j < arr.length; j++) {\r
17       var event = arr[j]\r
18       var fn = listener(event, callback)\r
19 \r
20       // listen to the event\r
21       ee.on(event, fn)\r
22       // push this listener to the list of cleanups\r
23       cleanups.push({\r
24         ee: ee,\r
25         event: event,\r
26         fn: fn,\r
27       })\r
28     }\r
29   }\r
30 \r
31   function callback() {\r
32     cleanup()\r
33     done.apply(null, arguments)\r
34   }\r
35 \r
36   function cleanup() {\r
37     var x\r
38     for (var i = 0; i < cleanups.length; i++) {\r
39       x = cleanups[i]\r
40       x.ee.removeListener(x.event, x.fn)\r
41     }\r
42   }\r
43 \r
44   function thunk(fn) {\r
45     done = fn\r
46   }\r
47 \r
48   thunk.cancel = cleanup\r
49 \r
50   return thunk\r
51 }\r
52 \r
53 function listener(event, done) {\r
54   return function onevent(arg1) {\r
55     var args = new Array(arguments.length)\r
56     var ee = this\r
57     var err = event === 'error'\r
58       ? arg1\r
59       : null\r
60 \r
61     // copy args to prevent arguments escaping scope\r
62     for (var i = 0; i < args.length; i++) {\r
63       args[i] = arguments[i]\r
64     }\r
65 \r
66     done(err, ee, event, args)\r
67   }\r
68 }\r