UNPKG

@enkaku/message-transport

Version:

MessagePort transport for Enkaku RPC clients and servers

40 lines (39 loc) 967 B
/** * MessagePort transport for Enkaku RPC clients and servers. * * ## Installation * * ```sh * npm install @enkaku/message-transport * ``` * * @module message-transport */ import { Transport } from '@enkaku/transport'; export async function createTransportStream(source) { const port = await Promise.resolve(typeof source === 'function' ? source() : source); const readable = new ReadableStream({ start (controller) { port.onmessage = (msg)=>{ controller.enqueue(msg.data); }; port.start(); } }); const writable = new WritableStream({ write (msg) { port.postMessage(msg); } }); return { readable, writable }; } export class MessageTransport extends Transport { constructor(params){ super({ stream: ()=>createTransportStream(params.port), signal: params.signal }); } }