@devgrid/netron
Version:
Event bus, streams and remote object invocation.
48 lines • 1.65 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.ServiceStub = void 0;
const definition_1 = require("./definition");
const predicates_1 = require("./predicates");
class ServiceStub {
constructor(peer, instance, metaOrDefinition) {
this.peer = peer;
this.instance = instance;
if ((0, predicates_1.isServiceDefinition)(metaOrDefinition)) {
this.definition = metaOrDefinition;
}
else {
this.definition = new definition_1.Definition(definition_1.Definition.nextId(), peer.id, metaOrDefinition);
}
}
set(prop, value) {
Reflect.set(this.instance, prop, this.processValue(value));
}
get(prop) {
return this.processResult(this.instance[prop]);
}
async call(method, args) {
const processedArgs = this.processArgs(args);
let result = this.instance[method](...processedArgs);
if (result instanceof Promise) {
result = await result;
}
return this.processResult(result);
}
processResult(result) {
if ((0, predicates_1.isNetronService)(result) || (0, predicates_1.isServiceInterface)(result)) {
return this.peer.refService(result, this.definition);
}
return result;
}
processArgs(args) {
return args.map((arg) => this.processValue(arg));
}
processValue(obj) {
if ((0, predicates_1.isServiceReference)(obj)) {
return this.peer.queryInterfaceByDefId(obj.defId);
}
return obj;
}
}
exports.ServiceStub = ServiceStub;
//# sourceMappingURL=service-stub.js.map
;