Skip to content

Commit

Permalink
fix(type): 🏷️ fix SharedWorkerPolyfill types
Browse files Browse the repository at this point in the history
add support for "message" type in addEventListener
  • Loading branch information
okikio committed Oct 20, 2021
1 parent 8d8d3b3 commit b8bc288
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export const SharedWorkerSupported = "SharedWorker" in globalThis;
/**
* A polyfill class for `SharedWorker`, it accepts a URL/string as well as any other options the spec. allows for `SharedWorker`. It supports all the same methods and properties as the original, except it adds compatibility methods and properties for older browsers that don't support `SharedWorker`, so, it can switch to normal `Workers` instead.
*/
export class SharedWorkerPolyfill implements SharedWorker {
export class SharedWorkerPolyfill implements SharedWorker, EventTarget, AbstractWorker {
/**
* The actual worker that is used, depending on browser support it can be either a `SharedWorker` or a normal `Worker`.
*/
Expand Down Expand Up @@ -72,11 +72,11 @@ export class SharedWorkerPolyfill implements SharedWorker {
/**
* Clones message and transmits it to worker's global environment. transfer can be passed as a list of objects that are to be transferred rather than cloned.
*/
public postMessage(message: any, transfer?: Transferable[]) {
public postMessage(message: any, transfer?: Transferable[] | StructuredSerializeOptions) {
if (SharedWorkerSupported) {
return (this.ActualWorker as SharedWorker)?.port.postMessage(message, transfer);
return (this.ActualWorker as SharedWorker)?.port.postMessage(message, transfer as unknown);
} else {
return (this.ActualWorker as Worker).postMessage(message, transfer);
return (this.ActualWorker as Worker).postMessage(message, transfer as unknown);
}
}

Expand Down Expand Up @@ -119,7 +119,9 @@ export class SharedWorkerPolyfill implements SharedWorker {
/**
* Registers an event handler of a specific event type on the EventTarget
*/
public addEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: SharedWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
public addEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
public addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
public addEventListener<K extends keyof MessagePortEventMap>(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
public addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void {
if (SharedWorkerSupported && type !== "error") {
return (this.ActualWorker as SharedWorker)?.port.addEventListener(type, listener, options)
Expand All @@ -131,8 +133,10 @@ export class SharedWorkerPolyfill implements SharedWorker {
/**
* Removes an event listener from the EventTarget.
*/
public removeEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: Worker | SharedWorker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
public removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions) {
public removeEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
public removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
public removeEventListener<K extends keyof MessagePortEventMap>(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
public removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void {
if (SharedWorkerSupported && type !== "error") {
return (this.ActualWorker as SharedWorker)?.port.removeEventListener(type, listener, options)
} else {
Expand All @@ -148,4 +152,8 @@ export class SharedWorkerPolyfill implements SharedWorker {
}
}

new SharedWorkerPolyfill("").addEventListener("message", () => {
console.log("message");
});

export default SharedWorkerPolyfill;

0 comments on commit b8bc288

Please sign in to comment.