Skip to content

Commit 4e3a230

Browse files
committed
Use new types package and fix some minor typing mistakes
1 parent e0d64a1 commit 4e3a230

11 files changed

Lines changed: 36 additions & 18 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
"@types/jest": "^30.0.0",
6868
"@types/jsdom": "^21.1.7",
6969
"@types/node": "^25.5.0",
70+
"@types/webextension-polyfill": "^0.12.5",
7071
"@typescript-eslint/eslint-plugin": "^8.57.1",
7172
"@typescript-eslint/parser": "^8.57.1",
7273
"chalk": "^5.6.2",

pnpm-lock.yaml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/manifest.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
/* eslint-disable camelcase */
2+
3+
import type { Manifest } from 'webextension-polyfill';
4+
25
declare global {
36
const __VERSION__: string;
47
}
58

6-
const manifest: browser._manifest.WebExtensionManifest = {
9+
const manifest: Manifest.WebExtensionManifest = {
710
manifest_version: 2,
811
name: '__MSG_title__',
912
description: '__MSG_extensionDescription__',

src/manifest_v3.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
/* eslint-disable camelcase */
22

3-
const manifest: browser._manifest.WebExtensionManifest = {
3+
import type { Manifest } from 'webextension-polyfill';
4+
5+
const manifest: Manifest.WebExtensionManifest = {
46
manifest_version: 3,
57
name: '__MSG_title__',
68
description: '__MSG_extensionDescription__',

src/scripts/background_script.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ if (getBrowserInstance().action) {
1919

2020
// NOTE: not promise-based, because Chrome really doesn't like it, when there are multiple listeners
2121
// need to return immediately, then call sendResponse manually, otherwise the other listener in offscreen.ts interferes
22-
getBrowserInstance().runtime.onMessage.addListener((message: string | { [key: string]: any; }, sender, sendResponse) => {
22+
getBrowserInstance().runtime.onMessage.addListener((message: unknown, sender, sendResponse) => {
2323
// Return early if this message isn't meant for the background script
24-
if (typeof message !== 'string' && message.target !== undefined && message.target !== 'background') {
24+
if (message === undefined || message === null) return;
25+
if ((typeof message !== 'string' && typeof message !== 'object') || (typeof message === 'object' && 'target' in message && message.target !== 'background')) {
2526
return;
2627
}
2728

src/scripts/helpers/shared/communication.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Browser } from 'webextension-polyfill';
12
import { Event, Message } from './constants';
23
import { clone, parseTypeObject } from './helpers';
34

@@ -31,7 +32,7 @@ export function sendMessage<T>(name: Message, data?: { [key: string]: any; }, ex
3132

3233
export type Listener<R = any, E = any> = (res: R, err: E) => void;
3334
export function sendEventHandler(event: Event.QUEUE_CHANGE, listener: Listener<{ canNext: boolean, canPrev: boolean; }>, skipOriginCheck?: boolean): void;
34-
export function sendEventHandler(event: Event.STORAGE_CHANGE, listener: Listener<Parameters<Parameters<typeof browser.storage.onChanged.addListener>[0]>>, skipOriginCheck?: boolean): void;
35+
export function sendEventHandler(event: Event.STORAGE_CHANGE, listener: Listener<Parameters<Parameters<Browser['storage']['onChanged']['addListener']>[0]>>, skipOriginCheck?: boolean): void;
3536
export function sendEventHandler(event: Exclude<Event, Event.QUEUE_CHANGE | Event.STORAGE_CHANGE>, listener: Listener, skipOriginCheck?: boolean): void;
3637
export function sendEventHandler(event: Event, listener: Listener, skipOriginCheck = false) {
3738
console.dev.debug('Registering remote listener for', event);

src/scripts/offscreen.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import browser from 'webextension-polyfill';
22
import { getInformation } from './page/offscreen';
33

4-
browser.runtime.onMessage.addListener((message: { [key: string]: any; }, sender, sendMessage) => {
5-
if (message.target !== 'offscreen') {
6-
return false;
4+
browser.runtime.onMessage.addListener((message: unknown, sender, sendMessage) => {
5+
if (message === undefined || message === null) return;
6+
if (typeof message !== 'object' || !('target' in message) || message.target !== 'offscreen') {
7+
return;
78
}
89
console.dev.log('Received message for offcanvas', message);
10+
if (!('type' in message)) return;
911
switch (message.type) {
1012
case 'getCreatorInformation': {
1113
getInformation().then(sendMessage);

src/scripts/page/sharedpage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Browser } from 'webextension-polyfill';
12
import { Event, Message, sendEventHandler, sendMessage } from '../helpers/shared';
23
export * from '../helpers/shared';
34

@@ -7,6 +8,6 @@ export function getFromStorage<T>(key: string | string[] | { [key: string]: any;
78
return sendMessage<T>(Message.GET_STORAGE, { get: key });
89
}
910

10-
export function onStorageChange(cb: Parameters<typeof browser.storage.onChanged.addListener>[0]) {
11+
export function onStorageChange(cb: Parameters<Browser['storage']['onChanged']['addListener']>[0]) {
1112
return sendEventHandler(Event.STORAGE_CHANGE, res => cb(...res));
1213
}

src/types/misc.d.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
import type { knownPages, loadPrefix, navigatePrefix } from '../scripts/page/dispatcher';
1+
import type { knownPages } from '../scripts/helpers/shared';
2+
import type { loadPrefix, navigatePrefix } from '../scripts/page/dispatcher';
23

34
type prefixes = typeof navigatePrefix | typeof loadPrefix;
45

56
declare global {
67
type FnArgs<F> = F extends (this: any, ...args: infer R) => any ? R : never;
78
type CtrArgs<F> = F extends new (...args: infer R) => any ? R : never;
89

9-
type NavigateOrLoadEvent<K extends string, D extends { [key: string]: any } = { [key: string]: any }> = CustomEvent<{ page: K, from: string } & D>;
10-
type PageEvent<K extends string> = NavigateOrLoadEvent<K, { more: string | undefined }>;
11-
type VideoEvent = NavigateOrLoadEvent<'video', { video: string }>;
10+
type NavigateOrLoadEvent<K extends string, D extends { [key: string]: any; } = { [key: string]: any; }> = CustomEvent<{ page: K, from: string; } & D>;
11+
type PageEvent<K extends string> = NavigateOrLoadEvent<K, { more: string | undefined; }>;
12+
type VideoEvent = NavigateOrLoadEvent<'video', { video: string; }>;
1213
type HomeEvent = NavigateOrLoadEvent<'home'>;
13-
type CreatorEvent = NavigateOrLoadEvent<'creator', { who: string, more: string | undefined }>;
14+
type CreatorEvent = NavigateOrLoadEvent<'creator', { who: string, more: string | undefined; }>;
1415
interface Document {
1516
addEventListener<K extends typeof knownPages[number], P extends prefixes>(type: `${P}-${K}`, listener: (this: Document, ev: PageEvent<K>) => any, options?: boolean | AddEventListenerOptions): void;
1617
addEventListener<P extends prefixes>(type: `${P}-video`, listener: (this: Document, ev: VideoEvent) => any, options?: boolean | AddEventListenerOptions): void;

src/types/modules.d.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,4 @@ declare module '*.svg' {
33
export default content;
44
}
55

6-
declare module 'webextension-polyfill' {
7-
const b: typeof browser;
8-
export default b;
9-
}
6+
declare module 'webext-dynamic-content-scripts' { }

0 commit comments

Comments
 (0)