Skip to content

Commit c273d79

Browse files
committed
--format homepage (#1600)
1 parent 545fae7 commit c273d79

File tree

6 files changed

+33
-2
lines changed

6 files changed

+33
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,7 @@ Modify the output formatting or show additional information. Specify one or more
643643
<table>
644644
<tr><td>dep</td><td>Prints the dependency type (dev, peer, optional) of each package.</td></tr>
645645
<tr><td>group</td><td>Groups packages by major, minor, patch, and major version zero updates.</td></tr>
646+
<tr><td>homepage</td><td>Displays links to the package's homepage if specified in its package.json.</td></tr>
646647
<tr><td>installedVersion</td><td>Prints the exact current version number instead of a range.</td></tr>
647648
<tr><td>lines</td><td>Prints name@version on separate lines. Useful for piping to npm install.</td></tr>
648649
<tr><td>ownerChanged</td><td>Shows if the package owner has changed.</td></tr>

src/cli-options.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ const extendedHelpFormat: ExtendedHelp = ({ markdown }) => {
190190
rows: [
191191
['dep', `Prints the dependency type (dev, peer, optional) of each package.`],
192192
['group', `Groups packages by major, minor, patch, and major version zero updates.`],
193+
['homepage', `Displays links to the package's homepage if specified in its package.json.`],
193194
['installedVersion', 'Prints the exact current version number instead of a range.'],
194195
['lines', 'Prints name@version on separate lines. Useful for piping to npm install.'],
195196
['ownerChanged', `Shows if the package owner has changed.`],
@@ -793,7 +794,7 @@ const cliOptions: CLIOption[] = [
793794
parse: value => (typeof value === 'string' ? value.split(',') : value),
794795
default: [],
795796
type: 'readonly string[]',
796-
choices: ['dep', 'group', 'ownerChanged', 'repo', 'time', 'lines', 'installedVersion'],
797+
choices: ['dep', 'group', 'homepage', 'ownerChanged', 'repo', 'time', 'lines', 'installedVersion'],
797798
help: extendedHelpFormat,
798799
},
799800
{

src/lib/logging.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { VersionResult } from '../types/VersionResult'
1111
import { VersionSpec } from '../types/VersionSpec'
1212
import chalk from './chalk'
1313
import filterObject from './filterObject'
14+
import getPackageJson from './getPackageJson'
1415
import getPackageVersion from './getPackageVersion'
1516
import getRepoUrl from './getRepoUrl'
1617
import {
@@ -193,6 +194,9 @@ export async function toDependencyTable({
193194
: '*unknown*'
194195
: ''
195196
const toColorized = colorizeDiff(getVersion(from), to)
197+
const homepageUrl = format?.includes('homepage')
198+
? (await getPackageJson(dep, { pkgFile }))?.homepage || ''
199+
: ''
196200
const repoUrl = format?.includes('repo') ? (await getRepoUrl(dep, undefined, { pkgFile })) || '' : ''
197201
const publishTime = format?.includes('time') && time?.[dep] ? time[dep] : ''
198202
return [
@@ -202,7 +206,7 @@ export async function toDependencyTable({
202206
'→',
203207
toColorized,
204208
ownerChanged,
205-
...[repoUrl, publishTime].filter(x => x),
209+
...[homepageUrl, repoUrl, publishTime].filter(x => x),
206210
]
207211
}),
208212
),

src/types/PackageFile.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export interface PackageFile {
1313
// deno only
1414
imports?: Index<VersionSpec>
1515
engines?: Index<VersionSpec>
16+
homepage?: string
1617
name?: string
1718
// https://nodejs.org/api/packages.html#packagemanager
1819
packageManager?: string

src/types/RunOptions.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
"$ref": "#/definitions/Index<string>",
3434
"description": "A very generic object."
3535
},
36+
"homepage": {
37+
"type": "string"
38+
},
3639
"imports": {
3740
"$ref": "#/definitions/Index<string>",
3841
"description": "A very generic object."

test/format.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,27 @@ describe('format', () => {
9393
}
9494
})
9595

96+
it('--format homepage', async () => {
97+
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'npm-check-updates-'))
98+
const pkgFile = path.join(tempDir, 'package.json')
99+
await fs.writeFile(
100+
pkgFile,
101+
JSON.stringify({
102+
dependencies: {
103+
'hosted-git-info': '^5.0.0',
104+
},
105+
}),
106+
'utf-8',
107+
)
108+
try {
109+
await spawn('npm', ['install'], {}, { cwd: tempDir })
110+
const { stdout } = await spawn('node', [bin, '--format', 'homepage'], {}, { cwd: tempDir })
111+
stdout.should.include('https://github.com/npm/hosted-git-info')
112+
} finally {
113+
await removeDir(tempDir)
114+
}
115+
})
116+
96117
it('--format lines', async () => {
97118
const stub = stubVersions(
98119
{

0 commit comments

Comments
 (0)