Skip to content

Commit

Permalink
ownerChanged: Only print with -o, fix getOwnerPerDependency, refactor.
Browse files Browse the repository at this point in the history
  • Loading branch information
raineorshine committed Aug 29, 2020
1 parent 3c4db9f commit 7f08648
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 37 deletions.
16 changes: 10 additions & 6 deletions lib/logging.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ function createDependencyTable() {
* @param args
* @param args.from
* @param args.to
* @param args.owner
* @param args.ownersChangedDeps
* @returns
*/
function toDependencyTable(args) {
Expand All @@ -78,9 +78,13 @@ function toDependencyTable(args) {
const to = isGithubUrl(toRaw) ? getGithubUrlTag(toRaw)
: isNpmAlias(toRaw) ? parseNpmAlias(toRaw)[1]
: toRaw
const owner = args.owner && args.owner[dep] ? args.owner[dep] ? '*owner changed*' : '' : '*unknown*'
const ownerChanged = args.ownersChangedDeps
? dep in args.ownersChangedDeps
? args.ownersChangedDeps[dep] ? '*owner changed*' : ''
: '*unknown*'
: ''
const toColorized = colorizeDiff(from, to)
return [dep, from, '→', toColorized, owner]
return [dep, from, '→', toColorized, ownerChanged]
})
rows.forEach(row => table.push(row)) // eslint-disable-line fp/no-mutating-methods
return table
Expand All @@ -93,9 +97,9 @@ function toDependencyTable(args) {
* @param args.upgraded - The packages that should be upgraded.
* @param args.numUpgraded - The number of upgraded packages
* @param args.total - The total number of all possible upgrades
* @param args.owners - Boolean flag per dependency which announces if package owner changed.
* @param args.ownersChangedDeps - Boolean flag per dependency which announces if package owner changed.
*/
function printUpgrades(options, { current, upgraded, numUpgraded, total, owners }) {
function printUpgrades(options, { current, upgraded, numUpgraded, total, ownersChangedDeps }) {
print(options, '')

// print everything is up-to-date
Expand All @@ -120,7 +124,7 @@ function printUpgrades(options, { current, upgraded, numUpgraded, total, owners
const table = toDependencyTable({
from: current,
to: upgraded,
owner: owners
ownersChangedDeps
})
print(options, table.toString())
}
Expand Down
9 changes: 4 additions & 5 deletions lib/npm-check-updates.js
Original file line number Diff line number Diff line change
Expand Up @@ -167,10 +167,9 @@ function analyzeProjectDependencies(options, pkgData, pkgFile) {
const filteredUpgraded = options.minimal ? cint.filterObject(selectedNewDependencies, dep => !isSatisfied(dep)) : selectedNewDependencies
const numUpgraded = Object.keys(filteredUpgraded).length

let owners = {}
if (options.ownerChanged) {
owners = await vm.getOwnerPerDependency(current, filteredUpgraded, options)
}
const ownersChangedDeps = options.ownerChanged
? await vm.getOwnerPerDependency(current, filteredUpgraded, options)
: null

// print
if (options.json) {
Expand All @@ -185,7 +184,7 @@ function analyzeProjectDependencies(options, pkgData, pkgFile) {
latest,
numUpgraded,
total: Object.keys(upgraded).length,
owners
ownersChangedDeps
})
}

Expand Down
21 changes: 10 additions & 11 deletions lib/package-managers/npm.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,29 +78,28 @@ function parseJson(result, data) {
}

/**
* Check if package author changed between current and next version.
* Check if package author changed between current and upgraded version.
*
* @param packageName Name of the package
* @param currentVersion
* @param latestVersion
* @param currentVersion Current version declaration (may be range)
* @param upgradedVersion Upgraded version declaration (may be range)
* @returns A promise that fullfills with boolean value.
*/
async function packageAuthorChanged(packageName, currentVersion, latestVersion) {
async function packageAuthorChanged(packageName, currentVersion, upgradedVersion) {
npmConfig.fullMetadata = true

const result = await pacote.packument(packageName, npmConfig)
if (result.versions) {
const pkgVersions = Object.keys(result.versions)
const current = semver.minSatisfying(pkgVersions, currentVersion)
const latest = semver.minSatisfying(pkgVersions, latestVersion)
if (current && latest) {
if (result.versions[current]._npmUser && result.versions[latest]._npmUser) {
const currentAuthor = result.versions[current]._npmUser.name
const latestAuthor = result.versions[latest]._npmUser.name
return !_.isEqual(currentAuthor, latestAuthor)
}
const upgraded = semver.maxSatisfying(pkgVersions, upgradedVersion)
if (current && upgraded && result.versions[current]._npmUser && result.versions[upgraded]._npmUser) {
const currentAuthor = result.versions[current]._npmUser.name
const latestAuthor = result.versions[upgraded]._npmUser.name
return !_.isEqual(currentAuthor, latestAuthor)
}
}

return null
}

Expand Down
23 changes: 10 additions & 13 deletions lib/versionmanager.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ function filterAndReject(filter, reject) {
}

/**
* Return a promise which resolves to object storing package owners per dependency.
* Return a promise which resolves to object storing package owner changed status for each dependency.
*
* @param fromVersion current packages version.
* @param toVersion target packages version.
Expand All @@ -282,18 +282,15 @@ function filterAndReject(filter, reject) {
*/
async function getOwnerPerDependency(fromVersion, toVersion, options) {
const packageManager = getPackageManager(options.packageManager)
const owner = {}
await Promise.all(
Object.keys(toVersion).map(async dep => {
const from = fromVersion[dep] || null
const to = toVersion[dep] || null
const ownerChanged = await packageManager.packageAuthorChanged(dep, from, to)
return Object.assign({}, owner, {
[dep]: ownerChanged
})
})
)
return owner
return await Object.keys(toVersion).reduce(async (accum, dep) => {
const from = fromVersion[dep] || null
const to = toVersion[dep] || null
const ownerChanged = await packageManager.packageAuthorChanged(dep, from, to)
return {
...accum,
[dep]: ownerChanged,
}
}, {})
}

/**
Expand Down
4 changes: 2 additions & 2 deletions test/test-bin.js
Original file line number Diff line number Diff line change
Expand Up @@ -251,15 +251,15 @@ describe('bin', function () {
'ncu-test-v2': 'https://github.com/raineorshine/ncu-test-v2.git#v1.0.0'
}
const output = await spawn('node', ['bin/cli.js'], JSON.stringify({ dependencies }))
output.trim().should.equal('ncu-test-v2 https://github.com/raineorshine/ncu-test-v2.git#v1.0.0 → v2.0.0 *unknown*')
output.trim().should.equal('ncu-test-v2 https://github.com/raineorshine/ncu-test-v2.git#v1.0.0 → v2.0.0')
})

it('should strip prefix from npm alias in "to" output', async () => {
const dependencies = {
request: 'npm:ncu-test-v2@1.0.0'
}
const output = await spawn('node', ['bin/cli.js'], JSON.stringify({ dependencies }))
output.trim().should.equal('request npm:ncu-test-v2@1.0.0 → 2.0.0 *unknown*')
output.trim().should.equal('request npm:ncu-test-v2@1.0.0 → 2.0.0')
})

})
Expand Down

0 comments on commit 7f08648

Please sign in to comment.