pkg-fetch
Version:
Github Releases page of this project contains base binaries, used by `pkg` to create executables. `pkg-fetch` npm package downloads base binaries or compiles them from source.
392 lines (303 loc) • 11.2 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Cloud = undefined;
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _fsExtra = require('fs-extra');
var _github = require('./github.js');
var _assert = require('assert');
var _assert2 = _interopRequireDefault(_assert);
var _copyFile = require('./copy-file.js');
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function uniqueName(name, names) {
if (names.indexOf(name) < 0) return name;
var newName = void 0;
var counter = 0;
while (true) {
newName = name + '-new-' + counter;
if (names.indexOf(newName) < 0) return newName;
counter += 1;
}
}
var Cloud = exports.Cloud = function () {
function Cloud(_ref) {
var owner = _ref.owner,
repo = _ref.repo;
(0, _classCallCheck3.default)(this, Cloud);
this.gh = new _github.GitHub({ owner: owner, repo: repo });
}
(0, _createClass3.default)(Cloud, [{
key: 'upload',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(local, remote) {
var tag, release, names, name;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
tag = remote.tag;
_context.next = 3;
return this.gh.getRelease(tag);
case 3:
release = _context.sent;
if (release) {
_context.next = 8;
break;
}
_context.next = 7;
return this.gh.getReleaseDraft(tag);
case 7:
release = _context.sent;
case 8:
if (release) {
_context.next = 12;
break;
}
_context.next = 11;
return this.gh.createRelease(tag);
case 11:
release = _context.sent;
case 12:
names = release.assets.map(function (_ref3) {
var name = _ref3.name;
(0, _assert2.default)(name);
return name;
});
name = uniqueName(remote.name, names);
_context.next = 16;
return this.gh.uploadAsset(local, release, name);
case 16:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function upload(_x, _x2) {
return _ref2.apply(this, arguments);
}
return upload;
}()
}, {
key: 'uploadMany',
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(items) {
var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, item, local, remote;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context2.prev = 3;
_iterator = (0, _getIterator3.default)(items);
case 5:
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
_context2.next = 13;
break;
}
item = _step.value;
local = item.local, remote = item.remote;
_context2.next = 10;
return this.upload(local, remote);
case 10:
_iteratorNormalCompletion = true;
_context2.next = 5;
break;
case 13:
_context2.next = 19;
break;
case 15:
_context2.prev = 15;
_context2.t0 = _context2['catch'](3);
_didIteratorError = true;
_iteratorError = _context2.t0;
case 19:
_context2.prev = 19;
_context2.prev = 20;
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
case 22:
_context2.prev = 22;
if (!_didIteratorError) {
_context2.next = 25;
break;
}
throw _iteratorError;
case 25:
return _context2.finish(22);
case 26:
return _context2.finish(19);
case 27:
case 'end':
return _context2.stop();
}
}
}, _callee2, this, [[3, 15, 19, 27], [20,, 22, 26]]);
}));
function uploadMany(_x3) {
return _ref4.apply(this, arguments);
}
return uploadMany;
}()
}, {
key: 'download',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(remote, local) {
var tag, tempFile, short, ok, release, assets, asset;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
tag = remote.tag;
tempFile = local + '.downloading';
_context3.next = 4;
return (0, _fsExtra.mkdirp)(_path2.default.dirname(tempFile));
case 4:
short = _path2.default.basename(local);
_context3.next = 7;
return this.gh.tryDirectly(tag, remote.name, tempFile, short);
case 7:
ok = _context3.sent;
if (ok) {
_context3.next = 25;
break;
}
_context3.next = 11;
return this.gh.getRelease(tag);
case 11:
release = _context3.sent;
if (release) {
_context3.next = 16;
break;
}
_context3.next = 15;
return this.gh.getReleaseDraft(tag);
case 15:
release = _context3.sent;
case 16:
if (release) {
_context3.next = 18;
break;
}
return _context3.abrupt('return', false);
case 18:
assets = release.assets.filter(function (_ref6) {
var name = _ref6.name;
(0, _assert2.default)(name);
return name === remote.name;
});
if (assets.length) {
_context3.next = 21;
break;
}
return _context3.abrupt('return', false);
case 21:
(0, _assert2.default)(assets.length === 1);
asset = assets[0];
_context3.next = 25;
return this.gh.downloadUrl(asset.url, tempFile, short);
case 25:
_context3.next = 27;
return (0, _fsExtra.remove)(local);
case 27:
_context3.next = 29;
return (0, _copyFile.moveFile)(tempFile, local);
case 29:
_context3.next = 31;
return (0, _fsExtra.remove)(tempFile);
case 31:
return _context3.abrupt('return', true);
case 32:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
function download(_x4, _x5) {
return _ref5.apply(this, arguments);
}
return download;
}()
}, {
key: 'downloadMany',
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(items) {
var _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, item, remote, local;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_iteratorNormalCompletion2 = true;
_didIteratorError2 = false;
_iteratorError2 = undefined;
_context4.prev = 3;
_iterator2 = (0, _getIterator3.default)(items);
case 5:
if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) {
_context4.next = 13;
break;
}
item = _step2.value;
remote = item.remote, local = item.local;
_context4.next = 10;
return this.download(remote, local);
case 10:
_iteratorNormalCompletion2 = true;
_context4.next = 5;
break;
case 13:
_context4.next = 19;
break;
case 15:
_context4.prev = 15;
_context4.t0 = _context4['catch'](3);
_didIteratorError2 = true;
_iteratorError2 = _context4.t0;
case 19:
_context4.prev = 19;
_context4.prev = 20;
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
case 22:
_context4.prev = 22;
if (!_didIteratorError2) {
_context4.next = 25;
break;
}
throw _iteratorError2;
case 25:
return _context4.finish(22);
case 26:
return _context4.finish(19);
case 27:
case 'end':
return _context4.stop();
}
}
}, _callee4, this, [[3, 15, 19, 27], [20,, 22, 26]]);
}));
function downloadMany(_x6) {
return _ref7.apply(this, arguments);
}
return downloadMany;
}()
}]);
return Cloud;
}();