UNPKG

electron-forge

Version:

A complete tool for building modern Electron applications

402 lines (301 loc) 28 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); var _assign = require('babel-runtime/core-js/object/assign'); var _assign2 = _interopRequireDefault(_assign); var _bluebird = require('bluebird'); require('colors'); var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug); var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _glob = require('glob'); var _glob2 = _interopRequireDefault(_glob); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _pify = require('pify'); var _pify2 = _interopRequireDefault(_pify); var _electronPackager = require('electron-packager'); var _electronPackager2 = _interopRequireDefault(_electronPackager); var _electronHostArch = require('../util/electron-host-arch'); var _electronHostArch2 = _interopRequireDefault(_electronHostArch); var _forgeConfig = require('../util/forge-config'); var _forgeConfig2 = _interopRequireDefault(_forgeConfig); var _hook = require('../util/hook'); var _hook2 = _interopRequireDefault(_hook); var _ora = require('../util/ora'); var _ora2 = _interopRequireDefault(_ora); var _compileHook = require('../util/compile-hook'); var _compileHook2 = _interopRequireDefault(_compileHook); var _readPackageJson = require('../util/read-package-json'); var _readPackageJson2 = _interopRequireDefault(_readPackageJson); var _rebuild = require('../util/rebuild'); var _rebuild2 = _interopRequireDefault(_rebuild); var _requireSearch = require('../util/require-search'); var _requireSearch2 = _interopRequireDefault(_requireSearch); var _resolveDir = require('../util/resolve-dir'); var _resolveDir2 = _interopRequireDefault(_resolveDir); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var d = (0, _debug2.default)('electron-forge:packager'); /** * @typedef {Object} PackageOptions * @property {string} [dir=process.cwd()] The path to the app to package * @property {boolean} [interactive=false] Whether to use sensible defaults or prompt the user visually * @property {string} [arch=process.arch] The target arch * @property {string} [platform=process.platform] The target platform. * @property {string} [outDir=`${dir}/out`] The path to the output directory for packaged apps */ /** * Package an Electron application into an platform dependent format. * * @param {PackageOptions} providedOptions - Options for the Package method * @return {Promise} Will resolve when the package process is complete */ exports.default = function () { var _ref = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee5() { var providedOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _Object$assign, dir, interactive, arch, platform, ora, outDir, prepareSpinner, prepareCounter, packageJSON, forgeConfig, packagerSpinner, packageOpts; return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: // eslint-disable-next-line prefer-const, no-unused-vars _Object$assign = (0, _assign2.default)({ dir: process.cwd(), interactive: false, arch: (0, _electronHostArch2.default)(), platform: process.platform }, providedOptions), dir = _Object$assign.dir, interactive = _Object$assign.interactive, arch = _Object$assign.arch, platform = _Object$assign.platform; ora = interactive ? _ora2.default : _ora.fakeOra; outDir = providedOptions.outDir || _path2.default.resolve(dir, 'out'); prepareSpinner = ora('Preparing to Package Application for arch: ' + (arch === 'all' ? 'ia32' : arch).cyan).start(); prepareCounter = 0; _context5.next = 7; return (0, _resolveDir2.default)(dir); case 7: dir = _context5.sent; if (dir) { _context5.next = 10; break; } throw 'Failed to locate compilable Electron application'; case 10: _context5.next = 12; return (0, _readPackageJson2.default)(dir); case 12: packageJSON = _context5.sent; if (!(_path2.default.dirname(require.resolve(_path2.default.resolve(dir, packageJSON.main))) === dir)) { _context5.next = 16; break; } console.error(('Entry point: ' + packageJSON.main).red); throw 'The entry point to your application ("packageJSON.main") must be in a subfolder not in the top level directory'; case 16: _context5.next = 18; return (0, _forgeConfig2.default)(dir); case 18: forgeConfig = _context5.sent; packagerSpinner = void 0; packageOpts = (0, _assign2.default)({ asar: false, overwrite: true }, forgeConfig.electronPackagerConfig, { afterCopy: [function () { var _ref2 = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee(buildPath, electronVersion, pPlatform, pArch, done) { var bins, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, bin; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (packagerSpinner) { packagerSpinner.succeed(); prepareCounter += 1; prepareSpinner = ora('Preparing to Package Application for arch: ' + (prepareCounter === 2 ? 'armv7l' : 'x64').cyan).start(); } _context.next = 3; return _fsExtra2.default.remove(_path2.default.resolve(buildPath, 'node_modules/electron-compile/test')); case 3: _context.next = 5; return (0, _pify2.default)(_glob2.default)(_path2.default.join(buildPath, '**/.bin/**/*')); case 5: bins = _context.sent; _iteratorNormalCompletion = true; _didIteratorError = false; _iteratorError = undefined; _context.prev = 9; _iterator = (0, _getIterator3.default)(bins); case 11: if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { _context.next = 18; break; } bin = _step.value; _context.next = 15; return _fsExtra2.default.remove(bin); case 15: _iteratorNormalCompletion = true; _context.next = 11; break; case 18: _context.next = 24; break; case 20: _context.prev = 20; _context.t0 = _context['catch'](9); _didIteratorError = true; _iteratorError = _context.t0; case 24: _context.prev = 24; _context.prev = 25; if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } case 27: _context.prev = 27; if (!_didIteratorError) { _context.next = 30; break; } throw _iteratorError; case 30: return _context.finish(27); case 31: return _context.finish(24); case 32: done(); case 33: case 'end': return _context.stop(); } } }, _callee, undefined, [[9, 20, 24, 32], [25,, 27, 31]]); })); return function (_x2, _x3, _x4, _x5, _x6) { return _ref2.apply(this, arguments); }; }(), function () { var _ref3 = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee2() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: prepareSpinner.succeed(); _context2.next = 3; return _compileHook2.default.apply(undefined, [dir].concat(args)); case 3: case 'end': return _context2.stop(); } } }, _callee2, undefined); })); return function () { return _ref3.apply(this, arguments); }; }(), function () { var _ref4 = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee3(buildPath, electronVersion, pPlatform, pArch, done) { return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return (0, _rebuild2.default)(buildPath, electronVersion, pPlatform, pArch); case 2: packagerSpinner = ora('Packaging Application').start(); done(); case 4: case 'end': return _context3.stop(); } } }, _callee3, undefined); })); return function (_x7, _x8, _x9, _x10, _x11) { return _ref4.apply(this, arguments); }; }(), function () { var _ref5 = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee4(buildPath, electronVersion, pPlatform, pArch, done) { var copiedPackageJSON; return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return (0, _readPackageJson2.default)(buildPath); case 2: copiedPackageJSON = _context4.sent; if (copiedPackageJSON.config && copiedPackageJSON.config.forge) { delete copiedPackageJSON.config.forge; } _context4.next = 6; return _fsExtra2.default.writeFile(_path2.default.resolve(buildPath, 'package.json'), (0, _stringify2.default)(copiedPackageJSON, null, 2)); case 6: done(); case 7: case 'end': return _context4.stop(); } } }, _callee4, undefined); })); return function (_x12, _x13, _x14, _x15, _x16) { return _ref5.apply(this, arguments); }; }()].concat(forgeConfig.electronPackagerConfig.afterCopy ? forgeConfig.electronPackagerConfig.afterCopy.map(function (item) { return typeof item === 'string' ? (0, _requireSearch2.default)(dir, [item]) : item; }) : []), afterExtract: forgeConfig.electronPackagerConfig.afterExtract ? forgeConfig.electronPackagerConfig.afterExtract.map(function (item) { return typeof item === 'string' ? (0, _requireSearch2.default)(dir, [item]) : item; }) : [], dir: dir, arch: arch, platform: platform, out: outDir, electronVersion: packageJSON.devDependencies['electron-prebuilt-compile'] }); packageOpts.quiet = true; if (!((0, _typeof3.default)(packageOpts.asar) === 'object' && packageOpts.asar.unpack)) { _context5.next = 25; break; } packagerSpinner.fail(); throw new Error('electron-compile does not support asar.unpack yet. Please use asar.unpackDir'); case 25: _context5.next = 27; return (0, _hook2.default)(forgeConfig, 'generateAssets'); case 27: _context5.next = 29; return (0, _hook2.default)(forgeConfig, 'prePackage'); case 29: d('packaging with options', packageOpts); _context5.next = 32; return (0, _pify2.default)(_electronPackager2.default)(packageOpts); case 32: _context5.next = 34; return (0, _hook2.default)(forgeConfig, 'postPackage'); case 34: packagerSpinner.succeed(); case 35: case 'end': return _context5.stop(); } } }, _callee5, undefined); })); return function () { return _ref.apply(this, arguments); }; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwaS9wYWNrYWdlLmpzIl0sIm5hbWVzIjpbImQiLCJwcm92aWRlZE9wdGlvbnMiLCJkaXIiLCJwcm9jZXNzIiwiY3dkIiwiaW50ZXJhY3RpdmUiLCJhcmNoIiwicGxhdGZvcm0iLCJvcmEiLCJvdXREaXIiLCJyZXNvbHZlIiwicHJlcGFyZVNwaW5uZXIiLCJjeWFuIiwic3RhcnQiLCJwcmVwYXJlQ291bnRlciIsInBhY2thZ2VKU09OIiwiZGlybmFtZSIsInJlcXVpcmUiLCJtYWluIiwiY29uc29sZSIsImVycm9yIiwicmVkIiwiZm9yZ2VDb25maWciLCJwYWNrYWdlclNwaW5uZXIiLCJwYWNrYWdlT3B0cyIsImFzYXIiLCJvdmVyd3JpdGUiLCJlbGVjdHJvblBhY2thZ2VyQ29uZmlnIiwiYWZ0ZXJDb3B5IiwiYnVpbGRQYXRoIiwiZWxlY3Ryb25WZXJzaW9uIiwicFBsYXRmb3JtIiwicEFyY2giLCJkb25lIiwic3VjY2VlZCIsInJlbW92ZSIsImpvaW4iLCJiaW5zIiwiYmluIiwiYXJncyIsImNvcGllZFBhY2thZ2VKU09OIiwiY29uZmlnIiwiZm9yZ2UiLCJ3cml0ZUZpbGUiLCJjb25jYXQiLCJtYXAiLCJpdGVtIiwiYWZ0ZXJFeHRyYWN0Iiwib3V0IiwiZGV2RGVwZW5kZW5jaWVzIiwicXVpZXQiLCJ1bnBhY2siLCJmYWlsIiwiRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLElBQUkscUJBQU0seUJBQU4sQ0FBVjs7QUFFQTs7Ozs7Ozs7O0FBU0E7Ozs7Ozs7O2lFQU1lO0FBQUEsUUFBT0MsZUFBUCx1RUFBeUIsRUFBekI7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FB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O0FBQUE7QUFBQTtBQUFBLG1CQStFUCxvQkFBUUEsV0FBUixFQUFxQixZQUFyQixDQS9FTzs7QUFBQTs7QUFpRmJ0QixjQUFFLHdCQUFGLEVBQTRCd0IsV0FBNUI7O0FBakZhO0FBQUEsbUJBbUZQLGdEQUFlQSxXQUFmLENBbkZPOztBQUFBO0FBQUE7QUFBQSxtQkFxRlAsb0JBQVFGLFdBQVIsRUFBcUIsYUFBckIsQ0FyRk87O0FBQUE7O0FBdUZiQyw0QkFBZ0JXLE9BQWhCOztBQXZGYTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHIiwiZmlsZSI6ImFwaS9wYWNrYWdlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdjb2xvcnMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHBpZnkgZnJvbSAncGlmeSc7XG5pbXBvcnQgcGFja2FnZXIgZnJvbSAnZWxlY3Ryb24tcGFja2FnZXInO1xuXG5pbXBvcnQgZWxlY3Ryb25Ib3N0QXJjaCBmcm9tICcuLi91dGlsL2VsZWN0cm9uLWhvc3QtYXJjaCc7XG5pbXBvcnQgZ2V0Rm9yZ2VDb25maWcgZnJvbSAnLi4vdXRpbC9mb3JnZS1jb25maWcnO1xuaW1wb3J0IHJ1bkhvb2sgZnJvbSAnLi4vdXRpbC9ob29rJztcbmltcG9ydCByZWFsT3JhLCB7IGZha2VPcmEgfSBmcm9tICcuLi91dGlsL29yYSc7XG5pbXBvcnQgcGFja2FnZXJDb21waWxlSG9vayBmcm9tICcuLi91dGlsL2NvbXBpbGUtaG9vayc7XG5pbXBvcnQgcmVhZFBhY2thZ2VKU09OIGZyb20gJy4uL3V0aWwvcmVhZC1wYWNrYWdlLWpzb24nO1xuaW1wb3J0IHJlYnVpbGRIb29rIGZyb20gJy4uL3V0aWwvcmVidWlsZCc7XG5pbXBvcnQgcmVxdWlyZVNlYXJjaCBmcm9tICcuLi91dGlsL3JlcXVpcmUtc2VhcmNoJztcbmltcG9ydCByZXNvbHZlRGlyIGZyb20gJy4uL3V0aWwvcmVzb2x2ZS1kaXInO1xuXG5jb25zdCBkID0gZGVidWcoJ2VsZWN0cm9uLWZvcmdlOnBhY2thZ2VyJyk7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFja2FnZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGlyPXByb2Nlc3MuY3dkKCldIFRoZSBwYXRoIHRvIHRoZSBhcHAgdG8gcGFja2FnZVxuICogQHByb3BlcnR5IHtib29sZWFufSBbaW50ZXJhY3RpdmU9ZmFsc2VdIFdoZXRoZXIgdG8gdXNlIHNlbnNpYmxlIGRlZmF1bHRzIG9yIHByb21wdCB0aGUgdXNlciB2aXN1YWxseVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthcmNoPXByb2Nlc3MuYXJjaF0gVGhlIHRhcmdldCBhcmNoXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BsYXRmb3JtPXByb2Nlc3MucGxhdGZvcm1dIFRoZSB0YXJnZXQgcGxhdGZvcm0uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW291dERpcj1gJHtkaXJ9L291dGBdIFRoZSBwYXRoIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciBwYWNrYWdlZCBhcHBzXG4gKi9cblxuLyoqXG4gKiBQYWNrYWdlIGFuIEVsZWN0cm9uIGFwcGxpY2F0aW9uIGludG8gYW4gcGxhdGZvcm0gZGVwZW5kZW50IGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0ge1BhY2thZ2VPcHRpb25zfSBwcm92aWRlZE9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgUGFja2FnZSBtZXRob2RcbiAqIEByZXR1cm4ge1Byb21pc2V9IFdpbGwgcmVzb2x2ZSB3aGVuIHRoZSBwYWNrYWdlIHByb2Nlc3MgaXMgY29tcGxldGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHByb3ZpZGVkT3B0aW9ucyA9IHt9KSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QsIG5vLXVudXNlZC12YXJzXG4gIGxldCB7IGRpciwgaW50ZXJhY3RpdmUsIGFyY2gsIHBsYXRmb3JtIH0gPSBPYmplY3QuYXNzaWduKHtcbiAgICBkaXI6IHByb2Nlc3MuY3dkKCksXG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIGFyY2g6IGVsZWN0cm9uSG9zdEFyY2goKSxcbiAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgfSwgcHJvdmlkZWRPcHRpb25zKTtcblxuICBjb25zdCBvcmEgPSBpbnRlcmFjdGl2ZSA/IHJlYWxPcmEgOiBmYWtlT3JhO1xuXG4gIGNvbnN0IG91dERpciA9IHByb3ZpZGVkT3B0aW9ucy5vdXREaXIgfHwgcGF0aC5yZXNvbHZlKGRpciwgJ291dCcpO1xuICBsZXQgcHJlcGFyZVNwaW5uZXIgPSBvcmEoYFByZXBhcmluZyB0byBQYWNrYWdlIEFwcGxpY2F0aW9uIGZvciBhcmNoOiAkeyhhcmNoID09PSAnYWxsJyA/ICdpYTMyJyA6IGFyY2gpLmN5YW59YCkuc3RhcnQoKTtcbiAgbGV0IHByZXBhcmVDb3VudGVyID0gMDtcblxuICBkaXIgPSBhd2FpdCByZXNvbHZlRGlyKGRpcik7XG4gIGlmICghZGlyKSB7XG4gICAgdGhyb3cgJ0ZhaWxlZCB0byBsb2NhdGUgY29tcGlsYWJsZSBFbGVjdHJvbiBhcHBsaWNhdGlvbic7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlSlNPTiA9IGF3YWl0IHJlYWRQYWNrYWdlSlNPTihkaXIpO1xuXG4gIGlmIChwYXRoLmRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShkaXIsIHBhY2thZ2VKU09OLm1haW4pKSkgPT09IGRpcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVudHJ5IHBvaW50OiAke3BhY2thZ2VKU09OLm1haW59YC5yZWQpO1xuICAgIHRocm93ICdUaGUgZW50cnkgcG9pbnQgdG8geW91ciBhcHBsaWNhdGlvbiAoXCJwYWNrYWdlSlNPTi5tYWluXCIpIG11c3QgYmUgaW4gYSBzdWJmb2xkZXIgbm90IGluIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5JztcbiAgfVxuXG4gIGNvbnN0IGZvcmdlQ29uZmlnID0gYXdhaXQgZ2V0Rm9yZ2VDb25maWcoZGlyKTtcbiAgbGV0IHBhY2thZ2VyU3Bpbm5lcjtcblxuICBjb25zdCBwYWNrYWdlT3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIGFzYXI6IGZhbHNlLFxuICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgfSwgZm9yZ2VDb25maWcuZWxlY3Ryb25QYWNrYWdlckNvbmZpZywge1xuICAgIGFmdGVyQ29weTogW2FzeW5jIChidWlsZFBhdGgsIGVsZWN0cm9uVmVyc2lvbiwgcFBsYXRmb3JtLCBwQXJjaCwgZG9uZSkgPT4ge1xuICAgICAgaWYgKHBhY2thZ2VyU3Bpbm5lcikge1xuICAgICAgICBwYWNrYWdlclNwaW5uZXIuc3VjY2VlZCgpO1xuICAgICAgICBwcmVwYXJlQ291bnRlciArPSAxO1xuICAgICAgICBwcmVwYXJlU3Bpbm5lciA9IG9yYShgUHJlcGFyaW5nIHRvIFBhY2thZ2UgQXBwbGljYXRpb24gZm9yIGFyY2g6ICR7KHByZXBhcmVDb3VudGVyID09PSAyID8gJ2FybXY3bCcgOiAneDY0JykuY3lhbn1gKS5zdGFydCgpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZnMucmVtb3ZlKHBhdGgucmVzb2x2ZShidWlsZFBhdGgsICdub2RlX21vZHVsZXMvZWxlY3Ryb24tY29tcGlsZS90ZXN0JykpO1xuICAgICAgY29uc3QgYmlucyA9IGF3YWl0IHBpZnkoZ2xvYikocGF0aC5qb2luKGJ1aWxkUGF0aCwgJyoqLy5iaW4vKiovKicpKTtcbiAgICAgIGZvciAoY29uc3QgYmluIG9mIGJpbnMpIHtcbiAgICAgICAgYXdhaXQgZnMucmVtb3ZlKGJpbik7XG4gICAgICB9XG4gICAgICBkb25lKCk7XG4gICAgfSwgYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgIHByZXBhcmVTcGlubmVyLnN1Y2NlZWQoKTtcbiAgICAgIGF3YWl0IHBhY2thZ2VyQ29tcGlsZUhvb2soZGlyLCAuLi5hcmdzKTtcbiAgICB9LCBhc3luYyAoYnVpbGRQYXRoLCBlbGVjdHJvblZlcnNpb24sIHBQbGF0Zm9ybSwgcEFyY2gsIGRvbmUpID0+IHtcbiAgICAgIGF3YWl0IHJlYnVpbGRIb29rKGJ1aWxkUGF0aCwgZWxlY3Ryb25WZXJzaW9uLCBwUGxhdGZvcm0sIHBBcmNoKTtcbiAgICAgIHBhY2thZ2VyU3Bpbm5lciA9IG9yYSgnUGFja2FnaW5nIEFwcGxpY2F0aW9uJykuc3RhcnQoKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9LCBhc3luYyAoYnVpbGRQYXRoLCBlbGVjdHJvblZlcnNpb24sIHBQbGF0Zm9ybSwgcEFyY2gsIGRvbmUpID0+IHtcbiAgICAgIGNvbnN0IGNvcGllZFBhY2thZ2VKU09OID0gYXdhaXQgcmVhZFBhY2thZ2VKU09OKGJ1aWxkUGF0aCk7XG4gICAgICBpZiAoY29waWVkUGFja2FnZUpTT04uY29uZmlnICYmIGNvcGllZFBhY2thZ2VKU09OLmNvbmZpZy5mb3JnZSkge1xuICAgICAgICBkZWxldGUgY29waWVkUGFja2FnZUpTT04uY29uZmlnLmZvcmdlO1xuICAgICAgfVxuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGgucmVzb2x2ZShidWlsZFBhdGgsICdwYWNrYWdlLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkoY29waWVkUGFja2FnZUpTT04sIG51bGwsIDIpKTtcbiAgICAgIGRvbmUoKTtcbiAgICB9XS5jb25jYXQoZm9yZ2VDb25maWcuZWxlY3Ryb25QYWNrYWdlckNvbmZpZy5hZnRlckNvcHkgPyBmb3JnZUNvbmZpZy5lbGVjdHJvblBhY2thZ2VyQ29uZmlnLmFmdGVyQ29weS5tYXAoaXRlbSA9PlxuICAgICAgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyA/IHJlcXVpcmVTZWFyY2goZGlyLCBbaXRlbV0pIDogaXRlbSlcbiAgICApIDogW10pLFxuICAgIGFmdGVyRXh0cmFjdDogZm9yZ2VDb25maWcuZWxlY3Ryb25QYWNrYWdlckNvbmZpZy5hZnRlckV4dHJhY3QgPyBmb3JnZUNvbmZpZy5lbGVjdHJvblBhY2thZ2VyQ29uZmlnLmFmdGVyRXh0cmFjdC5tYXAoaXRlbSA9PlxuICAgICAgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyA/IHJlcXVpcmVTZWFyY2goZGlyLCBbaXRlbV0pIDogaXRlbSlcbiAgICApIDogW10sXG4gICAgZGlyLFxuICAgIGFyY2gsXG4gICAgcGxhdGZvcm0sXG4gICAgb3V0OiBvdXREaXIsXG4gICAgZWxlY3Ryb25WZXJzaW9uOiBwYWNrYWdlSlNPTi5kZXZEZXBlbmRlbmNpZXNbJ2VsZWN0cm9uLXByZWJ1aWx0LWNvbXBpbGUnXSxcbiAgfSk7XG4gIHBhY2thZ2VPcHRzLnF1aWV0ID0gdHJ1ZTtcbiAgaWYgKHR5cGVvZiBwYWNrYWdlT3B0cy5hc2FyID09PSAnb2JqZWN0JyAmJiBwYWNrYWdlT3B0cy5hc2FyLnVucGFjaykge1xuICAgIHBhY2thZ2VyU3Bpbm5lci5mYWlsKCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlbGVjdHJvbi1jb21waWxlIGRvZXMgbm90IHN1cHBvcnQgYXNhci51bnBhY2sgeWV0LiAgUGxlYXNlIHVzZSBhc2FyLnVucGFja0RpcicpO1xuICB9XG5cbiAgYXdhaXQgcnVuSG9vayhmb3JnZUNvbmZpZywgJ2dlbmVyYXRlQXNzZXRzJyk7XG4gIGF3YWl0IHJ1bkhvb2soZm9yZ2VDb25maWcsICdwcmVQYWNrYWdlJyk7XG5cbiAgZCgncGFja2FnaW5nIHdpdGggb3B0aW9ucycsIHBhY2thZ2VPcHRzKTtcblxuICBhd2FpdCBwaWZ5KHBhY2thZ2VyKShwYWNrYWdlT3B0cyk7XG5cbiAgYXdhaXQgcnVuSG9vayhmb3JnZUNvbmZpZywgJ3Bvc3RQYWNrYWdlJyk7XG5cbiAgcGFja2FnZXJTcGlubmVyLnN1Y2NlZWQoKTtcbn07XG4iXX0=