npm-audit-resolver
Version:
Aids humans and automation in managing npm audit results
74 lines (69 loc) • 2.16 kB
JavaScript
const argv = require('../arguments').get()
const promiseCommand = require('../promiseCommand');
let currentActiveRunner;
function setActiveImplementation(name) {
currentActiveRunner = name
}
const runners = {
}
function runner(pkgmanager) {
pkgmanager = pkgmanager || currentActiveRunner
return runners[pkgmanager]
}
module.exports = {
addImplementation(name, implementation) {
if (!typeof implementation.getAudit === 'function') {
throw Error('Package Manager implementation must expose a getAudit function returning a promise for audit data.')
}
if (!implementation.version === 1) {
throw Error(`expected version to be set to 1 on implementation, got ${implementation.version} instead`)
}
runners[name] = implementation
// enable first by default
if (!currentActiveRunner) {
setActiveImplementation(name)
}
},
setActiveImplementation,
/**
*
*
* @param {*} { pkgmanager, shellOptions }
* @returns {Promise<Array<Vuln>>} list of vulnerabilities
*/
getAudit({ pkgmanager, shellOptions }) {
return runner(pkgmanager).getAudit({
promiseCommand,
argv: Object.assign({}, argv),
shellOptions
}).then(output => {
try {
if (typeof output === 'string') {
return JSON.parse(output)
} else {
return output
}
} catch (e) {
console.error('failed to parse output')
console.error(output)
throw e;
}
})
//TODO: assert valid output format
},
remove({ pkgmanager, shellOptions, names }) {
return runner(pkgmanager).remove({
promiseCommand,
argv: Object.assign({}, argv),
shellOptions,
names
})
},
fix({ pkgmanager, shellOptions } = {}) {
return runner(pkgmanager).fix({
promiseCommand,
argv: Object.assign({}, argv),
shellOptions
})
}
}