roc
Version:
Build modern web applications easily
97 lines (73 loc) • 2.84 kB
JavaScript
;
exports.__esModule = true;
exports.getVersions = getVersions;
exports.get = get;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
require('source-map-support/register');
var _request = require('request');
var _request2 = _interopRequireDefault(_request);
var _tar = require('tar');
var _tar2 = _interopRequireDefault(_tar);
var _zlib = require('zlib');
var _zlib2 = _interopRequireDefault(_zlib);
var _temp = require('temp');
var _temp2 = _interopRequireDefault(_temp);
// Automatically track and cleanup files at exit
_temp2['default'].track();
/**
* Fetches an array of all the tags for a Github repo, used as possible versions for a template.
*
* @param {string} packageName - A package name, expected to match "username/repo"
*
* @returns {object[]} - Array of tags/versions for the package
*/
function getVersions(packageName) {
if (!packageName) {
throw new Error('No packageName was given.');
}
return new Promise(function (resolve, reject) {
_request2['default'].get({
url: 'https://api.github.com/repos/' + packageName + '/tags',
headers: {
'User-Agent': 'request'
}
}, function (error, resp, body) {
if (error) {
return reject(error);
}
if (resp.statusCode !== 200) {
return reject(new Error(packageName + ': returned ' + resp.statusCode + '\n\nbody:\n' + body));
}
return resolve(JSON.parse(body));
});
});
}
/**
* Fetches the tarball for a repository on Github.
*
* @param {string} packageName - A package name, expected to match "username/repo".
* @param {string} [version="master"] The tag/version to fetch.
*
* @returns {string} The path to the temporary directory where the unarchived tarball is located.
*/
function get(packageName) {
var version = arguments.length <= 1 || arguments[1] === undefined ? 'master' : arguments[1];
if (!packageName) {
throw new Error('No packageName was given.');
}
return new Promise(function (resolve, reject) {
_temp2['default'].mkdir('roc', function (err, dirPath) {
if (err) {
return reject(err);
}
/* eslint-disable new-cap */
var writeTar = _tar2['default'].Extract({ strip: 1, path: dirPath });
/* eslint-enable */
writeTar.on('finish', function () {
return resolve(dirPath);
});
_request2['default'].get('http://github.com/' + packageName + '/tarball/' + version).on('error', reject).pipe(_zlib2['default'].createGunzip()).on('error', reject).pipe(writeTar).on('error', reject);
});
});
}
//# sourceMappingURL=github.js.map