/**
* 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];
}
Source