saij
Version:
A learning engine.
88 lines (71 loc) • 7.09 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _Object = _interopRequireDefault(require("../core/Object"));
var _AssertionError = _interopRequireDefault(require("../core/AssertionError"));
var _Connection = _interopRequireDefault(require("./Connection"));
var _ConnectionType = _interopRequireDefault(require("./ConnectionType"));
var _Errors = _interopRequireDefault(require("../core/Errors"));
/**
* @module saij/connection/Connector
*/
/* eslint max-len: 0 */
/**
* A function to generate the connection key id.
* @typedef {module:saij/connection/Connector~ConnectionKeyFunction} ConnectionKeyFunction
* @api
*/
/**
* @classdesc
* A connector is a helper class, that you can instantiate with an id generating
* function, that when `connect` is called between two
* {@link module:saij/connection/Connection~Connectable}s, an id will be created
* and a new {@link module:saij/connection/Connection~Connection} will be
* returned.
*
* @api
*/
class Connector extends _Object.default {
/**
* Create the Connector class with a function that will take two
* {@link module:saij/connection/Connection~Connectable}s and create a
* key from them.
* ```
* const keyFunction = (conA, conB)=> `${conA.getName()}:${conB.getName()}`
* const connector = new Connector(keyFunction, 'simplex');
* const connection = connector.connect(conA, conB);
* ```
* @param {module:saij/connection/Connector~ConnectionKeyFunction} keyFunction key string creating function
* @param {module:saij/connection/ConnectionType} opt_type optional connection type
*/
constructor(keyFunction, opt_type) {
super();
if (!keyFunction) {
throw new _AssertionError.default(_Errors.default.ASSERT_CON_KEY_FUNCTION.code);
}
this.type_ = opt_type ? opt_type : _ConnectionType.default.SIMPLEX;
this.keyFn_ = keyFunction;
}
/**
* Create a new connection between two connectables, using the keyFunction
* and type provided to generate a new connectionKey.
* @param {module:saij/connection/Connection~Connectable} conA connection A
* @param {module:saij/connection/Connection~Connectable} conB connection B
* @return {module:saij/connection/Connection~Connection} new connection
* @api
*/
connect(conA, conB) {
const id = this.keyFn_(conA, conB);
const key = {
id,
type: this.type_
};
return new _Connection.default(key, conA, conB);
}
}
var _default = Connector;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zYWlqL2Nvbm5lY3Rpb24vQ29ubmVjdG9yLmpzIl0sIm5hbWVzIjpbIkNvbm5lY3RvciIsIkJhc2VPYmplY3QiLCJjb25zdHJ1Y3RvciIsImtleUZ1bmN0aW9uIiwib3B0X3R5cGUiLCJBc3NlcnRpb25FcnJvciIsIkVycm9ycyIsIkFTU0VSVF9DT05fS0VZX0ZVTkNUSU9OIiwiY29kZSIsInR5cGVfIiwiQ29ubmVjdGlvblR5cGUiLCJTSU1QTEVYIiwia2V5Rm5fIiwiY29ubmVjdCIsImNvbkEiLCJjb25CIiwiaWQiLCJrZXkiLCJ0eXBlIiwiQ29ubmVjdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBUkE7Ozs7QUFXQTs7QUFHQTs7Ozs7O0FBT0E7Ozs7Ozs7Ozs7QUFVQSxNQUFNQSxTQUFOLFNBQXdCQyxlQUF4QixDQUFtQztBQUNqQzs7Ozs7Ozs7Ozs7O0FBWUFDLEVBQUFBLFdBQVcsQ0FBQ0MsV0FBRCxFQUFjQyxRQUFkLEVBQXdCO0FBQ2pDOztBQUVBLFFBQUksQ0FBQ0QsV0FBTCxFQUFrQjtBQUNoQixZQUFNLElBQUlFLHVCQUFKLENBQW1CQyxnQkFBT0MsdUJBQVAsQ0FBK0JDLElBQWxELENBQU47QUFDRDs7QUFFRCxTQUFLQyxLQUFMLEdBQWFMLFFBQVEsR0FBR0EsUUFBSCxHQUFjTSx3QkFBZUMsT0FBbEQ7QUFDQSxTQUFLQyxNQUFMLEdBQWNULFdBQWQ7QUFDRDtBQUdEOzs7Ozs7Ozs7O0FBUUFVLEVBQUFBLE9BQU8sQ0FBQ0MsSUFBRCxFQUFPQyxJQUFQLEVBQWE7QUFDbEIsVUFBTUMsRUFBRSxHQUFHLEtBQUtKLE1BQUwsQ0FBWUUsSUFBWixFQUFrQkMsSUFBbEIsQ0FBWDtBQUNBLFVBQU1FLEdBQUcsR0FBRztBQUFDRCxNQUFBQSxFQUFEO0FBQUtFLE1BQUFBLElBQUksRUFBRSxLQUFLVDtBQUFoQixLQUFaO0FBRUEsV0FBTyxJQUFJVSxtQkFBSixDQUFlRixHQUFmLEVBQW9CSCxJQUFwQixFQUEwQkMsSUFBMUIsQ0FBUDtBQUNEOztBQXRDZ0M7O2VBeUNwQmYsUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBzYWlqL2Nvbm5lY3Rpb24vQ29ubmVjdG9yXG4gKi9cblxuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSAnLi4vY29yZS9PYmplY3QnO1xuaW1wb3J0IEFzc2VydGlvbkVycm9yIGZyb20gJy4uL2NvcmUvQXNzZXJ0aW9uRXJyb3InO1xuaW1wb3J0IENvbm5lY3Rpb24gZnJvbSAnLi9Db25uZWN0aW9uJztcbmltcG9ydCBDb25uZWN0aW9uVHlwZSBmcm9tICcuL0Nvbm5lY3Rpb25UeXBlJztcbmltcG9ydCBFcnJvcnMgZnJvbSAnLi4vY29yZS9FcnJvcnMnO1xuXG5cbi8qIGVzbGludCBtYXgtbGVuOiAwICovXG5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBjb25uZWN0aW9uIGtleSBpZC5cbiAqIEB0eXBlZGVmIHttb2R1bGU6c2Fpai9jb25uZWN0aW9uL0Nvbm5lY3Rvcn5Db25uZWN0aW9uS2V5RnVuY3Rpb259IENvbm5lY3Rpb25LZXlGdW5jdGlvblxuICogQGFwaVxuICovXG5cblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKiBBIGNvbm5lY3RvciBpcyBhIGhlbHBlciBjbGFzcywgdGhhdCB5b3UgY2FuIGluc3RhbnRpYXRlIHdpdGggYW4gaWQgZ2VuZXJhdGluZ1xuICogZnVuY3Rpb24sIHRoYXQgd2hlbiBgY29ubmVjdGAgaXMgY2FsbGVkIGJldHdlZW4gdHdvXG4gKiB7QGxpbmsgbW9kdWxlOnNhaWovY29ubmVjdGlvbi9Db25uZWN0aW9ufkNvbm5lY3RhYmxlfXMsIGFuIGlkIHdpbGwgYmUgY3JlYXRlZFxuICogYW5kIGEgbmV3IHtAbGluayBtb2R1bGU6c2Fpai9jb25uZWN0aW9uL0Nvbm5lY3Rpb25+Q29ubmVjdGlvbn0gd2lsbCBiZVxuICogcmV0dXJuZWQuXG4gKlxuICogQGFwaVxuICovXG5jbGFzcyBDb25uZWN0b3IgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgQ29ubmVjdG9yIGNsYXNzIHdpdGggYSBmdW5jdGlvbiB0aGF0IHdpbGwgdGFrZSB0d29cbiAgICoge0BsaW5rIG1vZHVsZTpzYWlqL2Nvbm5lY3Rpb24vQ29ubmVjdGlvbn5Db25uZWN0YWJsZX1zIGFuZCBjcmVhdGUgYVxuICAgKiBrZXkgZnJvbSB0aGVtLlxuICAgKiBgYGBcbiAgICogY29uc3Qga2V5RnVuY3Rpb24gPSAoY29uQSwgY29uQik9PiBgJHtjb25BLmdldE5hbWUoKX06JHtjb25CLmdldE5hbWUoKX1gXG4gICAqIGNvbnN0IGNvbm5lY3RvciA9IG5ldyBDb25uZWN0b3Ioa2V5RnVuY3Rpb24sICdzaW1wbGV4Jyk7XG4gICAqIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0b3IuY29ubmVjdChjb25BLCBjb25CKTtcbiAgICogYGBgXG4gICAqIEBwYXJhbSAge21vZHVsZTpzYWlqL2Nvbm5lY3Rpb24vQ29ubmVjdG9yfkNvbm5lY3Rpb25LZXlGdW5jdGlvbn0ga2V5RnVuY3Rpb24ga2V5IHN0cmluZyBjcmVhdGluZyBmdW5jdGlvblxuICAgKiBAcGFyYW0gIHttb2R1bGU6c2Fpai9jb25uZWN0aW9uL0Nvbm5lY3Rpb25UeXBlfSBvcHRfdHlwZSBvcHRpb25hbCBjb25uZWN0aW9uIHR5cGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGtleUZ1bmN0aW9uLCBvcHRfdHlwZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAoIWtleUZ1bmN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoRXJyb3JzLkFTU0VSVF9DT05fS0VZX0ZVTkNUSU9OLmNvZGUpO1xuICAgIH1cblxuICAgIHRoaXMudHlwZV8gPSBvcHRfdHlwZSA/IG9wdF90eXBlIDogQ29ubmVjdGlvblR5cGUuU0lNUExFWDtcbiAgICB0aGlzLmtleUZuXyA9IGtleUZ1bmN0aW9uO1xuICB9XG5cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gYmV0d2VlbiB0d28gY29ubmVjdGFibGVzLCB1c2luZyB0aGUga2V5RnVuY3Rpb25cbiAgICogYW5kIHR5cGUgcHJvdmlkZWQgdG8gZ2VuZXJhdGUgYSBuZXcgY29ubmVjdGlvbktleS5cbiAgICogQHBhcmFtIHttb2R1bGU6c2Fpai9jb25uZWN0aW9uL0Nvbm5lY3Rpb25+Q29ubmVjdGFibGV9IGNvbkEgY29ubmVjdGlvbiBBXG4gICAqIEBwYXJhbSB7bW9kdWxlOnNhaWovY29ubmVjdGlvbi9Db25uZWN0aW9ufkNvbm5lY3RhYmxlfSBjb25CIGNvbm5lY3Rpb24gQlxuICAgKiBAcmV0dXJuIHttb2R1bGU6c2Fpai9jb25uZWN0aW9uL0Nvbm5lY3Rpb25+Q29ubmVjdGlvbn0gbmV3IGNvbm5lY3Rpb25cbiAgICogQGFwaVxuICAgKi9cbiAgY29ubmVjdChjb25BLCBjb25CKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmtleUZuXyhjb25BLCBjb25CKTtcbiAgICBjb25zdCBrZXkgPSB7aWQsIHR5cGU6IHRoaXMudHlwZV99O1xuXG4gICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uKGtleSwgY29uQSwgY29uQik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29ubmVjdG9yO1xuIl19