UNPKG

@devgrid/netron

Version:

A powerful TypeScript library for building distributed systems with event bus, streaming capabilities, and remote object invocation. Features WebSocket-based bidirectional communication between Node.js and browser environments, service discovery, and type

55 lines 2.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ServiceStub = void 0; const definition_1 = require("./definition"); const stream_reference_1 = require("./stream-reference"); 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); } else if ((0, predicates_1.isNetronStream)(result)) { return stream_reference_1.StreamReference.from(result); } 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); } else if ((0, predicates_1.isNetronStreamReference)(obj)) { return stream_reference_1.StreamReference.to(obj, this.peer.netron.peers.get(obj.peerId)); } return obj; } } exports.ServiceStub = ServiceStub; //# sourceMappingURL=service-stub.js.map