diff --git a/packages/extension-form/src/internal/Form.ts b/packages/extension-form/src/internal/Form.ts index ad621d8..f5ad19d 100644 --- a/packages/extension-form/src/internal/Form.ts +++ b/packages/extension-form/src/internal/Form.ts @@ -1,4 +1,4 @@ -import { Schema, SubscriptionRef } from "effect" +import { Schema } from "effect" export interface Form { @@ -7,40 +7,38 @@ export interface Form { export type FormTree> = ( + S extends Schema.Array$ ? ArrayFormField : S extends Schema.Struct ? StructFormField : - S extends ScalarSchema ? ScalarFormField : - S["Type"] + GenericFormField ) -export interface FormField> { - readonly value: SubscriptionRef.SubscriptionRef -} - -export interface ScalarFormField extends FormField { - readonly _tag: "ScalarFormField" +export interface GenericFormField> { + readonly _tag: "GenericFormField" readonly schema: S + readonly value: S["Type"] } -export interface StructFormField> extends FormField { +export interface ArrayFormField> { + readonly _tag: "ArrayFormField" + readonly schema: S + readonly elements: readonly FormTree[] +} + +export interface StructFormField> { readonly _tag: "StructFormField" readonly schema: S readonly fields: { [K in keyof S["fields"]]: FormTree } } -export type ScalarSchema = ( - | Schema.String - | Schema.Number -) - - const MySchema = Schema.Struct({ name: Schema.String, + symbol: Schema.SymbolFromSelf, values: Schema.Array(Schema.String), }) type TestFormTree = FormTree declare const testFormTree: TestFormTree -testFormTree.fields.name.value +testFormTree.fields.values.elements