CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
index.js356 linesDownload Raw Back to bare-events
1const errors = require('./lib/errors')2 3class EventListener {4  constructor() {5    this.list = []6    this.count = 07  }8 9  append(ctx, name, fn, once) {10    this.count++11    ctx.emit('newListener', name, fn) // Emit BEFORE adding12    this.list.push([fn, once])13  }14 15  prepend(ctx, name, fn, once) {16    this.count++17    ctx.emit('newListener', name, fn) // Emit BEFORE adding18    this.list.unshift([fn, once])19  }20 21  remove(ctx, name, fn) {22    for (let i = 0, n = this.list.length; i < n; i++) {23      const l = this.list[i]24 25      if (l[0] === fn) {26        this.list.splice(i, 1)27 28        if (this.count === 1) delete ctx._events[name]29 30        ctx.emit('removeListener', name, fn) // Emit AFTER removing31 32        this.count--33        return34      }35    }36  }37 38  removeAll(ctx, name) {39    const list = [...this.list]40    this.list = []41 42    if (this.count === list.length) delete ctx._events[name]43 44    for (let i = list.length - 1; i >= 0; i--) {45      ctx.emit('removeListener', name, list[i][0]) // Emit AFTER removing46    }47 48    this.count -= list.length49  }50 51  emit(ctx, name, ...args) {52    const list = [...this.list]53 54    for (let i = 0, n = list.length; i < n; i++) {55      const l = list[i]56 57      if (l[1] === true) this.remove(ctx, name, l[0])58 59      Reflect.apply(l[0], ctx, args)60    }61 62    return list.length > 063  }64}65 66function appendListener(ctx, name, fn, once) {67  const e = ctx._events[name] || (ctx._events[name] = new EventListener())68  e.append(ctx, name, fn, once)69  return ctx70}71 72function prependListener(ctx, name, fn, once) {73  const e = ctx._events[name] || (ctx._events[name] = new EventListener())74  e.prepend(ctx, name, fn, once)75  return ctx76}77 78function removeListener(ctx, name, fn) {79  const e = ctx._events[name]80  if (e !== undefined) e.remove(ctx, name, fn)81  return ctx82}83 84function throwUnhandledError(...args) {85  let err86 87  if (args.length > 0) err = args[0]88 89  if (err instanceof Error === false) err = errors.UNHANDLED_ERROR(err)90 91  if (Error.captureStackTrace) {92    Error.captureStackTrace(err, exports.prototype.emit)93  }94 95  queueMicrotask(() => {96    throw err97  })98}99 100module.exports = exports = class EventEmitter {101  constructor() {102    this._events = Object.create(null)103  }104 105  addListener(name, fn) {106    return appendListener(this, name, fn, false)107  }108 109  addOnceListener(name, fn) {110    return appendListener(this, name, fn, true)111  }112 113  prependListener(name, fn) {114    return prependListener(this, name, fn, false)115  }116 117  prependOnceListener(name, fn) {118    return prependListener(this, name, fn, true)119  }120 121  removeListener(name, fn) {122    return removeListener(this, name, fn)123  }124 125  on(name, fn) {126    return appendListener(this, name, fn, false)127  }128 129  once(name, fn) {130    return appendListener(this, name, fn, true)131  }132 133  off(name, fn) {134    return removeListener(this, name, fn)135  }136 137  emit(name, ...args) {138    if (name === 'error' && this._events.error === undefined) {139      throwUnhandledError(...args)140    }141 142    const e = this._events[name]143    return e === undefined ? false : e.emit(this, name, ...args)144  }145 146  listeners(name) {147    const e = this._events[name]148    return e === undefined ? [] : [...e.list]149  }150 151  listenerCount(name) {152    const e = this._events[name]153    return e === undefined ? 0 : e.list.length154  }155 156  getMaxListeners() {157    return EventEmitter.defaultMaxListeners158  }159 160  setMaxListeners(n) {}161 162  removeAllListeners(name) {163    if (arguments.length === 0) {164      for (const key of Reflect.ownKeys(this._events)) {165        if (key === 'removeListener') continue166        this.removeAllListeners(key)167      }168      this.removeAllListeners('removeListener')169    } else {170      const e = this._events[name]171      if (e !== undefined) e.removeAll(this, name)172    }173    return this174  }175}176 177exports.EventEmitter = exports178 179exports.errors = errors180 181exports.defaultMaxListeners = 10182 183exports.on = function on(emitter, name, opts = {}) {184  const { signal } = opts185 186  if (signal && signal.aborted) {187    throw errors.OPERATION_ABORTED(signal.reason)188  }189 190  let error = null191  let done = false192 193  const events = []194  const promises = []195 196  emitter.on(name, onevent)197 198  if (name !== 'error') emitter.on('error', onerror)199 200  if (signal) signal.addEventListener('abort', onabort)201 202  return {203    next() {204      if (events.length) {205        return Promise.resolve({ value: events.shift(), done: false })206      }207 208      if (error) {209        const err = error210 211        error = null212 213        return Promise.reject(err)214      }215 216      if (done) return onclose()217 218      return new Promise((resolve, reject) =>219        promises.push({ resolve, reject })220      )221    },222 223    return() {224      return onclose()225    },226 227    throw(err) {228      return onerror(err)229    },230 231    [Symbol.asyncIterator]() {232      return this233    }234  }235 236  function onevent(...args) {237    if (promises.length) {238      promises.shift().resolve({ value: args, done: false })239    } else {240      events.push(args)241    }242  }243 244  function onerror(err) {245    if (promises.length) {246      promises.shift().reject(err)247    } else {248      error = err249    }250 251    return Promise.resolve({ done: true })252  }253 254  function onabort() {255    onerror(errors.OPERATION_ABORTED(signal.reason))256  }257 258  function onclose() {259    emitter.off(name, onevent)260 261    if (name !== 'error') emitter.off('error', onerror)262 263    if (signal) signal.removeEventListener('abort', onabort)264 265    done = true266 267    if (promises.length) promises.shift().resolve({ done: true })268 269    return Promise.resolve({ done: true })270  }271}272 273exports.once = function once(emitter, name, opts = {}) {274  const { signal } = opts275 276  if (signal && signal.aborted) {277    throw errors.OPERATION_ABORTED(signal.reason)278  }279 280  return new Promise((resolve, reject) => {281    if (name !== 'error') emitter.on('error', onerror)282 283    if (signal) signal.addEventListener('abort', onabort)284 285    emitter.once(name, (...args) => {286      if (name !== 'error') emitter.off('error', onerror)287 288      if (signal) signal.removeEventListener('abort', onabort)289 290      resolve(args)291    })292 293    function onerror(err) {294      emitter.off('error', onerror)295 296      reject(err)297    }298 299    function onabort() {300      signal.removeEventListener('abort', onabort)301 302      onerror(errors.OPERATION_ABORTED(signal.reason))303    }304  })305}306 307exports.forward = function forward(from, to, names, opts = {}) {308  if (typeof names === 'string') names = [names]309 310  const { emit = to.emit.bind(to) } = opts311 312  const listeners = names.map(313    (name) =>314      function onevent(...args) {315        emit(name, ...args)316      }317  )318 319  to.on('newListener', (name) => {320    const i = names.indexOf(name)321 322    if (i !== -1 && to.listenerCount(name) === 0) {323      from.on(name, listeners[i])324    }325  }).on('removeListener', (name) => {326    const i = names.indexOf(name)327 328    if (i !== -1 && to.listenerCount(name) === 0) {329      from.off(name, listeners[i])330    }331  })332}333 334exports.listenerCount = function listenerCount(emitter, name) {335  return emitter.listenerCount(name)336}337 338exports.getMaxListeners = function getMaxListeners(emitter) {339  if (typeof emitter.getMaxListeners === 'function') {340    return emitter.getMaxListeners()341  }342 343  return exports.defaultMaxListeners344}345 346exports.setMaxListeners = function setMaxListeners(n, ...emitters) {347  if (emitters.length === 0) exports.defaultMaxListeners = n348  else {349    for (const emitter of emitters) {350      if (typeof emitter.setMaxListeners === 'function') {351        emitter.setMaxListeners(n)352      }353    }354  }355}356 
basant307/AI_Governance_Project · CoolFace