typia
Version:
Superfast runtime validators with only one line
28 lines (27 loc) • 1.25 kB
JavaScript
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