UNPKG

saij

Version:
88 lines (71 loc) 7.09 kB
"use strict"; 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