UNPKG

@qso-soft/shared

Version:

Shared library for QSO-soft

69 lines 2.67 kB
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