{"version":3,"file":"FunctionComponent.cjs","sources":["../../src/types/FunctionComponent.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\n/**\n * Function component type (sync + async)\n */\ntype FuncComponent<P, Async extends boolean = false> = Async extends true\n  ? (props: P) => Promise<any>\n  : (props: P) => any;\n\n/**\n * Convert schema props → runtime props\n */\ntype InferProps<P extends Record<string, XVType<any>>> = {\n  [K in keyof P]: Infer<P[K]>;\n};\n\nclass XVFunctionComponent<\n  P extends Record<string, XVType<any>>,\n  Async extends boolean = false,\n> extends XVType<FuncComponent<InferProps<P>, Async>> {\n  readonly props: P;\n  readonly is_async: Async;\n\n  constructor(props: P, async?: Async) {\n    super();\n    this.props = props;\n    this.is_async = (async ?? false) as Async;\n  }\n\n  protected check(value: unknown): any {\n    if (typeof value !== \"function\") {\n      throw new Error(\"Component must be a function\");\n    }\n    return value;\n  }\n\n  parse(fn: unknown) {\n    const checked = super.parse(fn);\n\n    if (this.meta.optional && !checked) {\n      return;\n    }\n    if (this.meta.nullable && !checked) {\n      return null;\n    }\n\n    return ((inputProps: InferProps<P>) => {\n      const parsed: InferProps<P> = {} as InferProps<P>;\n\n      for (const key in this.props) {\n        parsed[key] = this.props[key].parse((inputProps as any)[key]);\n      }\n\n      const result = (checked as any)(parsed);\n\n      if (this.is_async) {\n        return Promise.resolve(result);\n      }\n\n      return result;\n    }) as FuncComponent<InferProps<P>, Async>;\n  }\n}\n\nexport default XVFunctionComponent;\n"],"names":[],"mappings":";;;;AAiBA,MAAM,mBAGJ,SAAQ,MAA2C,CAAA;IAInD,WAAA,CAAY,KAAQ,EAAE,KAAa,EAAA;AACjC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,KAAK,CAAU;IAC3C;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;YAClC;QACF;QACA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;AAClC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,QAAQ,CAAC,UAAyB,KAAI;YACpC,MAAM,MAAM,GAAkB,EAAmB;AAEjD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAE,UAAkB,CAAC,GAAG,CAAC,CAAC;YAC/D;AAEA,YAAA,MAAM,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;AAEvC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAChC;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AACD;;;;"}