@reactant/web
Version:
reactant platform for web
319 lines (238 loc) • 25.3 kB
JavaScript
;
require("core-js/modules/es.symbol");
require("core-js/modules/es.symbol.description");
require("core-js/modules/es.symbol.iterator");
require("core-js/modules/es.array.concat");
require("core-js/modules/es.array.from");
require("core-js/modules/es.array.iterator");
require("core-js/modules/es.array.join");
require("core-js/modules/es.array.slice");
require("core-js/modules/es.function.name");
require("core-js/modules/es.number.constructor");
require("core-js/modules/es.object.to-string");
require("core-js/modules/es.promise");
require("core-js/modules/es.regexp.exec");
require("core-js/modules/es.regexp.to-string");
require("core-js/modules/es.string.iterator");
require("core-js/modules/es.string.split");
require("core-js/modules/web.dom-collections.iterator");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = build;
require("regenerator-runtime/runtime");
var _execa = _interopRequireDefault(require("execa"));
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _path = _interopRequireDefault(require("path"));
var _platform = require("@reactant/platform");
var _createCracoConfig = _interopRequireDefault(require("../createCracoConfig"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function build(_x, _x2, _x3) {
return _build.apply(this, arguments);
}
function _build() {
_build = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(context, logger, api) {
var options, dockerPath, preparePath, pkg, _pkg$version$split, _pkg$version$split2, major, minor, patch, maintainer, cracoConfigPath, finalizeBuild, handleFileChangedCount, handleFileChanged, cleanup;
return regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
logger.spinner.start('preparing build');
options = (0, _platform.getOptions)();
if (!context.options.docker) {
_context4.next = 31;
break;
}
dockerPath = _path.default.resolve(context.paths.root, '.docker');
preparePath = _path.default.resolve(context.paths.root, 'docker/prepare.sh');
_context4.next = 7;
return _fsExtra.default.pathExists(preparePath);
case 7:
if (_context4.sent) {
_context4.next = 9;
break;
}
preparePath = _path.default.resolve(__dirname, '../docker/prepare.sh');
case 9:
_context4.next = 11;
return _fsExtra.default.remove(dockerPath);
case 11:
_context4.next = 13;
return _fsExtra.default.mkdirs(dockerPath);
case 13:
_context4.next = 15;
return _fsExtra.default.copy(_path.default.resolve(__dirname, '../docker/entrypoint.sh'), _path.default.resolve(dockerPath, 'entrypoint.sh'));
case 15:
_context4.next = 17;
return _fsExtra.default.copy(_path.default.resolve(__dirname, '../docker/nginx.conf'), _path.default.resolve(dockerPath, 'nginx.conf'));
case 17:
_context4.next = 19;
return _fsExtra.default.copy(preparePath, _path.default.resolve(dockerPath, 'prepare.sh'));
case 19:
_context4.next = 21;
return _fsExtra.default.readJson(_path.default.resolve(context.paths.root, 'package.json'));
case 21:
pkg = _context4.sent;
_pkg$version$split = pkg.version.split('.'), _pkg$version$split2 = _slicedToArray(_pkg$version$split, 3), major = _pkg$version$split2[0], minor = _pkg$version$split2[1], patch = _pkg$version$split2[2];
maintainer = (!pkg.author || typeof pkg.author === 'string' ? pkg.author : "".concat(pkg.author.name, " <").concat(pkg.author.email, ">")) || '';
logger.spinner.succeed('prepared build');
_context4.next = 27;
return api.spawn('docker-compose', ['-f', _path.default.resolve(__dirname, '../docker/docker-build.yaml'), 'build'], {
env: {
REACTANT_BUILD_PACKAGES: options.docker.buildPackages.join(' '),
REACTANT_DOCKERFILE: _path.default.resolve(__dirname, '../docker/Dockerfile'),
REACTANT_IMAGE: options.docker.image || pkg.name,
REACTANT_MAINTAINER: maintainer,
REACTANT_MAJOR: major,
REACTANT_MINOR: minor,
REACTANT_PACKAGES: options.docker.packages.join(' '),
REACTANT_PATCH: patch,
REACTANT_PLATFORM: context.platformName,
REACTANT_ROOT: context.paths.root
}
});
case 27:
_context4.next = 29;
return _fsExtra.default.remove(dockerPath);
case 29:
_context4.next = 43;
break;
case 31:
_context4.next = 33;
return (0, _createCracoConfig.default)(context);
case 33:
cracoConfigPath = _context4.sent;
logger.spinner.succeed('prepared build');
finalizeBuild = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return _fsExtra.default.mkdirs(context.paths.dist);
case 2:
_context.next = 4;
return _fsExtra.default.remove(context.paths.dist);
case 4:
_context.next = 6;
return _fsExtra.default.move(context.paths.build, context.paths.dist);
case 6:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function finalizeBuild() {
return _ref.apply(this, arguments);
};
}();
if (context.options.analyze) {
handleFileChangedCount = 0;
handleFileChanged = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!(handleFileChangedCount < 1)) {
_context2.next = 3;
break;
}
handleFileChangedCount++;
return _context2.abrupt("return", null);
case 3:
_context2.next = 5;
return new Promise(function (resolve) {
return setTimeout(resolve, 3000);
});
case 5:
_context2.next = 7;
return finalizeBuild();
case 7:
_fsExtra.default.unwatchFile(_path.default.resolve(context.paths.build, 'index.html'), handleFileChanged);
case 8:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return function handleFileChanged() {
return _ref2.apply(this, arguments);
};
}();
_fsExtra.default.watchFile(_path.default.resolve(context.paths.build, 'index.html'), handleFileChanged);
cleanup = /*#__PURE__*/function () {
var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
var pid;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.prev = 0;
_fsExtra.default.watchFile(_path.default.resolve(context.paths.build, 'index.html'), handleFileChanged);
_context3.t0 = Number;
_context3.next = 5;
return (0, _execa.default)('fuser', ['8888/tcp']);
case 5:
_context3.t1 = _context3.sent.stdout.split(' ')[1];
if (_context3.t1) {
_context3.next = 8;
break;
}
_context3.t1 = 0;
case 8:
_context3.t2 = _context3.t1;
pid = (0, _context3.t0)(_context3.t2);
if (pid) process.kill(pid, 'SIGKILL');
_context3.next = 16;
break;
case 13:
_context3.prev = 13;
_context3.t3 = _context3["catch"](0);
console.error(_context3.t3);
case 16:
case "end":
return _context3.stop();
}
}
}, _callee3, null, [[0, 13]]);
}));
return function cleanup() {
return _ref3.apply(this, arguments);
};
}();
process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);
}
_context4.next = 39;
return api.spawn(['@craco/craco', 'craco'], ['build', '--config', cracoConfigPath]);
case 39:
if (context.options.analyze) {
_context4.next = 42;
break;
}
_context4.next = 42;
return finalizeBuild();
case 42:
return _context4.abrupt("return", null);
case 43:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return _build.apply(this, arguments);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL2J1aWxkLnRzIl0sIm5hbWVzIjpbImJ1aWxkIiwiY29udGV4dCIsImxvZ2dlciIsImFwaSIsInNwaW5uZXIiLCJzdGFydCIsIm9wdGlvbnMiLCJkb2NrZXIiLCJkb2NrZXJQYXRoIiwicGF0aCIsInJlc29sdmUiLCJwYXRocyIsInJvb3QiLCJwcmVwYXJlUGF0aCIsImZzIiwicGF0aEV4aXN0cyIsIl9fZGlybmFtZSIsInJlbW92ZSIsIm1rZGlycyIsImNvcHkiLCJyZWFkSnNvbiIsInBrZyIsInZlcnNpb24iLCJzcGxpdCIsIm1ham9yIiwibWlub3IiLCJwYXRjaCIsIm1haW50YWluZXIiLCJhdXRob3IiLCJuYW1lIiwiZW1haWwiLCJzdWNjZWVkIiwic3Bhd24iLCJlbnYiLCJSRUFDVEFOVF9CVUlMRF9QQUNLQUdFUyIsImJ1aWxkUGFja2FnZXMiLCJqb2luIiwiUkVBQ1RBTlRfRE9DS0VSRklMRSIsIlJFQUNUQU5UX0lNQUdFIiwiaW1hZ2UiLCJSRUFDVEFOVF9NQUlOVEFJTkVSIiwiUkVBQ1RBTlRfTUFKT1IiLCJSRUFDVEFOVF9NSU5PUiIsIlJFQUNUQU5UX1BBQ0tBR0VTIiwicGFja2FnZXMiLCJSRUFDVEFOVF9QQVRDSCIsIlJFQUNUQU5UX1BMQVRGT1JNIiwicGxhdGZvcm1OYW1lIiwiUkVBQ1RBTlRfUk9PVCIsImNyYWNvQ29uZmlnUGF0aCIsImZpbmFsaXplQnVpbGQiLCJkaXN0IiwibW92ZSIsImFuYWx5emUiLCJoYW5kbGVGaWxlQ2hhbmdlZENvdW50IiwiaGFuZGxlRmlsZUNoYW5nZWQiLCJQcm9taXNlIiwic2V0VGltZW91dCIsInVud2F0Y2hGaWxlIiwid2F0Y2hGaWxlIiwiY2xlYW51cCIsIk51bWJlciIsInN0ZG91dCIsInBpZCIsInByb2Nlc3MiLCJraWxsIiwiY29uc29sZSIsImVycm9yIiwib24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FFOEJBLEs7Ozs7O21FQUFmLGtCQUNiQyxPQURhLEVBRWJDLE1BRmEsRUFHYkMsR0FIYTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS2JELFlBQUFBLE1BQU0sQ0FBQ0UsT0FBUCxDQUFlQyxLQUFmLENBQXFCLGlCQUFyQjtBQUNNQyxZQUFBQSxPQU5PLEdBTUcsMkJBTkg7O0FBQUEsaUJBT1RMLE9BQU8sQ0FBQ0ssT0FBUixDQUFnQkMsTUFQUDtBQUFBO0FBQUE7QUFBQTs7QUFRTEMsWUFBQUEsVUFSSyxHQVFRQyxjQUFLQyxPQUFMLENBQWFULE9BQU8sQ0FBQ1UsS0FBUixDQUFjQyxJQUEzQixFQUFpQyxTQUFqQyxDQVJSO0FBU1BDLFlBQUFBLFdBVE8sR0FTT0osY0FBS0MsT0FBTCxDQUFhVCxPQUFPLENBQUNVLEtBQVIsQ0FBY0MsSUFBM0IsRUFBaUMsbUJBQWpDLENBVFA7QUFBQTtBQUFBLG1CQVVDRSxpQkFBR0MsVUFBSCxDQUFjRixXQUFkLENBVkQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFXVEEsWUFBQUEsV0FBVyxHQUFHSixjQUFLQyxPQUFMLENBQWFNLFNBQWIsRUFBd0Isc0JBQXhCLENBQWQ7O0FBWFM7QUFBQTtBQUFBLG1CQWFMRixpQkFBR0csTUFBSCxDQUFVVCxVQUFWLENBYks7O0FBQUE7QUFBQTtBQUFBLG1CQWNMTSxpQkFBR0ksTUFBSCxDQUFVVixVQUFWLENBZEs7O0FBQUE7QUFBQTtBQUFBLG1CQWVMTSxpQkFBR0ssSUFBSCxDQUNKVixjQUFLQyxPQUFMLENBQWFNLFNBQWIsRUFBd0IseUJBQXhCLENBREksRUFFSlAsY0FBS0MsT0FBTCxDQUFhRixVQUFiLEVBQXlCLGVBQXpCLENBRkksQ0FmSzs7QUFBQTtBQUFBO0FBQUEsbUJBbUJMTSxpQkFBR0ssSUFBSCxDQUNKVixjQUFLQyxPQUFMLENBQWFNLFNBQWIsRUFBd0Isc0JBQXhCLENBREksRUFFSlAsY0FBS0MsT0FBTCxDQUFhRixVQUFiLEVBQXlCLFlBQXpCLENBRkksQ0FuQks7O0FBQUE7QUFBQTtBQUFBLG1CQXVCTE0saUJBQUdLLElBQUgsQ0FBUU4sV0FBUixFQUFxQkosY0FBS0MsT0FBTCxDQUFhRixVQUFiLEVBQXlCLFlBQXpCLENBQXJCLENBdkJLOztBQUFBO0FBQUE7QUFBQSxtQkF3Qk9NLGlCQUFHTSxRQUFILENBQ2hCWCxjQUFLQyxPQUFMLENBQWFULE9BQU8sQ0FBQ1UsS0FBUixDQUFjQyxJQUEzQixFQUFpQyxjQUFqQyxDQURnQixDQXhCUDs7QUFBQTtBQXdCTFMsWUFBQUEsR0F4Qks7QUFBQSxpQ0EyQjZCQSxHQUFHLENBQUNDLE9BQUosQ0FBWUMsS0FBWixDQUFrQixHQUFsQixDQTNCN0IsK0RBMkJKQyxLQTNCSSwyQkEyQkdDLEtBM0JILDJCQTJCVUMsS0EzQlY7QUE0QkxDLFlBQUFBLFVBNUJLLEdBNkJULENBQUMsQ0FBQ04sR0FBRyxDQUFDTyxNQUFMLElBQWUsT0FBT1AsR0FBRyxDQUFDTyxNQUFYLEtBQXNCLFFBQXJDLEdBQ0dQLEdBQUcsQ0FBQ08sTUFEUCxhQUVNUCxHQUFHLENBQUNPLE1BQUosQ0FBV0MsSUFGakIsZUFFMEJSLEdBQUcsQ0FBQ08sTUFBSixDQUFXRSxLQUZyQyxNQUFELEtBRW1ELEVBL0IxQztBQWdDWDVCLFlBQUFBLE1BQU0sQ0FBQ0UsT0FBUCxDQUFlMkIsT0FBZixDQUF1QixnQkFBdkI7QUFoQ1c7QUFBQSxtQkFpQ0w1QixHQUFHLENBQUM2QixLQUFKLENBQ0osZ0JBREksRUFFSixDQUFDLElBQUQsRUFBT3ZCLGNBQUtDLE9BQUwsQ0FBYU0sU0FBYixFQUF3Qiw2QkFBeEIsQ0FBUCxFQUErRCxPQUEvRCxDQUZJLEVBR0o7QUFDRWlCLGNBQUFBLEdBQUcsRUFBRTtBQUNIQyxnQkFBQUEsdUJBQXVCLEVBQUU1QixPQUFPLENBQUNDLE1BQVIsQ0FBZTRCLGFBQWYsQ0FBNkJDLElBQTdCLENBQWtDLEdBQWxDLENBRHRCO0FBRUhDLGdCQUFBQSxtQkFBbUIsRUFBRTVCLGNBQUtDLE9BQUwsQ0FBYU0sU0FBYixFQUF3QixzQkFBeEIsQ0FGbEI7QUFHSHNCLGdCQUFBQSxjQUFjLEVBQUVoQyxPQUFPLENBQUNDLE1BQVIsQ0FBZWdDLEtBQWYsSUFBd0JsQixHQUFHLENBQUNRLElBSHpDO0FBSUhXLGdCQUFBQSxtQkFBbUIsRUFBRWIsVUFKbEI7QUFLSGMsZ0JBQUFBLGNBQWMsRUFBRWpCLEtBTGI7QUFNSGtCLGdCQUFBQSxjQUFjLEVBQUVqQixLQU5iO0FBT0hrQixnQkFBQUEsaUJBQWlCLEVBQUVyQyxPQUFPLENBQUNDLE1BQVIsQ0FBZXFDLFFBQWYsQ0FBd0JSLElBQXhCLENBQTZCLEdBQTdCLENBUGhCO0FBUUhTLGdCQUFBQSxjQUFjLEVBQUVuQixLQVJiO0FBU0hvQixnQkFBQUEsaUJBQWlCLEVBQUU3QyxPQUFPLENBQUM4QyxZQVR4QjtBQVVIQyxnQkFBQUEsYUFBYSxFQUFFL0MsT0FBTyxDQUFDVSxLQUFSLENBQWNDO0FBVjFCO0FBRFAsYUFISSxDQWpDSzs7QUFBQTtBQUFBO0FBQUEsbUJBbURMRSxpQkFBR0csTUFBSCxDQUFVVCxVQUFWLENBbkRLOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUEsbUJBcURtQixnQ0FBa0JQLE9BQWxCLENBckRuQjs7QUFBQTtBQXFETGdELFlBQUFBLGVBckRLO0FBc0RYL0MsWUFBQUEsTUFBTSxDQUFDRSxPQUFQLENBQWUyQixPQUFmLENBQXVCLGdCQUF2Qjs7QUFDTW1CLFlBQUFBLGFBdkRLO0FBQUEsaUZBdURXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtCQUNkcEMsaUJBQUdJLE1BQUgsQ0FBVWpCLE9BQU8sQ0FBQ1UsS0FBUixDQUFjd0MsSUFBeEIsQ0FEYzs7QUFBQTtBQUFBO0FBQUEsK0JBRWRyQyxpQkFBR0csTUFBSCxDQUFVaEIsT0FBTyxDQUFDVSxLQUFSLENBQWN3QyxJQUF4QixDQUZjOztBQUFBO0FBQUE7QUFBQSwrQkFHZHJDLGlCQUFHc0MsSUFBSCxDQUFRbkQsT0FBTyxDQUFDVSxLQUFSLENBQWNYLEtBQXRCLEVBQTZCQyxPQUFPLENBQUNVLEtBQVIsQ0FBY3dDLElBQTNDLENBSGM7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUF2RFg7O0FBQUEsOEJBdURMRCxhQXZESztBQUFBO0FBQUE7QUFBQTs7QUE0RFgsZ0JBQUlqRCxPQUFPLENBQUNLLE9BQVIsQ0FBZ0IrQyxPQUFwQixFQUE2QjtBQUN2QkMsY0FBQUEsc0JBRHVCLEdBQ0UsQ0FERjs7QUFFckJDLGNBQUFBLGlCQUZxQjtBQUFBLG9GQUVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQ0FDcEJELHNCQUFzQixHQUFHLENBREw7QUFBQTtBQUFBO0FBQUE7O0FBRXRCQSwwQkFBQUEsc0JBQXNCO0FBRkEsNERBR2YsSUFIZTs7QUFBQTtBQUFBO0FBQUEsaUNBS2xCLElBQUlFLE9BQUosQ0FBWSxVQUFDOUMsT0FBRDtBQUFBLG1DQUFhK0MsVUFBVSxDQUFDL0MsT0FBRCxFQUFVLElBQVYsQ0FBdkI7QUFBQSwyQkFBWixDQUxrQjs7QUFBQTtBQUFBO0FBQUEsaUNBTWxCd0MsYUFBYSxFQU5LOztBQUFBO0FBT3hCcEMsMkNBQUc0QyxXQUFILENBQ0VqRCxjQUFLQyxPQUFMLENBQWFULE9BQU8sQ0FBQ1UsS0FBUixDQUFjWCxLQUEzQixFQUFrQyxZQUFsQyxDQURGLEVBRUV1RCxpQkFGRjs7QUFQd0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBRkM7O0FBQUEsZ0NBRXJCQSxpQkFGcUI7QUFBQTtBQUFBO0FBQUE7O0FBYzNCekMsK0JBQUc2QyxTQUFILENBQ0VsRCxjQUFLQyxPQUFMLENBQWFULE9BQU8sQ0FBQ1UsS0FBUixDQUFjWCxLQUEzQixFQUFrQyxZQUFsQyxDQURGLEVBRUV1RCxpQkFGRjs7QUFJTUssY0FBQUEsT0FsQnFCO0FBQUEsb0ZBa0JYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUVaOUMsMkNBQUc2QyxTQUFILENBQ0VsRCxjQUFLQyxPQUFMLENBQWFULE9BQU8sQ0FBQ1UsS0FBUixDQUFjWCxLQUEzQixFQUFrQyxZQUFsQyxDQURGLEVBRUV1RCxpQkFGRjs7QUFGWSx5Q0FNQU0sTUFOQTtBQUFBO0FBQUEsaUNBT0gsb0JBQU0sT0FBTixFQUFlLENBQUMsVUFBRCxDQUFmLENBUEc7O0FBQUE7QUFBQSx3REFPMkJDLE1BUDNCLENBT2tDdkMsS0FQbEMsQ0FPd0MsR0FQeEMsRUFPNkMsQ0FQN0M7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUEseUNBT21ELENBUG5EOztBQUFBO0FBQUE7QUFNTndDLDBCQUFBQSxHQU5NO0FBU1osOEJBQUlBLEdBQUosRUFBU0MsT0FBTyxDQUFDQyxJQUFSLENBQWFGLEdBQWIsRUFBa0IsU0FBbEI7QUFURztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQVdaRywwQkFBQUEsT0FBTyxDQUFDQyxLQUFSOztBQVhZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQWxCVzs7QUFBQSxnQ0FrQnJCUCxPQWxCcUI7QUFBQTtBQUFBO0FBQUE7O0FBZ0MzQkksY0FBQUEsT0FBTyxDQUFDSSxFQUFSLENBQVcsUUFBWCxFQUFxQlIsT0FBckI7QUFDQUksY0FBQUEsT0FBTyxDQUFDSSxFQUFSLENBQVcsU0FBWCxFQUFzQlIsT0FBdEI7QUFDRDs7QUE5RlU7QUFBQSxtQkErRkx6RCxHQUFHLENBQUM2QixLQUFKLENBQ0osQ0FBQyxjQUFELEVBQWlCLE9BQWpCLENBREksRUFFSixDQUFDLE9BQUQsRUFBVSxVQUFWLEVBQXNCaUIsZUFBdEIsQ0FGSSxDQS9GSzs7QUFBQTtBQUFBLGdCQW1HTmhELE9BQU8sQ0FBQ0ssT0FBUixDQUFnQitDLE9BbkdWO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsbUJBbUd5QkgsYUFBYSxFQW5HdEM7O0FBQUE7QUFBQSw4Q0FvR0osSUFwR0k7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleGVjYSBmcm9tICdleGVjYSc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb250ZXh0LCBMb2dnZXIsIEFwaSwgZ2V0T3B0aW9ucyB9IGZyb20gJ0ByZWFjdGFudC9wbGF0Zm9ybSc7XG5pbXBvcnQgY3JlYXRlQ3JhY29Db25maWcgZnJvbSAnLi4vY3JlYXRlQ3JhY29Db25maWcnO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBidWlsZChcbiAgY29udGV4dDogQ29udGV4dCxcbiAgbG9nZ2VyOiBMb2dnZXIsXG4gIGFwaTogQXBpXG4pOiBQcm9taXNlPGFueT4ge1xuICBsb2dnZXIuc3Bpbm5lci5zdGFydCgncHJlcGFyaW5nIGJ1aWxkJyk7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKCk7XG4gIGlmIChjb250ZXh0Lm9wdGlvbnMuZG9ja2VyKSB7XG4gICAgY29uc3QgZG9ja2VyUGF0aCA9IHBhdGgucmVzb2x2ZShjb250ZXh0LnBhdGhzLnJvb3QsICcuZG9ja2VyJyk7XG4gICAgbGV0IHByZXBhcmVQYXRoID0gcGF0aC5yZXNvbHZlKGNvbnRleHQucGF0aHMucm9vdCwgJ2RvY2tlci9wcmVwYXJlLnNoJyk7XG4gICAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhwcmVwYXJlUGF0aCkpKSB7XG4gICAgICBwcmVwYXJlUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9kb2NrZXIvcHJlcGFyZS5zaCcpO1xuICAgIH1cbiAgICBhd2FpdCBmcy5yZW1vdmUoZG9ja2VyUGF0aCk7XG4gICAgYXdhaXQgZnMubWtkaXJzKGRvY2tlclBhdGgpO1xuICAgIGF3YWl0IGZzLmNvcHkoXG4gICAgICBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vZG9ja2VyL2VudHJ5cG9pbnQuc2gnKSxcbiAgICAgIHBhdGgucmVzb2x2ZShkb2NrZXJQYXRoLCAnZW50cnlwb2ludC5zaCcpXG4gICAgKTtcbiAgICBhd2FpdCBmcy5jb3B5KFxuICAgICAgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uL2RvY2tlci9uZ2lueC5jb25mJyksXG4gICAgICBwYXRoLnJlc29sdmUoZG9ja2VyUGF0aCwgJ25naW54LmNvbmYnKVxuICAgICk7XG4gICAgYXdhaXQgZnMuY29weShwcmVwYXJlUGF0aCwgcGF0aC5yZXNvbHZlKGRvY2tlclBhdGgsICdwcmVwYXJlLnNoJykpO1xuICAgIGNvbnN0IHBrZyA9IGF3YWl0IGZzLnJlYWRKc29uKFxuICAgICAgcGF0aC5yZXNvbHZlKGNvbnRleHQucGF0aHMucm9vdCwgJ3BhY2thZ2UuanNvbicpXG4gICAgKTtcbiAgICBjb25zdCBbbWFqb3IsIG1pbm9yLCBwYXRjaF06IHN0cmluZ1tdID0gcGtnLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICBjb25zdCBtYWludGFpbmVyID1cbiAgICAgICghcGtnLmF1dGhvciB8fCB0eXBlb2YgcGtnLmF1dGhvciA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBwa2cuYXV0aG9yXG4gICAgICAgIDogYCR7cGtnLmF1dGhvci5uYW1lfSA8JHtwa2cuYXV0aG9yLmVtYWlsfT5gKSB8fCAnJztcbiAgICBsb2dnZXIuc3Bpbm5lci5zdWNjZWVkKCdwcmVwYXJlZCBidWlsZCcpO1xuICAgIGF3YWl0IGFwaS5zcGF3bihcbiAgICAgICdkb2NrZXItY29tcG9zZScsXG4gICAgICBbJy1mJywgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uL2RvY2tlci9kb2NrZXItYnVpbGQueWFtbCcpLCAnYnVpbGQnXSxcbiAgICAgIHtcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgUkVBQ1RBTlRfQlVJTERfUEFDS0FHRVM6IG9wdGlvbnMuZG9ja2VyLmJ1aWxkUGFja2FnZXMuam9pbignICcpLFxuICAgICAgICAgIFJFQUNUQU5UX0RPQ0tFUkZJTEU6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9kb2NrZXIvRG9ja2VyZmlsZScpLFxuICAgICAgICAgIFJFQUNUQU5UX0lNQUdFOiBvcHRpb25zLmRvY2tlci5pbWFnZSB8fCBwa2cubmFtZSxcbiAgICAgICAgICBSRUFDVEFOVF9NQUlOVEFJTkVSOiBtYWludGFpbmVyLFxuICAgICAgICAgIFJFQUNUQU5UX01BSk9SOiBtYWpvcixcbiAgICAgICAgICBSRUFDVEFOVF9NSU5PUjogbWlub3IsXG4gICAgICAgICAgUkVBQ1RBTlRfUEFDS0FHRVM6IG9wdGlvbnMuZG9ja2VyLnBhY2thZ2VzLmpvaW4oJyAnKSxcbiAgICAgICAgICBSRUFDVEFOVF9QQVRDSDogcGF0Y2gsXG4gICAgICAgICAgUkVBQ1RBTlRfUExBVEZPUk06IGNvbnRleHQucGxhdGZvcm1OYW1lLFxuICAgICAgICAgIFJFQUNUQU5UX1JPT1Q6IGNvbnRleHQucGF0aHMucm9vdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICBhd2FpdCBmcy5yZW1vdmUoZG9ja2VyUGF0aCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY3JhY29Db25maWdQYXRoID0gYXdhaXQgY3JlYXRlQ3JhY29Db25maWcoY29udGV4dCk7XG4gICAgbG9nZ2VyLnNwaW5uZXIuc3VjY2VlZCgncHJlcGFyZWQgYnVpbGQnKTtcbiAgICBjb25zdCBmaW5hbGl6ZUJ1aWxkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZnMubWtkaXJzKGNvbnRleHQucGF0aHMuZGlzdCk7XG4gICAgICBhd2FpdCBmcy5yZW1vdmUoY29udGV4dC5wYXRocy5kaXN0KTtcbiAgICAgIGF3YWl0IGZzLm1vdmUoY29udGV4dC5wYXRocy5idWlsZCwgY29udGV4dC5wYXRocy5kaXN0KTtcbiAgICB9O1xuICAgIGlmIChjb250ZXh0Lm9wdGlvbnMuYW5hbHl6ZSkge1xuICAgICAgbGV0IGhhbmRsZUZpbGVDaGFuZ2VkQ291bnQgPSAwO1xuICAgICAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChoYW5kbGVGaWxlQ2hhbmdlZENvdW50IDwgMSkge1xuICAgICAgICAgIGhhbmRsZUZpbGVDaGFuZ2VkQ291bnQrKztcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDAwKSk7XG4gICAgICAgIGF3YWl0IGZpbmFsaXplQnVpbGQoKTtcbiAgICAgICAgZnMudW53YXRjaEZpbGUoXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKGNvbnRleHQucGF0aHMuYnVpbGQsICdpbmRleC5odG1sJyksXG4gICAgICAgICAgaGFuZGxlRmlsZUNoYW5nZWRcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBmcy53YXRjaEZpbGUoXG4gICAgICAgIHBhdGgucmVzb2x2ZShjb250ZXh0LnBhdGhzLmJ1aWxkLCAnaW5kZXguaHRtbCcpLFxuICAgICAgICBoYW5kbGVGaWxlQ2hhbmdlZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZnMud2F0Y2hGaWxlKFxuICAgICAgICAgICAgcGF0aC5yZXNvbHZlKGNvbnRleHQucGF0aHMuYnVpbGQsICdpbmRleC5odG1sJyksXG4gICAgICAgICAgICBoYW5kbGVGaWxlQ2hhbmdlZFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcGlkID0gTnVtYmVyKFxuICAgICAgICAgICAgKGF3YWl0IGV4ZWNhKCdmdXNlcicsIFsnODg4OC90Y3AnXSkpLnN0ZG91dC5zcGxpdCgnICcpWzFdIHx8IDBcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChwaWQpIHByb2Nlc3Mua2lsbChwaWQsICdTSUdLSUxMJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGNsZWFudXApO1xuICAgICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIGNsZWFudXApO1xuICAgIH1cbiAgICBhd2FpdCBhcGkuc3Bhd24oXG4gICAgICBbJ0BjcmFjby9jcmFjbycsICdjcmFjbyddLFxuICAgICAgWydidWlsZCcsICctLWNvbmZpZycsIGNyYWNvQ29uZmlnUGF0aF1cbiAgICApO1xuICAgIGlmICghY29udGV4dC5vcHRpb25zLmFuYWx5emUpIGF3YWl0IGZpbmFsaXplQnVpbGQoKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19