Simon Priet e69a613a37 feat: Created a mini nodeJS server with NewMan for testing without PostMan GUI.
This will mimic a run in a CD/CI environment or docker container.
2021-09-08 14:01:19 +02:00

60 lines
1.9 KiB
JavaScript

/* eslint-disable no-process-env */
var _ = require('lodash'),
fs = require('fs'),
join = require('path').join,
async = require('async'),
util = require('../util'),
liquidJSON = require('liquid-json'),
/**
* Name of the directory that contains the file denoted by FILE_NAME.
*
* @type {String}
*/
POSTMAN_CONFIG_DIR = 'postman',
/**
* Name of the file that contains Newman compliant confguration information.
*
* @type {String}
*/
FILE_NAME = 'newmanrc';
/**
* Configuration loader to acquire run settings from a file present in the home directory: POSTMAN_CONFIG_DIR/FILE_NAME.
*
* @param {Function} callback - The callback function invoked to mark the completion of the config loading routine.
* @returns {*}
*/
module.exports.load = (callback) => {
var iswin = (/^win/).test(process.platform),
home = iswin ? process.env.USERPROFILE : process.env.HOME,
configFiles = [];
!iswin && configFiles.push(join('/etc', POSTMAN_CONFIG_DIR, FILE_NAME));
home && configFiles.push(join(home, '.' + POSTMAN_CONFIG_DIR, FILE_NAME));
configFiles.push(join(process.cwd(), '.' + FILE_NAME));
async.mapSeries(configFiles, (path, cb) => {
fs.readFile(path, (err, data) => {
if (err) {
return cb(null, {}); // err masked to avoid overpopulating terminal with missing .newmanrc messages
}
data && data.toString && (data = data.toString(util.detectEncoding(data)).trim());
try {
return cb(null, liquidJSON.parse(data));
}
catch (e) {
return cb(_.set(e, 'help', `The file at ${path} contains invalid data.`));
}
});
}, (err, files) => {
if (err) {
return callback(err);
}
return callback(null, _.merge.apply(this, files));
});
};