From 9efbca4ec913803bee173d7c866e4e18989c0613 Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Sun, 4 Aug 2024 14:05:09 -0400 Subject: [PATCH] Types --- .../src/background/store/apiMiddleware.ts | 44 +++++++++++++++--- extension/src/devpanel/index.tsx | 46 +++++++++++++------ 2 files changed, 69 insertions(+), 21 deletions(-) diff --git a/extension/src/background/store/apiMiddleware.ts b/extension/src/background/store/apiMiddleware.ts index 8e487582..06c098d2 100644 --- a/extension/src/background/store/apiMiddleware.ts +++ b/extension/src/background/store/apiMiddleware.ts @@ -151,7 +151,7 @@ interface SerializedStateMessage> { readonly committedState: boolean; } -type UpdateStateRequest> = +export type UpdateStateRequest> = | InitMessage | LiftedMessage | SerializedPartialStateMessage @@ -169,6 +169,30 @@ interface UpdateStateAction> { readonly id: string | number; } +type SplitUpdateStateRequestStart> = { + split: 'start'; +} & Partial>; + +interface SplitUpdateStateRequestChunk { + readonly split: 'chunk'; + readonly chunk: [string, string]; +} + +interface SplitUpdateStateRequestEnd { + readonly split: 'end'; +} + +export type SplitUpdateStateRequest> = + | SplitUpdateStateRequestStart + | SplitUpdateStateRequestChunk + | SplitUpdateStateRequestEnd; + +interface SplitUpdateStateAction> { + readonly type: typeof UPDATE_STATE; + request: SplitUpdateStateRequest; + readonly id: string | number; +} + export type TabMessage = | StartAction | StopAction @@ -177,11 +201,16 @@ export type TabMessage = | ImportAction | ActionAction | ExportAction; -export type PanelMessage> = - | NAAction +export type PanelMessageWithoutNA> = | ErrorMessage | UpdateStateAction | SetPersistAction; +export type PanelMessage> = + | PanelMessageWithoutNA + | NAAction; +export type PanelMessageWithSplitAction> = + | PanelMessage + | SplitUpdateStateAction; export type MonitorMessage = | NAAction | ErrorMessage @@ -193,7 +222,7 @@ type TabPort = Omit & { }; type PanelPort = Omit & { postMessage: >( - message: PanelMessage, + message: PanelMessageWithSplitAction, ) => void; }; type MonitorPort = Omit & { @@ -258,7 +287,9 @@ function toMonitors>( throw err; } - const splitMessageStart = { split: 'start' }; + const splitMessageStart: SplitUpdateStateRequestStart = { + split: 'start', + }; const toSplit: [string, string][] = []; let size = 0; for (const [key, value] of Object.entries( @@ -272,7 +303,8 @@ function toMonitors>( } } - splitMessageStart[key] = value; + (splitMessageStart as any)[key as keyof typeof splitMessageStart] = + value; } panelPort.postMessage({ ...action, request: splitMessageStart }); diff --git a/extension/src/devpanel/index.tsx b/extension/src/devpanel/index.tsx index e894c2a9..34271f84 100644 --- a/extension/src/devpanel/index.tsx +++ b/extension/src/devpanel/index.tsx @@ -12,7 +12,12 @@ import App from '../app/App'; import configureStore from './store/panelStore'; import { Action, Store } from 'redux'; -import type { PanelMessage } from '../background/store/apiMiddleware'; +import { + PanelMessageWithoutNA, + PanelMessageWithSplitAction, + SplitUpdateStateRequest, + UpdateStateRequest, +} from '../background/store/apiMiddleware'; import type { StoreStateWithoutSocket } from './store/panelReducer'; import { PersistGate } from 'redux-persist/integration/react'; @@ -94,7 +99,7 @@ function renderNA() { }, 3500); } -let splitMessage; +let splitMessage: SplitUpdateStateRequest>; function init(id: number) { renderNA(); @@ -102,39 +107,50 @@ function init(id: number) { name: id ? id.toString() : undefined, }); bgConnection.onMessage.addListener( - >(message: PanelMessage) => { + >( + message: PanelMessageWithSplitAction, + ) => { if (message.type === 'NA') { if (message.id === id) renderNA(); else store!.dispatch({ type: REMOVE_INSTANCE, id: message.id }); } else { if (!rendered) renderDevTools(); - if (message.type === UPDATE_STATE && message.request.split) { - if (message.request.split === 'start') { - splitMessage = message.request; + if ( + message.type === UPDATE_STATE && + (message.request as SplitUpdateStateRequest).split + ) { + const request = message.request as SplitUpdateStateRequest; + + if (request.split === 'start') { + splitMessage = request; return; } - if (message.request.split === 'chunk') { - if (splitMessage[message.request.chunk[0]]) { - splitMessage[message.request.chunk[0]] += - message.request.chunk[1]; + if (request.split === 'chunk') { + if ((splitMessage as Record)[request.chunk[0]]) { + (splitMessage as Record)[request.chunk[0]] += + request.chunk[1]; } else { - splitMessage[message.request.chunk[0]] = message.request.chunk[1]; + (splitMessage as Record)[request.chunk[0]] = + request.chunk[1]; } return; } - if (message.request.split === 'end') { - store!.dispatch({ ...message, request: splitMessage }); + if (request.split === 'end') { + store!.dispatch({ + ...message, + request: splitMessage as UpdateStateRequest, + }); return; } throw new Error( - `Unable to process split message with type: ${message.request.split}`, + `Unable to process split message with type: ${(request as any).split}`, ); } else { - store!.dispatch(message); + store!.dispatch(message as PanelMessageWithoutNA); } } },