@usirin/spellcaster
Version:
Remote execution of spells defined in spellbooks
33 lines (32 loc) • 1.19 kB
JavaScript
import * as __WEBPACK_EXTERNAL_MODULE__usirin_forge_181b4736__ from "@usirin/forge";
import * as __WEBPACK_EXTERNAL_MODULE__transport_js_83a5c232__ from "./transport.js";
const createSpellCaster = (0, __WEBPACK_EXTERNAL_MODULE__usirin_forge_181b4736__.factory)("caster", (options)=>({
async cast (name, parameters) {
return cast(options.transport, name, parameters);
},
getTransport () {
return options.transport;
}
}));
async function cast(transport, name, parameters) {
const writer = transport.outgoing.getWriter();
const reader = transport.incoming.getReader();
try {
await writer.ready;
await writer.write((0, __WEBPACK_EXTERNAL_MODULE__transport_js_83a5c232__.createRequest)({
name: name,
parameters
}));
} finally{
writer.releaseLock();
}
try {
const { value: response } = await reader.read();
if (!response) throw new Error("No response");
if (response.error) throw new Error(response.error.message);
return response.result;
} finally{
reader.releaseLock();
}
}
export { cast, createSpellCaster };