UNPKG

npm-fetch-changelog

Version:

fetch the changelog for an npm package from GitHub

171 lines (170 loc) 6.36 kB
#!/usr/bin/env node "use strict"; 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();