npm-check-updates
Advanced tools
Comparing version 2.10.3 to 2.10.4
@@ -80,10 +80,2 @@ var options = {}; | ||
function getVersionTarget(opt) { | ||
var o = opt || options; | ||
return o.semverLevel ? o.semverLevel : | ||
o.newest ? 'newest' : | ||
o.greatest ? 'greatest' : | ||
'latest'; | ||
} | ||
function createDependencyTable() { | ||
@@ -112,2 +104,22 @@ return new Table({ | ||
/** | ||
* @param args.from | ||
* @param args.to | ||
* @param options.greatest | ||
*/ | ||
function toDependencyTable(args) { | ||
options = options || {}; | ||
var table = createDependencyTable(); | ||
var rows = Object.keys(args.to).map(function (dep) { | ||
var from = args.from[dep] || ''; | ||
var to = versionUtil.colorizeDiff(args.to[dep] || '', args.from[dep]); | ||
return [dep, from, '→', to]; | ||
}); | ||
rows.forEach(function (row) { | ||
table.push(row); | ||
}); | ||
return table; | ||
} | ||
var readPackageFile = cint.partialAt(fs.readFileAsync, 1, 'utf8'); | ||
@@ -120,25 +132,9 @@ var writePackageFile = fs.writeFileAsync; | ||
function upgradePackageDefinitions(currentDependencies) { | ||
var versionTarget = getVersionTarget(options); | ||
print('Fetching ' + versionTarget + ' versions...', 'verbose'); | ||
function analyzeGlobalPackages() { | ||
return vm.getLatestVersions(currentDependencies, { | ||
versionTarget: versionTarget, | ||
registry: options.registry ? options.registry : null | ||
}).then(function (latestVersions) { | ||
if (options.global && options.upgrade) { | ||
programError(chalk.blue('ncu') + ' cannot upgrade global packages. Run ' + chalk.blue('npm install -g [package]') + | ||
' to update a global package'); | ||
} | ||
var upgradedDependencies = vm.upgradeDependencies(currentDependencies, latestVersions, { | ||
removeRange: options.removeRange | ||
}); | ||
var filteredUpgradedDependencies = _.pickBy(upgradedDependencies, function (v, dep) { | ||
return !options.jsonUpgraded || options.upgradeAll || !vm.isSatisfied(latestVersions[dep], currentDependencies[dep]); | ||
}); | ||
return [filteredUpgradedDependencies, latestVersions]; | ||
}); | ||
} | ||
function analyzeGlobalPackages() { | ||
print('Getting installed packages...', 'verbose'); | ||
@@ -153,4 +149,5 @@ | ||
print('', 'silly'); | ||
print('Fetching ' + vm.getVersionTarget(options) + ' versions...', 'verbose'); | ||
return upgradePackageDefinitions(globalPackages) | ||
return vm.upgradePackageDefinitions(globalPackages, options) | ||
.spread(function (upgraded, latest) { | ||
@@ -188,2 +185,3 @@ | ||
print('Getting installed packages...', 'verbose'); | ||
print('Fetching ' + vm.getVersionTarget(options) + ' versions...', 'verbose'); | ||
@@ -193,4 +191,6 @@ return Promise.all([ | ||
// only search for installed dependencies if a pkgFile is specified | ||
pkgFile ? vm.getInstalledPackages({cwd: options.packageFileDir ? path.dirname(path.resolve(pkgFile)) : null}) : Promise.resolve(), | ||
upgradePackageDefinitions(current) | ||
pkgFile ? vm.getInstalledPackages({ | ||
cwd: options.packageFileDir ? path.dirname(path.resolve(pkgFile)) : null | ||
}) : Promise.resolve(), | ||
vm.upgradePackageDefinitions(current, options) | ||
]) | ||
@@ -206,4 +206,4 @@ .spread(function (current, installed, upgradedAndLatest) { | ||
if (options.json) { | ||
newPkgData = vm.updatePackageData(pkgData, current, upgraded, latest, options); | ||
// don't need try-catch here because pkgData has already been parsed as valid JSON, and vm.updatePackageData simply does a find-and-replace on that | ||
newPkgData = vm.upgradePackageData(pkgData, current, upgraded, latest, options); | ||
// don't need try-catch here because pkgData has already been parsed as valid JSON, and vm.upgradePackageData simply does a find-and-replace on that | ||
output = options.jsonAll ? jph.parse(newPkgData) : | ||
@@ -231,22 +231,2 @@ options.jsonDeps ? | ||
/** | ||
* @param args.from | ||
* @param args.to | ||
* @param options.greatest | ||
*/ | ||
function toDependencyTable(args) { | ||
options = options || {}; | ||
var table = createDependencyTable(); | ||
var rows = Object.keys(args.to).map(function (dep) { | ||
var from = args.from[dep] || ''; | ||
var to = versionUtil.colorizeDiff(args.to[dep] || '', args.from[dep]); | ||
return [dep, from, '→', to]; | ||
}); | ||
rows.forEach(function (row) { | ||
table.push(row); | ||
}); | ||
return table; | ||
} | ||
// TODO: printUpgrades and analyzeProjectDependencies need to be refactored. They are tightly coupled and monolithic. | ||
@@ -286,3 +266,3 @@ /** | ||
} else { | ||
print('All dependencies match the ' + getVersionTarget(options) + ' package versions ' + | ||
print('All dependencies match the ' + vm.getVersionTarget(options) + ' package versions ' + | ||
smiley); | ||
@@ -323,3 +303,3 @@ } | ||
} else if (args.isUpgrade) { | ||
var newPkgData = vm.updatePackageData(args.pkgData, args.current, args.upgraded, args.latest, options); | ||
var newPkgData = vm.upgradePackageData(args.pkgData, args.current, args.upgraded, args.latest, options); | ||
writePackageFile(args.pkgFile, newPkgData) | ||
@@ -342,37 +322,29 @@ .then(function () { | ||
function programInit() { | ||
/** Initializes and consolidates options from the cli. */ | ||
function initOptions(options) { | ||
// 'upgradeAll' is a type of an upgrade so if it's set, we set 'upgrade' as well | ||
options.upgrade = options.upgrade || options.upgradeAll; | ||
if (options.global && options.upgrade) { | ||
programError(chalk.blue('ncu') + ' cannot upgrade global packages. Run ' + chalk.blue('npm install -g [package]') + | ||
' to update a global package'); | ||
} | ||
// add shortcut for any keys that start with 'json' | ||
options.json = _(options) | ||
.keys() | ||
.filter(_.partial(_.startsWith, _, 'json', 0)) | ||
.some(_.propertyOf(options)); | ||
// convert silent option to loglevel silent | ||
if (options.silent) { | ||
options.loglevel = 'silent'; | ||
} | ||
return Object.assign({}, options, { | ||
// 'upgradeAll' is a type of an upgrade so if it's set, we set 'upgrade' as well | ||
upgrade: options.upgrade || options.upgradeAll, | ||
// convert silent option to loglevel silent | ||
loglevel: options.silent ? 'silent' : options.loglevel, | ||
// add shortcut for any keys that start with 'json' | ||
json: _(options) | ||
.keys() | ||
.filter(_.partial(_.startsWith, _, 'json', 0)) | ||
.some(_.propertyOf(options)) | ||
}); | ||
} | ||
function programRun() { | ||
programInit(); | ||
return options.global ? programRunGlobal() : programRunLocal(); | ||
} | ||
/** Finds the package file and data. | ||
@returns Promise [pkgFile, pkgData] | ||
function programRunGlobal() { | ||
Searches as follows: | ||
--packageData flag | ||
--packageFile flag | ||
--stdin | ||
--findUp | ||
*/ | ||
function findPackage() { | ||
print('Running in global mode...', 'verbose'); | ||
return analyzeGlobalPackages(); | ||
} | ||
function programRunLocal() { | ||
var pkgData; | ||
@@ -387,2 +359,41 @@ var pkgFile; | ||
/* | ||
// if pkgFile was set, make sure it exists and read it into pkgData | ||
if (pkgFile) { | ||
// print a message if we are using a descendant package file | ||
var relPathToPackage = path.resolve(pkgFile); | ||
if (relPathToPackage !== pkgFileName) { | ||
print('Using ' + relPathToPackage); | ||
} | ||
if (!fs.existsSync(pkgFile)) { | ||
programError(chalk.red(relPathToPackage + ' not found')); | ||
} | ||
pkgData = readPackageFile(pkgFile, null, false); | ||
} | ||
// no package data! | ||
if (!pkgData) { | ||
} | ||
return pkgData.then(_.partial(analyzeProjectDependencies, _, pkgFile)); | ||
*/ | ||
function getPackageDataFromFile(pkgFile, pkgFileName) { | ||
// exit if no pkgFile to read from fs | ||
if (pkgFile !== null) { | ||
// print a message if we are using a descendant package file | ||
var relPathToPackage = path.resolve(pkgFile); | ||
if (relPathToPackage !== pkgFileName) { | ||
print('Using ' + relPathToPackage); | ||
} | ||
} else { | ||
programError(chalk.red('No ' + pkgFileName) + '\n\nPlease add a ' + pkgFileName + ' to the current directory, specify the ' + chalk.blue('--packageFile') + ' or ' + chalk.blue('--packageData') + ' options, or pipe a ' + pkgFileName + ' to stdin.'); | ||
} | ||
return readPackageFile(pkgFile); | ||
} | ||
// get the package data from the various input possibilities | ||
@@ -422,48 +433,44 @@ if (options.packageData) { | ||
return pkgData.then(function (_pkgData) { | ||
return analyzeProjectDependencies(_pkgData, pkgFile); | ||
}); | ||
return Promise.all([pkgData, pkgFile]); | ||
} | ||
function getPackageDataFromFile(pkgFile, pkgFileName) { | ||
// print a message if we are using a descendant package file | ||
var relPathToPackage = path.resolve(pkgFile); | ||
if (relPathToPackage !== pkgFileName) { | ||
print('Using ' + relPathToPackage); | ||
/** main entry point */ | ||
function run(opts) { | ||
options = opts || {}; | ||
// if not executed on the command-line (i.e. executed as a node module), set some defaults | ||
if (!options.cli) { | ||
_.defaults(options, { | ||
// if they want to modify the package file, we must disable jsonUpgraded | ||
// otherwise the write operation will not happen | ||
jsonUpgraded: !options.upgrade, | ||
// should not suggest upgrades to versions within the specified version range if upgradeAll is explicitly set to false. Will become the default in the next major version. | ||
upgradeAll: options.upgradeAll === undefined ? true : options.upgradeAll, | ||
loglevel: 'silent', | ||
args: [] | ||
}); | ||
} | ||
if (!fs.existsSync(pkgFile)) { | ||
programError(chalk.red(relPathToPackage + ' not found')); | ||
} | ||
return readPackageFile(pkgFile); | ||
} | ||
// get filter from arguments | ||
options.filter = options.args.join(' ') || options.filter; | ||
module.exports = _.merge({ | ||
run: function (opts) { | ||
options = opts || {}; | ||
print('Initializing...', 'verbose'); | ||
// if not executed on the command-line (i.e. executed as a node module), set some defaults | ||
if (!options.cli) { | ||
_.defaults(options, { | ||
// if they want to modify the package file, we must disable jsonUpgraded | ||
// otherwise the write operation will not happen | ||
jsonUpgraded: !options.upgrade, | ||
// should not suggest upgrades to versions within the specified version range if upgradeAll is explicitly set to false. Will become the default in the next major version. | ||
upgradeAll: options.upgradeAll === undefined ? true : options.upgradeAll, | ||
loglevel: 'silent', | ||
args: [] | ||
}); | ||
} | ||
return vm.initialize({ | ||
global: options.global, | ||
packageManager: options.packageManager, | ||
registry: options.registry | ||
}) | ||
.then(function () { | ||
// get filter from arguments | ||
options.filter = options.args.join(' ') || options.filter; | ||
options = initOptions(options); | ||
print('Initializing...', 'verbose'); | ||
return options.global ? | ||
analyzeGlobalPackages() : | ||
findPackage().spread(analyzeProjectDependencies); | ||
}); | ||
} | ||
return vm.initialize({ | ||
global: options.global, | ||
packageManager: options.packageManager, | ||
registry: options.registry | ||
}).then(programRun); | ||
} | ||
module.exports = Object.assign({ | ||
run: run | ||
}, vm); |
@@ -215,2 +215,22 @@ var semver = require('semver'); | ||
function upgradePackageDefinitions(currentDependencies, options) { | ||
var versionTarget = getVersionTarget(options); | ||
return queryVersions(currentDependencies, { | ||
versionTarget: versionTarget, | ||
registry: options.registry ? options.registry : null | ||
}).then(function (latestVersions) { | ||
var upgradedDependencies = upgradeDependencies(currentDependencies, latestVersions, { | ||
removeRange: options.removeRange | ||
}); | ||
var filteredUpgradedDependencies = _.pickBy(upgradedDependencies, function (v, dep) { | ||
return !options.jsonUpgraded || options.upgradeAll || !isSatisfied(latestVersions[dep], currentDependencies[dep]); | ||
}); | ||
return [filteredUpgradedDependencies, latestVersions]; | ||
}); | ||
} | ||
/** | ||
@@ -224,3 +244,3 @@ * Upgrade the dependency declarations in the package data | ||
*/ | ||
function updatePackageData(pkgData, oldDependencies, newDependencies, newVersions, options) { | ||
function upgradePackageData(pkgData, oldDependencies, newDependencies, newVersions, options) { | ||
@@ -242,3 +262,3 @@ options = options || {}; | ||
* Get the current dependencies from the package file | ||
* @param pkg Object with dependencies, devDependencies, and/or optionalDependencies properties | ||
* @param pkgData Object with dependencies, devDependencies, and/or optionalDependencies properties | ||
* @param options.dev | ||
@@ -250,5 +270,5 @@ * @param options.filter | ||
*/ | ||
function getCurrentDependencies(pkg, options) { | ||
function getCurrentDependencies(pkgData, options) { | ||
pkg = pkg || {}; | ||
pkgData = pkgData || {}; | ||
options = options || {}; | ||
@@ -261,5 +281,5 @@ | ||
var allDependencies = cint.filterObject(_.merge({}, | ||
options.prod && pkg.dependencies, | ||
options.dev && pkg.devDependencies, | ||
options.optional && pkg.optionalDependencies | ||
options.prod && pkgData.dependencies, | ||
options.dev && pkgData.devDependencies, | ||
options.optional && pkgData.optionalDependencies | ||
), filterAndReject(options.filter, options.reject)); | ||
@@ -298,3 +318,3 @@ | ||
/** | ||
* Get the latest or greatest versions from the NPM repository | ||
* Get the latest or greatest versions from the NPM repository based on the version target | ||
* @param packageMap an object whose keys are package name and values are current versions | ||
@@ -304,3 +324,3 @@ * @param options Options. Default: { versionTarget: 'latest' }. You may also specify { versionTarge: 'greatest' } | ||
*/ | ||
function getLatestVersions(packageMap, options) { | ||
function queryVersions(packageMap, options) { | ||
@@ -401,2 +421,9 @@ var getPackageVersion; | ||
function getVersionTarget(options) { | ||
return options.semverLevel ? options.semverLevel : | ||
options.newest ? 'newest' : | ||
options.greatest ? 'greatest' : | ||
'latest'; | ||
} | ||
/** | ||
@@ -439,17 +466,19 @@ * Initialize the version manager with the given package manager. | ||
upgradeDependencyDeclaration: upgradeDependencyDeclaration, | ||
updatePackageData: updatePackageData, | ||
upgradePackageData: upgradePackageData, | ||
upgradePackageDefinitions: upgradePackageDefinitions, | ||
getCurrentDependencies: getCurrentDependencies, | ||
upgradeDependencies: upgradeDependencies, | ||
getInstalledPackages: getInstalledPackages, | ||
getLatestVersions: getLatestVersions, | ||
queryVersions: queryVersions, | ||
isUpgradeable: isUpgradeable, | ||
isSatisfied: isSatisfied, | ||
getPreferredWildcard: getPreferredWildcard, | ||
getVersionTarget: getVersionTarget, | ||
// deprecate in next major version | ||
getLatestPackageVersion: function (pkg) { | ||
return selectedPackageManager.latest(pkg); | ||
getLatestPackageVersion: function (pkgData) { | ||
return selectedPackageManager.latest(pkgData); | ||
}, | ||
getGreatestPackageVersion: function (pkg) { | ||
return selectedPackageManager.greatest(pkg); | ||
getGreatestPackageVersion: function (pkgData) { | ||
return selectedPackageManager.greatest(pkgData); | ||
} | ||
}; |
{ | ||
"name": "npm-check-updates", | ||
"version": "2.10.3", | ||
"version": "2.10.4", | ||
"author": "Tomas Junnonen <tomas1@gmail.com>", | ||
@@ -31,5 +31,5 @@ "license": "Apache-2.0", | ||
"scripts": { | ||
"lint": "eslint bin lib", | ||
"lint": "eslint bin lib test", | ||
"watch": "chokidar \"lib/**/*.js\" -c \"npm run test\"", | ||
"test": "npm run lint && mocha && mocha test/individual" | ||
"test": "npm run lint ; mocha && mocha test/individual" | ||
}, | ||
@@ -65,2 +65,3 @@ "bin": { | ||
"semver-utils": "^1.1.1", | ||
"snyk": "^1.25.1", | ||
"spawn-please": "^0.2.0", | ||
@@ -76,3 +77,4 @@ "update-notifier": "^1.0.2" | ||
"mocha": "^3.0.2", | ||
"should": "^11.1.0" | ||
"should": "^11.1.0", | ||
"tmp": "0.0.31" | ||
}, | ||
@@ -79,0 +81,0 @@ "files": [ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
61980
1175
19
8
+ Addedsnyk@^1.25.1
+ Added@sentry-internal/tracing@7.119.2(transitive)
+ Added@sentry/core@7.119.2(transitive)
+ Added@sentry/integrations@7.119.2(transitive)
+ Added@sentry/node@7.119.2(transitive)
+ Added@sentry/types@7.119.2(transitive)
+ Added@sentry/utils@7.119.2(transitive)
+ Addedboolean@3.2.0(transitive)
+ Addeddefine-data-property@1.1.4(transitive)
+ Addeddefine-properties@1.2.1(transitive)
+ Addeddetect-node@2.1.0(transitive)
+ Addedes-define-property@1.0.0(transitive)
+ Addedes-errors@1.3.0(transitive)
+ Addedes6-error@4.1.1(transitive)
+ Addedescape-string-regexp@4.0.0(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedget-intrinsic@1.2.4(transitive)
+ Addedglobal-agent@3.0.0(transitive)
+ Addedglobalthis@1.0.4(transitive)
+ Addedgopd@1.0.1(transitive)
+ Addedhas-property-descriptors@1.0.2(transitive)
+ Addedhas-proto@1.0.3(transitive)
+ Addedhas-symbols@1.0.3(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedimmediate@3.0.6(transitive)
+ Addedjson-stringify-safe@5.0.1(transitive)
+ Addedlie@3.1.1(transitive)
+ Addedlocalforage@1.10.0(transitive)
+ Addedmatcher@3.0.0(transitive)
+ Addedobject-keys@1.1.1(transitive)
+ Addedroarr@2.15.4(transitive)
+ Addedsemver@7.6.3(transitive)
+ Addedsemver-compare@1.0.0(transitive)
+ Addedserialize-error@7.0.1(transitive)
+ Addedsnyk@1.1293.1(transitive)
+ Addedsprintf-js@1.1.3(transitive)
+ Addedtype-fest@0.13.1(transitive)