conventional-changelog-action/node_modules/dargs/index.js

82 lines
1.7 KiB
JavaScript

'use strict';
var numberIsNan = require('number-is-nan');
function createArg(key, val, separator) {
key = key.replace(/[A-Z]/g, '-$&').toLowerCase();
return '--' + key + (val ? separator + val : '');
}
function match(arr, val) {
return arr.some(function (x) {
return x instanceof RegExp ? x.test(val) : x === val;
});
}
function createAliasArg(key, val) {
return '-' + key + (val ? ' ' + val : '');
}
module.exports = function (input, opts) {
var args = [];
var extraArgs = [];
opts = opts || {};
var separator = opts.useEquals === false ? ' ' : '=';
Object.keys(input).forEach(function (key) {
var val = input[key];
var argFn = createArg;
if (Array.isArray(opts.excludes) && match(opts.excludes, key)) {
return;
}
if (Array.isArray(opts.includes) && !match(opts.includes, key)) {
return;
}
if (typeof opts.aliases === 'object' && opts.aliases[key]) {
key = opts.aliases[key];
argFn = createAliasArg;
}
if (key === '_') {
if (!Array.isArray(val)) {
throw new TypeError('Expected key \'_\' to be an array, but found ' + (typeof val));
}
extraArgs = val;
return;
}
if (val === true) {
args.push(argFn(key, ''));
}
if (val === false && !opts.ignoreFalse) {
args.push(argFn('no-' + key));
}
if (typeof val === 'string') {
args.push(argFn(key, val, separator));
}
if (typeof val === 'number' && !numberIsNan(val)) {
args.push(argFn(key, String(val), separator));
}
if (Array.isArray(val)) {
val.forEach(function (arrVal) {
args.push(argFn(key, arrVal, separator));
});
}
});
extraArgs.forEach(function (extraArgVal) {
args.push(String(extraArgVal));
});
return args;
};