UNPKG

1.13 kBPlain TextView Raw
1/**
2 * @license
3 * Copyright 2019 Google LLC
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7import { Endpoint } from "./protocol";
8
9export interface NodeEndpoint {
10 postMessage(message: any, transfer?: any[]): void;
11 on(
12 type: string,
13 listener: EventListenerOrEventListenerObject,
14 options?: {}
15 ): void;
16 off(
17 type: string,
18 listener: EventListenerOrEventListenerObject,
19 options?: {}
20 ): void;
21 start?: () => void;
22}
23
24export default function nodeEndpoint(nep: NodeEndpoint): Endpoint {
25 const listeners = new WeakMap();
26 return {
27 postMessage: nep.postMessage.bind(nep),
28 addEventListener: (_, eh) => {
29 const l = (data: any) => {
30 if ("handleEvent" in eh) {
31 eh.handleEvent({ data } as MessageEvent);
32 } else {
33 eh({ data } as MessageEvent);
34 }
35 };
36 nep.on("message", l);
37 listeners.set(eh, l);
38 },
39 removeEventListener: (_, eh) => {
40 const l = listeners.get(eh);
41 if (!l) {
42 return;
43 }
44 nep.off("message", l);
45 listeners.delete(eh);
46 },
47 start: nep.start && nep.start.bind(nep),
48 };
49}