export function removeMultipleSlashes(pathname: string) { return pathname.replaceAll(/\/\/+/g, "/") } export function removeTrailingSlash(pathname: string) { if (pathname.endsWith("/")) { // Remove the trailing slash return pathname.slice(0, -1) } return pathname } export function getFormattedUrlQueryParams( searchParams: URLSearchParams, dataTypes: Record ) { const searchParamsObject: Record = Array.from( searchParams.entries() ).reduce>( (acc, [key, value]) => { const keys = key.replace(/\]/g, "").split(/\[|\./) // Split keys by '[' or '.' keys.reduce((nestedAcc, k, i) => { if (i === keys.length - 1) { if (dataTypes[k] == "number") { ;(nestedAcc as Record)[k] = Number(value) } else if (dataTypes[k] == "boolean") { ;(nestedAcc as Record)[k] = value.toLowerCase() === "true" } else { ;(nestedAcc as Record)[k] = value } } else { if (!nestedAcc[k]) { nestedAcc[k] = isNaN(Number(keys[i + 1])) ? {} : [] // Initialize as object or array } } return nestedAcc[k] as Record }, acc) return acc }, {} as Record ) return searchParamsObject }