meteor-desktop
Version:
Build a Meteor's desktop client with hot code push.
239 lines (213 loc) • 31.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _path = _interopRequireDefault(require("path"));
var _os = _interopRequireDefault(require("os"));
var _assignIn = _interopRequireDefault(require("lodash/assignIn"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const {
join
} = _path.default;
/**
* @class
* @property {packagePaths} paths
*/
class Env {
constructor(input, output, options) {
this.options = options;
if (this.isProductionBuild()) {
process.env.NODE_ENV = 'production';
}
this.sys = {
platform: process.platform,
arch: process.arch
}; // Operational System.
this.os = {
isWindows: process.platform === 'win32',
isLinux: process.platform === 'linux',
isOsx: process.platform === 'darwin'
};
this.stdio = 'inherit';
this.os.name = this.sys.platform === 'darwin' ? 'osx' : this.sys.platform;
this.os.home = process.env[this.os.isWindows ? 'USERPROFILE' : 'HOME'];
this.os.tmp = _os.default.tmpdir();
/** @type {packagePaths} */
this.paths = {};
/** @type {meteorDesktopPaths} */
this.paths.meteorDesktop = {
root: _path.default.resolve(__dirname, '..')
};
this.paths.meteorDesktop.skeleton = join(this.paths.meteorDesktop.root, 'skeleton');
/** @type {meteorAppPaths} */
this.paths.meteorApp = {
root: input
};
/** @type {desktopPaths} */
this.paths.desktop = {
rootName: '.desktop',
root: join(this.paths.meteorApp.root, '.desktop')
};
(0, _assignIn.default)(this.paths.desktop, {
modules: join(this.paths.desktop.root, 'modules'),
import: join(this.paths.desktop.root, 'import'),
assets: join(this.paths.desktop.root, 'assets'),
settings: join(this.paths.desktop.root, 'settings.json'),
desktop: join(this.paths.desktop.root, 'desktop.js')
});
this.paths.desktop.splashScreen = join(this.paths.desktop.assets, 'splashScreen.png');
this.paths.desktop.loadingGif = join(this.paths.desktop.assets, 'loading.gif');
this.paths.desktop.meteorIco = join(this.paths.desktop.assets, 'meteor.ico');
/** @type {electronAppPaths} */
this.paths.electronApp = {
rootName: 'desktop-build'
};
this.paths.electronApp.root = join(this.paths.meteorApp.root, '.meteor', this.paths.electronApp.rootName);
this.paths.electronApp.tmpNodeModules = join(this.paths.meteorApp.root, '.meteor', '.desktop_node_modules');
this.paths.cache = join(this.paths.meteorApp.root, '.meteor', 'local', 'desktop-cache');
this.paths.electronApp.extractedNodeModules = join(this.paths.meteorApp.root, '.meteor', '.desktop_extracted_node_modules');
this.paths.electronApp.extractedNodeModulesBin = join(this.paths.electronApp.extractedNodeModules, '.bin');
this.paths.electronApp.appRoot = join(this.paths.electronApp.root, 'app');
(0, _assignIn.default)(this.paths.electronApp, {
app: join(this.paths.electronApp.appRoot, 'app.js'),
cordova: join(this.paths.electronApp.appRoot, 'cordova.js'),
index: join(this.paths.electronApp.appRoot, 'index.js'),
preload: join(this.paths.electronApp.appRoot, 'preload.js'),
modules: join(this.paths.electronApp.appRoot, 'modules'),
desktopAsar: join(this.paths.electronApp.root, 'desktop.asar'),
extracted: join(this.paths.electronApp.root, 'extracted'),
appAsar: join(this.paths.electronApp.root, 'app.asar'),
import: join(this.paths.electronApp.root, 'import'),
assets: join(this.paths.electronApp.root, 'assets'),
packageJson: join(this.paths.electronApp.root, 'package.json'),
settings: join(this.paths.electronApp.root, 'settings.json'),
desktop: join(this.paths.electronApp.root, 'desktop.js'),
desktopTmp: join(this.paths.electronApp.root, '__desktop'),
nodeModules: join(this.paths.electronApp.root, 'node_modules'),
meteorAsar: join(this.paths.electronApp.root, 'meteor.asar'),
meteorApp: join(this.paths.electronApp.root, 'meteor'),
meteorAppIndex: join(this.paths.electronApp.root, 'meteor', 'index.html'),
meteorAppProgramJson: join(this.paths.electronApp.root, 'meteor', 'program.json'),
skeleton: join(this.paths.electronApp.root, 'skeleton')
});
(0, _assignIn.default)(this.paths.meteorApp, {
platforms: join(this.paths.meteorApp.root, '.meteor', 'platforms'),
packages: join(this.paths.meteorApp.root, '.meteor', 'packages'),
versions: join(this.paths.meteorApp.root, '.meteor', 'versions'),
release: join(this.paths.meteorApp.root, '.meteor', 'release'),
packageJson: join(this.paths.meteorApp.root, 'package.json'),
gitIgnore: join(this.paths.meteorApp.root, '.meteor', '.gitignore'),
cordovaBuild: join(this.paths.meteorApp.root, '.meteor', 'local', 'cordova-build', 'www', 'application'),
webCordova: join(this.paths.meteorApp.root, '.meteor', 'local', 'build', 'programs', 'web.cordova')
});
(0, _assignIn.default)(this.paths.meteorApp, {
cordovaBuildIndex: join(this.paths.meteorApp.cordovaBuild, 'index.html'),
cordovaBuildProgramJson: join(this.paths.meteorApp.cordovaBuild, 'program.json')
});
(0, _assignIn.default)(this.paths.meteorApp, {
webCordovaProgramJson: join(this.paths.meteorApp.webCordova, 'program.json')
});
/** @type {desktopTmpPaths} */
this.paths.desktopTmp = {
root: join(this.paths.electronApp.root, '__desktop')
};
(0, _assignIn.default)(this.paths.desktopTmp, {
modules: join(this.paths.desktopTmp.root, 'modules'),
settings: join(this.paths.desktopTmp.root, 'settings.json')
});
this.paths.packageDir = '.desktop-package';
this.paths.installerDir = '.desktop-installer'; // Scaffold
this.paths.scaffold = join(__dirname, '..', 'scaffold');
}
/**
* @returns {boolean|*}
* @public
*/
isProductionBuild() {
return !!('production' in this.options && this.options.production);
}
}
exports.default = Env;
module.exports = Env;
/**
* @typedef {Object} desktopPaths
* @property {string} rootName
* @property {string} root
* @property {string} modules
* @property {string} import
* @property {string} assets
* @property {string} settings
* @property {string} desktop
* @property {string} splashScreen
* @property {string} loadingGif
* @property {string} meteorIco
*/
/**
* @typedef {Object} meteorAppPaths
* @property {string} root
* @property {string} platforms
* @property {string} release
* @property {string} packages
* @property {string} versions
* @property {string} gitIgnore
* @property {string} packageJson
* @property {string} cordovaBuild
* @property {string} cordovaBuildIndex
* @property {string} cordovaBuildProgramJson
* @property {string} webCordova
* @property {string} webCordovaIndex
* @property {string} webCordovaProgramJson
*/
/**
* @typedef {Object} electronAppPaths
* @property {string} rootName
* @property {string} root
* @property {Object} appRoot
* @property {string} appRoot.cordova
* @property {string} appRoot.index
* @property {string} appRoot.app
* @property {string} appRoot.modules
* @property {string} desktopAsar
* @property {string} extracted
* @property {string} appAsar
* @property {string} preload
* @property {string} import
* @property {string} assets
* @property {string} gitIgnore
* @property {string} packageJson
* @property {string} settings
* @property {string} desktop
* @property {string} desktopTmp
* @property {string} nodeModules
* @property {string} meteorAsar
* @property {string} meteorApp
* @property {string} meteorAppIndex
* @property {string} meteorAppProgramJson
* @property {string} skeleton
* @property {string} tmpNodeModules
* @property {string} extractedNodeModules
* @property {string} extractedNodeModulesBin
*/
/**
* @typedef {Object} desktopTmpPaths
* @property {string} root
* @property {string} modules
* @property {string} settings
*/
/**
* @typedef {Object} meteorDesktopPaths
* @property {string} root
* @property {string} skeleton
*/
/**
* @typedef {Object} packagePaths
* @property {meteorAppPaths} meteorApp
* @property {desktopPaths} desktop
* @property {electronAppPaths} electronApp
* @property {desktopTmpPaths} desktopTmp
* @property {meteorDesktopPaths} meteorDesktop
* @property {string} packageDir
* @property {string} scaffold
*/
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9lbnYuanMiXSwibmFtZXMiOlsiam9pbiIsInBhdGgiLCJFbnYiLCJjb25zdHJ1Y3RvciIsImlucHV0Iiwib3V0cHV0Iiwib3B0aW9ucyIsImlzUHJvZHVjdGlvbkJ1aWxkIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwic3lzIiwicGxhdGZvcm0iLCJhcmNoIiwib3MiLCJpc1dpbmRvd3MiLCJpc0xpbnV4IiwiaXNPc3giLCJzdGRpbyIsIm5hbWUiLCJob21lIiwidG1wIiwidG1wZGlyIiwicGF0aHMiLCJtZXRlb3JEZXNrdG9wIiwicm9vdCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJza2VsZXRvbiIsIm1ldGVvckFwcCIsImRlc2t0b3AiLCJyb290TmFtZSIsIm1vZHVsZXMiLCJpbXBvcnQiLCJhc3NldHMiLCJzZXR0aW5ncyIsInNwbGFzaFNjcmVlbiIsImxvYWRpbmdHaWYiLCJtZXRlb3JJY28iLCJlbGVjdHJvbkFwcCIsInRtcE5vZGVNb2R1bGVzIiwiY2FjaGUiLCJleHRyYWN0ZWROb2RlTW9kdWxlcyIsImV4dHJhY3RlZE5vZGVNb2R1bGVzQmluIiwiYXBwUm9vdCIsImFwcCIsImNvcmRvdmEiLCJpbmRleCIsInByZWxvYWQiLCJkZXNrdG9wQXNhciIsImV4dHJhY3RlZCIsImFwcEFzYXIiLCJwYWNrYWdlSnNvbiIsImRlc2t0b3BUbXAiLCJub2RlTW9kdWxlcyIsIm1ldGVvckFzYXIiLCJtZXRlb3JBcHBJbmRleCIsIm1ldGVvckFwcFByb2dyYW1Kc29uIiwicGxhdGZvcm1zIiwicGFja2FnZXMiLCJ2ZXJzaW9ucyIsInJlbGVhc2UiLCJnaXRJZ25vcmUiLCJjb3Jkb3ZhQnVpbGQiLCJ3ZWJDb3Jkb3ZhIiwiY29yZG92YUJ1aWxkSW5kZXgiLCJjb3Jkb3ZhQnVpbGRQcm9ncmFtSnNvbiIsIndlYkNvcmRvdmFQcm9ncmFtSnNvbiIsInBhY2thZ2VEaXIiLCJpbnN0YWxsZXJEaXIiLCJzY2FmZm9sZCIsInByb2R1Y3Rpb24iLCJt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QXhCO0FBSUEsMkJBQVMsS0FBS0YsS0FBTCxDQUFXOEIsVUFBcEIsRUFBZ0M7QUFDNUJyQixNQUFBQSxPQUFPLEVBQUVoQyxJQUFJLENBQUMsS0FBS3VCLEtBQUwsQ0FBVzhCLFVBQVgsQ0FBc0I1QixJQUF2QixFQUE2QixTQUE3QixDQURlO0FBRTVCVSxNQUFBQSxRQUFRLEVBQUVuQyxJQUFJLENBQUMsS0FBS3VCLEtBQUwsQ0FBVzhCLFVBQVgsQ0FBc0I1QixJQUF2QixFQUE2QixlQUE3QjtBQUZjLEtBQWhDO0FBS0EsU0FBS0YsS0FBTCxDQUFXNkMsVUFBWCxHQUF3QixrQkFBeEI7QUFDQSxTQUFLN0MsS0FBTCxDQUFXOEMsWUFBWCxHQUEwQixvQkFBMUIsQ0E1SmdDLENBOEpoQzs7QUFDQSxTQUFLOUMsS0FBTCxDQUFXK0MsUUFBWCxHQUFzQnRFLElBQUksQ0FBQzJCLFNBQUQsRUFBWSxJQUFaLEVBQWtCLFVBQWxCLENBQTFCO0FBQ0g7QUFFRDs7Ozs7O0FBSUFwQixFQUFBQSxpQkFBaUIsR0FBRztBQUNoQixXQUFPLENBQUMsRUFBRSxnQkFBZ0IsS0FBS0QsT0FBckIsSUFBZ0MsS0FBS0EsT0FBTCxDQUFhaUUsVUFBL0MsQ0FBUjtBQUNIOztBQXpLb0I7OztBQTRLekJDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnZFLEdBQWpCO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FBY0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JBOzs7Ozs7O0FBT0E7Ozs7OztBQU1BIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IGFzc2lnbkluIGZyb20gJ2xvZGFzaC9hc3NpZ25Jbic7XG5cbmNvbnN0IHsgam9pbiB9ID0gcGF0aDtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEBwcm9wZXJ0eSB7cGFja2FnZVBhdGhzfSBwYXRoc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnYge1xuICAgIGNvbnN0cnVjdG9yKGlucHV0LCBvdXRwdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgICAgICBpZiAodGhpcy5pc1Byb2R1Y3Rpb25CdWlsZCgpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9ICdwcm9kdWN0aW9uJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3lzID0ge1xuICAgICAgICAgICAgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICAgICAgICBhcmNoOiBwcm9jZXNzLmFyY2hcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBPcGVyYXRpb25hbCBTeXN0ZW0uXG4gICAgICAgIHRoaXMub3MgPSB7XG4gICAgICAgICAgICBpc1dpbmRvd3M6IChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSxcbiAgICAgICAgICAgIGlzTGludXg6IChwcm9jZXNzLnBsYXRmb3JtID09PSAnbGludXgnKSxcbiAgICAgICAgICAgIGlzT3N4OiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpXG5cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdGRpbyA9ICdpbmhlcml0JztcblxuICAgICAgICB0aGlzLm9zLm5hbWUgPSAodGhpcy5zeXMucGxhdGZvcm0gPT09ICdkYXJ3aW4nID8gJ29zeCcgOiB0aGlzLnN5cy5wbGF0Zm9ybSk7XG4gICAgICAgIHRoaXMub3MuaG9tZSA9IHByb2Nlc3MuZW52Wyh0aGlzLm9zLmlzV2luZG93cyA/ICdVU0VSUFJPRklMRScgOiAnSE9NRScpXTtcbiAgICAgICAgdGhpcy5vcy50bXAgPSBvcy50bXBkaXIoKTtcblxuICAgICAgICAvKiogQHR5cGUge3BhY2thZ2VQYXRoc30gKi9cbiAgICAgICAgdGhpcy5wYXRocyA9IHt9O1xuXG4gICAgICAgIC8qKiBAdHlwZSB7bWV0ZW9yRGVza3RvcFBhdGhzfSAqL1xuICAgICAgICB0aGlzLnBhdGhzLm1ldGVvckRlc2t0b3AgPSB7XG4gICAgICAgICAgICByb290OiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nKVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucGF0aHMubWV0ZW9yRGVza3RvcC5za2VsZXRvbiA9IGpvaW4odGhpcy5wYXRocy5tZXRlb3JEZXNrdG9wLnJvb3QsICdza2VsZXRvbicpO1xuXG4gICAgICAgIC8qKiBAdHlwZSB7bWV0ZW9yQXBwUGF0aHN9ICovXG4gICAgICAgIHRoaXMucGF0aHMubWV0ZW9yQXBwID0ge1xuICAgICAgICAgICAgcm9vdDogaW5wdXRcbiAgICAgICAgfTtcblxuICAgICAgICAvKiogQHR5cGUge2Rlc2t0b3BQYXRoc30gKi9cbiAgICAgICAgdGhpcy5wYXRocy5kZXNrdG9wID0ge1xuICAgICAgICAgICAgcm9vdE5hbWU6ICcuZGVza3RvcCcsXG4gICAgICAgICAgICByb290OiBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICcuZGVza3RvcCcpXG4gICAgICAgIH07XG5cbiAgICAgICAgYXNzaWduSW4odGhpcy5wYXRocy5kZXNrdG9wLCB7XG4gICAgICAgICAgICBtb2R1bGVzOiBqb2luKHRoaXMucGF0aHMuZGVza3RvcC5yb290LCAnbW9kdWxlcycpLFxuICAgICAgICAgICAgaW1wb3J0OiBqb2luKHRoaXMucGF0aHMuZGVza3RvcC5yb290LCAnaW1wb3J0JyksXG4gICAgICAgICAgICBhc3NldHM6IGpvaW4odGhpcy5wYXRocy5kZXNrdG9wLnJvb3QsICdhc3NldHMnKSxcbiAgICAgICAgICAgIHNldHRpbmdzOiBqb2luKHRoaXMucGF0aHMuZGVza3RvcC5yb290LCAnc2V0dGluZ3MuanNvbicpLFxuICAgICAgICAgICAgZGVza3RvcDogam9pbih0aGlzLnBhdGhzLmRlc2t0b3Aucm9vdCwgJ2Rlc2t0b3AuanMnKVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnBhdGhzLmRlc2t0b3Auc3BsYXNoU2NyZWVuID0gam9pbih0aGlzLnBhdGhzLmRlc2t0b3AuYXNzZXRzLCAnc3BsYXNoU2NyZWVuLnBuZycpO1xuICAgICAgICB0aGlzLnBhdGhzLmRlc2t0b3AubG9hZGluZ0dpZiA9IGpvaW4odGhpcy5wYXRocy5kZXNrdG9wLmFzc2V0cywgJ2xvYWRpbmcuZ2lmJyk7XG4gICAgICAgIHRoaXMucGF0aHMuZGVza3RvcC5tZXRlb3JJY28gPSBqb2luKHRoaXMucGF0aHMuZGVza3RvcC5hc3NldHMsICdtZXRlb3IuaWNvJyk7XG5cbiAgICAgICAgLyoqIEB0eXBlIHtlbGVjdHJvbkFwcFBhdGhzfSAqL1xuICAgICAgICB0aGlzLnBhdGhzLmVsZWN0cm9uQXBwID0ge1xuICAgICAgICAgICAgcm9vdE5hbWU6ICdkZXNrdG9wLWJ1aWxkJyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290ID1cbiAgICAgICAgICAgIGpvaW4odGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCwgJy5tZXRlb3InLCB0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3ROYW1lKTtcblxuICAgICAgICB0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnRtcE5vZGVNb2R1bGVzID1cbiAgICAgICAgICAgIGpvaW4odGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCwgJy5tZXRlb3InLCAnLmRlc2t0b3Bfbm9kZV9tb2R1bGVzJyk7XG5cbiAgICAgICAgdGhpcy5wYXRocy5jYWNoZSA9XG4gICAgICAgICAgICBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICcubWV0ZW9yJywgJ2xvY2FsJywgJ2Rlc2t0b3AtY2FjaGUnKTtcblxuICAgICAgICB0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLmV4dHJhY3RlZE5vZGVNb2R1bGVzID1cbiAgICAgICAgICAgIGpvaW4odGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCwgJy5tZXRlb3InLCAnLmRlc2t0b3BfZXh0cmFjdGVkX25vZGVfbW9kdWxlcycpO1xuXG4gICAgICAgIHRoaXMucGF0aHMuZWxlY3Ryb25BcHAuZXh0cmFjdGVkTm9kZU1vZHVsZXNCaW4gPVxuICAgICAgICAgICAgam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLmV4dHJhY3RlZE5vZGVNb2R1bGVzLCAnLmJpbicpO1xuXG5cbiAgICAgICAgdGhpcy5wYXRocy5lbGVjdHJvbkFwcC5hcHBSb290ID1cbiAgICAgICAgICAgIGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAnYXBwJyk7XG5cbiAgICAgICAgYXNzaWduSW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcCwge1xuICAgICAgICAgICAgYXBwOiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAuYXBwUm9vdCwgJ2FwcC5qcycpLFxuICAgICAgICAgICAgY29yZG92YTogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLmFwcFJvb3QsICdjb3Jkb3ZhLmpzJyksXG4gICAgICAgICAgICBpbmRleDogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLmFwcFJvb3QsICdpbmRleC5qcycpLFxuICAgICAgICAgICAgcHJlbG9hZDogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLmFwcFJvb3QsICdwcmVsb2FkLmpzJyksXG4gICAgICAgICAgICBtb2R1bGVzOiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAuYXBwUm9vdCwgJ21vZHVsZXMnKSxcbiAgICAgICAgICAgIGRlc2t0b3BBc2FyOiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ2Rlc2t0b3AuYXNhcicpLFxuICAgICAgICAgICAgZXh0cmFjdGVkOiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ2V4dHJhY3RlZCcpLFxuICAgICAgICAgICAgYXBwQXNhcjogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdhcHAuYXNhcicpLFxuICAgICAgICAgICAgaW1wb3J0OiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ2ltcG9ydCcpLFxuICAgICAgICAgICAgYXNzZXRzOiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ2Fzc2V0cycpLFxuICAgICAgICAgICAgcGFja2FnZUpzb246IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAncGFja2FnZS5qc29uJyksXG4gICAgICAgICAgICBzZXR0aW5nczogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdzZXR0aW5ncy5qc29uJyksXG4gICAgICAgICAgICBkZXNrdG9wOiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ2Rlc2t0b3AuanMnKSxcbiAgICAgICAgICAgIGRlc2t0b3BUbXA6IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAnX19kZXNrdG9wJyksXG4gICAgICAgICAgICBub2RlTW9kdWxlczogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdub2RlX21vZHVsZXMnKSxcbiAgICAgICAgICAgIG1ldGVvckFzYXI6IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAnbWV0ZW9yLmFzYXInKSxcbiAgICAgICAgICAgIG1ldGVvckFwcDogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdtZXRlb3InKSxcbiAgICAgICAgICAgIG1ldGVvckFwcEluZGV4OiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ21ldGVvcicsICdpbmRleC5odG1sJyksXG4gICAgICAgICAgICBtZXRlb3JBcHBQcm9ncmFtSnNvbjogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdtZXRlb3InLCAncHJvZ3JhbS5qc29uJyksXG4gICAgICAgICAgICBza2VsZXRvbjogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdza2VsZXRvbicpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFzc2lnbkluKHRoaXMucGF0aHMubWV0ZW9yQXBwLCB7XG4gICAgICAgICAgICBwbGF0Zm9ybXM6IGpvaW4odGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCwgJy5tZXRlb3InLCAncGxhdGZvcm1zJyksXG4gICAgICAgICAgICBwYWNrYWdlczogam9pbih0aGlzLnBhdGhzLm1ldGVvckFwcC5yb290LCAnLm1ldGVvcicsICdwYWNrYWdlcycpLFxuICAgICAgICAgICAgdmVyc2lvbnM6IGpvaW4odGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCwgJy5tZXRlb3InLCAndmVyc2lvbnMnKSxcbiAgICAgICAgICAgIHJlbGVhc2U6IGpvaW4odGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCwgJy5tZXRlb3InLCAncmVsZWFzZScpLFxuICAgICAgICAgICAgcGFja2FnZUpzb246IGpvaW4odGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgICAgICAgZ2l0SWdub3JlOiBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICcubWV0ZW9yJywgJy5naXRpZ25vcmUnKSxcbiAgICAgICAgICAgIGNvcmRvdmFCdWlsZDogam9pbihcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGhzLm1ldGVvckFwcC5yb290LFxuICAgICAgICAgICAgICAgICcubWV0ZW9yJyxcbiAgICAgICAgICAgICAgICAnbG9jYWwnLFxuICAgICAgICAgICAgICAgICdjb3Jkb3ZhLWJ1aWxkJyxcbiAgICAgICAgICAgICAgICAnd3d3JyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd2ViQ29yZG92YTogam9pbihcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGhzLm1ldGVvckFwcC5yb290LFxuICAgICAgICAgICAgICAgICcubWV0ZW9yJyxcbiAgICAgICAgICAgICAgICAnbG9jYWwnLFxuICAgICAgICAgICAgICAgICdidWlsZCcsXG4gICAgICAgICAgICAgICAgJ3Byb2dyYW1zJyxcbiAgICAgICAgICAgICAgICAnd2ViLmNvcmRvdmEnXG4gICAgICAgICAgICApXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFzc2lnbkluKHRoaXMucGF0aHMubWV0ZW9yQXBwLCB7XG4gICAgICAgICAgICBjb3Jkb3ZhQnVpbGRJbmRleDogam9pbihcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGhzLm1ldGVvckFwcC5jb3Jkb3ZhQnVpbGQsICdpbmRleC5odG1sJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNvcmRvdmFCdWlsZFByb2dyYW1Kc29uOiBqb2luKFxuICAgICAgICAgICAgICAgIHRoaXMucGF0aHMubWV0ZW9yQXBwLmNvcmRvdmFCdWlsZCwgJ3Byb2dyYW0uanNvbidcbiAgICAgICAgICAgIClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXNzaWduSW4odGhpcy5wYXRocy5tZXRlb3JBcHAsIHtcbiAgICAgICAgICAgIHdlYkNvcmRvdmFQcm9ncmFtSnNvbjogam9pbihcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGhzLm1ldGVvckFwcC53ZWJDb3Jkb3ZhLCAncHJvZ3JhbS5qc29uJ1xuICAgICAgICAgICAgKVxuICAgICAgICB9KTtcblxuXG4gICAgICAgIC8qKiBAdHlwZSB7ZGVza3RvcFRtcFBhdGhzfSAqL1xuICAgICAgICB0aGlzLnBhdGhzLmRlc2t0b3BUbXAgPSB7XG4gICAgICAgICAgICByb290OiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ19fZGVza3RvcCcpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGFzc2lnbkluKHRoaXMucGF0aHMuZGVza3RvcFRtcCwge1xuICAgICAgICAgICAgbW9kdWxlczogam9pbih0aGlzLnBhdGhzLmRlc2t0b3BUbXAucm9vdCwgJ21vZHVsZXMnKSxcbiAgICAgICAgICAgIHNldHRpbmdzOiBqb2luKHRoaXMucGF0aHMuZGVza3RvcFRtcC5yb290LCAnc2V0dGluZ3MuanNvbicpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucGF0aHMucGFja2FnZURpciA9ICcuZGVza3RvcC1wYWNrYWdlJztcbiAgICAgICAgdGhpcy5wYXRocy5pbnN0YWxsZXJEaXIgPSAnLmRlc2t0b3AtaW5zdGFsbGVyJztcblxuICAgICAgICAvLyBTY2FmZm9sZFxuICAgICAgICB0aGlzLnBhdGhzLnNjYWZmb2xkID0gam9pbihfX2Rpcm5hbWUsICcuLicsICdzY2FmZm9sZCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufCp9XG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGlzUHJvZHVjdGlvbkJ1aWxkKCkge1xuICAgICAgICByZXR1cm4gISEoJ3Byb2R1Y3Rpb24nIGluIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucHJvZHVjdGlvbik7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVudjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBkZXNrdG9wUGF0aHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByb290TmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJvb3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2R1bGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW1wb3J0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXNzZXRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2V0dGluZ3NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZXNrdG9wXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3BsYXNoU2NyZWVuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbG9hZGluZ0dpZlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1ldGVvckljb1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gbWV0ZW9yQXBwUGF0aHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByb290XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhdGZvcm1zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVsZWFzZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhY2thZ2VzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBnaXRJZ25vcmVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYWNrYWdlSnNvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvcmRvdmFCdWlsZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvcmRvdmFCdWlsZEluZGV4XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29yZG92YUJ1aWxkUHJvZ3JhbUpzb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJDb3Jkb3ZhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2ViQ29yZG92YUluZGV4XG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2ViQ29yZG92YVByb2dyYW1Kc29uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBlbGVjdHJvbkFwcFBhdGhzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcm9vdE5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByb290XG4gKiBAcHJvcGVydHkge09iamVjdH0gYXBwUm9vdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcFJvb3QuY29yZG92YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcFJvb3QuaW5kZXhcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBSb290LmFwcFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcFJvb3QubW9kdWxlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlc2t0b3BBc2FyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXh0cmFjdGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwQXNhclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByZWxvYWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbXBvcnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhc3NldHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBnaXRJZ25vcmVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYWNrYWdlSnNvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNldHRpbmdzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGVza3RvcFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlc2t0b3BUbXBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub2RlTW9kdWxlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG1ldGVvckFzYXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRlb3JBcHBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRlb3JBcHBJbmRleFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1ldGVvckFwcFByb2dyYW1Kc29uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2tlbGV0b25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0bXBOb2RlTW9kdWxlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4dHJhY3RlZE5vZGVNb2R1bGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXh0cmFjdGVkTm9kZU1vZHVsZXNCaW5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGRlc2t0b3BUbXBQYXRoc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHJvb3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2R1bGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2V0dGluZ3NcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IG1ldGVvckRlc2t0b3BQYXRoc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHJvb3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBza2VsZXRvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gcGFja2FnZVBhdGhzXG4gKiBAcHJvcGVydHkge21ldGVvckFwcFBhdGhzfSBtZXRlb3JBcHBcbiAqIEBwcm9wZXJ0eSB7ZGVza3RvcFBhdGhzfSBkZXNrdG9wXG4gKiBAcHJvcGVydHkge2VsZWN0cm9uQXBwUGF0aHN9IGVsZWN0cm9uQXBwXG4gKiBAcHJvcGVydHkge2Rlc2t0b3BUbXBQYXRoc30gZGVza3RvcFRtcFxuICogQHByb3BlcnR5IHttZXRlb3JEZXNrdG9wUGF0aHN9IG1ldGVvckRlc2t0b3BcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYWNrYWdlRGlyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2NhZmZvbGRcbiAqL1xuIl19