@jitesoft/audit-for-gitlab
Version:
Minimal application to convert npm audit report into gitlab-ci vulnerability report format.
119 lines (113 loc) • 3.18 kB
JavaScript
;
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.writeFile = exports.readFileJson = exports.logger = exports.hasOwn = exports.getConf = exports.fileExists = exports.LogLevels = void 0;
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/promise"));
var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/instance/includes"));
var _fs = require("fs");
const hasOwn = (object, key) => {
if (Object.hasOwn) {
return Object.hasOwn(object, key);
}
// eslint-disable-next-line no-prototype-builtins
return object.hasOwnProperty(key);
};
/**
* Fetch a value from the configuration.
* In this case, the configuration is fully done by environment variables.
*
* @param {string} key Key to look for.
* @param {any} def Default value to return in case no key was found.
* @return {string|null}
*/
exports.hasOwn = hasOwn;
const getConf = (key, def = null) => {
if (hasOwn(process.env, key)) {
return process.env[key] ?? def;
}
return def;
};
/**
* Check if a given file exists.
*
* @param {string} file File to check.
* @return {Promise<boolean>}
*/
exports.getConf = getConf;
const fileExists = async file => {
try {
await _fs.promises.open(file, 'r');
return true;
} catch (e) {
if (e.code === 'ENOENT') {
return false;
}
throw e;
}
};
/**
* Write data to file.
*
* @param {string} file File to write to.
* @param {string} data Data to write to file.
* @return {Promise<void>}
*/
exports.fileExists = fileExists;
const writeFile = async (file, data) => {
return _fs.promises.writeFile(file, data);
};
exports.writeFile = writeFile;
const readFileJson = async file => {
const data = await _fs.promises.readFile(file);
return JSON.parse(data);
};
exports.readFileJson = readFileJson;
const stdout = async message => {
return new _promise.default((resolve, reject) => {
process.stdout.write(message + '\n', () => {
resolve();
});
});
};
const stderr = async message => {
return new _promise.default((resolve, reject) => {
process.stderr.write(message + '\n', () => {
resolve();
});
});
};
const logLevels = {
fatal: stderr,
error: stderr,
warn: stdout,
info: stdout,
debug: stdout
};
const LogLevels = exports.LogLevels = {
fatal: 'fatal',
error: 'error',
warn: 'warn',
info: 'info',
debug: 'debug'
};
/**
* Asynchronously log to stdout or stderr, depending on log-level.
*
* Available log levels are:
* <pre>fatal, error, warn, info, debug</pre>
*
* @param {string} level Level to log.
* @param {string} message Message to log.
* @return {Promise<void>}
*/
const logger = async (level, message) => {
const logLevel = getConf('SECURE_LOG_LEVEL', 'info').toLowerCase();
const keys = ['fatal', 'error', 'warn', 'info', 'debug'];
if ((0, _includes.default)(keys).call(keys, logLevel)) {
logLevels[logLevel](message);
}
};
exports.logger = logger;