UNPKG

typia

Version:

Superfast runtime validators with only one line

28 lines (27 loc) 1.25 kB
import { _isUniqueItems } from "./_isUniqueItems.mjs"; import { _randomInteger } from "./_randomInteger.mjs"; //#region src/internal/_randomArray.ts const DEFAULT_MIN_ITEMS = 1; const DEFAULT_RANGE = 5; const DEFAULT_RECURSIVE_RANGE = 2; const _randomArray = (props) => { const defaultMinimum = props.recursive === true ? 0 : DEFAULT_MIN_ITEMS; const minimum = props.minItems ?? Math.min(props.maxItems ?? defaultMinimum, defaultMinimum); const count = _randomInteger({ type: "integer", minimum, maximum: props.maxItems ?? minimum + (props.recursive === true ? DEFAULT_RECURSIVE_RANGE : DEFAULT_RANGE) }); if (props.uniqueItems !== true) return new Array(count).fill(null).map((_, i) => props.element(i, count)); const elements = []; const maximumAttempts = count * 100 + 1e3; for (let attempts = 0; elements.length !== count; attempts++) { if (attempts === maximumAttempts) throw new Error("Unable to generate enough unique items; the element domain may be too small."); const candidate = props.element(elements.length, count); if (elements.every((element) => _isUniqueItems([element, candidate]))) elements.push(candidate); } return elements; }; //#endregion export { _randomArray }; //# sourceMappingURL=_randomArray.mjs.map