UNPKG

fast-cartesian

Version:
43 lines (42 loc) 1.16 kB
import { type Inputs } from './validate.js'; /** * Returns a two-dimensional `Array` where each row is a combination of * `inputs`. * * @example * ```js * console.log( * fastCartesian([ * ['red', 'blue'], * ['circle', 'square'], * ]), * ) * // [ * // [ 'red', 'circle' ], * // [ 'red', 'square' ], * // [ 'blue', 'circle' ], * // [ 'blue', 'square' ] * // ] * * // Return initial indexes * console.log( * fastCartesian( * [ * ['red', 'blue'], * ['circle', 'square'], * ].map(Object.entries), * ), * ) * // [ * // [ [ '0', 'red' ], [ '0', 'circle' ] ], * // [ [ '0', 'red' ], [ '1', 'square' ] ], * // [ [ '1', 'blue' ], [ '0', 'circle' ] ], * // [ [ '1', 'blue' ], [ '1', 'square' ] ] * // ] * ``` */ declare const fastCartesian: <InputArrays extends Inputs>(inputs: readonly [...InputArrays]) => CartesianProduct<InputArrays>; export default fastCartesian; type CartesianProduct<InputArrays extends Inputs> = InputArrays extends readonly [] ? [] : { [index in keyof InputArrays]: InputArrays[index] extends readonly (infer InputElement)[] ? InputElement : never; }[];