@auttam/easycli
Version:
A quick and easy way of creating cli for your npm package.
67 lines (66 loc) • 2.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getParameters = exports.getOwnFunctions = exports.mergeTypeSafe = void 0;
function mergeTypeSafe(target, source, options = {}) {
if (!source || !target)
return;
options.copyEmpty = options.copyEmpty || false;
options.copyFunctions = options.copyFunctions || false;
options.throwTypeError = options.throwTypeError || false;
options.ignoreProps = Array.isArray(options.ignoreProps) ? options.ignoreProps : [];
options.insertProps = options.insertProps || false;
Reflect.ownKeys(source).forEach(property => {
if (options.ignoreProps && options.ignoreProps.indexOf(property) > -1)
return;
var propSource = Reflect.get(source, property);
var propTarget = Reflect.get(target, property);
if (typeof propSource == 'function' && !options.copyFunctions)
return;
if (Array.isArray(propTarget)) {
if (!Array.isArray(propSource))
return;
if (!propSource.length && !options.copyEmpty)
return;
}
if (!propSource && !options.copyEmpty)
return;
if (typeof propTarget == 'undefined') {
if (!options.insertProps)
return;
if (!Array.isArray(options.insertProps) || !options.insertProps.length)
return;
if (typeof property != "string" || options.insertProps.indexOf(property) == -1)
return;
target[property] = propSource;
return;
}
if (typeof propSource == typeof propTarget) {
Reflect.set(target, property, propSource);
}
else {
if (options.throwTypeError) {
throw new TypeError('Type mismatch while updating additional configuration, expected: "' + typeof propTarget + '" for "' + property.toString() + '"');
}
}
});
}
exports.mergeTypeSafe = mergeTypeSafe;
function getOwnFunctions(target, cbFilter) {
cbFilter = cbFilter && typeof 'function' ? cbFilter : prop => typeof target[prop] == 'function';
var names = Object.getOwnPropertyNames(target);
if (names.length) {
return names.filter(cbFilter);
}
return Object.getOwnPropertyNames(Object.getPrototypeOf(target)).filter(cbFilter);
}
exports.getOwnFunctions = getOwnFunctions;
const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
const ARGUMENT_NAMES = /([^\s,]+)/g;
function getParameters(func) {
let fnStr = (typeof func == 'string' ? func : func.toString()).replace(STRIP_COMMENTS, '');
let result = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(ARGUMENT_NAMES);
if (result === null)
result = [];
return result;
}
exports.getParameters = getParameters;