@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/Field/package.json +6 -0
- package/dist/cjs/Field.js +171 -0
- package/dist/cjs/Field.js.map +1 -0
- package/dist/cjs/Form.js +11 -132
- package/dist/cjs/Form.js.map +1 -1
- package/dist/cjs/FormAtoms.js +45 -22
- package/dist/cjs/FormAtoms.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/dts/Field.d.ts +145 -0
- package/dist/dts/Field.d.ts.map +1 -0
- package/dist/dts/Form.d.ts +8 -126
- package/dist/dts/Form.d.ts.map +1 -1
- package/dist/dts/FormAtoms.d.ts +20 -41
- package/dist/dts/FormAtoms.d.ts.map +1 -1
- package/dist/dts/index.d.ts +6 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/Field.js +137 -0
- package/dist/esm/Field.js.map +1 -0
- package/dist/esm/Form.js +7 -121
- package/dist/esm/Form.js.map +1 -1
- package/dist/esm/FormAtoms.js +45 -22
- package/dist/esm/FormAtoms.js.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +9 -1
- package/src/Field.ts +220 -0
- package/src/Form.ts +19 -197
- package/src/FormAtoms.ts +95 -81
- package/src/index.ts +7 -0
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
|
-
*
|
|
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
|
|
31
|
+
* @category Symbols
|
|
64
32
|
*/
|
|
65
|
-
export const
|
|
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
|
package/dist/esm/Form.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.js","names":["Predicate","Schema","
|
|
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":[]}
|
package/dist/esm/FormAtoms.js
CHANGED
|
@@ -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
|
|
16
|
-
import
|
|
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:
|
|
89
|
-
dirtyFields:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Form","FormAtoms","Mode","Validation"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,
|
|
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.
|
|
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
|
+
}
|