electron-forge
Version:
A complete tool for building modern Electron applications
187 lines (141 loc) • 13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _bluebird = require('bluebird');
require('colors');
var _child_process = require('child_process');
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _oraHandler = require('../util/ora-handler');
var _oraHandler2 = _interopRequireDefault(_oraHandler);
var _readPackageJson = require('../util/read-package-json');
var _readPackageJson2 = _interopRequireDefault(_readPackageJson);
var _rebuild = require('../util/rebuild');
var _rebuild2 = _interopRequireDefault(_rebuild);
var _resolveDir = require('../util/resolve-dir');
var _resolveDir2 = _interopRequireDefault(_resolveDir);
var _forgeConfig = require('../util/forge-config');
var _forgeConfig2 = _interopRequireDefault(_forgeConfig);
var _hook = require('../util/hook');
var _hook2 = _interopRequireDefault(_hook);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @typedef {Object} StartOptions
* @property {string} [dir=process.cwd()] The path to the electron forge project to run
* @property {string} [appPath='.'] The path (relative to dir) to the electron app to run relative to the project directory
* @property {boolean} [interactive=false] Whether to use sensible defaults or prompt the user visually
* @property {boolean} [enableLogging=false] Enables advanced internal Electron debug calls
* @property {Array<string>} [args] Arguments to pass through to the launched Electron application
*/
/**
* Start an Electron application.
*
* @param {StartOptions} providedOptions - Options for the Publish method
* @return {Promise} Will resolve when the application is launched
*/
exports.default = function () {
var _ref = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee3() {
var providedOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _Object$assign, dir, interactive, enableLogging, appPath, args, runAsNode, inspect, packageJSON, spawnOpts, spawned, forgeConfig;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
// eslint-disable-next-line prefer-const, no-unused-vars
_Object$assign = (0, _assign2.default)({
dir: process.cwd(),
appPath: '.',
interactive: false,
enableLogging: false,
args: [],
runAsNode: false,
inspect: false
}, providedOptions), dir = _Object$assign.dir, interactive = _Object$assign.interactive, enableLogging = _Object$assign.enableLogging, appPath = _Object$assign.appPath, args = _Object$assign.args, runAsNode = _Object$assign.runAsNode, inspect = _Object$assign.inspect;
_oraHandler2.default.interactive = interactive;
_context3.next = 4;
return (0, _oraHandler2.default)('Locating Application', (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee() {
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _resolveDir2.default)(dir);
case 2:
dir = _context.sent;
if (dir) {
_context.next = 5;
break;
}
throw 'Failed to locate startable Electron application';
case 5:
case 'end':
return _context.stop();
}
}
}, _callee, undefined);
})));
case 4:
_context3.next = 6;
return (0, _readPackageJson2.default)(dir);
case 6:
packageJSON = _context3.sent;
_context3.next = 9;
return (0, _rebuild2.default)(dir, packageJSON.devDependencies['electron-prebuilt-compile'], process.platform, process.arch);
case 9:
spawnOpts = {
cwd: dir,
stdio: 'inherit',
env: (0, _assign2.default)({}, process.env, enableLogging ? {
ELECTRON_ENABLE_LOGGING: true,
ELECTRON_ENABLE_STACK_DUMPING: true
} : {})
};
if (runAsNode) {
spawnOpts.env.ELECTRON_RUN_AS_NODE = true;
} else {
delete spawnOpts.env.ELECTRON_RUN_AS_NODE;
}
if (inspect) {
args = ['--inspect'].concat(args);
}
spawned = void 0;
_context3.next = 15;
return (0, _forgeConfig2.default)(dir);
case 15:
forgeConfig = _context3.sent;
_context3.next = 18;
return (0, _hook2.default)(forgeConfig, 'generateAssets');
case 18:
_context3.next = 20;
return (0, _oraHandler2.default)('Launching Application', (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee2() {
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
spawned = (0, _child_process.spawn)(process.execPath, [_path2.default.resolve(dir, 'node_modules/electron-prebuilt-compile/lib/cli'), appPath].concat(args), spawnOpts);
case 1:
case 'end':
return _context2.stop();
}
}
}, _callee2, undefined);
})));
case 20:
return _context3.abrupt('return', spawned);
case 21:
case 'end':
return _context3.stop();
}
}
}, _callee3, undefined);
}));
return function () {
return _ref.apply(this, arguments);
};
}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwaS9zdGFydC5qcyJdLCJuYW1lcyI6WyJwcm92aWRlZE9wdGlvbnMiLCJkaXIiLCJwcm9jZXNzIiwiY3dkIiwiYXBwUGF0aCIsImludGVyYWN0aXZlIiwiZW5hYmxlTG9nZ2luZyIsImFyZ3MiLCJydW5Bc05vZGUiLCJpbnNwZWN0IiwicGFja2FnZUpTT04iLCJkZXZEZXBlbmRlbmNpZXMiLCJwbGF0Zm9ybSIsImFyY2giLCJzcGF3bk9wdHMiLCJzdGRpbyIsImVudiIsIkVMRUNUUk9OX0VOQUJMRV9MT0dHSU5HIiwiRUxFQ1RST05fRU5BQkxFX1NUQUNLX0RVTVBJTkciLCJFTEVDVFJPTl9SVU5fQVNfTk9ERSIsImNvbmNhdCIsInNwYXduZWQiLCJmb3JnZUNvbmZpZyIsImV4ZWNQYXRoIiwicmVzb2x2ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOzs7O0FBRUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQTs7Ozs7Ozs7O0FBU0E7Ozs7Ozs7aUVBTWU7QUFBQSxRQUFPQSxlQUFQLHVFQUF5QixFQUF6Qjs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNiO0FBRGEsNkJBRWdFLHNCQUFjO0FBQ3pGQyxtQkFBS0MsUUFBUUMsR0FBUixFQURvRjtBQUV6RkMsdUJBQVMsR0FGZ0Y7QUFHekZDLDJCQUFhLEtBSDRFO0FBSXpGQyw2QkFBZSxLQUowRTtBQUt6RkMsb0JBQU0sRUFMbUY7QUFNekZDLHlCQUFXLEtBTjhFO0FBT3pGQyx1QkFBUztBQVBnRixhQUFkLEVBUTFFVCxlQVIwRSxDQUZoRSxFQUVQQyxHQUZPLGtCQUVQQSxHQUZPLEVBRUZJLFdBRkUsa0JBRUZBLFdBRkUsRUFFV0MsYUFGWCxrQkFFV0EsYUFGWCxFQUUwQkYsT0FGMUIsa0JBRTBCQSxPQUYxQixFQUVtQ0csSUFGbkMsa0JBRW1DQSxJQUZuQyxFQUV5Q0MsU0FGekMsa0JBRXlDQSxTQUZ6QyxFQUVvREMsT0FGcEQsa0JBRW9EQSxPQUZwRDs7QUFXYixpQ0FBU0osV0FBVCxHQUF1QkEsV0FBdkI7O0FBWGE7QUFBQSxtQkFhUCwwQkFBUyxzQkFBVCxzREFBaUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkJBQ3pCLDBCQUFXSixHQUFYLENBRHlCOztBQUFBO0FBQ3JDQSx5QkFEcUM7O0FBQUEsMEJBRWhDQSxHQUZnQztBQUFBO0FBQUE7QUFBQTs7QUFBQSw0QkFHN0IsaURBSDZCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQWpDLEdBYk87O0FBQUE7QUFBQTtBQUFBLG1CQW9CYSwrQkFBZ0JBLEdBQWhCLENBcEJiOztBQUFBO0FBb0JQUyx1QkFwQk87QUFBQTtBQUFBLG1CQXNCUCx1QkFBUVQsR0FBUixFQUFhUyxZQUFZQyxlQUFaLENBQTRCLDJCQUE1QixDQUFiLEVBQXVFVCxRQUFRVSxRQUEvRSxFQUF5RlYsUUFBUVcsSUFBakcsQ0F0Qk87O0FBQUE7QUF3QlBDLHFCQXhCTyxHQXdCSztBQUNoQlgsbUJBQUtGLEdBRFc7QUFFaEJjLHFCQUFPLFNBRlM7QUFHaEJDLG1CQUFLLHNCQUFjLEVBQWQsRUFBa0JkLFFBQVFjLEdBQTFCLEVBQStCVixnQkFBZ0I7QUFDbERXLHlDQUF5QixJQUR5QjtBQUVsREMsK0NBQStCO0FBRm1CLGVBQWhCLEdBR2hDLEVBSEM7QUFIVyxhQXhCTDs7O0FBaUNiLGdCQUFJVixTQUFKLEVBQWU7QUFDYk0sd0JBQVVFLEdBQVYsQ0FBY0csb0JBQWQsR0FBcUMsSUFBckM7QUFDRCxhQUZELE1BRU87QUFDTCxxQkFBT0wsVUFBVUUsR0FBVixDQUFjRyxvQkFBckI7QUFDRDs7QUFFRCxnQkFBSVYsT0FBSixFQUFhO0FBQ1hGLHFCQUFPLENBQUMsV0FBRCxFQUFjYSxNQUFkLENBQXFCYixJQUFyQixDQUFQO0FBQ0Q7O0FBRUdjLG1CQTNDUztBQUFBO0FBQUEsbUJBNkNhLDJCQUFlcEIsR0FBZixDQTdDYjs7QUFBQTtBQTZDUHFCLHVCQTdDTztBQUFBO0FBQUEsbUJBOENQLG9CQUFRQSxXQUFSLEVBQXFCLGdCQUFyQixDQTlDTzs7QUFBQTtBQUFBO0FBQUEsbUJBZ0RQLDBCQUFTLHVCQUFULHNEQUFrQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ3RDRCxnQ0FBVSwwQkFBTW5CLFFBQVFxQixRQUFkLEVBQXdCLENBQUMsZUFBS0MsT0FBTCxDQUFhdkIsR0FBYixFQUFrQixnREFBbEIsQ0FBRCxFQUFzRUcsT0FBdEUsRUFBK0VnQixNQUEvRSxDQUFzRmIsSUFBdEYsQ0FBeEIsRUFBcUhPLFNBQXJILENBQVY7O0FBRHNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQWxDLEdBaERPOztBQUFBO0FBQUEsOENBb0ROTyxPQXBETTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHIiwiZmlsZSI6ImFwaS9zdGFydC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnY29sb3JzJztcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IGFzeW5jT3JhIGZyb20gJy4uL3V0aWwvb3JhLWhhbmRsZXInO1xuaW1wb3J0IHJlYWRQYWNrYWdlSlNPTiBmcm9tICcuLi91dGlsL3JlYWQtcGFja2FnZS1qc29uJztcbmltcG9ydCByZWJ1aWxkIGZyb20gJy4uL3V0aWwvcmVidWlsZCc7XG5pbXBvcnQgcmVzb2x2ZURpciBmcm9tICcuLi91dGlsL3Jlc29sdmUtZGlyJztcbmltcG9ydCBnZXRGb3JnZUNvbmZpZyBmcm9tICcuLi91dGlsL2ZvcmdlLWNvbmZpZyc7XG5pbXBvcnQgcnVuSG9vayBmcm9tICcuLi91dGlsL2hvb2snO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YXJ0T3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXI9cHJvY2Vzcy5jd2QoKV0gVGhlIHBhdGggdG8gdGhlIGVsZWN0cm9uIGZvcmdlIHByb2plY3QgdG8gcnVuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2FwcFBhdGg9Jy4nXSBUaGUgcGF0aCAocmVsYXRpdmUgdG8gZGlyKSB0byB0aGUgZWxlY3Ryb24gYXBwIHRvIHJ1biByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCBkaXJlY3RvcnlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2ludGVyYWN0aXZlPWZhbHNlXSBXaGV0aGVyIHRvIHVzZSBzZW5zaWJsZSBkZWZhdWx0cyBvciBwcm9tcHQgdGhlIHVzZXIgdmlzdWFsbHlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZUxvZ2dpbmc9ZmFsc2VdIEVuYWJsZXMgYWR2YW5jZWQgaW50ZXJuYWwgRWxlY3Ryb24gZGVidWcgY2FsbHNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gW2FyZ3NdIEFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGxhdW5jaGVkIEVsZWN0cm9uIGFwcGxpY2F0aW9uXG4gKi9cblxuLyoqXG4gKiBTdGFydCBhbiBFbGVjdHJvbiBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0YXJ0T3B0aW9uc30gcHJvdmlkZWRPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIFB1Ymxpc2ggbWV0aG9kXG4gKiBAcmV0dXJuIHtQcm9taXNlfSBXaWxsIHJlc29sdmUgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgbGF1bmNoZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHByb3ZpZGVkT3B0aW9ucyA9IHt9KSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QsIG5vLXVudXNlZC12YXJzXG4gIGxldCB7IGRpciwgaW50ZXJhY3RpdmUsIGVuYWJsZUxvZ2dpbmcsIGFwcFBhdGgsIGFyZ3MsIHJ1bkFzTm9kZSwgaW5zcGVjdCB9ID0gT2JqZWN0LmFzc2lnbih7XG4gICAgZGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGFwcFBhdGg6ICcuJyxcbiAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgZW5hYmxlTG9nZ2luZzogZmFsc2UsXG4gICAgYXJnczogW10sXG4gICAgcnVuQXNOb2RlOiBmYWxzZSxcbiAgICBpbnNwZWN0OiBmYWxzZSxcbiAgfSwgcHJvdmlkZWRPcHRpb25zKTtcbiAgYXN5bmNPcmEuaW50ZXJhY3RpdmUgPSBpbnRlcmFjdGl2ZTtcblxuICBhd2FpdCBhc3luY09yYSgnTG9jYXRpbmcgQXBwbGljYXRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgZGlyID0gYXdhaXQgcmVzb2x2ZURpcihkaXIpO1xuICAgIGlmICghZGlyKSB7XG4gICAgICB0aHJvdyAnRmFpbGVkIHRvIGxvY2F0ZSBzdGFydGFibGUgRWxlY3Ryb24gYXBwbGljYXRpb24nO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcGFja2FnZUpTT04gPSBhd2FpdCByZWFkUGFja2FnZUpTT04oZGlyKTtcblxuICBhd2FpdCByZWJ1aWxkKGRpciwgcGFja2FnZUpTT04uZGV2RGVwZW5kZW5jaWVzWydlbGVjdHJvbi1wcmVidWlsdC1jb21waWxlJ10sIHByb2Nlc3MucGxhdGZvcm0sIHByb2Nlc3MuYXJjaCk7XG5cbiAgY29uc3Qgc3Bhd25PcHRzID0ge1xuICAgIGN3ZDogZGlyLFxuICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgZW52OiBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwgZW5hYmxlTG9nZ2luZyA/IHtcbiAgICAgIEVMRUNUUk9OX0VOQUJMRV9MT0dHSU5HOiB0cnVlLFxuICAgICAgRUxFQ1RST05fRU5BQkxFX1NUQUNLX0RVTVBJTkc6IHRydWUsXG4gICAgfSA6IHt9KSxcbiAgfTtcblxuICBpZiAocnVuQXNOb2RlKSB7XG4gICAgc3Bhd25PcHRzLmVudi5FTEVDVFJPTl9SVU5fQVNfTk9ERSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIHNwYXduT3B0cy5lbnYuRUxFQ1RST05fUlVOX0FTX05PREU7XG4gIH1cblxuICBpZiAoaW5zcGVjdCkge1xuICAgIGFyZ3MgPSBbJy0taW5zcGVjdCddLmNvbmNhdChhcmdzKTtcbiAgfVxuXG4gIGxldCBzcGF3bmVkO1xuXG4gIGNvbnN0IGZvcmdlQ29uZmlnID0gYXdhaXQgZ2V0Rm9yZ2VDb25maWcoZGlyKTtcbiAgYXdhaXQgcnVuSG9vayhmb3JnZUNvbmZpZywgJ2dlbmVyYXRlQXNzZXRzJyk7XG5cbiAgYXdhaXQgYXN5bmNPcmEoJ0xhdW5jaGluZyBBcHBsaWNhdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICBzcGF3bmVkID0gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgW3BhdGgucmVzb2x2ZShkaXIsICdub2RlX21vZHVsZXMvZWxlY3Ryb24tcHJlYnVpbHQtY29tcGlsZS9saWIvY2xpJyksIGFwcFBhdGhdLmNvbmNhdChhcmdzKSwgc3Bhd25PcHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNwYXduZWQ7XG59O1xuIl19