jet-validators
Version:
Fast, zero-dependency TypeScript validators and utilities for runtime checks, parsing, and lightweight object schema validation.
41 lines (40 loc) • 1.34 kB
JavaScript
import { markSafe } from '../utils/parseObject/mark-safe.js';
export function isValidArray(arg, minLength, maxLength) {
return isValidArrayCore(arg, false, false, minLength, maxLength);
}
export function isOptionalValidArray(arg, minLength, maxLength) {
return isValidArrayCore(arg, true, false, minLength, maxLength);
}
export function isNullableValidArray(arg, minLength, maxLength) {
return isValidArrayCore(arg, false, true, minLength, maxLength);
}
export function isNullishValidArray(arg, minLength, maxLength) {
return isValidArrayCore(arg, true, true, minLength, maxLength);
}
function isValidArrayCore(arr, optional, nullable, minLength = 0, maxLength) {
const lookup = new Set(arr);
const validator = (arg) => {
if (arg === undefined) {
return !!optional;
}
if (arg === null) {
return !!nullable;
}
if (!Array.isArray(arg)) {
return false;
}
if (arg.length < minLength) {
return false;
}
if (maxLength !== undefined && arg.length > maxLength) {
return false;
}
for (let i = 0; i < arg.length; i++) {
if (!lookup.has(arg[i])) {
return false;
}
}
return true;
};
return markSafe(validator);
}