npm-upgrade
Advanced tools
Comparing version
@@ -13,2 +13,10 @@ # Changelog | ||
## 1.3.0 | ||
* **New Feature** | ||
* Show list of packages that will be updated in the end of upgrade process (#18) | ||
* **Internal** | ||
* Drop support for Node 4 | ||
* Update deps | ||
## 1.2.0 | ||
@@ -15,0 +23,0 @@ * **Internal** |
@@ -5,6 +5,2 @@ 'use strict'; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _extends2 = require('babel-runtime/helpers/extends'); | ||
@@ -24,26 +20,11 @@ | ||
exports.default = function () { | ||
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(question) { | ||
var _ref2, answer; | ||
exports.default = (() => { | ||
var _ref = (0, _asyncToGenerator3.default)(function* (question) { | ||
var _ref2 = yield _inquirer2.default.prompt([(0, _extends3.default)({}, question, { name: 'answer' })]); | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return _inquirer2.default.prompt([(0, _extends3.default)({}, question, { name: 'answer' })]); | ||
const answer = _ref2.answer; | ||
case 2: | ||
_ref2 = _context.sent; | ||
answer = _ref2.answer; | ||
return _context.abrupt('return', answer); | ||
return answer; | ||
}); | ||
case 5: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function askUser(_x) { | ||
@@ -54,2 +35,2 @@ return _ref.apply(this, arguments); | ||
return askUser; | ||
}(); | ||
})(); |
@@ -7,3 +7,3 @@ "use strict"; | ||
return function () { | ||
return asyncFn.apply(this, arguments).catch(function (err) { | ||
return asyncFn.apply(this, arguments).catch(err => { | ||
console.error(err); | ||
@@ -10,0 +10,0 @@ process.exit(1); |
@@ -6,6 +6,2 @@ 'use strict'; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
@@ -15,122 +11,68 @@ | ||
var findModuleChangelogUrl = exports.findModuleChangelogUrl = function () { | ||
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(moduleName) { | ||
var remoteChangelogUrlsDbUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_REMOTE_CHANGELOGS_DB_URL; | ||
let findModuleChangelogUrl = exports.findModuleChangelogUrl = (() => { | ||
var _ref2 = (0, _asyncToGenerator3.default)(function* (moduleName, remoteChangelogUrlsDbUrl = DEFAULT_REMOTE_CHANGELOGS_DB_URL) { | ||
let changelogUrls; | ||
var changelogUrls, _ref3, changelog, repository, _ref4, fileUrlBuilder, releasesPageUrl, possibleChangelogUrls; | ||
if (remoteChangelogUrlsDbUrl) { | ||
changelogUrls = yield fetchRemoteDb(remoteChangelogUrlsDbUrl); | ||
} | ||
return _regenerator2.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
changelogUrls = void 0; | ||
changelogUrls = changelogUrls || require('../db/changelogUrls.json'); | ||
if (!remoteChangelogUrlsDbUrl) { | ||
_context2.next = 5; | ||
break; | ||
} | ||
if (changelogUrls[moduleName]) { | ||
return changelogUrls[moduleName]; | ||
} | ||
_context2.next = 4; | ||
return fetchRemoteDb(remoteChangelogUrlsDbUrl); | ||
var _ref3 = yield (0, _packageUtils.getModuleInfo)(moduleName); | ||
case 4: | ||
changelogUrls = _context2.sent; | ||
const changelog = _ref3.changelog, | ||
repository = _ref3.repository; | ||
case 5: | ||
changelogUrls = changelogUrls || require('../db/changelogUrls.json'); | ||
if (changelog) { | ||
return changelog; | ||
} | ||
if (!changelogUrls[moduleName]) { | ||
_context2.next = 8; | ||
break; | ||
} | ||
if (repository && repository.url) { | ||
// If repository is located on one of known hostings, then we will try to request | ||
// some common changelog files from there or return URL for "Releases" page | ||
var _ref4 = (0, _repositoryUtils.getRepositoryInfo)(repository.url) || {}; | ||
return _context2.abrupt('return', changelogUrls[moduleName]); | ||
const fileUrlBuilder = _ref4.fileUrlBuilder, | ||
releasesPageUrl = _ref4.releasesPageUrl; | ||
case 8: | ||
_context2.next = 10; | ||
return (0, _packageUtils.getModuleInfo)(moduleName); | ||
case 10: | ||
_ref3 = _context2.sent; | ||
changelog = _ref3.changelog; | ||
repository = _ref3.repository; | ||
if (fileUrlBuilder) { | ||
const possibleChangelogUrls = _lodash2.default.map(COMMON_CHANGELOG_FILES, fileUrlBuilder); | ||
if (!changelog) { | ||
_context2.next = 15; | ||
break; | ||
} | ||
try { | ||
return yield _bluebird2.default.any(_lodash2.default.map(possibleChangelogUrls, function (url) { | ||
return _bluebird2.default.try(function () { | ||
return (0, _got2.default)(url); | ||
}).return(url); | ||
})); | ||
} catch (err) { | ||
if (!(err instanceof _bluebird2.default.AggregateError)) throw err; | ||
} | ||
} | ||
return _context2.abrupt('return', changelog); | ||
case 15: | ||
if (!(repository && repository.url)) { | ||
_context2.next = 38; | ||
break; | ||
} | ||
// If repository is located on one of known hostings, then we will try to request | ||
// some common changelog files from there or return URL for "Releases" page | ||
_ref4 = (0, _repositoryUtils.getRepositoryInfo)(repository.url) || {}, fileUrlBuilder = _ref4.fileUrlBuilder, releasesPageUrl = _ref4.releasesPageUrl; | ||
if (!fileUrlBuilder) { | ||
_context2.next = 29; | ||
break; | ||
} | ||
possibleChangelogUrls = _lodash2.default.map(COMMON_CHANGELOG_FILES, fileUrlBuilder); | ||
_context2.prev = 19; | ||
_context2.next = 22; | ||
return _bluebird2.default.any(_lodash2.default.map(possibleChangelogUrls, function (url) { | ||
return _bluebird2.default.try(function () { | ||
return (0, _got2.default)(url); | ||
}).return(url); | ||
})); | ||
case 22: | ||
return _context2.abrupt('return', _context2.sent); | ||
case 25: | ||
_context2.prev = 25; | ||
_context2.t0 = _context2['catch'](19); | ||
if (_context2.t0 instanceof _bluebird2.default.AggregateError) { | ||
_context2.next = 29; | ||
break; | ||
} | ||
throw _context2.t0; | ||
case 29: | ||
if (!releasesPageUrl) { | ||
_context2.next = 38; | ||
break; | ||
} | ||
_context2.prev = 30; | ||
_context2.next = 33; | ||
return (0, _got2.default)(releasesPageUrl); | ||
case 33: | ||
return _context2.abrupt('return', releasesPageUrl); | ||
case 36: | ||
_context2.prev = 36; | ||
_context2.t1 = _context2['catch'](30); | ||
case 38: | ||
return _context2.abrupt('return', null); | ||
case 39: | ||
case 'end': | ||
return _context2.stop(); | ||
if (releasesPageUrl) { | ||
try { | ||
// Checking `releasesUrl`... | ||
yield (0, _got2.default)(releasesPageUrl); | ||
// `releasesUrl` is fine | ||
return releasesPageUrl; | ||
} catch (err) { | ||
// `releasesPageUrl` is broken | ||
} | ||
} | ||
}, _callee2, this, [[19, 25], [30, 36]]); | ||
})); | ||
} | ||
return function findModuleChangelogUrl(_x2) { | ||
return null; | ||
}); | ||
return function findModuleChangelogUrl(_x) { | ||
return _ref2.apply(this, arguments); | ||
}; | ||
}(); | ||
})(); | ||
@@ -155,40 +97,22 @@ var _bluebird = require('bluebird'); | ||
var pkg = require('../package.json'); | ||
const pkg = require('../package.json'); | ||
var COMMON_CHANGELOG_FILES = ['CHANGELOG.md', 'History.md', 'CHANGES.md', 'CHANGELOG']; | ||
var CURRENT_REPOSITORY_ID = (0, _repositoryUtils.getRepositoryInfo)(pkg.repository.url).repositoryId; | ||
var DEFAULT_REMOTE_CHANGELOGS_DB_URL = `https://raw.githubusercontent.com/${CURRENT_REPOSITORY_ID}/master/db/changelogUrls.json`; | ||
const COMMON_CHANGELOG_FILES = ['CHANGELOG.md', 'History.md', 'CHANGES.md', 'CHANGELOG']; | ||
const CURRENT_REPOSITORY_ID = (0, _repositoryUtils.getRepositoryInfo)(pkg.repository.url).repositoryId; | ||
const DEFAULT_REMOTE_CHANGELOGS_DB_URL = `https://raw.githubusercontent.com/${CURRENT_REPOSITORY_ID}/master/db/changelogUrls.json`; | ||
var fetchRemoteDb = exports.fetchRemoteDb = _lodash2.default.memoize(function () { | ||
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() { | ||
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_REMOTE_CHANGELOGS_DB_URL; | ||
var response; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.prev = 0; | ||
_context.next = 3; | ||
return (0, _got2.default)(url, { json: true }); | ||
const fetchRemoteDb = exports.fetchRemoteDb = _lodash2.default.memoize((() => { | ||
var _ref = (0, _asyncToGenerator3.default)(function* (url = DEFAULT_REMOTE_CHANGELOGS_DB_URL) { | ||
try { | ||
const response = yield (0, _got2.default)(url, { json: true }); | ||
case 3: | ||
response = _context.sent; | ||
return _context.abrupt('return', response.body); | ||
return response.body; | ||
} catch (err) { | ||
return null; | ||
} | ||
}); | ||
case 7: | ||
_context.prev = 7; | ||
_context.t0 = _context['catch'](0); | ||
return _context.abrupt('return', null); | ||
case 10: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, undefined, [[0, 7]]); | ||
})); | ||
return function () { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}()); | ||
})()); |
@@ -8,4 +8,4 @@ 'use strict'; | ||
var strong = exports.strong = _chalk.white.bold; | ||
var success = exports.success = _chalk.green.bold; | ||
var attention = exports.attention = _chalk.yellow.bold; | ||
const strong = exports.strong = _chalk.white.bold; | ||
const success = exports.success = _chalk.green.bold; | ||
const attention = exports.attention = _chalk.yellow.bold; |
@@ -17,3 +17,3 @@ 'use strict'; | ||
var COL_ALIGNS_MAP = { | ||
const COL_ALIGNS_MAP = { | ||
l: 'left', | ||
@@ -24,12 +24,8 @@ r: 'right', | ||
function createSimpleTable(rows) { | ||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
function createSimpleTable(rows, opts = {}) { | ||
if (opts.colAligns) { | ||
opts.colAligns = opts.colAligns.split('').map(function (val) { | ||
return COL_ALIGNS_MAP[val]; | ||
}); | ||
opts.colAligns = opts.colAligns.split('').map(val => COL_ALIGNS_MAP[val]); | ||
} | ||
var table = new _cliTable2.default((0, _extends3.default)({ | ||
const table = new _cliTable2.default((0, _extends3.default)({ | ||
style: { 'padding-left': 2 }, | ||
@@ -57,3 +53,3 @@ colAligns: ['left', 'right', 'right', 'right', 'middle'], | ||
if (rows) { | ||
table.push.apply(table, rows); | ||
table.push(...rows); | ||
} | ||
@@ -60,0 +56,0 @@ |
@@ -6,6 +6,2 @@ 'use strict'; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
@@ -29,60 +25,34 @@ | ||
var pkg = require('../../package.json'); | ||
const pkg = require('../../package.json'); | ||
var command = exports.command = 'changelog <moduleName>'; | ||
var describe = exports.describe = 'Show changelog for a module'; | ||
const command = exports.command = 'changelog <moduleName>'; | ||
const describe = exports.describe = 'Show changelog for a module'; | ||
var handler = exports.handler = (0, _catchAsyncError2.default)(function () { | ||
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(opts) { | ||
var moduleName, changelogUrl; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
moduleName = opts.moduleName; | ||
const handler = exports.handler = (0, _catchAsyncError2.default)((() => { | ||
var _ref = (0, _asyncToGenerator3.default)(function* (opts) { | ||
const moduleName = opts.moduleName; | ||
console.log(`Trying to find changelog URL for ${(0, _cliStyles.strong)(moduleName)}...`); | ||
changelogUrl = void 0; | ||
_context.prev = 3; | ||
_context.next = 6; | ||
return (0, _changelogUtils.findModuleChangelogUrl)(moduleName); | ||
console.log(`Trying to find changelog URL for ${(0, _cliStyles.strong)(moduleName)}...`); | ||
let changelogUrl; | ||
try { | ||
changelogUrl = yield (0, _changelogUtils.findModuleChangelogUrl)(moduleName); | ||
} catch (err) { | ||
if (err.code === 'E404') { | ||
console.log("Couldn't find info about this module in npm registry"); | ||
return; | ||
} | ||
} | ||
case 6: | ||
changelogUrl = _context.sent; | ||
_context.next = 14; | ||
break; | ||
if (changelogUrl) { | ||
console.log(`Opening ${(0, _cliStyles.strong)(changelogUrl)}...`); | ||
(0, _opener2.default)(changelogUrl); | ||
} else { | ||
console.log("Sorry, we haven't found any changelog URL for this module.\n" + `It would be great if you could fill an issue about this here: ${(0, _cliStyles.strong)(pkg.bugs.url)}\n` + 'Thanks a lot!'); | ||
} | ||
}); | ||
case 9: | ||
_context.prev = 9; | ||
_context.t0 = _context['catch'](3); | ||
if (!(_context.t0.code === 'E404')) { | ||
_context.next = 14; | ||
break; | ||
} | ||
console.log("Couldn't find info about this module in npm registry"); | ||
return _context.abrupt('return'); | ||
case 14: | ||
if (changelogUrl) { | ||
console.log(`Opening ${(0, _cliStyles.strong)(changelogUrl)}...`); | ||
(0, _opener2.default)(changelogUrl); | ||
} else { | ||
console.log("Sorry, we haven't found any changelog URL for this module.\n" + `It would be great if you could fill an issue about this here: ${(0, _cliStyles.strong)(pkg.bugs.url)}\n` + 'Thanks a lot!'); | ||
} | ||
case 15: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, undefined, [[3, 9]]); | ||
})); | ||
return function (_x) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}()); | ||
})()); |
@@ -6,6 +6,2 @@ 'use strict'; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _stringify = require('babel-runtime/core-js/json/stringify'); | ||
@@ -73,307 +69,227 @@ | ||
var pkg = require('../../package.json'); | ||
const pkg = require('../../package.json'); | ||
function createUpdatedModulesTable(modules) { | ||
return (0, _cliTable.createSimpleTable)(_lodash2.default.map(modules, function (_ref) { | ||
var name = _ref.name, | ||
from = _ref.from, | ||
to = _ref.to; | ||
return [(0, _cliStyles.strong)(name), from, '→', (0, _versionUtil.colorizeDiff)(to, from)]; | ||
})); | ||
return (0, _cliTable.createSimpleTable)(_lodash2.default.map(modules, ({ name, from, to }) => [(0, _cliStyles.strong)(name), from, '→', (0, _versionUtil.colorizeDiff)(to, from)])); | ||
} | ||
var command = exports.command = 'check [filter]'; | ||
var aliases = exports.aliases = '*'; | ||
var describe = exports.describe = 'Check for outdated modules'; | ||
const command = exports.command = 'check [filter]'; | ||
const aliases = exports.aliases = '*'; | ||
const describe = exports.describe = 'Check for outdated modules'; | ||
var depsCliOptions = _packageUtils.DEPS_GROUPS.filter(function (group) { | ||
return group.cliOption; | ||
}); | ||
const depsCliOptions = _packageUtils.DEPS_GROUPS.filter(group => group.cliOption); | ||
function builder(yargs) { | ||
depsCliOptions.forEach(function (_ref2) { | ||
var name = _ref2.name, | ||
field = _ref2.field; | ||
return yargs.option(name, { | ||
type: 'boolean', | ||
alias: name[0], | ||
describe: `check only "${field}"` | ||
}); | ||
}); | ||
depsCliOptions.forEach(({ name, field }) => yargs.option(name, { | ||
type: 'boolean', | ||
alias: name[0], | ||
describe: `check only "${field}"` | ||
})); | ||
} | ||
var handler = exports.handler = (0, _catchAsyncError2.default)(function () { | ||
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(opts) { | ||
var filter, filterModuleName, _loadPackageJson, packageFile, packageJson, depsGroupsToCheck, depsGroupsToCheckStr, filteredWith, currentVersions, latestVersions, upgradedVersions, config, _$map$partition$value, ignoredModules, modulesToUpdate, rows, packageUpdated, isUpdateFinished, outdatedModule, name, from, to, changelogUrl, homepage, answer, _ref8, versions, reason, shouldUpdatePackageFile; | ||
const handler = exports.handler = (0, _catchAsyncError2.default)((() => { | ||
var _ref = (0, _asyncToGenerator3.default)(function* (opts) { | ||
const filter = opts.filter; | ||
// Making function that will filter out deps by module name | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
filter = opts.filter; | ||
// Making function that will filter out deps by module name | ||
const filterModuleName = (0, _filterUtils.makeFilterFunction)(filter); | ||
filterModuleName = (0, _filterUtils.makeFilterFunction)(filter); | ||
// Checking all the deps if all of them are omitted | ||
if (_lodash2.default.every(depsCliOptions, function ({ name }) { | ||
return opts[name] === false; | ||
})) { | ||
_lodash2.default.each(depsCliOptions, function ({ name }) { | ||
return opts[name] = true; | ||
}); | ||
} | ||
// Checking all the deps if all of them are omitted | ||
// Loading `package.json` from the current directory | ||
if (_lodash2.default.every(depsCliOptions, function (_ref4) { | ||
var name = _ref4.name; | ||
return opts[name] === false; | ||
})) { | ||
_lodash2.default.each(depsCliOptions, function (_ref5) { | ||
var name = _ref5.name; | ||
return opts[name] = true; | ||
}); | ||
} | ||
var _loadPackageJson = (0, _packageUtils.loadPackageJson)(); | ||
// Loading `package.json` from the current directory | ||
_loadPackageJson = (0, _packageUtils.loadPackageJson)(), packageFile = _loadPackageJson.path, packageJson = _loadPackageJson.content; | ||
const packageFile = _loadPackageJson.path, | ||
packageJson = _loadPackageJson.content; | ||
// Fetching remote changelogs db in background | ||
// Fetching remote changelogs db in background | ||
(0, _changelogUtils.fetchRemoteDb)(); | ||
(0, _changelogUtils.fetchRemoteDb)(); | ||
depsGroupsToCheck = _lodash2.default.filter(depsCliOptions, function (_ref6) { | ||
var name = _ref6.name; | ||
return !!opts[name]; | ||
}); | ||
depsGroupsToCheckStr = depsGroupsToCheck.length === depsCliOptions.length ? '' : `${_lodash2.default.map(depsGroupsToCheck, 'name').join(' and ')} `; | ||
filteredWith = filter ? `filtered with ${(0, _cliStyles.strong)(filter)} ` : ''; | ||
const depsGroupsToCheck = _lodash2.default.filter(depsCliOptions, function ({ name }) { | ||
return !!opts[name]; | ||
}); | ||
const depsGroupsToCheckStr = depsGroupsToCheck.length === depsCliOptions.length ? '' : `${_lodash2.default.map(depsGroupsToCheck, 'name').join(' and ')} `; | ||
const filteredWith = filter ? `filtered with ${(0, _cliStyles.strong)(filter)} ` : ''; | ||
console.log(`Checking for outdated ${depsGroupsToCheckStr}dependencies ${filteredWith}for "${(0, _cliStyles.strong)(packageFile)}"...`); | ||
console.log(`Checking for outdated ${depsGroupsToCheckStr}dependencies ${filteredWith}for "${(0, _cliStyles.strong)(packageFile)}"...`); | ||
yield _npmCheckUpdates2.default.initialize(); | ||
const currentVersions = _npmCheckUpdates2.default.getCurrentDependencies(packageJson, { | ||
prod: opts.production, | ||
dev: opts.development, | ||
optional: opts.optional | ||
}); | ||
_context.next = 11; | ||
return _npmCheckUpdates2.default.initialize(); | ||
const latestVersions = yield _npmCheckUpdates2.default.queryVersions(currentVersions, { versionTarget: 'latest' }); | ||
let upgradedVersions = _npmCheckUpdates2.default.upgradeDependencies(currentVersions, latestVersions); | ||
npmProgress.disable(); | ||
case 11: | ||
currentVersions = _npmCheckUpdates2.default.getCurrentDependencies(packageJson, { | ||
prod: opts.production, | ||
dev: opts.development, | ||
optional: opts.optional | ||
}); | ||
_context.next = 14; | ||
return _npmCheckUpdates2.default.queryVersions(currentVersions, { versionTarget: 'latest' }); | ||
// Filtering modules that have to be updated | ||
upgradedVersions = _lodash2.default.pickBy(upgradedVersions, function (newVersion, moduleName) { | ||
return filterModuleName(moduleName); | ||
}); | ||
case 14: | ||
latestVersions = _context.sent; | ||
upgradedVersions = _npmCheckUpdates2.default.upgradeDependencies(currentVersions, latestVersions); | ||
if (_lodash2.default.isEmpty(upgradedVersions)) { | ||
return console.log((0, _cliStyles.success)('All dependencies are up-to-date!')); | ||
} | ||
npmProgress.disable(); | ||
// Getting the list of ignored modules | ||
const config = new _Config2.default(); | ||
config.ignore = config.ignore || {}; | ||
// Filtering modules that have to be updated | ||
upgradedVersions = _lodash2.default.pickBy(upgradedVersions, function (newVersion, moduleName) { | ||
return filterModuleName(moduleName); | ||
}); | ||
// Making arrays of outdated modules | ||
if (!_lodash2.default.isEmpty(upgradedVersions)) { | ||
_context.next = 20; | ||
break; | ||
} | ||
var _$map$partition$value = (0, _lodash2.default)(upgradedVersions).map(function (newVersion, moduleName) { | ||
return { | ||
name: moduleName, | ||
from: currentVersions[moduleName], | ||
to: newVersion | ||
}; | ||
}).partition(function (module) { | ||
return _lodash2.default.has(config.ignore, module.name) && _semver2.default.satisfies(latestVersions[module.name], config.ignore[module.name].versions); | ||
}).valueOf(); | ||
return _context.abrupt('return', console.log((0, _cliStyles.success)('All dependencies are up-to-date!'))); | ||
const ignoredModules = _$map$partition$value[0], | ||
modulesToUpdate = _$map$partition$value[1]; | ||
case 20: | ||
// Creating pretty-printed CLI tables with update info | ||
// Getting the list of ignored modules | ||
config = new _Config2.default(); | ||
if (_lodash2.default.isEmpty(modulesToUpdate)) { | ||
console.log((0, _cliStyles.success)('\nAll active modules are up-to-date!')); | ||
} else { | ||
console.log(`\n${(0, _cliStyles.strong)('New versions of active modules available:')}\n\n${createUpdatedModulesTable(modulesToUpdate)}`); | ||
} | ||
config.ignore = config.ignore || {}; | ||
if (!_lodash2.default.isEmpty(ignoredModules)) { | ||
const rows = _lodash2.default.map(ignoredModules, function ({ name, from, to }) { | ||
return [(0, _cliStyles.strong)(name), from, '→', (0, _versionUtil.colorizeDiff)(to, from), (0, _cliStyles.attention)(config.ignore[name].versions), config.ignore[name].reason]; | ||
}); | ||
// Making arrays of outdated modules | ||
_$map$partition$value = (0, _lodash2.default)(upgradedVersions).map(function (newVersion, moduleName) { | ||
return { | ||
name: moduleName, | ||
from: currentVersions[moduleName], | ||
to: newVersion | ||
}; | ||
}).partition(function (module) { | ||
return _lodash2.default.has(config.ignore, module.name) && _semver2.default.satisfies(latestVersions[module.name], config.ignore[module.name].versions); | ||
}).valueOf(), ignoredModules = _$map$partition$value[0], modulesToUpdate = _$map$partition$value[1]; | ||
// Adding table header | ||
rows.unshift(_lodash2.default.map(['', 'From', '', 'To', 'Ignored versions', 'Reason'], function (header) { | ||
return (0, _cliStyles.strong)(header); | ||
})); | ||
// Creating pretty-printed CLI tables with update info | ||
console.log(`\n${(0, _cliStyles.strong)('Ignored updates:')}\n\n${(0, _cliTable.createSimpleTable)(rows)}`); | ||
} | ||
if (_lodash2.default.isEmpty(modulesToUpdate)) { | ||
console.log((0, _cliStyles.success)('\nAll active modules are up-to-date!')); | ||
} else { | ||
console.log(`\n${(0, _cliStyles.strong)('New versions of active modules available:')}\n\n${createUpdatedModulesTable(modulesToUpdate)}`); | ||
} | ||
const updatedModules = []; | ||
let isUpdateFinished = false; | ||
while (modulesToUpdate.length && !isUpdateFinished) { | ||
const outdatedModule = modulesToUpdate.shift(); | ||
const name = outdatedModule.name, | ||
from = outdatedModule.from, | ||
to = outdatedModule.to; | ||
let changelogUrl = outdatedModule.changelogUrl, | ||
homepage = outdatedModule.homepage; | ||
if (!_lodash2.default.isEmpty(ignoredModules)) { | ||
rows = _lodash2.default.map(ignoredModules, function (_ref7) { | ||
var name = _ref7.name, | ||
from = _ref7.from, | ||
to = _ref7.to; | ||
return [(0, _cliStyles.strong)(name), from, '→', (0, _versionUtil.colorizeDiff)(to, from), (0, _cliStyles.attention)(config.ignore[name].versions), config.ignore[name].reason]; | ||
}); | ||
// Adds new line | ||
// Adding table header | ||
console.log(''); | ||
rows.unshift(_lodash2.default.map(['', 'From', '', 'To', 'Ignored versions', 'Reason'], function (header) { | ||
return (0, _cliStyles.strong)(header); | ||
})); | ||
const answer = yield (0, _askUser2.default)({ | ||
type: 'list', | ||
message: `${changelogUrl === undefined ? 'U' : 'So, u'}pdate "${name}" in package.json ` + `from ${from} to ${(0, _versionUtil.colorizeDiff)(to, from)}?`, | ||
choices: _lodash2.default.compact([{ name: 'Yes', value: true }, { name: 'No', value: false }, | ||
// Don't show this option if we couldn't find module's changelog url | ||
changelogUrl !== null && { name: 'Show changelog', value: 'changelog' }, | ||
// Show this if we haven't found changelog | ||
changelogUrl === null && homepage !== null && { name: 'Open homepage', value: 'homepage' }, { name: 'Ignore', value: 'ignore' }, { name: 'Finish update process', value: 'finish' }]), | ||
// Automatically setting cursor to "Open homepage" after we haven't found changelog | ||
default: changelogUrl === null && homepage === undefined ? 2 : 0 | ||
}); | ||
console.log(`\n${(0, _cliStyles.strong)('Ignored updates:')}\n\n${(0, _cliTable.createSimpleTable)(rows)}`); | ||
} | ||
switch (answer) { | ||
case 'changelog': | ||
// Ask user about this module again | ||
modulesToUpdate.unshift(outdatedModule); | ||
packageUpdated = false; | ||
isUpdateFinished = false; | ||
case 27: | ||
if (!(modulesToUpdate.length && !isUpdateFinished)) { | ||
_context.next = 71; | ||
break; | ||
} | ||
outdatedModule = modulesToUpdate.shift(); | ||
name = outdatedModule.name, from = outdatedModule.from, to = outdatedModule.to; | ||
changelogUrl = outdatedModule.changelogUrl, homepage = outdatedModule.homepage; | ||
// Adds new line | ||
console.log(''); | ||
_context.next = 34; | ||
return (0, _askUser2.default)({ | ||
type: 'list', | ||
message: `${changelogUrl === undefined ? 'U' : 'So, u'}pdate "${name}" in package.json ` + `from ${from} to ${(0, _versionUtil.colorizeDiff)(to, from)}?`, | ||
choices: _lodash2.default.compact([{ name: 'Yes', value: true }, { name: 'No', value: false }, | ||
// Don't show this option if we couldn't find module's changelog url | ||
changelogUrl !== null && { name: 'Show changelog', value: 'changelog' }, | ||
// Show this if we haven't found changelog | ||
changelogUrl === null && homepage !== null && { name: 'Open homepage', value: 'homepage' }, { name: 'Ignore', value: 'ignore' }, { name: 'Finish update process', value: 'finish' }]), | ||
// Automatically setting cursor to "Open homepage" after we haven't found changelog | ||
default: changelogUrl === null && homepage === undefined ? 2 : 0 | ||
}); | ||
case 34: | ||
answer = _context.sent; | ||
_context.t0 = answer; | ||
_context.next = _context.t0 === 'changelog' ? 38 : _context.t0 === 'homepage' ? 46 : _context.t0 === 'ignore' ? 56 : _context.t0 === 'finish' ? 63 : _context.t0 === true ? 65 : 69; | ||
break; | ||
case 38: | ||
// Ask user about this module again | ||
modulesToUpdate.unshift(outdatedModule); | ||
if (!(changelogUrl === undefined)) { | ||
_context.next = 44; | ||
break; | ||
} | ||
if (changelogUrl === undefined) { | ||
console.log('Trying to find changelog URL...'); | ||
_context.next = 43; | ||
return (0, _changelogUtils.findModuleChangelogUrl)(name); | ||
changelogUrl = outdatedModule.changelogUrl = yield (0, _changelogUtils.findModuleChangelogUrl)(name); | ||
} | ||
case 43: | ||
changelogUrl = outdatedModule.changelogUrl = _context.sent; | ||
if (changelogUrl) { | ||
console.log(`Opening ${(0, _cliStyles.strong)(changelogUrl)}...`); | ||
(0, _opener2.default)(changelogUrl); | ||
} else { | ||
console.log(`Sorry, we haven't found any changelog URL for ${(0, _cliStyles.strong)(name)} module.\n` + `It would be great if you could fill an issue about this here: ${(0, _cliStyles.strong)(pkg.bugs.url)}\n` + 'Thanks a lot!'); | ||
} | ||
break; | ||
case 44: | ||
case 'homepage': | ||
// Ask user about this module again | ||
modulesToUpdate.unshift(outdatedModule); | ||
if (changelogUrl) { | ||
console.log(`Opening ${(0, _cliStyles.strong)(changelogUrl)}...`); | ||
(0, _opener2.default)(changelogUrl); | ||
} else { | ||
console.log(`Sorry, we haven't found any changelog URL for ${(0, _cliStyles.strong)(name)} module.\n` + `It would be great if you could fill an issue about this here: ${(0, _cliStyles.strong)(pkg.bugs.url)}\n` + 'Thanks a lot!'); | ||
} | ||
return _context.abrupt('break', 69); | ||
case 46: | ||
// Ask user about this module again | ||
modulesToUpdate.unshift(outdatedModule); | ||
if (!(homepage === undefined)) { | ||
_context.next = 54; | ||
break; | ||
} | ||
if (homepage === undefined) { | ||
console.log('Trying to find homepage URL...'); | ||
_context.t1 = _packageUtils.getModuleHomepage; | ||
_context.next = 52; | ||
return (0, _packageUtils.getModuleInfo)(name); | ||
homepage = outdatedModule.homepage = (0, _packageUtils.getModuleHomepage)((yield (0, _packageUtils.getModuleInfo)(name))); | ||
} | ||
case 52: | ||
_context.t2 = _context.sent; | ||
homepage = outdatedModule.homepage = (0, _context.t1)(_context.t2); | ||
if (homepage) { | ||
console.log(`Opening ${(0, _cliStyles.strong)(homepage)}...`); | ||
(0, _opener2.default)(homepage); | ||
} else { | ||
console.log(`Sorry, there is no info about homepage URL in the ${(0, _cliStyles.strong)(name)}'s package.json`); | ||
} | ||
break; | ||
case 54: | ||
case 'ignore': | ||
{ | ||
var _ref2 = yield (0, _ignore.askIgnoreFields)(latestVersions[name]); | ||
if (homepage) { | ||
console.log(`Opening ${(0, _cliStyles.strong)(homepage)}...`); | ||
(0, _opener2.default)(homepage); | ||
} else { | ||
console.log(`Sorry, there is no info about homepage URL in the ${(0, _cliStyles.strong)(name)}'s package.json`); | ||
} | ||
return _context.abrupt('break', 69); | ||
const versions = _ref2.versions, | ||
reason = _ref2.reason; | ||
case 56: | ||
_context.next = 58; | ||
return (0, _ignore.askIgnoreFields)(latestVersions[name]); | ||
case 58: | ||
_ref8 = _context.sent; | ||
versions = _ref8.versions; | ||
reason = _ref8.reason; | ||
config.ignore[name] = { versions, reason }; | ||
return _context.abrupt('break', 69); | ||
case 63: | ||
isUpdateFinished = true; | ||
return _context.abrupt('break', 69); | ||
case 65: | ||
packageUpdated = true; | ||
(0, _packageUtils.setModuleVersion)(name, to, packageJson); | ||
delete config.ignore[name]; | ||
return _context.abrupt('break', 69); | ||
case 69: | ||
_context.next = 27; | ||
break; | ||
} | ||
case 71: | ||
case 'finish': | ||
isUpdateFinished = true; | ||
break; | ||
// Adds new line | ||
console.log(''); | ||
case true: | ||
updatedModules.push(outdatedModule); | ||
(0, _packageUtils.setModuleVersion)(name, to, packageJson); | ||
delete config.ignore[name]; | ||
break; | ||
} | ||
} | ||
// Saving config | ||
config.save(); | ||
// Adds new line | ||
console.log(''); | ||
if (packageUpdated) { | ||
_context.next = 76; | ||
break; | ||
} | ||
// Saving config | ||
config.save(); | ||
console.log('Nothing to update'); | ||
return _context.abrupt('return'); | ||
if (!updatedModules.length) { | ||
console.log('Nothing to update'); | ||
return; | ||
} | ||
case 76: | ||
// Showing the list of modules that are going to be updated | ||
console.log(`\n${(0, _cliStyles.strong)('These packages will be updated:')}\n\n` + createUpdatedModulesTable(updatedModules) + '\n'); | ||
packageJson = (0, _stringify2.default)(packageJson, null, 2); | ||
console.log(`New package.json:\n\n${packageJson}\n`); | ||
_context.next = 80; | ||
return (0, _askUser2.default)({ type: 'confirm', message: 'Update package.json?', default: true }); | ||
const shouldUpdatePackageFile = yield (0, _askUser2.default)({ type: 'confirm', message: 'Update package.json?', default: true }); | ||
case 80: | ||
shouldUpdatePackageFile = _context.sent; | ||
if (shouldUpdatePackageFile) { | ||
(0, _fs.writeFileSync)(packageFile, | ||
// Adding newline to the end of file | ||
`${(0, _stringify2.default)(packageJson, null, 2)}\n`); | ||
} | ||
}); | ||
if (shouldUpdatePackageFile) { | ||
// Adding newline to the end of file | ||
(0, _fs.writeFileSync)(packageFile, `${packageJson}\n`); | ||
} | ||
case 82: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, undefined); | ||
})); | ||
return function (_x) { | ||
return _ref3.apply(this, arguments); | ||
return _ref.apply(this, arguments); | ||
}; | ||
}()); | ||
})()); |
@@ -6,6 +6,2 @@ 'use strict'; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
@@ -15,41 +11,20 @@ | ||
var askIgnoreFields = exports.askIgnoreFields = function () { | ||
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(defaultVersions) { | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return (0, _askUser2.default)({ | ||
message: 'Input version or version range to ignore', | ||
default: defaultVersions, | ||
validate: function validate(input) { | ||
return _semver2.default.validRange(input) ? true : 'Input valid semver version range'; | ||
} | ||
}); | ||
case 2: | ||
_context.t0 = _context.sent; | ||
_context.next = 5; | ||
return (0, _askUser2.default)({ message: 'Ignore reason' }); | ||
case 5: | ||
_context.t1 = _context.sent; | ||
return _context.abrupt('return', { | ||
versions: _context.t0, | ||
reason: _context.t1 | ||
}); | ||
case 7: | ||
case 'end': | ||
return _context.stop(); | ||
let askIgnoreFields = exports.askIgnoreFields = (() => { | ||
var _ref = (0, _asyncToGenerator3.default)(function* (defaultVersions) { | ||
return { | ||
versions: yield (0, _askUser2.default)({ | ||
message: 'Input version or version range to ignore', | ||
default: defaultVersions, | ||
validate: function validate(input) { | ||
return _semver2.default.validRange(input) ? true : 'Input valid semver version range'; | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
}), | ||
reason: yield (0, _askUser2.default)({ message: 'Ignore reason' }) | ||
}; | ||
}); | ||
return function askIgnoreFields(_x2) { | ||
return function askIgnoreFields(_x) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}(); | ||
})(); | ||
@@ -76,21 +51,13 @@ exports.createIgnoredModulesTable = createIgnoredModulesTable; | ||
var command = exports.command = 'ignore <command>'; | ||
var describe = exports.describe = 'Manage ignored modules'; | ||
var builder = exports.builder = function builder(yargs) { | ||
return yargs.commandDir('ignore').demandCommand(1, 'Provide valid command'); | ||
}; | ||
const command = exports.command = 'ignore <command>'; | ||
const describe = exports.describe = 'Manage ignored modules'; | ||
const builder = exports.builder = yargs => yargs.commandDir('ignore').demandCommand(1, 'Provide valid command'); | ||
function createIgnoredModulesTable(ignoredModulesConfig) { | ||
var moduleNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _lodash2.default.keys(ignoredModulesConfig); | ||
function createIgnoredModulesTable(ignoredModulesConfig, moduleNames = _lodash2.default.keys(ignoredModulesConfig)) { | ||
const rows = moduleNames.map(moduleName => [(0, _cliStyles.strong)(moduleName), (0, _cliStyles.attention)(ignoredModulesConfig[moduleName].versions), ignoredModulesConfig[moduleName].reason]); | ||
var rows = moduleNames.map(function (moduleName) { | ||
return [(0, _cliStyles.strong)(moduleName), (0, _cliStyles.attention)(ignoredModulesConfig[moduleName].versions), ignoredModulesConfig[moduleName].reason]; | ||
}); | ||
// Table header | ||
rows.unshift(['', 'Ignored versions', 'Reason'].map(function (header) { | ||
return (0, _cliStyles.strong)(header); | ||
})); | ||
rows.unshift(['', 'Ignored versions', 'Reason'].map(header => (0, _cliStyles.strong)(header))); | ||
return (0, _cliTable.createSimpleTable)(rows, { colAligns: 'lcl' }); | ||
} |
@@ -6,6 +6,2 @@ 'use strict'; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
@@ -41,97 +37,63 @@ | ||
var command = exports.command = 'add [module]'; | ||
var describe = exports.describe = 'Add module to ignored list'; | ||
const command = exports.command = 'add [module]'; | ||
const describe = exports.describe = 'Add module to ignored list'; | ||
var handler = exports.handler = (0, _catchAsyncError2.default)(function () { | ||
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(opts) { | ||
var moduleName, config, ignoreMore; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
moduleName = opts.module; | ||
config = new _Config2.default(); | ||
const handler = exports.handler = (0, _catchAsyncError2.default)((() => { | ||
var _ref = (0, _asyncToGenerator3.default)(function* (opts) { | ||
let moduleName = opts.module; | ||
config.ignore = config.ignore || {}; | ||
const config = new _Config2.default(); | ||
config.ignore = config.ignore || {}; | ||
console.log(`Currently ignored modules:\n\n${(0, _ignore.createIgnoredModulesTable)(config.ignore)}\n`); | ||
console.log(`Currently ignored modules:\n\n${(0, _ignore.createIgnoredModulesTable)(config.ignore)}\n`); | ||
if (moduleName && !(0, _packageUtils.getModuleVersion)(moduleName, (0, _packageUtils.loadPackageJson)().content)) { | ||
console.log((0, _cliStyles.attention)(`Couldn't find module ${(0, _cliStyles.strong)(moduleName)} in ${(0, _cliStyles.strong)('package.json')}. Choose existing module.\n`)); | ||
moduleName = null; | ||
} | ||
if (moduleName && !(0, _packageUtils.getModuleVersion)(moduleName, (0, _packageUtils.loadPackageJson)().content)) { | ||
console.log((0, _cliStyles.attention)(`Couldn't find module ${(0, _cliStyles.strong)(moduleName)} in ${(0, _cliStyles.strong)('package.json')}. Choose existing module.\n`)); | ||
moduleName = null; | ||
} | ||
ignoreMore = void 0; | ||
let ignoreMore; | ||
do { | ||
if (!moduleName) { | ||
moduleName = yield (0, _askUser2.default)({ | ||
type: 'list', | ||
message: 'Select module to ignore:', | ||
choices: makeModulesToIgnoreList(config.ignore), | ||
pageSize: 20 | ||
}); | ||
} | ||
case 6: | ||
if (moduleName) { | ||
_context.next = 10; | ||
break; | ||
} | ||
config.ignore[moduleName] = yield (0, _ignore.askIgnoreFields)('*'); | ||
config.save(); | ||
_context.next = 9; | ||
return (0, _askUser2.default)({ | ||
type: 'list', | ||
message: 'Select module to ignore:', | ||
choices: makeModulesToIgnoreList(config.ignore), | ||
pageSize: 20 | ||
}); | ||
console.log((0, _cliStyles.success)(`\nModule ${(0, _cliStyles.strong)(moduleName)} added to ignored list.\n`)); | ||
moduleName = null; | ||
case 9: | ||
moduleName = _context.sent; | ||
ignoreMore = yield (0, _askUser2.default)({ | ||
message: 'Do you want to ignore some other module?', | ||
type: 'confirm' | ||
}); | ||
} while (ignoreMore); | ||
}); | ||
case 10: | ||
_context.next = 12; | ||
return (0, _ignore.askIgnoreFields)('*'); | ||
case 12: | ||
config.ignore[moduleName] = _context.sent; | ||
config.save(); | ||
console.log((0, _cliStyles.success)(`\nModule ${(0, _cliStyles.strong)(moduleName)} added to ignored list.\n`)); | ||
moduleName = null; | ||
_context.next = 18; | ||
return (0, _askUser2.default)({ | ||
message: 'Do you want to ignore some other module?', | ||
type: 'confirm' | ||
}); | ||
case 18: | ||
ignoreMore = _context.sent; | ||
case 19: | ||
if (ignoreMore) { | ||
_context.next = 6; | ||
break; | ||
} | ||
case 20: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, undefined); | ||
})); | ||
return function (_x) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}()); | ||
})()); | ||
function makeModulesToIgnoreList(ignoredModulesConfig) { | ||
var _loadPackageJson = (0, _packageUtils.loadPackageJson)(), | ||
packageJson = _loadPackageJson.content; | ||
var _loadPackageJson = (0, _packageUtils.loadPackageJson)(); | ||
var ignoredModules = _lodash2.default.keys(ignoredModulesConfig); | ||
const packageJson = _loadPackageJson.content; | ||
return _lodash2.default.transform(_packageUtils.DEPS_GROUPS, function (list, group) { | ||
var groupModules = _lodash2.default.keys(packageJson[group.field]); | ||
var availableToIgnore = _lodash2.default.difference(groupModules, ignoredModules); | ||
const ignoredModules = _lodash2.default.keys(ignoredModulesConfig); | ||
return _lodash2.default.transform(_packageUtils.DEPS_GROUPS, (list, group) => { | ||
const groupModules = _lodash2.default.keys(packageJson[group.field]); | ||
const availableToIgnore = _lodash2.default.difference(groupModules, ignoredModules); | ||
if (availableToIgnore.length) { | ||
list.push.apply(list, [new _inquirer.Separator((0, _cliStyles.strong)(`--- ${group.field} ---`))].concat(availableToIgnore)); | ||
list.push(new _inquirer.Separator((0, _cliStyles.strong)(`--- ${group.field} ---`)), ...availableToIgnore); | ||
} | ||
}); | ||
} |
@@ -6,6 +6,2 @@ 'use strict'; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
@@ -27,21 +23,8 @@ | ||
var command = exports.command = 'list'; | ||
var describe = exports.describe = 'Show the list of ignored modules'; | ||
const command = exports.command = 'list'; | ||
const describe = exports.describe = 'Show the list of ignored modules'; | ||
var handler = exports.handler = (0, _catchAsyncError2.default)((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() { | ||
var config; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
config = new _Config2.default(); | ||
console.log(`Currently ignored modules:\n\n${(0, _ignore.createIgnoredModulesTable)(config.ignore)}\n`); | ||
case 2: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, undefined); | ||
}))); | ||
const handler = exports.handler = (0, _catchAsyncError2.default)((0, _asyncToGenerator3.default)(function* () { | ||
const config = new _Config2.default(); | ||
console.log(`Currently ignored modules:\n\n${(0, _ignore.createIgnoredModulesTable)(config.ignore)}\n`); | ||
})); |
@@ -6,6 +6,2 @@ 'use strict'; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
@@ -37,99 +33,62 @@ | ||
var command = exports.command = 'reset [modules...]'; | ||
var describe = exports.describe = 'Reset ignored modules'; | ||
const command = exports.command = 'reset [modules...]'; | ||
const describe = exports.describe = 'Reset ignored modules'; | ||
var handler = exports.handler = (0, _catchAsyncError2.default)(function () { | ||
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(opts) { | ||
var modulesToReset, invalidModules, config, ignoredModules, _$partition, confirm; | ||
const handler = exports.handler = (0, _catchAsyncError2.default)((() => { | ||
var _ref = (0, _asyncToGenerator3.default)(function* (opts) { | ||
let modulesToReset = opts.modules; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
modulesToReset = opts.modules; | ||
invalidModules = []; | ||
config = new _Config2.default(); | ||
ignoredModules = _lodash2.default.keys(config.ignore); | ||
let invalidModules = []; | ||
const config = new _Config2.default(); | ||
const ignoredModules = _lodash2.default.keys(config.ignore); | ||
console.log(`Currently ignored modules:\n\n${(0, _ignore.createIgnoredModulesTable)(config.ignore)}\n`); | ||
console.log(`Currently ignored modules:\n\n${(0, _ignore.createIgnoredModulesTable)(config.ignore)}\n`); | ||
if (modulesToReset.length) { | ||
var _$partition = _lodash2.default.partition(modulesToReset, function (moduleName) { | ||
return _lodash2.default.includes(ignoredModules, moduleName); | ||
}); | ||
if (modulesToReset.length) { | ||
_$partition = _lodash2.default.partition(modulesToReset, function (moduleName) { | ||
return _lodash2.default.includes(ignoredModules, moduleName); | ||
}); | ||
modulesToReset = _$partition[0]; | ||
invalidModules = _$partition[1]; | ||
modulesToReset = _$partition[0]; | ||
invalidModules = _$partition[1]; | ||
if (invalidModules.length) { | ||
console.log((0, _cliStyles.attention)(`These modules are not in the ignored list: ${(0, _cliStyles.strong)(invalidModules.join(', '))}\n`)); | ||
} | ||
} | ||
if (invalidModules.length) { | ||
console.log((0, _cliStyles.attention)(`These modules are not in the ignored list: ${(0, _cliStyles.strong)(invalidModules.join(', '))}\n`)); | ||
} | ||
} | ||
if (!(!modulesToReset.length || invalidModules.length)) { | ||
_context.next = 11; | ||
break; | ||
} | ||
if (!modulesToReset.length || invalidModules.length) { | ||
modulesToReset = yield (0, _askUser2.default)({ | ||
type: 'checkbox', | ||
message: 'Select ignored modules to reset:', | ||
choices: ignoredModules, | ||
default: modulesToReset | ||
}); | ||
console.log(); | ||
} | ||
_context.next = 9; | ||
return (0, _askUser2.default)({ | ||
type: 'checkbox', | ||
message: 'Select ignored modules to reset:', | ||
choices: ignoredModules, | ||
default: modulesToReset | ||
}); | ||
if (!modulesToReset.length) { | ||
return console.log((0, _cliStyles.attention)('Nothing to reset')); | ||
} | ||
case 9: | ||
modulesToReset = _context.sent; | ||
console.log(`These ignored modules will be reset:\n\n${(0, _ignore.createIgnoredModulesTable)(config.ignore, modulesToReset)}\n`); | ||
console.log(); | ||
const confirm = yield (0, _askUser2.default)({ | ||
message: 'Are you sure?', | ||
type: 'confirm', | ||
default: false | ||
}); | ||
case 11: | ||
if (modulesToReset.length) { | ||
_context.next = 13; | ||
break; | ||
} | ||
if (!confirm) return; | ||
return _context.abrupt('return', console.log((0, _cliStyles.attention)('Nothing to reset'))); | ||
config.ignore = _lodash2.default.omit(config.ignore, modulesToReset); | ||
config.save(); | ||
case 13: | ||
console.log((0, _cliStyles.success)('\nDone!')); | ||
}); | ||
console.log(`These ignored modules will be reset:\n\n${(0, _ignore.createIgnoredModulesTable)(config.ignore, modulesToReset)}\n`); | ||
_context.next = 16; | ||
return (0, _askUser2.default)({ | ||
message: 'Are you sure?', | ||
type: 'confirm', | ||
default: false | ||
}); | ||
case 16: | ||
confirm = _context.sent; | ||
if (confirm) { | ||
_context.next = 19; | ||
break; | ||
} | ||
return _context.abrupt('return'); | ||
case 19: | ||
config.ignore = _lodash2.default.omit(config.ignore, modulesToReset); | ||
config.save(); | ||
console.log((0, _cliStyles.success)('\nDone!')); | ||
case 22: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, undefined); | ||
})); | ||
return function (_x) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}()); | ||
})()); |
@@ -13,6 +13,2 @@ 'use strict'; | ||
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); | ||
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); | ||
var _symbol = require('babel-runtime/core-js/symbol'); | ||
@@ -36,16 +32,16 @@ | ||
var PROJECT_CONFIG_FILENAME = '.npm-upgrade.json'; | ||
const PROJECT_CONFIG_FILENAME = '.npm-upgrade.json'; | ||
var path = (0, _symbol2.default)('path'); | ||
var storedData = (0, _symbol2.default)('storedData'); | ||
var read = (0, _symbol2.default)('read'); | ||
var getData = (0, _symbol2.default)('getData'); | ||
const path = (0, _symbol2.default)('path'); | ||
const storedData = (0, _symbol2.default)('storedData'); | ||
const read = (0, _symbol2.default)('read'); | ||
const getData = (0, _symbol2.default)('getData'); | ||
var Config = function () { | ||
function Config(opts) { | ||
(0, _classCallCheck3.default)(this, Config); | ||
class Config { | ||
var _ref = opts || {}, | ||
projectRoot = _ref.projectRoot; | ||
constructor(opts) { | ||
var _ref = opts || {}; | ||
const projectRoot = _ref.projectRoot; | ||
this[path] = (0, _path.resolve)(projectRoot || process.cwd(), PROJECT_CONFIG_FILENAME); | ||
@@ -56,4 +52,4 @@ this[storedData] = this[read](); | ||
Config.prototype.save = function save() { | ||
var data = this[getData](); | ||
save() { | ||
const data = this[getData](); | ||
@@ -72,9 +68,9 @@ if (_lodash2.default.isEqual(data, this[storedData])) return; | ||
} | ||
}; | ||
} | ||
Config.prototype.remove = function remove() { | ||
remove() { | ||
return _del2.default.sync(this[path]); | ||
}; | ||
} | ||
Config.prototype[read] = function () { | ||
[read]() { | ||
try { | ||
@@ -85,17 +81,14 @@ return require(this[path]); | ||
} | ||
}; | ||
} | ||
Config.prototype[getData] = function () { | ||
var data = (0, _extends3.default)({}, this); | ||
[getData]() { | ||
const data = (0, _extends3.default)({}, this); | ||
return cleanDeep(data); | ||
}; | ||
} | ||
return Config; | ||
}(); | ||
} | ||
exports.default = Config; | ||
function cleanDeep(obj) { | ||
_lodash2.default.each(obj, function (val, key) { | ||
_lodash2.default.each(obj, (val, key) => { | ||
if (_lodash2.default.isObjectLike(val)) { | ||
@@ -102,0 +95,0 @@ cleanDeep(val); |
@@ -14,3 +14,3 @@ 'use strict'; | ||
function globToRegexp(glob, flags) { | ||
var regexp = glob.split(/\*+/).map(_lodash2.default.escapeRegExp).join('.*?'); | ||
const regexp = glob.split(/\*+/).map(_lodash2.default.escapeRegExp).join('.*?'); | ||
@@ -20,11 +20,9 @@ return new RegExp(`^${regexp}$`, flags); | ||
function makeFilterFunction() { | ||
var filterStr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; | ||
function makeFilterFunction(filterStr = '') { | ||
var _$split$compact$parti = (0, _lodash2.default)(filterStr).split(/\s+/).compact().partition(filter => filter[0] === '!').valueOf(); | ||
var _$split$compact$parti = (0, _lodash2.default)(filterStr).split(/\s+/).compact().partition(function (filter) { | ||
return filter[0] === '!'; | ||
}).valueOf(), | ||
excludeFilters = _$split$compact$parti[0], | ||
let excludeFilters = _$split$compact$parti[0], | ||
includeFilters = _$split$compact$parti[1]; | ||
if (!includeFilters.length) { | ||
@@ -34,25 +32,7 @@ includeFilters.push('*'); | ||
includeFilters = (0, _lodash2.default)(includeFilters).map(function (filter) { | ||
return globToRegexp(filter, 'i'); | ||
}).map(function (filterRegexp) { | ||
return function (str) { | ||
return filterRegexp.test(str); | ||
}; | ||
}); | ||
includeFilters = (0, _lodash2.default)(includeFilters).map(filter => globToRegexp(filter, 'i')).map(filterRegexp => str => filterRegexp.test(str)); | ||
excludeFilters = (0, _lodash2.default)(excludeFilters).map(function (filter) { | ||
return globToRegexp(filter.slice(1), 'i'); | ||
}).map(function (filterRegexp) { | ||
return function (str) { | ||
return filterRegexp.test(str); | ||
}; | ||
}); | ||
excludeFilters = (0, _lodash2.default)(excludeFilters).map(filter => globToRegexp(filter.slice(1), 'i')).map(filterRegexp => str => filterRegexp.test(str)); | ||
return function (str) { | ||
return excludeFilters.every(function (filter) { | ||
return !filter(str); | ||
}) && includeFilters.some(function (filter) { | ||
return filter(str); | ||
}); | ||
}; | ||
return str => excludeFilters.every(filter => !filter(str)) && includeFilters.some(filter => filter(str)); | ||
} |
@@ -6,6 +6,2 @@ 'use strict'; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _promise = require('babel-runtime/core-js/promise'); | ||
@@ -41,7 +37,7 @@ | ||
var DEPS_GROUPS = exports.DEPS_GROUPS = [{ name: 'production', field: 'dependencies', cliOption: true }, { name: 'optional', field: 'optionalDependencies', cliOption: true }, { name: 'development', field: 'devDependencies', cliOption: true }, { name: 'peer', field: 'peerDependencies', cliOption: false }]; | ||
const DEPS_GROUPS = exports.DEPS_GROUPS = [{ name: 'production', field: 'dependencies', cliOption: true }, { name: 'optional', field: 'optionalDependencies', cliOption: true }, { name: 'development', field: 'devDependencies', cliOption: true }, { name: 'peer', field: 'peerDependencies', cliOption: false }]; | ||
function loadPackageJson() { | ||
var packageFile = (0, _path.resolve)('./package.json'); | ||
var packageJson = void 0; | ||
const packageFile = (0, _path.resolve)('./package.json'); | ||
let packageJson; | ||
@@ -71,5 +67,5 @@ try { | ||
var group = _ref; | ||
const group = _ref; | ||
var modules = packageJson[group]; | ||
const modules = packageJson[group]; | ||
@@ -85,3 +81,3 @@ if (modules && modules[moduleName]) { | ||
function getModuleVersion(moduleName, packageJson) { | ||
var depsGroup = findModuleDepsGroup(moduleName, packageJson); | ||
const depsGroup = findModuleDepsGroup(moduleName, packageJson); | ||
@@ -92,3 +88,3 @@ return depsGroup ? depsGroup[moduleName] : null; | ||
function setModuleVersion(moduleName, newVersion, packageJson) { | ||
var depsGroup = findModuleDepsGroup(moduleName, packageJson); | ||
const depsGroup = findModuleDepsGroup(moduleName, packageJson); | ||
@@ -107,34 +103,19 @@ if (depsGroup) { | ||
var getModuleInfo = exports.getModuleInfo = _lodash2.default.memoize(function () { | ||
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(moduleName) { | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return new _promise2.default(function (resolve, reject) { | ||
try { | ||
_npm2.default.load({ silent: true }, function (err) { | ||
if (err) reject(err); | ||
_npm2.default.commands.view([moduleName], true, function (err, moduleInfo) { | ||
if (err) reject(err); | ||
// `moduleInfo` contains object `{ <version>: <info> }`, so we should extract info from there | ||
resolve(_lodash2.default.values(moduleInfo)[0]); | ||
}); | ||
}); | ||
} catch (err) { | ||
reject(err); | ||
} | ||
}); | ||
case 2: | ||
return _context.abrupt('return', _context.sent); | ||
case 3: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
const getModuleInfo = exports.getModuleInfo = _lodash2.default.memoize((() => { | ||
var _ref2 = (0, _asyncToGenerator3.default)(function* (moduleName) { | ||
return yield new _promise2.default(function (resolve, reject) { | ||
try { | ||
_npm2.default.load({ silent: true }, function (err) { | ||
if (err) reject(err); | ||
_npm2.default.commands.view([moduleName], true, function (err, moduleInfo) { | ||
if (err) reject(err); | ||
// `moduleInfo` contains object `{ <version>: <info> }`, so we should extract info from there | ||
resolve(_lodash2.default.values(moduleInfo)[0]); | ||
}); | ||
}); | ||
} catch (err) { | ||
reject(err); | ||
} | ||
}, _callee, undefined); | ||
})); | ||
}); | ||
}); | ||
@@ -144,2 +125,2 @@ return function (_x) { | ||
}; | ||
}()); | ||
})()); |
@@ -14,12 +14,10 @@ 'use strict'; | ||
var KNOWN_REPOSITORIES = { | ||
'github.com': function githubCom(parsedRepositoryUrl) { | ||
var repositoryId = /^(.+?\/.+?)(?:\/|\.git$|$)/.exec(parsedRepositoryUrl.pathname.slice(1))[1]; | ||
var rootUrl = `https://github.com/${repositoryId}`; | ||
const KNOWN_REPOSITORIES = { | ||
'github.com': parsedRepositoryUrl => { | ||
const repositoryId = /^(.+?\/.+?)(?:\/|\.git$|$)/.exec(parsedRepositoryUrl.pathname.slice(1))[1]; | ||
const rootUrl = `https://github.com/${repositoryId}`; | ||
return { | ||
repositoryId, | ||
fileUrlBuilder: function fileUrlBuilder(filename) { | ||
return `${rootUrl}/blob/master/${filename}`; | ||
}, | ||
fileUrlBuilder: filename => `${rootUrl}/blob/master/${filename}`, | ||
releasesPageUrl: `${rootUrl}/releases` | ||
@@ -31,4 +29,4 @@ }; | ||
function getRepositoryInfo(repositoryUrl) { | ||
var parsedUrl = (0, _url.parse)(repositoryUrl); | ||
var hostname = parsedUrl.hostname; | ||
const parsedUrl = (0, _url.parse)(repositoryUrl); | ||
const hostname = parsedUrl.hostname; | ||
@@ -35,0 +33,0 @@ |
{ | ||
"name": "npm-upgrade", | ||
"version": "1.2.0", | ||
"version": "1.3.0", | ||
"description": "Interactive CLI utility to easily update outdated NPM dependencies", | ||
@@ -22,27 +22,27 @@ "author": "Yuriy Grunin <grunin.ya@ya.ru>", | ||
"engines": { | ||
"node": ">=4" | ||
"node": ">= 6" | ||
}, | ||
"preferGlobal": true, | ||
"dependencies": { | ||
"babel-runtime": "6.25.0", | ||
"bluebird": "3.5.0", | ||
"chalk": "2.1.0", | ||
"babel-runtime": "6.26.0", | ||
"bluebird": "3.5.1", | ||
"chalk": "2.3.0", | ||
"cli-table": "0.3.1", | ||
"del": "3.0.0", | ||
"got": "7.1.0", | ||
"inquirer": "3.2.1", | ||
"got": "8.0.1", | ||
"inquirer": "4.0.1", | ||
"lodash": "4.17.4", | ||
"npm": "^3.10.6", | ||
"npm-check-updates": "2.12.1", | ||
"npm-check-updates": "2.14.0", | ||
"opener": "1.4.3", | ||
"semver": "5.4.1", | ||
"yargs": "8.0.2" | ||
"yargs": "10.0.3" | ||
}, | ||
"devDependencies": { | ||
"babel-core": "6.25.0", | ||
"babel-core": "6.26.0", | ||
"babel-eslint": "7.2.3", | ||
"babel-plugin-transform-runtime": "6.23.0", | ||
"babel-preset-env": "1.6.0", | ||
"babel-preset-env": "1.6.1", | ||
"babel-preset-stage-2": "6.24.1", | ||
"bun": "0.0.11", | ||
"bun": "0.0.12", | ||
"eslint": "3.19.0", | ||
@@ -49,0 +49,0 @@ "eslint-plugin-babel": "4.1.2", |
@@ -59,3 +59,3 @@ import { writeFileSync } from 'fs'; | ||
// Loading `package.json` from the current directory | ||
let { path: packageFile, content: packageJson } = loadPackageJson(); | ||
const { path: packageFile, content: packageJson } = loadPackageJson(); | ||
@@ -140,3 +140,3 @@ // Fetching remote changelogs db in background | ||
let packageUpdated = false; | ||
const updatedModules = []; | ||
let isUpdateFinished = false; | ||
@@ -222,3 +222,3 @@ while (modulesToUpdate.length && !isUpdateFinished) { | ||
case true: | ||
packageUpdated = true; | ||
updatedModules.push(outdatedModule); | ||
setModuleVersion(name, to, packageJson); | ||
@@ -237,3 +237,3 @@ delete config.ignore[name]; | ||
if (!packageUpdated) { | ||
if (!updatedModules.length) { | ||
console.log('Nothing to update'); | ||
@@ -243,4 +243,9 @@ return; | ||
packageJson = JSON.stringify(packageJson, null, 2); | ||
console.log(`New package.json:\n\n${packageJson}\n`); | ||
// Showing the list of modules that are going to be updated | ||
console.log( | ||
`\n${strong('These packages will be updated:')}\n\n` + | ||
createUpdatedModulesTable(updatedModules) + | ||
'\n' | ||
); | ||
const shouldUpdatePackageFile = await askUser( | ||
@@ -251,5 +256,8 @@ { type: 'confirm', message: 'Update package.json?', default: true } | ||
if (shouldUpdatePackageFile) { | ||
// Adding newline to the end of file | ||
writeFileSync(packageFile, `${packageJson}\n`); | ||
writeFileSync( | ||
packageFile, | ||
// Adding newline to the end of file | ||
`${JSON.stringify(packageJson, null, 2)}\n` | ||
); | ||
} | ||
}); |
73031
-14%1510
-16.44%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated
Updated
Updated
Updated
Updated