UNPKG

perfrunner-core

Version:

Automated UI performance test tool to measure performance changes for the web apps and sites

54 lines (53 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mergeWithRules = exports.average = exports.first = exports.exclude = void 0; const exclude = () => null; exports.exclude = exclude; const first = (values) => values[0]; exports.first = first; const average = (values) => { const withoutNulls = values.filter((v) => v != null && !isNaN(v)); return withoutNulls.length ? withoutNulls.reduce((sum, v) => sum + v, 0) / withoutNulls.length : 0; }; exports.average = average; const getDefaultMergeFunc = (value) => { const valueType = typeof value; switch (valueType) { case 'string': return exports.first; case 'number': return exports.average; } if (Object.prototype.toString.call(value) === '[object Object]') { return (data) => mergeWithRules(data); } return exports.exclude; }; function mergeWithRules(data, rules) { // store data from all runs var accumulator = {}; // fill the store with key | values data.forEach((obj) => { const entries = Object.entries(obj); entries.forEach(([key, value]) => { if (accumulator[key]) { accumulator[key].push(value); } else { accumulator[key] = [value]; } }); }); // apply merge rule to the array of values return Object.entries(accumulator).reduce((acc, [key, values]) => { const definedValue = values.find((x) => x != undefined); const customRule = rules ? rules[key] : undefined; const rule = typeof customRule === 'function' ? customRule : getDefaultMergeFunc(definedValue); const mergeResult = rule(values); if (mergeResult != null) { acc[key] = mergeResult; } return acc; }, {}); } exports.mergeWithRules = mergeWithRules;