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
JavaScript
;
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;