@meteor-community/meteor-desktop
Version:
Build a Meteor's desktop client with hot code push.
118 lines (113 loc) • 16.9 kB
JavaScript
;
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(e) { return e && e.__esModule ? e : { default: e }; }
// 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcnVudGltZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Fzc2lnbkluIiwiX3BhdGgiLCJfZnMiLCJfc2hlbGxqcyIsIl9sb2ciLCJfZGVmYXVsdERlcGVuZGVuY2llcyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImpvaW4iLCJwYXRoIiwiRWxlY3Ryb25QYWNrYWdlciIsImNvbnN0cnVjdG9yIiwiJCIsImxvZyIsIkxvZyIsImluaXQiLCJwYWNrYWdlciIsImdldERlcGVuZGVuY3kiLCJkZWZhdWx0RGVwZW5kZW5jaWVzIiwiZGVwZW5kZW5jeSIsInJ1blBhY2thZ2VyIiwiYXJncyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXJyIiwiaW5mbyIsImVudiIsInBhdGhzIiwicGFja2FnZURpciIsInBhY2thZ2VBcHAiLCJ2ZXJzaW9uIiwiSlNPTiIsInBhcnNlIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJtZXRlb3JBcHAiLCJyb290Iiwic2V0dGluZ3MiLCJkZXNrdG9wIiwiZ2V0U2V0dGluZ3MiLCJuYW1lIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsImFyY2giLCJvcHRpb25zIiwiaWEzMiIsInN5cyIsInBsYXRmb3JtIiwidXRpbHMiLCJybVdpdGhSZXRyaWVzIiwib3V0cHV0IiwiRXJyb3IiLCJwcnVuZSIsImVsZWN0cm9uVmVyc2lvbiIsImRpciIsImVsZWN0cm9uQXBwIiwib3V0IiwicGFja2FnZXJPcHRpb25zIiwiZm9yRWFjaCIsInN5c3RlbSIsIm9zIiwidG9VcHBlckNhc2UiLCJzdWJzdHJpbmciLCJhc3NpZ25JbiIsIk9iamVjdCIsImtleXMiLCJmaWVsZCIsInJlbmFtZVN5bmMiLCJub2RlTW9kdWxlcyIsInRtcE5vZGVNb2R1bGVzIiwiZXh0cmFjdGVkIiwiZXhpc3RzIiwiZXh0cmFjdGVkTm9kZU1vZHVsZXMiLCJzaGVsbCIsInJtIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL2xpYi9wYWNrYWdlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmltcG9ydCByZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAncmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lJztcbmltcG9ydCBhc3NpZ25JbiBmcm9tICdsb2Rhc2gvYXNzaWduSW4nO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHNoZWxsIGZyb20gJ3NoZWxsanMnO1xuXG5pbXBvcnQgTG9nIGZyb20gJy4vbG9nJztcbmltcG9ydCBkZWZhdWx0RGVwZW5kZW5jaWVzIGZyb20gJy4vZGVmYXVsdERlcGVuZGVuY2llcyc7XG5cbmNvbnN0IHsgam9pbiB9ID0gcGF0aDtcblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBlbGVjdHJvbi1wYWNrYWdlci5cbiAqIEBjbGFzc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbGVjdHJvblBhY2thZ2VyIHtcbiAgICBjb25zdHJ1Y3RvcigkKSB7XG4gICAgICAgIHRoaXMubG9nID0gbmV3IExvZygnZWxlY3Ryb24tcGFja2FnZXInKTtcbiAgICAgICAgdGhpcy4kID0gJDtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICB0aGlzLnBhY2thZ2VyID0gKGF3YWl0IHRoaXMuJC5nZXREZXBlbmRlbmN5KCdlbGVjdHJvbi1wYWNrYWdlcicsIGRlZmF1bHREZXBlbmRlbmNpZXNbJ2VsZWN0cm9uLXBhY2thZ2VyJ10pKS5kZXBlbmRlbmN5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIHBhY2thZ2VyIHdpdGggcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGFyZ3NcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICAgKi9cbiAgICBydW5QYWNrYWdlcihhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhY2thZ2VyKGFyZ3MsIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nLmluZm8oYHdyb3RlIHBhY2thZ2VkIGFwcCB0byAke3RoaXMuJC5lbnYucGF0aHMucGFja2FnZURpcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBwYWNrYWdlQXBwKCkge1xuICAgICAgICBjb25zdCB7IHZlcnNpb24gfSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgam9pbihcbiAgICAgICAgICAgICAgICB0aGlzLiQuZW52LnBhdGhzLm1ldGVvckFwcC5yb290LFxuICAgICAgICAgICAgICAgICdub2RlX21vZHVsZXMnLFxuICAgICAgICAgICAgICAgICdlbGVjdHJvbicsXG4gICAgICAgICAgICAgICAgJ3BhY2thZ2UuanNvbidcbiAgICAgICAgICAgICksICdVVEYtOCdcbiAgICAgICAgKSk7XG5cbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLiQuZGVza3RvcC5nZXRTZXR0aW5ncygpO1xuICAgICAgICBjb25zdCB7IG5hbWUgfSA9IHNldHRpbmdzO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKCdgbmFtZWAgZmllbGQgaW4gc2V0dGluZ3MuanNvbiBub3Qgc2V0Jyk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmNoID0gdGhpcy4kLmVudi5vcHRpb25zLmlhMzIgPyAnaWEzMicgOiAneDY0JztcblxuICAgICAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgICAgICAgYHBhY2thZ2luZyAnJHtuYW1lfScgZm9yIHBsYXRmb3JtICcke3RoaXMuJC5lbnYuc3lzLnBsYXRmb3JtfS0ke2FyY2h9J2AgK1xuICAgICAgICAgICAgYCB1c2luZyBlbGVjdHJvbiB2JHt2ZXJzaW9ufWBcbiAgICAgICAgKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4kLnV0aWxzLnJtV2l0aFJldHJpZXMoXG4gICAgICAgICAgICAgICAgJy1yZicsIHBhdGguam9pbih0aGlzLiQuZW52Lm9wdGlvbnMub3V0cHV0LCB0aGlzLiQuZW52LnBhdGhzLnBhY2thZ2VEaXIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFyY2gsXG4gICAgICAgICAgICBwcnVuZTogZmFsc2UsXG4gICAgICAgICAgICBlbGVjdHJvblZlcnNpb246IHZlcnNpb24sXG4gICAgICAgICAgICBwbGF0Zm9ybTogdGhpcy4kLmVudi5zeXMucGxhdGZvcm0sXG4gICAgICAgICAgICBkaXI6IHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAucm9vdCxcbiAgICAgICAgICAgIG91dDogcGF0aC5qb2luKHRoaXMuJC5lbnYub3B0aW9ucy5vdXRwdXQsIHRoaXMuJC5lbnYucGF0aHMucGFja2FnZURpcilcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoJ3BhY2thZ2VyT3B0aW9ucycgaW4gc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcGFja2FnZXJPcHRpb25zIH0gPSBzZXR0aW5ncztcblxuICAgICAgICAgICAgWyd3aW5kb3dzJywgJ2xpbnV4JywgJ29zeCddLmZvckVhY2goKHN5c3RlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kLmVudi5vc1tgaXMke3N5c3RlbVswXS50b1VwcGVyQ2FzZSgpfSR7c3lzdGVtLnN1YnN0cmluZygxKX1gXSAmJlxuICAgICAgICAgICAgICAgICAgICAoYF8ke3N5c3RlbX1gKSBpbiBwYWNrYWdlck9wdGlvbnNcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduSW4ocGFja2FnZXJPcHRpb25zLCBwYWNrYWdlck9wdGlvbnNbYF8ke3N5c3RlbX1gXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhY2thZ2VyT3B0aW9ucykuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGFja2FnZXJPcHRpb25zW2ZpZWxkXSA9PT0gJ0B2ZXJzaW9uJykge1xuICAgICAgICAgICAgICAgICAgICBwYWNrYWdlck9wdGlvbnNbZmllbGRdID0gc2V0dGluZ3MudmVyc2lvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXNzaWduSW4oYXJncywgcGFja2FnZXJPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmUgbm9kZV9tb2R1bGVzIGF3YXkuIFdlIGRvIG5vdCB3YW50IHRvIGRlbGV0ZSBpdCwganVzdCB0ZW1wb3JhcmlseSByZW1vdmUgaXQgZnJvbVxuICAgICAgICAvLyBvdXIgd2F5LlxuICAgICAgICBmcy5yZW5hbWVTeW5jKFxuICAgICAgICAgICAgdGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5ub2RlTW9kdWxlcyxcbiAgICAgICAgICAgIHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAudG1wTm9kZU1vZHVsZXNcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgZXh0cmFjdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuJC51dGlscy5leGlzdHModGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5leHRyYWN0ZWROb2RlTW9kdWxlcykpIHtcbiAgICAgICAgICAgIGZzLnJlbmFtZVN5bmMoXG4gICAgICAgICAgICAgICAgdGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5leHRyYWN0ZWROb2RlTW9kdWxlcyxcbiAgICAgICAgICAgICAgICB0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLm5vZGVNb2R1bGVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXh0cmFjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJ1blBhY2thZ2VyKGFyZ3MpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZCkge1xuICAgICAgICAgICAgICAgIHNoZWxsLnJtKCctcmYnLCB0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLmV4dHJhY3RlZE5vZGVNb2R1bGVzKTtcbiAgICAgICAgICAgICAgICBzaGVsbC5ybSgnLXJmJywgdGhpcy4kLmVudi5wYXRocy5lbGVjdHJvbkFwcC5ub2RlTW9kdWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNb3ZlIG5vZGVfbW9kdWxlcyBiYWNrLlxuICAgICAgICAgICAgZnMucmVuYW1lU3luYyhcbiAgICAgICAgICAgICAgICB0aGlzLiQuZW52LnBhdGhzLmVsZWN0cm9uQXBwLnRtcE5vZGVNb2R1bGVzLFxuICAgICAgICAgICAgICAgIHRoaXMuJC5lbnYucGF0aHMuZWxlY3Ryb25BcHAubm9kZU1vZHVsZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFD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