/* eslint @typescript-eslint/no-unsafe-argument: off, @typescript-eslint/no-explicit-any: off, @typescript-eslint/no-unsafe-member-access: off */ import { Context } from "koa"; import { Hybrid as HybridControl } from "../controls/hybrid.js"; import { FormDataValue } from "../form-types.js"; import { FieldParseResult, FormField } from "./field.js"; export class Hybrid> extends FormField< true, Record > { constructor(public subfields: Fields) { super(true); } public getEmptyValue(): Record { return {}; } async parse( ctx: Context, raw_value: FormDataValue ): Promise>> { return { parsable: true, error: null, parsed_value: Object.fromEntries( await Promise.all( Object.entries(this.subfields).map( async ([key, subfield]) => [ key, ( await subfield.getParsedValue( ctx, (raw_value as any)[key] ) ).parsed as FormDataValue, ] ) ) ) as Record, }; } getControl(): HybridControl { return new HybridControl(this, this.subfields); } }