wretch
Version:
A tiny wrapper built around fetch with an intuitive syntax.
1 lines • 4.29 kB
Source Map (JSON)
{"version":3,"file":"queryString.min.mjs","sources":["../../../src/addons/queryString.ts"],"sourcesContent":["import type { Wretch, Config, WretchAddon } from \"../types.js\"\n\nfunction stringify(value?: string | null): string | null {\n return typeof value !== \"undefined\" ? value : \"\"\n}\n\nconst appendQueryParams = (url: string, qp: object | string, replace: boolean, config: Config) => {\n let queryString: string\n\n if (typeof qp === \"string\") {\n queryString = qp\n } else {\n const usp = config.polyfill(\"URLSearchParams\", true, true)\n for (const key in qp) {\n const value = qp[key]\n if (qp[key] instanceof Array) {\n for (const val of value)\n usp.append(key, stringify(val))\n } else {\n usp.append(key, stringify(value))\n }\n }\n queryString = usp.toString()\n }\n\n const split = url.split(\"?\")\n\n if (!queryString)\n return replace ? split[0] : url\n\n if (replace || split.length < 2)\n return split[0] + \"?\" + queryString\n\n return url + \"&\" + queryString\n}\n\nexport interface QueryStringAddon {\n /**\n * Converts a javascript object to query parameters, then appends this query string\n * to the current url. String values are used as the query string verbatim.\n *\n * Pass `true` as the second argument to replace existing query parameters.\n *\n * ```\n * import QueryAddon from \"wretch/addons/queryString\"\n *\n * let w = wretch(\"http://example.com\").addon(QueryStringAddon);\n * // url is http://example.com\n * w = w.query({ a: 1, b: 2 });\n * // url is now http://example.com?a=1&b=2\n * w = w.query({ c: 3, d: [4, 5] });\n * // url is now http://example.com?a=1&b=2c=3&d=4&d=5\n * w = w.query(\"five&six&seven=eight\");\n * // url is now http://example.com?a=1&b=2c=3&d=4&d=5&five&six&seven=eight\n * w = w.query({ reset: true }, true);\n * // url is now http://example.com?reset=true\n * ```\n *\n * ##### **Note that .query is not meant to handle complex cases with nested objects.**\n *\n * For this kind of usage, you can use `wretch` in conjunction with other libraries\n * (like [`qs`](https://github.com/ljharb/qs)).\n *\n * ```js\n * // Using wretch with qs\n *\n * const queryObject = { some: { nested: \"objects\" } };\n * const w = wretch(\"https://example.com/\").addon(QueryStringAddon)\n *\n * // Use .qs inside .query :\n *\n * w.query(qs.stringify(queryObject));\n *\n * // Use .defer :\n *\n * const qsWretch = w.defer((w, url, { qsQuery, qsOptions }) => (\n * qsQuery ? w.query(qs.stringify(qsQuery, qsOptions)) : w\n * ));\n *\n * qsWretch\n * .url(\"https://example.com/\")\n * .options({ qs: { query: queryObject } });\n * ```\n *\n * @param qp - An object which will be converted, or a string which will be used verbatim.\n */\n query<T extends QueryStringAddon, C, R>(this: T & Wretch<T, C, R>, qp: object | string, replace?: boolean): this\n}\n\n/**\n * Adds the ability to append query parameters from a javascript object.\n *\n * ```js\n * import QueryAddon from \"wretch/addons/queryString\"\n *\n * wretch().addon(QueryAddon)\n * ```\n */\nconst queryString: WretchAddon<QueryStringAddon> = {\n wretch: {\n query(qp, replace = false) {\n return { ...this, _url: appendQueryParams(this._url, qp, replace, this._config) }\n }\n }\n}\n\nexport default queryString\n"],"names":["stringify","value","appendQueryParams","url","qp","replace","config","queryString","usp","polyfill","key","Array","val","append","toString","split","length","wretch","query","this","_url","_config"],"mappings":"AAEA,SAASA,EAAUC,GACjB,YAAwB,IAAVA,EAAwBA,EAAQ,EAChD,CAEA,MAAMC,EAAoB,CAACC,EAAaC,EAAqBC,EAAkBC,KAC7E,IAAIC,EAEJ,GAAkB,iBAAPH,EACTG,EAAcH,MACT,CACL,MAAMI,EAAMF,EAAOG,SAAS,kBAAmB,EAAM,GACrD,IAAK,MAAMC,KAAON,EAAI,CACpB,MAAMH,EAAQG,EAAGM,GACjB,GAAIN,EAAGM,aAAgBC,MACrB,IAAK,MAAMC,KAAOX,EAChBO,EAAIK,OAAOH,EAAKV,EAAUY,SAE5BJ,EAAIK,OAAOH,EAAKV,EAAUC,GAE7B,CACDM,EAAcC,EAAIM,UACnB,CAED,MAAMC,EAAQZ,EAAIY,MAAM,KAExB,OAAKR,EAGDF,GAAWU,EAAMC,OAAS,EACrBD,EAAM,GAAK,IAAMR,EAEnBJ,EAAM,IAAMI,EALVF,EAAUU,EAAM,GAAKZ,CAKA,EAiE1BI,EAA6C,CACjDU,OAAQ,CACNC,MAAMd,EAAIC,EAAU,GAClB,MAAO,IAAKc,KAAMC,KAAMlB,EAAkBiB,KAAKC,KAAMhB,EAAIC,EAASc,KAAKE,SACxE"}