@reactant/context
Version:
212 lines (147 loc) • 23.7 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.filter");
require("core-js/modules/es.array.find");
require("core-js/modules/es.array.for-each");
require("core-js/modules/es.array.from");
require("core-js/modules/es.array.iterator");
require("core-js/modules/es.array.reduce");
require("core-js/modules/es.array.slice");
require("core-js/modules/es.function.name");
require("core-js/modules/es.object.entries");
require("core-js/modules/es.object.get-own-property-descriptor");
require("core-js/modules/es.object.get-own-property-descriptors");
require("core-js/modules/es.object.keys");
require("core-js/modules/es.object.to-string");
require("core-js/modules/es.regexp.to-string");
require("core-js/modules/es.set");
require("core-js/modules/es.string.iterator");
require("core-js/modules/web.dom-collections.for-each");
require("core-js/modules/web.dom-collections.iterator");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loadEnvs = loadEnvs;
exports.masterBootstrap = masterBootstrap;
exports.childBootstrap = childBootstrap;
exports.default = bootstrap;
var _pkgDir = _interopRequireDefault(require("pkg-dir"));
var _merge = _interopRequireDefault(require("./merge"));
var _paths = require("./paths");
var _platform = require("./platform");
var _plugin = require("./plugin");
var _node = require("./node");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return 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; }
var rootPath = _pkgDir.default.sync(process.cwd()) || process.cwd();
function loadEnvs(envs) {
if (!envs) return {};
return Object.entries(envs).reduce(function (envs, _ref) {
var _ref2 = _slicedToArray(_ref, 2),
key = _ref2[0],
env = _ref2[1];
if (process.env[key]) {
envs[key] = process.env[key] || '';
} else {
envs[key] = env || '';
}
return envs;
}, {});
}
function masterBootstrap(context) {
var calculatePaths = new _paths.CalculatePaths(context.paths, rootPath, context.platformName, context.action, context.masterPid);
context.paths = calculatePaths.paths;
return context;
}
function childBootstrap(context) {
return context;
}
function bootstrap(initialConfig, platformName) {
var action = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var options = arguments.length > 3 ? arguments[3] : undefined;
var preBootstrap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (context) {
return context;
};
var postBootstrap = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : function (context) {
return context;
};
return (0, _node.syncContext)(function (context) {
var _config, _config2, _config2$platforms, _context$platform;
context = preBootstrap(context);
context.masterPid = _node.state.masterPid;
if (options) {
context.options = options;
context.debug = options.debug;
}
if (platformName) context.platformName = platformName;
context.action = action;
if (_node.state.isMaster) {
context = masterBootstrap(context);
} else {
context = childBootstrap(context);
}
context.pkg = (0, _node.getPkg)(context.paths.root, platformName); // eslint-disable-next-line @typescript-eslint/no-use-before-define
var config = (0, _merge.default)(initialConfig, (options === null || options === void 0 ? void 0 : options.config) || {});
var platformOrigionalName = Object.keys(((_config = config) === null || _config === void 0 ? void 0 : _config.platforms) || {}).find(function (key) {
var _config$platforms;
var platform = ((_config$platforms = config.platforms) === null || _config$platforms === void 0 ? void 0 : _config$platforms[key]) || {};
return platform.name === context.platformName;
}) || context.platformName;
var platformOptions = ((_config2 = config) === null || _config2 === void 0 ? void 0 : (_config2$platforms = _config2.platforms) === null || _config2$platforms === void 0 ? void 0 : _config2$platforms[platformOrigionalName]) || {};
var platform = (0, _platform.getPlatform)(platformOrigionalName, context.paths.root, platformOptions, context.pkg);
context.platformNames = Object.keys((0, _platform.getPlatforms)(context.paths.root, {}, context.pkg));
if (context.platformName && !platform && action !== 'install') {
throw new Error("platform '".concat(context.platformName, "' not installed"));
}
context.platform = platform;
context.envs = loadEnvs(_objectSpread(_objectSpread({}, initialConfig.envs), (platform === null || platform === void 0 ? void 0 : platform.options.envs) || {}));
if (typeof ((_context$platform = context.platform) === null || _context$platform === void 0 ? void 0 : _context$platform.config) === 'function') {
config = context.platform.config(config, context, context.platform.options);
} else {
var _context$platform2;
config = (0, _merge.default)(config, ((_context$platform2 = context.platform) === null || _context$platform2 === void 0 ? void 0 : _context$platform2.config) || {});
}
context.plugins = (0, _plugin.getPlugins)(context.paths.root, context.pkg);
Object.entries(context.plugins).forEach( // eslint-disable-next-line @typescript-eslint/no-unused-vars
function (_ref3) {
var _config$plugins, _plugin$options, _plugin$options2;
var _ref4 = _slicedToArray(_ref3, 2),
pluginName = _ref4[0],
plugin = _ref4[1];
plugin.options = (0, _merge.default)(plugin.options, ((_config$plugins = config.plugins) === null || _config$plugins === void 0 ? void 0 : _config$plugins[pluginName]) || {});
plugin.supportedPlatforms = new Set([].concat(_toConsumableArray(plugin.supportedPlatforms), _toConsumableArray(((_plugin$options = plugin.options) === null || _plugin$options === void 0 ? void 0 : _plugin$options.supportedPlatforms) || [])));
plugin.disabledPlatforms = new Set([].concat(_toConsumableArray(plugin.disabledPlatforms), _toConsumableArray(((_plugin$options2 = plugin.options) === null || _plugin$options2 === void 0 ? void 0 : _plugin$options2.disabledPlatforms) || [])));
if (!context.platformName || plugin.supportedPlatforms.has(context.platformName) && !plugin.disabledPlatforms.has(context.platformName)) {
if (typeof plugin.config === 'function') {
config = plugin.config(config, context, plugin.options);
} else {
config = (0, _merge.default)(config, plugin.config);
}
} else {
delete context.plugins[pluginName];
}
});
config = (0, _merge.default)(config, initialConfig);
context.config = config;
if (context.debug) context.logLevel = 'silly';
context = postBootstrap(context);
if (_node.state.isMaster) context.state.ready = true;
return context;
});
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ib290c3RyYXAudHMiXSwibmFtZXMiOlsicm9vdFBhdGgiLCJwa2dEaXIiLCJzeW5jIiwicHJvY2VzcyIsImN3ZCIsImxvYWRFbnZzIiwiZW52cyIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJrZXkiLCJlbnYiLCJtYXN0ZXJCb290c3RyYXAiLCJjb250ZXh0IiwiY2FsY3VsYXRlUGF0aHMiLCJDYWxjdWxhdGVQYXRocyIsInBhdGhzIiwicGxhdGZvcm1OYW1lIiwiYWN0aW9uIiwibWFzdGVyUGlkIiwiY2hpbGRCb290c3RyYXAiLCJib290c3RyYXAiLCJpbml0aWFsQ29uZmlnIiwib3B0aW9ucyIsInByZUJvb3RzdHJhcCIsInBvc3RCb290c3RyYXAiLCJzdGF0ZSIsImRlYnVnIiwiaXNNYXN0ZXIiLCJwa2ciLCJyb290IiwiY29uZmlnIiwicGxhdGZvcm1PcmlnaW9uYWxOYW1lIiwia2V5cyIsInBsYXRmb3JtcyIsImZpbmQiLCJwbGF0Zm9ybSIsIm5hbWUiLCJwbGF0Zm9ybU9wdGlvbnMiLCJwbGF0Zm9ybU5hbWVzIiwiRXJyb3IiLCJwbHVnaW5zIiwiZm9yRWFjaCIsInBsdWdpbk5hbWUiLCJwbHVnaW4iLCJzdXBwb3J0ZWRQbGF0Zm9ybXMiLCJTZXQiLCJkaXNhYmxlZFBsYXRmb3JtcyIsImhhcyIsImxvZ0xldmVsIiwicmVhZHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQVVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxRQUFRLEdBQUdDLGdCQUFPQyxJQUFQLENBQVlDLE9BQU8sQ0FBQ0MsR0FBUixFQUFaLEtBQThCRCxPQUFPLENBQUNDLEdBQVIsRUFBL0M7O0FBRU8sU0FBU0MsUUFBVCxDQUFrQkMsSUFBbEIsRUFBNEM7QUFDakQsTUFBSSxDQUFDQSxJQUFMLEVBQVcsT0FBTyxFQUFQO0FBQ1gsU0FBT0MsTUFBTSxDQUFDQyxPQUFQLENBQWVGLElBQWYsRUFBcUJHLE1BQXJCLENBQ0wsVUFBQ0gsSUFBRCxRQUE0RDtBQUFBO0FBQUEsUUFBdkNJLEdBQXVDO0FBQUEsUUFBbENDLEdBQWtDOztBQUMxRCxRQUFJUixPQUFPLENBQUNRLEdBQVIsQ0FBWUQsR0FBWixDQUFKLEVBQXNCO0FBQ3BCSixNQUFBQSxJQUFJLENBQUNJLEdBQUQsQ0FBSixHQUFZUCxPQUFPLENBQUNRLEdBQVIsQ0FBWUQsR0FBWixLQUFvQixFQUFoQztBQUNELEtBRkQsTUFFTztBQUNMSixNQUFBQSxJQUFJLENBQUNJLEdBQUQsQ0FBSixHQUFZQyxHQUFHLElBQUksRUFBbkI7QUFDRDs7QUFDRCxXQUFPTCxJQUFQO0FBQ0QsR0FSSSxFQVNMLEVBVEssQ0FBUDtBQVdEOztBQUVNLFNBQVNNLGVBQVQsQ0FBeUJDLE9BQXpCLEVBQW9EO0FBQ3pELE1BQU1DLGNBQWMsR0FBRyxJQUFJQyxxQkFBSixDQUNyQkYsT0FBTyxDQUFDRyxLQURhLEVBRXJCaEIsUUFGcUIsRUFHckJhLE9BQU8sQ0FBQ0ksWUFIYSxFQUlyQkosT0FBTyxDQUFDSyxNQUphLEVBS3JCTCxPQUFPLENBQUNNLFNBTGEsQ0FBdkI7QUFPQU4sRUFBQUEsT0FBTyxDQUFDRyxLQUFSLEdBQWdCRixjQUFjLENBQUNFLEtBQS9CO0FBQ0EsU0FBT0gsT0FBUDtBQUNEOztBQUVNLFNBQVNPLGNBQVQsQ0FBd0JQLE9BQXhCLEVBQW1EO0FBQ3hELFNBQU9BLE9BQVA7QUFDRDs7QUFFYyxTQUFTUSxTQUFULENBQ2JDLGFBRGEsRUFFYkwsWUFGYSxFQU9KO0FBQUEsTUFKVEMsTUFJUyx1RUFKUSxFQUlSO0FBQUEsTUFIVEssT0FHUztBQUFBLE1BRlRDLFlBRVMsdUVBRnFDLFVBQUNYLE9BQUQ7QUFBQSxXQUFzQkEsT0FBdEI7QUFBQSxHQUVyQztBQUFBLE1BRFRZLGFBQ1MsdUVBRHNDLFVBQUNaLE9BQUQ7QUFBQSxXQUFzQkEsT0FBdEI7QUFBQSxHQUN0QztBQUNULFNBQU8sdUJBQVksVUFBQ0EsT0FBRCxFQUFzQjtBQUFBOztBQUN2Q0EsSUFBQUEsT0FBTyxHQUFHVyxZQUFZLENBQUNYLE9BQUQsQ0FBdEI7QUFDQUEsSUFBQUEsT0FBTyxDQUFDTSxTQUFSLEdBQW9CTyxZQUFNUCxTQUExQjs7QUFDQSxRQUFJSSxPQUFKLEVBQWE7QUFDWFYsTUFBQUEsT0FBTyxDQUFDVSxPQUFSLEdBQWtCQSxPQUFsQjtBQUNBVixNQUFBQSxPQUFPLENBQUNjLEtBQVIsR0FBZ0JKLE9BQU8sQ0FBQ0ksS0FBeEI7QUFDRDs7QUFDRCxRQUFJVixZQUFKLEVBQWtCSixPQUFPLENBQUNJLFlBQVIsR0FBdUJBLFlBQXZCO0FBQ2xCSixJQUFBQSxPQUFPLENBQUNLLE1BQVIsR0FBaUJBLE1BQWpCOztBQUNBLFFBQUlRLFlBQU1FLFFBQVYsRUFBb0I7QUFDbEJmLE1BQUFBLE9BQU8sR0FBR0QsZUFBZSxDQUFDQyxPQUFELENBQXpCO0FBQ0QsS0FGRCxNQUVPO0FBQ0xBLE1BQUFBLE9BQU8sR0FBR08sY0FBYyxDQUFDUCxPQUFELENBQXhCO0FBQ0Q7O0FBQ0RBLElBQUFBLE9BQU8sQ0FBQ2dCLEdBQVIsR0FBYyxrQkFBT2hCLE9BQU8sQ0FBQ0csS0FBUixDQUFjYyxJQUFyQixFQUEyQmIsWUFBM0IsQ0FBZCxDQWR1QyxDQWV2Qzs7QUFDQSxRQUFJYyxNQUFNLEdBQUcsb0JBQXVCVCxhQUF2QixFQUFzQyxDQUFBQyxPQUFPLFNBQVAsSUFBQUEsT0FBTyxXQUFQLFlBQUFBLE9BQU8sQ0FBRVEsTUFBVCxLQUFtQixFQUF6RCxDQUFiO0FBQ0EsUUFBTUMscUJBQXFCLEdBQ3pCekIsTUFBTSxDQUFDMEIsSUFBUCxDQUFZLFlBQUFGLE1BQU0sVUFBTiwwQ0FBUUcsU0FBUixLQUFxQixFQUFqQyxFQUFxQ0MsSUFBckMsQ0FBMEMsVUFBQ3pCLEdBQUQsRUFBaUI7QUFBQTs7QUFDekQsVUFBTTBCLFFBQVEsR0FBRyxzQkFBQUwsTUFBTSxDQUFDRyxTQUFQLHdFQUFtQnhCLEdBQW5CLE1BQTJCLEVBQTVDO0FBQ0EsYUFBTzBCLFFBQVEsQ0FBQ0MsSUFBVCxLQUFrQnhCLE9BQU8sQ0FBQ0ksWUFBakM7QUFDRCxLQUhELEtBR01KLE9BQU8sQ0FBQ0ksWUFKaEI7QUFLQSxRQUFNcUIsZUFBZSxHQUFHLGFBQUFQLE1BQU0sVUFBTixrRUFBUUcsU0FBUiwwRUFBb0JGLHFCQUFwQixNQUE4QyxFQUF0RTtBQUNBLFFBQU1JLFFBQVEsR0FBRywyQkFDZkoscUJBRGUsRUFFZm5CLE9BQU8sQ0FBQ0csS0FBUixDQUFjYyxJQUZDLEVBR2ZRLGVBSGUsRUFJZnpCLE9BQU8sQ0FBQ2dCLEdBSk8sQ0FBakI7QUFNQWhCLElBQUFBLE9BQU8sQ0FBQzBCLGFBQVIsR0FBd0JoQyxNQUFNLENBQUMwQixJQUFQLENBQ3RCLDRCQUFhcEIsT0FBTyxDQUFDRyxLQUFSLENBQWNjLElBQTNCLEVBQWlDLEVBQWpDLEVBQXFDakIsT0FBTyxDQUFDZ0IsR0FBN0MsQ0FEc0IsQ0FBeEI7O0FBR0EsUUFBSWhCLE9BQU8sQ0FBQ0ksWUFBUixJQUF3QixDQUFDbUIsUUFBekIsSUFBcUNsQixNQUFNLEtBQUssU0FBcEQsRUFBK0Q7QUFDN0QsWUFBTSxJQUFJc0IsS0FBSixxQkFBdUIzQixPQUFPLENBQUNJLFlBQS9CLHFCQUFOO0FBQ0Q7O0FBQ0RKLElBQUFBLE9BQU8sQ0FBQ3VCLFFBQVIsR0FBbUJBLFFBQW5CO0FBQ0F2QixJQUFBQSxPQUFPLENBQUNQLElBQVIsR0FBZUQsUUFBUSxpQ0FDbEJpQixhQUFhLENBQUNoQixJQURJLEdBRWpCLENBQUE4QixRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRWIsT0FBVixDQUFrQmpCLElBQWxCLEtBQTBCLEVBRlQsRUFBdkI7O0FBSUEsUUFBSSw2QkFBT08sT0FBTyxDQUFDdUIsUUFBZixzREFBTyxrQkFBa0JMLE1BQXpCLE1BQW9DLFVBQXhDLEVBQW9EO0FBQ2xEQSxNQUFBQSxNQUFNLEdBQUdsQixPQUFPLENBQUN1QixRQUFSLENBQWlCTCxNQUFqQixDQUNQQSxNQURPLEVBRVBsQixPQUZPLEVBR1BBLE9BQU8sQ0FBQ3VCLFFBQVIsQ0FBaUJiLE9BSFYsQ0FBVDtBQUtELEtBTkQsTUFNTztBQUFBOztBQUNMUSxNQUFBQSxNQUFNLEdBQUcsb0JBQXVCQSxNQUF2QixFQUErQix1QkFBQWxCLE9BQU8sQ0FBQ3VCLFFBQVIsMEVBQWtCTCxNQUFsQixLQUE0QixFQUEzRCxDQUFUO0FBQ0Q7O0FBQ0RsQixJQUFBQSxPQUFPLENBQUM0QixPQUFSLEdBQWtCLHdCQUFXNUIsT0FBTyxDQUFDRyxLQUFSLENBQWNjLElBQXpCLEVBQStCakIsT0FBTyxDQUFDZ0IsR0FBdkMsQ0FBbEI7QUFDQXRCLElBQUFBLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlSyxPQUFPLENBQUM0QixPQUF2QixFQUFnQ0MsT0FBaEMsRUFDRTtBQUNBLHFCQUFrRDtBQUFBOztBQUFBO0FBQUEsVUFBaERDLFVBQWdEO0FBQUEsVUFBcENDLE1BQW9DOztBQUNoREEsTUFBQUEsTUFBTSxDQUFDckIsT0FBUCxHQUFpQixvQkFDZnFCLE1BQU0sQ0FBQ3JCLE9BRFEsRUFFZixvQkFBQVEsTUFBTSxDQUFDVSxPQUFQLG9FQUFpQkUsVUFBakIsTUFBZ0MsRUFGakIsQ0FBakI7QUFJQUMsTUFBQUEsTUFBTSxDQUFDQyxrQkFBUCxHQUE0QixJQUFJQyxHQUFKLDhCQUN2QkYsTUFBTSxDQUFDQyxrQkFEZ0Isc0JBRXRCLG9CQUFBRCxNQUFNLENBQUNyQixPQUFQLG9FQUFnQnNCLGtCQUFoQixLQUFzQyxFQUZoQixHQUE1QjtBQUlBRCxNQUFBQSxNQUFNLENBQUNHLGlCQUFQLEdBQTJCLElBQUlELEdBQUosOEJBQ3RCRixNQUFNLENBQUNHLGlCQURlLHNCQUVyQixxQkFBQUgsTUFBTSxDQUFDckIsT0FBUCxzRUFBZ0J3QixpQkFBaEIsS0FBcUMsRUFGaEIsR0FBM0I7O0FBSUEsVUFDRSxDQUFDbEMsT0FBTyxDQUFDSSxZQUFULElBQ0MyQixNQUFNLENBQUNDLGtCQUFQLENBQTBCRyxHQUExQixDQUE4Qm5DLE9BQU8sQ0FBQ0ksWUFBdEMsS0FDQyxDQUFDMkIsTUFBTSxDQUFDRyxpQkFBUCxDQUF5QkMsR0FBekIsQ0FBNkJuQyxPQUFPLENBQUNJLFlBQXJDLENBSEwsRUFJRTtBQUNBLFlBQUksT0FBTzJCLE1BQU0sQ0FBQ2IsTUFBZCxLQUF5QixVQUE3QixFQUF5QztBQUN2Q0EsVUFBQUEsTUFBTSxHQUFHYSxNQUFNLENBQUNiLE1BQVAsQ0FBY0EsTUFBZCxFQUFzQmxCLE9BQXRCLEVBQStCK0IsTUFBTSxDQUFDckIsT0FBdEMsQ0FBVDtBQUNELFNBRkQsTUFFTztBQUNMUSxVQUFBQSxNQUFNLEdBQUcsb0JBQXVCQSxNQUF2QixFQUErQmEsTUFBTSxDQUFDYixNQUF0QyxDQUFUO0FBQ0Q7QUFDRixPQVZELE1BVU87QUFDTCxlQUFPbEIsT0FBTyxDQUFDNEIsT0FBUixDQUFnQkUsVUFBaEIsQ0FBUDtBQUNEO0FBQ0YsS0E1Qkg7QUE4QkFaLElBQUFBLE1BQU0sR0FBRyxvQkFBdUJBLE1BQXZCLEVBQStCVCxhQUEvQixDQUFUO0FBQ0FULElBQUFBLE9BQU8sQ0FBQ2tCLE1BQVIsR0FBaUJBLE1BQWpCO0FBQ0EsUUFBSWxCLE9BQU8sQ0FBQ2MsS0FBWixFQUFtQmQsT0FBTyxDQUFDb0MsUUFBUixHQUFtQixPQUFuQjtBQUNuQnBDLElBQUFBLE9BQU8sR0FBR1ksYUFBYSxDQUFDWixPQUFELENBQXZCO0FBQ0EsUUFBSWEsWUFBTUUsUUFBVixFQUFvQmYsT0FBTyxDQUFDYSxLQUFSLENBQWN3QixLQUFkLEdBQXNCLElBQXRCO0FBQ3BCLFdBQU9yQyxPQUFQO0FBQ0QsR0F0Rk0sQ0FBUDtBQXVGRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwa2dEaXIgZnJvbSAncGtnLWRpcic7XG5pbXBvcnQge1xuICBDb25maWcsXG4gIENvbnRleHQsXG4gIENvbnRleHRFbnZzLFxuICBFbnZzLFxuICBMb2FkZWRQbHVnaW4sXG4gIE9wdGlvbnMsXG4gIFBsdWdpbk9wdGlvbnNcbn0gZnJvbSAnQHJlYWN0YW50L3R5cGVzJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmltcG9ydCB7IENhbGN1bGF0ZVBhdGhzIH0gZnJvbSAnLi9wYXRocyc7XG5pbXBvcnQgeyBnZXRQbGF0Zm9ybSwgZ2V0UGxhdGZvcm1zIH0gZnJvbSAnLi9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBnZXRQbHVnaW5zIH0gZnJvbSAnLi9wbHVnaW4nO1xuaW1wb3J0IHsgc3RhdGUsIHN5bmNDb250ZXh0LCBnZXRQa2cgfSBmcm9tICcuL25vZGUnO1xuXG5jb25zdCByb290UGF0aCA9IHBrZ0Rpci5zeW5jKHByb2Nlc3MuY3dkKCkpIHx8IHByb2Nlc3MuY3dkKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRW52cyhlbnZzPzogRW52cyk6IENvbnRleHRFbnZzIHtcbiAgaWYgKCFlbnZzKSByZXR1cm4ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlbnZzKS5yZWR1Y2UoXG4gICAgKGVudnM6IENvbnRleHRFbnZzLCBba2V5LCBlbnZdOiBbc3RyaW5nLCBzdHJpbmcgfCBudWxsXSkgPT4ge1xuICAgICAgaWYgKHByb2Nlc3MuZW52W2tleV0pIHtcbiAgICAgICAgZW52c1trZXldID0gcHJvY2Vzcy5lbnZba2V5XSB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudnNba2V5XSA9IGVudiB8fCAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnZzO1xuICAgIH0sXG4gICAge31cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hc3RlckJvb3RzdHJhcChjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB7XG4gIGNvbnN0IGNhbGN1bGF0ZVBhdGhzID0gbmV3IENhbGN1bGF0ZVBhdGhzKFxuICAgIGNvbnRleHQucGF0aHMsXG4gICAgcm9vdFBhdGgsXG4gICAgY29udGV4dC5wbGF0Zm9ybU5hbWUsXG4gICAgY29udGV4dC5hY3Rpb24sXG4gICAgY29udGV4dC5tYXN0ZXJQaWRcbiAgKTtcbiAgY29udGV4dC5wYXRocyA9IGNhbGN1bGF0ZVBhdGhzLnBhdGhzO1xuICByZXR1cm4gY29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkQm9vdHN0cmFwKGNvbnRleHQ6IENvbnRleHQpOiBDb250ZXh0IHtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJvb3RzdHJhcChcbiAgaW5pdGlhbENvbmZpZzogUGFydGlhbDxDb25maWc+LFxuICBwbGF0Zm9ybU5hbWU/OiBzdHJpbmcsXG4gIGFjdGlvbjogc3RyaW5nID0gJycsXG4gIG9wdGlvbnM/OiBPcHRpb25zLFxuICBwcmVCb290c3RyYXA6IChjb250ZXh0OiBDb250ZXh0KSA9PiBDb250ZXh0ID0gKGNvbnRleHQ6IENvbnRleHQpID0+IGNvbnRleHQsXG4gIHBvc3RCb290c3RyYXA6IChjb250ZXh0OiBDb250ZXh0KSA9PiBDb250ZXh0ID0gKGNvbnRleHQ6IENvbnRleHQpID0+IGNvbnRleHRcbik6IENvbnRleHQge1xuICByZXR1cm4gc3luY0NvbnRleHQoKGNvbnRleHQ6IENvbnRleHQpID0+IHtcbiAgICBjb250ZXh0ID0gcHJlQm9vdHN0cmFwKGNvbnRleHQpO1xuICAgIGNvbnRleHQubWFzdGVyUGlkID0gc3RhdGUubWFzdGVyUGlkO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBjb250ZXh0Lm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgY29udGV4dC5kZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG4gICAgfVxuICAgIGlmIChwbGF0Zm9ybU5hbWUpIGNvbnRleHQucGxhdGZvcm1OYW1lID0gcGxhdGZvcm1OYW1lO1xuICAgIGNvbnRleHQuYWN0aW9uID0gYWN0aW9uO1xuICAgIGlmIChzdGF0ZS5pc01hc3Rlcikge1xuICAgICAgY29udGV4dCA9IG1hc3RlckJvb3RzdHJhcChjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGNoaWxkQm9vdHN0cmFwKGNvbnRleHQpO1xuICAgIH1cbiAgICBjb250ZXh0LnBrZyA9IGdldFBrZyhjb250ZXh0LnBhdGhzLnJvb3QsIHBsYXRmb3JtTmFtZSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGxldCBjb25maWcgPSBtZXJnZTxQYXJ0aWFsPENvbmZpZz4+KGluaXRpYWxDb25maWcsIG9wdGlvbnM/LmNvbmZpZyB8fCB7fSk7XG4gICAgY29uc3QgcGxhdGZvcm1PcmlnaW9uYWxOYW1lID1cbiAgICAgIE9iamVjdC5rZXlzKGNvbmZpZz8ucGxhdGZvcm1zIHx8IHt9KS5maW5kKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IGNvbmZpZy5wbGF0Zm9ybXM/LltrZXldIHx8IHt9O1xuICAgICAgICByZXR1cm4gcGxhdGZvcm0ubmFtZSA9PT0gY29udGV4dC5wbGF0Zm9ybU5hbWU7XG4gICAgICB9KSB8fCBjb250ZXh0LnBsYXRmb3JtTmFtZTtcbiAgICBjb25zdCBwbGF0Zm9ybU9wdGlvbnMgPSBjb25maWc/LnBsYXRmb3Jtcz8uW3BsYXRmb3JtT3JpZ2lvbmFsTmFtZV0gfHwge307XG4gICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShcbiAgICAgIHBsYXRmb3JtT3JpZ2lvbmFsTmFtZSxcbiAgICAgIGNvbnRleHQucGF0aHMucm9vdCxcbiAgICAgIHBsYXRmb3JtT3B0aW9ucyxcbiAgICAgIGNvbnRleHQucGtnXG4gICAgKTtcbiAgICBjb250ZXh0LnBsYXRmb3JtTmFtZXMgPSBPYmplY3Qua2V5cyhcbiAgICAgIGdldFBsYXRmb3Jtcyhjb250ZXh0LnBhdGhzLnJvb3QsIHt9LCBjb250ZXh0LnBrZylcbiAgICApO1xuICAgIGlmIChjb250ZXh0LnBsYXRmb3JtTmFtZSAmJiAhcGxhdGZvcm0gJiYgYWN0aW9uICE9PSAnaW5zdGFsbCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcGxhdGZvcm0gJyR7Y29udGV4dC5wbGF0Zm9ybU5hbWV9JyBub3QgaW5zdGFsbGVkYCk7XG4gICAgfVxuICAgIGNvbnRleHQucGxhdGZvcm0gPSBwbGF0Zm9ybTtcbiAgICBjb250ZXh0LmVudnMgPSBsb2FkRW52cyh7XG4gICAgICAuLi5pbml0aWFsQ29uZmlnLmVudnMsXG4gICAgICAuLi4ocGxhdGZvcm0/Lm9wdGlvbnMuZW52cyB8fCB7fSlcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQucGxhdGZvcm0/LmNvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uZmlnID0gY29udGV4dC5wbGF0Zm9ybS5jb25maWcoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY29udGV4dC5wbGF0Zm9ybS5vcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBtZXJnZTxQYXJ0aWFsPENvbmZpZz4+KGNvbmZpZywgY29udGV4dC5wbGF0Zm9ybT8uY29uZmlnIHx8IHt9KTtcbiAgICB9XG4gICAgY29udGV4dC5wbHVnaW5zID0gZ2V0UGx1Z2lucyhjb250ZXh0LnBhdGhzLnJvb3QsIGNvbnRleHQucGtnKTtcbiAgICBPYmplY3QuZW50cmllcyhjb250ZXh0LnBsdWdpbnMpLmZvckVhY2goXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAoW3BsdWdpbk5hbWUsIHBsdWdpbl06IFtzdHJpbmcsIExvYWRlZFBsdWdpbl0pID0+IHtcbiAgICAgICAgcGx1Z2luLm9wdGlvbnMgPSBtZXJnZTxQbHVnaW5PcHRpb25zPihcbiAgICAgICAgICBwbHVnaW4ub3B0aW9ucyxcbiAgICAgICAgICBjb25maWcucGx1Z2lucz8uW3BsdWdpbk5hbWVdIHx8IHt9XG4gICAgICAgICk7XG4gICAgICAgIHBsdWdpbi5zdXBwb3J0ZWRQbGF0Zm9ybXMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAuLi5wbHVnaW4uc3VwcG9ydGVkUGxhdGZvcm1zLFxuICAgICAgICAgIC4uLihwbHVnaW4ub3B0aW9ucz8uc3VwcG9ydGVkUGxhdGZvcm1zIHx8IFtdKVxuICAgICAgICBdKTtcbiAgICAgICAgcGx1Z2luLmRpc2FibGVkUGxhdGZvcm1zID0gbmV3IFNldChbXG4gICAgICAgICAgLi4ucGx1Z2luLmRpc2FibGVkUGxhdGZvcm1zLFxuICAgICAgICAgIC4uLihwbHVnaW4ub3B0aW9ucz8uZGlzYWJsZWRQbGF0Zm9ybXMgfHwgW10pXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWNvbnRleHQucGxhdGZvcm1OYW1lIHx8XG4gICAgICAgICAgKHBsdWdpbi5zdXBwb3J0ZWRQbGF0Zm9ybXMuaGFzKGNvbnRleHQucGxhdGZvcm1OYW1lKSAmJlxuICAgICAgICAgICAgIXBsdWdpbi5kaXNhYmxlZFBsYXRmb3Jtcy5oYXMoY29udGV4dC5wbGF0Zm9ybU5hbWUpKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5jb25maWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbmZpZyA9IHBsdWdpbi5jb25maWcoY29uZmlnLCBjb250ZXh0LCBwbHVnaW4ub3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlPFBhcnRpYWw8Q29uZmlnPj4oY29uZmlnLCBwbHVnaW4uY29uZmlnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGNvbnRleHQucGx1Z2luc1twbHVnaW5OYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgY29uZmlnID0gbWVyZ2U8UGFydGlhbDxDb25maWc+Pihjb25maWcsIGluaXRpYWxDb25maWcpO1xuICAgIGNvbnRleHQuY29uZmlnID0gY29uZmlnIGFzIENvbmZpZztcbiAgICBpZiAoY29udGV4dC5kZWJ1ZykgY29udGV4dC5sb2dMZXZlbCA9ICdzaWxseSc7XG4gICAgY29udGV4dCA9IHBvc3RCb290c3RyYXAoY29udGV4dCk7XG4gICAgaWYgKHN0YXRlLmlzTWFzdGVyKSBjb250ZXh0LnN0YXRlLnJlYWR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfSkgYXMgQ29udGV4dDtcbn1cbiJdfQ==