UNPKG

13.9 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.airbnbDeps = exports.standardDeps = exports.exactDevDeps = exports.devDeps = exports.deps = undefined;
7
8var _getIterator2 = require('babel-runtime/core-js/get-iterator');
9
10var _getIterator3 = _interopRequireDefault(_getIterator2);
11
12var _bluebird = require('bluebird');
13
14var _debug = require('debug');
15
16var _debug2 = _interopRequireDefault(_debug);
17
18var _fsExtra = require('fs-extra');
19
20var _fsExtra2 = _interopRequireDefault(_fsExtra);
21
22var _path = require('path');
23
24var _path2 = _interopRequireDefault(_path);
25
26var _username = require('username');
27
28var _username2 = _interopRequireDefault(_username);
29
30var _forgeConfig = require('../util/forge-config');
31
32var _installDependencies = require('../util/install-dependencies');
33
34var _installDependencies2 = _interopRequireDefault(_installDependencies);
35
36var _readPackageJson = require('../util/read-package-json');
37
38var _readPackageJson2 = _interopRequireDefault(_readPackageJson);
39
40var _oraHandler = require('../util/ora-handler');
41
42var _oraHandler2 = _interopRequireDefault(_oraHandler);
43
44function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
45
46const d = (0, _debug2.default)('electron-forge:init:npm');
47
48const deps = exports.deps = ['electron-compile', 'electron-squirrel-startup'];
49const devDeps = exports.devDeps = ['babel-preset-env', 'babel-preset-react', 'babel-plugin-transform-async-to-generator', 'electron-forge'];
50const exactDevDeps = exports.exactDevDeps = ['electron-prebuilt-compile'];
51const standardDeps = exports.standardDeps = ['standard'];
52const airbnbDeps = exports.airbnbDeps = ['eslint@^3', 'eslint-config-airbnb@^15', 'eslint-plugin-import@^2', 'eslint-plugin-jsx-a11y@^5', 'eslint-plugin-react@^7'];
53
54exports.default = (() => {
55 var _ref = (0, _bluebird.coroutine)(function* (dir, lintStyle) {
56 yield (0, _oraHandler2.default)('Initializing NPM Module', (0, _bluebird.coroutine)(function* () {
57 const packageJSON = yield (0, _readPackageJson2.default)(_path2.default.resolve(__dirname, '../../tmpl'));
58 packageJSON.productName = packageJSON.name = _path2.default.basename(dir).toLowerCase();
59 packageJSON.author = yield (0, _username2.default)();
60 (0, _forgeConfig.setInitialForgeConfig)(packageJSON);
61
62 switch (lintStyle) {
63 case 'standard':
64 packageJSON.scripts.lint = 'standard';
65 break;
66 case 'airbnb':
67 packageJSON.scripts.lint = 'eslint src --color';
68 break;
69 default:
70 packageJSON.scripts.lint = 'echo "No linting configured"';
71 break;
72 }
73 d('writing package.json to:', dir);
74 yield _fsExtra2.default.writeJson(_path2.default.resolve(dir, 'package.json'), packageJSON, { spaces: 2 });
75 }));
76
77 yield (0, _oraHandler2.default)('Installing NPM Dependencies', (0, _bluebird.coroutine)(function* () {
78 d('installing dependencies');
79 yield (0, _installDependencies2.default)(dir, deps);
80
81 d('installing devDependencies');
82 yield (0, _installDependencies2.default)(dir, devDeps, true);
83
84 d('installing exact dependencies');
85 var _iteratorNormalCompletion = true;
86 var _didIteratorError = false;
87 var _iteratorError = undefined;
88
89 try {
90 for (var _iterator = (0, _getIterator3.default)(exactDevDeps), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
91 const packageName = _step.value;
92
93 yield (0, _installDependencies2.default)(dir, [packageName], true, true);
94 }
95 } catch (err) {
96 _didIteratorError = true;
97 _iteratorError = err;
98 } finally {
99 try {
100 if (!_iteratorNormalCompletion && _iterator.return) {
101 _iterator.return();
102 }
103 } finally {
104 if (_didIteratorError) {
105 throw _iteratorError;
106 }
107 }
108 }
109
110 switch (lintStyle) {
111 case 'standard':
112 d('installing standard linting dependencies');
113 yield (0, _installDependencies2.default)(dir, standardDeps, true);
114 break;
115 case 'airbnb':
116 d('installing airbnb linting dependencies');
117 yield (0, _installDependencies2.default)(dir, airbnbDeps, true);
118 break;
119 default:
120 d('not installing linting deps');
121 break;
122 }
123
124 // NB: For babel-preset-env to work correctly, it needs to know the
125 // actual version of Electron that we installed
126 const content = yield _fsExtra2.default.readJson(_path2.default.join(dir, '.compilerc'), 'utf8');
127 const electronPrebuilt = require(_path2.default.join(dir, 'node_modules', 'electron-prebuilt-compile', 'package.json'));
128
129 var _arr = ['development', 'production'];
130 for (var _i = 0; _i < _arr.length; _i++) {
131 const profile = _arr[_i];
132 const envTarget = content.env[profile]['application/javascript'].presets.find(function (x) {
133 return x[0] === 'env';
134 });
135 // parseFloat strips the patch version
136 // parseFloat('1.3.2') === 1.3
137 // Note: This won't work if the minor version ever gets higher than 9
138 envTarget[1].targets.electron = parseFloat(electronPrebuilt.version).toFixed(1).toString();
139 }
140
141 yield _fsExtra2.default.writeJson(_path2.default.join(dir, '.compilerc'), content, { spaces: 2 });
142 }));
143 });
144
145 return function (_x, _x2) {
146 return _ref.apply(this, arguments);
147 };
148})();
149//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluaXQvaW5pdC1ucG0uanMiXSwibmFtZXMiOlsiZCIsImRlcHMiLCJkZXZEZXBzIiwiZXhhY3REZXZEZXBzIiwic3RhbmRhcmREZXBzIiwiYWlyYm5iRGVwcyIsImRpciIsImxpbnRTdHlsZSIsInBhY2thZ2VKU09OIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJwcm9kdWN0TmFtZSIsIm5hbWUiLCJiYXNlbmFtZSIsInRvTG93ZXJDYXNlIiwiYXV0aG9yIiwic2NyaXB0cyIsImxpbnQiLCJmcyIsIndyaXRlSnNvbiIsInNwYWNlcyIsInBhY2thZ2VOYW1lIiwiY29udGVudCIsInJlYWRKc29uIiwiam9pbiIsImVsZWN0cm9uUHJlYnVpbHQiLCJyZXF1aXJlIiwicHJvZmlsZSIsImVudlRhcmdldCIsImVudiIsInByZXNldHMiLCJmaW5kIiwieCIsInRhcmdldHMiLCJlbGVjdHJvbiIsInBhcnNlRmxvYXQiLCJ2ZXJzaW9uIiwidG9GaXhlZCIsInRvU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLElBQUkscUJBQU0seUJBQU4sQ0FBVjs7QUFFTyxNQUFNQyxzQkFBTyxDQUFDLGtCQUFELEVBQXFCLDJCQUFyQixDQUFiO0FBQ0EsTUFBTUMsNEJBQVUsQ0FBQyxrQkFBRCxFQUFxQixvQkFBckIsRUFBMkMsMkNBQTNDLEVBQXdGLGdCQUF4RixDQUFoQjtBQUNBLE1BQU1DLHNDQUFlLENBQUMsMkJBQUQsQ0FBckI7QUFDQSxNQUFNQyxzQ0FBZSxDQUFDLFVBQUQsQ0FBckI7QUFDQSxNQUFNQyxrQ0FBYSxDQUFDLFdBQUQsRUFBYywwQkFBZCxFQUEwQyx5QkFBMUMsRUFDeEIsMkJBRHdCLEVBQ0ssd0JBREwsQ0FBbkI7OztzQ0FHUSxXQUFPQyxHQUFQLEVBQVlDLFNBQVosRUFBMEI7QUFDdkMsVUFBTSww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cEIsa0JBQUdDLFNBQUgsQ0FBYVgsZUFBS2dCLElBQUwsQ0FBVW5CLEdBQVYsRUFBZSxZQUFmLENBQWIsRUFBMkNpQixPQUEzQyxFQUFvRCxFQUFFRixRQUFRLENBQVYsRUFBcEQsQ0FBTjtBQUNELEtBekNLLEVBQU47QUEwQ0QsRyIsImZpbGUiOiJpbml0L2luaXQtbnBtLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB1c2VybmFtZSBmcm9tICd1c2VybmFtZSc7XG5cbmltcG9ydCB7IHNldEluaXRpYWxGb3JnZUNvbmZpZyB9IGZyb20gJy4uL3V0aWwvZm9yZ2UtY29uZmlnJztcbmltcG9ydCBpbnN0YWxsRGVwTGlzdCBmcm9tICcuLi91dGlsL2luc3RhbGwtZGVwZW5kZW5jaWVzJztcbmltcG9ydCByZWFkUGFja2FnZUpTT04gZnJvbSAnLi4vdXRpbC9yZWFkLXBhY2thZ2UtanNvbic7XG5pbXBvcnQgYXN5bmNPcmEgZnJvbSAnLi4vdXRpbC9vcmEtaGFuZGxlcic7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnZWxlY3Ryb24tZm9yZ2U6aW5pdDpucG0nKTtcblxuZXhwb3J0IGNvbnN0IGRlcHMgPSBbJ2VsZWN0cm9uLWNvbXBpbGUnLCAnZWxlY3Ryb24tc3F1aXJyZWwtc3RhcnR1cCddO1xuZXhwb3J0IGNvbnN0IGRldkRlcHMgPSBbJ2JhYmVsLXByZXNldC1lbnYnLCAnYmFiZWwtcHJlc2V0LXJlYWN0JywgJ2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tYXN5bmMtdG8tZ2VuZXJhdG9yJywgJ2VsZWN0cm9uLWZvcmdlJ107XG5leHBvcnQgY29uc3QgZXhhY3REZXZEZXBzID0gWydlbGVjdHJvbi1wcmVidWlsdC1jb21waWxlJ107XG5leHBvcnQgY29uc3Qgc3RhbmRhcmREZXBzID0gWydzdGFuZGFyZCddO1xuZXhwb3J0IGNvbnN0IGFpcmJuYkRlcHMgPSBbJ2VzbGludEBeMycsICdlc2xpbnQtY29uZmlnLWFpcmJuYkBeMTUnLCAnZXNsaW50LXBsdWdpbi1pbXBvcnRAXjInLFxuICAnZXNsaW50LXBsdWdpbi1qc3gtYTExeUBeNScsICdlc2xpbnQtcGx1Z2luLXJlYWN0QF43J107XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIChkaXIsIGxpbnRTdHlsZSkgPT4ge1xuICBhd2FpdCBhc3luY09yYSgnSW5pdGlhbGl6aW5nIE5QTSBNb2R1bGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFja2FnZUpTT04gPSBhd2FpdCByZWFkUGFja2FnZUpTT04ocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uL3RtcGwnKSk7XG4gICAgcGFja2FnZUpTT04ucHJvZHVjdE5hbWUgPSBwYWNrYWdlSlNPTi5uYW1lID0gcGF0aC5iYXNlbmFtZShkaXIpLnRvTG93ZXJDYXNlKCk7XG4gICAgcGFja2FnZUpTT04uYXV0aG9yID0gYXdhaXQgdXNlcm5hbWUoKTtcbiAgICBzZXRJbml0aWFsRm9yZ2VDb25maWcocGFja2FnZUpTT04pO1xuXG4gICAgc3dpdGNoIChsaW50U3R5bGUpIHtcbiAgICAgIGNhc2UgJ3N0YW5kYXJkJzpcbiAgICAgICAgcGFja2FnZUpTT04uc2NyaXB0cy5saW50ID0gJ3N0YW5kYXJkJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhaXJibmInOlxuICAgICAgICBwYWNrYWdlSlNPTi5zY3JpcHRzLmxpbnQgPSAnZXNsaW50IHNyYyAtLWNvbG9yJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYWNrYWdlSlNPTi5zY3JpcHRzLmxpbnQgPSAnZWNobyBcIk5vIGxpbnRpbmcgY29uZmlndXJlZFwiJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGQoJ3dyaXRpbmcgcGFja2FnZS5qc29uIHRvOicsIGRpcik7XG4gICAgYXdhaXQgZnMud3JpdGVKc29uKHBhdGgucmVzb2x2ZShkaXIsICdwYWNrYWdlLmpzb24nKSwgcGFja2FnZUpTT04sIHsgc3BhY2VzOiAyIH0pO1xuICB9KTtcblxuICBhd2FpdCBhc3luY09yYSgnSW5zdGFsbGluZyBOUE0gRGVwZW5kZW5jaWVzJywgYXN5bmMgKCkgPT4ge1xuICAgIGQoJ2luc3RhbGxpbmcgZGVwZW5kZW5jaWVzJyk7XG4gICAgYXdhaXQgaW5zdGFsbERlcExpc3QoZGlyLCBkZXBzKTtcblxuICAgIGQoJ2luc3RhbGxpbmcgZGV2RGVwZW5kZW5jaWVzJyk7XG4gICAgYXdhaXQgaW5zdGFsbERlcExpc3QoZGlyLCBkZXZEZXBzLCB0cnVlKTtcblxuICAgIGQoJ2luc3RhbGxpbmcgZXhhY3QgZGVwZW5kZW5jaWVzJyk7XG4gICAgZm9yIChjb25zdCBwYWNrYWdlTmFtZSBvZiBleGFjdERldkRlcHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxEZXBMaXN0KGRpciwgW3BhY2thZ2VOYW1lXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChsaW50U3R5bGUpIHtcbiAgICAgIGNhc2UgJ3N0YW5kYXJkJzpcbiAgICAgICAgZCgnaW5zdGFsbGluZyBzdGFuZGFyZCBsaW50aW5nIGRlcGVuZGVuY2llcycpO1xuICAgICAgICBhd2FpdCBpbnN0YWxsRGVwTGlzdChkaXIsIHN0YW5kYXJkRGVwcywgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWlyYm5iJzpcbiAgICAgICAgZCgnaW5zdGFsbGluZyBhaXJibmIgbGludGluZyBkZXBlbmRlbmNpZXMnKTtcbiAgICAgICAgYXdhaXQgaW5zdGFsbERlcExpc3QoZGlyLCBhaXJibmJEZXBzLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBkKCdub3QgaW5zdGFsbGluZyBsaW50aW5nIGRlcHMnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gTkI6IEZvciBiYWJlbC1wcmVzZXQtZW52IHRvIHdvcmsgY29ycmVjdGx5LCBpdCBuZWVkcyB0byBrbm93IHRoZVxuICAgIC8vIGFjdHVhbCB2ZXJzaW9uIG9mIEVsZWN0cm9uIHRoYXQgd2UgaW5zdGFsbGVkXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRKc29uKHBhdGguam9pbihkaXIsICcuY29tcGlsZXJjJyksICd1dGY4Jyk7XG4gICAgY29uc3QgZWxlY3Ryb25QcmVidWlsdCA9IHJlcXVpcmUoXG4gICAgICBwYXRoLmpvaW4oZGlyLCAnbm9kZV9tb2R1bGVzJywgJ2VsZWN0cm9uLXByZWJ1aWx0LWNvbXBpbGUnLCAncGFja2FnZS5qc29uJykpO1xuXG4gICAgZm9yIChjb25zdCBwcm9maWxlIG9mIFsnZGV2ZWxvcG1lbnQnLCAncHJvZHVjdGlvbiddKSB7XG4gICAgICBjb25zdCBlbnZUYXJnZXQgPSBjb250ZW50LmVudltwcm9maWxlXVsnYXBwbGljYXRpb24vamF2YXNjcmlwdCddLnByZXNldHMuZmluZCh4ID0+IHhbMF0gPT09ICdlbnYnKTtcbiAgICAgIC8vIHBhcnNlRmxvYXQgc3RyaXBzIHRoZSBwYXRjaCB2ZXJzaW9uXG4gICAgICAvLyBwYXJzZUZsb2F0KCcxLjMuMicpID09PSAxLjNcbiAgICAgIC8vIE5vdGU6IFRoaXMgd29uJ3Qgd29yayBpZiB0aGUgbWlub3IgdmVyc2lvbiBldmVyIGdldHMgaGlnaGVyIHRoYW4gOVxuICAgICAgZW52VGFyZ2V0WzFdLnRhcmdldHMuZWxlY3Ryb24gPSBwYXJzZUZsb2F0KGVsZWN0cm9uUHJlYnVpbHQudmVyc2lvbikudG9GaXhlZCgxKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGF3YWl0IGZzLndyaXRlSnNvbihwYXRoLmpvaW4oZGlyLCAnLmNvbXBpbGVyYycpLCBjb250ZW50LCB7IHNwYWNlczogMiB9KTtcbiAgfSk7XG59O1xuIl19
\No newline at end of file