npm-fetch-changelog
Version:
fetch the changelog for an npm package from GitHub
171 lines (170 loc) • 6.36 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _chalk = _interopRequireDefault(require("chalk"));
var _yargs = _interopRequireDefault(require("yargs/yargs"));
var _path = _interopRequireDefault(require("path"));
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _semver = _interopRequireDefault(require("semver"));
var _index = require("../index.js");
var _debug = require("../util/debug.js");
/* eslint-env node */
var yargsInstance = (0, _yargs["default"])(process.argv.slice(2)).usage("Usage: $0 <pkg>[@<range>]\n\n Prints changelog entries for an npm package from GitHub.\n (Other repository hosts aren't currently supported.)").options({
range: {
alias: 'r',
describe: 'semver version range to get changelog entries for',
type: 'string',
coerce: function coerce(value) {
if (!_semver["default"].validRange(value)) throw new Error("invalid --range: ".concat(value));
return value;
}
},
json: {
describe: 'output json',
type: 'boolean'
},
major: {
alias: 'M',
describe: 'only include major releases',
type: 'boolean'
},
minor: {
alias: 'm',
describe: 'only include minor/major releases',
type: 'boolean'
},
pre: {
describe: 'include prereleases',
type: 'boolean'
}
}).help();
function go() {
return _go.apply(this, arguments);
}
function _go() {
_go = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var argv, _argv$_, pkg, range, json, filters, match, _yield$fs$readJson, version, include, changelog, _version, _changelog$_version, header, body, error;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return yargsInstance.argv;
case 2:
argv = _context.sent;
_argv$_ = (0, _slicedToArray2["default"])(argv._, 1), pkg = _argv$_[0], range = argv.range;
json = argv.json;
(0, _debug.debug)('process.version:', process.version);
(0, _debug.debug)('process.execPath:', process.execPath);
(0, _debug.debug)(argv);
if (typeof pkg !== 'string') {
yargsInstance.showHelp();
process.exit(1);
}
filters = [].concat((0, _toConsumableArray2["default"])(argv.major ? ['major'] : []), (0, _toConsumableArray2["default"])(argv.minor ? ['minor'] : []), (0, _toConsumableArray2["default"])(argv.pre ? ['pre'] : []));
if (!(filters.length > 1)) {
_context.next = 12;
break;
}
throw new Error("can't combine ".concat(filters.map(function (f) {
return "--".concat(f);
}).join(' and ')));
case 12:
if (range) {
_context.next = 29;
break;
}
match = /^(@?[^@]+)@(.+)$/.exec(pkg);
if (!match) {
_context.next = 19;
break;
}
pkg = match[1];
range = match[2];
_context.next = 29;
break;
case 19:
_context.prev = 19;
_context.next = 22;
return _fsExtra["default"].readJson(require.resolve(_path["default"].join(pkg, 'package.json'), {
paths: [process.cwd()]
}));
case 22:
_yield$fs$readJson = _context.sent;
version = _yield$fs$readJson.version;
range = ">".concat(version);
_context.next = 29;
break;
case 27:
_context.prev = 27;
_context.t0 = _context["catch"](19);
case 29:
_context.prev = 29;
include = {
range: range,
prerelease: argv.pre,
minor: argv.pre || !argv.major,
patch: argv.pre || !argv.major && !argv.minor
}; // eslint-disable-next-line no-console
console.error("fetching ".concat((0, _index.describeFilter)({
pkg: pkg,
include: include,
highlight: !process.env.CI && process.stdout.isTTY
}), "..."));
_context.next = 34;
return (0, _index.fetchChangelog)(pkg, {
include: include
});
case 34:
changelog = _context.sent;
if (!json) {
_context.next = 39;
break;
}
process.stdout.write(JSON.stringify(changelog, null, 2));
_context.next = 50;
break;
case 39:
_context.t1 = _regenerator["default"].keys(changelog);
case 40:
if ((_context.t2 = _context.t1()).done) {
_context.next = 50;
break;
}
_version = _context.t2.value;
if (Object.prototype.hasOwnProperty.call(changelog, _version)) {
_context.next = 44;
break;
}
return _context.abrupt("continue", 40);
case 44:
_changelog$_version = changelog[_version], header = _changelog$_version.header, body = _changelog$_version.body, error = _changelog$_version.error;
process.stdout.write(_chalk["default"].bold(header) + '\n\n');
if (body) process.stdout.write(body + '\n\n');
if (error) {
process.stdout.write("Failed to get changelog: ".concat(error.stack, "\n\n"));
}
_context.next = 40;
break;
case 50:
process.exit(0);
_context.next = 57;
break;
case 53:
_context.prev = 53;
_context.t3 = _context["catch"](29);
// eslint-disable-next-line no-console
console.error(_context.t3);
process.exit(1);
case 57:
case "end":
return _context.stop();
}
}, _callee, null, [[19, 27], [29, 53]]);
}));
return _go.apply(this, arguments);
}
go();