{"version":3,"file":"queryString.min.cjs","names":[],"sources":["../../../src/addons/queryString.ts"],"sourcesContent":["import type { Wretch, WretchAddon } from \"../types.js\"\n\n/**\n * Options for the query method.\n */\nexport type QueryStringOptions = {\n  /**\n   * Replace existing query parameters instead of appending to them.\n   */\n  replace?: boolean\n  /**\n   * Completely omit key=value pairs for undefined or null values.\n   */\n  omitUndefinedOrNullValues?: boolean\n}\n\nconst appendQueryParams = (url: string, qp: object | string, replace: boolean, omitUndefinedOrNullValues: boolean) => {\n  let queryString: string\n\n  if (typeof qp === \"string\") {\n    queryString = qp\n  } else {\n    const usp = new URLSearchParams()\n    for (const key in qp) {\n      const value = qp[key]\n      if (omitUndefinedOrNullValues && (value === null || value === undefined)) continue\n      if (Array.isArray(value)) {\n        for (const val of value)\n          usp.append(key, val ?? \"\")\n      } else {\n        usp.append(key, 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   * Set `replace` to `true` in the options to replace existing query parameters.\n   * Set `omitUndefinedOrNullValues` to `true` in the options to completely omit the key=value pair for undefined or null values.\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 }, { replace: 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   * @param options - Optional configuration object\n   */\n  query<T extends QueryStringAddon, C, R, E>(this: T & Wretch<T, C, R, E>, qp: object | string, options?: QueryStringOptions): 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, options = {}) {\n      return { ...this, _url: appendQueryParams(this._url, qp, options.replace ?? false, options.omitUndefinedOrNullValues ?? false) }\n    }\n  }\n}\n\nexport default queryString\n"],"mappings":"AAgBA,MAAM,GAAqB,EAAa,EAAqB,EAAkB,IAAuC,CACpH,IAAI,EAEJ,GAAI,OAAO,GAAO,SAChB,EAAc,MACT,CACL,IAAM,EAAM,IAAI,gBAChB,IAAK,IAAM,KAAO,EAAI,CACpB,IAAM,EAAQ,EAAG,GACb,QAA8B,GAAU,MAC5C,GAAI,MAAM,QAAQ,EAAM,CACtB,IAAK,IAAM,KAAO,EAChB,EAAI,OAAO,EAAK,GAAO,GAAG,MAE5B,EAAI,OAAO,EAAK,GAAS,GAAG,CAGhC,EAAc,EAAI,UAAU,CAG9B,IAAM,EAAQ,EAAI,MAAM,IAAI,CAQ5B,OANK,EAGD,GAAW,EAAM,OAAS,EACrB,EAAM,GAAK,IAAM,EAEnB,EAAM,IAAM,EALV,EAAU,EAAM,GAAK,GAwE1B,EAA6C,CACjD,OAAQ,CACN,MAAM,EAAI,EAAU,EAAE,CAAE,CACtB,MAAO,CAAE,GAAG,KAAM,KAAM,EAAkB,KAAK,KAAM,EAAI,EAAQ,SAAW,GAAO,EAAQ,2BAA6B,GAAM,CAAE,EAEnI,CACF"}