From 76805bc0fc65452ca830623aa810888f9c476a2b Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Thu, 28 Dec 2023 00:48:33 -0500 Subject: API type safety updates (#457) * Update message handlers in SearchDisplayController * Update types * Updates * Updates * Simplify * Updates * Updates * Rename * Improve types * Improve types * Resolve TODOs --- ext/js/display/search-display-controller.js | 52 ++++++++--------------------- 1 file changed, 14 insertions(+), 38 deletions(-) (limited to 'ext/js/display/search-display-controller.js') diff --git a/ext/js/display/search-display-controller.js b/ext/js/display/search-display-controller.js index 482afd56..6767d201 100644 --- a/ext/js/display/search-display-controller.js +++ b/ext/js/display/search-display-controller.js @@ -18,7 +18,8 @@ import * as wanakana from '../../lib/wanakana.js'; import {ClipboardMonitor} from '../comm/clipboard-monitor.js'; -import {EventListenerCollection, invokeMessageHandler} from '../core.js'; +import {EventListenerCollection} from '../core.js'; +import {createApiMap, invokeApiMapHandler} from '../core/api-map.js'; import {querySelectorNotNull} from '../dom/query-selector.js'; import {yomitan} from '../yomitan.js'; @@ -75,8 +76,12 @@ export class SearchDisplayController { getText: yomitan.api.clipboardGet.bind(yomitan.api) } }); - /** @type {import('core').MessageHandlerMap} */ - this._messageHandlers = new Map(); + /** @type {import('application').ApiMap} */ + this._apiMap = createApiMap([ + ['searchDisplayControllerGetMode', this._onMessageGetMode.bind(this)], + ['searchDisplayControllerSetMode', this._onMessageSetMode.bind(this)], + ['searchDisplayControllerUpdateSearchQuery', this._onExternalSearchUpdate.bind(this)] + ]); } /** */ @@ -94,13 +99,6 @@ export class SearchDisplayController { this._display.hotkeyHandler.registerActions([ ['focusSearchBox', this._onActionFocusSearchBox.bind(this)] ]); - /* eslint-disable no-multi-spaces */ - this._registerMessageHandlers([ - ['SearchDisplayController.getMode', this._onMessageGetMode.bind(this)], - ['SearchDisplayController.setMode', this._onMessageSetMode.bind(this)], - ['SearchDisplayController.updateSearchQuery', this._onExternalSearchUpdate.bind(this)] - ]); - /* eslint-enable no-multi-spaces */ this._updateClipboardMonitorEnabled(); @@ -140,32 +138,21 @@ export class SearchDisplayController { // Messages - /** - * @param {{mode: import('display').SearchMode}} details - */ + /** @type {import('application').ApiHandler<'searchDisplayControllerSetMode'>} */ _onMessageSetMode({mode}) { this.setMode(mode); } - /** - * @returns {import('display').SearchMode} - */ + /** @type {import('application').ApiHandler<'searchDisplayControllerGetMode'>} */ _onMessageGetMode() { return this._searchPersistentStateController.mode; } // Private - /** - * @param {{action: string, params?: import('core').SerializableObject}} message - * @param {chrome.runtime.MessageSender} sender - * @param {(response?: unknown) => void} callback - * @returns {boolean} - */ - _onMessage({action, params}, sender, callback) { - const messageHandler = this._messageHandlers.get(action); - if (typeof messageHandler === 'undefined') { return false; } - return invokeMessageHandler(messageHandler, params, callback, sender); + /** @type {import('extension').ChromeRuntimeOnMessageCallback} */ + _onMessage({action, params}, _sender, callback) { + return invokeApiMapHandler(this._apiMap, action, params, [], callback); } /** @@ -284,9 +271,7 @@ export class SearchDisplayController { this._clipboardMonitor.setPreviousText(selection !== null ? selection.toString().trim() : ''); } - /** - * @param {{text: string, animate?: boolean}} details - */ + /** @type {import('application').ApiHandler<'searchDisplayControllerUpdateSearchQuery'>} */ _onExternalSearchUpdate({text, animate = true}) { const options = this._display.getOptions(); if (options === null) { return; } @@ -548,15 +533,6 @@ export class SearchDisplayController { } } - /** - * @param {import('core').MessageHandlerMapInit} handlers - */ - _registerMessageHandlers(handlers) { - for (const [name, handlerInfo] of handlers) { - this._messageHandlers.set(name, handlerInfo); - } - } - /** * @param {?Element} element * @returns {boolean} -- cgit v1.2.3