1- import process from 'node:process'
2-
31import colors from 'yoctocolors-cjs'
42
53import constants from '@socketsecurity/registry/lib/constants'
64import { logger } from '@socketsecurity/registry/lib/logger'
7- import { Spinner } from '@socketsecurity/registry/lib/spinner'
85
96import { PackageData } from './get-package-info'
107import { formatSeverityCount } from '../../utils/alert/severity'
@@ -23,69 +20,73 @@ export function formatPackageInfo(
2320 { data, score, severityCount } : PackageData ,
2421 {
2522 name,
26- outputJson,
27- outputMarkdown,
23+ outputKind,
2824 pkgName,
29- pkgVersion,
30- strict
25+ pkgVersion
3126 } : {
3227 includeAllIssues : boolean
33- outputJson : boolean
34- outputMarkdown : boolean
28+ name : string
29+ outputKind : 'json' | 'markdown' | 'print'
3530 pkgName : string
3631 pkgVersion : string
37- strict : boolean
38- } & { name : string } ,
39- spinner : Spinner
32+ }
4033) : void {
41- if ( outputJson ) {
34+ if ( outputKind === 'json' ) {
4235 logger . log ( JSON . stringify ( data , undefined , 2 ) )
36+ return
37+ }
38+
39+ if ( outputKind === 'markdown' ) {
40+ logger . log ( `\n# Package report for ${ pkgName } \n` )
41+ logger . log ( 'Package report card:\n' )
4342 } else {
44- logger . log ( '\nPackage report card:' )
45- const scoreResult = {
46- 'Supply Chain Risk' : Math . floor ( score . supplyChainRisk . score * 100 ) ,
47- Maintenance : Math . floor ( score . maintenance . score * 100 ) ,
48- Quality : Math . floor ( score . quality . score * 100 ) ,
49- Vulnerabilities : Math . floor ( score . vulnerability . score * 100 ) ,
50- License : Math . floor ( score . license . score * 100 )
43+ logger . log ( `\nPackage report card for ${ pkgName } :\n` )
44+ }
45+ const scoreResult = {
46+ 'Supply Chain Risk' : Math . floor ( score . supplyChainRisk . score * 100 ) ,
47+ Maintenance : Math . floor ( score . maintenance . score * 100 ) ,
48+ Quality : Math . floor ( score . quality . score * 100 ) ,
49+ Vulnerabilities : Math . floor ( score . vulnerability . score * 100 ) ,
50+ License : Math . floor ( score . license . score * 100 )
51+ }
52+ Object . entries ( scoreResult ) . map ( score =>
53+ logger . log ( `- ${ score [ 0 ] } : ${ formatScore ( score [ 1 ] ) } ` )
54+ )
55+ logger . log ( '\n' )
56+
57+ if ( objectSome ( severityCount ) ) {
58+ if ( outputKind === 'markdown' ) {
59+ logger . log ( '# Issues\n' )
5160 }
52- Object . entries ( scoreResult ) . map ( score =>
53- logger . log ( `- ${ score [ 0 ] } : ${ formatScore ( score [ 1 ] ) } ` )
61+ logger . log (
62+ `Package has these issues : ${ formatSeverityCount ( severityCount ) } \n`
5463 )
55- logger . log ( '\n' )
56- if ( objectSome ( severityCount ) ) {
57- spinner [ strict ? 'error' : 'success' ] (
58- `Package has these issues: ${ formatSeverityCount ( severityCount ) } `
59- )
60- formatPackageIssuesDetails ( data , outputMarkdown )
61- } else {
62- spinner . successAndStop ( 'Package has no issues' )
63- }
64+ formatPackageIssuesDetails ( data , outputKind === 'markdown' )
65+ } else {
66+ logger . log ( 'Package has no issues' )
67+ }
6468
65- const format = new ColorOrMarkdown ( ! ! outputMarkdown )
66- const url = getSocketDevPackageOverviewUrl ( NPM , pkgName , pkgVersion )
69+ const format = new ColorOrMarkdown ( outputKind === 'markdown' )
70+ const url = getSocketDevPackageOverviewUrl ( NPM , pkgName , pkgVersion )
6771
68- logger . log ( '\n' )
69- if ( pkgVersion === 'latest' ) {
70- logger . log (
71- `Detailed info on socket.dev: ${ format . hyperlink ( `${ pkgName } ` , url , { fallbackToUrl : true } ) } `
72- )
73- } else {
74- logger . log (
75- `Detailed info on socket.dev: ${ format . hyperlink ( `${ pkgName } v${ pkgVersion } ` , url , { fallbackToUrl : true } ) } `
76- )
77- }
78- if ( ! outputMarkdown ) {
79- logger . log (
80- colors . dim (
81- `\nOr rerun ${ colors . italic ( name ) } using the ${ colors . italic ( '--json' ) } flag to get full JSON output`
82- )
83- )
84- }
72+ logger . log ( '\n' )
73+ if ( pkgVersion === 'latest' ) {
74+ logger . log (
75+ `Detailed info on socket.dev: ${ format . hyperlink ( `${ pkgName } ` , url , { fallbackToUrl : true } ) } `
76+ )
77+ } else {
78+ logger . log (
79+ `Detailed info on socket.dev: ${ format . hyperlink ( `${ pkgName } v${ pkgVersion } ` , url , { fallbackToUrl : true } ) } `
80+ )
8581 }
86-
87- if ( strict && objectSome ( severityCount ) ) {
88- process . exit ( 1 )
82+ if ( outputKind !== 'markdown' ) {
83+ logger . log (
84+ colors . dim (
85+ `\nOr rerun ${ colors . italic ( name ) } using the ${ colors . italic ( '--json' ) } flag to get full JSON output`
86+ )
87+ )
88+ } else {
89+ logger . log ( '' )
8990 }
9091}
9192
@@ -118,7 +119,7 @@ function formatPackageIssuesDetails(
118119 { }
119120 )
120121
121- const format = new ColorOrMarkdown ( ! ! outputMarkdown )
122+ const format = new ColorOrMarkdown ( outputMarkdown )
122123 for ( const issue of Object . keys ( uniqueIssues ) ) {
123124 const issueWithLink = format . hyperlink (
124125 `${ uniqueIssues [ issue ] ?. label } ` ,
0 commit comments