{"version":3,"file":"utils.mjs","names":[],"sources":["../../src/react-hook-form/utils.ts"],"sourcesContent":["import { replaceEmptyValue } from \"@autoform/core\";\nimport type { SchemaProvider } from \"@autoform/core\";\nimport type {\n  FieldValues,\n  Resolver,\n  ResolverOptions,\n  ResolverResult,\n} from \"react-hook-form\";\n\n/**\n * Retrieves the error of a field using given error object and field path.\n *\n * @param obj - errors object form react-hook-form.\n * @param path - field path.\n */\nexport function getPathInObject(obj: any, path: string[]): any {\n  let current = obj;\n  for (const key of path) {\n    current = current[key];\n    if (current === undefined) {\n      return undefined;\n    }\n  }\n  return current.message ? current : (current.root ?? current);\n}\n\n/**\n * Creates a React Hook Form resolver for an AutoForm schema provider.\n * @param schema - AutoForm schema provider with `schemaType` and `getSchema`.\n * @returns A React Hook Form resolver that validates cleaned form values.\n */\nexport function createSchemaResolver<T extends FieldValues>(\n  schema: SchemaProvider<T>,\n): Resolver<T> {\n  let resolverPromise: Promise<Resolver<T>> | undefined;\n\n  return async (\n    values: T,\n    ctx: any,\n    options: ResolverOptions<T>,\n  ): Promise<ResolverResult<T>> => {\n    const cleanedValues = replaceEmptyValue(values);\n    resolverPromise ??= getSchemaResolver(schema);\n    const resolver = await resolverPromise;\n    return resolver(cleanedValues, ctx, options);\n  };\n}\n\n/**\n * Gets the library-specific React Hook Form resolver for a schema provider.\n * @param schema - AutoForm schema provider with resolver metadata.\n * @returns The matching resolver.\n */\nasync function getSchemaResolver<T extends FieldValues>(\n  schema: SchemaProvider<T>,\n): Promise<Resolver<T>> {\n  const rawSchema = schema.getSchema?.();\n  if (!schema.schemaType || !rawSchema) {\n    throw new Error(\n      \"AutoForm: schema provider must expose schemaType and getSchema() to use resolver validation.\",\n    );\n  }\n\n  switch (schema.schemaType) {\n    case \"zod\": {\n      const { zodResolver } = await import(\"@hookform/resolvers/zod\");\n      return zodResolver(rawSchema as any) as Resolver<T>;\n    }\n    case \"yup\": {\n      const { yupResolver } = await import(\"@hookform/resolvers/yup\");\n      return yupResolver(rawSchema as any) as Resolver<T>;\n    }\n    case \"joi\": {\n      const { joiResolver } = await import(\"@hookform/resolvers/joi\");\n      return joiResolver(rawSchema as any) as Resolver<T>;\n    }\n  }\n\n  throw new Error(`AutoForm: unsupported schema type \"${schema.schemaType}\".`);\n}\n"],"mappings":";;;;;;;;AAeA,SAAgB,gBAAgB,KAAU,MAAqB;CAC7D,IAAI,UAAU;CACd,KAAK,MAAM,OAAO,MAAM;EACtB,UAAU,QAAQ;EAClB,IAAI,YAAY,KAAA,GACd;CAEJ;CACA,OAAO,QAAQ,UAAU,UAAW,QAAQ,QAAQ;AACtD;;;;;;AAOA,SAAgB,qBACd,QACa;CACb,IAAI;CAEJ,OAAO,OACL,QACA,KACA,YAC+B;EAC/B,MAAM,gBAAgB,kBAAkB,MAAM;EAC9C,oBAAoB,kBAAkB,MAAM;EAE5C,QAAO,MADgB,gBAAA,CACP,eAAe,KAAK,OAAO;CAC7C;AACF;;;;;;AAOA,eAAe,kBACb,QACsB;CACtB,MAAM,YAAY,OAAO,YAAY;CACrC,IAAI,CAAC,OAAO,cAAc,CAAC,WACzB,MAAM,IAAI,MACR,8FACF;CAGF,QAAQ,OAAO,YAAf;EACE,KAAK,OAAO;GACV,MAAM,EAAE,gBAAgB,MAAM,OAAO;GACrC,OAAO,YAAY,SAAgB;EACrC;EACA,KAAK,OAAO;GACV,MAAM,EAAE,gBAAgB,MAAM,OAAO;GACrC,OAAO,YAAY,SAAgB;EACrC;EACA,KAAK,OAAO;GACV,MAAM,EAAE,gBAAgB,MAAM,OAAO;GACrC,OAAO,YAAY,SAAgB;EACrC;CACF;CAEA,MAAM,IAAI,MAAM,sCAAsC,OAAO,WAAW,GAAG;AAC7E"}