UNPKG

deep-values

Version:

deepValues capture version of Object.values and deepFilter

58 lines 7.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * deep return all primative values of an object * * @param {any} source can be anything, including primatives, object or array * @param {any[] = new Array() } stack optional array to track all objects we processed * @return {any[]} array of values */ function deepValues(source, stack) { if (stack === void 0) { stack = new Array(); } var result = [], values = source, sourceType = source === null ? 'null' : typeof source; if ((source && source.window === source) || stack.includes(source)) { sourceType = 'cyclic'; } else if (Array.isArray(source) || source instanceof Array) { sourceType = 'array'; } stack.push(source); switch (sourceType) { case 'string': case 'number': case 'bigint': case 'boolean': // simply return known primitives result.push(source); break; // @ts-ignore TS2445 case 'object': // convert object to array values = Object.values(source); case 'array': // deepValues all values.forEach(function (v) { return (result = result.concat(deepValues(v, stack))); }); break; default: // else, ignore all example: null, undefined, function, symbol break; } return result; } /** * helper method to deep filtering an array * this basically short-cutting the usage of deepValues * * @param {T[] | T[]} source array of specific type * @param {(any, number, any[]) => boolean } valueFilterFn predicate filtering on the Object primative values * @return {T[]} items matching filter in array */ function deepFilter(source, valueFilterFn) { if ((Array.isArray(source) || source instanceof Array)) { return source.filter(function (item) { return deepValues(item, [source]).some(valueFilterFn); }); } var myArray = Object.values(source); return myArray.filter(function (item) { return deepValues(item, [source, myArray]).some(valueFilterFn); }); } exports.default = { deepValues: deepValues, deepFilter: deepFilter }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxNQUFXLEVBQUUsS0FBMEI7SUFBMUIsc0JBQUEsRUFBQSxZQUFtQixLQUFLLEVBQUU7SUFDekQsSUFBSSxNQUFNLEdBQVUsRUFBRSxFQUNwQixNQUFNLEdBQVUsTUFBTSxFQUN0QixVQUFVLEdBQVcsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQztJQUVoRSxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25FLFVBQVUsR0FBRyxRQUFRLENBQUM7SUFDeEIsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDNUQsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuQixRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssU0FBUztZQUNaLGlDQUFpQztZQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BCLE1BQU07UUFFUixvQkFBb0I7UUFDcEIsS0FBSyxRQUFRO1lBQ1gsMEJBQTBCO1lBQzFCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLEtBQUssT0FBTztZQUNWLGlCQUFpQjtZQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBOUMsQ0FBOEMsQ0FBQyxDQUFDO1lBQ3RFLE1BQU07UUFDUjtZQUNFLDhEQUE4RDtZQUM5RCxNQUFNO0lBQ1YsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxVQUFVLENBQUksTUFBZSxFQUFFLGFBQW9FO0lBRTFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBOUMsQ0FBOEMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXBDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQXZELENBQXVELENBQUMsQ0FBQztBQUN6RixDQUFDO0FBRUQsa0JBQWUsRUFBRSxVQUFVLFlBQUEsRUFBRSxVQUFVLFlBQUEsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZWVwIHJldHVybiBhbGwgcHJpbWF0aXZlIHZhbHVlcyBvZiBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gIHthbnl9ICAgc291cmNlICAgIGNhbiBiZSBhbnl0aGluZywgaW5jbHVkaW5nIHByaW1hdGl2ZXMsIG9iamVjdCBvciBhcnJheVxuICogQHBhcmFtICB7YW55W10gPSBuZXcgQXJyYXkoKSB9ICBzdGFjayAgIG9wdGlvbmFsIGFycmF5IHRvIHRyYWNrIGFsbCBvYmplY3RzIHdlIHByb2Nlc3NlZFxuICogQHJldHVybiB7YW55W119ICAgICAgICBhcnJheSBvZiB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gZGVlcFZhbHVlcyhzb3VyY2U6IGFueSwgc3RhY2s6IGFueVtdID0gbmV3IEFycmF5KCkpOiBhbnlbXSB7XG4gIGxldCByZXN1bHQ6IGFueVtdID0gW10sXG4gICAgdmFsdWVzOiBhbnlbXSA9IHNvdXJjZSxcbiAgICBzb3VyY2VUeXBlOiBzdHJpbmcgPSBzb3VyY2UgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygc291cmNlO1xuXG4gIGlmICgoc291cmNlICYmIHNvdXJjZS53aW5kb3cgPT09IHNvdXJjZSkgfHwgc3RhY2suaW5jbHVkZXMoc291cmNlKSkge1xuICAgIHNvdXJjZVR5cGUgPSAnY3ljbGljJztcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkgfHwgc291cmNlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBzb3VyY2VUeXBlID0gJ2FycmF5JztcbiAgfVxuXG4gIHN0YWNrLnB1c2goc291cmNlKTtcblxuICBzd2l0Y2ggKHNvdXJjZVR5cGUpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnYmlnaW50JzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIC8vIHNpbXBseSByZXR1cm4ga25vd24gcHJpbWl0aXZlc1xuICAgICAgcmVzdWx0LnB1c2goc291cmNlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgLy8gQHRzLWlnbm9yZSBUUzI0NDVcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgLy8gY29udmVydCBvYmplY3QgdG8gYXJyYXlcbiAgICAgIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoc291cmNlKTtcbiAgICBjYXNlICdhcnJheSc6XG4gICAgICAvLyBkZWVwVmFsdWVzIGFsbFxuICAgICAgdmFsdWVzLmZvckVhY2goKHYpID0+IChyZXN1bHQgPSByZXN1bHQuY29uY2F0KGRlZXBWYWx1ZXModiwgc3RhY2spKSkpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGVsc2UsIGlnbm9yZSBhbGwgZXhhbXBsZTogbnVsbCwgdW5kZWZpbmVkLCBmdW5jdGlvbiwgc3ltYm9sXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogaGVscGVyIG1ldGhvZCB0byBkZWVwIGZpbHRlcmluZyBhbiBhcnJheVxuICogdGhpcyBiYXNpY2FsbHkgc2hvcnQtY3V0dGluZyB0aGUgdXNhZ2Ugb2YgZGVlcFZhbHVlc1xuICpcbiAqIEBwYXJhbSAge1RbXSB8IFRbXX0gICAgIHNvdXJjZSAgYXJyYXkgb2Ygc3BlY2lmaWMgdHlwZVxuICogQHBhcmFtICB7KGFueSwgbnVtYmVyLCBhbnlbXSkgPT4gYm9vbGVhbiB9ICAgICB2YWx1ZUZpbHRlckZuICBwcmVkaWNhdGUgZmlsdGVyaW5nIG9uIHRoZSBPYmplY3QgcHJpbWF0aXZlIHZhbHVlc1xuICogQHJldHVybiB7VFtdfSAgICAgICAgICAgIGl0ZW1zIG1hdGNoaW5nIGZpbHRlciBpbiBhcnJheVxuICovXG5mdW5jdGlvbiBkZWVwRmlsdGVyPFQ+KHNvdXJjZTogVCB8IFRbXSwgdmFsdWVGaWx0ZXJGbjogKHZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIsIG9iamVjdDogYW55W10pID0+IGJvb2xlYW4pOiBUW10ge1xuXG4gIGlmICgoQXJyYXkuaXNBcnJheShzb3VyY2UpIHx8IHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgIHJldHVybiBzb3VyY2UuZmlsdGVyKGl0ZW0gPT4gZGVlcFZhbHVlcyhpdGVtLCBbc291cmNlXSkuc29tZSh2YWx1ZUZpbHRlckZuKSk7XG4gIH1cblxuICBsZXQgbXlBcnJheSA9IE9iamVjdC52YWx1ZXMoc291cmNlKTtcblxuICByZXR1cm4gbXlBcnJheS5maWx0ZXIoaXRlbSA9PiBkZWVwVmFsdWVzKGl0ZW0sIFtzb3VyY2UsIG15QXJyYXldKS5zb21lKHZhbHVlRmlsdGVyRm4pKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBkZWVwVmFsdWVzLCBkZWVwRmlsdGVyIH07XG4iXX0=