concern
Version:
A library for seperating your application logic into concerns.
122 lines (90 loc) • 7.59 kB
JavaScript
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 _events = require('events');
var _events2 = _interopRequireDefault(_events);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
var _beof = require('beof');
var _beof2 = _interopRequireDefault(_beof);
var _Signal = require('./state/Signal');
var _Signal2 = _interopRequireDefault(_Signal);
var _Guardian = require('./Guardian');
var _Guardian2 = _interopRequireDefault(_Guardian);
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"); } }
/**
* IsomorphicSystem represents a collection of related Concerns that share a parent Context.
* Use them to create to represent the root of a tree your application will
* branch into.
* @param {Context} parent
* @implements {Context}
*/
var IsomorphicSystem = function () {
function IsomorphicSystem() {
_classCallCheck(this, IsomorphicSystem);
this._events = new _events2.default.EventEmitter();
this._root = new _Guardian2.default(this);
}
/**
* create a new IsomorphicSystem
* @param {string} name
* @returns {IsomorphicSystem}
*/
_createClass(IsomorphicSystem, [{
key: 'deadLetters',
value: function deadLetters() {
return this._root.deadLetters;
}
}, {
key: 'peer',
value: function peer(instance, config) {
this._root.peer(instance, config);
}
}, {
key: 'select',
value: function select(path) {
return this._root.app.select(path);
}
}, {
key: 'concernOf',
value: function concernOf(factory, name) {
return this._root.app.concernOf(factory, name);
}
}, {
key: 'shutdown',
value: function shutdown(reason) {
var _this = this;
// this._root.app.tell(Signal.Stop, this._root);
//@todo -> actually wait until app and sys finished shutting down
//perhaps this is better done in the root/Guardian?
//
setTimeout(function () {
_this._root = null;
_this._events = null;
if (reason) throw reason;
}, 1000);
}
}, {
key: 'on',
value: function on() {
this._events.on.apply(this._events, arguments);
}
}, {
key: 'emit',
value: function emit() {
this._events.emit.apply(this._events, arguments);
}
}], [{
key: 'create',
value: function create(name) {
return new IsomorphicSystem();
}
}]);
return IsomorphicSystem;
}();
exports.default = IsomorphicSystem;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Jc29tb3JwaGljU3lzdGVtLmpzIl0sIm5hbWVzIjpbIklzb21vcnBoaWNTeXN0ZW0iLCJfZXZlbnRzIiwiRXZlbnRFbWl0dGVyIiwiX3Jvb3QiLCJkZWFkTGV0dGVycyIsImluc3RhbmNlIiwiY29uZmlnIiwicGVlciIsInBhdGgiLCJhcHAiLCJzZWxlY3QiLCJmYWN0b3J5IiwibmFtZSIsImNvbmNlcm5PZiIsInJlYXNvbiIsInNldFRpbWVvdXQiLCJvbiIsImFwcGx5IiwiYXJndW1lbnRzIiwiZW1pdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUVBOzs7Ozs7O0lBT01BLGdCO0FBRUYsZ0NBQWM7QUFBQTs7QUFFVixhQUFLQyxPQUFMLEdBQWUsSUFBSSxpQkFBT0MsWUFBWCxFQUFmO0FBQ0EsYUFBS0MsS0FBTCxHQUFhLHVCQUFhLElBQWIsQ0FBYjtBQUVIOztBQUVEOzs7Ozs7Ozs7c0NBV2M7O0FBRVYsbUJBQU8sS0FBS0EsS0FBTCxDQUFXQyxXQUFsQjtBQUVIOzs7NkJBRUlDLFEsRUFBVUMsTSxFQUFROztBQUVuQixpQkFBS0gsS0FBTCxDQUFXSSxJQUFYLENBQWdCRixRQUFoQixFQUEwQkMsTUFBMUI7QUFFSDs7OytCQUVNRSxJLEVBQU07O0FBRVQsbUJBQU8sS0FBS0wsS0FBTCxDQUFXTSxHQUFYLENBQWVDLE1BQWYsQ0FBc0JGLElBQXRCLENBQVA7QUFFSDs7O2tDQUVTRyxPLEVBQVNDLEksRUFBTTs7QUFFckIsbUJBQU8sS0FBS1QsS0FBTCxDQUFXTSxHQUFYLENBQWVJLFNBQWYsQ0FBeUJGLE9BQXpCLEVBQWtDQyxJQUFsQyxDQUFQO0FBRUg7OztpQ0FFUUUsTSxFQUFRO0FBQUE7O0FBRWQ7O0FBRUM7QUFDQTtBQUNBO0FBQ0FDLHVCQUFXLFlBQU07O0FBRWIsc0JBQUtaLEtBQUwsR0FBYSxJQUFiO0FBQ0Esc0JBQUtGLE9BQUwsR0FBZSxJQUFmOztBQUVBLG9CQUFJYSxNQUFKLEVBQ0ksTUFBTUEsTUFBTjtBQUVQLGFBUkQsRUFRRyxJQVJIO0FBVUg7Ozs2QkFFSTs7QUFFRCxpQkFBS2IsT0FBTCxDQUFhZSxFQUFiLENBQWdCQyxLQUFoQixDQUFzQixLQUFLaEIsT0FBM0IsRUFBb0NpQixTQUFwQztBQUVIOzs7K0JBRU07O0FBRUgsaUJBQUtqQixPQUFMLENBQWFrQixJQUFiLENBQWtCRixLQUFsQixDQUF3QixLQUFLaEIsT0FBN0IsRUFBc0NpQixTQUF0QztBQUVIOzs7K0JBM0RhTixJLEVBQU07O0FBRWhCLG1CQUFPLElBQUlaLGdCQUFKLEVBQVA7QUFFSDs7Ozs7O2tCQTJEVUEsZ0IiLCJmaWxlIjoiSXNvbW9ycGhpY1N5c3RlbS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBiZW9mIGZyb20gJ2Jlb2YnO1xuaW1wb3J0IFNpZ25hbCBmcm9tICcuL3N0YXRlL1NpZ25hbCc7XG5pbXBvcnQgR3VhcmRpYW4gZnJvbSAnLi9HdWFyZGlhbic7XG5cbi8qKlxuICogSXNvbW9ycGhpY1N5c3RlbSByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIENvbmNlcm5zIHRoYXQgc2hhcmUgYSBwYXJlbnQgQ29udGV4dC5cbiAqIFVzZSB0aGVtIHRvIGNyZWF0ZSB0byByZXByZXNlbnQgdGhlIHJvb3Qgb2YgYSB0cmVlIHlvdXIgYXBwbGljYXRpb24gd2lsbFxuICogYnJhbmNoIGludG8uXG4gKiBAcGFyYW0ge0NvbnRleHR9IHBhcmVudFxuICogQGltcGxlbWVudHMge0NvbnRleHR9XG4gKi9cbmNsYXNzIElzb21vcnBoaWNTeXN0ZW0ge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG5cbiAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5fcm9vdCA9IG5ldyBHdWFyZGlhbih0aGlzKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZSBhIG5ldyBJc29tb3JwaGljU3lzdGVtXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJucyB7SXNvbW9ycGhpY1N5c3RlbX1cbiAgICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlKG5hbWUpIHtcblxuICAgICAgICByZXR1cm4gbmV3IElzb21vcnBoaWNTeXN0ZW0oKTtcblxuICAgIH1cblxuICAgIGRlYWRMZXR0ZXJzKCkge1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmRlYWRMZXR0ZXJzO1xuXG4gICAgfVxuXG4gICAgcGVlcihpbnN0YW5jZSwgY29uZmlnKSB7XG5cbiAgICAgICAgdGhpcy5fcm9vdC5wZWVyKGluc3RhbmNlLCBjb25maWcpO1xuXG4gICAgfVxuXG4gICAgc2VsZWN0KHBhdGgpIHtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5hcHAuc2VsZWN0KHBhdGgpO1xuXG4gICAgfVxuXG4gICAgY29uY2Vybk9mKGZhY3RvcnksIG5hbWUpIHtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdC5hcHAuY29uY2Vybk9mKGZhY3RvcnksIG5hbWUpO1xuXG4gICAgfVxuXG4gICAgc2h1dGRvd24ocmVhc29uKSB7XG5cbiAgICAgICAvLyB0aGlzLl9yb290LmFwcC50ZWxsKFNpZ25hbC5TdG9wLCB0aGlzLl9yb290KTtcblxuICAgICAgICAvL0B0b2RvIC0+IGFjdHVhbGx5IHdhaXQgdW50aWwgYXBwIGFuZCBzeXMgZmluaXNoZWQgc2h1dHRpbmcgZG93blxuICAgICAgICAvL3BlcmhhcHMgdGhpcyBpcyBiZXR0ZXIgZG9uZSBpbiB0aGUgcm9vdC9HdWFyZGlhbj9cbiAgICAgICAgLy9cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHJlYXNvbilcbiAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG5cbiAgICAgICAgfSwgMTAwMCk7XG5cbiAgICB9XG5cbiAgICBvbigpIHtcblxuICAgICAgICB0aGlzLl9ldmVudHMub24uYXBwbHkodGhpcy5fZXZlbnRzLCBhcmd1bWVudHMpO1xuXG4gICAgfVxuXG4gICAgZW1pdCgpIHtcblxuICAgICAgICB0aGlzLl9ldmVudHMuZW1pdC5hcHBseSh0aGlzLl9ldmVudHMsIGFyZ3VtZW50cyk7XG5cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgSXNvbW9ycGhpY1N5c3RlbTtcbiJdfQ==
;