plugin sdk
squash
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
// Generic Boa bridge. API methods and their types come from the Rust schema.
|
||||
(() => {
|
||||
const call = __slerm_call;
|
||||
const fail = __slerm_error;
|
||||
let plugin;
|
||||
const api = new Proxy(Object.create(null), {
|
||||
get: (_, method) => method === "then" ? undefined : async (params = {}) => {
|
||||
const reply = JSON.parse(call(JSON.stringify({ ...params, method })));
|
||||
if (reply.error !== undefined) throw new Error(reply.error);
|
||||
return reply.result;
|
||||
},
|
||||
});
|
||||
const invoke = (callback, ...args) => {
|
||||
if (callback) Promise.resolve().then(() => callback(...args)).catch(error => fail(String(error)));
|
||||
};
|
||||
Object.defineProperty(globalThis, "__slerm", { value: Object.freeze({
|
||||
activate(definition, version) {
|
||||
if (version !== __slerm_version) throw new Error(`Unsupported Slerm API version ${version}`);
|
||||
if (plugin) throw new Error("A bundle must define exactly one plugin");
|
||||
plugin = definition;
|
||||
invoke(plugin.activate, api);
|
||||
},
|
||||
}) });
|
||||
Object.defineProperty(globalThis, "__slerm_dispatch", { value: event => {
|
||||
if (!plugin) throw new Error("Bundle did not call definePlugin");
|
||||
invoke(plugin.onEvent, event, api);
|
||||
} });
|
||||
})();
|
||||
Reference in New Issue
Block a user