/** * This file is derived from prior work. * * See NOTICE.md for full license text. * * Derived from: * - strict-event-emitter-types, Copyright 2018 Brian Terlson */ declare const assignmentCompatibilityHack: unique symbol; export type MatchingKeys = K extends (TRecord[K] extends TMatch ? K : never) ? K : never; export type VoidKeys = MatchingKeys; export interface TypeRecord { ' _emitterType'?: T; ' _eventsType'?: U; ' _emitType'?: V; } export type ReturnTypeOfMethod = T extends (...args: any[]) => any ? ReturnType : void; export type ReturnTypeOfMethodIfExists = S extends keyof T ? ReturnTypeOfMethod : void; export type InnerEEMethodReturnType = T extends (...args: any[]) => any ? ReturnType extends void | undefined ? FValue : TValue : FValue; export type EEMethodReturnType = S extends keyof T ? InnerEEMethodReturnType : FValue; type ListenerType = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T]; export interface OverriddenMethods { on

(this: T, event: P, listener: (...args: ListenerType) => void): EEMethodReturnType; on(event: typeof assignmentCompatibilityHack, listener: (...args: any[]) => any): void; addListener

(this: T, event: P, listener: (...args: ListenerType) => void): EEMethodReturnType; addListener(event: typeof assignmentCompatibilityHack, listener: (...args: any[]) => any): void; addEventListener

(this: T, event: P, listener: (...args: ListenerType) => void): EEMethodReturnType; addEventListener(event: typeof assignmentCompatibilityHack, listener: (...args: any[]) => any): void; removeListener

(this: T, event: P, listener: (...args: any[]) => any): EEMethodReturnType; removeListener(event: typeof assignmentCompatibilityHack, listener: (...args: any[]) => any): void; removeEventListener

(this: T, event: P, listener: (...args: any[]) => any): EEMethodReturnType; removeEventListener(event: typeof assignmentCompatibilityHack, listener: (...args: any[]) => any): void; once

(this: T, event: P, listener: (...args: ListenerType) => void): EEMethodReturnType; once(event: typeof assignmentCompatibilityHack, listener: (...args: any[]) => any): void; emit

(this: T, event: P, ...args: ListenerType): EEMethodReturnType; emit(event: typeof assignmentCompatibilityHack, ...args: any[]): void; } export type OverriddenKeys = keyof OverriddenMethods; export type StrictEventEmitter = Exclude, NeededMethods extends Exclude = Exclude> = TypeRecord & Pick> & Pick, NeededMethods>; export default StrictEventEmitter; export type NoUndefined = T extends undefined ? never : T; export interface StrictBroadcast, TEmitRecord extends NoUndefined = NoUndefined, VK extends VoidKeys = VoidKeys, NVK extends Exclude = Exclude> { (event: E, request: TEmitRecord[E]): any; (event: E): any; } export type EventNames, TEventRecord extends NoUndefined = NoUndefined, TEmitRecord extends NoUndefined = NoUndefined> = keyof TEmitRecord | keyof TEventRecord; export type OnEventNames, TEventRecord extends NoUndefined = NoUndefined, TEmitRecord extends NoUndefined = NoUndefined> = keyof TEventRecord; export type EmitEventNames, TEventRecord extends NoUndefined = NoUndefined, TEmitRecord extends NoUndefined = NoUndefined> = keyof TEmitRecord;