import { Context } from "koa"; import { FormControlContext } from "../controls/form-control.js"; import { Textarea } from "../controls/textarea.js"; import { FormDataValue } from "../form-types.js"; import { FieldParseResult } from "./field.js"; import { SimpleFormField } from "./simple-form-field.js"; export class JSONField extends SimpleFormField< Required, Textarea, Record > { constructor(required: Required) { super(required, "text"); } getControl(): Textarea { return new Textarea(this); } public getEmptyValue(): Record { return {}; } async parse( ctx: Context, raw_value: FormDataValue ): Promise>> { return { parsable: true, error: null, parsed_value: JSON.parse(raw_value as string) as Record< string, unknown >, }; } async getSealiousCreateValue( fctx: FormControlContext ): Promise | null> { const { parsed } = await this.getParsedValue( fctx.ctx, fctx.data.raw_values ); return parsed; } }