typia
Version:
Superfast runtime validators with only one line
33 lines • 1.6 kB
JavaScript
;
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