{"version":3,"file":"qss.cjs","names":[],"sources":["../../src/qss.ts"],"sourcesContent":["/**\n * Program is a reimplementation of the `qss` package:\n * Copyright (c) Luke Edwards luke.edwards05@gmail.com, MIT License\n * https://github.com/lukeed/qss/blob/master/license.md\n *\n * This reimplementation uses modern browser APIs\n * (namely URLSearchParams) and TypeScript while still\n * maintaining the original functionality and interface.\n *\n * Update: this implementation has also been mangled to\n * fit exactly our use-case (single value per key in encoding).\n */\n\n/**\n * Encodes an object into a query string.\n * @param obj - The object to encode into a query string.\n * @param stringify - An optional custom stringify function.\n * @returns The encoded query string.\n * @example\n * ```\n * // Example input: encode({ token: 'foo', key: 'value' })\n * // Expected output: \"token=foo&key=value\"\n * ```\n */\nexport function encode(\n  obj: Record<string, any>,\n  stringify: (value: any) => string = String,\n): string {\n  const result = new URLSearchParams()\n\n  for (const key in obj) {\n    const val = obj[key]\n    if (val !== undefined) {\n      result.set(key, stringify(val))\n    }\n  }\n\n  return result.toString()\n}\n\n/**\n * Converts a string value to its appropriate type (string, number, boolean).\n * @param mix - The string value to convert.\n * @returns The converted value.\n * @example\n * // Example input: toValue(\"123\")\n * // Expected output: 123\n */\nfunction toValue(str: unknown) {\n  if (!str) return ''\n\n  if (str === 'false') return false\n  if (str === 'true') return true\n  return +str * 0 === 0 && +str + '' === str ? +str : str\n}\n/**\n * Decodes a query string into an object.\n * @param str - The query string to decode.\n * @returns The decoded key-value pairs in an object format.\n * @example\n * // Example input: decode(\"token=foo&key=value\")\n * // Expected output: { \"token\": \"foo\", \"key\": \"value\" }\n */\nexport function decode(str: any): any {\n  const searchParams = new URLSearchParams(str)\n\n  const result: Record<string, unknown> = Object.create(null)\n\n  for (const [key, value] of searchParams.entries()) {\n    const previousValue = result[key]\n    if (previousValue == null) {\n      result[key] = toValue(value)\n    } else if (Array.isArray(previousValue)) {\n      previousValue.push(toValue(value))\n    } else {\n      result[key] = [previousValue, toValue(value)]\n    }\n  }\n\n  return result\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAgB,OACd,KACA,YAAoC,QAC5B;CACR,MAAM,SAAS,IAAI,gBAAgB;CAEnC,KAAK,MAAM,OAAO,KAAK;EACrB,MAAM,MAAM,IAAI;EAChB,IAAI,QAAQ,KAAA,GACV,OAAO,IAAI,KAAK,UAAU,GAAG,CAAC;CAElC;CAEA,OAAO,OAAO,SAAS;AACzB;;;;;;;;;AAUA,SAAS,QAAQ,KAAc;CAC7B,IAAI,CAAC,KAAK,OAAO;CAEjB,IAAI,QAAQ,SAAS,OAAO;CAC5B,IAAI,QAAQ,QAAQ,OAAO;CAC3B,OAAO,CAAC,MAAM,MAAM,KAAK,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM;AACtD;;;;;;;;;AASA,SAAgB,OAAO,KAAe;CACpC,MAAM,eAAe,IAAI,gBAAgB,GAAG;CAE5C,MAAM,SAAkC,OAAO,OAAO,IAAI;CAE1D,KAAK,MAAM,CAAC,KAAK,UAAU,aAAa,QAAQ,GAAG;EACjD,MAAM,gBAAgB,OAAO;EAC7B,IAAI,iBAAiB,MACnB,OAAO,OAAO,QAAQ,KAAK;OACtB,IAAI,MAAM,QAAQ,aAAa,GACpC,cAAc,KAAK,QAAQ,KAAK,CAAC;OAEjC,OAAO,OAAO,CAAC,eAAe,QAAQ,KAAK,CAAC;CAEhD;CAEA,OAAO;AACT"}