UNPKG

iopa

Version:

API-first, Internet of Things (IoT) stack for Typescript, official implementation of the Internet Open Protocols Alliance (IOPA) reference pattern

51 lines (46 loc) 1.32 kB
import { IExtendableEventTarget, ITraceEvent, ITraceEvents } from '@iopa/types' export class ExtendableEventTarget extends EventTarget implements IExtendableEventTarget { public constructor() { super() } public dispatchEvent(event: Event): boolean { if (!(event instanceof Event)) { const { type, ...rest } = event as Record<string, any> const eventInstance = new Event(type) Object.keys(rest).forEach((key) => { eventInstance[key] = rest[key] }) event = eventInstance } return super.dispatchEvent(event) } public async dispatchEventExtendable(event: Event): Promise<boolean> { const promises: Promise<any>[] = [] const extendableEvent: ExtendableEvent = { ...event, waitUntil: (p: Promise<any>) => { promises.push(p) } } const result = this.dispatchEvent(extendableEvent) await Promise.all(promises) return result } } export class TraceEvent extends Event implements ITraceEvent { public label: string public get type(): keyof ITraceEvents { return super.type as keyof ITraceEvents } public constructor( type: string, eventInitDict?: EventInit & { label: string } ) { const { label, ...options } = eventInitDict || {} super(type, options) this.label = label } }