UNPKG

electron-forge

Version:

A complete tool for building modern Electron applications

269 lines (200 loc) 20 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.airbnbDeps = exports.standardDeps = exports.exactDevDeps = exports.devDeps = exports.deps = undefined; var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _bluebird = require('bluebird'); var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug); var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _username = require('username'); var _username2 = _interopRequireDefault(_username); var _installDependencies = require('../util/install-dependencies'); var _installDependencies2 = _interopRequireDefault(_installDependencies); var _readPackageJson = require('../util/read-package-json'); var _readPackageJson2 = _interopRequireDefault(_readPackageJson); var _oraHandler = require('../util/ora-handler'); var _oraHandler2 = _interopRequireDefault(_oraHandler); var _yarnOrNpm = require('../util/yarn-or-npm'); var _yarnOrNpm2 = _interopRequireDefault(_yarnOrNpm); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var d = (0, _debug2.default)('electron-forge:init:npm'); var deps = exports.deps = ['electron-compile']; var devDeps = exports.devDeps = ['babel-preset-env', 'babel-preset-react', 'babel-plugin-transform-async-to-generator']; var exactDevDeps = exports.exactDevDeps = ['electron-prebuilt-compile']; var standardDeps = exports.standardDeps = ['standard']; var airbnbDeps = exports.airbnbDeps = ['eslint@^3', 'eslint-config-airbnb@^15', 'eslint-plugin-import@^2', 'eslint-plugin-jsx-a11y@^5', 'eslint-plugin-react@^7']; exports.default = function () { var _ref = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee3(dir, lintStyle) { return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return (0, _oraHandler2.default)('Initializing NPM Module', (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee() { var packageJSON; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return (0, _readPackageJson2.default)(_path2.default.resolve(__dirname, '../../tmpl')); case 2: packageJSON = _context.sent; packageJSON.productName = packageJSON.name = _path2.default.basename(dir).toLowerCase(); packageJSON.config.forge.electronWinstallerConfig.name = packageJSON.name.replace(/-/g, '_'); packageJSON.config.forge.windowsStoreConfig.name = packageJSON.productName.replace(/-/g, ''); packageJSON.config.forge.electronPackagerConfig.packageManager = (0, _yarnOrNpm2.default)(); _context.next = 9; return (0, _username2.default)(); case 9: packageJSON.author = _context.sent; _context.t0 = lintStyle; _context.next = _context.t0 === 'standard' ? 13 : _context.t0 === 'airbnb' ? 15 : 17; break; case 13: packageJSON.scripts.lint = 'standard'; return _context.abrupt('break', 19); case 15: packageJSON.scripts.lint = 'eslint src'; return _context.abrupt('break', 19); case 17: packageJSON.scripts.lint = 'echo "No linting configured"'; return _context.abrupt('break', 19); case 19: d('writing package.json to:', dir); _context.next = 22; return _fsExtra2.default.writeFile(_path2.default.resolve(dir, 'package.json'), (0, _stringify2.default)(packageJSON, null, 4)); case 22: case 'end': return _context.stop(); } } }, _callee, undefined); }))); case 2: _context3.next = 4; return (0, _oraHandler2.default)('Installing NPM Dependencies', (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee2() { var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, packageName, content, electronPrebuilt, _arr, _i, profile, envTarget; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: d('installing dependencies'); _context2.next = 3; return (0, _installDependencies2.default)(dir, deps); case 3: d('installing devDependencies'); _context2.next = 6; return (0, _installDependencies2.default)(dir, devDeps, true); case 6: d('installing exact dependencies'); _iteratorNormalCompletion = true; _didIteratorError = false; _iteratorError = undefined; _context2.prev = 10; _iterator = (0, _getIterator3.default)(exactDevDeps); case 12: if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { _context2.next = 19; break; } packageName = _step.value; _context2.next = 16; return (0, _installDependencies2.default)(dir, [packageName], true, true); case 16: _iteratorNormalCompletion = true; _context2.next = 12; break; case 19: _context2.next = 25; break; case 21: _context2.prev = 21; _context2.t0 = _context2['catch'](10); _didIteratorError = true; _iteratorError = _context2.t0; case 25: _context2.prev = 25; _context2.prev = 26; if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } case 28: _context2.prev = 28; if (!_didIteratorError) { _context2.next = 31; break; } throw _iteratorError; case 31: return _context2.finish(28); case 32: return _context2.finish(25); case 33: _context2.t1 = lintStyle; _context2.next = _context2.t1 === 'standard' ? 36 : _context2.t1 === 'airbnb' ? 40 : 44; break; case 36: d('installing standard linting dependencies'); _context2.next = 39; return (0, _installDependencies2.default)(dir, standardDeps, true); case 39: return _context2.abrupt('break', 46); case 40: d('installing airbnb linting dependencies'); _context2.next = 43; return (0, _installDependencies2.default)(dir, airbnbDeps, true); case 43: return _context2.abrupt('break', 46); case 44: d('not installing linting deps'); return _context2.abrupt('break', 46); case 46: _context2.t2 = JSON; _context2.next = 49; return _fsExtra2.default.readFile(_path2.default.join(dir, '.compilerc'), 'utf8'); case 49: _context2.t3 = _context2.sent; content = _context2.t2.parse.call(_context2.t2, _context2.t3); electronPrebuilt = require(_path2.default.join(dir, 'node_modules', 'electron-prebuilt-compile', 'package.json')); _arr = ['development', 'production']; for (_i = 0; _i < _arr.length; _i++) { profile = _arr[_i]; envTarget = content.env[profile]['application/javascript'].presets.find(function (x) { return x[0] === 'env'; }); // parseFloat strips the patch version // parseFloat('1.3.2') === 1.3 envTarget[1].targets.electron = parseFloat(electronPrebuilt.version); } _context2.next = 56; return _fsExtra2.default.writeFile(_path2.default.join(dir, '.compilerc'), (0, _stringify2.default)(content, null, 2), 'utf8'); case 56: case 'end': return _context2.stop(); } } }, _callee2, undefined, [[10, 21, 25, 33], [26,, 28, 32]]); }))); case 4: case 'end': return _context3.stop(); } } }, _callee3, undefined); })); return function (_x, _x2) { return _ref.apply(this, arguments); }; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluaXQvaW5pdC1ucG0uanMiXSwibmFtZXMiOlsiZCIsImRlcHMiLCJkZXZEZXBzIiwiZXhhY3REZXZEZXBzIiwic3RhbmRhcmREZXBzIiwiYWlyYm5iRGVwcyIsImRpciIsImxpbnRTdHlsZSIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJwYWNrYWdlSlNPTiIsInByb2R1Y3ROYW1lIiwibmFtZSIsImJhc2VuYW1lIiwidG9Mb3dlckNhc2UiLCJjb25maWciLCJmb3JnZSIsImVsZWN0cm9uV2luc3RhbGxlckNvbmZpZyIsInJlcGxhY2UiLCJ3aW5kb3dzU3RvcmVDb25maWciLCJlbGVjdHJvblBhY2thZ2VyQ29uZmlnIiwicGFja2FnZU1hbmFnZXIiLCJhdXRob3IiLCJzY3JpcHRzIiwibGludCIsIndyaXRlRmlsZSIsInBhY2thZ2VOYW1lIiwiSlNPTiIsInJlYWRGaWxlIiwiam9pbiIsImNvbnRlbnQiLCJwYXJzZSIsImVsZWN0cm9uUHJlYnVpbHQiLCJyZXF1aXJlIiwicHJvZmlsZSIsImVudlRhcmdldCIsImVudiIsInByZXNldHMiLCJmaW5kIiwieCIsInRhcmdldHMiLCJlbGVjdHJvbiIsInBhcnNlRmxvYXQiLCJ2ZXJzaW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxJQUFJLHFCQUFNLHlCQUFOLENBQVY7O0FBRU8sSUFBTUMsc0JBQU8sQ0FBQyxrQkFBRCxDQUFiO0FBQ0EsSUFBTUMsNEJBQVUsQ0FBQyxrQkFBRCxFQUFxQixvQkFBckIsRUFBMkMsMkNBQTNDLENBQWhCO0FBQ0EsSUFBTUMsc0NBQWUsQ0FBQywyQkFBRCxDQUFyQjtBQUNBLElBQU1DLHNDQUFlLENBQUMsVUFBRCxDQUFyQjtBQUNBLElBQU1DLGtDQUFhLENBQUMsV0FBRCxFQUFjLDBCQUFkLEVBQTBDLHlCQUExQyxFQUN4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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQXhDLEdBeEJPOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEciLCJmaWxlIjoiaW5pdC9pbml0LW5wbS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXNlcm5hbWUgZnJvbSAndXNlcm5hbWUnO1xuXG5pbXBvcnQgaW5zdGFsbERlcExpc3QgZnJvbSAnLi4vdXRpbC9pbnN0YWxsLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQgcmVhZFBhY2thZ2VKU09OIGZyb20gJy4uL3V0aWwvcmVhZC1wYWNrYWdlLWpzb24nO1xuaW1wb3J0IGFzeW5jT3JhIGZyb20gJy4uL3V0aWwvb3JhLWhhbmRsZXInO1xuaW1wb3J0IHlhcm5Pck5wbSBmcm9tICcuLi91dGlsL3lhcm4tb3ItbnBtJztcblxuY29uc3QgZCA9IGRlYnVnKCdlbGVjdHJvbi1mb3JnZTppbml0Om5wbScpO1xuXG5leHBvcnQgY29uc3QgZGVwcyA9IFsnZWxlY3Ryb24tY29tcGlsZSddO1xuZXhwb3J0IGNvbnN0IGRldkRlcHMgPSBbJ2JhYmVsLXByZXNldC1lbnYnLCAnYmFiZWwtcHJlc2V0LXJlYWN0JywgJ2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tYXN5bmMtdG8tZ2VuZXJhdG9yJ107XG5leHBvcnQgY29uc3QgZXhhY3REZXZEZXBzID0gWydlbGVjdHJvbi1wcmVidWlsdC1jb21waWxlJ107XG5leHBvcnQgY29uc3Qgc3RhbmRhcmREZXBzID0gWydzdGFuZGFyZCddO1xuZXhwb3J0IGNvbnN0IGFpcmJuYkRlcHMgPSBbJ2VzbGludEBeMycsICdlc2xpbnQtY29uZmlnLWFpcmJuYkBeMTUnLCAnZXNsaW50LXBsdWdpbi1pbXBvcnRAXjInLFxuICAnZXNsaW50LXBsdWdpbi1qc3gtYTExeUBeNScsICdlc2xpbnQtcGx1Z2luLXJlYWN0QF43J107XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIChkaXIsIGxpbnRTdHlsZSkgPT4ge1xuICBhd2FpdCBhc3luY09yYSgnSW5pdGlhbGl6aW5nIE5QTSBNb2R1bGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFja2FnZUpTT04gPSBhd2FpdCByZWFkUGFja2FnZUpTT04ocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3RtcGwnKSk7XG4gICAgcGFja2FnZUpTT04ucHJvZHVjdE5hbWUgPSBwYWNrYWdlSlNPTi5uYW1lID0gcGF0aC5iYXNlbmFtZShkaXIpLnRvTG93ZXJDYXNlKCk7XG4gICAgcGFja2FnZUpTT04uY29uZmlnLmZvcmdlLmVsZWN0cm9uV2luc3RhbGxlckNvbmZpZy5uYW1lID0gcGFja2FnZUpTT04ubmFtZS5yZXBsYWNlKC8tL2csICdfJyk7XG4gICAgcGFja2FnZUpTT04uY29uZmlnLmZvcmdlLndpbmRvd3NTdG9yZUNvbmZpZy5uYW1lID0gcGFja2FnZUpTT04ucHJvZHVjdE5hbWUucmVwbGFjZSgvLS9nLCAnJyk7XG4gICAgcGFja2FnZUpTT04uY29uZmlnLmZvcmdlLmVsZWN0cm9uUGFja2FnZXJDb25maWcucGFja2FnZU1hbmFnZXIgPSB5YXJuT3JOcG0oKTtcbiAgICBwYWNrYWdlSlNPTi5hdXRob3IgPSBhd2FpdCB1c2VybmFtZSgpO1xuXG4gICAgc3dpdGNoIChsaW50U3R5bGUpIHtcbiAgICAgIGNhc2UgJ3N0YW5kYXJkJzpcbiAgICAgICAgcGFja2FnZUpTT04uc2NyaXB0cy5saW50ID0gJ3N0YW5kYXJkJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhaXJibmInOlxuICAgICAgICBwYWNrYWdlSlNPTi5zY3JpcHRzLmxpbnQgPSAnZXNsaW50IHNyYyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFja2FnZUpTT04uc2NyaXB0cy5saW50ID0gJ2VjaG8gXCJObyBsaW50aW5nIGNvbmZpZ3VyZWRcIic7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkKCd3cml0aW5nIHBhY2thZ2UuanNvbiB0bzonLCBkaXIpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLnJlc29sdmUoZGlyLCAncGFja2FnZS5qc29uJyksIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VKU09OLCBudWxsLCA0KSk7XG4gIH0pO1xuXG4gIGF3YWl0IGFzeW5jT3JhKCdJbnN0YWxsaW5nIE5QTSBEZXBlbmRlbmNpZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgZCgnaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMnKTtcbiAgICBhd2FpdCBpbnN0YWxsRGVwTGlzdChkaXIsIGRlcHMpO1xuXG4gICAgZCgnaW5zdGFsbGluZyBkZXZEZXBlbmRlbmNpZXMnKTtcbiAgICBhd2FpdCBpbnN0YWxsRGVwTGlzdChkaXIsIGRldkRlcHMsIHRydWUpO1xuXG4gICAgZCgnaW5zdGFsbGluZyBleGFjdCBkZXBlbmRlbmNpZXMnKTtcbiAgICBmb3IgKGNvbnN0IHBhY2thZ2VOYW1lIG9mIGV4YWN0RGV2RGVwcykge1xuICAgICAgYXdhaXQgaW5zdGFsbERlcExpc3QoZGlyLCBbcGFja2FnZU5hbWVdLCB0cnVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxpbnRTdHlsZSkge1xuICAgICAgY2FzZSAnc3RhbmRhcmQnOlxuICAgICAgICBkKCdpbnN0YWxsaW5nIHN0YW5kYXJkIGxpbnRpbmcgZGVwZW5kZW5jaWVzJyk7XG4gICAgICAgIGF3YWl0IGluc3RhbGxEZXBMaXN0KGRpciwgc3RhbmRhcmREZXBzLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhaXJibmInOlxuICAgICAgICBkKCdpbnN0YWxsaW5nIGFpcmJuYiBsaW50aW5nIGRlcGVuZGVuY2llcycpO1xuICAgICAgICBhd2FpdCBpbnN0YWxsRGVwTGlzdChkaXIsIGFpcmJuYkRlcHMsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGQoJ25vdCBpbnN0YWxsaW5nIGxpbnRpbmcgZGVwcycpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBOQjogRm9yIGJhYmVsLXByZXNldC1lbnYgdG8gd29yayBjb3JyZWN0bHksIGl0IG5lZWRzIHRvIGtub3cgdGhlXG4gICAgLy8gYWN0dWFsIHZlcnNpb24gb2YgRWxlY3Ryb24gdGhhdCB3ZSBpbnN0YWxsZWRcbiAgICBjb25zdCBjb250ZW50ID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oZGlyLCAnLmNvbXBpbGVyYycpLCAndXRmOCcpKTtcbiAgICBjb25zdCBlbGVjdHJvblByZWJ1aWx0ID0gcmVxdWlyZShcbiAgICAgIHBhdGguam9pbihkaXIsICdub2RlX21vZHVsZXMnLCAnZWxlY3Ryb24tcHJlYnVpbHQtY29tcGlsZScsICdwYWNrYWdlLmpzb24nKSk7XG5cbiAgICBmb3IgKGNvbnN0IHByb2ZpbGUgb2YgWydkZXZlbG9wbWVudCcsICdwcm9kdWN0aW9uJ10pIHtcbiAgICAgIGNvbnN0IGVudlRhcmdldCA9IGNvbnRlbnQuZW52W3Byb2ZpbGVdWydhcHBsaWNhdGlvbi9qYXZhc2NyaXB0J10ucHJlc2V0cy5maW5kKHggPT4geFswXSA9PT0gJ2VudicpO1xuICAgICAgLy8gcGFyc2VGbG9hdCBzdHJpcHMgdGhlIHBhdGNoIHZlcnNpb25cbiAgICAgIC8vIHBhcnNlRmxvYXQoJzEuMy4yJykgPT09IDEuM1xuICAgICAgZW52VGFyZ2V0WzFdLnRhcmdldHMuZWxlY3Ryb24gPSBwYXJzZUZsb2F0KGVsZWN0cm9uUHJlYnVpbHQudmVyc2lvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihkaXIsICcuY29tcGlsZXJjJyksIEpTT04uc3RyaW5naWZ5KGNvbnRlbnQsIG51bGwsIDIpLCAndXRmOCcpO1xuICB9KTtcbn07XG4iXX0=