UNPKG

concern

Version:

A library for seperating your application logic into concerns.

200 lines (145 loc) 12 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _beof = require('beof'); var _beof2 = _interopRequireDefault(_beof); var _Address = require('./Address'); var _Address2 = _interopRequireDefault(_Address); var _AppConcern = require('./AppConcern'); var _AppConcern2 = _interopRequireDefault(_AppConcern); var _ConcernFactory = require('./ConcernFactory'); var _ConcernFactory2 = _interopRequireDefault(_ConcernFactory); var _ChildContext = require('./ChildContext'); var _ChildContext2 = _interopRequireDefault(_ChildContext); var _NullReference = require('./NullReference'); var _NullReference2 = _interopRequireDefault(_NullReference); var _Defaults = require('./Defaults'); var _Defaults2 = _interopRequireDefault(_Defaults); var _DeadLetters = require('./DeadLetters'); var _DeadLetters2 = _interopRequireDefault(_DeadLetters); var _Monitor = require('./remote/Monitor'); var _Monitor2 = _interopRequireDefault(_Monitor); var _Peer = require('./remote/Peer'); var _Peer2 = _interopRequireDefault(_Peer); var _RemoteReference = require('./remote/RemoteReference'); var _RemoteReference2 = _interopRequireDefault(_RemoteReference); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Guardian */ var Guardian = function () { function Guardian(system) { _classCallCheck(this, Guardian); this.deadLetters = new _DeadLetters2.default(system); this.app = new _ChildContext2.default('/app', this, new _Defaults2.default(function (context) { return new _AppConcern2.default(context); }), system); this.peers = []; this._system = system; } _createClass(Guardian, [{ key: 'path', value: function path() { return '/'; } }, { key: 'self', value: function self() { return this; } }, { key: 'parent', value: function parent() { return null; } }, { key: 'isChild', value: function isChild(ref) { return [this.app.self(), this.sys.self()].indexOf(ref) > -1; } }, { key: 'children', value: function children() { return [this.app.self(), this.sys.self()]; } }, { key: 'mailbox', value: function mailbox() { return this; } }, { key: 'dispatcher', value: function dispatcher() { return this; } }, { key: 'watch', value: function watch(ref) { throw new ReferenceError('watch(): is not implemented!'); } }, { key: 'unwatch', value: function unwatch(ref) { throw new ReferenceError('unwatch(): is not implemented!'); } }, { key: 'tell', value: function tell(message, from) { this.deadLetters.tell(message, from); } }, { key: 'select', value: function select(path) { var addr = _Address2.default.fromString(path); var peer = null; if (addr.isRemote()) { this.peers.forEach(function (p) { if (p.handles(addr)) peer = p; }); } if (peer !== null) return new _RemoteReference2.default(path, peer); return new _NullReference2.default(path, this.deadLetters); } }, { key: 'concernOf', value: function concernOf(factory, name) { throw new ReferenceError('concernOf(): is not implemented!'); } }, { key: 'system', value: function system() { return this._system; } }, { key: 'enqueue', value: function enqueue(msg) { throw new TypeError('Cannot enqueue to \'/\''); } }, { key: 'dequeue', value: function dequeue() { throw new TypeError('Cannot dequeue \'/\''); } }, { key: 'executeChildError', value: function executeChildError(e, child) { throw e; } }, { key: 'peer', value: function peer(instance, config) { (0, _beof2.default)({ instance: instance }).interface(_Peer2.default); (0, _beof2.default)({ config: config }).optional().object(); var monitor = new _Monitor2.default(instance, this._system, config); monitor.associate(); this.peers.push(instance); } }]); return Guardian; }(); exports.default = Guardian; module.exports = exports['default']; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9HdWFyZGlhbi5qcyJdLCJuYW1lcyI6WyJHdWFyZGlhbiIsInN5c3RlbSIsImRlYWRMZXR0ZXJzIiwiYXBwIiwiY29udGV4dCIsInBlZXJzIiwiX3N5c3RlbSIsInJlZiIsInNlbGYiLCJzeXMiLCJpbmRleE9mIiwiUmVmZXJlbmNlRXJyb3IiLCJtZXNzYWdlIiwiZnJvbSIsInRlbGwiLCJwYXRoIiwiYWRkciIsImZyb21TdHJpbmciLCJwZWVyIiwiaXNSZW1vdGUiLCJmb3JFYWNoIiwicCIsImhhbmRsZXMiLCJmYWN0b3J5IiwibmFtZSIsIm1zZyIsIlR5cGVFcnJvciIsImUiLCJjaGlsZCIsImluc3RhbmNlIiwiY29uZmlnIiwiaW50ZXJmYWNlIiwib3B0aW9uYWwiLCJvYmplY3QiLCJtb25pdG9yIiwiYXNzb2NpYXRlIiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUVBOzs7SUFHTUEsUTtBQUVGLHNCQUFZQyxNQUFaLEVBQW9CO0FBQUE7O0FBRWhCLGFBQUtDLFdBQUwsR0FBbUIsMEJBQWdCRCxNQUFoQixDQUFuQjtBQUNBLGFBQUtFLEdBQUwsR0FBVywyQkFBaUIsTUFBakIsRUFBeUIsSUFBekIsRUFBK0IsdUJBQWE7QUFBQSxtQkFBVyx5QkFBZUMsT0FBZixDQUFYO0FBQUEsU0FBYixDQUEvQixFQUFpRkgsTUFBakYsQ0FBWDtBQUNBLGFBQUtJLEtBQUwsR0FBYSxFQUFiO0FBQ0EsYUFBS0MsT0FBTCxHQUFlTCxNQUFmO0FBRUg7Ozs7K0JBRU07O0FBRUgsbUJBQU8sR0FBUDtBQUVIOzs7K0JBRU07O0FBRUgsbUJBQU8sSUFBUDtBQUVIOzs7aUNBRVE7O0FBRUwsbUJBQU8sSUFBUDtBQUVIOzs7Z0NBRU9NLEcsRUFBSzs7QUFFVCxtQkFBUSxDQUFDLEtBQUtKLEdBQUwsQ0FBU0ssSUFBVCxFQUFELEVBQWtCLEtBQUtDLEdBQUwsQ0FBU0QsSUFBVCxFQUFsQixFQUFtQ0UsT0FBbkMsQ0FBMkNILEdBQTNDLElBQWtELENBQUMsQ0FBM0Q7QUFFSDs7O21DQUVVOztBQUVQLG1CQUFPLENBQUMsS0FBS0osR0FBTCxDQUFTSyxJQUFULEVBQUQsRUFBa0IsS0FBS0MsR0FBTCxDQUFTRCxJQUFULEVBQWxCLENBQVA7QUFFSDs7O2tDQUVTOztBQUVOLG1CQUFPLElBQVA7QUFFSDs7O3FDQUVZOztBQUVULG1CQUFPLElBQVA7QUFFSDs7OzhCQUVLRCxHLEVBQUs7O0FBRVAsa0JBQU0sSUFBSUksY0FBSixDQUFtQiw4QkFBbkIsQ0FBTjtBQUVIOzs7Z0NBRU9KLEcsRUFBSzs7QUFFVCxrQkFBTSxJQUFJSSxjQUFKLENBQW1CLGdDQUFuQixDQUFOO0FBRUg7Ozs2QkFFSUMsTyxFQUFTQyxJLEVBQU07O0FBRWhCLGlCQUFLWCxXQUFMLENBQWlCWSxJQUFqQixDQUFzQkYsT0FBdEIsRUFBK0JDLElBQS9CO0FBRUg7OzsrQkFFTUUsSSxFQUFNOztBQUVULGdCQUFJQyxPQUFPLGtCQUFRQyxVQUFSLENBQW1CRixJQUFuQixDQUFYO0FBQ0EsZ0JBQUlHLE9BQU8sSUFBWDs7QUFFQSxnQkFBSUYsS0FBS0csUUFBTCxFQUFKLEVBQXFCOztBQUVqQixxQkFBS2QsS0FBTCxDQUFXZSxPQUFYLENBQW1CLGFBQUs7O0FBRXBCLHdCQUFJQyxFQUFFQyxPQUFGLENBQVVOLElBQVYsQ0FBSixFQUNJRSxPQUFPRyxDQUFQO0FBRVAsaUJBTEQ7QUFPSDs7QUFFRCxnQkFBSUgsU0FBUyxJQUFiLEVBQ0ksT0FBTyw4QkFBb0JILElBQXBCLEVBQTBCRyxJQUExQixDQUFQOztBQUVKLG1CQUFPLDRCQUFrQkgsSUFBbEIsRUFBd0IsS0FBS2IsV0FBN0IsQ0FBUDtBQUdIOzs7a0NBRVNxQixPLEVBQVNDLEksRUFBTTs7QUFFckIsa0JBQU0sSUFBSWIsY0FBSixDQUFtQixrQ0FBbkIsQ0FBTjtBQUVIOzs7aUNBRVE7O0FBRUwsbUJBQU8sS0FBS0wsT0FBWjtBQUVIOzs7Z0NBRU9tQixHLEVBQUs7O0FBRVQsa0JBQU0sSUFBSUMsU0FBSixDQUFjLHlCQUFkLENBQU47QUFFSDs7O2tDQUVTOztBQUVOLGtCQUFNLElBQUlBLFNBQUosQ0FBYyxzQkFBZCxDQUFOO0FBRUg7OzswQ0FFaUJDLEMsRUFBR0MsSyxFQUFPOztBQUV4QixrQkFBTUQsQ0FBTjtBQUVIOzs7NkJBRUlFLFEsRUFBVUMsTSxFQUFROztBQUVuQixnQ0FBSyxFQUFFRCxrQkFBRixFQUFMLEVBQW1CRSxTQUFuQjtBQUNBLGdDQUFLLEVBQUVELGNBQUYsRUFBTCxFQUFpQkUsUUFBakIsR0FBNEJDLE1BQTVCOztBQUVBLGdCQUFJQyxVQUFVLHNCQUFZTCxRQUFaLEVBQXNCLEtBQUt2QixPQUEzQixFQUFvQ3dCLE1BQXBDLENBQWQ7O0FBRUFJLG9CQUFRQyxTQUFSO0FBQ0EsaUJBQUs5QixLQUFMLENBQVcrQixJQUFYLENBQWdCUCxRQUFoQjtBQUVIOzs7Ozs7a0JBS1U3QixRIiwiZmlsZSI6Ikd1YXJkaWFuLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJlb2YgZnJvbSAnYmVvZic7XG5pbXBvcnQgQWRkcmVzcyBmcm9tICcuL0FkZHJlc3MnO1xuaW1wb3J0IEFwcENvbmNlcm4gZnJvbSAnLi9BcHBDb25jZXJuJztcbmltcG9ydCBDb25jZXJuRmFjdG9yeSBmcm9tICcuL0NvbmNlcm5GYWN0b3J5JztcbmltcG9ydCBDaGlsZENvbnRleHQgZnJvbSAnLi9DaGlsZENvbnRleHQnO1xuaW1wb3J0IE51bGxSZWZlcmVuY2UgZnJvbSAnLi9OdWxsUmVmZXJlbmNlJztcbmltcG9ydCBEZWZhdWx0cyBmcm9tICcuL0RlZmF1bHRzJztcbmltcG9ydCBEZWFkTGV0dGVycyBmcm9tICcuL0RlYWRMZXR0ZXJzJztcbmltcG9ydCBNb25pdG9yIGZyb20gJy4vcmVtb3RlL01vbml0b3InO1xuaW1wb3J0IFBlZXIgZnJvbSAnLi9yZW1vdGUvUGVlcic7XG5pbXBvcnQgUmVtb3RlUmVmZXJlbmNlIGZyb20gJy4vcmVtb3RlL1JlbW90ZVJlZmVyZW5jZSc7XG5cbi8qKlxuICogR3VhcmRpYW5cbiAqL1xuY2xhc3MgR3VhcmRpYW4ge1xuXG4gICAgY29uc3RydWN0b3Ioc3lzdGVtKSB7XG5cbiAgICAgICAgdGhpcy5kZWFkTGV0dGVycyA9IG5ldyBEZWFkTGV0dGVycyhzeXN0ZW0pO1xuICAgICAgICB0aGlzLmFwcCA9IG5ldyBDaGlsZENvbnRleHQoJy9hcHAnLCB0aGlzLCBuZXcgRGVmYXVsdHMoY29udGV4dCA9PiBuZXcgQXBwQ29uY2Vybihjb250ZXh0KSksIHN5c3RlbSk7XG4gICAgICAgIHRoaXMucGVlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5fc3lzdGVtID0gc3lzdGVtO1xuXG4gICAgfVxuXG4gICAgcGF0aCgpIHtcblxuICAgICAgICByZXR1cm4gJy8nO1xuXG4gICAgfVxuXG4gICAgc2VsZigpIHtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH1cblxuICAgIHBhcmVudCgpIHtcblxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIH1cblxuICAgIGlzQ2hpbGQocmVmKSB7XG5cbiAgICAgICAgcmV0dXJuIChbdGhpcy5hcHAuc2VsZigpLCB0aGlzLnN5cy5zZWxmKCldLmluZGV4T2YocmVmKSA+IC0xKTtcblxuICAgIH1cblxuICAgIGNoaWxkcmVuKCkge1xuXG4gICAgICAgIHJldHVybiBbdGhpcy5hcHAuc2VsZigpLCB0aGlzLnN5cy5zZWxmKCldO1xuXG4gICAgfVxuXG4gICAgbWFpbGJveCgpIHtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH1cblxuICAgIGRpc3BhdGNoZXIoKSB7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9XG5cbiAgICB3YXRjaChyZWYpIHtcblxuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ3dhdGNoKCk6IGlzIG5vdCBpbXBsZW1lbnRlZCEnKTtcblxuICAgIH1cblxuICAgIHVud2F0Y2gocmVmKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCd1bndhdGNoKCk6IGlzIG5vdCBpbXBsZW1lbnRlZCEnKTtcblxuICAgIH1cblxuICAgIHRlbGwobWVzc2FnZSwgZnJvbSkge1xuXG4gICAgICAgIHRoaXMuZGVhZExldHRlcnMudGVsbChtZXNzYWdlLCBmcm9tKTtcblxuICAgIH1cblxuICAgIHNlbGVjdChwYXRoKSB7XG5cbiAgICAgICAgdmFyIGFkZHIgPSBBZGRyZXNzLmZyb21TdHJpbmcocGF0aCk7XG4gICAgICAgIHZhciBwZWVyID0gbnVsbDtcblxuICAgICAgICBpZiAoYWRkci5pc1JlbW90ZSgpKSB7XG5cbiAgICAgICAgICAgIHRoaXMucGVlcnMuZm9yRWFjaChwID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChwLmhhbmRsZXMoYWRkcikpXG4gICAgICAgICAgICAgICAgICAgIHBlZXIgPSBwO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBlZXIgIT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlbW90ZVJlZmVyZW5jZShwYXRoLCBwZWVyKTtcblxuICAgICAgICByZXR1cm4gbmV3IE51bGxSZWZlcmVuY2UocGF0aCwgdGhpcy5kZWFkTGV0dGVycyk7XG5cblxuICAgIH1cblxuICAgIGNvbmNlcm5PZihmYWN0b3J5LCBuYW1lKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdjb25jZXJuT2YoKTogaXMgbm90IGltcGxlbWVudGVkIScpO1xuXG4gICAgfVxuXG4gICAgc3lzdGVtKCkge1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9zeXN0ZW07XG5cbiAgICB9XG5cbiAgICBlbnF1ZXVlKG1zZykge1xuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBlbnF1ZXVlIHRvIFxcJy9cXCcnKTtcblxuICAgIH1cblxuICAgIGRlcXVldWUoKSB7XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGRlcXVldWUgXFwnL1xcJycpO1xuXG4gICAgfVxuXG4gICAgZXhlY3V0ZUNoaWxkRXJyb3IoZSwgY2hpbGQpIHtcblxuICAgICAgICB0aHJvdyBlO1xuXG4gICAgfVxuXG4gICAgcGVlcihpbnN0YW5jZSwgY29uZmlnKSB7XG5cbiAgICAgICAgYmVvZih7IGluc3RhbmNlIH0pLmludGVyZmFjZShQZWVyKTtcbiAgICAgICAgYmVvZih7IGNvbmZpZyB9KS5vcHRpb25hbCgpLm9iamVjdCgpO1xuXG4gICAgICAgIHZhciBtb25pdG9yID0gbmV3IE1vbml0b3IoaW5zdGFuY2UsIHRoaXMuX3N5c3RlbSwgY29uZmlnKTtcblxuICAgICAgICBtb25pdG9yLmFzc29jaWF0ZSgpO1xuICAgICAgICB0aGlzLnBlZXJzLnB1c2goaW5zdGFuY2UpO1xuXG4gICAgfVxuXG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgR3VhcmRpYW5cbiJdfQ==