UNPKG

electron-forge

Version:

A complete tool for building modern Electron applications

400 lines (299 loc) 14.8 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, 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; outDir = providedOptions.outDir || _path2.default.resolve(dir, 'out'); prepareSpinner = (0, _ora2.default)('Preparing to Package Application for arch: ' + (arch === 'all' ? 'ia32' : arch).cyan).start(); prepareCounter = 0; _context5.next = 6; return (0, _resolveDir2.default)(dir); case 6: dir = _context5.sent; if (dir) { _context5.next = 9; break; } throw 'Failed to locate compilable Electron application'; case 9: _context5.next = 11; return (0, _readPackageJson2.default)(dir); case 11: packageJSON = _context5.sent; if (!(_path2.default.dirname(require.resolve(_path2.default.resolve(dir, packageJSON.main))) === dir)) { _context5.next = 15; 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 15: _context5.next = 17; return (0, _forgeConfig2.default)(dir); case 17: 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 = (0, _ora2.default)('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 = (0, _ora2.default)('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 = 24; break; } packagerSpinner.fail(); throw new Error('electron-compile does not support asar.unpack yet. Please use asar.unpackDir'); case 24: _context5.next = 26; return (0, _hook2.default)(forgeConfig, 'generateAssets'); case 26: _context5.next = 28; return (0, _hook2.default)(forgeConfig, 'prePackage'); case 28: d('packaging with options', packageOpts); _context5.next = 31; return (0, _pify2.default)(_electronPackager2.default)(packageOpts); case 31: _context5.next = 33; return (0, _hook2.default)(forgeConfig, 'postPackage'); case 33: packagerSpinner.succeed(); case 34: case 'end': return _context5.stop(); } } }, _callee5, undefined); })); return function () { return _ref.apply(this, arguments); }; }();