UNPKG

electron-forge

Version:

A complete tool for building modern Electron applications

186 lines (141 loc) 6.5 kB
'use strict'; 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, 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 }, 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; _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; } spawned = void 0; _context3.next = 14; return (0, _forgeConfig2.default)(dir); case 14: forgeConfig = _context3.sent; _context3.next = 17; return (0, _hook2.default)(forgeConfig, 'generateAssets'); case 17: _context3.next = 19; 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: /* istanbul ignore if */ if (process.platform === 'win32') { spawned = (0, _child_process.spawn)(_path2.default.resolve(dir, 'node_modules/.bin/electron.cmd'), [appPath].concat(args), spawnOpts); } else { spawned = (0, _child_process.spawn)(_path2.default.resolve(dir, 'node_modules/.bin/electron'), [appPath].concat(args), spawnOpts); } case 1: case 'end': return _context2.stop(); } } }, _callee2, undefined); }))); case 19: return _context3.abrupt('return', spawned); case 20: case 'end': return _context3.stop(); } } }, _callee3, undefined); })); return function () { return _ref.apply(this, arguments); }; }();