@lucas-barake/effect-form 0.1.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.
Files changed (64) hide show
  1. package/Form/package.json +6 -0
  2. package/FormAtoms/package.json +6 -0
  3. package/LICENSE +21 -0
  4. package/Mode/package.json +6 -0
  5. package/README.md +5 -0
  6. package/Validation/package.json +6 -0
  7. package/dist/cjs/Form.js +299 -0
  8. package/dist/cjs/Form.js.map +1 -0
  9. package/dist/cjs/FormAtoms.js +266 -0
  10. package/dist/cjs/FormAtoms.js.map +1 -0
  11. package/dist/cjs/Mode.js +64 -0
  12. package/dist/cjs/Mode.js.map +1 -0
  13. package/dist/cjs/Validation.js +69 -0
  14. package/dist/cjs/Validation.js.map +1 -0
  15. package/dist/cjs/index.js +35 -0
  16. package/dist/cjs/index.js.map +1 -0
  17. package/dist/cjs/internal/dirty.js +101 -0
  18. package/dist/cjs/internal/dirty.js.map +1 -0
  19. package/dist/cjs/internal/path.js +96 -0
  20. package/dist/cjs/internal/path.js.map +1 -0
  21. package/dist/cjs/internal/weak-registry.js +52 -0
  22. package/dist/cjs/internal/weak-registry.js.map +1 -0
  23. package/dist/dts/Form.d.ts +317 -0
  24. package/dist/dts/Form.d.ts.map +1 -0
  25. package/dist/dts/FormAtoms.d.ts +145 -0
  26. package/dist/dts/FormAtoms.d.ts.map +1 -0
  27. package/dist/dts/Mode.d.ts +55 -0
  28. package/dist/dts/Mode.d.ts.map +1 -0
  29. package/dist/dts/Validation.d.ts +23 -0
  30. package/dist/dts/Validation.d.ts.map +1 -0
  31. package/dist/dts/index.d.ts +26 -0
  32. package/dist/dts/index.d.ts.map +1 -0
  33. package/dist/dts/internal/dirty.d.ts +13 -0
  34. package/dist/dts/internal/dirty.d.ts.map +1 -0
  35. package/dist/dts/internal/path.d.ts +32 -0
  36. package/dist/dts/internal/path.d.ts.map +1 -0
  37. package/dist/dts/internal/weak-registry.d.ts +7 -0
  38. package/dist/dts/internal/weak-registry.d.ts.map +1 -0
  39. package/dist/esm/Form.js +263 -0
  40. package/dist/esm/Form.js.map +1 -0
  41. package/dist/esm/FormAtoms.js +238 -0
  42. package/dist/esm/FormAtoms.js.map +1 -0
  43. package/dist/esm/Mode.js +36 -0
  44. package/dist/esm/Mode.js.map +1 -0
  45. package/dist/esm/Validation.js +40 -0
  46. package/dist/esm/Validation.js.map +1 -0
  47. package/dist/esm/index.js +26 -0
  48. package/dist/esm/index.js.map +1 -0
  49. package/dist/esm/internal/dirty.js +72 -0
  50. package/dist/esm/internal/dirty.js.map +1 -0
  51. package/dist/esm/internal/path.js +86 -0
  52. package/dist/esm/internal/path.js.map +1 -0
  53. package/dist/esm/internal/weak-registry.js +45 -0
  54. package/dist/esm/internal/weak-registry.js.map +1 -0
  55. package/dist/esm/package.json +4 -0
  56. package/package.json +64 -0
  57. package/src/Form.ts +522 -0
  58. package/src/FormAtoms.ts +485 -0
  59. package/src/Mode.ts +59 -0
  60. package/src/Validation.ts +43 -0
  61. package/src/index.ts +28 -0
  62. package/src/internal/dirty.ts +96 -0
  63. package/src/internal/path.ts +93 -0
  64. package/src/internal/weak-registry.ts +60 -0
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/Form.js",
3
+ "module": "../dist/esm/Form.js",
4
+ "types": "../dist/dts/Form.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/FormAtoms.js",
3
+ "module": "../dist/esm/FormAtoms.js",
4
+ "types": "../dist/dts/FormAtoms.d.ts",
5
+ "sideEffects": []
6
+ }
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Lucas Barake
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/Mode.js",
3
+ "module": "../dist/esm/Mode.js",
4
+ "types": "../dist/dts/Mode.d.ts",
5
+ "sideEffects": []
6
+ }
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @lucas-barake/effect-form
2
+
3
+ Core form builder for Effect Schema. Framework-agnostic.
4
+
5
+ See [main documentation](https://github.com/lucas-barake/effect-form) for usage.
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/Validation.js",
3
+ "module": "../dist/esm/Validation.js",
4
+ "types": "../dist/dts/Validation.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.makeFieldRef = exports.makeField = exports.makeArrayField = exports.isFormBuilder = exports.isFieldDef = exports.isArrayFieldDef = exports.getDefaultFromSchema = exports.getDefaultEncodedValues = exports.empty = exports.createTouchedRecord = exports.buildSchema = exports.TypeId = exports.FieldTypeId = void 0;
7
+ var Predicate = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Predicate"));
8
+ var Schema = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Schema"));
9
+ function _interopRequireWildcard(e, t) {
10
+ if ("function" == typeof WeakMap) var r = new WeakMap(),
11
+ n = new WeakMap();
12
+ return (_interopRequireWildcard = function (e, t) {
13
+ if (!t && e && e.__esModule) return e;
14
+ var o,
15
+ i,
16
+ f = {
17
+ __proto__: null,
18
+ default: e
19
+ };
20
+ if (null === e || "object" != typeof e && "function" != typeof e) return f;
21
+ if (o = t ? n : r) {
22
+ if (o.has(e)) return o.get(e);
23
+ o.set(e, f);
24
+ }
25
+ for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
26
+ return f;
27
+ })(e, t);
28
+ }
29
+ /**
30
+ * Unique identifier for FormBuilder instances.
31
+ *
32
+ * @since 1.0.0
33
+ * @category Symbols
34
+ */
35
+ const TypeId = exports.TypeId = /*#__PURE__*/Symbol.for("@lucas-barake/effect-form/Form");
36
+ /**
37
+ * Unique identifier for Field references.
38
+ *
39
+ * @since 1.0.0
40
+ * @category Symbols
41
+ * @internal
42
+ */
43
+ const FieldTypeId = exports.FieldTypeId = /*#__PURE__*/Symbol.for("@lucas-barake/effect-form/Field");
44
+ /**
45
+ * Creates a field reference for type-safe setValue operations.
46
+ *
47
+ * @since 1.0.0
48
+ * @category Constructors
49
+ * @internal
50
+ */
51
+ const makeFieldRef = key => ({
52
+ [FieldTypeId]: FieldTypeId,
53
+ _S: undefined,
54
+ key
55
+ });
56
+ /**
57
+ * Creates a scalar field definition.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * const NameField = Form.makeField("name", Schema.String)
62
+ * const form = Form.empty.addField(NameField)
63
+ * ```
64
+ *
65
+ * @since 1.0.0
66
+ * @category Constructors
67
+ */
68
+ exports.makeFieldRef = makeFieldRef;
69
+ const makeField = (key, schema) => ({
70
+ _tag: "field",
71
+ key,
72
+ schema
73
+ });
74
+ /**
75
+ * Creates an array field definition.
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * // Array of primitives
80
+ * const TagsField = Form.makeArrayField("tags", Schema.String)
81
+ *
82
+ * // Array of objects
83
+ * const ItemsField = Form.makeArrayField("items", Schema.Struct({
84
+ * name: Schema.String,
85
+ * quantity: Schema.Number
86
+ * }))
87
+ * ```
88
+ *
89
+ * @since 1.0.0
90
+ * @category Constructors
91
+ */
92
+ exports.makeField = makeField;
93
+ const makeArrayField = (key, itemSchema) => ({
94
+ _tag: "array",
95
+ key,
96
+ itemSchema
97
+ });
98
+ exports.makeArrayField = makeArrayField;
99
+ const FormBuilderProto = {
100
+ [TypeId]: TypeId,
101
+ addField(field) {
102
+ const newSelf = Object.create(FormBuilderProto);
103
+ newSelf.fields = {
104
+ ...this.fields,
105
+ [field.key]: field
106
+ };
107
+ newSelf.refinements = this.refinements;
108
+ return newSelf;
109
+ },
110
+ merge(other) {
111
+ const newSelf = Object.create(FormBuilderProto);
112
+ newSelf.fields = {
113
+ ...this.fields,
114
+ ...other.fields
115
+ };
116
+ newSelf.refinements = [...this.refinements, ...other.refinements];
117
+ return newSelf;
118
+ },
119
+ refine(predicate) {
120
+ const newSelf = Object.create(FormBuilderProto);
121
+ newSelf.fields = this.fields;
122
+ newSelf.refinements = [...this.refinements, {
123
+ _tag: "sync",
124
+ fn: values => predicate(values)
125
+ }];
126
+ return newSelf;
127
+ },
128
+ refineEffect(predicate) {
129
+ const newSelf = Object.create(FormBuilderProto);
130
+ newSelf.fields = this.fields;
131
+ newSelf.refinements = [...this.refinements, {
132
+ _tag: "async",
133
+ fn: values => predicate(values)
134
+ }];
135
+ return newSelf;
136
+ }
137
+ };
138
+ /**
139
+ * Checks if a value is a `FormBuilder`.
140
+ *
141
+ * @example
142
+ * ```ts
143
+ * import * as Form from "@lucas-barake/effect-form"
144
+ *
145
+ * const builder = Form.empty
146
+ *
147
+ * console.log(Form.isFormBuilder(builder))
148
+ * // Output: true
149
+ *
150
+ * console.log(Form.isFormBuilder({}))
151
+ * // Output: false
152
+ * ```
153
+ *
154
+ * @since 1.0.0
155
+ * @category Guards
156
+ */
157
+ const isFormBuilder = u => Predicate.hasProperty(u, TypeId);
158
+ /**
159
+ * Checks if a field definition is an array field.
160
+ *
161
+ * @since 1.0.0
162
+ * @category Guards
163
+ */
164
+ exports.isFormBuilder = isFormBuilder;
165
+ const isArrayFieldDef = def => def._tag === "array";
166
+ /**
167
+ * Checks if a field definition is a simple field.
168
+ *
169
+ * @since 1.0.0
170
+ * @category Guards
171
+ */
172
+ exports.isArrayFieldDef = isArrayFieldDef;
173
+ const isFieldDef = def => def._tag === "field";
174
+ /**
175
+ * Gets a default encoded value from a schema.
176
+ *
177
+ * @since 1.0.0
178
+ * @category Helpers
179
+ */
180
+ exports.isFieldDef = isFieldDef;
181
+ const getDefaultFromSchema = schema => {
182
+ const ast = schema.ast;
183
+ switch (ast._tag) {
184
+ case "StringKeyword":
185
+ case "TemplateLiteral":
186
+ return "";
187
+ case "NumberKeyword":
188
+ return 0;
189
+ case "BooleanKeyword":
190
+ return false;
191
+ case "TypeLiteral":
192
+ {
193
+ const result = {};
194
+ for (const prop of ast.propertySignatures) {
195
+ result[prop.name] = getDefaultFromSchema(Schema.make(prop.type));
196
+ }
197
+ return result;
198
+ }
199
+ case "Transformation":
200
+ return getDefaultFromSchema(Schema.make(ast.from));
201
+ case "Refinement":
202
+ return getDefaultFromSchema(Schema.make(ast.from));
203
+ case "Suspend":
204
+ return getDefaultFromSchema(Schema.make(ast.f()));
205
+ default:
206
+ return "";
207
+ }
208
+ };
209
+ /**
210
+ * An empty `FormBuilder` to start building a form.
211
+ *
212
+ * **Details**
213
+ *
214
+ * This is the entry point for building a form. Use method chaining to add
215
+ * fields and then build the form with a React adapter.
216
+ *
217
+ * @example
218
+ * ```ts
219
+ * import * as Form from "@lucas-barake/effect-form"
220
+ * import * as Schema from "effect/Schema"
221
+ *
222
+ * const EmailField = Form.makeField("email", Schema.String)
223
+ * const PasswordField = Form.makeField("password", Schema.String)
224
+ *
225
+ * const loginForm = Form.empty
226
+ * .addField(EmailField)
227
+ * .addField(PasswordField)
228
+ * ```
229
+ *
230
+ * @since 1.0.0
231
+ * @category Constructors
232
+ */
233
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
234
+ exports.getDefaultFromSchema = getDefaultFromSchema;
235
+ const empty = exports.empty = /*#__PURE__*/(() => {
236
+ const self = /*#__PURE__*/Object.create(FormBuilderProto);
237
+ self.fields = {};
238
+ self.refinements = [];
239
+ return self;
240
+ })();
241
+ /**
242
+ * Builds a combined Schema from a FormBuilder's field definitions.
243
+ *
244
+ * @since 1.0.0
245
+ * @category Schema
246
+ */
247
+ const buildSchema = self => {
248
+ const schemaFields = {};
249
+ for (const [key, def] of Object.entries(self.fields)) {
250
+ if (isArrayFieldDef(def)) {
251
+ schemaFields[key] = Schema.Array(def.itemSchema);
252
+ } else if (isFieldDef(def)) {
253
+ schemaFields[key] = def.schema;
254
+ }
255
+ }
256
+ let schema = Schema.Struct(schemaFields);
257
+ for (const refinement of self.refinements) {
258
+ if (refinement._tag === "sync") {
259
+ schema = schema.pipe(Schema.filter(refinement.fn));
260
+ } else {
261
+ schema = schema.pipe(Schema.filterEffect(refinement.fn));
262
+ }
263
+ }
264
+ return schema;
265
+ };
266
+ /**
267
+ * Gets default encoded values for a fields record.
268
+ *
269
+ * @since 1.0.0
270
+ * @category Helpers
271
+ */
272
+ exports.buildSchema = buildSchema;
273
+ const getDefaultEncodedValues = fields => {
274
+ const result = {};
275
+ for (const [key, def] of Object.entries(fields)) {
276
+ if (isArrayFieldDef(def)) {
277
+ result[key] = [];
278
+ } else {
279
+ result[key] = "";
280
+ }
281
+ }
282
+ return result;
283
+ };
284
+ /**
285
+ * Creates a touched record with all fields set to the given value.
286
+ *
287
+ * @since 1.0.0
288
+ * @category Helpers
289
+ */
290
+ exports.getDefaultEncodedValues = getDefaultEncodedValues;
291
+ const createTouchedRecord = (fields, value) => {
292
+ const result = {};
293
+ for (const key of Object.keys(fields)) {
294
+ result[key] = value;
295
+ }
296
+ return result;
297
+ };
298
+ exports.createTouchedRecord = createTouchedRecord;
299
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","names":["Predicate","_interopRequireWildcard","require","Schema","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TypeId","exports","Symbol","for","FieldTypeId","makeFieldRef","key","_S","undefined","makeField","schema","_tag","makeArrayField","itemSchema","FormBuilderProto","addField","field","newSelf","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","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":[]}
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.make = void 0;
7
+ var Atom = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect-atom/atom/Atom"));
8
+ var Effect = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Effect"));
9
+ var Equal = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Equal"));
10
+ var _Function = /*#__PURE__*/require("effect/Function");
11
+ var Option = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Option"));
12
+ var Schema = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Schema"));
13
+ var Utils = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Utils"));
14
+ var _Form = /*#__PURE__*/require("./Form.js");
15
+ var _dirty = /*#__PURE__*/require("./internal/dirty.js");
16
+ var _path = /*#__PURE__*/require("./internal/path.js");
17
+ var _weakRegistry = /*#__PURE__*/require("./internal/weak-registry.js");
18
+ function _interopRequireWildcard(e, t) {
19
+ if ("function" == typeof WeakMap) var r = new WeakMap(),
20
+ n = new WeakMap();
21
+ return (_interopRequireWildcard = function (e, t) {
22
+ if (!t && e && e.__esModule) return e;
23
+ var o,
24
+ i,
25
+ f = {
26
+ __proto__: null,
27
+ default: e
28
+ };
29
+ if (null === e || "object" != typeof e && "function" != typeof e) return f;
30
+ if (o = t ? n : r) {
31
+ if (o.has(e)) return o.get(e);
32
+ o.set(e, f);
33
+ }
34
+ for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
35
+ return f;
36
+ })(e, t);
37
+ }
38
+ /**
39
+ * Atom infrastructure for form state management.
40
+ *
41
+ * This module provides the core atom infrastructure that framework adapters
42
+ * (React, Vue, Svelte, Solid) can use to build reactive form components.
43
+ *
44
+ * @since 1.0.0
45
+ */
46
+
47
+ /**
48
+ * Creates the complete form atoms infrastructure.
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * import * as FormAtoms from "@lucas-barake/effect-form/FormAtoms"
53
+ * import * as Form from "@lucas-barake/effect-form"
54
+ * import * as Atom from "@effect-atom/atom/Atom"
55
+ * import * as Layer from "effect/Layer"
56
+ *
57
+ * const runtime = Atom.runtime(Layer.empty)
58
+ *
59
+ * const loginForm = Form.empty
60
+ * .addField(Form.makeField("email", Schema.String))
61
+ * .addField(Form.makeField("password", Schema.String))
62
+ *
63
+ * const atoms = FormAtoms.make({
64
+ * runtime,
65
+ * formBuilder: loginForm,
66
+ * parsedMode: { validation: "onChange", debounce: 300, autoSubmit: false }
67
+ * })
68
+ * ```
69
+ *
70
+ * @since 1.0.0
71
+ * @category Constructors
72
+ */
73
+ const make = config => {
74
+ const {
75
+ formBuilder,
76
+ runtime
77
+ } = config;
78
+ const {
79
+ fields
80
+ } = formBuilder;
81
+ const combinedSchema = (0, _Form.buildSchema)(formBuilder);
82
+ const stateAtom = Atom.make(Option.none()).pipe(Atom.setIdleTTL(0));
83
+ const crossFieldErrorsAtom = Atom.make(new Map()).pipe(Atom.setIdleTTL(0));
84
+ const dirtyFieldsAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).dirtyFields).pipe(Atom.setIdleTTL(0));
85
+ const isDirtyAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).dirtyFields.size > 0).pipe(Atom.setIdleTTL(0));
86
+ const submitCountAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).submitCount).pipe(Atom.setIdleTTL(0));
87
+ const onSubmitAtom = Atom.make(null).pipe(Atom.setIdleTTL(0));
88
+ const updateDirtyFields = (state, fieldPath, newValue) => {
89
+ const initialValue = (0, _path.getNestedValue)(state.initialValues, fieldPath);
90
+ const isEqual = Utils.structuralRegion(() => Equal.equals(newValue, initialValue));
91
+ const newDirtyFields = new Set(state.dirtyFields);
92
+ if (!isEqual) {
93
+ newDirtyFields.add(fieldPath);
94
+ } else {
95
+ newDirtyFields.delete(fieldPath);
96
+ }
97
+ return newDirtyFields;
98
+ };
99
+ const validationAtomsRegistry = (0, _weakRegistry.createWeakRegistry)();
100
+ const fieldAtomsRegistry = (0, _weakRegistry.createWeakRegistry)();
101
+ const getOrCreateValidationAtom = (fieldPath, schema) => {
102
+ const existing = validationAtomsRegistry.get(fieldPath);
103
+ if (existing) return existing;
104
+ const validationAtom = runtime.fn()(value => (0, _Function.pipe)(Schema.decodeUnknown(schema)(value), Effect.asVoid)).pipe(Atom.setIdleTTL(0));
105
+ validationAtomsRegistry.set(fieldPath, validationAtom);
106
+ return validationAtom;
107
+ };
108
+ const getOrCreateFieldAtoms = fieldPath => {
109
+ const existing = fieldAtomsRegistry.get(fieldPath);
110
+ if (existing) return existing;
111
+ const valueAtom = Atom.writable(get => (0, _path.getNestedValue)(Option.getOrThrow(get(stateAtom)).values, fieldPath), (ctx, value) => {
112
+ const currentState = Option.getOrThrow(ctx.get(stateAtom));
113
+ ctx.set(stateAtom, Option.some({
114
+ ...currentState,
115
+ values: (0, _path.setNestedValue)(currentState.values, fieldPath, value),
116
+ dirtyFields: updateDirtyFields(currentState, fieldPath, value)
117
+ }));
118
+ }).pipe(Atom.setIdleTTL(0));
119
+ const initialValueAtom = Atom.readable(get => (0, _path.getNestedValue)(Option.getOrThrow(get(stateAtom)).initialValues, fieldPath)).pipe(Atom.setIdleTTL(0));
120
+ const touchedAtom = Atom.writable(get => (0, _path.getNestedValue)(Option.getOrThrow(get(stateAtom)).touched, fieldPath) ?? false, (ctx, value) => {
121
+ const currentState = Option.getOrThrow(ctx.get(stateAtom));
122
+ ctx.set(stateAtom, Option.some({
123
+ ...currentState,
124
+ touched: (0, _path.setNestedValue)(currentState.touched, fieldPath, value)
125
+ }));
126
+ }).pipe(Atom.setIdleTTL(0));
127
+ const crossFieldErrorAtom = Atom.readable(get => {
128
+ const errors = get(crossFieldErrorsAtom);
129
+ const error = errors.get(fieldPath);
130
+ return error !== undefined ? Option.some(error) : Option.none();
131
+ }).pipe(Atom.setIdleTTL(0));
132
+ const atoms = {
133
+ valueAtom,
134
+ initialValueAtom,
135
+ touchedAtom,
136
+ crossFieldErrorAtom
137
+ };
138
+ fieldAtomsRegistry.set(fieldPath, atoms);
139
+ return atoms;
140
+ };
141
+ const resetValidationAtoms = registry => {
142
+ for (const validationAtom of validationAtomsRegistry.values()) {
143
+ registry.set(validationAtom, Atom.Reset);
144
+ }
145
+ validationAtomsRegistry.clear();
146
+ fieldAtomsRegistry.clear();
147
+ };
148
+ const decodeAndSubmit = runtime.fn()((values, get) => Effect.gen(function* () {
149
+ const decoded = yield* Schema.decodeUnknown(combinedSchema)(values);
150
+ const onSubmit = get(onSubmitAtom);
151
+ get.set(onSubmit, decoded);
152
+ return yield* get.result(onSubmit, {
153
+ suspendOnWaiting: true
154
+ });
155
+ })).pipe(Atom.setIdleTTL(0));
156
+ const fieldRefs = Object.fromEntries(Object.keys(fields).map(key => [key, (0, _Form.makeFieldRef)(key)]));
157
+ const operations = {
158
+ createInitialState: defaultValues => ({
159
+ values: defaultValues,
160
+ initialValues: defaultValues,
161
+ touched: (0, _Form.createTouchedRecord)(fields, false),
162
+ submitCount: 0,
163
+ dirtyFields: new Set()
164
+ }),
165
+ createResetState: state => ({
166
+ values: state.initialValues,
167
+ initialValues: state.initialValues,
168
+ touched: (0, _Form.createTouchedRecord)(fields, false),
169
+ submitCount: 0,
170
+ dirtyFields: new Set()
171
+ }),
172
+ createSubmitState: state => ({
173
+ ...state,
174
+ touched: (0, _Form.createTouchedRecord)(fields, true),
175
+ submitCount: state.submitCount + 1
176
+ }),
177
+ setFieldValue: (state, fieldPath, value) => {
178
+ const newValues = (0, _path.setNestedValue)(state.values, fieldPath, value);
179
+ const newDirtyFields = (0, _dirty.recalculateDirtySubtree)(state.dirtyFields, state.initialValues, newValues, fieldPath);
180
+ return {
181
+ ...state,
182
+ values: newValues,
183
+ dirtyFields: newDirtyFields
184
+ };
185
+ },
186
+ setFormValues: (state, values) => {
187
+ const newDirtyFields = (0, _dirty.recalculateDirtySubtree)(state.dirtyFields, state.initialValues, values, "");
188
+ return {
189
+ ...state,
190
+ values,
191
+ dirtyFields: newDirtyFields
192
+ };
193
+ },
194
+ setFieldTouched: (state, fieldPath, touched) => ({
195
+ ...state,
196
+ touched: (0, _path.setNestedValue)(state.touched, fieldPath, touched)
197
+ }),
198
+ appendArrayItem: (state, arrayPath, itemSchema, value) => {
199
+ const newItem = value ?? (0, _Form.getDefaultFromSchema)(itemSchema);
200
+ const currentItems = (0, _path.getNestedValue)(state.values, arrayPath) ?? [];
201
+ const newItems = [...currentItems, newItem];
202
+ return {
203
+ ...state,
204
+ values: (0, _path.setNestedValue)(state.values, arrayPath, newItems),
205
+ dirtyFields: (0, _dirty.recalculateDirtyFieldsForArray)(state.dirtyFields, state.initialValues, arrayPath, newItems)
206
+ };
207
+ },
208
+ removeArrayItem: (state, arrayPath, index) => {
209
+ const currentItems = (0, _path.getNestedValue)(state.values, arrayPath) ?? [];
210
+ const newItems = currentItems.filter((_, i) => i !== index);
211
+ return {
212
+ ...state,
213
+ values: (0, _path.setNestedValue)(state.values, arrayPath, newItems),
214
+ dirtyFields: (0, _dirty.recalculateDirtyFieldsForArray)(state.dirtyFields, state.initialValues, arrayPath, newItems)
215
+ };
216
+ },
217
+ swapArrayItems: (state, arrayPath, indexA, indexB) => {
218
+ const currentItems = (0, _path.getNestedValue)(state.values, arrayPath) ?? [];
219
+ if (indexA < 0 || indexA >= currentItems.length || indexB < 0 || indexB >= currentItems.length || indexA === indexB) {
220
+ return state;
221
+ }
222
+ const newItems = [...currentItems];
223
+ const temp = newItems[indexA];
224
+ newItems[indexA] = newItems[indexB];
225
+ newItems[indexB] = temp;
226
+ return {
227
+ ...state,
228
+ values: (0, _path.setNestedValue)(state.values, arrayPath, newItems),
229
+ dirtyFields: (0, _dirty.recalculateDirtyFieldsForArray)(state.dirtyFields, state.initialValues, arrayPath, newItems)
230
+ };
231
+ },
232
+ moveArrayItem: (state, arrayPath, fromIndex, toIndex) => {
233
+ const currentItems = (0, _path.getNestedValue)(state.values, arrayPath) ?? [];
234
+ if (fromIndex < 0 || fromIndex >= currentItems.length || toIndex < 0 || toIndex > currentItems.length || fromIndex === toIndex) {
235
+ return state;
236
+ }
237
+ const newItems = [...currentItems];
238
+ const [item] = newItems.splice(fromIndex, 1);
239
+ newItems.splice(toIndex, 0, item);
240
+ return {
241
+ ...state,
242
+ values: (0, _path.setNestedValue)(state.values, arrayPath, newItems),
243
+ dirtyFields: (0, _dirty.recalculateDirtyFieldsForArray)(state.dirtyFields, state.initialValues, arrayPath, newItems)
244
+ };
245
+ }
246
+ };
247
+ return {
248
+ stateAtom,
249
+ crossFieldErrorsAtom,
250
+ dirtyFieldsAtom,
251
+ isDirtyAtom,
252
+ submitCountAtom,
253
+ onSubmitAtom,
254
+ decodeAndSubmit,
255
+ combinedSchema,
256
+ fieldRefs,
257
+ validationAtomsRegistry,
258
+ fieldAtomsRegistry,
259
+ getOrCreateValidationAtom,
260
+ getOrCreateFieldAtoms,
261
+ resetValidationAtoms,
262
+ operations
263
+ };
264
+ };
265
+ exports.make = make;
266
+ //# sourceMappingURL=FormAtoms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormAtoms.js","names":["Atom","_interopRequireWildcard","require","Effect","Equal","_Function","Option","Schema","Utils","_Form","_dirty","_path","_weakRegistry","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","make","config","formBuilder","runtime","fields","combinedSchema","buildSchema","stateAtom","none","pipe","setIdleTTL","crossFieldErrorsAtom","Map","dirtyFieldsAtom","readable","getOrThrow","dirtyFields","isDirtyAtom","size","submitCountAtom","submitCount","onSubmitAtom","updateDirtyFields","state","fieldPath","newValue","initialValue","getNestedValue","initialValues","isEqual","structuralRegion","equals","newDirtyFields","Set","add","delete","validationAtomsRegistry","createWeakRegistry","fieldAtomsRegistry","getOrCreateValidationAtom","schema","existing","validationAtom","fn","value","decodeUnknown","asVoid","getOrCreateFieldAtoms","valueAtom","writable","values","ctx","currentState","some","setNestedValue","initialValueAtom","touchedAtom","touched","crossFieldErrorAtom","errors","error","undefined","atoms","resetValidationAtoms","registry","Reset","clear","decodeAndSubmit","gen","decoded","onSubmit","result","suspendOnWaiting","fieldRefs","fromEntries","keys","map","key","makeFieldRef","operations","createInitialState","defaultValues","createTouchedRecord","createResetState","createSubmitState","setFieldValue","newValues","recalculateDirtySubtree","setFormValues","setFieldTouched","appendArrayItem","arrayPath","itemSchema","newItem","getDefaultFromSchema","currentItems","newItems","recalculateDirtyFieldsForArray","removeArrayItem","index","filter","_","swapArrayItems","indexA","indexB","length","temp","moveArrayItem","fromIndex","toIndex","item","splice","exports"],"sources":["../../src/FormAtoms.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}