]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/inflight/inflight.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / inflight / inflight.js
1 var wrappy = require('wrappy')
2 var reqs = Object.create(null)
3 var once = require('once')
4
5 module.exports = wrappy(inflight)
6
7 function inflight (key, cb) {
8   if (reqs[key]) {
9     reqs[key].push(cb)
10     return null
11   } else {
12     reqs[key] = [cb]
13     return makeres(key)
14   }
15 }
16
17 function makeres (key) {
18   return once(function RES () {
19     var cbs = reqs[key]
20     var len = cbs.length
21     var args = slice(arguments)
22     for (var i = 0; i < len; i++) {
23       cbs[i].apply(null, args)
24     }
25     if (cbs.length > len) {
26       // added more in the interim.
27       // de-zalgo, just in case, but don't call again.
28       cbs.splice(0, len)
29       process.nextTick(function () {
30         RES.apply(null, args)
31       })
32     } else {
33       delete reqs[key]
34     }
35   })
36 }
37
38 function slice (args) {
39   var length = args.length
40   var array = []
41
42   for (var i = 0; i < length; i++) array[i] = args[i]
43   return array
44 }