UNPKG

npmc

Version:

a package manager for JavaScript

135 lines (123 loc) 4.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = UpdatePicker; var _react = _interopRequireDefault(require("react")); var _ink = require("ink"); var _select = require("./select"); var _semver = _interopRequireDefault(require("semver")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } const types = ['dependencies', 'optionalDependencies', 'devDependencies']; function UpdatePicker({ outdated = {}, stdin, onSubmit, unicode }) { outdated = Object.keys(outdated).map(k => { return _objectSpread({ name: k }, outdated[k]); }).sort((x, y) => { if (x.type === y.type) { return 0; } else if (types.indexOf(x.type) > types.indexOf(y.type)) { return 1; } else { return -1; } }); const major = filterSemver(outdated, 'major'); const minor = filterSemver(outdated, 'minor'); const patch = filterSemver(outdated, 'patch'); const preDiffs = new Set(['premajor', 'preminor', 'prepatch', 'prerelease']); const pre = filterSemver(outdated, preDiffs); const other = outdated.filter(out => !_semver.default.valid(out.current) || !_semver.default.valid(out.wanted)); return _react.default.createElement("div", null, _react.default.createElement(_ink.Text, { bold: true }, _react.default.createElement(_ink.Color, { green: true }, "?"), " select packages to update"), _react.default.createElement(_select.Select, { stdin: stdin, onSubmit: onSubmit, unicode: unicode }, major.length && _react.default.createElement(_select.OptGroup, { label: _react.default.createElement(_ink.Color, { red: true }, '\napi-breaking changes') }, major.map(out => { return _react.default.createElement(_select.Option, { key: out.name, value: out.name }, _react.default.createElement(Outdated, { item: out })); })), minor.length && _react.default.createElement(_select.OptGroup, { label: _react.default.createElement(_ink.Color, { blue: true }, '\nnew features') }, minor.map(out => { return _react.default.createElement(_select.Option, { key: out.name, value: out.name }, _react.default.createElement(Outdated, { item: out })); })), patch.length && _react.default.createElement(_select.OptGroup, { label: '\nbugfixes and other small changes' }, patch.map(out => { return _react.default.createElement(_select.Option, { key: out.name, value: out.name }, _react.default.createElement(Outdated, { item: out })); })), pre.length && _react.default.createElement(_select.OptGroup, { label: '\nprerelease updates' }, pre.map(out => { return _react.default.createElement(_select.Option, { key: out.name, value: out.name }, _react.default.createElement(Outdated, { item: out })); })), other.length && _react.default.createElement(_select.OptGroup, { label: _react.default.createElement(_ink.Color, { yellow: true }, '\nother') }, other.map(out => { return _react.default.createElement(_select.Option, { key: out.name, value: out.name }, _react.default.createElement(Outdated, { item: out })); })))); } function Outdated({ item: { name, type, current, wanted, homepage } }) { return _react.default.createElement(_ink.Text, null, name, type && _react.default.createElement(_ink.Color, { green: true }, " ", type.replace(/endencies/i, '')), _react.default.createElement(_ink.Text, { bold: true }, " ", current), ' >', _react.default.createElement(_ink.Text, { bold: true }, " ", wanted), _react.default.createElement(_ink.Color, { blue: true }, " ", homepage)); } function filterSemver(outdated, type) { return outdated.filter(out => { return _semver.default.valid(out.wanted, true) && _semver.default.valid(out.current, true) && (typeof type === 'string' ? _semver.default.diff(out.current, out.wanted, true) === type : type.has(_semver.default.diff(out.current, out.wanted, true))); }); }