{"version":3,"file":"query.cjs","sources":["../src/query.ts"],"sourcesContent":["import { encode, delimited, encodeReserved } from \"./util\";\n\n/**\n * Join params using an ampersand and prepends a questionmark if not empty.\n */\nexport function query(...params: string[]) {\n  const s = params.filter(Boolean).join(\"&\");\n  return s && `?${s}`;\n}\n\n/**\n * Serializes nested objects according to the `deepObject` style specified in\n * https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#style-values\n */\nexport function deep(\n  params: Record<string, any>,\n  [k, v] = encodeReserved,\n): string {\n  const qk = encode([(s) => s, k]);\n  const qv = encode([(s) => s, v]);\n  // don't add index to arrays\n  // https://github.com/expressjs/body-parser/issues/289\n  const visit = (obj: any, prefix = \"\"): string =>\n    Object.entries(obj)\n      .filter(([, v]) => v !== undefined)\n      .map(([prop, v]) => {\n        const index = Array.isArray(obj) ? \"\" : prop;\n        const key = prefix ? qk`${prefix}[${index}]` : prop;\n        if (typeof v === \"object\") {\n          return visit(v, key);\n        }\n        return qv`${key}=${v}`;\n      })\n      .join(\"&\");\n\n  return visit(params);\n}\n\n/**\n * Property values of type array or object generate separate parameters\n * for each value of the array, or key-value-pair of the map.\n * For other types of properties this property has no effect.\n * See https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#encoding-object\n */\nexport function explode(\n  params: Record<string, any>,\n  encoders = encodeReserved,\n): string {\n  const q = encode(encoders);\n  return Object.entries(params)\n    .filter(([, value]) => value !== undefined)\n    .map(([name, value]) => {\n      if (Array.isArray(value)) {\n        return value.map((v) => q`${name}=${v}`).join(\"&\");\n      }\n      if (typeof value === \"object\") {\n        return explode(value, encoders);\n      }\n      return q`${name}=${value}`;\n    })\n    .join(\"&\");\n}\n\nexport function json(\n  params: Record<string, any>,\n  encoders = encodeReserved,\n): string {\n  const q = encode(encoders);\n  return Object.entries(params)\n    .filter(([, value]) => value !== undefined)\n    .map(([name, value]) => {\n      const v = JSON.stringify(value);\n      return q`${name}=${v}`;\n    })\n    .join(\"&\");\n}\n\nexport const form = delimited();\nexport const pipe = delimited(\"|\");\nexport const space = delimited(\"%20\");\n"],"names":["query","params","s","deep","k","v","encodeReserved","qk","encode","qv","visit","obj","prefix","prop","index","key","explode","encoders","q","value","name","json","form","delimited","pipe","space"],"mappings":"8GAKO,SAASA,KAASC,EAAkB,CACzC,MAAMC,EAAID,EAAO,OAAO,OAAO,EAAE,KAAK,GAAG,EAClC,OAAAC,GAAK,IAAIA,CAAC,EACnB,CAMO,SAASC,EACdF,EACA,CAACG,EAAGC,CAAC,EAAIC,EAAAA,eACD,CACR,MAAMC,EAAKC,EAAAA,OAAO,CAAE,GAAM,EAAGJ,CAAC,CAAC,EACzBK,EAAKD,EAAAA,OAAO,CAAE,GAAM,EAAGH,CAAC,CAAC,EAGzBK,EAAQ,CAACC,EAAUC,EAAS,KAChC,OAAO,QAAQD,CAAG,EACf,OAAO,CAAC,CAAA,CAAGN,CAAC,IAAMA,IAAM,MAAS,EACjC,IAAI,CAAC,CAACQ,EAAMR,CAAC,IAAM,CAClB,MAAMS,EAAQ,MAAM,QAAQH,CAAG,EAAI,GAAKE,EAClCE,EAAMH,EAASL,IAAKK,CAAM,IAAIE,CAAK,IAAMD,EAC3C,OAAA,OAAOR,GAAM,SACRK,EAAML,EAAGU,CAAG,EAEdN,IAAKM,CAAG,IAAIV,CAAC,EAAA,CACrB,EACA,KAAK,GAAG,EAEb,OAAOK,EAAMT,CAAM,CACrB,CAQgB,SAAAe,EACdf,EACAgB,EAAWX,iBACH,CACF,MAAAY,EAAIV,SAAOS,CAAQ,EACzB,OAAO,OAAO,QAAQhB,CAAM,EACzB,OAAO,CAAC,CAAA,CAAGkB,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IACZ,MAAM,QAAQA,CAAK,EACdA,EAAM,IAAKd,GAAMa,IAAIE,CAAI,IAAIf,CAAC,EAAE,EAAE,KAAK,GAAG,EAE/C,OAAOc,GAAU,SACZH,EAAQG,EAAOF,CAAQ,EAEzBC,IAAIE,CAAI,IAAID,CAAK,EACzB,EACA,KAAK,GAAG,CACb,CAEgB,SAAAE,EACdpB,EACAgB,EAAWX,iBACH,CACF,MAAAY,EAAIV,SAAOS,CAAQ,EACzB,OAAO,OAAO,QAAQhB,CAAM,EACzB,OAAO,CAAC,CAAA,CAAGkB,CAAK,IAAMA,IAAU,MAAS,EACzC,IAAI,CAAC,CAACC,EAAMD,CAAK,IAAM,CAChB,MAAAd,EAAI,KAAK,UAAUc,CAAK,EACvB,OAAAD,IAAIE,CAAI,IAAIf,CAAC,EAAA,CACrB,EACA,KAAK,GAAG,CACb,CAEO,MAAMiB,EAAOC,EAAAA,UAAU,EACjBC,EAAOD,YAAU,GAAG,EACpBE,EAAQF,YAAU,KAAK"}