diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2023-12-22 20:27:10 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-23 01:27:10 +0000 |
commit | a72b53de011d35602c0f68577c30e28386046583 (patch) | |
tree | 0fd3f2e38b36b81c773bd518c99ce5f01cae32eb /ext/js/templates/template-renderer-proxy.js | |
parent | cb4499fd8ab0322fa3ab706adfb46caf21c57eec (diff) |
Type safety for TemplateRendererProxy (#428)
* Type safety for TemplateRendererProxy
* Simplify
Diffstat (limited to 'ext/js/templates/template-renderer-proxy.js')
-rw-r--r-- | ext/js/templates/template-renderer-proxy.js | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/ext/js/templates/template-renderer-proxy.js b/ext/js/templates/template-renderer-proxy.js index 7cbab3c8..25fe8fb1 100644 --- a/ext/js/templates/template-renderer-proxy.js +++ b/ext/js/templates/template-renderer-proxy.js @@ -43,7 +43,7 @@ export class TemplateRendererProxy { */ async render(template, data, type) { await this._prepareFrame(); - return /** @type {import('template-renderer').RenderResult} */ (await this._invoke('render', {template, data, type})); + return await this._invoke('render', {template, data, type}); } /** @@ -52,7 +52,7 @@ export class TemplateRendererProxy { */ async renderMulti(items) { await this._prepareFrame(); - return /** @type {import('core').Response<import('template-renderer').RenderResult>[]} */ (await this._invoke('renderMulti', {items})); + return await this._invoke('renderMulti', {items}); } /** @@ -62,7 +62,7 @@ export class TemplateRendererProxy { */ async getModifiedData(data, type) { await this._prepareFrame(); - return /** @type {import('anki-templates').NoteData} */ (await this._invoke('getModifiedData', {data, type})); + return await this._invoke('getModifiedData', {data, type}); } // Private @@ -124,14 +124,14 @@ export class TemplateRendererProxy { updateState(0x2); }; /** - * @param {MessageEvent<unknown>} e + * @param {MessageEvent<import('template-renderer-proxy').BackendMessageAny>} e */ const onWindowMessage = (e) => { if ((state & 0x5) !== 0x1) { return; } const frameWindow = frame.contentWindow; if (frameWindow === null || frameWindow !== e.source) { return; } const {data} = e; - if (!(typeof data === 'object' && data !== null && /** @type {import('core').SerializableObject} */ (data).action === 'ready')) { return; } + if (!(typeof data === 'object' && data !== null && data.action === 'ready')) { return; } updateState(0x4); }; @@ -160,10 +160,11 @@ export class TemplateRendererProxy { } /** - * @param {string} action - * @param {import('core').SerializableObject} params + * @template {import('template-renderer-proxy').FrontendApiNames} TName + * @param {TName} action + * @param {import('template-renderer-proxy').FrontendApiParams<TName>} params * @param {?number} [timeout] - * @returns {Promise<unknown>} + * @returns {Promise<import('template-renderer-proxy').FrontendApiReturn<TName>>} */ _invoke(action, params, timeout = null) { return new Promise((resolve, reject) => { @@ -189,8 +190,9 @@ export class TemplateRendererProxy { timer = null; } }; + /** - * @param {MessageEvent<unknown>} event + * @param {MessageEvent<import('template-renderer-proxy').BackendMessageAny>} event */ const onMessage = (event) => { if (event.source !== frameWindow) { return; } @@ -198,21 +200,23 @@ export class TemplateRendererProxy { if ( typeof data !== 'object' || data === null || - /** @type {import('core').SerializableObject} */ (data).id !== id || - /** @type {import('core').SerializableObject} */ (data).action !== `${action}.response` + data.id !== id || + data.action !== 'response' ) { return; } - const response = /** @type {import('core').SerializableObject} */ (data).params; + // This type should probably be able to be inferred without a cast, but for some reason it isn't. + const responseData = /** @type {import('template-renderer-proxy').BackendMessage<'response'>} */ (data); + const response = responseData.params; if (typeof response !== 'object' || response === null) { return; } cleanup(); - const {error} = /** @type {import('core').Response} */ (response); + const {error} = response; if (error) { reject(ExtensionError.deserialize(error)); } else { - resolve(/** @type {import('core').Response} */ (response).result); + resolve(/** @type {import('template-renderer-proxy').FrontendApiReturn<TName>} */ (response.result)); } }; @@ -224,7 +228,9 @@ export class TemplateRendererProxy { this._invocations.add(invocation); window.addEventListener('message', onMessage, false); - frameWindow.postMessage({action, params, id}, '*'); + /** @type {import('template-renderer-proxy').FrontendMessage<TName>} */ + const requestMessage = {action, params, id}; + frameWindow.postMessage(requestMessage, '*'); }); } |