UNPKG

@auttam/easycli

Version:

A quick and easy way of creating cli for your npm package.

67 lines (66 loc) 2.91 kB
"use strict"; 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;