@chix/flow
Version:
142 lines • 5.11 kB
JavaScript
"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