electron-forge
Version:
A complete tool for building modern Electron applications
207 lines (161 loc) • 16.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createDefaultCertificate = exports.isSupportedOnCurrentPlatform = undefined;
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _bluebird = require('bluebird');
var createDefaultCertificate = exports.createDefaultCertificate = function () {
var _ref2 = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee2(publisherName, outPath) {
var defaultPvk, targetCert, targetPfx;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
defaultPvk = _path2.default.resolve(__dirname, '..', '..', '..', 'res', 'default.pvk');
targetCert = _path2.default.join(outPath, 'default.cer');
targetPfx = _path2.default.join(outPath, 'default.pfx');
_context2.next = 5;
return spawnSdkTool('makecert.exe', ['-r', '-h', '0', '-n', 'CN=' + publisherName, '-eku', '1.3.6.1.5.5.7.3.3', '-pe', '-sv', defaultPvk, targetCert]);
case 5:
_context2.next = 7;
return spawnSdkTool('pvk2pfx.exe', ['-pvk', defaultPvk, '-spc', targetCert, '-pfx', targetPfx]);
case 7:
return _context2.abrupt('return', targetPfx);
case 8:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
return function createDefaultCertificate(_x, _x2) {
return _ref2.apply(this, arguments);
};
}();
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _spawnRx = require('spawn-rx');
var _ensureOutput = require('../../util/ensure-output');
var _configFn = require('../../util/config-fn');
var _configFn2 = _interopRequireDefault(_configFn);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// electron-windows-store doesn't set its 'os' field even though it only runs on
// win32
var isSupportedOnCurrentPlatform = exports.isSupportedOnCurrentPlatform = function () {
var _ref = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee() {
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
return _context.abrupt('return', process.platform === 'win32');
case 1:
case 'end':
return _context.stop();
}
}
}, _callee, undefined);
}));
return function isSupportedOnCurrentPlatform() {
return _ref.apply(this, arguments);
};
}();
// NB: This is not a typo, we require AppXs to be built on 64-bit
// but if we're running in a 32-bit node.js process, we're going to
// be Wow64 redirected
var windowsSdkPath = process.arch === 'x64' ? 'C:\\Program Files (x86)\\Windows Kits\\10\\bin\\x64' : 'C:\\Program Files\\Windows Kits\\10\\bin\\x64';
function findSdkTool(exe) {
var sdkTool = _path2.default.join(windowsSdkPath, exe);
if (!_fs2.default.existsSync(sdkTool)) {
sdkTool = (0, _spawnRx.findActualExecutable)(exe, []).cmd;
}
if (!_fs2.default.existsSync(sdkTool)) {
throw new Error('Can\'t find ' + exe + ' in PATH, you probably need to install the Windows SDK');
}
return sdkTool;
}
function spawnSdkTool(exe, params) {
return (0, _spawnRx.spawnPromise)(findSdkTool(exe), params);
}
exports.default = function () {
var _ref3 = (0, _bluebird.coroutine)(_regenerator2.default.mark(function _callee3(_ref4) {
var dir = _ref4.dir,
appName = _ref4.appName,
targetArch = _ref4.targetArch,
forgeConfig = _ref4.forgeConfig,
packageJSON = _ref4.packageJSON;
var windowsStore, outPath, userConfig, opts, noBeta, err;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
windowsStore = require('electron-windows-store');
outPath = _path2.default.resolve(dir, '../make/appx/' + targetArch);
_context3.next = 4;
return (0, _ensureOutput.ensureDirectory)(outPath);
case 4:
userConfig = (0, _configFn2.default)(forgeConfig.windowsStoreConfig, targetArch);
opts = (0, _assign2.default)({
publisher: packageJSON.author,
flatten: false,
deploy: false,
packageVersion: packageJSON.version + '.0',
packageName: appName.replace(/-/g, ''),
packageDisplayName: appName,
packageDescription: packageJSON.description || appName,
packageExecutable: 'app\\' + appName + '.exe',
windowsKit: userConfig.windowsKit || _path2.default.dirname(findSdkTool('makeappx.exe'))
}, userConfig, {
inputDirectory: dir,
outputDirectory: outPath
});
if (opts.devCert) {
_context3.next = 10;
break;
}
_context3.next = 9;
return createDefaultCertificate(opts.publisher, outPath);
case 9:
opts.devCert = _context3.sent;
case 10:
if (!opts.publisher.match(/^CN=/)) {
opts.publisher = 'CN=' + opts.publisher;
}
if (!opts.packageVersion.match(/-/)) {
_context3.next = 19;
break;
}
if (!opts.makeVersionWinStoreCompatible) {
_context3.next = 17;
break;
}
noBeta = opts.packageVersion.replace(/-.*/, '');
opts.packageVersion = noBeta + '.0';
_context3.next = 19;
break;
case 17:
err = "Windows Store version numbers don't support semver beta tags. To" + 'automatically fix this, set makeVersionWinStoreCompatible to true or ' + 'explicitly set packageVersion to a version of the format X.Y.Z.A';
throw new Error(err);
case 19:
delete opts.makeVersionWinStoreCompatible;
_context3.next = 22;
return windowsStore(opts);
case 22:
return _context3.abrupt('return', [_path2.default.resolve(outPath, opts.packageName + '.appx')]);
case 23:
case 'end':
return _context3.stop();
}
}
}, _callee3, undefined);
}));
return function (_x3) {
return _ref3.apply(this, arguments);
};
}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1ha2Vycy93aW4zMi9hcHB4LmpzIl0sIm5hbWVzIjpbInB1Ymxpc2hlck5hbWUiLCJvdXRQYXRoIiwiZGVmYXVsdFB2ayIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJ0YXJnZXRDZXJ0Iiwiam9pbiIsInRhcmdldFBmeCIsInNwYXduU2RrVG9vbCIsImNyZWF0ZURlZmF1bHRDZXJ0aWZpY2F0ZSIsImlzU3VwcG9ydGVkT25DdXJyZW50UGxhdGZvcm0iLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJ3aW5kb3dzU2RrUGF0aCIsImFyY2giLCJmaW5kU2RrVG9vbCIsImV4ZSIsInNka1Rvb2wiLCJleGlzdHNTeW5jIiwiY21kIiwiRXJyb3IiLCJwYXJhbXMiLCJkaXIiLCJhcHBOYW1lIiwidGFyZ2V0QXJjaCIsImZvcmdlQ29uZmlnIiwicGFja2FnZUpTT04iLCJ3aW5kb3dzU3RvcmUiLCJyZXF1aXJlIiwidXNlckNvbmZpZyIsIndpbmRvd3NTdG9yZUNvbmZpZyIsIm9wdHMiLCJwdWJsaXNoZXIiLCJhdXRob3IiLCJmbGF0dGVuIiwiZGVwbG95IiwicGFja2FnZVZlcnNpb24iLCJ2ZXJzaW9uIiwicGFja2FnZU5hbWUiLCJyZXBsYWNlIiwicGFja2FnZURpc3BsYXlOYW1lIiwicGFja2FnZURlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJwYWNrYWdlRXhlY3V0YWJsZSIsIndpbmRvd3NLaXQiLCJkaXJuYW1lIiwiaW5wdXREaXJlY3RvcnkiLCJvdXRwdXREaXJlY3RvcnkiLCJkZXZDZXJ0IiwibWF0Y2giLCJtYWtlVmVyc2lvbldpblN0b3JlQ29tcGF0aWJsZSIsIm5vQmV0YSIsImVyciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tFQW1DTyxrQkFBd0NBLGFBQXhDLEVBQXVEQyxPQUF2RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQ0Msc0JBREQsR0FDYyxlQUFLQyxPQUFMLENBQWFDLFNBQWIsRUFBd0IsSUFBeEIsRUFBOEIsSUFBOUIs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QXlCOEIsS0FBS08sV0FBOUIsV0FBRCxDQWhETTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHIiwiZmlsZSI6Im1ha2Vycy93aW4zMi9hcHB4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3Bhd25Qcm9taXNlLCBmaW5kQWN0dWFsRXhlY3V0YWJsZSB9IGZyb20gJ3NwYXduLXJ4JztcblxuaW1wb3J0IHsgZW5zdXJlRGlyZWN0b3J5IH0gZnJvbSAnLi4vLi4vdXRpbC9lbnN1cmUtb3V0cHV0JztcbmltcG9ydCBjb25maWdGbiBmcm9tICcuLi8uLi91dGlsL2NvbmZpZy1mbic7XG5cbi8vIGVsZWN0cm9uLXdpbmRvd3Mtc3RvcmUgZG9lc24ndCBzZXQgaXRzICdvcycgZmllbGQgZXZlbiB0aG91Z2ggaXQgb25seSBydW5zIG9uXG4vLyB3aW4zMlxuZXhwb3J0IGNvbnN0IGlzU3VwcG9ydGVkT25DdXJyZW50UGxhdGZvcm0gPSBhc3luYyAoKSA9PiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuXG4vLyBOQjogVGhpcyBpcyBub3QgYSB0eXBvLCB3ZSByZXF1aXJlIEFwcFhzIHRvIGJlIGJ1aWx0IG9uIDY0LWJpdFxuLy8gYnV0IGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSAzMi1iaXQgbm9kZS5qcyBwcm9jZXNzLCB3ZSdyZSBnb2luZyB0b1xuLy8gYmUgV293NjQgcmVkaXJlY3RlZFxuY29uc3Qgd2luZG93c1Nka1BhdGggPSBwcm9jZXNzLmFyY2ggPT09ICd4NjQnID9cbiAgJ0M6XFxcXFByb2dyYW0gRmlsZXMgKHg4NilcXFxcV2luZG93cyBLaXRzXFxcXDEwXFxcXGJpblxcXFx4NjQnIDpcbiAgJ0M6XFxcXFByb2dyYW0gRmlsZXNcXFxcV2luZG93cyBLaXRzXFxcXDEwXFxcXGJpblxcXFx4NjQnO1xuXG5mdW5jdGlvbiBmaW5kU2RrVG9vbChleGUpIHtcbiAgbGV0IHNka1Rvb2wgPSBwYXRoLmpvaW4od2luZG93c1Nka1BhdGgsIGV4ZSk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhzZGtUb29sKSkge1xuICAgIHNka1Rvb2wgPSBmaW5kQWN0dWFsRXhlY3V0YWJsZShleGUsIFtdKS5jbWQ7XG4gIH1cblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoc2RrVG9vbCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgJHtleGV9IGluIFBBVEgsIHlvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgdGhlIFdpbmRvd3MgU0RLYCk7XG4gIH1cblxuICByZXR1cm4gc2RrVG9vbDtcbn1cblxuZnVuY3Rpb24gc3Bhd25TZGtUb29sKGV4ZSwgcGFyYW1zKSB7XG4gIHJldHVybiBzcGF3blByb21pc2UoZmluZFNka1Rvb2woZXhlKSwgcGFyYW1zKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRDZXJ0aWZpY2F0ZShwdWJsaXNoZXJOYW1lLCBvdXRQYXRoKSB7XG4gIGNvbnN0IGRlZmF1bHRQdmsgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAncmVzJywgJ2RlZmF1bHQucHZrJyk7XG4gIGNvbnN0IHRhcmdldENlcnQgPSBwYXRoLmpvaW4ob3V0UGF0aCwgJ2RlZmF1bHQuY2VyJyk7XG4gIGNvbnN0IHRhcmdldFBmeCA9IHBhdGguam9pbihvdXRQYXRoLCAnZGVmYXVsdC5wZngnKTtcblxuICBhd2FpdCBzcGF3blNka1Rvb2woXG4gICAgJ21ha2VjZXJ0LmV4ZScsXG4gICAgWyctcicsICctaCcsICcwJywgJy1uJywgYENOPSR7cHVibGlzaGVyTmFtZX1gLCAnLWVrdScsICcxLjMuNi4xLjUuNS43LjMuMycsICctcGUnLCAnLXN2JywgZGVmYXVsdFB2aywgdGFyZ2V0Q2VydF0pO1xuXG4gIGF3YWl0IHNwYXduU2RrVG9vbCgncHZrMnBmeC5leGUnLCBbJy1wdmsnLCBkZWZhdWx0UHZrLCAnLXNwYycsIHRhcmdldENlcnQsICctcGZ4JywgdGFyZ2V0UGZ4XSk7XG5cbiAgcmV0dXJuIHRhcmdldFBmeDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKHsgZGlyLCBhcHBOYW1lLCB0YXJnZXRBcmNoLCBmb3JnZUNvbmZpZywgcGFja2FnZUpTT04gfSkgPT4ge1xuICBjb25zdCB3aW5kb3dzU3RvcmUgPSByZXF1aXJlKCdlbGVjdHJvbi13aW5kb3dzLXN0b3JlJyk7XG5cbiAgY29uc3Qgb3V0UGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIGAuLi9tYWtlL2FwcHgvJHt0YXJnZXRBcmNofWApO1xuICBhd2FpdCBlbnN1cmVEaXJlY3Rvcnkob3V0UGF0aCk7XG5cbiAgY29uc3QgdXNlckNvbmZpZyA9IGNvbmZpZ0ZuKGZvcmdlQ29uZmlnLndpbmRvd3NTdG9yZUNvbmZpZywgdGFyZ2V0QXJjaCk7XG5cbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHB1Ymxpc2hlcjogcGFja2FnZUpTT04uYXV0aG9yLFxuICAgIGZsYXR0ZW46IGZhbHNlLFxuICAgIGRlcGxveTogZmFsc2UsXG4gICAgcGFja2FnZVZlcnNpb246IGAke3BhY2thZ2VKU09OLnZlcnNpb259LjBgLFxuICAgIHBhY2thZ2VOYW1lOiBhcHBOYW1lLnJlcGxhY2UoLy0vZywgJycpLFxuICAgIHBhY2thZ2VEaXNwbGF5TmFtZTogYXBwTmFtZSxcbiAgICBwYWNrYWdlRGVzY3JpcHRpb246IHBhY2thZ2VKU09OLmRlc2NyaXB0aW9uIHx8IGFwcE5hbWUsXG4gICAgcGFja2FnZUV4ZWN1dGFibGU6IGBhcHBcXFxcJHthcHBOYW1lfS5leGVgLFxuICAgIHdpbmRvd3NLaXQ6IHVzZXJDb25maWcud2luZG93c0tpdCB8fCBwYXRoLmRpcm5hbWUoZmluZFNka1Rvb2woJ21ha2VhcHB4LmV4ZScpKSxcbiAgfSwgdXNlckNvbmZpZywge1xuICAgIGlucHV0RGlyZWN0b3J5OiBkaXIsXG4gICAgb3V0cHV0RGlyZWN0b3J5OiBvdXRQYXRoLFxuICB9KTtcblxuICBpZiAoIW9wdHMuZGV2Q2VydCkge1xuICAgIG9wdHMuZGV2Q2VydCA9IGF3YWl0IGNyZWF0ZURlZmF1bHRDZXJ0aWZpY2F0ZShvcHRzLnB1Ymxpc2hlciwgb3V0UGF0aCk7XG4gIH1cblxuICBpZiAoIW9wdHMucHVibGlzaGVyLm1hdGNoKC9eQ049LykpIHtcbiAgICBvcHRzLnB1Ymxpc2hlciA9IGBDTj0ke29wdHMucHVibGlzaGVyfWA7XG4gIH1cblxuICBpZiAob3B0cy5wYWNrYWdlVmVyc2lvbi5tYXRjaCgvLS8pKSB7XG4gICAgaWYgKG9wdHMubWFrZVZlcnNpb25XaW5TdG9yZUNvbXBhdGlibGUpIHtcbiAgICAgIGNvbnN0IG5vQmV0YSA9IG9wdHMucGFja2FnZVZlcnNpb24ucmVwbGFjZSgvLS4qLywgJycpO1xuICAgICAgb3B0cy5wYWNrYWdlVmVyc2lvbiA9IGAke25vQmV0YX0uMGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVyciA9IFwiV2luZG93cyBTdG9yZSB2ZXJzaW9uIG51bWJlcnMgZG9uJ3Qgc3VwcG9ydCBzZW12ZXIgYmV0YSB0YWdzLiBUb1wiICtcbiAgICAgICAgJ2F1dG9tYXRpY2FsbHkgZml4IHRoaXMsIHNldCBtYWtlVmVyc2lvbldpblN0b3JlQ29tcGF0aWJsZSB0byB0cnVlIG9yICcgK1xuICAgICAgICAnZXhwbGljaXRseSBzZXQgcGFja2FnZVZlcnNpb24gdG8gYSB2ZXJzaW9uIG9mIHRoZSBmb3JtYXQgWC5ZLlouQSc7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZSBvcHRzLm1ha2VWZXJzaW9uV2luU3RvcmVDb21wYXRpYmxlO1xuXG4gIGF3YWl0IHdpbmRvd3NTdG9yZShvcHRzKTtcblxuICByZXR1cm4gW3BhdGgucmVzb2x2ZShvdXRQYXRoLCBgJHtvcHRzLnBhY2thZ2VOYW1lfS5hcHB4YCldO1xufTtcbiJdfQ==