utils/queryParser.ts (32 lines of code) (raw):
export function parseEnum<T extends string>(
value: unknown,
allowedValues: readonly T[],
defaultValue: T
): T {
const str = String(value || defaultValue);
return allowedValues.includes(str as T) ? (str as T) : defaultValue;
}
export function parseStringArray<T extends string>(
value: unknown,
allowedValues: readonly T[],
defaultValue: T[]
): T[] {
if (!value) {
return defaultValue;
}
const list = String(value).split(',').map((x) => x.trim()).filter(Boolean);
const set = new Set<T>();
for (const item of list) {
if (allowedValues.includes(item as T)) {
set.add(item as T);
}
}
return set.size === 0 ? defaultValue : Array.from(set);
}
export function parseBoolean(value: unknown, defaultValue: boolean = true): boolean {
if (value === true || value === false) {
return value;
}
const s = String(value || String(defaultValue)).toLowerCase();
return s === 'true' || s === '1' || s === 'yes';
}