UNPKG

ngx

Version:

The Data-driven nginx configuration manager

208 lines (159 loc) 5.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.readSavedUpstreams = undefined; var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var parseYaml = function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(content) { return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: return _context.abrupt('return', _jsYaml2.default.safeLoad(content)); case 1: case 'end': return _context.stop(); } } }, _callee, this); })); return function parseYaml(_x) { return _ref.apply(this, arguments); }; }(); var readSavedUpstreams = exports.readSavedUpstreams = function () { var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(dir) { var upstreams; return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: upstreams = require(upstreamFile(dir)); Object.defineProperty(upstreams, 'forEach', { value: function value(fn) { (0, _keys2.default)(upstreams).forEach(function (name) { fn(name, upstreams[name]); }); }, enumerable: false }); return _context3.abrupt('return', upstreams); case 3: case 'end': return _context3.stop(); } } }, _callee3, this); })); return function readSavedUpstreams(_x3) { return _ref3.apply(this, arguments); }; }(); exports.readYaml = readYaml; exports.readFile = readFile; exports.decorate = decorate; exports.handleSemicolon = handleSemicolon; exports.saveUpstreams = saveUpstreams; exports.removeSavedUpstreams = removeSavedUpstreams; var _jsYaml = require('js-yaml'); var _jsYaml2 = _interopRequireDefault(_jsYaml); var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _codeStringify = require('code-stringify'); var _codeStringify2 = _interopRequireDefault(_codeStringify); var _upstream = require('../entity/upstream'); var _server = require('../entity/server'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function readYaml(filepath) { var base = _path2.default.basename(filepath); return readFile(filepath).then(parseYaml).then(function (config) { config.upstreams = new _upstream.Upstreams(config.upstreams); config.servers = new _server.Servers(cleanServers(config.servers), { base: base }); return config; }); } // TODO function cleanServers(servers, filepath) { // resolve server.include return servers; } function readFile(filepath) { return _fsExtra2.default.readFile(filepath).then(function (content) { return content.toString(); }).catch(function (err) { var error = new Error('fails to read "' + filepath + '", ' + err.stack); // make sure the original error.code error.code = err.code; return _promise2.default.reject(error); }); } // abc.conf, abcde -> abc-abcde.conf var REGEX_EXT = /\.[a-z0-9]+(?:$|\?)/; function decorate(basename, hash) { return basename.replace(REGEX_EXT, function (ext) { return '-' + hash.slice(0, 10) + ext; }); } var SEMICOLON = ';'; function handleSemicolon(fn) { var _this = this; return function () { var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(p) { var lastIndex, has, result; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: lastIndex = p.lastIndexOf(SEMICOLON); has = lastIndex === p.length - 1; // removes the last semicolon if (has) { p = p.substr(0, lastIndex); } _context2.next = 5; return fn(p); case 5: result = _context2.sent; return _context2.abrupt('return', has ? result // {{root /path/to;}} -> root /path/to; ? result + SEMICOLON // {{root /path/to}} -> '' // avoid to output an unnecessary `;` : '' // {{root /path/to}} -> root /path/to : result); case 7: case 'end': return _context2.stop(); } } }, _callee2, _this); })); return function (_x2) { return _ref2.apply(this, arguments); }; }(); } function upstreamFile(dir) { return _path2.default.join(dir, '.ngx', 'upstream.js'); } function saveUpstreams(dir, upstreams) { var us = {}; upstreams.forEach(function (name, servers) { us[name] = servers; }); return _fsExtra2.default.outputFile(upstreamFile(dir), 'module.exports = ' + (0, _codeStringify2.default)(us, null, 2)); } function removeSavedUpstreams(dir) { return _fsExtra2.default.unlink(upstreamFile(dir)); }