Source

utils/query.utils.js

/**
 * Query parsing utilities for handling HTTP query parameters
 * @category Utils
 */
/**
 * Parses a query parameter value into an array of specified type
 * Handles both comma-separated strings and array inputs
 * @template T - The type of array elements to return
 * @param {unknown} val - The query parameter value to parse
 * @returns {T[] | undefined} Parsed array or undefined if value is falsy
 * @example
 * // Comma-separated string
 * parseQueryStringArray<string>("foo,bar,baz") // ["foo", "bar", "baz"]
 * @example
 * // Array input
 * parseQueryStringArray<string>(["foo", "bar"]) // ["foo", "bar"]
 * @example
 * // Single value
 * parseQueryStringArray<string>("foo") // ["foo"]
 * @example
 * // Empty/undefined
 * parseQueryStringArray<string>(undefined) // undefined
 */
export function parseQueryStringArray(val) {
    if (!val)
        return undefined;
    // If already an array, return as-is with type assertion
    if (Array.isArray(val))
        return val;
    // Ensure val is a string or can be safely converted to string
    if (typeof val !== "string" && typeof val !== "number" && typeof val !== "boolean") {
        return undefined;
    }
    // Convert to string and parse comma-separated values
    const str = String(val);
    if (str.includes(",")) {
        return str
            .split(",")
            .map((s) => s.trim())
            .filter(Boolean);
    }
    // Single value
    return [str];
}