|
1 | | -/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ |
2 | 1 | // Type definitions for non-npm package flashpoint-launcher 12.2 |
3 | 2 | // Project: Flashpoint Launcher https://github.com/FlashpointProject/launcher |
4 | 3 | // Definitions by: Colin Berry <https://github.com/colin969> |
|
24 | 23 | declare module 'flashpoint-launcher' { |
25 | 24 | import { FlashpointArchive, GameSearch } from '@fparchive/flashpoint-archive'; |
26 | 25 | import { Readable } from 'stream'; |
| 26 | + import { TypedEmitter } from 'typed-emitter'; |
27 | 27 |
|
28 | 28 | /** Version of the Flashpoint Launcher */ |
29 | 29 | const version: string; |
@@ -1398,16 +1398,13 @@ declare module 'flashpoint-launcher' { |
1398 | 1398 | state: DownloaderStatus; |
1399 | 1399 | } |
1400 | 1400 |
|
1401 | | - interface ManagedChildProcess { |
1402 | | - /** Fires whenever the status of a process changes. */ |
1403 | | - on(event: 'change', listener: (newState: ProcessState) => void): this; |
1404 | | - emit(event: 'change', newState: ProcessState): boolean; |
1405 | | - /** Fires whenever the process exits */ |
1406 | | - on(event: 'exit', listener: (code: number | null, signal: string | null) => void): this; |
1407 | | - emit(event: 'exit', code: number | null, signal: string | null): boolean; |
| 1401 | + type ManagedChildProcessEvents = { |
| 1402 | + output: (output: ILogPreEntry) => void; |
| 1403 | + change: (newState: ProcessState) => void; |
| 1404 | + exit: (code: number | null, signal: string | null) => void; |
1408 | 1405 | } |
1409 | 1406 |
|
1410 | | - class ManagedChildProcess { |
| 1407 | + class ManagedChildProcess extends TypedEmitter<ManagedChildProcessEvents> { |
1411 | 1408 | /** ID of the process */ |
1412 | 1409 | id: string; |
1413 | 1410 | /** Info this process was created with */ |
@@ -3639,3 +3636,53 @@ declare module 'flashpoint-launcher-renderer-ext/actions/main' { |
3639 | 3636 | const removeGameSidebarComponent: ActionCreatorWithPayload<DisplaySettingsGameSidebarAction>; |
3640 | 3637 | const setExtConfigValue: ActionCreatorWithPayload<ExtConfigValueAction>; |
3641 | 3638 | } |
| 3639 | + |
| 3640 | +/** |
| 3641 | + * Typings lifted from typed-emitter NPM |
| 3642 | + * https://github.com/andywer/typed-emitter |
| 3643 | + * |
| 3644 | + * MIT License, Copyright (c) 2018 Andy Wermke |
| 3645 | + **/ |
| 3646 | +declare module 'typed-emitter' { |
| 3647 | + export type EventMap = { |
| 3648 | + [key: string]: (...args: any[]) => void |
| 3649 | + } |
| 3650 | + |
| 3651 | + /** |
| 3652 | + * Type-safe event emitter. |
| 3653 | + * |
| 3654 | + * Use it like this: |
| 3655 | + * |
| 3656 | + * ```typescript |
| 3657 | + * type MyEvents = { |
| 3658 | + * error: (error: Error) => void; |
| 3659 | + * message: (from: string, content: string) => void; |
| 3660 | + * } |
| 3661 | + * |
| 3662 | + * const myEmitter = new EventEmitter() as TypedEmitter<MyEvents>; |
| 3663 | + * |
| 3664 | + * myEmitter.emit("error", "x") // <- Will catch this type error; |
| 3665 | + * ``` |
| 3666 | + */ |
| 3667 | + export interface TypedEmitter<Events extends EventMap> { |
| 3668 | + addListener<E extends keyof Events> (event: E, listener: Events[E]): this |
| 3669 | + on<E extends keyof Events> (event: E, listener: Events[E]): this |
| 3670 | + once<E extends keyof Events> (event: E, listener: Events[E]): this |
| 3671 | + prependListener<E extends keyof Events> (event: E, listener: Events[E]): this |
| 3672 | + prependOnceListener<E extends keyof Events> (event: E, listener: Events[E]): this |
| 3673 | + |
| 3674 | + off<E extends keyof Events>(event: E, listener: Events[E]): this |
| 3675 | + removeAllListeners<E extends keyof Events> (event?: E): this |
| 3676 | + removeListener<E extends keyof Events> (event: E, listener: Events[E]): this |
| 3677 | + |
| 3678 | + emit<E extends keyof Events> (event: E, ...args: Parameters<Events[E]>): boolean |
| 3679 | + // The sloppy `eventNames()` return type is to mitigate type incompatibilities - see #5 |
| 3680 | + eventNames (): (keyof Events | string | symbol)[] |
| 3681 | + rawListeners<E extends keyof Events> (event: E): Events[E][] |
| 3682 | + listeners<E extends keyof Events> (event: E): Events[E][] |
| 3683 | + listenerCount<E extends keyof Events> (event: E): number |
| 3684 | + |
| 3685 | + getMaxListeners (): number |
| 3686 | + setMaxListeners (maxListeners: number): this |
| 3687 | + } |
| 3688 | +} |
0 commit comments