From 35a8037f5a378cbafa136021b1e4858e5612a927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 17 Apr 2025 02:30:23 +0200 Subject: [PATCH] Form work --- .../extension-form/src/internal/FormField.ts | 39 ++++++++----------- .../extension-form/src/internal/FormTree.ts | 12 +++--- 2 files changed, 22 insertions(+), 29 deletions(-) diff --git a/packages/extension-form/src/internal/FormField.ts b/packages/extension-form/src/internal/FormField.ts index fce5fa2..b9320f0 100644 --- a/packages/extension-form/src/internal/FormField.ts +++ b/packages/extension-form/src/internal/FormField.ts @@ -11,34 +11,27 @@ export interface GenericFormField extends FormField readonly value: S["Type"] } -export interface TupleFormField> extends FormField { +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 S["elements"]]: FormTree.FormTree< - S["elements"][K] extends Schema.Schema.Any - ? S["elements"][K] - : never - > } + readonly elements: [...{ readonly [K in keyof Elements]: FormTree.FormTree }] } -export interface Tuple2FormField> extends FormField { - readonly _tag: "Tuple2FormField" - readonly elements: { readonly [K in keyof S["elements"]]: FormTree.FormTree< - S["elements"][K] extends Schema.Schema.Any - ? S["elements"][K] - : never - > } -} - -export interface ArrayFormField> extends FormField { +export interface ArrayFormField< + S extends Schema.Array$, + Value extends Schema.Schema.Any, +> extends FormField { readonly _tag: "ArrayFormField" - readonly elements: readonly FormTree.FormTree[] + readonly elements: readonly FormTree.FormTree[] } -export interface StructFormField> extends FormField { +export interface StructFormField< + S extends Schema.Struct, + Fields extends Schema.Struct.Fields, +> extends FormField { readonly _tag: "StructFormField" - readonly fields: { readonly [K in keyof S["fields"]]: FormTree.FormTree } + readonly fields: { readonly [K in keyof Fields]: FormTree.FormTree } } diff --git a/packages/extension-form/src/internal/FormTree.ts b/packages/extension-form/src/internal/FormTree.ts index e33ef0b..ec7f4ef 100644 --- a/packages/extension-form/src/internal/FormTree.ts +++ b/packages/extension-form/src/internal/FormTree.ts @@ -2,12 +2,12 @@ import { Schema } from "effect" import type * as FormField from "./FormField.js" -export type FormTree = ( - S extends Schema.Tuple ? FormField.TupleFormField : - S extends Schema.Tuple2 ? FormField.Tuple2FormField : - S extends Schema.Array$ ? FormField.ArrayFormField : - S extends Schema.Struct ? FormField.StructFormField : - FormField.GenericFormField +export type FormTree = ( + S extends Schema.TupleType ? FormField.TupleFormField : + S extends Schema.Array$ ? FormField.ArrayFormField : + S extends Schema.Struct ? FormField.StructFormField : + S extends Schema.Schema.Any ? FormField.GenericFormField : + never )