{
  "version": 3,
  "sources": ["src/utils/idl.ts", "src/utils/nullable.ts"],
  "sourcesContent": ["import * as z from 'zod';\n\nexport interface IdlParams {\n  schema: z.core.$ZodType;\n  value: unknown;\n}\n\n// Duplicate utils to avoid to reference library utils in schema\nconst convertCamelToSnake = (str: string): string =>\n  str.replace(/([a-zA-Z])(?=[A-Z])/g, '$1_').toLowerCase();\n\n/**\n * Recursively converts a JavaScript value to its Candid IDL representation,\n * guided by a Zod schema.\n *\n * Discriminated unions are converted from `{ type: \"active\", owner: ... }` to\n * `{ active: { owner: ... } }` to match the Candid variant shape.\n * Optional and nullable fields are converted from `undefined` or `null` to `[]`,\n * and present values are wrapped in `[value]`. Objects and arrays are processed\n * recursively. Non-nullable primitives and unknown types are passed through as-is.\n *\n * @param {IdlParams} params - The schema and value to convert.\n * @param {z.core.$ZodType} params.schema - The Zod schema describing the value's structure.\n * @param {unknown} params.value - The JavaScript value to convert.\n * @returns {unknown} The value in Candid IDL format.\n */\nexport const schemaToIdl = ({schema, value}: IdlParams): unknown => {\n  if (schema instanceof z.ZodDiscriminatedUnion) {\n    const {discriminator} = schema._zod.def;\n    const obj = value as Record<string, unknown>;\n    const tag = obj[discriminator];\n\n    if (typeof tag !== 'string') {\n      throw new Error(`Expected discriminator field \"${discriminator}\" to be a string`);\n    }\n\n    const {[discriminator]: _, ...rest} = obj;\n\n    const variantSchema = schema._zod.def.options.find(\n      (o: z.core.$ZodType) =>\n        o instanceof z.ZodObject &&\n        o._zod.def.shape[discriminator] instanceof z.ZodLiteral &&\n        o._zod.def.shape[discriminator]._zod.def.values.includes(tag)\n    );\n\n    return {\n      [tag]: variantSchema !== undefined ? schemaToIdl({schema: variantSchema, value: rest}) : rest\n    };\n  }\n\n  if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable) {\n    return value === undefined || value === null\n      ? []\n      : [schemaToIdl({schema: schema._zod.def.innerType, value})];\n  }\n\n  if (schema instanceof z.ZodObject) {\n    return Object.fromEntries(\n      Object.entries(schema._zod.def.shape).map(([k, t]) => [\n        convertCamelToSnake(k),\n        schemaToIdl({schema: t as z.core.$ZodType, value: (value as Record<string, unknown>)[k]})\n      ])\n    );\n  }\n\n  if (schema instanceof z.ZodArray) {\n    return (value as unknown[]).map((v) =>\n      schemaToIdl({schema: schema._zod.def.element, value: v})\n    );\n  }\n\n  if (schema instanceof z.ZodDefault) {\n    return schemaToIdl({schema: schema._zod.def.innerType, value});\n  }\n\n  if (schema instanceof z.ZodEnum) {\n    return {[value as string]: null};\n  }\n\n  return value;\n};\n\n/**\n * Recursively converts a Candid IDL value back to its JavaScript representation,\n * guided by a Zod schema.\n *\n * Discriminated unions are converted from `{ active: { owner: ... } }` back to\n * `{ type: \"active\", owner: ... }` to match the Zod discriminated union shape.\n * Optional and nullable fields are converted from `[]` to `undefined` and from\n * `[value]` to `value`. Objects and arrays are processed recursively.\n * Non-nullable primitives and unknown types are passed through as-is.\n *\n * @param {IdlParams} params - The schema and value to convert.\n * @param {z.core.$ZodType} params.schema - The Zod schema describing the value's structure.\n * @param {unknown} params.value - The Candid IDL value to convert.\n * @returns {unknown} The value in JavaScript representation.\n */\nexport const schemaFromIdl = ({schema, value}: IdlParams): unknown => {\n  if (schema instanceof z.ZodDiscriminatedUnion) {\n    const {discriminator} = schema._zod.def;\n    const obj = value as Record<string, unknown>;\n    const keys = Object.keys(obj);\n\n    if (keys.length !== 1) {\n      throw new Error(`Expected exactly one key in variant object, got: ${keys.join(', ')}`);\n    }\n\n    const [tag] = keys;\n    const inner = obj[tag];\n\n    if (typeof inner !== 'object' || inner === null) {\n      throw new Error(`Expected variant value for \"${tag}\" to be an object`);\n    }\n\n    const variantSchema = schema._zod.def.options.find(\n      (o: z.core.$ZodType) =>\n        o instanceof z.ZodObject &&\n        o._zod.def.shape[discriminator] instanceof z.ZodLiteral &&\n        o._zod.def.shape[discriminator]._zod.def.values.includes(tag)\n    );\n\n    const reconstructed =\n      variantSchema !== undefined\n        ? (schemaFromIdl({\n            schema: variantSchema,\n            value: {[discriminator]: tag, ...(inner as Record<string, unknown>)}\n          }) as Record<string, unknown>)\n        : {[discriminator]: tag, ...(inner as Record<string, unknown>)};\n\n    return reconstructed;\n  }\n\n  if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable) {\n    const arr = value as [] | [unknown];\n    return arr.length === 0\n      ? undefined\n      : schemaFromIdl({schema: schema._zod.def.innerType, value: arr[0]});\n  }\n\n  if (schema instanceof z.ZodObject) {\n    return Object.fromEntries(\n      Object.entries(schema._zod.def.shape).map(([k, t]) => [\n        k,\n        schemaFromIdl({\n          schema: t as z.core.$ZodType,\n          value: (value as Record<string, unknown>)[convertCamelToSnake(k)]\n        })\n      ])\n    );\n  }\n\n  if (schema instanceof z.ZodArray) {\n    return (value as unknown[]).map((v) =>\n      schemaFromIdl({schema: schema._zod.def.element, value: v})\n    );\n  }\n\n  if (schema instanceof z.ZodDefault) {\n    return schemaFromIdl({schema: schema._zod.def.innerType, value});\n  }\n\n  if (schema instanceof z.ZodEnum) {\n    const obj = value as Record<string, unknown>;\n    const keys = Object.keys(obj);\n    if (keys.length === 1) {\n      return keys[0];\n    }\n    return value;\n  }\n\n  return value;\n};\n", "import * as z from 'zod';\n\nexport interface NullableParams {\n  schema: z.core.$ZodType;\n  value: unknown;\n}\n\n/**\n * Recursively converts a JavaScript value to its Candid nullable representation,\n * guided by a Zod schema.\n *\n * Optional and nullable fields are converted from `undefined` or `null` to `[]`,\n * and present values are wrapped in `[value]`. Objects and arrays are processed\n * recursively. Non-nullable primitives and unknown types are passed through as-is.\n *\n * @param {NullableParams} params - The schema and value to convert.\n * @param {z.core.$ZodType} params.schema - The Zod schema describing the value's structure.\n * @param {unknown} params.value - The JavaScript value to convert.\n * @returns {unknown} The value in Candid nullable format.\n *\n */\nexport const recursiveToNullable = ({schema, value}: NullableParams): unknown => {\n  if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable) {\n    return value === undefined || value === null\n      ? []\n      : [recursiveToNullable({schema: schema._zod.def.innerType, value})];\n  }\n\n  if (schema instanceof z.ZodObject) {\n    return Object.fromEntries(\n      Object.entries(schema._zod.def.shape).map(([k, t]) => [\n        k,\n        recursiveToNullable({\n          schema: t as z.core.$ZodType,\n          value: (value as Record<string, unknown>)[k]\n        })\n      ])\n    );\n  }\n\n  if (schema instanceof z.ZodArray) {\n    return (value as unknown[]).map((value) =>\n      recursiveToNullable({schema: schema._zod.def.element, value})\n    );\n  }\n\n  return value;\n};\n\n/**\n * Recursively converts a Candid nullable value back to its JavaScript representation,\n * guided by a Zod schema.\n *\n * Optional and nullable fields are converted from `[]` to `undefined` and from\n * `[value]` to `value`. Objects and arrays are processed recursively. Non-nullable\n * primitives and unknown types are passed through as-is.\n *\n * @param {NullableParams} params - The schema and value to convert.\n * @param {z.core.$ZodType} params.schema - The Zod schema describing the value's structure.\n * @param {unknown} params.value - The Candid nullable value to convert.\n * @returns {unknown} The value in JavaScript representation.\n *\n */\nexport const recursiveFromNullable = ({schema, value}: NullableParams): unknown => {\n  if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable) {\n    const arr = value as [] | [unknown];\n    return arr.length === 0\n      ? undefined\n      : recursiveFromNullable({\n          schema: schema._zod.def.innerType,\n          value: arr[0]\n        });\n  }\n\n  if (schema instanceof z.ZodObject) {\n    return Object.fromEntries(\n      Object.entries(schema._zod.def.shape).map(([k, t]) => [\n        k,\n        recursiveFromNullable({\n          schema: t as z.core.$ZodType,\n          value: (value as Record<string, unknown>)[k]\n        })\n      ])\n    );\n  }\n\n  if (schema instanceof z.ZodArray) {\n    return (value as unknown[]).map((value) =>\n      recursiveFromNullable({\n        schema: schema._zod.def.element,\n        value\n      })\n    );\n  }\n\n  return value;\n};\n"],
  "mappings": "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",
  "names": ["z", "convertCamelToSnake", "str", "schemaToIdl", "schema", "value", "discriminator", "obj", "tag", "_", "rest", "variantSchema", "o", "k", "v", "schemaFromIdl", "keys", "inner", "arr", "z", "recursiveToNullable", "schema", "value", "k", "recursiveFromNullable", "arr"]
}
