{"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 {\n  serializeArrayParam,\n  serializePrimitiveParam,\n} 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":";;;;;;;;;;;;;;AAkBA,SAAS,UAAU,MAAc,OAAgB,OAAuB;CACtE,IAAI,UAAU,KAAA,KAAa,UAAU,MACnC;CAGF,IAAI,iBAAiB,MAAM;EACzB,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,YAAY,GAAG;EAC3C;CACF;CAEA,IAAI,MAAM,QAAQ,KAAK,GAAG;EAGxB,IAAI,MAAM,MAAM,SAAS,SAAS,QAAQ,OAAO,SAAS,QAAQ,GAAG;GACnE,KAAK,MAAM,QAAQ,OACjB,UAAU,GAAG,KAAK,KAAK,MAAM,KAAK;GAEpC;EACF;EAEA,MAAM,aAAaA,2BAAAA,oBAAoB;GAAE,SAAS;GAAM;GAAM,OAAO;GAAQ;EAAM,CAAC;EACpF,IAAI,YACF,MAAM,KAAK,UAAU;EAEvB;CACF;CAEA,IAAI,OAAO,UAAU,UAAU;EAC7B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,GAC7C,UAAU,GAAG,KAAK,GAAG,IAAI,IAAI,OAAO,KAAK;EAE3C;CACF;CAEA,MAAM,aAAaC,2BAAAA,wBAAwB;EAAE;EAAa;CAAgB,CAAC;CAC3E,IAAI,YACF,MAAM,KAAK,UAAU;AAEzB;AAEA,MAAa,mBAAoC,UAAU;CACzD,MAAM,QAAkB,CAAC;CACzB,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,KAAK,GAC9C,UAAU,MAAM,OAAO,KAAK;CAE9B,OAAO,MAAM,KAAK,GAAG;AACvB"}