Files
2020-03-02 14:53:23 +07:00

289 lines
7.6 KiB
JavaScript

"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard.js");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.need = need;
exports.system = void 0;
var _index = _interopRequireDefault(require("@babel/runtime/regenerator/index.js"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator.js"));
var system = _interopRequireWildcard(require("./system.js"));
exports.system = system;
var _places = require("./places.js");
var _log = require("./log.js");
var _cloud = require("./cloud.js");
var _build = _interopRequireDefault(require("./build.js"));
var _fsExtra = require("fs-extra");
var _patches = _interopRequireDefault(require("../patches/patches.json"));
var _path = _interopRequireDefault(require("path"));
var _semver = _interopRequireDefault(require("semver"));
var _package = require("../package.json");
var cloud = new _cloud.Cloud({
owner: 'zeit',
repo: 'pkg-fetch'
});
function need() {
return _need.apply(this, arguments);
}
function _need() {
_need = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_index.default.mark(function _callee() {
var opts,
nodeRange,
platform,
arch,
forceFetch,
forceBuild,
dryRun,
satisfyingNodeVersion,
nodeVersion,
fetched,
built,
remote,
fetchFailed,
_args = arguments;
return _index.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
satisfyingNodeVersion = function _ref() {
var versions = Object.keys(_patches.default).filter(function (nv) {
return _semver.default.satisfies(nv, nodeRange) || nodeRange === 'latest';
}).sort(function (nv1, nv2) {
return _semver.default.gt(nv1, nv2) ? 1 : -1;
});
return versions.pop();
};
opts = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};
// eslint-disable-line complexity
nodeRange = opts.nodeRange, platform = opts.platform, arch = opts.arch, forceFetch = opts.forceFetch, forceBuild = opts.forceBuild, dryRun = opts.dryRun;
if (nodeRange) {
_context.next = 5;
break;
}
throw (0, _log.wasReported)('nodeRange not specified');
case 5:
if (platform) {
_context.next = 7;
break;
}
throw (0, _log.wasReported)('platform not specified');
case 7:
if (arch) {
_context.next = 9;
break;
}
throw (0, _log.wasReported)('arch not specified');
case 9:
nodeRange = (0, system.abiToNodeRange)(nodeRange); // 'm48' -> 'node6'
if ((0, system.isValidNodeRange)(nodeRange)) {
_context.next = 12;
break;
}
throw (0, _log.wasReported)('nodeRange must start with \'node\'');
case 12:
if (nodeRange !== 'latest') {
nodeRange = 'v' + nodeRange.slice(4); // 'node6' -> 'v6' for semver
}
platform = (0, system.toFancyPlatform)(platform); // win32 -> win
arch = (0, system.toFancyArch)(arch); // ia32 -> x86
nodeVersion = satisfyingNodeVersion();
if (nodeVersion) {
_context.next = 18;
break;
}
throw (0, _log.wasReported)(`No available node version satisfies '${opts.nodeRange}'`);
case 18:
fetched = (0, _places.localPlace)({
from: 'fetched',
arch,
nodeVersion,
platform,
version: _package.version
});
built = (0, _places.localPlace)({
from: 'built',
arch,
nodeVersion,
platform,
version: _package.version
});
remote = (0, _places.remotePlace)({
arch,
nodeVersion,
platform,
version: _package.version
});
if (forceBuild) {
_context.next = 28;
break;
}
_context.next = 24;
return (0, _fsExtra.exists)(fetched);
case 24:
if (!_context.sent) {
_context.next = 28;
break;
}
if (!dryRun) {
_context.next = 27;
break;
}
return _context.abrupt("return", 'exists');
case 27:
return _context.abrupt("return", fetched);
case 28:
if (forceFetch) {
_context.next = 36;
break;
}
_context.next = 31;
return (0, _fsExtra.exists)(built);
case 31:
if (!_context.sent) {
_context.next = 36;
break;
}
if (!dryRun) {
_context.next = 34;
break;
}
return _context.abrupt("return", 'exists');
case 34:
if (forceBuild) _log.log.info('Reusing base binaries built locally:', built);
return _context.abrupt("return", built);
case 36:
if (forceBuild) {
_context.next = 44;
break;
}
if (!dryRun) {
_context.next = 39;
break;
}
return _context.abrupt("return", 'fetched');
case 39:
_context.next = 41;
return cloud.download(remote, fetched);
case 41:
if (!_context.sent) {
_context.next = 43;
break;
}
return _context.abrupt("return", fetched);
case 43:
fetchFailed = true;
case 44:
if (!dryRun && fetchFailed) {
_log.log.info('Not found in GitHub releases:', JSON.stringify(remote));
}
if (!dryRun) {
_log.log.info('Building base binary from source:', _path.default.basename(built));
}
if (!(system.hostPlatform !== platform)) {
_context.next = 48;
break;
}
throw (0, _log.wasReported)(`Not able to build for '${opts.platform}' here, only for '${system.hostPlatform}'`);
case 48:
if (!(system.hostArch !== arch)) {
_context.next = 50;
break;
}
throw (0, _log.wasReported)(`Not able to build for '${opts.arch}' here, only for '${system.hostArch}'`);
case 50:
if (!(system.knownArchs.indexOf(arch) < 0)) {
_context.next = 52;
break;
}
throw (0, _log.wasReported)(`Unknown arch '${opts.arch}'. Specify ${system.knownArchs.join(', ')}`);
case 52:
if (!dryRun) {
_context.next = 54;
break;
}
return _context.abrupt("return", 'built');
case 54:
_context.next = 56;
return (0, _build.default)(nodeVersion, arch, built);
case 56:
return _context.abrupt("return", built);
case 57:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _need.apply(this, arguments);
}