UNPKG

@hlang-org/runtime

Version:

A FBP-Inspired language for universal applications.

81 lines 9.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const rxjs_1 = require("rxjs"); const type_1 = require("../type"); const utils_1 = require("../utils"); const operators_1 = require("rxjs/operators"); class Port { constructor({ type, name = "" }) { this.name = name; this.type = type; this.peers = []; this.node = null; this.isActive = false; this.identity = type_1.IDENTITY.PORT; } active() { this.isActive = true; } deActive() { this.isActive = false; } addPeer(val) { this.peers.push(val); } attach(node) { // TODO: asserts this.node = node; this.node.attachPort(this); this.id = utils_1.uuid.create(); // 确保唯一 this.$eventEmitter = new rxjs_1.Subject(`${node.id}->${this.id}`); } get $() { return this.$pipedEventEmitter || this.$eventEmitter; } send(msg) { const $emitter = this.$pipedEventEmitter || this.$eventEmitter; $emitter.next(msg); } // tslint:disable:ter-indent pipe(...args) { this.$pipedEventEmitter = this.$eventEmitter.pipe.apply(this.$eventEmitter, [ ...args, // 管道中的未捕获异常处理 (0, operators_1.catchError)((err) => { throw err; }), ]); return { receive: this.receive.bind(this), }; } // tslint:enable on(next) { console.log("[@hlang-org/runtime]: $().on(() => {}) has been deperecated, please use $().receive(() => {})."); return this.receive(next); } receive(next) { const onNext = (...args) => next(...args); const $emitter = this.$pipedEventEmitter || this.$eventEmitter; return $emitter.subscribe(onNext); } // core connect(port) { if (this.type === type_1.STREAM_TYPE.O && port.type === type_1.STREAM_TYPE.I) { this.addPeer(port); } else { throw new Error(`${this.type} can not connect ${port.type}`); } return this; } } Port.I = (name) => { return new Port({ type: type_1.STREAM_TYPE.I, name: name }); }; Port.O = (name) => { return new Port({ type: type_1.STREAM_TYPE.O, name: name }); }; exports.default = Port; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlL3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQkFBK0I7QUFFL0Isa0NBQWdEO0FBQ2hELG9DQUFnQztBQUNoQyw4Q0FBNEM7QUFFNUMsTUFBTSxJQUFJO0lBYVIsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBUSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFTO1FBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFVO1FBQ2YsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsWUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRXhCLE9BQU87UUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUssY0FBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQUc7UUFDTixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUUvRCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsSUFBSSxDQUFDLEdBQUcsSUFBSTtRQUNWLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQ3JELElBQUksQ0FBQyxhQUFhLEVBQ2xCO1lBQ0UsR0FBRyxJQUFJO1lBQ1AsY0FBYztZQUNkLElBQUEsc0JBQVUsRUFBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsQ0FBQztZQUNaLENBQUMsQ0FBQztTQUNJLENBQ1QsQ0FBQztRQUNGLE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2pDLENBQUM7SUFDSixDQUFDO0lBQ0QsZ0JBQWdCO0lBRWhCLEVBQUUsQ0FBQyxJQUFJO1FBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FDVCxnR0FBZ0csQ0FDakcsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQUk7UUFDVixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUUvRCxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU87SUFDUCxPQUFPLENBQUMsSUFBSTtRQUNWLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBVyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxvQkFBb0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBRUQsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO0lBQ2hCLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDO0FBRUYsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO0lBQ2hCLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDO0FBRUYsa0JBQWUsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgTm9kZSBmcm9tIFwiLi4vbm9kZVwiO1xuaW1wb3J0IHsgU1RSRUFNX1RZUEUsIElERU5USVRZIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IHV1aWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuY2xhc3MgUG9ydCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBwZWVyczogUG9ydFtdO1xuICBub2RlOiBOb2RlIHwgbnVsbDtcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG4gIGlkZW50aXR5OiBzeW1ib2w7XG4gIHN0YXRpYyBJOiAobmFtZTogc3RyaW5nKSA9PiBQb3J0O1xuICBzdGF0aWMgTzogKG5hbWU6IHN0cmluZykgPT4gUG9ydDtcbiAgJHBpcGVkRXZlbnRFbWl0dGVyOiBhbnk7XG4gICRldmVudEVtaXR0ZXI6IFN1YmplY3Q8YW55PjtcblxuICBjb25zdHJ1Y3Rvcih7IHR5cGUsIG5hbWUgPSBcIlwiIH0pIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5wZWVycyA9IFtdO1xuICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuaWRlbnRpdHkgPSBJREVOVElUWS5QT1JUO1xuICB9XG5cbiAgYWN0aXZlKCkge1xuICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgZGVBY3RpdmUoKSB7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgYWRkUGVlcih2YWw6IFBvcnQpIHtcbiAgICB0aGlzLnBlZXJzLnB1c2godmFsKTtcbiAgfVxuXG4gIGF0dGFjaChub2RlOiBOb2RlKSB7XG4gICAgLy8gVE9ETzogYXNzZXJ0c1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy5ub2RlLmF0dGFjaFBvcnQodGhpcyk7XG4gICAgdGhpcy5pZCA9IHV1aWQuY3JlYXRlKCk7XG5cbiAgICAvLyDnoa7kv53llK/kuIBcbiAgICB0aGlzLiRldmVudEVtaXR0ZXIgPSBuZXcgKFN1YmplY3QgYXMgYW55KShgJHtub2RlLmlkfS0+JHt0aGlzLmlkfWApO1xuICB9XG5cbiAgZ2V0ICQoKSB7XG4gICAgcmV0dXJuIHRoaXMuJHBpcGVkRXZlbnRFbWl0dGVyIHx8IHRoaXMuJGV2ZW50RW1pdHRlcjtcbiAgfVxuXG4gIHNlbmQobXNnKSB7XG4gICAgY29uc3QgJGVtaXR0ZXIgPSB0aGlzLiRwaXBlZEV2ZW50RW1pdHRlciB8fCB0aGlzLiRldmVudEVtaXR0ZXI7XG5cbiAgICAkZW1pdHRlci5uZXh0KG1zZyk7XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZTp0ZXItaW5kZW50XG4gIHBpcGUoLi4uYXJncykge1xuICAgIHRoaXMuJHBpcGVkRXZlbnRFbWl0dGVyID0gdGhpcy4kZXZlbnRFbWl0dGVyLnBpcGUuYXBwbHkoXG4gICAgICB0aGlzLiRldmVudEVtaXR0ZXIsXG4gICAgICBbXG4gICAgICAgIC4uLmFyZ3MsXG4gICAgICAgIC8vIOeuoemBk+S4reeahOacquaNleiOt+W8guW4uOWkhOeQhlxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pLFxuICAgICAgXSBhcyBhbnlcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICByZWNlaXZlOiB0aGlzLnJlY2VpdmUuYmluZCh0aGlzKSxcbiAgICB9O1xuICB9XG4gIC8vIHRzbGludDplbmFibGVcblxuICBvbihuZXh0KSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBcIltAaGxhbmctb3JnL3J1bnRpbWVdOiAkKCkub24oKCkgPT4ge30pIGhhcyBiZWVuIGRlcGVyZWNhdGVkLCBwbGVhc2UgdXNlICQoKS5yZWNlaXZlKCgpID0+IHt9KS5cIlxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucmVjZWl2ZShuZXh0KTtcbiAgfVxuXG4gIHJlY2VpdmUobmV4dCkge1xuICAgIGNvbnN0IG9uTmV4dCA9ICguLi5hcmdzKSA9PiBuZXh0KC4uLmFyZ3MpO1xuICAgIGNvbnN0ICRlbWl0dGVyID0gdGhpcy4kcGlwZWRFdmVudEVtaXR0ZXIgfHwgdGhpcy4kZXZlbnRFbWl0dGVyO1xuXG4gICAgcmV0dXJuICRlbWl0dGVyLnN1YnNjcmliZShvbk5leHQpO1xuICB9XG5cbiAgLy8gY29yZVxuICBjb25uZWN0KHBvcnQpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBTVFJFQU1fVFlQRS5PICYmIHBvcnQudHlwZSA9PT0gU1RSRUFNX1RZUEUuSSkge1xuICAgICAgdGhpcy5hZGRQZWVyKHBvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy50eXBlfSBjYW4gbm90IGNvbm5lY3QgJHtwb3J0LnR5cGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuUG9ydC5JID0gKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBQb3J0KHsgdHlwZTogU1RSRUFNX1RZUEUuSSwgbmFtZTogbmFtZSB9KTtcbn07XG5cblBvcnQuTyA9IChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUG9ydCh7IHR5cGU6IFNUUkVBTV9UWVBFLk8sIG5hbWU6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQb3J0O1xuIl19