From fe822ff4309819e87a333e47a36dc87bf134e19c Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Wed, 23 Nov 2022 15:34:43 +0100 Subject: [PATCH] Export action and event handler types (#987) The `ActionHandler`, `EventHandler` and related types were previously not exported. We use these in `snaps-monorepo`, but currently have to copy them over. --- .../src/ControllerMessenger.ts | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/base-controller/src/ControllerMessenger.ts b/packages/base-controller/src/ControllerMessenger.ts index 1c080b9a7a..fa9f5b0d52 100644 --- a/packages/base-controller/src/ControllerMessenger.ts +++ b/packages/base-controller/src/ControllerMessenger.ts @@ -1,34 +1,40 @@ -type ActionHandler = ( +export type ActionHandler = ( ...args: ExtractActionParameters ) => ExtractActionResponse; -type ExtractActionParameters = Action extends { +export type ExtractActionParameters = Action extends { type: T; handler: (...args: infer H) => any; } ? H : never; -type ExtractActionResponse = Action extends { +export type ExtractActionResponse = Action extends { type: T; handler: (...args: any) => infer H; } ? H : never; -type ExtractEventHandler = Event extends { type: T; payload: infer P } +export type ExtractEventHandler = Event extends { + type: T; + payload: infer P; +} ? P extends unknown[] ? (...payload: P) => void : never : never; -type ExtractEventPayload = Event extends { type: T; payload: infer P } +export type ExtractEventPayload = Event extends { + type: T; + payload: infer P; +} ? P : never; -type GenericEventHandler = (...args: unknown[]) => void; +export type GenericEventHandler = (...args: unknown[]) => void; -type SelectorFunction = ( +export type SelectorFunction = ( ...args: Args ) => ReturnValue; -type SelectorEventHandler = ( +export type SelectorEventHandler = ( newValue: SelectorReturnValue, previousValue: SelectorReturnValue | undefined, ) => void;