UNPKG

concern

Version:

A library for seperating your application logic into concerns.

114 lines (84 loc) 8.21 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 _child_process = require('child_process'); var _child_process2 = _interopRequireDefault(_child_process); var _beof = require('beof'); var _beof2 = _interopRequireDefault(_beof); var _bluebird = require('bluebird'); var _bluebird2 = _interopRequireDefault(_bluebird); var _Signal = require('../state/Signal'); var _Signal2 = _interopRequireDefault(_Signal); var _Address = require('../Address'); var _Address2 = _interopRequireDefault(_Address); 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"); } } /** * Child is the peer to use for running another System as a child process. * It will take care of forking the the child and transfering messages between the two * systems. * @param {string} path - The absolute path to the file to execute. * @implements {Peer} */ var Child = function () { function Child(path) { _classCallCheck(this, Child); (0, _beof2.default)({ path: path }).string(); this._path = path; this._child = null; } _createClass(Child, [{ key: 'unresolve', value: function unresolve(path) { var addr = _Address2.default.fromString(path); if (!addr.isRemote()) return path; return addr.uri.hash.split('#')[1]; } }, { key: 'resolve', value: function resolve(path) { var addr = _Address2.default.fromString(path); if (addr.isRemote()) return path; return 'child://' + this._path + '#' + path; } }, { key: 'handles', value: function handles(address) { if (address.uri.protocol === 'child:') if (address.uri.pathname === this._path) return true; } }, { key: 'associate', value: function associate(remote) { var _this = this; this._monitor = remote; return _bluebird2.default.try(function () { _this._child = _child_process2.default.fork(_this._path); _this._child.on('message', function (message) { return remote.message(message); }); _this._child.on('error', function (e) { return remote.error(e); }); _this._child.on('exit', function (e) { return remote.closed(_Signal2.default.Closed); }); }); } }, { key: 'send', value: function send(message) { var _this2 = this; _bluebird2.default.try(function () { return _this2._child.send(message); }).catch(function (e) { return _this2._monitor.error(e); }); } }]); return Child; }(); exports.default = Child; module.exports = exports['default']; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL0NoaWxkLmpzIl0sIm5hbWVzIjpbIkNoaWxkIiwicGF0aCIsInN0cmluZyIsIl9wYXRoIiwiX2NoaWxkIiwiYWRkciIsImZyb21TdHJpbmciLCJpc1JlbW90ZSIsInVyaSIsImhhc2giLCJzcGxpdCIsImFkZHJlc3MiLCJwcm90b2NvbCIsInBhdGhuYW1lIiwicmVtb3RlIiwiX21vbml0b3IiLCJ0cnkiLCJmb3JrIiwib24iLCJtZXNzYWdlIiwiZXJyb3IiLCJlIiwiY2xvc2VkIiwiQ2xvc2VkIiwic2VuZCIsImNhdGNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7O0FBRUE7Ozs7Ozs7SUFPTUEsSztBQUVGLG1CQUFZQyxJQUFaLEVBQWtCO0FBQUE7O0FBRWQsNEJBQUssRUFBRUEsVUFBRixFQUFMLEVBQWVDLE1BQWY7O0FBRUEsYUFBS0MsS0FBTCxHQUFhRixJQUFiO0FBQ0EsYUFBS0csTUFBTCxHQUFjLElBQWQ7QUFFSDs7OztrQ0FFU0gsSSxFQUFNOztBQUVaLGdCQUFJSSxPQUFPLGtCQUFRQyxVQUFSLENBQW1CTCxJQUFuQixDQUFYOztBQUVBLGdCQUFJLENBQUNJLEtBQUtFLFFBQUwsRUFBTCxFQUNJLE9BQU9OLElBQVA7O0FBRUosbUJBQU9JLEtBQUtHLEdBQUwsQ0FBU0MsSUFBVCxDQUFjQyxLQUFkLENBQW9CLEdBQXBCLEVBQXlCLENBQXpCLENBQVA7QUFFSDs7O2dDQUVPVCxJLEVBQU07O0FBRVYsZ0JBQUlJLE9BQU8sa0JBQVFDLFVBQVIsQ0FBbUJMLElBQW5CLENBQVg7O0FBRUEsZ0JBQUlJLEtBQUtFLFFBQUwsRUFBSixFQUNJLE9BQU9OLElBQVA7O0FBR0osZ0NBQWtCLEtBQUtFLEtBQXZCLFNBQWdDRixJQUFoQztBQUVIOzs7Z0NBRU9VLE8sRUFBUzs7QUFFYixnQkFBSUEsUUFBUUgsR0FBUixDQUFZSSxRQUFaLEtBQXlCLFFBQTdCLEVBQ0ksSUFBSUQsUUFBUUgsR0FBUixDQUFZSyxRQUFaLEtBQXlCLEtBQUtWLEtBQWxDLEVBQ0ksT0FBTyxJQUFQO0FBRVg7OztrQ0FFU1csTSxFQUFRO0FBQUE7O0FBRWQsaUJBQUtDLFFBQUwsR0FBZ0JELE1BQWhCOztBQUVBLG1CQUFPLG1CQUFRRSxHQUFSLENBQVksWUFBTTtBQUNyQixzQkFBS1osTUFBTCxHQUFjLHdCQUFjYSxJQUFkLENBQW1CLE1BQUtkLEtBQXhCLENBQWQ7QUFDQSxzQkFBS0MsTUFBTCxDQUFZYyxFQUFaLENBQWUsU0FBZixFQUEwQjtBQUFBLDJCQUFXSixPQUFPSyxPQUFQLENBQWVBLE9BQWYsQ0FBWDtBQUFBLGlCQUExQjtBQUNBLHNCQUFLZixNQUFMLENBQVljLEVBQVosQ0FBZSxPQUFmLEVBQXdCO0FBQUEsMkJBQUtKLE9BQU9NLEtBQVAsQ0FBYUMsQ0FBYixDQUFMO0FBQUEsaUJBQXhCO0FBQ0Esc0JBQUtqQixNQUFMLENBQVljLEVBQVosQ0FBZSxNQUFmLEVBQXVCO0FBQUEsMkJBQUtKLE9BQU9RLE1BQVAsQ0FBYyxpQkFBT0MsTUFBckIsQ0FBTDtBQUFBLGlCQUF2QjtBQUNILGFBTE0sQ0FBUDtBQU9IOzs7NkJBRUlKLE8sRUFBUztBQUFBOztBQUVWLCtCQUFRSCxHQUFSLENBQVk7QUFBQSx1QkFBTSxPQUFLWixNQUFMLENBQVlvQixJQUFaLENBQWlCTCxPQUFqQixDQUFOO0FBQUEsYUFBWixFQUNBTSxLQURBLENBQ007QUFBQSx1QkFBSyxPQUFLVixRQUFMLENBQWNLLEtBQWQsQ0FBb0JDLENBQXBCLENBQUw7QUFBQSxhQUROO0FBR0g7Ozs7OztrQkFJVXJCLEsiLCJmaWxlIjoiQ2hpbGQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBiZW9mIGZyb20gJ2Jlb2YnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IFNpZ25hbCBmcm9tICcuLi9zdGF0ZS9TaWduYWwnO1xuaW1wb3J0IEFkZHJlc3MgZnJvbSAnLi4vQWRkcmVzcyc7XG5cbi8qKlxuICogQ2hpbGQgaXMgdGhlIHBlZXIgdG8gdXNlIGZvciBydW5uaW5nIGFub3RoZXIgU3lzdGVtIGFzIGEgY2hpbGQgcHJvY2Vzcy5cbiAqIEl0IHdpbGwgdGFrZSBjYXJlIG9mIGZvcmtpbmcgdGhlIHRoZSBjaGlsZCBhbmQgdHJhbnNmZXJpbmcgbWVzc2FnZXMgYmV0d2VlbiB0aGUgdHdvXG4gKiBzeXN0ZW1zLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZSB0byBleGVjdXRlLlxuICogQGltcGxlbWVudHMge1BlZXJ9XG4gKi9cbmNsYXNzIENoaWxkIHtcblxuICAgIGNvbnN0cnVjdG9yKHBhdGgpIHtcblxuICAgICAgICBiZW9mKHsgcGF0aCB9KS5zdHJpbmcoKTtcblxuICAgICAgICB0aGlzLl9wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5fY2hpbGQgPSBudWxsO1xuXG4gICAgfVxuXG4gICAgdW5yZXNvbHZlKHBhdGgpIHtcblxuICAgICAgICB2YXIgYWRkciA9IEFkZHJlc3MuZnJvbVN0cmluZyhwYXRoKTtcblxuICAgICAgICBpZiAoIWFkZHIuaXNSZW1vdGUoKSlcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xuXG4gICAgICAgIHJldHVybiBhZGRyLnVyaS5oYXNoLnNwbGl0KCcjJylbMV07XG5cbiAgICB9XG5cbiAgICByZXNvbHZlKHBhdGgpIHtcblxuICAgICAgICB2YXIgYWRkciA9IEFkZHJlc3MuZnJvbVN0cmluZyhwYXRoKTtcblxuICAgICAgICBpZiAoYWRkci5pc1JlbW90ZSgpKVxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG5cblxuICAgICAgICByZXR1cm4gYGNoaWxkOi8vJHt0aGlzLl9wYXRofSMke3BhdGh9YDtcblxuICAgIH1cblxuICAgIGhhbmRsZXMoYWRkcmVzcykge1xuXG4gICAgICAgIGlmIChhZGRyZXNzLnVyaS5wcm90b2NvbCA9PT0gJ2NoaWxkOicpXG4gICAgICAgICAgICBpZiAoYWRkcmVzcy51cmkucGF0aG5hbWUgPT09IHRoaXMuX3BhdGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICB9XG5cbiAgICBhc3NvY2lhdGUocmVtb3RlKSB7XG5cbiAgICAgICAgdGhpcy5fbW9uaXRvciA9IHJlbW90ZTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS50cnkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2hpbGQgPSBjaGlsZF9wcm9jZXNzLmZvcmsodGhpcy5fcGF0aCk7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZC5vbignbWVzc2FnZScsIG1lc3NhZ2UgPT4gcmVtb3RlLm1lc3NhZ2UobWVzc2FnZSkpO1xuICAgICAgICAgICAgdGhpcy5fY2hpbGQub24oJ2Vycm9yJywgZSA9PiByZW1vdGUuZXJyb3IoZSkpO1xuICAgICAgICAgICAgdGhpcy5fY2hpbGQub24oJ2V4aXQnLCBlID0+IHJlbW90ZS5jbG9zZWQoU2lnbmFsLkNsb3NlZCkpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHNlbmQobWVzc2FnZSkge1xuXG4gICAgICAgIFByb21pc2UudHJ5KCgpID0+IHRoaXMuX2NoaWxkLnNlbmQobWVzc2FnZSkpLlxuICAgICAgICBjYXRjaChlID0+IHRoaXMuX21vbml0b3IuZXJyb3IoZSkpO1xuXG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IENoaWxkXG4iXX0=