This repository has been archived on 2023-04-09. You can view files and clone it, but cannot push or open issues or pull requests.
libkernel-universal/dist/index.js

78 lines
2.0 KiB
JavaScript

let callModule;
let connectModule;
let log;
let logErr;
export class Client {
_callModule;
get callModule() {
return this._callModule;
}
_connectModule;
get connectModule() {
return this._connectModule;
}
async loadLibs(module) {
if (this._callModule && this._connectModule) {
return;
}
const moduleBag = await this.loadBound(module);
this._callModule = async (...args) => {
const ret = await moduleBag.callModule(...args);
this.handleError(ret);
return ret;
};
this._connectModule = moduleBag.connectModule;
}
async loadBound(module) {
return (await load(module));
}
handleError(ret) {
if (ret[1]) {
throw new Error(ret[1]);
}
}
async callModuleReturn(method, data) {
const ret = await this.callModule(method, data);
return ret[0];
}
}
export async function load(module) {
if (callModule !== null && connectModule !== null) {
if (module) {
return {
callModule: callModule.bind(undefined, module),
connectModule: connectModule.bind(undefined, module),
log,
logErr,
};
}
return {
callModule,
connectModule,
log,
logErr,
};
}
const pkgName = typeof window !== "undefined" && window?.document
? "libkernel"
: "libkmodule";
const pkg = await import(pkgName);
callModule = pkg.callModule;
connectModule = pkg.connectModule;
log = pkg.log;
logErr = pkg.logErr;
return load(module);
}
export const factory = function (type, module) {
return function (...args) {
return new Proxy(new type(...args), {
get(target, property) {
return async () => {
await target.loadLibs(module);
return target[property];
};
},
});
};
};