mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 01:59:58 +00:00
Cleanup additional messages and add messagr types to MessagePort
This commit is contained in:
6
ext/src/lib/TypedMessagePort.ts
Normal file
6
ext/src/lib/TypedMessagePort.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
"use strict";
|
||||
|
||||
export interface TypedMessagePort<T> extends MessagePort {
|
||||
postMessage(message: T, transfer: Transferable[]): void;
|
||||
postMessage(message: T, options?: PostMessageOptions): void;
|
||||
}
|
||||
@@ -1,53 +1,27 @@
|
||||
"use strict";
|
||||
|
||||
const portMap = new WeakMap<TypedPort<any>, browser.runtime.Port>();
|
||||
|
||||
/**
|
||||
* Allows typed access to a runtime.Port object.
|
||||
*/
|
||||
export class TypedPort<T> {
|
||||
public name: string;
|
||||
public error?: { message: string };
|
||||
public sender?: browser.runtime.MessageSender;
|
||||
export interface TypedPort<T>
|
||||
extends Omit<browser.runtime.Port
|
||||
, "onDisconnect"
|
||||
| "onMessage"
|
||||
| "postMessage"> {
|
||||
|
||||
constructor (port: browser.runtime.Port) {
|
||||
portMap.set(this, port);
|
||||
this.name = port.name;
|
||||
|
||||
// @ts-ignore
|
||||
this.error = null;
|
||||
onDisconnect: {
|
||||
addListener (cb: (port: TypedPort<T>) => void): void | Promise<void>
|
||||
, removeListener (cb: (port: TypedPort<T>) => void): void | Promise<void>
|
||||
, hasListener (cb: (port: TypedPort<T>) => void): boolean
|
||||
, hasListeners (): boolean
|
||||
}
|
||||
|
||||
public disconnect () {
|
||||
portMap.get(this)?.disconnect();
|
||||
, onMessage: {
|
||||
addListener (cb: (message: T) => void): void | Promise<void>
|
||||
, removeListener (cb: (message: T) => void): void | Promise<void>
|
||||
, hasListener (cb: (message: T) => void): boolean
|
||||
, hasListeners (): boolean
|
||||
}
|
||||
|
||||
public onDisconnect = {
|
||||
addListener: (cb: (port: TypedPort<T>) => void) => {
|
||||
portMap.get(this)?.onDisconnect.addListener(cb as any);
|
||||
}
|
||||
, removeListener: (cb: (port: TypedPort<T>) => void) => {
|
||||
portMap.get(this)?.onDisconnect.addListener(cb as any);
|
||||
}
|
||||
, hasListener: (cb: (port: TypedPort<T>) => void) => {
|
||||
return portMap.get(this)?.onDisconnect.hasListener(cb as any)
|
||||
?? false;
|
||||
}
|
||||
};
|
||||
|
||||
public onMessage = {
|
||||
addListener: (cb: (message: T) => void) => {
|
||||
portMap.get(this)?.onMessage.addListener(cb as any);
|
||||
}
|
||||
, removeListener: (cb: (message: T) => void) => {
|
||||
portMap.get(this)?.onMessage.removeListener(cb as any);
|
||||
}
|
||||
, hasListener: (cb: (message: T) => void) => {
|
||||
return portMap.get(this)?.onMessage.hasListener(cb as any) ?? false;
|
||||
}
|
||||
};
|
||||
|
||||
public postMessage (message: T) {
|
||||
portMap.get(this)?.postMessage(message as any);
|
||||
}
|
||||
, postMessage (message: T): void
|
||||
}
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
import logger from "./logger";
|
||||
import options from "./options";
|
||||
|
||||
import { Message } from "../messaging";
|
||||
import { Message, Port } from "../messaging";
|
||||
|
||||
|
||||
|
||||
type DisconnectListener = (port: browser.runtime.Port) => void;
|
||||
type DisconnectListener = (port: Port) => void;
|
||||
type MessageListener = (message: Message) => void;
|
||||
|
||||
function connectNative (application: string) {
|
||||
function connectNative (application: string): Port {
|
||||
/**
|
||||
* In order to preserve the synchronous API, messages are
|
||||
* queued before either the native messaging host or the
|
||||
@@ -34,7 +34,7 @@ function connectNative (application: string) {
|
||||
const onMessageListeners = new Set<MessageListener>();
|
||||
|
||||
// Port proxy API
|
||||
const portObject: browser.runtime.Port = {
|
||||
const portObject: Port = {
|
||||
error: null as any
|
||||
, name: ""
|
||||
|
||||
@@ -48,6 +48,9 @@ function connectNative (application: string) {
|
||||
, hasListener (cb: DisconnectListener) {
|
||||
return onDisconnectListeners.has(cb);
|
||||
}
|
||||
, hasListeners () {
|
||||
return onDisconnectListeners.size > 0;
|
||||
}
|
||||
}
|
||||
, onMessage: {
|
||||
addListener (cb: MessageListener) {
|
||||
@@ -59,9 +62,9 @@ function connectNative (application: string) {
|
||||
, hasListener (cb: MessageListener) {
|
||||
return onMessageListeners.has(cb);
|
||||
}
|
||||
|
||||
// Workaround for modified types
|
||||
, hasListeners () { return false; }
|
||||
, hasListeners () {
|
||||
return onMessageListeners.size > 0;
|
||||
}
|
||||
}
|
||||
|
||||
, disconnect () {
|
||||
|
||||
Reference in New Issue
Block a user