CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
BatchInterceptor.ts96 linesDownload Raw Back to src
1import { EventMap, Listener } from 'strict-event-emitter'2import { Interceptor, ExtractEventNames } from './Interceptor'3 4export interface BatchInterceptorOptions<5  InterceptorList extends ReadonlyArray<Interceptor<any>>6> {7  name: string8  interceptors: InterceptorList9}10 11export type ExtractEventMapType<12  InterceptorList extends ReadonlyArray<Interceptor<any>>13> = InterceptorList extends ReadonlyArray<infer InterceptorType>14  ? InterceptorType extends Interceptor<infer EventMap>15    ? EventMap16    : never17  : never18 19/**20 * A batch interceptor that exposes a single interface21 * to apply and operate with multiple interceptors at once.22 */23export class BatchInterceptor<24  InterceptorList extends ReadonlyArray<Interceptor<any>>,25  Events extends EventMap = ExtractEventMapType<InterceptorList>26> extends Interceptor<Events> {27  static symbol: symbol28 29  private interceptors: InterceptorList30 31  constructor(options: BatchInterceptorOptions<InterceptorList>) {32    BatchInterceptor.symbol = Symbol(options.name)33    super(BatchInterceptor.symbol)34    this.interceptors = options.interceptors35  }36 37  protected setup() {38    const logger = this.logger.extend('setup')39 40    logger.info('applying all %d interceptors...', this.interceptors.length)41 42    for (const interceptor of this.interceptors) {43      logger.info('applying "%s" interceptor...', interceptor.constructor.name)44      interceptor.apply()45 46      logger.info('adding interceptor dispose subscription')47      this.subscriptions.push(() => interceptor.dispose())48    }49  }50 51  public on<EventName extends ExtractEventNames<Events>>(52    event: EventName,53    listener: Listener<Events[EventName]>54  ): this {55    // Instead of adding a listener to the batch interceptor,56    // propagate the listener to each of the individual interceptors.57    for (const interceptor of this.interceptors) {58      interceptor.on(event, listener)59    }60 61    return this62  }63 64  public once<EventName extends ExtractEventNames<Events>>(65    event: EventName,66    listener: Listener<Events[EventName]>67  ): this {68    for (const interceptor of this.interceptors) {69      interceptor.once(event, listener)70    }71 72    return this73  }74 75  public off<EventName extends ExtractEventNames<Events>>(76    event: EventName,77    listener: Listener<Events[EventName]>78  ): this {79    for (const interceptor of this.interceptors) {80      interceptor.off(event, listener)81    }82 83    return this84  }85 86  public removeAllListeners<EventName extends ExtractEventNames<Events>>(87    event?: EventName | undefined88  ): this {89    for (const interceptors of this.interceptors) {90      interceptors.removeAllListeners(event)91    }92 93    return this94  }95}96 
basant307/AI_Governance_Project · CoolFace