@lucas-barake/effect-form 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/Form.js CHANGED
@@ -1,12 +1,6 @@
1
1
  import * as Predicate from "effect/Predicate";
2
2
  import * as Schema from "effect/Schema";
3
- /**
4
- * Unique identifier for FormBuilder instances.
5
- *
6
- * @since 1.0.0
7
- * @category Symbols
8
- */
9
- export const TypeId = /*#__PURE__*/Symbol.for("@lucas-barake/effect-form/Form");
3
+ import { isArrayFieldDef, isFieldDef } from "./Field.js";
10
4
  /**
11
5
  * Unique identifier for Field references.
12
6
  *
@@ -27,46 +21,16 @@ export const makeFieldRef = key => ({
27
21
  _S: undefined,
28
22
  key
29
23
  });
24
+ // ================================
25
+ // FormBuilder
26
+ // ================================
30
27
  /**
31
- * Creates a scalar field definition.
32
- *
33
- * @example
34
- * ```ts
35
- * const NameField = Form.makeField("name", Schema.String)
36
- * const form = Form.empty.addField(NameField)
37
- * ```
38
- *
39
- * @since 1.0.0
40
- * @category Constructors
41
- */
42
- export const makeField = (key, schema) => ({
43
- _tag: "field",
44
- key,
45
- schema
46
- });
47
- /**
48
- * Creates an array field definition.
49
- *
50
- * @example
51
- * ```ts
52
- * // Array of primitives
53
- * const TagsField = Form.makeArrayField("tags", Schema.String)
54
- *
55
- * // Array of objects
56
- * const ItemsField = Form.makeArrayField("items", Schema.Struct({
57
- * name: Schema.String,
58
- * quantity: Schema.Number
59
- * }))
60
- * ```
28
+ * Unique identifier for FormBuilder instances.
61
29
  *
62
30
  * @since 1.0.0
63
- * @category Constructors
31
+ * @category Symbols
64
32
  */
65
- export const makeArrayField = (key, itemSchema) => ({
66
- _tag: "array",
67
- key,
68
- itemSchema
69
- });
33
+ export const TypeId = /*#__PURE__*/Symbol.for("@lucas-barake/effect-form/Form");
70
34
  const FormBuilderProto = {
71
35
  [TypeId]: TypeId,
72
36
  addField(field) {
@@ -126,54 +90,6 @@ const FormBuilderProto = {
126
90
  * @category Guards
127
91
  */
128
92
  export const isFormBuilder = u => Predicate.hasProperty(u, TypeId);
129
- /**
130
- * Checks if a field definition is an array field.
131
- *
132
- * @since 1.0.0
133
- * @category Guards
134
- */
135
- export const isArrayFieldDef = def => def._tag === "array";
136
- /**
137
- * Checks if a field definition is a simple field.
138
- *
139
- * @since 1.0.0
140
- * @category Guards
141
- */
142
- export const isFieldDef = def => def._tag === "field";
143
- /**
144
- * Gets a default encoded value from a schema.
145
- *
146
- * @since 1.0.0
147
- * @category Helpers
148
- */
149
- export const getDefaultFromSchema = schema => {
150
- const ast = schema.ast;
151
- switch (ast._tag) {
152
- case "StringKeyword":
153
- case "TemplateLiteral":
154
- return "";
155
- case "NumberKeyword":
156
- return 0;
157
- case "BooleanKeyword":
158
- return false;
159
- case "TypeLiteral":
160
- {
161
- const result = {};
162
- for (const prop of ast.propertySignatures) {
163
- result[prop.name] = getDefaultFromSchema(Schema.make(prop.type));
164
- }
165
- return result;
166
- }
167
- case "Transformation":
168
- return getDefaultFromSchema(Schema.make(ast.from));
169
- case "Refinement":
170
- return getDefaultFromSchema(Schema.make(ast.from));
171
- case "Suspend":
172
- return getDefaultFromSchema(Schema.make(ast.f()));
173
- default:
174
- return "";
175
- }
176
- };
177
93
  /**
178
94
  * An empty `FormBuilder` to start building a form.
179
95
  *
@@ -230,34 +146,4 @@ export const buildSchema = self => {
230
146
  }
231
147
  return schema;
232
148
  };
233
- /**
234
- * Gets default encoded values for a fields record.
235
- *
236
- * @since 1.0.0
237
- * @category Helpers
238
- */
239
- export const getDefaultEncodedValues = fields => {
240
- const result = {};
241
- for (const [key, def] of Object.entries(fields)) {
242
- if (isArrayFieldDef(def)) {
243
- result[key] = [];
244
- } else {
245
- result[key] = "";
246
- }
247
- }
248
- return result;
249
- };
250
- /**
251
- * Creates a touched record with all fields set to the given value.
252
- *
253
- * @since 1.0.0
254
- * @category Helpers
255
- */
256
- export const createTouchedRecord = (fields, value) => {
257
- const result = {};
258
- for (const key of Object.keys(fields)) {
259
- result[key] = value;
260
- }
261
- return result;
262
- };
263
149
  //# sourceMappingURL=Form.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","names":["Predicate","Schema","TypeId","Symbol","for","FieldTypeId","makeFieldRef","key","_S","undefined","makeField","schema","_tag","makeArrayField","itemSchema","FormBuilderProto","addField","field","newSelf","Object","create","fields","refinements","merge","other","refine","predicate","fn","values","refineEffect","isFormBuilder","u","hasProperty","isArrayFieldDef","def","isFieldDef","getDefaultFromSchema","ast","result","prop","propertySignatures","name","make","type","from","f","empty","self","buildSchema","schemaFields","entries","Array","Struct","refinement","pipe","filter","filterEffect","getDefaultEncodedValues","createTouchedRecord","value","keys"],"sources":["../../src/Form.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Form.js","names":["Predicate","Schema","isArrayFieldDef","isFieldDef","FieldTypeId","Symbol","for","makeFieldRef","key","_S","undefined","TypeId","FormBuilderProto","addField","field","newSelf","Object","create","fields","refinements","merge","other","refine","predicate","_tag","fn","values","refineEffect","isFormBuilder","u","hasProperty","empty","self","buildSchema","schemaFields","def","entries","Array","itemSchema","schema","Struct","refinement","pipe","filter","filterEffect"],"sources":["../../src/Form.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -8,12 +8,11 @@
8
8
  */
9
9
  import * as Atom from "@effect-atom/atom/Atom";
10
10
  import * as Effect from "effect/Effect";
11
- import * as Equal from "effect/Equal";
12
11
  import { pipe } from "effect/Function";
13
12
  import * as Option from "effect/Option";
14
13
  import * as Schema from "effect/Schema";
15
- import * as Utils from "effect/Utils";
16
- import { buildSchema, createTouchedRecord, getDefaultFromSchema, makeFieldRef } from "./Form.js";
14
+ import * as Field from "./Field.js";
15
+ import * as Form from "./Form.js";
17
16
  import { recalculateDirtyFieldsForArray, recalculateDirtySubtree } from "./internal/dirty.js";
18
17
  import { getNestedValue, setNestedValue } from "./internal/path.js";
19
18
  import { createWeakRegistry } from "./internal/weak-registry.js";
@@ -51,24 +50,27 @@ export const make = config => {
51
50
  const {
52
51
  fields
53
52
  } = formBuilder;
54
- const combinedSchema = buildSchema(formBuilder);
53
+ const combinedSchema = Form.buildSchema(formBuilder);
55
54
  const stateAtom = Atom.make(Option.none()).pipe(Atom.setIdleTTL(0));
56
55
  const crossFieldErrorsAtom = Atom.make(new Map()).pipe(Atom.setIdleTTL(0));
57
56
  const dirtyFieldsAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).dirtyFields).pipe(Atom.setIdleTTL(0));
58
57
  const isDirtyAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).dirtyFields.size > 0).pipe(Atom.setIdleTTL(0));
59
58
  const submitCountAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).submitCount).pipe(Atom.setIdleTTL(0));
59
+ const lastSubmittedValuesAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).lastSubmittedValues).pipe(Atom.setIdleTTL(0));
60
+ const changedSinceSubmitFieldsAtom = Atom.readable(get => {
61
+ const state = Option.getOrThrow(get(stateAtom));
62
+ return Option.match(state.lastSubmittedValues, {
63
+ onNone: () => new Set(),
64
+ onSome: lastSubmitted => recalculateDirtySubtree(new Set(), lastSubmitted, state.values, "")
65
+ });
66
+ }).pipe(Atom.setIdleTTL(0));
67
+ const hasChangedSinceSubmitAtom = Atom.readable(get => {
68
+ const state = Option.getOrThrow(get(stateAtom));
69
+ if (Option.isNone(state.lastSubmittedValues)) return false;
70
+ if (state.values === state.lastSubmittedValues.value) return false;
71
+ return get(changedSinceSubmitFieldsAtom).size > 0;
72
+ }).pipe(Atom.setIdleTTL(0));
60
73
  const onSubmitAtom = Atom.make(null).pipe(Atom.setIdleTTL(0));
61
- const updateDirtyFields = (state, fieldPath, newValue) => {
62
- const initialValue = getNestedValue(state.initialValues, fieldPath);
63
- const isEqual = Utils.structuralRegion(() => Equal.equals(newValue, initialValue));
64
- const newDirtyFields = new Set(state.dirtyFields);
65
- if (!isEqual) {
66
- newDirtyFields.add(fieldPath);
67
- } else {
68
- newDirtyFields.delete(fieldPath);
69
- }
70
- return newDirtyFields;
71
- };
72
74
  const validationAtomsRegistry = createWeakRegistry();
73
75
  const fieldAtomsRegistry = createWeakRegistry();
74
76
  const getOrCreateValidationAtom = (fieldPath, schema) => {
@@ -83,10 +85,11 @@ export const make = config => {
83
85
  if (existing) return existing;
84
86
  const valueAtom = Atom.writable(get => getNestedValue(Option.getOrThrow(get(stateAtom)).values, fieldPath), (ctx, value) => {
85
87
  const currentState = Option.getOrThrow(ctx.get(stateAtom));
88
+ const newValues = setNestedValue(currentState.values, fieldPath, value);
86
89
  ctx.set(stateAtom, Option.some({
87
90
  ...currentState,
88
- values: setNestedValue(currentState.values, fieldPath, value),
89
- dirtyFields: updateDirtyFields(currentState, fieldPath, value)
91
+ values: newValues,
92
+ dirtyFields: recalculateDirtySubtree(currentState.dirtyFields, currentState.initialValues, newValues, fieldPath)
90
93
  }));
91
94
  }).pipe(Atom.setIdleTTL(0));
92
95
  const initialValueAtom = Atom.readable(get => getNestedValue(Option.getOrThrow(get(stateAtom)).initialValues, fieldPath)).pipe(Atom.setIdleTTL(0));
@@ -126,25 +129,28 @@ export const make = config => {
126
129
  suspendOnWaiting: true
127
130
  });
128
131
  })).pipe(Atom.setIdleTTL(0));
129
- const fieldRefs = Object.fromEntries(Object.keys(fields).map(key => [key, makeFieldRef(key)]));
132
+ const fieldRefs = Object.fromEntries(Object.keys(fields).map(key => [key, Form.makeFieldRef(key)]));
130
133
  const operations = {
131
134
  createInitialState: defaultValues => ({
132
135
  values: defaultValues,
133
136
  initialValues: defaultValues,
134
- touched: createTouchedRecord(fields, false),
137
+ lastSubmittedValues: Option.none(),
138
+ touched: Field.createTouchedRecord(fields, false),
135
139
  submitCount: 0,
136
140
  dirtyFields: new Set()
137
141
  }),
138
142
  createResetState: state => ({
139
143
  values: state.initialValues,
140
144
  initialValues: state.initialValues,
141
- touched: createTouchedRecord(fields, false),
145
+ lastSubmittedValues: Option.none(),
146
+ touched: Field.createTouchedRecord(fields, false),
142
147
  submitCount: 0,
143
148
  dirtyFields: new Set()
144
149
  }),
145
150
  createSubmitState: state => ({
146
151
  ...state,
147
- touched: createTouchedRecord(fields, true),
152
+ lastSubmittedValues: Option.some(state.values),
153
+ touched: Field.createTouchedRecord(fields, true),
148
154
  submitCount: state.submitCount + 1
149
155
  }),
150
156
  setFieldValue: (state, fieldPath, value) => {
@@ -169,7 +175,7 @@ export const make = config => {
169
175
  touched: setNestedValue(state.touched, fieldPath, touched)
170
176
  }),
171
177
  appendArrayItem: (state, arrayPath, itemSchema, value) => {
172
- const newItem = value ?? getDefaultFromSchema(itemSchema);
178
+ const newItem = value ?? Field.getDefaultFromSchema(itemSchema);
173
179
  const currentItems = getNestedValue(state.values, arrayPath) ?? [];
174
180
  const newItems = [...currentItems, newItem];
175
181
  return {
@@ -215,6 +221,20 @@ export const make = config => {
215
221
  values: setNestedValue(state.values, arrayPath, newItems),
216
222
  dirtyFields: recalculateDirtyFieldsForArray(state.dirtyFields, state.initialValues, arrayPath, newItems)
217
223
  };
224
+ },
225
+ revertToLastSubmit: state => {
226
+ if (Option.isNone(state.lastSubmittedValues)) {
227
+ return state;
228
+ }
229
+ if (state.values === state.lastSubmittedValues.value) {
230
+ return state;
231
+ }
232
+ const newDirtyFields = recalculateDirtySubtree(state.dirtyFields, state.initialValues, state.lastSubmittedValues.value, "");
233
+ return {
234
+ ...state,
235
+ values: state.lastSubmittedValues.value,
236
+ dirtyFields: newDirtyFields
237
+ };
218
238
  }
219
239
  };
220
240
  return {
@@ -223,6 +243,9 @@ export const make = config => {
223
243
  dirtyFieldsAtom,
224
244
  isDirtyAtom,
225
245
  submitCountAtom,
246
+ lastSubmittedValuesAtom,
247
+ changedSinceSubmitFieldsAtom,
248
+ hasChangedSinceSubmitAtom,
226
249
  onSubmitAtom,
227
250
  decodeAndSubmit,
228
251
  combinedSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"FormAtoms.js","names":["Atom","Effect","Equal","pipe","Option","Schema","Utils","buildSchema","createTouchedRecord","getDefaultFromSchema","makeFieldRef","recalculateDirtyFieldsForArray","recalculateDirtySubtree","getNestedValue","setNestedValue","createWeakRegistry","make","config","formBuilder","runtime","fields","combinedSchema","stateAtom","none","setIdleTTL","crossFieldErrorsAtom","Map","dirtyFieldsAtom","readable","get","getOrThrow","dirtyFields","isDirtyAtom","size","submitCountAtom","submitCount","onSubmitAtom","updateDirtyFields","state","fieldPath","newValue","initialValue","initialValues","isEqual","structuralRegion","equals","newDirtyFields","Set","add","delete","validationAtomsRegistry","fieldAtomsRegistry","getOrCreateValidationAtom","schema","existing","validationAtom","fn","value","decodeUnknown","asVoid","set","getOrCreateFieldAtoms","valueAtom","writable","values","ctx","currentState","some","initialValueAtom","touchedAtom","touched","crossFieldErrorAtom","errors","error","undefined","atoms","resetValidationAtoms","registry","Reset","clear","decodeAndSubmit","gen","decoded","onSubmit","result","suspendOnWaiting","fieldRefs","Object","fromEntries","keys","map","key","operations","createInitialState","defaultValues","createResetState","createSubmitState","setFieldValue","newValues","setFormValues","setFieldTouched","appendArrayItem","arrayPath","itemSchema","newItem","currentItems","newItems","removeArrayItem","index","filter","_","i","swapArrayItems","indexA","indexB","length","temp","moveArrayItem","fromIndex","toIndex","item","splice"],"sources":["../../src/FormAtoms.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FormAtoms.js","names":["Atom","Effect","pipe","Option","Schema","Field","Form","recalculateDirtyFieldsForArray","recalculateDirtySubtree","getNestedValue","setNestedValue","createWeakRegistry","make","config","formBuilder","runtime","fields","combinedSchema","buildSchema","stateAtom","none","setIdleTTL","crossFieldErrorsAtom","Map","dirtyFieldsAtom","readable","get","getOrThrow","dirtyFields","isDirtyAtom","size","submitCountAtom","submitCount","lastSubmittedValuesAtom","lastSubmittedValues","changedSinceSubmitFieldsAtom","state","match","onNone","Set","onSome","lastSubmitted","values","hasChangedSinceSubmitAtom","isNone","value","onSubmitAtom","validationAtomsRegistry","fieldAtomsRegistry","getOrCreateValidationAtom","fieldPath","schema","existing","validationAtom","fn","decodeUnknown","asVoid","set","getOrCreateFieldAtoms","valueAtom","writable","ctx","currentState","newValues","some","initialValues","initialValueAtom","touchedAtom","touched","crossFieldErrorAtom","errors","error","undefined","atoms","resetValidationAtoms","registry","Reset","clear","decodeAndSubmit","gen","decoded","onSubmit","result","suspendOnWaiting","fieldRefs","Object","fromEntries","keys","map","key","makeFieldRef","operations","createInitialState","defaultValues","createTouchedRecord","createResetState","createSubmitState","setFieldValue","newDirtyFields","setFormValues","setFieldTouched","appendArrayItem","arrayPath","itemSchema","newItem","getDefaultFromSchema","currentItems","newItems","removeArrayItem","index","filter","_","i","swapArrayItems","indexA","indexB","length","temp","moveArrayItem","fromIndex","toIndex","item","splice","revertToLastSubmit"],"sources":["../../src/FormAtoms.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Field definitions for type-safe forms.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ export * as Field from "./Field.js";
1
7
  /**
2
8
  * @since 1.0.0
3
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Form","FormAtoms","Mode","Validation"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,IAAI,MAAM,WAAW;AAEjC;;;;;;;;AAQA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;;;AAKA,OAAO,KAAKC,IAAI,MAAM,WAAW;AAEjC;;;;;AAKA,OAAO,KAAKC,UAAU,MAAM,iBAAiB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Field","Form","FormAtoms","Mode","Validation"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAKA,OAAO,KAAKA,KAAK,MAAM,YAAY;AAEnC;;;AAGA,OAAO,KAAKC,IAAI,MAAM,WAAW;AAEjC;;;;;;;;AAQA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;;;AAKA,OAAO,KAAKC,IAAI,MAAM,WAAW;AAEjC;;;;;AAKA,OAAO,KAAKC,UAAU,MAAM,iBAAiB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucas-barake/effect-form",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Type-safe form builder powered by Effect Schema",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -24,6 +24,11 @@
24
24
  "import": "./dist/esm/index.js",
25
25
  "default": "./dist/cjs/index.js"
26
26
  },
27
+ "./Field": {
28
+ "types": "./dist/dts/Field.d.ts",
29
+ "import": "./dist/esm/Field.js",
30
+ "default": "./dist/cjs/Field.js"
31
+ },
27
32
  "./Form": {
28
33
  "types": "./dist/dts/Form.d.ts",
29
34
  "import": "./dist/esm/Form.js",
@@ -47,6 +52,9 @@
47
52
  },
48
53
  "typesVersions": {
49
54
  "*": {
55
+ "Field": [
56
+ "./dist/dts/Field.d.ts"
57
+ ],
50
58
  "Form": [
51
59
  "./dist/dts/Form.d.ts"
52
60
  ],
package/src/Field.ts ADDED
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Field definitions for type-safe forms.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import * as Schema from "effect/Schema"
7
+
8
+ /**
9
+ * Unique identifier for Field instances.
10
+ *
11
+ * @since 1.0.0
12
+ * @category Symbols
13
+ */
14
+ export const TypeId: unique symbol = Symbol.for("@lucas-barake/effect-form/Field")
15
+
16
+ /**
17
+ * @since 1.0.0
18
+ * @category Symbols
19
+ */
20
+ export type TypeId = typeof TypeId
21
+
22
+ /**
23
+ * A scalar field definition containing the key and schema.
24
+ *
25
+ * @since 1.0.0
26
+ * @category Models
27
+ */
28
+ export interface FieldDef<K extends string, S extends Schema.Schema.Any> {
29
+ readonly _tag: "field"
30
+ readonly key: K
31
+ readonly schema: S
32
+ }
33
+
34
+ /**
35
+ * An array field definition containing a schema for items.
36
+ *
37
+ * @since 1.0.0
38
+ * @category Models
39
+ */
40
+ export interface ArrayFieldDef<K extends string, S extends Schema.Schema.Any> {
41
+ readonly _tag: "array"
42
+ readonly key: K
43
+ readonly itemSchema: S
44
+ }
45
+
46
+ /**
47
+ * Union of all field definition types.
48
+ *
49
+ * @since 1.0.0
50
+ * @category Models
51
+ */
52
+ export type AnyFieldDef = FieldDef<string, Schema.Schema.Any> | ArrayFieldDef<string, Schema.Schema.Any>
53
+
54
+ /**
55
+ * A record of field definitions.
56
+ *
57
+ * @since 1.0.0
58
+ * @category Models
59
+ */
60
+ export type FieldsRecord = Record<string, AnyFieldDef>
61
+
62
+ /**
63
+ * Checks if a field definition is an array field.
64
+ *
65
+ * @since 1.0.0
66
+ * @category Guards
67
+ */
68
+ export const isArrayFieldDef = (def: AnyFieldDef): def is ArrayFieldDef<string, Schema.Schema.Any> =>
69
+ def._tag === "array"
70
+
71
+ /**
72
+ * Checks if a field definition is a scalar field.
73
+ *
74
+ * @since 1.0.0
75
+ * @category Guards
76
+ */
77
+ export const isFieldDef = (def: AnyFieldDef): def is FieldDef<string, Schema.Schema.Any> => def._tag === "field"
78
+
79
+ /**
80
+ * Creates a scalar field definition.
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * import * as Field from "@lucas-barake/effect-form/Field"
85
+ * import * as Schema from "effect/Schema"
86
+ *
87
+ * const NameField = Field.makeField("name", Schema.String)
88
+ * ```
89
+ *
90
+ * @since 1.0.0
91
+ * @category Constructors
92
+ */
93
+ export const makeField = <K extends string, S extends Schema.Schema.Any>(
94
+ key: K,
95
+ schema: S,
96
+ ): FieldDef<K, S> => ({
97
+ _tag: "field",
98
+ key,
99
+ schema,
100
+ })
101
+
102
+ /**
103
+ * Creates an array field definition.
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * import * as Field from "@lucas-barake/effect-form/Field"
108
+ * import * as Schema from "effect/Schema"
109
+ *
110
+ * // Array of primitives
111
+ * const TagsField = Field.makeArrayField("tags", Schema.String)
112
+ *
113
+ * // Array of objects
114
+ * const ItemsField = Field.makeArrayField("items", Schema.Struct({
115
+ * name: Schema.String,
116
+ * quantity: Schema.Number
117
+ * }))
118
+ * ```
119
+ *
120
+ * @since 1.0.0
121
+ * @category Constructors
122
+ */
123
+ export const makeArrayField = <K extends string, S extends Schema.Schema.Any>(
124
+ key: K,
125
+ itemSchema: S,
126
+ ): ArrayFieldDef<K, S> => ({
127
+ _tag: "array",
128
+ key,
129
+ itemSchema,
130
+ })
131
+
132
+ /**
133
+ * Extracts the encoded (input) type from a fields record.
134
+ *
135
+ * @since 1.0.0
136
+ * @category Type Helpers
137
+ */
138
+ export type EncodedFromFields<T extends FieldsRecord> = {
139
+ readonly [K in keyof T]: T[K] extends FieldDef<any, infer S> ? Schema.Schema.Encoded<S>
140
+ : T[K] extends ArrayFieldDef<any, infer S> ? ReadonlyArray<Schema.Schema.Encoded<S>>
141
+ : never
142
+ }
143
+
144
+ /**
145
+ * Extracts the decoded (output) type from a fields record.
146
+ *
147
+ * @since 1.0.0
148
+ * @category Type Helpers
149
+ */
150
+ export type DecodedFromFields<T extends FieldsRecord> = {
151
+ readonly [K in keyof T]: T[K] extends FieldDef<any, infer S> ? Schema.Schema.Type<S>
152
+ : T[K] extends ArrayFieldDef<any, infer S> ? ReadonlyArray<Schema.Schema.Type<S>>
153
+ : never
154
+ }
155
+
156
+ /**
157
+ * Gets a default encoded value from a schema.
158
+ *
159
+ * @since 1.0.0
160
+ * @category Helpers
161
+ */
162
+ export const getDefaultFromSchema = (schema: Schema.Schema.Any): unknown => {
163
+ const ast = schema.ast
164
+ switch (ast._tag) {
165
+ case "StringKeyword":
166
+ case "TemplateLiteral":
167
+ return ""
168
+ case "NumberKeyword":
169
+ return 0
170
+ case "BooleanKeyword":
171
+ return false
172
+ case "TypeLiteral": {
173
+ const result: Record<string, unknown> = {}
174
+ for (const prop of ast.propertySignatures) {
175
+ result[prop.name as string] = getDefaultFromSchema(Schema.make(prop.type))
176
+ }
177
+ return result
178
+ }
179
+ case "Transformation":
180
+ return getDefaultFromSchema(Schema.make(ast.from))
181
+ case "Refinement":
182
+ return getDefaultFromSchema(Schema.make(ast.from))
183
+ case "Suspend":
184
+ return getDefaultFromSchema(Schema.make(ast.f()))
185
+ default:
186
+ return ""
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Gets default encoded values for a fields record.
192
+ *
193
+ * @since 1.0.0
194
+ * @category Helpers
195
+ */
196
+ export const getDefaultEncodedValues = (fields: FieldsRecord): Record<string, unknown> => {
197
+ const result: Record<string, unknown> = {}
198
+ for (const [key, def] of Object.entries(fields)) {
199
+ if (isArrayFieldDef(def)) {
200
+ result[key] = []
201
+ } else {
202
+ result[key] = ""
203
+ }
204
+ }
205
+ return result
206
+ }
207
+
208
+ /**
209
+ * Creates a touched record with all fields set to the given value.
210
+ *
211
+ * @since 1.0.0
212
+ * @category Helpers
213
+ */
214
+ export const createTouchedRecord = (fields: FieldsRecord, value: boolean): Record<string, boolean> => {
215
+ const result: Record<string, boolean> = {}
216
+ for (const key of Object.keys(fields)) {
217
+ result[key] = value
218
+ }
219
+ return result
220
+ }