🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Sign inDemoInstall
Socket

npm-upgrade

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

npm-upgrade - npm Package Compare versions

Comparing version

to
1.3.0

8

CHANGELOG.md

@@ -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**

33

lib/askUser.js

@@ -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`
);
}
});