{ "version": 3, "sources": ["../../../app/utils/url.ts"], "sourcesContent": ["import { isNull, isObject, isUndefined, mapValues } from \"lodash-es\";\n\nconst TRAILING_SLASH_REGEX = /\\/+$/;\n\nconst dropTrailingSlashes = (str = ''): string =>\n str.replace(TRAILING_SLASH_REGEX, '');\n\nconst toSearchParams = (params: object): string => {\n const searchParams = new URLSearchParams();\n\n for (const [key, value] of Object.entries(params)) {\n if (isUndefined(value) || isNull(value)) {\n continue;\n }\n\n if (isObject(value)) {\n searchParams.append(key, JSON.stringify(value));\n } else {\n searchParams.append(key, value as string);\n }\n }\n\n return searchParams.toString();\n};\n\nconst stringify = (pathname: string, params: object): string => {\n const query = toSearchParams(params);\n return toUrlPath(pathname, query);\n};\n\nconst getSearchParams = (request: Request) => {\n const url = new URL(request.url);\n return Object.fromEntries(url.searchParams);\n};\n\n// Backend ids are not url safe. We have to encode them for time being.\nconst toEncodedIds = (ids: Record): Record =>\n mapValues(ids, (id) => encodeURIComponent(id as string));\n\nconst toUrlPath = (pathname: string, search = '') => {\n // TODO: Find a declarative way to construct path. using `URL` or something.\n const query = search.trim();\n if (!query) {\n return pathname;\n }\n const char = query.startsWith('?') ? '' : '?';\n return [pathname, query].join(char);\n};\n\nexport {\n dropTrailingSlashes,\n getSearchParams, stringify, toEncodedIds,\n toUrlPath\n};\n\n"], "mappings": "0EAOA,IAAMA,EAAkBC,GAA2B,CACjD,IAAMC,EAAe,IAAI,gBAEzB,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,CAAM,EAC1CI,EAAYD,CAAK,GAAKE,EAAOF,CAAK,IAIlCG,EAASH,CAAK,EAChBF,EAAa,OAAOC,EAAK,KAAK,UAAUC,CAAK,CAAC,EAE9CF,EAAa,OAAOC,EAAKC,CAAe,GAI5C,OAAOF,EAAa,SAAS,CAC/B,EAEMM,EAAY,CAACC,EAAkBR,IAA2B,CAC9D,IAAMS,EAAQV,EAAeC,CAAM,EACnC,OAAOU,EAAUF,EAAUC,CAAK,CAClC,EAQA,IAAME,EAAgBC,GACpBC,EAAUD,EAAME,GAAO,mBAAmBA,CAAY,CAAC,EAEnDC,EAAY,CAACC,EAAkBC,EAAS,KAAO,CAEnD,IAAMC,EAAQD,EAAO,KAAK,EAC1B,GAAI,CAACC,EACH,OAAOF,EAET,IAAMG,EAAOD,EAAM,WAAW,GAAG,EAAI,GAAK,IAC1C,MAAO,CAACF,EAAUE,CAAK,EAAE,KAAKC,CAAI,CACpC", "names": ["toSearchParams", "params", "searchParams", "key", "value", "isUndefined_default", "isNull_default", "isObject_default", "stringify", "pathname", "query", "toUrlPath", "toEncodedIds", "ids", "mapValues_default", "id", "toUrlPath", "pathname", "search", "query", "char"] }