@microsoft/teams.common
Version:
<p> <a href="https://www.npmjs.com/package/@microsoft/teams.common" target="_blank"> <img src="https://img.shields.io/npm/v/@microsoft/teams.common" /> </a> <a href="https://www.npmjs.com/package/@microsoft/teams.common?activeTab=code"
1 lines • 2.91 kB
Source Map (JSON)
{"version":3,"sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":"AAeO,MAAM,YAAoF,CAAA;AAAA,EACrF,KAAQ,GAAA,EAAA;AAAA,EACR,aAAA,uBAAoB,GAM5B,EAAA;AAAA,EAEF,EAAA,CAAmC,OAAc,OAA0C,EAAA;AACzF,IAAM,MAAA,EAAA,GAAK,EAAE,IAAK,CAAA,KAAA;AAClB,IAAA,MAAM,OAAO,IAAK,CAAA,aAAA,CAAc,GAAI,CAAA,KAAK,KAAK,EAAC;AAC/C,IAAA,IAAA,CAAK,IAAK,CAAA,EAAE,EAAI,EAAA,OAAA,EAAS,CAAA;AACzB,IAAK,IAAA,CAAA,aAAA,CAAc,GAAI,CAAA,KAAA,EAAO,IAAI,CAAA;AAClC,IAAO,OAAA,EAAA;AAAA;AACT,EAEA,IAAA,CAAqC,OAAc,OAA0C,EAAA;AAC3F,IAAA,MAAM,EAAK,GAAA,IAAA,CAAK,EAAG,CAAA,KAAA,EAAO,CAAC,KAAU,KAAA;AACnC,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KACd,CAAA;AAED,IAAO,OAAA,EAAA;AAAA;AACT,EAEA,IAAI,EAAY,EAAA;AACd,IAAA,KAAA,MAAW,CAAC,CAAG,EAAA,IAAI,KAAK,IAAK,CAAA,aAAA,CAAc,SAAW,EAAA;AACpD,MAAA,MAAM,IAAI,IAAK,CAAA,SAAA,CAAU,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,EAAE,CAAA;AAE3C,MAAA,IAAI,MAAM,EAAI,EAAA;AAEd,MAAK,IAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA;AAChB,MAAA;AAAA;AACF;AACF,EAEA,IAAA,CAAqC,OAAc,KAA0B,EAAA;AAC3E,IAAA,MAAM,OAAO,IAAK,CAAA,aAAA,CAAc,GAAI,CAAA,KAAK,KAAK,EAAC;AAE/C,IAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,MAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA;AACnB;AAEJ","file":"event-emitter.mjs","sourcesContent":["export type EventHandler<T = any> = (data: T) => void | Promise<void>;\n\nexport interface IEventEmitter<EventTypes = Record<string, any>> {\n on<Event extends keyof EventTypes>(\n event: Event,\n handler: EventHandler<EventTypes[Event]>\n ): number;\n once<Event extends keyof EventTypes>(\n event: Event,\n handler: EventHandler<EventTypes[Event]>\n ): number;\n off(id: number): void;\n emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]): void;\n}\n\nexport class EventEmitter<EventTypes = Record<string, any>> implements IEventEmitter<EventTypes> {\n protected index = -1;\n protected subscriptions = new Map<\n keyof EventTypes,\n Array<{\n readonly id: number;\n readonly handler: EventHandler;\n }>\n >();\n\n on<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>) {\n const id = ++this.index;\n const subs = this.subscriptions.get(event) || [];\n subs.push({ id, handler });\n this.subscriptions.set(event, subs);\n return id;\n }\n\n once<Event extends keyof EventTypes>(event: Event, handler: EventHandler<EventTypes[Event]>) {\n const id = this.on(event, (value) => {\n this.off(id);\n handler(value);\n });\n\n return id;\n }\n\n off(id: number) {\n for (const [_, subs] of this.subscriptions.entries()) {\n const i = subs.findIndex((s) => s.id === id);\n\n if (i === -1) continue;\n\n subs.splice(i, 1);\n return;\n }\n }\n\n emit<Event extends keyof EventTypes>(event: Event, value: EventTypes[Event]) {\n const subs = this.subscriptions.get(event) || [];\n\n for (const sub of subs) {\n sub.handler(value);\n }\n }\n}\n"]}