@usirin/spellcaster
Version:
Remote execution of spells defined in spellbooks
45 lines (44 loc) • 1.85 kB
JavaScript
import * as __WEBPACK_EXTERNAL_MODULE__usirin_forge_181b4736__ from "@usirin/forge";
import * as __WEBPACK_EXTERNAL_MODULE__usirin_spellbook_db9e8869__ from "@usirin/spellbook";
const createRequest = (0, __WEBPACK_EXTERNAL_MODULE__usirin_forge_181b4736__.factory)("req", ({ name, parameters })=>({
name,
parameters
}));
const createResponse = (0, __WEBPACK_EXTERNAL_MODULE__usirin_forge_181b4736__.factory)("resp", ({ request, result, error })=>({
request,
result,
error
}));
function createSpellbookStream(spellbook) {
return new TransformStream({
async transform (request, controller) {
try {
const result = await (0, __WEBPACK_EXTERNAL_MODULE__usirin_spellbook_db9e8869__.execute)(spellbook, request.name, request.parameters);
const response = createResponse({
request,
result
});
controller.enqueue(response);
} catch (error) {
if (error instanceof Error) {
const response = createResponse({
request,
error: {
message: error.message
}
});
controller.enqueue(response);
}
}
}
});
}
const createServerTransport = (0, __WEBPACK_EXTERNAL_MODULE__usirin_forge_181b4736__.factory)("xports", ({ incoming, outgoing })=>({
incoming,
outgoing
}));
const createClientTransport = (0, __WEBPACK_EXTERNAL_MODULE__usirin_forge_181b4736__.factory)("xportc", ({ incoming, outgoing })=>({
incoming,
outgoing
}));
export { createClientTransport, createRequest, createResponse, createServerTransport, createSpellbookStream };