npm-audit-pipeline
Version:
Using npm audit in deployment pipelines
72 lines (71 loc) • 2.39 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
exports.runNpmAuditCommand = void 0;
var E = require('fp-ts/Either');
var TE = require('fp-ts/TaskEither');
var RTE = require('fp-ts/ReaderTaskEither');
var function_1 = require('fp-ts/function');
var Console_1 = require('fp-ts/lib/Console');
var executorResponseHandler_1 = require('./executorResponseHandler');
var retry_ts_1 = require('retry-ts');
var Task_1 = require('retry-ts/Task');
var policy = function (retries) {
return (0, retry_ts_1.capDelay)(
2000,
retry_ts_1.Monoid.concat(
(0, retry_ts_1.exponentialBackoff)(200),
(0, retry_ts_1.limitRetries)(retries),
),
);
};
var getCommand = function (config) {
if (config.packageManager === 'npm') {
return process.platform === 'win32'
? 'set dir=%cd% && cd / && npx npm --prefix %dir% audit --json'
: 'dir=$(pwd) && cd / && npx npm --prefix ${dir} audit --json';
}
return ''.concat(config.packageManager, ' audit --json');
};
var execAsPromise = function (env, command) {
return new Promise(function (resolve, reject) {
return env.exec(command, function (err, stdout, stderr) {
return err && !stdout
? (0, function_1.pipe)((0, Console_1.error)(err)(), function () {
return reject(err);
})
: resolve({ stdout: stdout, stderr: stderr });
});
});
};
var runNpmAuditCommand = function (config) {
return (0, function_1.pipe)(
RTE.ask(),
RTE.chainTaskEitherK(function (env) {
return (0, Task_1.retrying)(
policy(config.retry),
function () {
return (0, function_1.pipe)(
TE.tryCatch(
function () {
return execAsPromise(env, getCommand(config));
},
function (error) {
return error instanceof Error
? error
: new Error('Failed to execute child process command');
},
),
TE.chainEitherK(
config.packageManager === 'yarn'
? executorResponseHandler_1.handleExecYarnResponse
: executorResponseHandler_1.handleExecResponse,
),
);
},
E.isLeft,
);
}),
);
};
exports.runNpmAuditCommand = runNpmAuditCommand;
// "x=$(pwd) && cd / && npx npm --prefix ${x} audit --json"