@usirin/spellcaster
Version:
Remote execution of spells defined in spellbooks
52 lines (51 loc) • 1.83 kB
JavaScript
import * as __WEBPACK_EXTERNAL_MODULE_node_events_0a6aefe7__ from "node:events";
import * as __WEBPACK_EXTERNAL_MODULE__transport_js_4e75716a__ from "../transport.js";
function createEmitterPair() {
const client = new __WEBPACK_EXTERNAL_MODULE_node_events_0a6aefe7__.EventEmitter();
const server = new __WEBPACK_EXTERNAL_MODULE_node_events_0a6aefe7__.EventEmitter();
client.on("request", (data)=>{
server.emit("request", data);
});
server.on("response", (data)=>{
client.emit("response", data);
});
return [
client,
server
];
}
function createServerTransport(emitter) {
return __WEBPACK_EXTERNAL_MODULE__transport_js_4e75716a__.createServerTransport({
incoming: new ReadableStream({
start (controller) {
emitter.on("request", (data)=>{
const message = JSON.parse(data.toString());
controller.enqueue(message);
});
}
}),
outgoing: new WritableStream({
write (response) {
emitter.emit("response", JSON.stringify(response));
}
})
});
}
function createClientTransport(emitter) {
return __WEBPACK_EXTERNAL_MODULE__transport_js_4e75716a__.createClientTransport({
incoming: new ReadableStream({
start (controller) {
emitter.on("response", (data)=>{
const message = JSON.parse(data.toString());
controller.enqueue(message);
});
}
}),
outgoing: new WritableStream({
write (request) {
emitter.emit("request", JSON.stringify(request));
}
})
});
}
export { createClientTransport, createEmitterPair, createServerTransport };