@qso-soft/shared
Version:
Shared library for QSO-soft
69 lines • 2.67 kB
JavaScript
import { getRandomNumber, getRandomNumberRange, shuffleArray } from '../utils';
const getOrderedModules = ({ modules, shouldShuffleModules, }) => {
const groupedModules = modules.reduce((acc, item) => {
const { indexGroup } = item;
const isGroupExistInAcc = indexGroup in acc && Array.isArray(acc[indexGroup]);
if (isGroupExistInAcc) {
acc[indexGroup].push(item);
}
else {
acc[indexGroup] = [item];
}
return acc;
}, {});
return Object.entries(groupedModules).reduce((acc, [_, modules]) => {
if (modules?.length > 1 && shouldShuffleModules) {
return [...acc, ...shuffleArray(modules)];
}
return [...acc, ...modules];
}, []);
};
const splitModuleCount = (modules) => {
const splitedModules = [];
modules.forEach((module) => {
const count = module.count;
const countRange = getRandomNumberRange(count);
for (let i = 0; i < countRange; i++) {
const moduleCopy = { ...module, count };
moduleCopy.count = [1, 1];
splitedModules.push(moduleCopy);
}
return;
});
return splitedModules;
};
export const prepareModules = ({ routeSettings, defaultModuleConfigs, shouldShuffleModules, }) => {
let modules = routeSettings.modules.reduce((acc, cur) => {
const { delay, moduleName, ...rest } = cur;
const defaultConfig = defaultModuleConfigs[moduleName] || {};
const { delay: defaultConfigDelay, ...restDefaults } = defaultConfig;
const transactionsDelayRange = delay || defaultConfigDelay;
const moduleConfig = {
delay: transactionsDelayRange,
moduleName,
...restDefaults,
...rest,
};
return [...acc, moduleConfig];
}, []);
const shouldSplitModuleCount = routeSettings.splitModuleCount || false;
if (shouldSplitModuleCount) {
modules = splitModuleCount(modules);
}
modules = getOrderedModules({
modules,
shouldShuffleModules,
});
if (routeSettings.countModules[0] !== 0 && routeSettings.countModules[1] !== 0) {
const amount = getRandomNumberRange(routeSettings.countModules);
modules = modules.slice(0, amount);
}
return modules;
};
export const prepareModulesWithOptions = ({ getUpdatedModulesCallback, ...restProps }) => {
return prepareModules(restProps).reduce((acc, module) => {
const count = getRandomNumber(module.count, true);
return [...acc, ...getUpdatedModulesCallback(module, count)];
}, []);
};
//# sourceMappingURL=prepare-modules.js.map