CoolFace
Apppublic

opusdev/vector-similarity-api

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes
index.js96 linesDownload Raw Back to ee-first
1/*!2 * ee-first3 * Copyright(c) 2014 Jonathan Ong4 * MIT Licensed5 */6 7'use strict'8 9/**10 * Module exports.11 * @public12 */13 14module.exports = first15 16/**17 * Get the first event in a set of event emitters and event pairs.18 *19 * @param {array} stuff20 * @param {function} done21 * @public22 */23 24function first(stuff, done) {25  if (!Array.isArray(stuff))26    throw new TypeError('arg must be an array of [ee, events...] arrays')27 28  var cleanups = []29 30  for (var i = 0; i < stuff.length; i++) {31    var arr = stuff[i]32 33    if (!Array.isArray(arr) || arr.length < 2)34      throw new TypeError('each array member must be [ee, events...]')35 36    var ee = arr[0]37 38    for (var j = 1; j < arr.length; j++) {39      var event = arr[j]40      var fn = listener(event, callback)41 42      // listen to the event43      ee.on(event, fn)44      // push this listener to the list of cleanups45      cleanups.push({46        ee: ee,47        event: event,48        fn: fn,49      })50    }51  }52 53  function callback() {54    cleanup()55    done.apply(null, arguments)56  }57 58  function cleanup() {59    var x60    for (var i = 0; i < cleanups.length; i++) {61      x = cleanups[i]62      x.ee.removeListener(x.event, x.fn)63    }64  }65 66  function thunk(fn) {67    done = fn68  }69 70  thunk.cancel = cleanup71 72  return thunk73}74 75/**76 * Create the event listener.77 * @private78 */79 80function listener(event, done) {81  return function onevent(arg1) {82    var args = new Array(arguments.length)83    var ee = this84    var err = event === 'error'85      ? arg186      : null87 88    // copy args to prevent arguments escaping scope89    for (var i = 0; i < args.length; i++) {90      args[i] = arguments[i]91    }92 93    done(err, ee, event, args)94  }95}96