UNPKG

electron-forge

Version:

A complete tool for building modern Electron applications

196 lines (149 loc) 15.1 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'); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _lodash = require('lodash.template'); var _lodash2 = _interopRequireDefault(_lodash); var _readPackageJson = require('./read-package-json'); var _readPackageJson2 = _interopRequireDefault(_readPackageJson); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var underscoreCase = function underscoreCase(str) { return str.replace(/(.)([A-Z][a-z]+)/g, '$1_$2').replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase(); }; var proxify = function proxify(object, envPrefix) { var newObject = {}; (0, _keys2.default)(object).forEach(function (key) { if ((0, _typeof3.default)(object[key]) === 'object' && !Array.isArray(object[key])) { newObject[key] = proxify(object[key], envPrefix + '_' + underscoreCase(key)); } else { newObject[key] = object[key]; } }); return new Proxy(newObject, { get: function get(target, name) { if (target.hasOwnProperty(name)) return target[name]; // eslint-disable-line no-prototype-builtins if (typeof name === 'string') { var envValue = process.env[envPrefix + '_' + underscoreCase(name)]; if (envValue) return envValue; } } }); }; exports.default = function () { var _ref = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee(dir) { var packageJSON, forgeConfig, templateObj, template; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return (0, _readPackageJson2.default)(dir); case 2: packageJSON = _context.sent; forgeConfig = packageJSON.config.forge; _context.t0 = typeof forgeConfig === 'string'; if (!_context.t0) { _context.next = 14; break; } _context.next = 8; return _fsExtra2.default.pathExists(_path2.default.resolve(dir, forgeConfig)); case 8: _context.t1 = _context.sent; if (_context.t1) { _context.next = 13; break; } _context.next = 12; return _fsExtra2.default.pathExists(_path2.default.resolve(dir, forgeConfig + '.js')); case 12: _context.t1 = _context.sent; case 13: _context.t0 = _context.t1; case 14: if (!_context.t0) { _context.next = 25; break; } _context.prev = 15; forgeConfig = require(_path2.default.resolve(dir, forgeConfig)); _context.next = 23; break; case 19: _context.prev = 19; _context.t2 = _context['catch'](15); console.error('Failed to load: ' + _path2.default.resolve(dir, forgeConfig)); throw _context.t2; case 23: _context.next = 27; break; case 25: if (!((typeof forgeConfig === 'undefined' ? 'undefined' : (0, _typeof3.default)(forgeConfig)) !== 'object')) { _context.next = 27; break; } throw new Error('Expected packageJSON.config.forge to be an object or point to a requirable JS file'); case 27: forgeConfig = (0, _assign2.default)({ make_targets: {}, publish_targets: {}, electronPackagerConfig: {}, electronWinstallerConfig: {}, electronInstallerDebian: {}, electronInstallerDMG: {}, electronInstallerRedhat: {}, s3: {}, github_repository: {} }, forgeConfig); forgeConfig.make_targets = (0, _assign2.default)({ win32: ['squirrel'], darwin: ['zip'], mas: ['zip'], linux: ['deb', 'rpm'] }, forgeConfig.make_targets); forgeConfig.publish_targets = (0, _assign2.default)({ win32: ['github'], darwin: ['github'], mas: ['github'], linux: ['github'] }, forgeConfig.publish_targets); templateObj = (0, _assign2.default)({}, packageJSON, { year: new Date().getFullYear() }); template = function template(obj) { (0, _keys2.default)(obj).forEach(function (objKey) { if ((0, _typeof3.default)(obj[objKey]) === 'object' && obj !== null) { template(obj[objKey]); } else if (typeof obj[objKey] === 'string') { obj[objKey] = (0, _lodash2.default)(obj[objKey])(templateObj); // eslint-disable-line if (obj[objKey].startsWith('require:')) { obj[objKey] = require(_path2.default.resolve(dir, obj[objKey].substr(8))); // eslint-disable-line } } }); }; template(forgeConfig); return _context.abrupt('return', proxify(forgeConfig, 'ELECTRON_FORGE')); case 34: case 'end': return _context.stop(); } } }, _callee, undefined, [[15, 19]]); })); return function (_x) { return _ref.apply(this, arguments); }; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWwvZm9yZ2UtY29uZmlnLmpzIl0sIm5hbWVzIjpbInVuZGVyc2NvcmVDYXNlIiwic3RyIiwicmVwbGFjZSIsInRvVXBwZXJDYXNlIiwicHJveGlmeSIsIm9iamVjdCIsImVudlByZWZpeCIsIm5ld09iamVjdCIsImZvckVhY2giLCJrZXkiLCJBcnJheSIsImlzQXJyYXkiLCJQcm94eSIsImdldCIsInRhcmdldCIsIm5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsImVudlZhbHVlIiwicHJvY2VzcyIsImVudiIsImRpciIsInBhY2thZ2VKU09OIiwiZm9yZ2VDb25maWciLCJjb25maWciLCJmb3JnZSIsInBhdGhFeGlzdHMiLCJyZXNvbHZlIiwicmVxdWlyZSIsImNvbnNvbGUiLCJlcnJvciIsIkVycm9yIiwibWFrZV90YXJnZXRzIiwicHVibGlzaF90YXJnZXRzIiwiZWxlY3Ryb25QYWNrYWdlckNvbmZpZyIsImVsZWN0cm9uV2luc3RhbGxlckNvbmZpZyIsImVsZWN0cm9uSW5zdGFsbGVyRGViaWFuIiwiZWxlY3Ryb25JbnN0YWxsZXJETUciLCJlbGVjdHJvbkluc3RhbGxlclJlZGhhdCIsInMzIiwiZ2l0aHViX3JlcG9zaXRvcnkiLCJ3aW4zMiIsImRhcndpbiIsIm1hcyIsImxpbnV4IiwidGVtcGxhdGVPYmoiLCJ5ZWFyIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwidGVtcGxhdGUiLCJvYmoiLCJvYmpLZXkiLCJzdGFydHNXaXRoIiwic3Vic3RyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsaUJBQWlCLFNBQWpCQSxjQUFpQjtBQUFBLFNBQU9DLElBQUlDLE9BQUosQ0FBWSxtQkFBWixFQUFpQyxPQUFqQyxFQUEwQ0EsT0FBMUMsQ0FBa0Qsb0JBQWxELEVBQXdFLE9BQXhFLEVBQWlGQyxXQUFqRixFQUFQO0FBQUEsQ0FBdkI7O0FBRUEsSUFBTUMsVUFB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QkFBUzFCLFdBQVQ7O0FBbkRhLDZDQXFETmxCLFFBQVFrQixXQUFSLEVBQXFCLGdCQUFyQixDQXJETTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHIiwiZmlsZSI6InV0aWwvZm9yZ2UtY29uZmlnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF90ZW1wbGF0ZSBmcm9tICdsb2Rhc2gudGVtcGxhdGUnO1xuaW1wb3J0IHJlYWRQYWNrYWdlSlNPTiBmcm9tICcuL3JlYWQtcGFja2FnZS1qc29uJztcblxuY29uc3QgdW5kZXJzY29yZUNhc2UgPSBzdHIgPT4gc3RyLnJlcGxhY2UoLyguKShbQS1aXVthLXpdKykvZywgJyQxXyQyJykucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgJyQxXyQyJykudG9VcHBlckNhc2UoKTtcblxuY29uc3QgcHJveGlmeSA9IChvYmplY3QsIGVudlByZWZpeCkgPT4ge1xuICBjb25zdCBuZXdPYmplY3QgPSB7fTtcblxuICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0W2tleV0gPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iamVjdFtrZXldKSkge1xuICAgICAgbmV3T2JqZWN0W2tleV0gPSBwcm94aWZ5KG9iamVjdFtrZXldLCBgJHtlbnZQcmVmaXh9XyR7dW5kZXJzY29yZUNhc2Uoa2V5KX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T2JqZWN0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJveHkobmV3T2JqZWN0LCB7XG4gICAgZ2V0KHRhcmdldCwgbmFtZSkge1xuICAgICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgcmV0dXJuIHRhcmdldFtuYW1lXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgZW52VmFsdWUgPSBwcm9jZXNzLmVudltgJHtlbnZQcmVmaXh9XyR7dW5kZXJzY29yZUNhc2UobmFtZSl9YF07XG4gICAgICAgIGlmIChlbnZWYWx1ZSkgcmV0dXJuIGVudlZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKGRpcikgPT4ge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGF3YWl0IHJlYWRQYWNrYWdlSlNPTihkaXIpO1xuICBsZXQgZm9yZ2VDb25maWcgPSBwYWNrYWdlSlNPTi5jb25maWcuZm9yZ2U7XG4gIGlmICh0eXBlb2YgZm9yZ2VDb25maWcgPT09ICdzdHJpbmcnICYmIChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGgucmVzb2x2ZShkaXIsIGZvcmdlQ29uZmlnKSkgfHwgYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLnJlc29sdmUoZGlyLCBgJHtmb3JnZUNvbmZpZ30uanNgKSkpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvcmdlQ29uZmlnID0gcmVxdWlyZShwYXRoLnJlc29sdmUoZGlyLCBmb3JnZUNvbmZpZykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQ6ICR7cGF0aC5yZXNvbHZlKGRpciwgZm9yZ2VDb25maWcpfWApO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZm9yZ2VDb25maWcgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwYWNrYWdlSlNPTi5jb25maWcuZm9yZ2UgdG8gYmUgYW4gb2JqZWN0IG9yIHBvaW50IHRvIGEgcmVxdWlyYWJsZSBKUyBmaWxlJyk7XG4gIH1cbiAgZm9yZ2VDb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICBtYWtlX3RhcmdldHM6IHt9LFxuICAgIHB1Ymxpc2hfdGFyZ2V0czoge30sXG4gICAgZWxlY3Ryb25QYWNrYWdlckNvbmZpZzoge30sXG4gICAgZWxlY3Ryb25XaW5zdGFsbGVyQ29uZmlnOiB7fSxcbiAgICBlbGVjdHJvbkluc3RhbGxlckRlYmlhbjoge30sXG4gICAgZWxlY3Ryb25JbnN0YWxsZXJETUc6IHt9LFxuICAgIGVsZWN0cm9uSW5zdGFsbGVyUmVkaGF0OiB7fSxcbiAgICBzMzoge30sXG4gICAgZ2l0aHViX3JlcG9zaXRvcnk6IHt9LFxuICB9LCBmb3JnZUNvbmZpZyk7XG4gIGZvcmdlQ29uZmlnLm1ha2VfdGFyZ2V0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHdpbjMyOiBbJ3NxdWlycmVsJ10sXG4gICAgZGFyd2luOiBbJ3ppcCddLFxuICAgIG1hczogWyd6aXAnXSxcbiAgICBsaW51eDogWydkZWInLCAncnBtJ10sXG4gIH0sIGZvcmdlQ29uZmlnLm1ha2VfdGFyZ2V0cyk7XG4gIGZvcmdlQ29uZmlnLnB1Ymxpc2hfdGFyZ2V0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHdpbjMyOiBbJ2dpdGh1YiddLFxuICAgIGRhcndpbjogWydnaXRodWInXSxcbiAgICBtYXM6IFsnZ2l0aHViJ10sXG4gICAgbGludXg6IFsnZ2l0aHViJ10sXG4gIH0sIGZvcmdlQ29uZmlnLnB1Ymxpc2hfdGFyZ2V0cyk7XG5cbiAgY29uc3QgdGVtcGxhdGVPYmogPSBPYmplY3QuYXNzaWduKHt9LCBwYWNrYWdlSlNPTiwgeyB5ZWFyOiAobmV3IERhdGUoKSkuZ2V0RnVsbFllYXIoKSB9KTtcbiAgY29uc3QgdGVtcGxhdGUgPSAob2JqKSA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKChvYmpLZXkpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqW29iaktleV0gPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgICB0ZW1wbGF0ZShvYmpbb2JqS2V5XSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmpbb2JqS2V5XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb2JqW29iaktleV0gPSBfdGVtcGxhdGUob2JqW29iaktleV0pKHRlbXBsYXRlT2JqKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICBpZiAob2JqW29iaktleV0uc3RhcnRzV2l0aCgncmVxdWlyZTonKSkge1xuICAgICAgICAgIG9ialtvYmpLZXldID0gcmVxdWlyZShwYXRoLnJlc29sdmUoZGlyLCBvYmpbb2JqS2V5XS5zdWJzdHIoOCkpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgdGVtcGxhdGUoZm9yZ2VDb25maWcpO1xuXG4gIHJldHVybiBwcm94aWZ5KGZvcmdlQ29uZmlnLCAnRUxFQ1RST05fRk9SR0UnKTtcbn07XG4iXX0=