import type { Array, Schema, SchemaAST } from "effect" import type * as Formify from "./Formify.js" export interface FormField { readonly schema: S } export interface LiteralFormField< S extends Schema.Literal, Literals extends Array.NonEmptyReadonlyArray, > extends FormField { readonly _tag: "LiteralFormField" readonly value: S["Type"] } export interface UnionFormField< S extends Schema.Union, Members extends ReadonlyArray, > extends FormField { readonly _tag: "UnionFormField" readonly member: Formify.Formify } export interface TupleFormField< S extends Schema.TupleType, Elements extends Schema.TupleType.Elements, Rest extends Schema.TupleType.Rest, > extends FormField { readonly _tag: "TupleFormField" readonly elements: [...{ readonly [K in keyof Elements]: Formify.Formify }] } export interface ArrayFormField< S extends Schema.Array$, Value extends Schema.Schema.Any, > extends FormField { readonly _tag: "ArrayFormField" readonly elements: readonly Formify.Formify[] } export interface StructFormField< S extends Schema.Struct, Fields extends Schema.Struct.Fields, > extends FormField { readonly _tag: "StructFormField" readonly fields: { readonly [K in keyof Fields]: Formify.Formify } } export interface GenericFormField extends FormField { readonly _tag: "GenericFormField" readonly value: S["Type"] } export interface PropertySignatureFormField< S extends Schema.PropertySignature, TypeToken extends Schema.PropertySignature.Token, Type, Key extends PropertyKey, EncodedToken extends Schema.PropertySignature.Token, Encoded, HasDefault extends boolean = false, R = never, > { readonly _tag: "PropertySignatureFormField" readonly propertySignature: S readonly value: Type }