@lucas-barake/effect-form 0.1.0 → 0.2.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 +8 -7
- 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 +6 -126
- package/dist/dts/Form.d.ts.map +1 -1
- package/dist/dts/FormAtoms.d.ts +13 -12
- 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 +8 -7
- 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 +17 -197
- package/src/FormAtoms.ts +30 -30
- 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
|
@@ -13,7 +13,8 @@ import { pipe } from "effect/Function";
|
|
|
13
13
|
import * as Option from "effect/Option";
|
|
14
14
|
import * as Schema from "effect/Schema";
|
|
15
15
|
import * as Utils from "effect/Utils";
|
|
16
|
-
import
|
|
16
|
+
import * as Field from "./Field.js";
|
|
17
|
+
import * as Form from "./Form.js";
|
|
17
18
|
import { recalculateDirtyFieldsForArray, recalculateDirtySubtree } from "./internal/dirty.js";
|
|
18
19
|
import { getNestedValue, setNestedValue } from "./internal/path.js";
|
|
19
20
|
import { createWeakRegistry } from "./internal/weak-registry.js";
|
|
@@ -51,7 +52,7 @@ export const make = config => {
|
|
|
51
52
|
const {
|
|
52
53
|
fields
|
|
53
54
|
} = formBuilder;
|
|
54
|
-
const combinedSchema = buildSchema(formBuilder);
|
|
55
|
+
const combinedSchema = Form.buildSchema(formBuilder);
|
|
55
56
|
const stateAtom = Atom.make(Option.none()).pipe(Atom.setIdleTTL(0));
|
|
56
57
|
const crossFieldErrorsAtom = Atom.make(new Map()).pipe(Atom.setIdleTTL(0));
|
|
57
58
|
const dirtyFieldsAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).dirtyFields).pipe(Atom.setIdleTTL(0));
|
|
@@ -126,25 +127,25 @@ export const make = config => {
|
|
|
126
127
|
suspendOnWaiting: true
|
|
127
128
|
});
|
|
128
129
|
})).pipe(Atom.setIdleTTL(0));
|
|
129
|
-
const fieldRefs = Object.fromEntries(Object.keys(fields).map(key => [key, makeFieldRef(key)]));
|
|
130
|
+
const fieldRefs = Object.fromEntries(Object.keys(fields).map(key => [key, Form.makeFieldRef(key)]));
|
|
130
131
|
const operations = {
|
|
131
132
|
createInitialState: defaultValues => ({
|
|
132
133
|
values: defaultValues,
|
|
133
134
|
initialValues: defaultValues,
|
|
134
|
-
touched: createTouchedRecord(fields, false),
|
|
135
|
+
touched: Field.createTouchedRecord(fields, false),
|
|
135
136
|
submitCount: 0,
|
|
136
137
|
dirtyFields: new Set()
|
|
137
138
|
}),
|
|
138
139
|
createResetState: state => ({
|
|
139
140
|
values: state.initialValues,
|
|
140
141
|
initialValues: state.initialValues,
|
|
141
|
-
touched: createTouchedRecord(fields, false),
|
|
142
|
+
touched: Field.createTouchedRecord(fields, false),
|
|
142
143
|
submitCount: 0,
|
|
143
144
|
dirtyFields: new Set()
|
|
144
145
|
}),
|
|
145
146
|
createSubmitState: state => ({
|
|
146
147
|
...state,
|
|
147
|
-
touched: createTouchedRecord(fields, true),
|
|
148
|
+
touched: Field.createTouchedRecord(fields, true),
|
|
148
149
|
submitCount: state.submitCount + 1
|
|
149
150
|
}),
|
|
150
151
|
setFieldValue: (state, fieldPath, value) => {
|
|
@@ -169,7 +170,7 @@ export const make = config => {
|
|
|
169
170
|
touched: setNestedValue(state.touched, fieldPath, touched)
|
|
170
171
|
}),
|
|
171
172
|
appendArrayItem: (state, arrayPath, itemSchema, value) => {
|
|
172
|
-
const newItem = value ?? getDefaultFromSchema(itemSchema);
|
|
173
|
+
const newItem = value ?? Field.getDefaultFromSchema(itemSchema);
|
|
173
174
|
const currentItems = getNestedValue(state.values, arrayPath) ?? [];
|
|
174
175
|
const newItems = [...currentItems, newItem];
|
|
175
176
|
return {
|
|
@@ -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","Equal","pipe","Option","Schema","Utils","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","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","makeFieldRef","operations","createInitialState","defaultValues","createTouchedRecord","createResetState","createSubmitState","setFieldValue","newValues","setFormValues","setFieldTouched","appendArrayItem","arrayPath","itemSchema","newItem","getDefaultFromSchema","currentItems","newItems","removeArrayItem","index","filter","_","i","swapArrayItems","indexA","indexB","length","temp","moveArrayItem","fromIndex","toIndex","item","splice"],"sources":["../../src/FormAtoms.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;AAQA,OAAO,KAAKA,IAAI,MAAM,wBAAwB;AAE9C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,YAAY;AACnC,OAAO,KAAKC,IAAI,MAAM,WAAW;AACjC,SAASC,8BAA8B,EAAEC,uBAAuB,QAAQ,qBAAqB;AAC7F,SAASC,cAAc,EAAEC,cAAc,QAAQ,oBAAoB;AACnE,SAASC,kBAAkB,QAA2B,6BAA6B;AAoKnF;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,OAAO,MAAMC,IAAI,GACfC,MAAmC,IACV;EACzB,MAAM;IAAEC,WAAW;IAAEC;EAAO,CAAE,GAAGF,MAAM;EACvC,MAAM;IAAEG;EAAM,CAAE,GAAGF,WAAW;EAE9B,MAAMG,cAAc,GAAGX,IAAI,CAACY,WAAW,CAACJ,WAAW,CAAC;EAEpD,MAAMK,SAAS,GAAGrB,IAAI,CAACc,IAAI,CAACV,MAAM,CAACkB,IAAI,EAA2B,CAAC,CAACnB,IAAI,CAACH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CAAC;EAC5F,MAAMC,oBAAoB,GAAGxB,IAAI,CAACc,IAAI,CAAsB,IAAIW,GAAG,EAAE,CAAC,CAACtB,IAAI,CAACH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CAAC;EAE/F,MAAMG,eAAe,GAAG1B,IAAI,CAAC2B,QAAQ,CAAEC,GAAG,IAAKxB,MAAM,CAACyB,UAAU,CAACD,GAAG,CAACP,SAAS,CAAC,CAAC,CAACS,WAAW,CAAC,CAAC3B,IAAI,CAChGH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CACnB;EAED,MAAMQ,WAAW,GAAG/B,IAAI,CAAC2B,QAAQ,CAAEC,GAAG,IAAKxB,MAAM,CAACyB,UAAU,CAACD,GAAG,CAACP,SAAS,CAAC,CAAC,CAACS,WAAW,CAACE,IAAI,GAAG,CAAC,CAAC,CAAC7B,IAAI,CACrGH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CACnB;EAED,MAAMU,eAAe,GAAGjC,IAAI,CAAC2B,QAAQ,CAAEC,GAAG,IAAKxB,MAAM,CAACyB,UAAU,CAACD,GAAG,CAACP,SAAS,CAAC,CAAC,CAACa,WAAW,CAAC,CAAC/B,IAAI,CAChGH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CACnB;EAED,MAAMY,YAAY,GAAGnC,IAAI,CAACc,IAAI,CAC5B,IAAI,CACL,CAACX,IAAI,CAACH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CAAC;EAE1B,MAAMa,iBAAiB,GAAGA,CACxBC,KAA8B,EAC9BC,SAAiB,EACjBC,QAAiB,KACM;IACvB,MAAMC,YAAY,GAAG7B,cAAc,CAAC0B,KAAK,CAACI,aAAa,EAAEH,SAAS,CAAC;IACnE,MAAMI,OAAO,GAAGpC,KAAK,CAACqC,gBAAgB,CAAC,MAAMzC,KAAK,CAAC0C,MAAM,CAACL,QAAQ,EAAEC,YAAY,CAAC,CAAC;IAElF,MAAMK,cAAc,GAAG,IAAIC,GAAG,CAACT,KAAK,CAACP,WAAW,CAAC;IACjD,IAAI,CAACY,OAAO,EAAE;MACZG,cAAc,CAACE,GAAG,CAACT,SAAS,CAAC;IAC/B,CAAC,MAAM;MACLO,cAAc,CAACG,MAAM,CAACV,SAAS,CAAC;IAClC;IACA,OAAOO,cAAc;EACvB,CAAC;EAED,MAAMI,uBAAuB,GAAGpC,kBAAkB,EAA4D;EAC9G,MAAMqC,kBAAkB,GAAGrC,kBAAkB,EAAc;EAE3D,MAAMsC,yBAAyB,GAAGA,CAChCb,SAAiB,EACjBc,MAAyB,KACmC;IAC5D,MAAMC,QAAQ,GAAGJ,uBAAuB,CAACrB,GAAG,CAACU,SAAS,CAAC;IACvD,IAAIe,QAAQ,EAAE,OAAOA,QAAQ;IAE7B,MAAMC,cAAc,GAAGrC,OAAO,CAACsC,EAAE,EAAW,CAAEC,KAAc,IAC1DrD,IAAI,CACFE,MAAM,CAACoD,aAAa,CAACL,MAAM,CAAC,CAACI,KAAK,CAAsD,EACxFvD,MAAM,CAACyD,MAAM,CACd,CACF,CAACvD,IAAI,CAACH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CAA6D;IAEtF0B,uBAAuB,CAACU,GAAG,CAACrB,SAAS,EAAEgB,cAAc,CAAC;IACtD,OAAOA,cAAc;EACvB,CAAC;EAED,MAAMM,qBAAqB,GAAItB,SAAiB,IAAgB;IAC9D,MAAMe,QAAQ,GAAGH,kBAAkB,CAACtB,GAAG,CAACU,SAAS,CAAC;IAClD,IAAIe,QAAQ,EAAE,OAAOA,QAAQ;IAE7B,MAAMQ,SAAS,GAAG7D,IAAI,CAAC8D,QAAQ,CAC5BlC,GAAG,IAAKjB,cAAc,CAACP,MAAM,CAACyB,UAAU,CAACD,GAAG,CAACP,SAAS,CAAC,CAAC,CAAC0C,MAAM,EAAEzB,SAAS,CAAC,EAC5E,CAAC0B,GAAG,EAAER,KAAK,KAAI;MACb,MAAMS,YAAY,GAAG7D,MAAM,CAACyB,UAAU,CAACmC,GAAG,CAACpC,GAAG,CAACP,SAAS,CAAC,CAAC;MAC1D2C,GAAG,CAACL,GAAG,CACLtC,SAAS,EACTjB,MAAM,CAAC8D,IAAI,CAAC;QACV,GAAGD,YAAY;QACfF,MAAM,EAAEnD,cAAc,CAACqD,YAAY,CAACF,MAAM,EAAEzB,SAAS,EAAEkB,KAAK,CAAC;QAC7D1B,WAAW,EAAEM,iBAAiB,CAAC6B,YAAY,EAAE3B,SAAS,EAAEkB,KAAK;OAC9D,CAAC,CACH;IACH,CAAC,CACF,CAACrD,IAAI,CAACH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1B,MAAM4C,gBAAgB,GAAGnE,IAAI,CAAC2B,QAAQ,CACnCC,GAAG,IAAKjB,cAAc,CAACP,MAAM,CAACyB,UAAU,CAACD,GAAG,CAACP,SAAS,CAAC,CAAC,CAACoB,aAAa,EAAEH,SAAS,CAAC,CACpF,CAACnC,IAAI,CAACH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1B,MAAM6C,WAAW,GAAGpE,IAAI,CAAC8D,QAAQ,CAC9BlC,GAAG,IAAMjB,cAAc,CAACP,MAAM,CAACyB,UAAU,CAACD,GAAG,CAACP,SAAS,CAAC,CAAC,CAACgD,OAAO,EAAE/B,SAAS,CAAC,IAAI,KAAiB,EACnG,CAAC0B,GAAG,EAAER,KAAK,KAAI;MACb,MAAMS,YAAY,GAAG7D,MAAM,CAACyB,UAAU,CAACmC,GAAG,CAACpC,GAAG,CAACP,SAAS,CAAC,CAAC;MAC1D2C,GAAG,CAACL,GAAG,CACLtC,SAAS,EACTjB,MAAM,CAAC8D,IAAI,CAAC;QACV,GAAGD,YAAY;QACfI,OAAO,EAAEzD,cAAc,CAACqD,YAAY,CAACI,OAAO,EAAE/B,SAAS,EAAEkB,KAAK;OAC/D,CAAC,CACH;IACH,CAAC,CACF,CAACrD,IAAI,CAACH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1B,MAAM+C,mBAAmB,GAAGtE,IAAI,CAAC2B,QAAQ,CAAEC,GAAG,IAAI;MAChD,MAAM2C,MAAM,GAAG3C,GAAG,CAACJ,oBAAoB,CAAC;MACxC,MAAMgD,KAAK,GAAGD,MAAM,CAAC3C,GAAG,CAACU,SAAS,CAAC;MACnC,OAAOkC,KAAK,KAAKC,SAAS,GAAGrE,MAAM,CAAC8D,IAAI,CAACM,KAAK,CAAC,GAAGpE,MAAM,CAACkB,IAAI,EAAU;IACzE,CAAC,CAAC,CAACnB,IAAI,CAACH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CAAC;IAE3B,MAAMmD,KAAK,GAAe;MAAEb,SAAS;MAAEM,gBAAgB;MAAEC,WAAW;MAAEE;IAAmB,CAAE;IAC3FpB,kBAAkB,CAACS,GAAG,CAACrB,SAAS,EAAEoC,KAAK,CAAC;IACxC,OAAOA,KAAK;EACd,CAAC;EAED,MAAMC,oBAAoB,GAAIC,QAA2B,IAAI;IAC3D,KAAK,MAAMtB,cAAc,IAAIL,uBAAuB,CAACc,MAAM,EAAE,EAAE;MAC7Da,QAAQ,CAACjB,GAAG,CAACL,cAAc,EAAEtD,IAAI,CAAC6E,KAAK,CAAC;IAC1C;IACA5B,uBAAuB,CAAC6B,KAAK,EAAE;IAC/B5B,kBAAkB,CAAC4B,KAAK,EAAE;EAC5B,CAAC;EAED,MAAMC,eAAe,GAAG9D,OAAO,CAACsC,EAAE,EAAoC,CAAC,CAACQ,MAAM,EAAEnC,GAAG,KACjF3B,MAAM,CAAC+E,GAAG,CAAC,aAAS;IAClB,MAAMC,OAAO,GAAG,OAAO5E,MAAM,CAACoD,aAAa,CAACtC,cAAc,CAAC,CAAC4C,MAAM,CAIjE;IACD,MAAMmB,QAAQ,GAAGtD,GAAG,CAACO,YAAY,CAAE;IACnCP,GAAG,CAAC+B,GAAG,CAACuB,QAAQ,EAAED,OAAO,CAAC;IAC1B,OAAO,OAAOrD,GAAG,CAACuD,MAAM,CAACD,QAAQ,EAAE;MAAEE,gBAAgB,EAAE;IAAI,CAAE,CAAC;EAChE,CAAC,CAAC,CACH,CAACjF,IAAI,CAACH,IAAI,CAACuB,UAAU,CAAC,CAAC,CAAC,CAA0E;EAEnG,MAAM8D,SAAS,GAAGC,MAAM,CAACC,WAAW,CAClCD,MAAM,CAACE,IAAI,CAACtE,MAAM,CAAC,CAACuE,GAAG,CAAEC,GAAG,IAAK,CAACA,GAAG,EAAElF,IAAI,CAACmF,YAAY,CAACD,GAAG,CAAC,CAAC,CAAC,CAC1C;EAEvB,MAAME,UAAU,GAA4B;IAC1CC,kBAAkB,EAAGC,aAAa,KAAM;MACtC/B,MAAM,EAAE+B,aAAa;MACrBrD,aAAa,EAAEqD,aAAa;MAC5BzB,OAAO,EAAE9D,KAAK,CAACwF,mBAAmB,CAAC7E,MAAM,EAAE,KAAK,CAA+C;MAC/FgB,WAAW,EAAE,CAAC;MACdJ,WAAW,EAAE,IAAIgB,GAAG;KACrB,CAAC;IAEFkD,gBAAgB,EAAG3D,KAAK,KAAM;MAC5B0B,MAAM,EAAE1B,KAAK,CAACI,aAAa;MAC3BA,aAAa,EAAEJ,KAAK,CAACI,aAAa;MAClC4B,OAAO,EAAE9D,KAAK,CAACwF,mBAAmB,CAAC7E,MAAM,EAAE,KAAK,CAA+C;MAC/FgB,WAAW,EAAE,CAAC;MACdJ,WAAW,EAAE,IAAIgB,GAAG;KACrB,CAAC;IAEFmD,iBAAiB,EAAG5D,KAAK,KAAM;MAC7B,GAAGA,KAAK;MACRgC,OAAO,EAAE9D,KAAK,CAACwF,mBAAmB,CAAC7E,MAAM,EAAE,IAAI,CAA+C;MAC9FgB,WAAW,EAAEG,KAAK,CAACH,WAAW,GAAG;KAClC,CAAC;IAEFgE,aAAa,EAAEA,CAAC7D,KAAK,EAAEC,SAAS,EAAEkB,KAAK,KAAI;MACzC,MAAM2C,SAAS,GAAGvF,cAAc,CAACyB,KAAK,CAAC0B,MAAM,EAAEzB,SAAS,EAAEkB,KAAK,CAAC;MAChE,MAAMX,cAAc,GAAGnC,uBAAuB,CAC5C2B,KAAK,CAACP,WAAW,EACjBO,KAAK,CAACI,aAAa,EACnB0D,SAAS,EACT7D,SAAS,CACV;MACD,OAAO;QACL,GAAGD,KAAK;QACR0B,MAAM,EAAEoC,SAA6C;QACrDrE,WAAW,EAAEe;OACd;IACH,CAAC;IAEDuD,aAAa,EAAEA,CAAC/D,KAAK,EAAE0B,MAAM,KAAI;MAC/B,MAAMlB,cAAc,GAAGnC,uBAAuB,CAC5C2B,KAAK,CAACP,WAAW,EACjBO,KAAK,CAACI,aAAa,EACnBsB,MAAM,EACN,EAAE,CACH;MACD,OAAO;QACL,GAAG1B,KAAK;QACR0B,MAAM;QACNjC,WAAW,EAAEe;OACd;IACH,CAAC;IAEDwD,eAAe,EAAEA,CAAChE,KAAK,EAAEC,SAAS,EAAE+B,OAAO,MAAM;MAC/C,GAAGhC,KAAK;MACRgC,OAAO,EAAEzD,cAAc,CAACyB,KAAK,CAACgC,OAAO,EAAE/B,SAAS,EAAE+B,OAAO;KAC1D,CAAC;IAEFiC,eAAe,EAAEA,CAACjE,KAAK,EAAEkE,SAAS,EAAEC,UAAU,EAAEhD,KAAK,KAAI;MACvD,MAAMiD,OAAO,GAAGjD,KAAK,IAAIjD,KAAK,CAACmG,oBAAoB,CAACF,UAAU,CAAC;MAC/D,MAAMG,YAAY,GAAIhG,cAAc,CAAC0B,KAAK,CAAC0B,MAAM,EAAEwC,SAAS,CAAC,IAAI,EAA6B;MAC9F,MAAMK,QAAQ,GAAG,CAAC,GAAGD,YAAY,EAAEF,OAAO,CAAC;MAC3C,OAAO;QACL,GAAGpE,KAAK;QACR0B,MAAM,EAAEnD,cAAc,CAACyB,KAAK,CAAC0B,MAAM,EAAEwC,SAAS,EAAEK,QAAQ,CAAqC;QAC7F9E,WAAW,EAAErB,8BAA8B,CAAC4B,KAAK,CAACP,WAAW,EAAEO,KAAK,CAACI,aAAa,EAAE8D,SAAS,EAAEK,QAAQ;OACxG;IACH,CAAC;IAEDC,eAAe,EAAEA,CAACxE,KAAK,EAAEkE,SAAS,EAAEO,KAAK,KAAI;MAC3C,MAAMH,YAAY,GAAIhG,cAAc,CAAC0B,KAAK,CAAC0B,MAAM,EAAEwC,SAAS,CAAC,IAAI,EAA6B;MAC9F,MAAMK,QAAQ,GAAGD,YAAY,CAACI,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,KAAKH,KAAK,CAAC;MAC3D,OAAO;QACL,GAAGzE,KAAK;QACR0B,MAAM,EAAEnD,cAAc,CAACyB,KAAK,CAAC0B,MAAM,EAAEwC,SAAS,EAAEK,QAAQ,CAAqC;QAC7F9E,WAAW,EAAErB,8BAA8B,CAAC4B,KAAK,CAACP,WAAW,EAAEO,KAAK,CAACI,aAAa,EAAE8D,SAAS,EAAEK,QAAQ;OACxG;IACH,CAAC;IAEDM,cAAc,EAAEA,CAAC7E,KAAK,EAAEkE,SAAS,EAAEY,MAAM,EAAEC,MAAM,KAAI;MACnD,MAAMT,YAAY,GAAIhG,cAAc,CAAC0B,KAAK,CAAC0B,MAAM,EAAEwC,SAAS,CAAC,IAAI,EAA6B;MAC9F,IACEY,MAAM,GAAG,CAAC,IAAIA,MAAM,IAAIR,YAAY,CAACU,MAAM,IAC3CD,MAAM,GAAG,CAAC,IAAIA,MAAM,IAAIT,YAAY,CAACU,MAAM,IAC3CF,MAAM,KAAKC,MAAM,EACjB;QACA,OAAO/E,KAAK;MACd;MACA,MAAMuE,QAAQ,GAAG,CAAC,GAAGD,YAAY,CAAC;MAClC,MAAMW,IAAI,GAAGV,QAAQ,CAACO,MAAM,CAAC;MAC7BP,QAAQ,CAACO,MAAM,CAAC,GAAGP,QAAQ,CAACQ,MAAM,CAAC;MACnCR,QAAQ,CAACQ,MAAM,CAAC,GAAGE,IAAI;MACvB,OAAO;QACL,GAAGjF,KAAK;QACR0B,MAAM,EAAEnD,cAAc,CAACyB,KAAK,CAAC0B,MAAM,EAAEwC,SAAS,EAAEK,QAAQ,CAAqC;QAC7F9E,WAAW,EAAErB,8BAA8B,CAAC4B,KAAK,CAACP,WAAW,EAAEO,KAAK,CAACI,aAAa,EAAE8D,SAAS,EAAEK,QAAQ;OACxG;IACH,CAAC;IAEDW,aAAa,EAAEA,CAAClF,KAAK,EAAEkE,SAAS,EAAEiB,SAAS,EAAEC,OAAO,KAAI;MACtD,MAAMd,YAAY,GAAIhG,cAAc,CAAC0B,KAAK,CAAC0B,MAAM,EAAEwC,SAAS,CAAC,IAAI,EAA6B;MAC9F,IACEiB,SAAS,GAAG,CAAC,IAAIA,SAAS,IAAIb,YAAY,CAACU,MAAM,IACjDI,OAAO,GAAG,CAAC,IAAIA,OAAO,GAAGd,YAAY,CAACU,MAAM,IAC5CG,SAAS,KAAKC,OAAO,EACrB;QACA,OAAOpF,KAAK;MACd;MACA,MAAMuE,QAAQ,GAAG,CAAC,GAAGD,YAAY,CAAC;MAClC,MAAM,CAACe,IAAI,CAAC,GAAGd,QAAQ,CAACe,MAAM,CAACH,SAAS,EAAE,CAAC,CAAC;MAC5CZ,QAAQ,CAACe,MAAM,CAACF,OAAO,EAAE,CAAC,EAAEC,IAAI,CAAC;MACjC,OAAO;QACL,GAAGrF,KAAK;QACR0B,MAAM,EAAEnD,cAAc,CAACyB,KAAK,CAAC0B,MAAM,EAAEwC,SAAS,EAAEK,QAAQ,CAAqC;QAC7F9E,WAAW,EAAErB,8BAA8B,CAAC4B,KAAK,CAACP,WAAW,EAAEO,KAAK,CAACI,aAAa,EAAE8D,SAAS,EAAEK,QAAQ;OACxG;IACH;GACD;EAED,OAAO;IACLvF,SAAS;IACTG,oBAAoB;IACpBE,eAAe;IACfK,WAAW;IACXE,eAAe;IACfE,YAAY;IACZ4C,eAAe;IACf5D,cAAc;IACdkE,SAAS;IACTpC,uBAAuB;IACvBC,kBAAkB;IAClBC,yBAAyB;IACzBS,qBAAqB;IACrBe,oBAAoB;IACpBiB;GACwB;AAC5B,CAAC","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.2.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
|
+
}
|