@shivaedev/form 0.17.1 → 0.19.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/CHANGELOG.md +21 -0
- package/README.md +18 -11
- package/dist/draft.d.ts.map +1 -1
- package/dist/draft.js +2 -2
- package/dist/draft.js.map +1 -1
- package/dist/draftValues.d.ts +1 -0
- package/dist/draftValues.d.ts.map +1 -1
- package/dist/draftValues.js +22 -7
- package/dist/draftValues.js.map +1 -1
- package/dist/fieldPath.d.ts +9 -2
- package/dist/fieldPath.d.ts.map +1 -1
- package/dist/fieldPath.js +14 -0
- package/dist/fieldPath.js.map +1 -1
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +9 -1
- package/dist/form.js.map +1 -1
- package/dist/messages.d.ts +0 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +0 -12
- package/dist/messages.js.map +1 -1
- package/dist/shape.d.ts +3 -1
- package/dist/shape.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/draft.ts +2 -2
- package/src/draftValues.ts +28 -7
- package/src/fieldPath.ts +28 -2
- package/src/form.ts +9 -1
- package/src/messages.ts +0 -13
- package/src/shape.ts +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.19.0 - 2026-11-05
|
|
4
|
+
|
|
5
|
+
### Breaking
|
|
6
|
+
|
|
7
|
+
- Require Effect 4.1.0 and its matching companion packages. Move `effect`, `@effect/platform-node`, `@effect/platform-node-shared`, `@effect/sql-pg`, `@effect/sql-sqlite-node`, `@effect/atom-react` and `@effect/vitest` to exactly 4.1.0 together.
|
|
8
|
+
|
|
9
|
+
## 0.18.0 - 2026-11-05
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `omit(name)` and `omitAt(path)` remove optional keys while preserving sibling values.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Dirty tracking, receive, revert and save distinguish missing keys from present `undefined`. Schema-permitted explicit `undefined` remains an assigned value.
|
|
18
|
+
|
|
19
|
+
### Breaking
|
|
20
|
+
|
|
21
|
+
- Remove the unused `withoutField` export from `@shivaedev/form/messages.ts`. Consumers that remove a field's message should filter the entries of their own message record with `Object.entries` and rebuild it with `Object.fromEntries`.
|
|
22
|
+
- Paths no longer traverse optional or nullable parents. Read the parent ref to observe absence and use `change` or `changeAt` to supply the complete group, including required siblings.
|
|
23
|
+
|
|
3
24
|
## 0.17.1 - 2026-11-04
|
|
4
25
|
|
|
5
26
|
### Changed
|
package/README.md
CHANGED
|
@@ -251,6 +251,10 @@ For a nested value held in one top-level field, `errorAt(["answers", index, "tex
|
|
|
251
251
|
|
|
252
252
|
`fieldAt(["energy", "low"])` returns an encoded-value ref for a nested member. `changeAt(["energy", "low"], "12")` edits that member immutably, preserves its siblings and touches the top-level group for feedback. The schema still decodes the complete struct on submission. Receive, save and revert keep their existing top-level baseline semantics; nested fields do not create separate sessions.
|
|
253
253
|
|
|
254
|
+
Paths stop at optional or nullable parents. Read the group ref to observe `undefined` or `null`, and create or replace the complete group with `change` or `changeAt`, supplying every required sibling.
|
|
255
|
+
|
|
256
|
+
Use `omit("note")` to remove a top-level optional key, or `omitAt(["profile", "note"])` for an optional key below required parents. Omission preserves siblings and touches the top-level field. `change("note", undefined)` assigns a present key; Schema decides whether that value is valid. Dirty comparison distinguishes absence from a present `undefined`, and receive, save and revert preserve that distinction.
|
|
257
|
+
|
|
254
258
|
React inputs use `useFieldAt` with the same typed path:
|
|
255
259
|
|
|
256
260
|
```ts
|
|
@@ -401,16 +405,17 @@ Import the module that defines a name; there is no root entry.
|
|
|
401
405
|
|
|
402
406
|
`form` takes a `Schema.Struct` and this configuration:
|
|
403
407
|
|
|
404
|
-
| Option
|
|
405
|
-
|
|
|
406
|
-
| `initialValues`
|
|
407
|
-
| `runtime`
|
|
408
|
-
| `onSubmit`
|
|
409
|
-
| `savedValues`
|
|
410
|
-
| `
|
|
411
|
-
| `
|
|
412
|
-
| `
|
|
413
|
-
| `
|
|
408
|
+
| Option | Type or role |
|
|
409
|
+
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
410
|
+
| `initialValues` | `Encoded<F>` |
|
|
411
|
+
| `runtime` | Optional when no application services are needed; otherwise an atom runtime for handler/check and schema decoding services |
|
|
412
|
+
| `onSubmit` | `(values, submitter, submitted) => Effect<A, E, R>`; the three arguments are decoded values, field failure helper and encoded snapshot |
|
|
413
|
+
| `savedValues` | Optional `(saved: A) => Encoded<F>`; normalizes successful submissions while preserving later edits and newer received baselines |
|
|
414
|
+
| `requiredMessages` | Optional string messages keyed by top-level string field; customizes empty `Schema.NonEmptyString` feedback while explicit schema messages take precedence |
|
|
415
|
+
| `checks` | Optional functions keyed by field, from encoded input to an Effect of `string \| undefined` |
|
|
416
|
+
| `arrayKeys` | Optional `ArrayKeys<F>` selectors keyed by top-level array field, from encoded element to stable `PropertyKey`; retains nested feedback across reordering |
|
|
417
|
+
| `debounce` | Optional Effect `Duration.Input` for checks |
|
|
418
|
+
| `persistedDraft` | Optional `{ key, now, storage, maxBytes?, maxAgeMs?, session? }`; React's `usePersistedDraft` supplies session ownership |
|
|
414
419
|
|
|
415
420
|
The returned form exposes:
|
|
416
421
|
|
|
@@ -419,6 +424,8 @@ The returned form exposes:
|
|
|
419
424
|
| `values` | `AtomRef<Encoded<F>>` for the whole input |
|
|
420
425
|
| `field(name)` | `AtomRef<Encoded<F>[K]>` for a field |
|
|
421
426
|
| `change(name, value)` | Write encoded input through the form's editing operation |
|
|
427
|
+
| `omit(name)` | Remove an optional top-level key |
|
|
428
|
+
| `omitAt(path)` | Remove an optional nested key below required parents |
|
|
422
429
|
| `blur(name)` | Field blur operation, supplied as `useField(...).onBlur` |
|
|
423
430
|
| `error(name)` | Atom of `string \| undefined` |
|
|
424
431
|
| `errorAt([name, ...path])` | Atom of nested Schema feedback and handler rejections; visibility follows the top-level field |
|
|
@@ -449,7 +456,7 @@ For React bindings:
|
|
|
449
456
|
pnpm add @effect/atom-react react
|
|
450
457
|
```
|
|
451
458
|
|
|
452
|
-
The React mounting example also uses the application's `react-dom`. React and `@effect/atom-react` are optional peers
|
|
459
|
+
The React mounting example also uses the application's `react-dom`. React and `@effect/atom-react` are optional peers of `@shivaedev/form`; the core modules do not import them. `@shivaedev/react` depends on `@shivaedev/form` directly for its editor, create and session integrations. The package needs Node 24 or newer.
|
|
453
460
|
- String field names are top-level schema keys. `fieldAt`, `changeAt` and `useFieldAt` accept nested path tuples. `useList` edits top-level arrays.
|
|
454
461
|
- Replace encoded values rather than mutating objects in place; use `change` for ordinary UI edits.
|
|
455
462
|
- Keep the form and registry for their intended session, and clean up the registry when that session ends.
|
package/dist/draft.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAC/C,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAgD,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAC/C,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAgD,KAAK,OAAO,EAAqD,MAAM,kBAAkB,CAAC;AACjJ,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAElE,wBAAgB,KAAK,CAAC,OAAO,SAAS,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC;;;wBAsE7E,OAAO,KAAG,IAAI;kBAUtB,IAAI;;QAWd,MAAM,cAAc,OAAO,KAAG,IAAI;QAYlC,MAAM;;;EAKT"}
|
package/dist/draft.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as Atom from "effect/reactivity/Atom";
|
|
2
2
|
import * as AtomRef from "effect/reactivity/AtomRef";
|
|
3
|
-
import { accepted, changed, changedFields, merged, mergeObserved, untouched } from "./draftValues.js";
|
|
3
|
+
import { accepted, changed, changedFields, merged, mergeObserved, settledBaseline, untouched } from "./draftValues.js";
|
|
4
4
|
export function draft(initial, persistence) {
|
|
5
5
|
const none = {};
|
|
6
6
|
const state = AtomRef.make({ baseline: initial, current: initial, settled: none });
|
|
@@ -39,7 +39,7 @@ export function draft(initial, persistence) {
|
|
|
39
39
|
}
|
|
40
40
|
function store(value, sameInput = refreshing) {
|
|
41
41
|
const edited = Object.keys({ ...value.baseline, ...value.current }).filter((name) => !untouched(value, name));
|
|
42
|
-
persistence?.write(
|
|
42
|
+
persistence?.write(settledBaseline(value), value.current, edited, sameInput);
|
|
43
43
|
}
|
|
44
44
|
if (persistence) {
|
|
45
45
|
state.subscribe((value) => {
|
package/dist/draft.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAC/C,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAA4B,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"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"}
|
package/dist/draftValues.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export interface Draft<TValues> {
|
|
|
4
4
|
readonly current: TValues;
|
|
5
5
|
readonly settled: Entries;
|
|
6
6
|
}
|
|
7
|
+
export declare function settledBaseline<TValues>(held: Draft<TValues>): TValues;
|
|
7
8
|
export declare function untouched({ baseline, current, settled }: Draft<Entries>, name: string): boolean;
|
|
8
9
|
export declare function changed(held: Draft<Entries>): boolean;
|
|
9
10
|
export declare function merged<TValues>(held: Draft<TValues>, incoming: TValues): TValues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draftValues.d.ts","sourceRoot":"","sources":["../src/draftValues.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"draftValues.d.ts","sourceRoot":"","sources":["../src/draftValues.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAExD,MAAM,WAAW,KAAK,CAAC,OAAO;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAMD,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAWxE,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM/F;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAErD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;AAoBlF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;AAYjH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAEpF;AAED,wBAAgB,QAAQ,CAAC,OAAO,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAUjJ"}
|
package/dist/draftValues.js
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import { Equal } from "effect";
|
|
2
|
+
const omitted = Symbol("omitted");
|
|
3
|
+
function sameField(left, right, name) {
|
|
4
|
+
return Object.hasOwn(left, name) === Object.hasOwn(right, name) && Equal.equals(left[name], right[name]);
|
|
5
|
+
}
|
|
6
|
+
export function settledBaseline({ baseline, settled }) {
|
|
7
|
+
const result = { ...baseline, ...settled };
|
|
8
|
+
for (const name of Object.keys(settled)) {
|
|
9
|
+
if (settled[name] === omitted) {
|
|
10
|
+
delete result[name];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
2
15
|
export function untouched({ baseline, current, settled }, name) {
|
|
3
|
-
return
|
|
16
|
+
return (sameField(current, baseline, name)
|
|
17
|
+
|| (Object.hasOwn(settled, name)
|
|
18
|
+
&& (settled[name] === omitted ? !Object.hasOwn(current, name) : Object.hasOwn(current, name) && Equal.equals(current[name], settled[name]))));
|
|
4
19
|
}
|
|
5
20
|
export function changed(held) {
|
|
6
21
|
return Object.keys({ ...held.baseline, ...held.current }).some((name) => !untouched(held, name));
|
|
@@ -15,10 +30,10 @@ export function merged(held, incoming) {
|
|
|
15
30
|
}
|
|
16
31
|
return result;
|
|
17
32
|
}
|
|
18
|
-
function matching(current, submitted) {
|
|
19
|
-
return Object.fromEntries(Object.keys({ ...current, ...submitted })
|
|
20
|
-
.filter((name) =>
|
|
21
|
-
.map((name) => [name, submitted[name]]));
|
|
33
|
+
function matching(current, submitted, baseline) {
|
|
34
|
+
return Object.fromEntries(Object.keys({ ...baseline, ...current, ...submitted })
|
|
35
|
+
.filter((name) => sameField(current, submitted, name))
|
|
36
|
+
.map((name) => [name, Object.hasOwn(submitted, name) ? submitted[name] : omitted]));
|
|
22
37
|
}
|
|
23
38
|
export function mergeObserved(current, incoming, local) {
|
|
24
39
|
const result = {};
|
|
@@ -31,11 +46,11 @@ export function mergeObserved(current, incoming, local) {
|
|
|
31
46
|
return result;
|
|
32
47
|
}
|
|
33
48
|
export function changedFields(previous, current) {
|
|
34
|
-
return Object.keys({ ...previous, ...current }).filter((name) => !
|
|
49
|
+
return Object.keys({ ...previous, ...current }).filter((name) => !sameField(previous, current, name));
|
|
35
50
|
}
|
|
36
51
|
export function accepted(held, baseline, submitted, incoming) {
|
|
37
52
|
if (held.baseline !== baseline) {
|
|
38
|
-
return { ...held, settled: matching(held.current, submitted) };
|
|
53
|
+
return { ...held, settled: matching(held.current, submitted, held.baseline) };
|
|
39
54
|
}
|
|
40
55
|
return {
|
|
41
56
|
...held,
|
package/dist/draftValues.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draftValues.js","sourceRoot":"","sources":["../src/draftValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"draftValues.js","sourceRoot":"","sources":["../src/draftValues.ts"],"names":[],"mappings":"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"}
|
package/dist/fieldPath.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import type * as AtomRef from "effect/reactivity/AtomRef";
|
|
2
2
|
type Keys<T> = T extends readonly unknown[] ? number : Extract<keyof T, string | number>;
|
|
3
|
-
export type FieldPath<T> = T extends object ? {
|
|
4
|
-
[TKey in Keys<T>]: TKey extends keyof T ? readonly [TKey] | readonly [TKey, ...FieldPath<
|
|
3
|
+
export type FieldPath<T> = [T] extends [object] ? {
|
|
4
|
+
[TKey in Keys<T>]: TKey extends keyof T ? readonly [TKey] | readonly [TKey, ...FieldPath<T[TKey]>] : never;
|
|
5
|
+
}[Keys<T>] : never;
|
|
6
|
+
export type OptionalKeys<T> = {
|
|
7
|
+
[TKey in keyof T]-?: Pick<T, TKey> extends Required<Pick<T, TKey>> ? never : TKey;
|
|
8
|
+
}[keyof T];
|
|
9
|
+
export type OptionalPath<T> = [T] extends [object] ? {
|
|
10
|
+
[TKey in Keys<T>]: TKey extends keyof T ? (TKey extends OptionalKeys<T> ? readonly [TKey] : never) | readonly [TKey, ...OptionalPath<T[TKey]>] : never;
|
|
5
11
|
}[Keys<T>] : never;
|
|
6
12
|
export type ValueAt<T, TPath> = TPath extends readonly [infer TKey extends keyof NonNullable<T>, ...infer TRest extends PropertyKey[]] ? ValueAt<NonNullable<T>[TKey], TRest> : T;
|
|
7
13
|
export declare function refAt<T, const TPath extends readonly PropertyKey[] & FieldPath<T>>(parent: AtomRef.AtomRef<T>, path: TPath): AtomRef.AtomRef<ValueAt<T, TPath>>;
|
|
14
|
+
export declare function omitAt<T>(parent: AtomRef.AtomRef<T>, path: readonly [PropertyKey, ...PropertyKey[]]): void;
|
|
8
15
|
export {};
|
|
9
16
|
//# sourceMappingURL=fieldPath.d.ts.map
|
package/dist/fieldPath.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldPath.d.ts","sourceRoot":"","sources":["../src/fieldPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAG1D,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AACzF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"fieldPath.d.ts","sourceRoot":"","sources":["../src/fieldPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAG1D,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AACzF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAC5C;KAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK;CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GACvH,KAAK,CAAC;AAET,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;KAAG,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI;CAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAE7H,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAC/C;KACC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,MAAM,CAAC,GACpC,CAAC,IAAI,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GACpG,KAAK;CACR,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GACT,KAAK,CAAC;AAET,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,SAAS,MAAM,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,KAAK,SAAS,WAAW,EAAE,CAAC,GACnI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GACpC,CAAC,CAAC;AAEL,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,SAAS,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EACjF,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAC1B,IAAI,EAAE,KAAK,GACT,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAStC,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC"}
|
package/dist/fieldPath.js
CHANGED
|
@@ -6,4 +6,18 @@ export function refAt(parent, path) {
|
|
|
6
6
|
}
|
|
7
7
|
return ref;
|
|
8
8
|
}
|
|
9
|
+
export function omitAt(parent, path) {
|
|
10
|
+
let ref = parent;
|
|
11
|
+
let name = path[0];
|
|
12
|
+
for (const segment of path.slice(1)) {
|
|
13
|
+
ref = propertyRef(ref, name);
|
|
14
|
+
name = segment;
|
|
15
|
+
}
|
|
16
|
+
ref.update((current) => {
|
|
17
|
+
const next = {};
|
|
18
|
+
Object.assign(next, current);
|
|
19
|
+
Reflect.deleteProperty(next, name);
|
|
20
|
+
return next;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
9
23
|
//# sourceMappingURL=fieldPath.js.map
|
package/dist/fieldPath.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldPath.js","sourceRoot":"","sources":["../src/fieldPath.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"fieldPath.js","sourceRoot":"","sources":["../src/fieldPath.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAyBxC,MAAM,UAAU,KAAK,CAAC,MAAgC,EAAE,IAA4B;IACnF,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;QAC5B,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAGD,MAAM,UAAU,MAAM,CAAC,MAAgC,EAAE,IAA8C;IACtG,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG,OAAO,CAAC;IAChB,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/form.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,MAAM,EAAkC,MAAM,QAAQ,CAAC;AAWvF,OAAO,EAAE,KAAK,MAAM,EAA4C,KAAK,MAAM,EAAE,KAAK,IAAI,EAA4C,MAAM,YAAY,CAAC;AAcrJ,wBAAgB,IAAI,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,aAAa,GAAG,KAAK,EACpG,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,GAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,MAAM,EAAkC,MAAM,QAAQ,CAAC;AAWvF,OAAO,EAAE,KAAK,MAAM,EAA4C,KAAK,MAAM,EAAE,KAAK,IAAI,EAA4C,MAAM,YAAY,CAAC;AAcrJ,wBAAgB,IAAI,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,aAAa,GAAG,KAAK,EACpG,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,GAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAwH9C"}
|
package/dist/form.js
CHANGED
|
@@ -4,7 +4,7 @@ import * as Atom from "effect/reactivity/Atom";
|
|
|
4
4
|
import { persistence } from "#adapters/persistence.ts";
|
|
5
5
|
import { checkFeedback } from "./checkFeedback.js";
|
|
6
6
|
import { draft } from "./draft.js";
|
|
7
|
-
import { refAt } from "./fieldPath.js";
|
|
7
|
+
import { omitAt, refAt } from "./fieldPath.js";
|
|
8
8
|
import { literalChoices, messageAt, schemaFeedback } from "./messages.js";
|
|
9
9
|
import { pathMessageAt } from "./paths.js";
|
|
10
10
|
import { fromRef, propertyRef } from "./refs.js";
|
|
@@ -98,6 +98,14 @@ export function form(schema, config) {
|
|
|
98
98
|
}),
|
|
99
99
|
field: refFor,
|
|
100
100
|
fieldAt: (path) => refAt(values, path),
|
|
101
|
+
omit: (name) => {
|
|
102
|
+
omitAt(values, [name]);
|
|
103
|
+
status.touch(name);
|
|
104
|
+
},
|
|
105
|
+
omitAt: (path) => {
|
|
106
|
+
omitAt(values, path);
|
|
107
|
+
status.touch(path[0]);
|
|
108
|
+
},
|
|
101
109
|
receive: editing.receive,
|
|
102
110
|
revert: editing.revert,
|
|
103
111
|
submit,
|
package/dist/form.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.js","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAoB,YAAY,EAAE,MAAM,QAAQ,CAAC;AACvF,OAAO,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"form.js","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"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"}
|
package/dist/messages.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ export type FieldMessages = Readonly<Record<string, string>>;
|
|
|
5
5
|
export declare const noMessages: FieldMessages;
|
|
6
6
|
export declare function messagesByField(issue: SchemaIssue.Issue, requiredMessages?: Readonly<Partial<Record<string, string>>>): FieldMessages;
|
|
7
7
|
export declare function messageAtPath(issue: SchemaIssue.Issue, path: readonly PropertyKey[], requiredMessages?: Readonly<Partial<Record<string, string>>>): string | undefined;
|
|
8
|
-
export declare function withoutField(messages: FieldMessages, name: string): FieldMessages;
|
|
9
8
|
export declare function literalChoices(input: SchemaAST.AST): readonly SchemaAST.LiteralValue[] | undefined;
|
|
10
9
|
export declare function messageAt(messages: Readonly<Partial<Record<string, string>>>, name: string): string | undefined;
|
|
11
10
|
export declare function schemaFeedback<A, E>(decoded: Atom.Atom<AsyncResult.AsyncResult<Result.Result<A, SchemaIssue.Issue>, E>>, requiredMessages?: Readonly<Partial<Record<string, string>>>): {
|
package/dist/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAuB,MAAM,QAAQ,CAAC;AAC7E,OAAO,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7D,eAAO,MAAM,UAAU,EAAE,aAAkB,CAAC;AAgD5C,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAc,GAAG,aAAa,CAajJ;AAED,wBAAgB,aAAa,CAC5B,KAAK,EAAE,WAAW,CAAC,KAAK,EACxB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,gBAAgB,GAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAc,GACtE,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAuB,MAAM,QAAQ,CAAC;AAC7E,OAAO,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7D,eAAO,MAAM,UAAU,EAAE,aAAkB,CAAC;AAgD5C,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAc,GAAG,aAAa,CAajJ;AAED,wBAAgB,aAAa,CAC5B,KAAK,EAAE,WAAW,CAAC,KAAK,EACxB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,gBAAgB,GAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAc,GACtE,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,SAAS,CAAC,YAAY,EAAE,GAAG,SAAS,CAalG;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/G;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAClC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EACnF,gBAAgB,GAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAc;IAOvE,EAAE,SAAS,SAAS,WAAW,EAAE;IAEjC,KAAK;EAEN"}
|
package/dist/messages.js
CHANGED
|
@@ -67,18 +67,6 @@ export function messageAtPath(issue, path, requiredMessages = noMessages) {
|
|
|
67
67
|
}
|
|
68
68
|
return undefined;
|
|
69
69
|
}
|
|
70
|
-
export function withoutField(messages, name) {
|
|
71
|
-
if (!Object.hasOwn(messages, name)) {
|
|
72
|
-
return messages;
|
|
73
|
-
}
|
|
74
|
-
const next = Object.create(null);
|
|
75
|
-
for (const [key, message] of Object.entries(messages)) {
|
|
76
|
-
if (key !== name) {
|
|
77
|
-
next[key] = message;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return next;
|
|
81
|
-
}
|
|
82
70
|
export function literalChoices(input) {
|
|
83
71
|
const ast = SchemaAST.toEncoded(input);
|
|
84
72
|
if (ast._tag !== "Union") {
|
package/dist/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/shape.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type * as Atom from "effect/reactivity/Atom";
|
|
|
3
3
|
import type * as AtomRef from "effect/reactivity/AtomRef";
|
|
4
4
|
import type { AtomRegistry } from "effect/reactivity/AtomRegistry";
|
|
5
5
|
import type { Reactivity } from "effect/reactivity/Reactivity";
|
|
6
|
-
import type { FieldPath, ValueAt } from "./fieldPath.ts";
|
|
6
|
+
import type { FieldPath, OptionalKeys, OptionalPath, ValueAt } from "./fieldPath.ts";
|
|
7
7
|
import type { FieldMessages } from "./messages.ts";
|
|
8
8
|
import type { PersistedDraftConfig } from "./persistence.ts";
|
|
9
9
|
export type Fields = Schema.Struct.Fields;
|
|
@@ -68,6 +68,8 @@ export interface Form<TFields extends Fields, A, E, TRuntimeError> {
|
|
|
68
68
|
readonly errorAt: (path: Path<Name<TFields>> | readonly []) => Atom.Atom<string | undefined>;
|
|
69
69
|
readonly field: <TKey extends Name<TFields>>(name: TKey) => AtomRef.AtomRef<Encoded<TFields>[TKey]>;
|
|
70
70
|
readonly fieldAt: <const TPath extends Path<Name<TFields>> & FieldPath<Encoded<TFields>>>(path: TPath) => AtomRef.AtomRef<ValueAt<Encoded<TFields>, TPath>>;
|
|
71
|
+
readonly omit: (name: OptionalKeys<Encoded<TFields>> & Name<TFields>) => void;
|
|
72
|
+
readonly omitAt: <const TPath extends Path<Name<TFields>> & OptionalPath<Encoded<TFields>>>(path: TPath) => void;
|
|
71
73
|
readonly receive: (values: Encoded<TFields>) => void;
|
|
72
74
|
readonly revert: () => void;
|
|
73
75
|
readonly submit: Atom.AtomResultFn<void, A, E | TRuntimeError | FieldFailure | Invalid>;
|
package/dist/shape.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AACnF,OAAO,KAAK,KAAK,IAAI,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/form",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Schema-derived Effect atom forms with optional React hooks",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"effect"
|
|
@@ -43,23 +43,23 @@
|
|
|
43
43
|
"README.md"
|
|
44
44
|
],
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@shivaedev/errors": "0.
|
|
46
|
+
"@shivaedev/errors": "0.10.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@effect/atom-react": "4.0
|
|
50
|
-
"@effect/vitest": "4.0
|
|
51
|
-
"@shivaedev/quality": "0.
|
|
52
|
-
"@shivaedev/test-story": "0.
|
|
49
|
+
"@effect/atom-react": "4.1.0",
|
|
50
|
+
"@effect/vitest": "4.1.0",
|
|
51
|
+
"@shivaedev/quality": "0.65.0",
|
|
52
|
+
"@shivaedev/test-story": "0.42.0",
|
|
53
53
|
"@types/node": "24.19.2",
|
|
54
54
|
"@types/react": "19.3.0",
|
|
55
|
-
"effect": "4.0
|
|
55
|
+
"effect": "4.1.0",
|
|
56
56
|
"react": "19.3.1",
|
|
57
57
|
"typescript": "7.0.2",
|
|
58
58
|
"vitest": "5.0.5"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
|
-
"@effect/atom-react": "4.0
|
|
62
|
-
"effect": "4.0
|
|
61
|
+
"@effect/atom-react": "4.1.0",
|
|
62
|
+
"effect": "4.1.0",
|
|
63
63
|
"react": "19.3.1"
|
|
64
64
|
},
|
|
65
65
|
"peerDependenciesMeta": {
|
package/src/draft.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as Atom from "effect/reactivity/Atom";
|
|
2
2
|
import * as AtomRef from "effect/reactivity/AtomRef";
|
|
3
|
-
import { accepted, changed, changedFields, type Draft, type Entries, merged, mergeObserved, untouched } from "./draftValues.ts";
|
|
3
|
+
import { accepted, changed, changedFields, type Draft, type Entries, merged, mergeObserved, settledBaseline, untouched } from "./draftValues.ts";
|
|
4
4
|
import type { Persistence, StoredValues } from "./persistence.ts";
|
|
5
5
|
|
|
6
6
|
export function draft<TValues extends Entries>(initial: TValues, persistence?: Persistence<TValues>) {
|
|
@@ -44,7 +44,7 @@ export function draft<TValues extends Entries>(initial: TValues, persistence?: P
|
|
|
44
44
|
}
|
|
45
45
|
function store(value: Draft<TValues>, sameInput = refreshing) {
|
|
46
46
|
const edited = Object.keys({ ...value.baseline, ...value.current }).filter((name) => !untouched(value, name));
|
|
47
|
-
persistence?.write(
|
|
47
|
+
persistence?.write(settledBaseline(value), value.current, edited, sameInput);
|
|
48
48
|
}
|
|
49
49
|
if (persistence) {
|
|
50
50
|
state.subscribe((value) => {
|
package/src/draftValues.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Equal } from "effect";
|
|
2
2
|
|
|
3
|
+
const omitted = Symbol("omitted");
|
|
4
|
+
|
|
3
5
|
export type Entries = Readonly<Record<string, unknown>>;
|
|
4
6
|
|
|
5
7
|
export interface Draft<TValues> {
|
|
@@ -8,8 +10,27 @@ export interface Draft<TValues> {
|
|
|
8
10
|
readonly settled: Entries;
|
|
9
11
|
}
|
|
10
12
|
|
|
13
|
+
function sameField(left: Entries, right: Entries, name: string): boolean {
|
|
14
|
+
return Object.hasOwn(left, name) === Object.hasOwn(right, name) && Equal.equals(left[name], right[name]);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function settledBaseline<TValues>(held: Draft<TValues>): TValues;
|
|
18
|
+
export function settledBaseline({ baseline, settled }: Draft<Entries>): Entries {
|
|
19
|
+
const result = { ...baseline, ...settled };
|
|
20
|
+
for (const name of Object.keys(settled)) {
|
|
21
|
+
if (settled[name] === omitted) {
|
|
22
|
+
delete result[name];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
|
|
11
28
|
export function untouched({ baseline, current, settled }: Draft<Entries>, name: string): boolean {
|
|
12
|
-
return
|
|
29
|
+
return (
|
|
30
|
+
sameField(current, baseline, name)
|
|
31
|
+
|| (Object.hasOwn(settled, name)
|
|
32
|
+
&& (settled[name] === omitted ? !Object.hasOwn(current, name) : Object.hasOwn(current, name) && Equal.equals(current[name], settled[name])))
|
|
33
|
+
);
|
|
13
34
|
}
|
|
14
35
|
|
|
15
36
|
export function changed(held: Draft<Entries>): boolean {
|
|
@@ -28,11 +49,11 @@ export function merged(held: Draft<Entries>, incoming: Entries): unknown {
|
|
|
28
49
|
return result;
|
|
29
50
|
}
|
|
30
51
|
|
|
31
|
-
function matching(current: Entries, submitted: Entries): Entries {
|
|
52
|
+
function matching(current: Entries, submitted: Entries, baseline: Entries): Entries {
|
|
32
53
|
return Object.fromEntries(
|
|
33
|
-
Object.keys({ ...current, ...submitted })
|
|
34
|
-
.filter((name) =>
|
|
35
|
-
.map((name) => [name, submitted[name]]),
|
|
54
|
+
Object.keys({ ...baseline, ...current, ...submitted })
|
|
55
|
+
.filter((name) => sameField(current, submitted, name))
|
|
56
|
+
.map((name) => [name, Object.hasOwn(submitted, name) ? submitted[name] : omitted]),
|
|
36
57
|
);
|
|
37
58
|
}
|
|
38
59
|
|
|
@@ -49,12 +70,12 @@ export function mergeObserved(current: Entries, incoming: Entries, local: Readon
|
|
|
49
70
|
}
|
|
50
71
|
|
|
51
72
|
export function changedFields(previous: Entries, current: Entries): readonly string[] {
|
|
52
|
-
return Object.keys({ ...previous, ...current }).filter((name) => !
|
|
73
|
+
return Object.keys({ ...previous, ...current }).filter((name) => !sameField(previous, current, name));
|
|
53
74
|
}
|
|
54
75
|
|
|
55
76
|
export function accepted<TValues extends Entries>(held: Draft<TValues>, baseline: TValues, submitted: TValues, incoming?: TValues): Draft<TValues> {
|
|
56
77
|
if (held.baseline !== baseline) {
|
|
57
|
-
return { ...held, settled: matching(held.current, submitted) };
|
|
78
|
+
return { ...held, settled: matching(held.current, submitted, held.baseline) };
|
|
58
79
|
}
|
|
59
80
|
return {
|
|
60
81
|
...held,
|
package/src/fieldPath.ts
CHANGED
|
@@ -2,8 +2,18 @@ import type * as AtomRef from "effect/reactivity/AtomRef";
|
|
|
2
2
|
import { propertyRef } from "./refs.ts";
|
|
3
3
|
|
|
4
4
|
type Keys<T> = T extends readonly unknown[] ? number : Extract<keyof T, string | number>;
|
|
5
|
-
export type FieldPath<T> = T extends object
|
|
6
|
-
? { [TKey in Keys<T>]: TKey extends keyof T ? readonly [TKey] | readonly [TKey, ...FieldPath<
|
|
5
|
+
export type FieldPath<T> = [T] extends [object]
|
|
6
|
+
? { [TKey in Keys<T>]: TKey extends keyof T ? readonly [TKey] | readonly [TKey, ...FieldPath<T[TKey]>] : never }[Keys<T>]
|
|
7
|
+
: never;
|
|
8
|
+
|
|
9
|
+
export type OptionalKeys<T> = { [TKey in keyof T]-?: Pick<T, TKey> extends Required<Pick<T, TKey>> ? never : TKey }[keyof T];
|
|
10
|
+
|
|
11
|
+
export type OptionalPath<T> = [T] extends [object]
|
|
12
|
+
? {
|
|
13
|
+
[TKey in Keys<T>]: TKey extends keyof T
|
|
14
|
+
? (TKey extends OptionalKeys<T> ? readonly [TKey] : never) | readonly [TKey, ...OptionalPath<T[TKey]>]
|
|
15
|
+
: never;
|
|
16
|
+
}[Keys<T>]
|
|
7
17
|
: never;
|
|
8
18
|
|
|
9
19
|
export type ValueAt<T, TPath> = TPath extends readonly [infer TKey extends keyof NonNullable<T>, ...infer TRest extends PropertyKey[]]
|
|
@@ -21,3 +31,19 @@ export function refAt(parent: AtomRef.AtomRef<unknown>, path: readonly PropertyK
|
|
|
21
31
|
}
|
|
22
32
|
return ref;
|
|
23
33
|
}
|
|
34
|
+
|
|
35
|
+
export function omitAt<T>(parent: AtomRef.AtomRef<T>, path: readonly [PropertyKey, ...PropertyKey[]]): void;
|
|
36
|
+
export function omitAt(parent: AtomRef.AtomRef<unknown>, path: readonly [PropertyKey, ...PropertyKey[]]): void {
|
|
37
|
+
let ref = parent;
|
|
38
|
+
let name = path[0];
|
|
39
|
+
for (const segment of path.slice(1)) {
|
|
40
|
+
ref = propertyRef(ref, name);
|
|
41
|
+
name = segment;
|
|
42
|
+
}
|
|
43
|
+
ref.update((current) => {
|
|
44
|
+
const next = {};
|
|
45
|
+
Object.assign(next, current);
|
|
46
|
+
Reflect.deleteProperty(next, name);
|
|
47
|
+
return next;
|
|
48
|
+
});
|
|
49
|
+
}
|
package/src/form.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type * as AtomRef from "effect/reactivity/AtomRef";
|
|
|
5
5
|
import { persistence } from "#adapters/persistence.ts";
|
|
6
6
|
import { checkFeedback } from "./checkFeedback.ts";
|
|
7
7
|
import { draft } from "./draft.ts";
|
|
8
|
-
import { refAt } from "./fieldPath.ts";
|
|
8
|
+
import { omitAt, refAt } from "./fieldPath.ts";
|
|
9
9
|
import { literalChoices, messageAt, schemaFeedback } from "./messages.ts";
|
|
10
10
|
import { pathMessageAt } from "./paths.ts";
|
|
11
11
|
import { fromRef, propertyRef } from "./refs.ts";
|
|
@@ -131,6 +131,14 @@ export function form<TFields extends Fields, TValue, TError, TServices = never,
|
|
|
131
131
|
}),
|
|
132
132
|
field: refFor,
|
|
133
133
|
fieldAt: (path) => refAt(values, path),
|
|
134
|
+
omit: (name) => {
|
|
135
|
+
omitAt(values, [name]);
|
|
136
|
+
status.touch(name);
|
|
137
|
+
},
|
|
138
|
+
omitAt: (path) => {
|
|
139
|
+
omitAt(values, path);
|
|
140
|
+
status.touch(path[0]);
|
|
141
|
+
},
|
|
134
142
|
receive: editing.receive,
|
|
135
143
|
revert: editing.revert,
|
|
136
144
|
submit,
|
package/src/messages.ts
CHANGED
|
@@ -86,19 +86,6 @@ export function messageAtPath(
|
|
|
86
86
|
return undefined;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
export function withoutField(messages: FieldMessages, name: string): FieldMessages {
|
|
90
|
-
if (!Object.hasOwn(messages, name)) {
|
|
91
|
-
return messages;
|
|
92
|
-
}
|
|
93
|
-
const next: Record<string, string> = Object.create(null);
|
|
94
|
-
for (const [key, message] of Object.entries(messages)) {
|
|
95
|
-
if (key !== name) {
|
|
96
|
-
next[key] = message;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return next;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
89
|
export function literalChoices(input: SchemaAST.AST): readonly SchemaAST.LiteralValue[] | undefined {
|
|
103
90
|
const ast = SchemaAST.toEncoded(input);
|
|
104
91
|
if (ast._tag !== "Union") {
|
package/src/shape.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type * as Atom from "effect/reactivity/Atom";
|
|
|
3
3
|
import type * as AtomRef from "effect/reactivity/AtomRef";
|
|
4
4
|
import type { AtomRegistry } from "effect/reactivity/AtomRegistry";
|
|
5
5
|
import type { Reactivity } from "effect/reactivity/Reactivity";
|
|
6
|
-
import type { FieldPath, ValueAt } from "./fieldPath.ts";
|
|
6
|
+
import type { FieldPath, OptionalKeys, OptionalPath, ValueAt } from "./fieldPath.ts";
|
|
7
7
|
import type { FieldMessages } from "./messages.ts";
|
|
8
8
|
import type { PersistedDraftConfig } from "./persistence.ts";
|
|
9
9
|
|
|
@@ -81,6 +81,8 @@ export interface Form<TFields extends Fields, A, E, TRuntimeError> {
|
|
|
81
81
|
readonly fieldAt: <const TPath extends Path<Name<TFields>> & FieldPath<Encoded<TFields>>>(
|
|
82
82
|
path: TPath,
|
|
83
83
|
) => AtomRef.AtomRef<ValueAt<Encoded<TFields>, TPath>>;
|
|
84
|
+
readonly omit: (name: OptionalKeys<Encoded<TFields>> & Name<TFields>) => void;
|
|
85
|
+
readonly omitAt: <const TPath extends Path<Name<TFields>> & OptionalPath<Encoded<TFields>>>(path: TPath) => void;
|
|
84
86
|
readonly receive: (values: Encoded<TFields>) => void;
|
|
85
87
|
readonly revert: () => void;
|
|
86
88
|
readonly submit: Atom.AtomResultFn<void, A, E | TRuntimeError | FieldFailure | Invalid>;
|