@web3r/flowerkit
Version:
Tree-shakable JavaScript and TypeScript utility library for frontend/browser apps: DOM, events, arrays, objects, strings, date, JSON, and network helpers (ESM/CJS, SSR-friendly).
1 lines • 3.32 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":[""],"sourcesContent":["import { getWindow, getDocument } from \"ssr-window\";\r\nimport { getObjFromFormData } from \"../../obj/getObjFromFormData/index.ts\";\r\n\r\ntype TQueryParams = Record<string, string | number | boolean | null> | FormData;\r\n\r\nexport type TGetUrlWithQueryParamsArgs = Parameters<typeof getUrlWithQueryParams>;\r\n\r\nexport type TGetUrlWithQueryParamsReturn = ReturnType<typeof getUrlWithQueryParams>;\r\n\r\n/**\r\n * Returns a URL string with updated query parameters from an object or `FormData`.\r\n *\r\n * @param {string} [uri=window.location.href] Source URL\r\n * @param {Record<string, string|number|boolean|null>|FormData} [params={}] Params to merge into the query string\r\n * @returns {string} Updated URL\r\n */\r\nexport const getUrlWithQueryParams = (\r\n uri: string,\r\n params: TQueryParams = {}\r\n): string => {\r\n\r\n if (typeof uri !== \"string\") {\r\n throw new TypeError(\"getUrlWithQueryParams: uri must be a string\");\r\n } else if (!uri.length) {\r\n uri = getWindow().location.href;\r\n }\r\n\r\n if (typeof params !== \"object\") {\r\n throw new TypeError(\"getUrlWithQueryParams: params must be an object\");\r\n }\r\n\r\n if (params instanceof FormData) {\r\n params = getObjFromFormData(params) as Record<string, string | number | boolean | null>;\r\n }\r\n\r\n const a: HTMLAnchorElement = getDocument().createElement(\"a\");\r\n a.href = uri;\r\n\r\n Object.entries(params)\r\n .forEach(([ key, value ]) => {\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n const regex = new RegExp(`${key}((?:\\\\[[^\\\\]]*\\\\])?)(=|$)(.*)`, \"i\");\r\n let queryParams = (a.search || \"\")\r\n .replace(/^\\?/, \"\")\r\n .split(\"&\")\r\n .filter(Boolean);\r\n let paramFound = false;\r\n\r\n queryParams = queryParams.map((param: string) => {\r\n if (regex.test(param)) {\r\n paramFound = true;\r\n return `${key}=${value}`;\r\n }\r\n return param;\r\n });\r\n\r\n if (!paramFound) {\r\n queryParams.push(`${key}=${value}`);\r\n }\r\n\r\n a.search = queryParams.length ? `?${queryParams.join(\"&\")}` : \"\";\r\n });\r\n\r\n return a.href;\r\n};\r\n"],"names":["getUrlWithQueryParams","uri","params","TypeError","length","getWindow","location","href","FormData","getObjFromFormData","a","getDocument","createElement","Object","entries","forEach","key","value","regex","RegExp","queryParams","search","replace","split","filter","Boolean","paramFound","map","param","test","push","join"],"mappings":";;;;;;;GAgBO,MAAMA,sBAAwBA,CACnCC,IACAC,OAAuB,MAGvB,UAAWD,MAAQ,SACjB,MAAM,IAAIE,UAAU,oDACf,IAAKF,IAAIG,OACdH,IAAMI,UAAAA,YAAYC,SAASC,KAG7B,UAAWL,SAAW,SACpB,MAAM,IAAIC,UAAU,mDAGtB,GAAID,kBAAkBM,SACpBN,OAASO,MAAAA,mBAAmBP,QAG9B,MAAMQ,EAAuBC,UAAAA,cAAcC,cAAc,KACzDF,EAAEH,KAAON,IAETY,OAAOC,QAAQZ,QACZa,QAAQ,EAAGC,IAAKC;;AAEf,MAAMC,MAAQ,IAAIC,OAAO,GAAGH,mCAAoC,KAChE,IAAII,aAAeV,EAAEW,QAAU,IAC5BC,QAAQ,MAAO,IACfC,MAAM,KACNC,OAAOC,SACV,IAAIC,WAAa,MAEjBN,YAAcA,YAAYO,IAAKC,QAC7B,GAAIV,MAAMW,KAAKD,OAAQ,CACrBF,WAAa,KACb,MAAO,GAAGV,OAAOC,OACnB,CACA,OAAOW,QAGT,IAAKF,WACHN,YAAYU,KAAK,GAAGd,OAAOC,SAG7BP,EAAEW,OAASD,YAAYhB,OAAS,IAAIgB,YAAYW,KAAK,OAAS,KAGlE,OAAOrB,EAAEH"}