UNPKG

pot-js

Version:

Process management module

169 lines (126 loc) 5.13 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.startClient = exports.startServer = exports.getSocketPath = exports.removeDomainSocketFile = exports.getSocketFiles = undefined; let getSocketFiles = exports.getSocketFiles = (() => { var _ref = _asyncToGenerator(function* () { const runDir = yield _workspace2.default.getRunDir(); // DEPRECATED: workspace.DEPRECATED_getSocketsDir() const deprecatedSocketsDir = yield _workspace2.default.DEPRECATED_getSocketsDir(); const patterns = [`${runDir}/**/*.sock`, `${deprecatedSocketsDir}/**/*`]; const socketPaths = yield (0, _globby2.default)(patterns, { absolute: true, expandDirectories: false, onlyFiles: false }); return socketPaths.map(function (socketPath) { return { socketPath, key: (0, _path.basename)(socketPath, '.sock') }; }); }); return function getSocketFiles() { return _ref.apply(this, arguments); }; })(); let removeDomainSocketFile = exports.removeDomainSocketFile = (() => { var _ref2 = _asyncToGenerator(function* (socketPath) { if (_isWin2.default) { return; } if ((0, _lodash.isObject)(socketPath)) { socketPath = socketPath.socketPath; } _potLogger.logger.trace('remove socket file', socketPath); return (0, _fsExtra.remove)(socketPath).catch(_lodash.noop); }); return function removeDomainSocketFile(_x) { return _ref2.apply(this, arguments); }; })(); let getSocketPath = exports.getSocketPath = (() => { var _ref3 = _asyncToGenerator(function* (keyOrMonitor) { const runDir = yield _workspace2.default.getRunDir(); const key = (0, _getKey2.default)(keyOrMonitor); return (0, _createLocalDomainSocket.ensureLocalDomainPath)((0, _path.join)(runDir, key) + '.sock'); }); return function getSocketPath(_x2) { return _ref3.apply(this, arguments); }; })(); let startServer = exports.startServer = (() => { var _ref4 = _asyncToGenerator(function* (masterMonitor, workerMonitor) { const socketPath = workerMonitor.data.socketPath; _potLogger.logger.trace('unix domain socket path', _chalk2.default.gray(socketPath)); const socketServer = yield (0, _ipc.createServer)(socketPath); socketServer.onReplyClose(_asyncToGenerator(function* () { process.nextTick(_asyncToGenerator(function* () { yield masterMonitor.requestShutDown(workerMonitor); })); return true; })); socketServer.reply(_SocketEventTypes.CALL, (() => { var _ref7 = _asyncToGenerator(function* (data) { if (data && data.method) { var _data$args = data.args; const args = _data$args === undefined ? [] : _data$args, method = data.method; masterMonitor.currentWorkerMonitor = workerMonitor; if ((0, _lodash.isFunction)(masterMonitor[method])) { return masterMonitor[method](...args); } else { _potLogger.logger.warn(`Received API call "${method}", but it's not supported`); } } }); return function (_x5) { return _ref7.apply(this, arguments); }; })()); return socketServer; }); return function startServer(_x3, _x4) { return _ref4.apply(this, arguments); }; })(); let startClient = exports.startClient = (() => { var _ref8 = _asyncToGenerator(function* (socketPath) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; const silence = options.silence; try { const clientSocket = yield (0, _ipc.createClient)(socketPath); silence || _potLogger.logger.trace('start client socket', socketPath); return clientSocket; } catch (err) { if (err && ~['ECONNRESET', 'ECONNREFUSED', 'ENOENT'].indexOf(err.code)) { yield removeDomainSocketFile(socketPath); } else { silence || _potLogger.logger.error('socket error', err); } } }); return function startClient(_x7) { return _ref8.apply(this, arguments); }; })(); var _fsExtra = require('fs-extra'); var _path = require('path'); var _workspace = require('./workspace'); var _workspace2 = _interopRequireDefault(_workspace); var _ipc = require('./ipc'); var _createLocalDomainSocket = require('create-local-domain-socket'); var _potLogger = require('pot-logger'); var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk); var _globby = require('globby'); var _globby2 = _interopRequireDefault(_globby); var _lodash = require('lodash'); var _isWin = require('./isWin'); var _isWin2 = _interopRequireDefault(_isWin); var _getKey = require('./getKey'); var _getKey2 = _interopRequireDefault(_getKey); var _SocketEventTypes = require('./SocketEventTypes'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }