UNPKG

typia

Version:

Superfast runtime validators with only one line

33 lines 1.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._randomArray = void 0; const _isUniqueItems_1 = require("./_isUniqueItems"); const _randomInteger_1 = require("./_randomInteger"); const DEFAULT_MIN_ITEMS = 1; const DEFAULT_RANGE = 5; const DEFAULT_RECURSIVE_RANGE = 2; const _randomArray = (props) => { var _a, _b, _c; const defaultMinimum = props.recursive === true ? 0 : DEFAULT_MIN_ITEMS; const minimum = (_a = props.minItems) !== null && _a !== void 0 ? _a : Math.min((_b = props.maxItems) !== null && _b !== void 0 ? _b : defaultMinimum, defaultMinimum); const count = (0, _randomInteger_1._randomInteger)({ type: "integer", minimum, maximum: (_c = props.maxItems) !== null && _c !== void 0 ? _c : 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 + 1000; 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) => (0, _isUniqueItems_1._isUniqueItems)([element, candidate]))) elements.push(candidate); } return elements; }; exports._randomArray = _randomArray; //# sourceMappingURL=_randomArray.js.map