{"version":3,"sources":["../src/utils/zodSchemaImport.ts"],"sourcesContent":["import { IFieldConfig } from \"../types/IFieldConfig\";\nimport { IOption } from \"../types/IOption\";\n\n/**\n * Converts a Zod object schema to Record<string, IFieldConfig>.\n * Does NOT require zod as a dependency — inspects the schema shape at runtime.\n */\nexport function zodSchemaToFieldConfig(zodSchema: unknown): Record<string, IFieldConfig> {\n  const configs: Record<string, IFieldConfig> = {};\n  const shape = getZodShape(zodSchema);\n  if (!shape) return configs;\n\n  for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n    configs[fieldName] = zodFieldToConfig(fieldName, fieldSchema as ZodDef);\n  }\n\n  return configs;\n}\n\ninterface ZodDef {\n  _def?: {\n    typeName?: string;\n    innerType?: ZodDef;\n    checks?: Array<{ kind: string; value?: unknown; message?: string }>;\n    values?: string[];\n    options?: ZodDef[];\n    type?: ZodDef;\n  };\n}\n\nfunction getZodShape(schema: unknown): Record<string, unknown> | null {\n  const s = schema as ZodDef;\n  if (s?._def && typeof s._def === \"object\") {\n    const def = s._def as Record<string, unknown>;\n    if (typeof def.shape === \"function\") return (def.shape as () => Record<string, unknown>)();\n    if (typeof def.shape === \"object\" && def.shape !== null) return def.shape as Record<string, unknown>;\n  }\n  return null;\n}\n\nfunction zodFieldToConfig(fieldName: string, field: ZodDef): IFieldConfig {\n  const { typeName, isOptional } = unwrapZodType(field);\n  const checks = getZodChecks(field);\n\n  const config: IFieldConfig = {\n    type: \"Textbox\",\n    label: formatLabel(fieldName),\n    required: !isOptional,\n  };\n\n  switch (typeName) {\n    case \"ZodString\":\n      config.type = \"Textbox\";\n      if (checks.some(c => c.kind === \"email\")) {\n        config.validate = [...(config.validate ?? []), { name: \"email\" }];\n      }\n      if (checks.some(c => c.kind === \"url\")) {\n        config.validate = [...(config.validate ?? []), { name: \"url\" }];\n      }\n      break;\n    case \"ZodNumber\":\n      config.type = \"Number\";\n      break;\n    case \"ZodBoolean\":\n      config.type = \"Toggle\";\n      break;\n    case \"ZodEnum\":\n    case \"ZodNativeEnum\": {\n      config.type = \"Dropdown\";\n      const values = getZodEnumValues(field);\n      if (values) {\n        config.options = values.map(v => ({ value: String(v), label: String(v) }));\n      }\n      break;\n    }\n    case \"ZodDate\":\n      config.type = \"DateControl\";\n      break;\n    case \"ZodArray\":\n      config.type = \"Multiselect\";\n      break;\n    default:\n      config.type = \"Textbox\";\n  }\n\n  return config;\n}\n\nfunction unwrapZodType(field: ZodDef): { typeName: string; isOptional: boolean } {\n  let current = field;\n  let isOptional = false;\n  while (current?._def) {\n    const tn = current._def.typeName;\n    if (tn === \"ZodOptional\" || tn === \"ZodNullable\") {\n      isOptional = true;\n      current = current._def.innerType as ZodDef;\n    } else if (tn === \"ZodDefault\") {\n      current = current._def.innerType as ZodDef;\n    } else {\n      break;\n    }\n  }\n  return { typeName: current?._def?.typeName ?? \"ZodString\", isOptional };\n}\n\nfunction getZodChecks(field: ZodDef): Array<{ kind: string; value?: unknown }> {\n  let current = field;\n  while (current?._def) {\n    if (current._def.checks) return current._def.checks;\n    if (current._def.innerType) { current = current._def.innerType as ZodDef; } else { break; }\n  }\n  return [];\n}\n\nfunction getZodEnumValues(field: ZodDef): string[] | null {\n  let current = field;\n  while (current?._def) {\n    if (current._def.values) return current._def.values;\n    if (current._def.innerType) { current = current._def.innerType as ZodDef; } else { break; }\n  }\n  return null;\n}\n\nfunction formatLabel(fieldName: string): string {\n  return fieldName.replace(/([A-Z])/g, \" $1\").replace(/^./, s => s.toUpperCase()).trim();\n}\n"],"mappings":"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","names":[]}