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