@enkaku/message-transport
Version:
MessagePort transport for Enkaku RPC clients and servers
40 lines (39 loc) • 967 B
JavaScript
/**
* 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
});
}
}