diff options
| -rw-r--r-- | ext/js/background/backend.js | 4 | ||||
| -rw-r--r-- | ext/js/background/offscreen-proxy.js | 6 | ||||
| -rw-r--r-- | ext/js/background/offscreen.js | 28 | ||||
| -rw-r--r-- | ext/js/comm/api.js | 2 | ||||
| -rw-r--r-- | types/ext/api-map.d.ts | 4 | ||||
| -rw-r--r-- | types/ext/api.d.ts | 4 | ||||
| -rw-r--r-- | types/ext/offscreen.d.ts | 33 | 
7 files changed, 44 insertions, 37 deletions
| diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index 765d17d9..5ef3c3be 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -370,7 +370,7 @@ export class Backend {          });      } -    /** @type {import('extension').ChromeRuntimeOnMessageCallback<import('api').MessageAny>} */ +    /** @type {import('extension').ChromeRuntimeOnMessageCallback<import('api').ApiMessageAny>} */      _onMessageWrapper(message, sender, sendResponse) {          if (this._isPrepared) {              return this._onMessage(message, sender, sendResponse); @@ -393,7 +393,7 @@ export class Backend {      }      /** -     * @param {import('api').MessageAny} message +     * @param {import('api').ApiMessageAny} message       * @param {chrome.runtime.MessageSender} sender       * @param {(response?: unknown) => void} callback       * @returns {boolean} diff --git a/ext/js/background/offscreen-proxy.js b/ext/js/background/offscreen-proxy.js index 99dc0741..2335b673 100644 --- a/ext/js/background/offscreen-proxy.js +++ b/ext/js/background/offscreen-proxy.js @@ -72,9 +72,9 @@ export class OffscreenProxy {      }      /** -     * @template {import('offscreen').MessageType} TMessageType -     * @param {import('offscreen').Message<TMessageType>} message -     * @returns {Promise<import('offscreen').OffscreenApiReturn<TMessageType>>} +     * @template {import('offscreen').ApiNames} TMessageType +     * @param {import('offscreen').ApiMessage<TMessageType>} message +     * @returns {Promise<import('offscreen').ApiReturn<TMessageType>>}       */      sendMessagePromise(message) {          return new Promise((resolve, reject) => { diff --git a/ext/js/background/offscreen.js b/ext/js/background/offscreen.js index 05c655df..2320471c 100644 --- a/ext/js/background/offscreen.js +++ b/ext/js/background/offscreen.js @@ -52,7 +52,7 @@ export class Offscreen {          /* eslint-disable no-multi-spaces */ -        /** @type {import('offscreen').OffscreenApiMap} */ +        /** @type {import('offscreen').ApiMap} */          this._apiMap = createApiMap([              ['clipboardGetTextOffscreen',    this._getTextHandler.bind(this)],              ['clipboardGetImageOffscreen',   this._getImageHandler.bind(this)], @@ -78,22 +78,22 @@ export class Offscreen {          chrome.runtime.onMessage.addListener(this._onMessage.bind(this));      } -    /** @type {import('offscreen').OffscreenApiHandler<'clipboardGetTextOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'clipboardGetTextOffscreen'>} */      async _getTextHandler({useRichText}) {          return await this._clipboardReader.getText(useRichText);      } -    /** @type {import('offscreen').OffscreenApiHandler<'clipboardGetImageOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'clipboardGetImageOffscreen'>} */      async _getImageHandler() {          return await this._clipboardReader.getImage();      } -    /** @type {import('offscreen').OffscreenApiHandler<'clipboardSetBrowserOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'clipboardSetBrowserOffscreen'>} */      _setClipboardBrowser({value}) {          this._clipboardReader.browser = value;      } -    /** @type {import('offscreen').OffscreenApiHandler<'databasePrepareOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'databasePrepareOffscreen'>} */      _prepareDatabaseHandler() {          if (this._prepareDatabasePromise !== null) {              return this._prepareDatabasePromise; @@ -102,29 +102,29 @@ export class Offscreen {          return this._prepareDatabasePromise;      } -    /** @type {import('offscreen').OffscreenApiHandler<'getDictionaryInfoOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'getDictionaryInfoOffscreen'>} */      async _getDictionaryInfoHandler() {          return await this._dictionaryDatabase.getDictionaryInfo();      } -    /** @type {import('offscreen').OffscreenApiHandler<'databasePurgeOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'databasePurgeOffscreen'>} */      async _purgeDatabaseHandler() {          return await this._dictionaryDatabase.purge();      } -    /** @type {import('offscreen').OffscreenApiHandler<'databaseGetMediaOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'databaseGetMediaOffscreen'>} */      async _getMediaHandler({targets}) {          const media = await this._dictionaryDatabase.getMedia(targets);          const serializedMedia = media.map((m) => ({...m, content: ArrayBufferUtil.arrayBufferToBase64(m.content)}));          return serializedMedia;      } -    /** @type {import('offscreen').OffscreenApiHandler<'translatorPrepareOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'translatorPrepareOffscreen'>} */      _prepareTranslatorHandler({deinflectionReasons}) {          this._translator.prepare(deinflectionReasons);      } -    /** @type {import('offscreen').OffscreenApiHandler<'findKanjiOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'findKanjiOffscreen'>} */      async _findKanjiHandler({text, options}) {          /** @type {import('translation').FindKanjiOptions} */          const modifiedOptions = { @@ -134,7 +134,7 @@ export class Offscreen {          return await this._translator.findKanji(text, modifiedOptions);      } -    /** @type {import('offscreen').OffscreenApiHandler<'findTermsOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'findTermsOffscreen'>} */      async _findTermsHandler({mode, text, options}) {          const enabledDictionaryMap = new Map(options.enabledDictionaryMap);          const excludeDictionaryDefinitions = ( @@ -161,17 +161,17 @@ export class Offscreen {          return this._translator.findTerms(mode, text, modifiedOptions);      } -    /** @type {import('offscreen').OffscreenApiHandler<'getTermFrequenciesOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'getTermFrequenciesOffscreen'>} */      _getTermFrequenciesHandler({termReadingList, dictionaries}) {          return this._translator.getTermFrequencies(termReadingList, dictionaries);      } -    /** @type {import('offscreen').OffscreenApiHandler<'clearDatabaseCachesOffscreen'>} */ +    /** @type {import('offscreen').ApiHandler<'clearDatabaseCachesOffscreen'>} */      _clearDatabaseCachesHandler() {          this._translator.clearDatabaseCaches();      } -    /** @type {import('extension').ChromeRuntimeOnMessageCallback<import('offscreen').MessageAny>} */ +    /** @type {import('extension').ChromeRuntimeOnMessageCallback<import('offscreen').ApiMessageAny>} */      _onMessage({action, params}, _sender, callback) {          return invokeApiMapHandler(this._apiMap, action, params, [], callback);      } diff --git a/ext/js/comm/api.js b/ext/js/comm/api.js index c0cfae16..c2351538 100644 --- a/ext/js/comm/api.js +++ b/ext/js/comm/api.js @@ -373,7 +373,7 @@ export class API {       * @returns {Promise<import('api').ApiReturn<TAction>>}       */      _invoke(action, params) { -        /** @type {import('api').MessageAny} */ +        /** @type {import('api').ApiMessage<TAction>} */          const data = {action, params};          return new Promise((resolve, reject) => {              try { diff --git a/types/ext/api-map.d.ts b/types/ext/api-map.d.ts index 4a4eb87c..8c3215cf 100644 --- a/types/ext/api-map.d.ts +++ b/types/ext/api-map.d.ts @@ -109,7 +109,7 @@ export type ApiFunctionOrdered<TSurface extends ApiSurface, TName extends ApiNam  ) => Promise<ApiReturn<TSurface[TName]>>;  /** Type alias for a union of all params types. */ -export type ApiParamsAny<TSurface extends ApiSurface> = ApiParams<TSurface[keyof TSurface]>; +export type ApiParamsAny<TSurface extends ApiSurface> = {[name in ApiNames<TSurface>]: ApiParams<TSurface[name]>}[ApiNames<TSurface>];  /** Type alias for a union of all return types. */ -export type ApiReturnAny<TSurface extends ApiSurface> = ApiReturn<TSurface[keyof TSurface]>; +export type ApiReturnAny<TSurface extends ApiSurface> = {[name in ApiNames<TSurface>]: ApiReturn<TSurface[name]>}[ApiNames<TSurface>]; diff --git a/types/ext/api.d.ts b/types/ext/api.d.ts index 2d23040c..ad3aa22c 100644 --- a/types/ext/api.d.ts +++ b/types/ext/api.d.ts @@ -399,9 +399,9 @@ export type ApiReturn<TName extends ApiNames> = BaseApiReturn<ApiSurface[TName]>  export type ApiParamsAny = BaseApiParamsAny<ApiSurface>; -export type MessageAny = Message<ApiNames>; +export type ApiMessageAny = {[name in ApiNames]: ApiMessage<name>}[ApiNames]; -type Message<TName extends ApiNames> = { +type ApiMessage<TName extends ApiNames> = {      action: TName;      params: ApiParams<TName>;  }; diff --git a/types/ext/offscreen.d.ts b/types/ext/offscreen.d.ts index 511c32bd..9b1d844a 100644 --- a/types/ext/offscreen.d.ts +++ b/types/ext/offscreen.d.ts @@ -22,9 +22,16 @@ import type * as DictionaryImporter from './dictionary-importer';  import type * as Environment from './environment';  import type * as Translation from './translation';  import type * as Translator from './translator'; -import type {ApiMap, ApiMapInit, ApiHandler, ApiParams, ApiReturn, ApiNames} from './api-map'; +import type { +    ApiMap as BaseApiMap, +    ApiMapInit as BaseApiMapInit, +    ApiHandler as BaseApiHandler, +    ApiParams as BaseApiParams, +    ApiReturn as BaseApiReturn, +    ApiNames as BaseApiNames, +} from './api-map'; -type OffscreenApiSurface = { +type ApiSurface = {      databasePrepareOffscreen: {          params: void;          return: void; @@ -93,13 +100,13 @@ type OffscreenApiSurface = {      };  }; -export type Message<TName extends MessageType> = ( -    OffscreenApiParams<TName> extends void ? -        {action: TName} : -        {action: TName, params: OffscreenApiParams<TName>} +export type ApiMessage<TName extends ApiNames> = ( +    ApiParams<TName> extends void ? +        {action: TName, params?: never} : +        {action: TName, params: ApiParams<TName>}  ); -export type MessageType = ApiNames<OffscreenApiSurface>; +export type ApiNames = BaseApiNames<ApiSurface>;  export type FindKanjiOptionsOffscreen = Omit<Translation.FindKanjiOptions, 'enabledDictionaryMap'> & {      enabledDictionaryMap: [ @@ -121,14 +128,14 @@ export type FindTermsTextReplacementOffscreen = Omit<Translation.FindTermsTextRe      pattern: string;  }; -export type OffscreenApiMap = ApiMap<OffscreenApiSurface>; +export type ApiMap = BaseApiMap<ApiSurface>; -export type OffscreenApiMapInit = ApiMapInit<OffscreenApiSurface>; +export type ApiMapInit = BaseApiMapInit<ApiSurface>; -export type OffscreenApiHandler<TName extends MessageType> = ApiHandler<OffscreenApiSurface[TName]>; +export type ApiHandler<TName extends ApiNames> = BaseApiHandler<ApiSurface[TName]>; -export type OffscreenApiParams<TName extends MessageType> = ApiParams<OffscreenApiSurface[TName]>; +export type ApiParams<TName extends ApiNames> = BaseApiParams<ApiSurface[TName]>; -export type OffscreenApiReturn<TName extends MessageType> = ApiReturn<OffscreenApiSurface[TName]>; +export type ApiReturn<TName extends ApiNames> = BaseApiReturn<ApiSurface[TName]>; -export type MessageAny = Message<MessageType>; +export type ApiMessageAny = {[name in ApiNames]: ApiMessage<name>}[ApiNames]; |