{"version":3,"file":"util.cjs","sources":["../src/util.ts"],"sourcesContent":["type Encoders = Array<(s: string) => string>;\n\n// Encode param names and values as URIComponent\nexport const encodeReserved = [encodeURIComponent, encodeURIComponent];\nexport const allowReserved = [encodeURIComponent, encodeURI];\n\n/**\n * Creates a tag-function to encode template strings with the given encoders.\n */\nexport function encode(encoders: Encoders, delimiter = \",\") {\n  const q = (v: any, i: number) => {\n    const encoder = encoders[i % encoders.length];\n    if (typeof v === \"undefined\") {\n      return \"\";\n    }\n    if (typeof v === \"object\") {\n      if (Array.isArray(v)) {\n        return v.map(encoder).join(delimiter);\n      }\n      const flat = Object.entries(v).reduce(\n        (flat, entry) => [...flat, ...entry],\n        [] as any,\n      );\n      return flat.map(encoder).join(delimiter);\n    }\n\n    return encoder(String(v));\n  };\n\n  return (strings: TemplateStringsArray, ...values: any[]) => {\n    return strings.reduce((prev, s, i) => {\n      return `${prev}${s}${q(values[i], i)}`;\n    }, \"\");\n  };\n}\n\n/**\n * Separate array values by the given delimiter.\n */\nexport function delimited(delimiter = \",\") {\n  return (params: Record<string, any>, encoders = encodeReserved) =>\n    Object.entries(params)\n      .filter(([, value]) => value !== undefined)\n      .map(([name, value]) => encode(encoders, delimiter)`${name}=${value}`)\n      .join(\"&\");\n}\n\nexport function joinUrl(...parts: Array<string | undefined>) {\n  return parts\n    .filter(Boolean)\n    .map((s, i) => (i === 0 ? s : s!.replace(/^\\/+/, \"\")))\n    .map((s, i, a) => (i === a.length - 1 ? s : s!.replace(/\\/+$/, \"\")))\n    .join(\"/\");\n}\n"],"names":["encodeReserved","allowReserved","encode","encoders","delimiter","q","v","i","encoder","flat","entry","strings","values","prev","s","delimited","params","value","name","joinUrl","parts","a"],"mappings":"gFAGa,MAAAA,EAAiB,CAAC,mBAAoB,kBAAkB,EACxDC,EAAgB,CAAC,mBAAoB,SAAS,EAK3C,SAAAC,EAAOC,EAAoBC,EAAY,IAAK,CACpD,MAAAC,EAAI,CAACC,EAAQC,IAAc,CAC/B,MAAMC,EAAUL,EAASI,EAAIJ,EAAS,MAAM,EACxC,OAAA,OAAOG,GAAM,YACR,GAEL,OAAOA,GAAM,SACX,MAAM,QAAQA,CAAC,EACVA,EAAE,IAAIE,CAAO,EAAE,KAAKJ,CAAS,EAEzB,OAAO,QAAQE,CAAC,EAAE,OAC7B,CAACG,EAAMC,IAAU,CAAC,GAAGD,EAAM,GAAGC,CAAK,EACnC,CAAC,CAAA,EAES,IAAIF,CAAO,EAAE,KAAKJ,CAAS,EAGlCI,EAAQ,OAAOF,CAAC,CAAC,CAAA,EAGnB,MAAA,CAACK,KAAkCC,IACjCD,EAAQ,OAAO,CAACE,EAAMC,EAAG,IACvB,GAAGD,CAAI,GAAGC,CAAC,GAAGT,EAAEO,EAAO,CAAC,EAAG,CAAC,CAAC,GACnC,EAAE,CAET,CAKgB,SAAAG,EAAUX,EAAY,IAAK,CACzC,MAAO,CAACY,EAA6Bb,EAAWH,IAC9C,OAAO,QAAQgB,CAAM,EAClB,OAAO,CAAC,CAAA,CAAGC,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IAAMf,EAAOC,EAAUC,CAAS,IAAIc,CAAI,IAAID,CAAK,EAAE,EACpE,KAAK,GAAG,CACf,CAEO,SAASE,KAAWC,EAAkC,CAC3D,OAAOA,EACJ,OAAO,OAAO,EACd,IAAI,CAACN,EAAGP,IAAOA,IAAM,EAAIO,EAAIA,EAAG,QAAQ,OAAQ,EAAE,CAAE,EACpD,IAAI,CAACA,EAAGP,EAAGc,IAAOd,IAAMc,EAAE,OAAS,EAAIP,EAAIA,EAAG,QAAQ,OAAQ,EAAE,CAAE,EAClE,KAAK,GAAG,CACb"}