UNPKG

@mjcctech/meteor-desktop

Version:

Build a Meteor's desktop client with hot code push.

142 lines (111 loc) 16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _runtime = _interopRequireDefault(require("regenerator-runtime/runtime")); var _assignIn = _interopRequireDefault(require("lodash/assignIn")); var _path = _interopRequireDefault(require("path")); var _fs = _interopRequireDefault(require("fs")); var _shelljs = _interopRequireDefault(require("shelljs")); var _log = _interopRequireDefault(require("./log")); var _defaultDependencies = _interopRequireDefault(require("./defaultDependencies")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // eslint-disable-next-line no-unused-vars const { join } = _path.default; /** * Wrapper around electron-packager. * @class */ class ElectronPackager { constructor($) { this.log = new _log.default('electron-packager'); this.$ = $; } async init() { this.packager = (await this.$.getDependency('electron-packager', _defaultDependencies.default['electron-packager'])).dependency; } /** * Runs the packager with provided arguments. * * @param {Object} args * @returns {Promise} */ runPackager(args) { return new Promise((resolve, reject) => { this.packager(args, err => { if (err) { reject(err); } else { this.log.info(`wrote packaged app to ${this.$.env.paths.packageDir}`); resolve(); } }); }); } async packageApp() { const { version } = JSON.parse(_fs.default.readFileSync(join(this.$.env.paths.meteorApp.root, 'node_modules', 'electron', 'package.json'), 'UTF-8')); const settings = this.$.desktop.getSettings(); const { name } = settings; if (!name) { this.log.error('`name` field in settings.json not set'); process.exit(1); } const arch = this.$.env.options.ia32 ? 'ia32' : 'x64'; this.log.info(`packaging '${name}' for platform '${this.$.env.sys.platform}-${arch}'` + ` using electron v${version}`); try { await this.$.utils.rmWithRetries('-rf', _path.default.join(this.$.env.options.output, this.$.env.paths.packageDir)); } catch (e) { throw new Error(e); } const args = { name, arch, prune: false, electronVersion: version, platform: this.$.env.sys.platform, dir: this.$.env.paths.electronApp.root, out: _path.default.join(this.$.env.options.output, this.$.env.paths.packageDir) }; if ('packagerOptions' in settings) { const { packagerOptions } = settings; ['windows', 'linux', 'osx'].forEach(system => { if (this.$.env.os[`is${system[0].toUpperCase()}${system.substring(1)}`] && `_${system}` in packagerOptions) { (0, _assignIn.default)(packagerOptions, packagerOptions[`_${system}`]); } }); Object.keys(packagerOptions).forEach(field => { if (packagerOptions[field] === '@version') { packagerOptions[field] = settings.version; } }); (0, _assignIn.default)(args, packagerOptions); } // Move node_modules away. We do not want to delete it, just temporarily remove it from // our way. _fs.default.renameSync(this.$.env.paths.electronApp.nodeModules, this.$.env.paths.electronApp.tmpNodeModules); let extracted = false; if (this.$.utils.exists(this.$.env.paths.electronApp.extractedNodeModules)) { _fs.default.renameSync(this.$.env.paths.electronApp.extractedNodeModules, this.$.env.paths.electronApp.nodeModules); extracted = true; } try { await this.runPackager(args); } finally { if (extracted) { _shelljs.default.rm('-rf', this.$.env.paths.electronApp.extractedNodeModules); _shelljs.default.rm('-rf', this.$.env.paths.electronApp.nodeModules); } // Move node_modules back. _fs.default.renameSync(this.$.env.paths.electronApp.tmpNodeModules, this.$.env.paths.electronApp.nodeModules); } } } exports.default = ElectronPackager; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9wYWNrYWdlci5qcyJdLCJuYW1lcyI6WyJqb2luIiwicGF0aCIsIkVsZWN0cm9uUGFja2FnZXIiLCJjb25zdHJ1Y3RvciIsIiQiLCJsb2ciLCJMb2ciLCJpbml0IiwicGFja2FnZXIiLCJnZXREZXBlbmRlbmN5IiwiZGVmYXVsdERlcGVuZGVuY2llcyIsImRlcGVuZGVuY3kiLCJydW5QYWNrYWdlciIsImFyZ3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImVyciIsImluZm8iLCJlbnYiLCJwYXRocyIsInBhY2thZ2VEaXIiLCJwYWNrYWdlQXBwIiwidmVyc2lvbiIsIkpTT04iLCJwYXJzZSIsImZzIiwicmVhZEZpbGVTeW5jIiwibWV0ZW9yQXBwIiwicm9vdCIsInNldHRpbmdzIiwiZGVza3RvcCIsImdldFNldHRpbmdzIiwibmFtZSIsImVycm9yIiwicHJvY2VzcyIsImV4aXQiLCJhcmNoIiwib3B0aW9ucyIsImlhMzIiLCJzeXMiLCJwbGF0Zm9ybSIsInV0aWxzIiwicm1XaXRoUmV0cmllcyIsIm91dHB1dCIsImUiLCJFcnJvciIsInBydW5lIiwiZWxlY3Ryb25WZXJzaW9uIiwiZGlyIiwiZWxlY3Ryb25BcHAiLCJvdXQiLCJwYWNrYWdlck9wdGlvbnMiLCJmb3JFYWNoIiwic3lzdGVtIiwib3MiLCJ0b1VwcGVyQ2FzZSIsInN1YnN0cmluZyIsIk9iamVjdCIsImtleXMiLCJmaWVsZCIsInJlbmFtZVN5bmMiLCJub2RlTW9kdWxlcyIsInRtcE5vZGVNb2R1bGVzIiwiZXh0cmFjdGVkIiwiZXhpc3RzIiwiZXh0cmFjdGVkTm9kZU1vZHVsZXMiLCJzaGVsbCIsInJtIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7QUFSQTtBQVVBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFXQyxhQUFqQjtBQUVBOzs7OztBQUllLE1BQU1DLGdCQUFOLENBQXVCO0FBQ2xDQyxF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LW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuaW1wb3J0IHJlZ2VuZXJhdG9yUnVudGltZSBmcm9tICdyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUnO1xuaW1wb3J0IGFzc2lnbkluIGZyb20gJ2xvZGFzaC9hc3NpZ25Jbic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgc2hlbGwgZnJvbSAnc2hlbGxqcyc7XG5cbmltcG9ydCBMb2cgZnJvbSAnLi9sb2cnO1xuaW1wb3J0IGRlZmF1bHREZXBlbmRlbmNpZXMgZnJvbSAnLi9kZWZhdWx0RGVwZW5kZW5jaWVzJztcblxuY29uc3QgeyBqb2luIH0gPSBwYXRoO1xuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIGVsZWN0cm9uLXBhY2thZ2VyLlxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVsZWN0cm9uUGFja2FnZXIge1xuICAgIGNvbnN0cnVjdG9yKCQpIHtcbiAgICAgICAgdGhpcy5sb2cgPSBuZXcgTG9nKCdlbGVjdHJvbi1wYWNrYWdlcicpO1xuICAgICAgICB0aGlzLiQgPSAkO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIHRoaXMucGFja2FnZXIgPSAoYXdhaXQgdGhpcy4kLmdldERlcGVuZGVuY3koJ2VsZWN0cm9uLXBhY2thZ2VyJywgZGVmYXVsdERlcGVuZGVuY2llc1snZWxlY3Ryb24tcGFja2FnZXInXSkpLmRlcGVuZGVuY3k7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyB0aGUgcGFja2FnZXIgd2l0aCBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgICAqL1xuICAgIHJ1blBhY2thZ2VyKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFja2FnZXIoYXJncywgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2cuaW5mbyhgd3JvdGUgcGFja2FnZWQgYXBwIHRvICR7dGhpcy4kLmVudi5wYXRocy5wYWNrYWdlRGlyfWApO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHBhY2thZ2VBcHAoKSB7XG4gICAgICAgIGNvbnN0IHsgdmVyc2lvbiB9ID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICBqb2luKFxuICAgICAgICAgICAgICAgIHRoaXMuJC5lbnYucGF0aHMubWV0ZW9yQXBwLnJvb3QsXG4gICAgICAgICAgICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAgICAgICAgICAgJ2VsZWN0cm9uJyxcbiAgICAgICAgICAgICAgICAncGFja2FnZS5qc29uJ1xuICAgICAgICAgICAgKSwgJ1VURi04J1xuICAgICAgICApKTtcblxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuJC5kZXNrdG9wLmdldFNldHRpbmdzKCk7XG4gICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gc2V0dGluZ3M7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoJ2BuYW1lYCBmaWVsZCBpbiBzZXR0aW5ncy5qc29uIG5vdCBzZXQnKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyY2ggPSB0aGlzLiQuZW52Lm9wdGlvbnMuaWEzMiA/ICdpYTMyJyA6ICd4NjQnO1xuXG4gICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgICBgcGFja2FnaW5nICcke25hbWV9JyBmb3IgcGxhdGZvcm0gJyR7dGhpcy4kLmVudi5zeXMucGxhdGZvcm19LSR7YXJjaH0nYCArXG4gICAgICAgICAgICBgIHVzaW5nIGVsZWN0cm9uIHYke3ZlcnNpb259YFxuICAgICAgICApO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiQudXRpbHMucm1XaXRoUmV0cmllcyhcbiAgICAgICAgICAgICAgICAnLXJmJywgcGF0aC5qb2luKHRoaXMuJC5lbnYub3B0aW9ucy5vdXRwdXQsIHRoaXMuJC5lbnYucGF0aHMucGFja2FnZURpcilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYXJjaCxcbiAgICAgICAgICAgIHBydW5lOiBmYWxzZSxcbiAgICAgICAgICAgIGVsZWN0cm9uVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLiQuZW52LnN5cy5wbGF0Zm9ybSxcbiAgICAgICAgICAgIGRpcjogdGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5yb290LFxuICAgICAgICAgICAgb3V0OiBwYXRoLmpvaW4odGhpcy4kLmVudi5vcHRpb25zLm91dHB1dCwgdGhpcy4kLmVudi5wYXRocy5wYWNrYWdlRGlyKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICgncGFja2FnZXJPcHRpb25zJyBpbiBzZXR0aW5ncykge1xuICAgICAgICAgICAgY29uc3QgeyBwYWNrYWdlck9wdGlvbnMgfSA9IHNldHRpbmdzO1xuXG4gICAgICAgICAgICBbJ3dpbmRvd3MnLCAnbGludXgnLCAnb3N4J10uZm9yRWFjaCgoc3lzdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQuZW52Lm9zW2BpcyR7c3lzdGVtWzBdLnRvVXBwZXJDYXNlKCl9JHtzeXN0ZW0uc3Vic3RyaW5nKDEpfWBdICYmXG4gICAgICAgICAgICAgICAgICAgIChgXyR7c3lzdGVtfWApIGluIHBhY2thZ2VyT3B0aW9uc1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ25JbihwYWNrYWdlck9wdGlvbnMsIHBhY2thZ2VyT3B0aW9uc1tgXyR7c3lzdGVtfWBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFja2FnZXJPcHRpb25zKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwYWNrYWdlck9wdGlvbnNbZmllbGRdID09PSAnQHZlcnNpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VyT3B0aW9uc1tmaWVsZF0gPSBzZXR0aW5ncy52ZXJzaW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhc3NpZ25JbihhcmdzLCBwYWNrYWdlck9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW92ZSBub2RlX21vZHVsZXMgYXdheS4gV2UgZG8gbm90IHdhbnQgdG8gZGVsZXRlIGl0LCBqdXN0IHRlbXBvcmFyaWx5IHJlbW92ZSBpdCBmcm9tXG4gICAgICAgIC8vIG91ciB3YXkuXG4gICAgICAgIGZzLnJlbmFtZVN5bmMoXG4gICAgICAgICAgICB0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLm5vZGVNb2R1bGVzLFxuICAgICAgICAgICAgdGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC50bXBOb2RlTW9kdWxlc1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBleHRyYWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy4kLnV0aWxzLmV4aXN0cyh0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLmV4dHJhY3RlZE5vZGVNb2R1bGVzKSkge1xuICAgICAgICAgICAgZnMucmVuYW1lU3luYyhcbiAgICAgICAgICAgICAgICB0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLmV4dHJhY3RlZE5vZGVNb2R1bGVzLFxuICAgICAgICAgICAgICAgIHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAubm9kZU1vZHVsZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuUGFja2FnZXIoYXJncyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoZXh0cmFjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2hlbGwucm0oJy1yZicsIHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAuZXh0cmFjdGVkTm9kZU1vZHVsZXMpO1xuICAgICAgICAgICAgICAgIHNoZWxsLnJtKCctcmYnLCB0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLm5vZGVNb2R1bGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE1vdmUgbm9kZV9tb2R1bGVzIGJhY2suXG4gICAgICAgICAgICBmcy5yZW5hbWVTeW5jKFxuICAgICAgICAgICAgICAgIHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAudG1wTm9kZU1vZHVsZXMsXG4gICAgICAgICAgICAgICAgdGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5ub2RlTW9kdWxlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==