/** @internal */ export const getCombinations = (values: Array>): Array> => { if (!values.every((a) => a.length > 0)) { return []; } const result: Array> = []; const counters = values.map((_) => 0); const increaseCounter = (i: number): boolean => { if (i >= counters.length) { return false; } counters[i]++; if (counters[i] >= values[i].length) { counters[i] = 0; return increaseCounter(i + 1); } return true; }; do { result.push(values.map((v, i) => v[counters[i]])); } while (increaseCounter(0)); return result; };