1
0
silverbullet/web/syscalls/system.ts

55 lines
1.6 KiB
TypeScript
Raw Normal View History

import type { Plug } from "../../plugos/plug.ts";
import { SysCallMapping, System } from "../../plugos/system.ts";
import type { Editor } from "../editor.tsx";
import { CommandDef } from "../hooks/command.ts";
2022-03-25 11:03:06 +00:00
export function systemSyscalls(
editor: Editor,
system: System<any>,
): SysCallMapping {
2022-03-25 11:03:06 +00:00
return {
2022-10-14 13:11:33 +00:00
"system.invokeFunction": (
ctx,
2022-04-05 15:02:17 +00:00
env: string,
name: string,
...args: any[]
) => {
2022-03-25 11:03:06 +00:00
if (!ctx.plug) {
throw Error("No plug associated with context");
}
2022-04-05 15:02:17 +00:00
let plug: Plug<any> | undefined = ctx.plug;
if (name.indexOf(".") !== -1) {
// plug name in the name
const [plugName, functionName] = name.split(".");
plug = system.loadedPlugs.get(plugName);
if (!plug) {
throw Error(`Plug ${plugName} not found`);
}
name = functionName;
}
if (env === "client") {
return plug.invoke(name, args);
}
return editor.space.invokeFunction(plug, env, name, args);
2022-04-26 17:04:36 +00:00
},
2022-10-14 13:11:33 +00:00
"system.invokeCommand": (ctx, name: string) => {
2022-07-11 07:08:22 +00:00
return editor.runCommandByName(name);
},
2022-10-14 13:11:33 +00:00
"system.listCommands": (): { [key: string]: CommandDef } => {
const allCommands: { [key: string]: CommandDef } = {};
2022-09-06 12:36:06 +00:00
for (let [cmd, def] of editor.commandHook.editorCommands) {
allCommands[cmd] = def.command;
}
return allCommands;
},
2022-10-14 13:11:33 +00:00
"system.reloadPlugs": () => {
2022-04-26 17:04:36 +00:00
return editor.reloadPlugs();
2022-03-25 11:03:06 +00:00
},
2022-10-14 13:11:33 +00:00
"sandbox.getServerLogs": (ctx) => {
2022-05-09 12:59:12 +00:00
return editor.space.proxySyscall(ctx.plug, "sandbox.getLogs", []);
},
2022-03-25 11:03:06 +00:00
};
}