{"version":3,"file":"query-serializer.cjs","names":["serializeArrayParam","serializePrimitiveParam"],"sources":["../../src/utils/query-serializer.ts"],"sourcesContent":["import type { QuerySerializer } from '../generated/mapi/core/bodySerializer.gen';\nimport { serializeArrayParam, serializePrimitiveParam } from '../generated/mapi/core/pathSerializer.gen';\n\n/**\n * Query serializer for the Management API client.\n *\n * Behaves identically to the generated default for primitives, primitive\n * arrays, and dates, but additionally serializes **nested objects** (and arrays\n * of objects) into bracket notation — e.g. `filter_query[component][in]=hero`.\n *\n * The generated default serializer throws on this nesting (\"Deeply-nested\n * arrays/objects aren't supported. Provide your own `querySerializer()`\"), yet\n * MAPI requires `filter_query` as a nested hash and rejects flat strings. This\n * mirrors the bracket serialization used by `storyblok-js-client`.\n */\nfunction serialize(name: string, value: unknown, parts: string[]): void {\n  if (value === undefined || value === null) {\n    return;\n  }\n\n  if (value instanceof Date) {\n    parts.push(`${name}=${value.toISOString()}`);\n    return;\n  }\n\n  if (Array.isArray(value)) {\n    // Arrays containing objects (e.g. `filter_query.__or`) need per-item\n    // bracket recursion; the default serializer cannot express them.\n    if (value.some(item => item !== null && typeof item === 'object')) {\n      for (const item of value) {\n        serialize(`${name}[]`, item, parts);\n      }\n      return;\n    }\n    // Primitive arrays keep the generated default form (`name=a&name=b`).\n    const serialized = serializeArrayParam({ explode: true, name, style: 'form', value });\n    if (serialized) {\n      parts.push(serialized);\n    }\n    return;\n  }\n\n  if (typeof value === 'object') {\n    for (const [key, child] of Object.entries(value)) {\n      serialize(`${name}[${key}]`, child, parts);\n    }\n    return;\n  }\n\n  const serialized = serializePrimitiveParam({ name, value: value as string });\n  if (serialized) {\n    parts.push(serialized);\n  }\n}\n\nexport const querySerializer: QuerySerializer = (query) => {\n  const parts: string[] = [];\n  for (const [name, value] of Object.entries(query)) {\n    serialize(name, value, parts);\n  }\n  return parts.join('&');\n};\n"],"mappings":";;;;;;;;;;;;;;;AAeA,SAAS,UAAU,MAAc,OAAgB,OAAuB;AACtE,KAAI,UAAU,UAAa,UAAU,KACnC;AAGF,KAAI,iBAAiB,MAAM;AACzB,QAAM,KAAK,GAAG,KAAK,GAAG,MAAM,aAAa,GAAG;AAC5C;;AAGF,KAAI,MAAM,QAAQ,MAAM,EAAE;AAGxB,MAAI,MAAM,MAAK,SAAQ,SAAS,QAAQ,OAAO,SAAS,SAAS,EAAE;AACjE,QAAK,MAAM,QAAQ,MACjB,WAAU,GAAG,KAAK,KAAK,MAAM,MAAM;AAErC;;EAGF,MAAM,aAAaA,+CAAoB;GAAE,SAAS;GAAM;GAAM,OAAO;GAAQ;GAAO,CAAC;AACrF,MAAI,WACF,OAAM,KAAK,WAAW;AAExB;;AAGF,KAAI,OAAO,UAAU,UAAU;AAC7B,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,CAC9C,WAAU,GAAG,KAAK,GAAG,IAAI,IAAI,OAAO,MAAM;AAE5C;;CAGF,MAAM,aAAaC,mDAAwB;EAAE;EAAa;EAAiB,CAAC;AAC5E,KAAI,WACF,OAAM,KAAK,WAAW;;AAI1B,MAAa,mBAAoC,UAAU;CACzD,MAAM,QAAkB,EAAE;AAC1B,MAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,MAAM,CAC/C,WAAU,MAAM,OAAO,MAAM;AAE/B,QAAO,MAAM,KAAK,IAAI"}