npm-audit-pipeline
Version:
Using npm audit in deployment pipelines
42 lines (41 loc) • 2.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.runAudit = exports.ExitStatus = void 0;
var function_1 = require("fp-ts/lib/function");
var TE = require("fp-ts/TaskEither");
var T = require("fp-ts/Task");
var RT = require("fp-ts/ReaderTask");
var IO = require("fp-ts/IO");
var Console_1 = require("fp-ts/Console");
var argsParser_1 = require("./argsParser");
var auditor_1 = require("./auditor");
var ExitStatus;
(function (ExitStatus) {
ExitStatus[ExitStatus["success"] = 0] = "success";
ExitStatus[ExitStatus["failed"] = 1] = "failed";
})(ExitStatus = exports.ExitStatus || (exports.ExitStatus = {}));
var writeVulnerabilityResultToTerminal = function (failedVulnerabilities) {
return failedVulnerabilities.map(function (x) {
var level = x.level, expectedCount = x.expectedCount, actualCount = x.actualCount;
return (0, function_1.pipe)((0, Console_1.error)('\x1b[31m \x1b[40m NPM AUDIT FAILED'), IO.chain(function () {
return (0, Console_1.error)("\u001B[0m \u001B[33m For level: ".concat(level, ", the expected vulnerabilities should be ").concat(expectedCount, " but got ").concat(actualCount, "\n"));
}))();
});
};
var logResultToTerminal = function (result) {
return (0, function_1.pipe)(result, TE.fold(function (error) {
return (0, function_1.pipe)((0, Console_1.info)("\u001B[31m \u001B[40m Failed to run npm audit pipeline - Reason: ".concat(error.message)), IO.map((0, function_1.constant)(ExitStatus.failed)), T.fromIO);
}, (0, function_1.flow)(IO.of, IO.chainFirst((0, function_1.flow)(writeVulnerabilityResultToTerminal, function_1.constVoid, IO.of)), IO.chain(function (failedVulnerabilities) {
return failedVulnerabilities.length
? IO.of(ExitStatus.failed)
: (0, function_1.pipe)((0, Console_1.info)('NPM audit passed...'), IO.map((0, function_1.constant)(ExitStatus.success)));
}), T.fromIO)));
};
var runAudit = function () {
return (0, function_1.pipe)(RT.ask(), RT.chainTaskK(function (env) {
return (0, function_1.pipe)(env.getCommandLineArgs(), argsParser_1.parseCommandLineArgs, TE.fromEither, TE.chain(function (config) {
return (0, function_1.pipe)(config, env.runNpmAuditCommand, TE.map((0, auditor_1.evaluateFailedVulnerabilities)(config)));
}), logResultToTerminal);
}));
};
exports.runAudit = runAudit;