Files
npm-audit-action/src/audit.ts

47 lines
1.1 KiB
TypeScript
Raw Normal View History

import {spawnSync, SpawnSyncReturns} from 'child_process'
import stripAnsi from 'strip-ansi'
const SPAWN_PROCESS_BUFFER_SIZE = 10485760 // 10MiB
export class Audit {
stdout = ''
private status: number | null = null
public run(auditLevel: string): void {
try {
const result: SpawnSyncReturns<string> = spawnSync(
'npm',
['audit', '--audit-level', auditLevel],
{
encoding: 'utf-8',
maxBuffer: SPAWN_PROCESS_BUFFER_SIZE
}
)
if (result.error) {
throw result.error
}
if (result.status === null) {
throw new Error('the subprocess terminated due to a signal.')
}
if (result.stderr && result.stderr.length > 0) {
throw new Error(result.stderr)
}
this.status = result.status
this.stdout = result.stdout
} catch (error) {
throw error
}
}
public foundVulnerability(): boolean {
// `npm audit` return 1 when it found vulnerabilities
return this.status === 1
}
public strippedStdout(): string {
return `\`\`\`\n${stripAnsi(this.stdout)}\n\`\`\``
}
}