UNPKG

@chix/flow

Version:
142 lines 5.11 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var uuid_1 = require("uuid"); var connector_1 = require("./connector"); var events_1 = require("./events"); var setting_1 = require("./setting"); var validate_1 = require("./validate"); var Link = (function (_super) { __extends(Link, _super); function Link(id, ioid) { if (id === void 0) { id = uuid_1.v4(); } if (ioid === void 0) { ioid = uuid_1.v4(); } var _this = _super.call(this) || this; _this.fills = 0; _this.writes = 0; _this.metadata = {}; _this.source = new connector_1.Connector(); _this.target = new connector_1.Connector(); _this.id = id; _this.ioid = ioid; return _this; } Link.create = function (linkDefinition, LinkType) { if (linkDefinition === void 0) { linkDefinition = {}; } if (LinkType === void 0) { LinkType = Link; } if (!linkDefinition.source) { linkDefinition.source = {}; } if (!linkDefinition.target) { linkDefinition.target = {}; } var link = new LinkType(linkDefinition.id, linkDefinition.ioid); if (linkDefinition.source || linkDefinition.target) { link.build(linkDefinition); } return link; }; Link.prototype.build = function (linkDefinition) { if (!linkDefinition.source) { throw Error('Create link expects a source'); } if (!linkDefinition.target) { throw Error('Create link expects a target'); } this.source.clearSettings(); this.target.clearSettings(); validate_1.validate.link(linkDefinition); this.setSource(linkDefinition.source.id, linkDefinition.source.port, linkDefinition.source.setting, linkDefinition.source.action); if (linkDefinition.metadata) { this.setMetadata(linkDefinition.metadata); } else { this.setMetadata({}); } this.setTarget(linkDefinition.target.id, linkDefinition.target.port, linkDefinition.target.setting, linkDefinition.target.action); }; Link.prototype.setTarget = function (targetId, port, settings, action) { if (settings) { this.target.configure(settings); } this.target.wire = this; this.target.plug(targetId, port, action); }; Link.prototype.setSource = function (sourceId, port, settings, action) { if (settings) { this.source.configure(settings); } this.source.wire = this; this.source.plug(sourceId, port, action); }; Link.prototype.setSourcePid = function (pid) { this.source.setPid(pid); }; Link.prototype.setTargetPid = function (pid) { this.target.setPid(pid); }; Link.prototype.hasMetadata = function () { return Object.keys(this.metadata).length > 0; }; Link.prototype.setMetadata = function (metadata) { this.metadata = metadata; }; Link.prototype.setMeta = function (key, val) { this.metadata[key] = val; }; Link.prototype.setTitle = function (title) { this.setMeta('title', title); this.emit(events_1.LinkEvents.CHANGE, this, 'metadata', this.metadata); }; Link.prototype.clear = function () { this.fills = 0; this.writes = 0; this.emit(events_1.LinkEvents.CLEAR, this); }; Link.prototype.update = function (linkDefinition) { this.build(linkDefinition); this.emit(events_1.LinkEvents.CHANGE, this); }; Link.prototype.toJSON = function () { if (!this.hasOwnProperty('source')) { console.log(this); throw Error('Link should have a source property'); } if (!this.hasOwnProperty('target')) { throw Error('Link should have a target property'); } var link = { id: this.id, source: this.source.toJSON(), target: this.target.toJSON(), }; if (this.metadata) { link.metadata = this.metadata; } if (this.fills) { link.fills = this.fills; } if (this.writes) { link.writes = this.writes; } if (this.data !== undefined) { link.data = JSON.parse(JSON.stringify(this.data)); } return link; }; return Link; }(setting_1.Setting)); exports.Link = Link; //# sourceMappingURL=link.js.map