UNPKG

pkg-fetch

Version:

270 lines (193 loc) 8.09 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.system = exports.need = undefined; var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var need = exports.need = function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var nodeRange, platform, arch, forceFetch, forceBuild, dryRun, nodeVersions, nodeVersion, fetched, built, remote, fetchFailed; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 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 = 3; break; } throw (0, _log.wasReported)('nodeRange not specified'); case 3: if (platform) { _context.next = 5; break; } throw (0, _log.wasReported)('platform not specified'); case 5: if (arch) { _context.next = 7; break; } throw (0, _log.wasReported)('arch not specified'); case 7: nodeRange = (0, _system.abiToNodeRange)(nodeRange); // 'm48' -> 'node6' if ((0, _system.isValidNodeRange)(nodeRange)) { _context.next = 10; break; } throw (0, _log.wasReported)('nodeRange must start with \'node\''); case 10: 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 nodeVersions = (0, _keys2.default)(_patches2.default).filter(function (nodeVersion) { return _semver2.default.satisfies(nodeVersion, nodeRange) || nodeRange === 'latest'; }).sort(function (nv1, nv2) { return _semver2.default.gt(nv1, nv2); }); if (nodeVersions.length) { _context.next = 16; break; } throw (0, _log.wasReported)('No available node version satisfies \'' + opts.nodeRange + '\''); case 16: nodeVersion = nodeVersions.pop(); fetched = (0, _places.localPlace)({ from: 'fetched', arch: arch, nodeVersion: nodeVersion, platform: platform, version: _package.version }); built = (0, _places.localPlace)({ from: 'built', arch: arch, nodeVersion: nodeVersion, platform: platform, version: _package.version }); remote = (0, _places.remotePlace)({ arch: arch, nodeVersion: nodeVersion, platform: platform, version: _package.version }); fetchFailed = void 0; 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:', (0, _stringify2.default)(remote)); } if (!dryRun) { _log.log.info('Building base binary from source:', _path2.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, _build2.default)(nodeVersion, arch, built); case 56: return _context.abrupt('return', built); case 57: case 'end': return _context.stop(); } } }, _callee, this); })); return function need() { return _ref.apply(this, arguments); }; }(); var _system = require('./system.js'); var system = _interopRequireWildcard(_system); var _places = require('./places.js'); var _log = require('./log.js'); var _cloud = require('./cloud.js'); var _build = require('./build.js'); var _build2 = _interopRequireDefault(_build); var _fsExtra = require('fs-extra'); var _patches = require('../patches/patches.json'); var _patches2 = _interopRequireDefault(_patches); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _semver = require('semver'); var _semver2 = _interopRequireDefault(_semver); var _package = require('../package.json'); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var cloud = new _cloud.Cloud({ owner: 'zeit', repo: 'pkg-fetch' }); exports.system = system;