@vielzeug/forge 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/_dev.cjs +1 -1
- package/dist/_dev.cjs.map +1 -1
- package/dist/_dev.js +4 -1
- package/dist/_dev.js.map +1 -1
- package/dist/_utils.cjs +1 -1
- package/dist/_utils.cjs.map +1 -1
- package/dist/_utils.d.ts.map +1 -1
- package/dist/_utils.js +17 -10
- package/dist/_utils.js.map +1 -1
- package/dist/core/scope.cjs +1 -1
- package/dist/core/scope.cjs.map +1 -1
- package/dist/core/scope.d.ts.map +1 -1
- package/dist/core/scope.js +61 -14
- package/dist/core/scope.js.map +1 -1
- package/dist/core/values.cjs +1 -1
- package/dist/core/values.js +50 -50
- package/dist/forge.cjs +1 -1
- package/dist/forge.cjs.map +1 -1
- package/dist/forge.iife.js +1 -1
- package/dist/forge.iife.js.map +1 -1
- package/dist/forge.js +1 -1
- package/dist/forge.js.map +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +3 -3
- package/package.json +2 -2
package/dist/core/values.js
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { warn as e } from "../_dev.js";
|
|
2
|
+
import { assertSafeKey as t, flattenValues as n, sanitizeForLog as r, unflattenValues as i } from "../_utils.js";
|
|
3
3
|
import { createArrayField as a } from "./array.js";
|
|
4
4
|
//#region src/core/values.ts
|
|
5
5
|
function o(o) {
|
|
6
|
-
function s(
|
|
7
|
-
let n =
|
|
8
|
-
return
|
|
6
|
+
function s(e) {
|
|
7
|
+
let n = e;
|
|
8
|
+
return t(n), o.store.get(n);
|
|
9
9
|
}
|
|
10
10
|
function c() {
|
|
11
|
-
return o.cachedValues ??=
|
|
11
|
+
return o.cachedValues ??= i(Object.fromEntries(o.store));
|
|
12
12
|
}
|
|
13
13
|
function l(e, t) {
|
|
14
14
|
o.baseline.get(e) === t ? o.dirty.delete(e) : o.dirty.add(e);
|
|
15
15
|
}
|
|
16
|
-
function u(
|
|
16
|
+
function u(e, n, r = {}) {
|
|
17
17
|
o.ensureNotDisposed();
|
|
18
|
-
let i =
|
|
19
|
-
|
|
18
|
+
let i = e;
|
|
19
|
+
t(i), o.store.set(i, n), l(i, n), r.touched && o.touched.add(i), o.requestNotify(i);
|
|
20
20
|
}
|
|
21
|
-
function d(
|
|
22
|
-
let n =
|
|
23
|
-
return
|
|
21
|
+
function d(e) {
|
|
22
|
+
let n = e;
|
|
23
|
+
return t(n), o.getFieldSnapshot(n);
|
|
24
24
|
}
|
|
25
|
-
function f(
|
|
25
|
+
function f(e, n) {
|
|
26
26
|
o.ensureNotDisposed();
|
|
27
|
-
let r =
|
|
28
|
-
|
|
27
|
+
let r = e;
|
|
28
|
+
t(r), o.fieldErrors.set(r, n), o.invalidateErrors(), o.requestNotify(r);
|
|
29
29
|
}
|
|
30
|
-
function p(
|
|
30
|
+
function p(e) {
|
|
31
31
|
o.ensureNotDisposed();
|
|
32
|
-
let n =
|
|
33
|
-
|
|
32
|
+
let n = e;
|
|
33
|
+
t(n), o.fieldErrors.delete(n) && (o.invalidateErrors(), o.requestNotify(n));
|
|
34
34
|
}
|
|
35
|
-
function m(
|
|
35
|
+
function m(e = {}) {
|
|
36
36
|
o.ensureNotDisposed(), o.fieldErrors.clear();
|
|
37
|
-
for (let [n, r] of Object.entries(
|
|
37
|
+
for (let [n, r] of Object.entries(e)) t(n), typeof r == "string" && o.fieldErrors.set(n, r);
|
|
38
38
|
o.invalidateErrors(), o.requestNotify();
|
|
39
39
|
}
|
|
40
|
-
function h(
|
|
41
|
-
/\.\d+(\.|$)/.test(
|
|
40
|
+
function h(t, n) {
|
|
41
|
+
/\.\d+(\.|$)/.test(t) && !o.store.has(t) && e(`${n}('${r(t, 80)}'): path looks like an array item key. Array items are stored as whole arrays — register on the parent key instead.`);
|
|
42
42
|
}
|
|
43
|
-
function g(
|
|
43
|
+
function g(e, n) {
|
|
44
44
|
o.ensureNotDisposed();
|
|
45
|
-
let r =
|
|
46
|
-
|
|
45
|
+
let r = e;
|
|
46
|
+
t(r), h(r, "setValidator"), o.fieldCtrls.get(r)?.abort(), o.fieldCtrls.delete(r), n ? o.validators.set(r, n) : (o.validators.delete(r), o.fieldErrors.delete(r) && (o.invalidateErrors(), o.requestNotify(r)));
|
|
47
47
|
}
|
|
48
|
-
function _(
|
|
48
|
+
function _(e, n = {}) {
|
|
49
49
|
o.ensureNotDisposed();
|
|
50
|
-
let r =
|
|
51
|
-
return
|
|
52
|
-
o.disposed || w(
|
|
50
|
+
let r = e;
|
|
51
|
+
return t(r), h(r, "fields.register"), n.validator !== void 0 && g(e, n.validator), n.defaultValue !== void 0 && !o.store.has(r) && (o.store.set(r, n.defaultValue), o.baseline.set(r, n.defaultValue), o.requestNotify(r)), () => {
|
|
52
|
+
o.disposed || w(e);
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
function v() {
|
|
@@ -58,15 +58,15 @@ function o(o) {
|
|
|
58
58
|
for (let t of o.validators.keys()) e.add(t);
|
|
59
59
|
return Object.freeze([...e]);
|
|
60
60
|
}
|
|
61
|
-
function y(
|
|
61
|
+
function y(e) {
|
|
62
62
|
o.ensureNotDisposed();
|
|
63
|
-
let n =
|
|
64
|
-
|
|
63
|
+
let n = e;
|
|
64
|
+
t(n), o.touched.add(n), o.requestNotify(n);
|
|
65
65
|
}
|
|
66
|
-
function b(
|
|
66
|
+
function b(e) {
|
|
67
67
|
o.ensureNotDisposed();
|
|
68
|
-
let n =
|
|
69
|
-
|
|
68
|
+
let n = e;
|
|
69
|
+
t(n), o.touched.delete(n) && o.requestNotify(n);
|
|
70
70
|
}
|
|
71
71
|
function x() {
|
|
72
72
|
o.ensureNotDisposed();
|
|
@@ -77,15 +77,15 @@ function o(o) {
|
|
|
77
77
|
function S() {
|
|
78
78
|
o.ensureNotDisposed(), o.touched.clear(), o.requestNotify();
|
|
79
79
|
}
|
|
80
|
-
function C(
|
|
80
|
+
function C(e) {
|
|
81
81
|
o.ensureNotDisposed();
|
|
82
|
-
let n =
|
|
83
|
-
|
|
82
|
+
let n = e;
|
|
83
|
+
t(n), o.fieldCtrls.get(n)?.abort(), o.fieldCtrls.delete(n), o.store.set(n, o.baseline.get(n)), o.dirty.delete(n), o.touched.delete(n), o.fieldErrors.delete(n) && o.invalidateErrors(), o.requestNotify(n);
|
|
84
84
|
}
|
|
85
|
-
function w(
|
|
85
|
+
function w(e) {
|
|
86
86
|
o.ensureNotDisposed();
|
|
87
|
-
let n =
|
|
88
|
-
|
|
87
|
+
let n = e;
|
|
88
|
+
t(n), o.store.delete(n), o.baseline.delete(n), o.dirty.delete(n), o.touched.delete(n), o.validators.delete(n), o.arrayCache.delete(n), o.fieldCtrls.get(n)?.abort(), o.fieldCtrls.delete(n), o.fieldErrors.delete(n) && o.invalidateErrors(), o.requestNotify(n);
|
|
89
89
|
}
|
|
90
90
|
function T() {
|
|
91
91
|
o.ensureNotDisposed();
|
|
@@ -100,24 +100,24 @@ function o(o) {
|
|
|
100
100
|
for (let e of o.runCtrls) e.abort();
|
|
101
101
|
for (let e of o.fieldCtrls.values()) e.abort();
|
|
102
102
|
o.runCtrls.clear(), o.fieldCtrls.clear(), o.validatingRuns.clear();
|
|
103
|
-
let
|
|
103
|
+
let t = n(e);
|
|
104
104
|
o.store.clear(), o.baseline.clear(), o.fieldErrors.clear(), o.touched.clear(), o.dirty.clear(), o.submitCount = 0, o.invalidateErrors();
|
|
105
|
-
for (let [e,
|
|
105
|
+
for (let [e, n] of Object.entries(t)) o.store.set(e, n), o.baseline.set(e, n);
|
|
106
106
|
o.requestNotify();
|
|
107
107
|
}
|
|
108
108
|
function D(e) {
|
|
109
109
|
o.ensureNotDisposed();
|
|
110
|
-
let
|
|
111
|
-
for (let [e,
|
|
112
|
-
o.requestNotify(Object.keys(
|
|
110
|
+
let t = n(e);
|
|
111
|
+
for (let [e, n] of Object.entries(t)) o.baseline.set(e, n), o.store.set(e, n), o.dirty.delete(e);
|
|
112
|
+
o.requestNotify(Object.keys(t));
|
|
113
113
|
}
|
|
114
|
-
function O(
|
|
114
|
+
function O(e) {
|
|
115
115
|
o.ensureNotDisposed();
|
|
116
|
-
let n =
|
|
117
|
-
|
|
116
|
+
let n = e;
|
|
117
|
+
t(n);
|
|
118
118
|
let r = o.arrayCache.get(n);
|
|
119
119
|
if (r) return r;
|
|
120
|
-
let i = a(
|
|
120
|
+
let i = a(e, o.store, u);
|
|
121
121
|
return o.arrayCache.set(n, i), i;
|
|
122
122
|
}
|
|
123
123
|
return {
|
package/dist/forge.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@vielzeug/arsenal"),t=require("@vielzeug/ripple");var n=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},r=class extends n{constructor(){super(`Cannot modify a disposed form`)}},i=class extends n{},a=class extends n{},o=class extends n{errors;constructor(e){super(`Form validation failed`),this.errors=e}},s=`_form`,c={onBlur:{touchOnBlur:!0,validateOnBlur:!0},onChange:{touchOnBlur:!0,validateOnChange:!0},onSubmit:{},onTouched:{touchOnBlur:!0,validateOnBlur:!0,validateOnTouch:!0}},l=!globalThis.__FORGE_PROD__;function u(e){l&&console.warn(`[@vielzeug/forge] ${e}`)}var d=new Set([`__proto__`,`constructor`,`prototype`]);function f(e){return e.split(`.`).every(e=>!d.has(e))}function p(e){if(!f(e))throw new i(`Unsafe key '${e}': segments __proto__, constructor, and prototype are reserved.`)}function m(e,t=200){return e.replace(/\p{C}/gu,`?`).slice(0,t)}function h(...e){let t=e.filter(e=>e!=null);if(t.length!==0)return t.length===1?t[0]:AbortSignal.any(t)}function g(e){if(!e)return;if(typeof e==`function`)return e;let t=e;return(e,n)=>{if(n?.aborted)return;let r=t.safeParse(e);if(r.success)return;let i={};for(let e of r.error.issues){let t=e.path.join(`.`)||`_form`;f(t)&&(i[t]||(i[t]=e.message))}return i}}function _(n){let i=new Map;for(let[e,t]of Object.entries(n.validators??{}))p(e),i.set(e,t);let a=g(n.validator),o=n.connect??{},s=typeof n.defaultValues==`function`,c=typeof n.defaultValues==`function`?void 0:n.defaultValues,l=new Map(Object.entries((0,e.flattenPaths)(c??{}))),u=new Map(l),d=new Map,f=new Set,m=new Set,h=new Map,_=new Set,v=new Map,y=new AbortController,b=null,x=null,S=new Map,C=new Map,w=new Map,T=!1,E=0,D=!1,O=new Map,k=new Set;function A(e){return O.has(e)||O.set(e,(0,t.signal)(L(e),{equals:(e,t)=>e.value===t.value&&e.error===t.error&&e.hasError===t.hasError&&e.touched===t.touched&&e.dirty===t.dirty})),O.get(e)}function j(){b=null}function M(){x=null}function N(){return x??=Object.freeze(Object.fromEntries(d))}function P(){return Object.freeze({errors:N(),isDirty:m.size>0,isLoading:s,isSubmitting:T,isTouched:f.size>0,isValid:d.size===0,isValidating:h.size>0,submitCount:E,touchedFields:Object.freeze([...f]),validatingFields:Object.freeze([...h.keys()])})}let F=(0,t.signal)(P());function I(){return F.value}function L(e){let t=d.get(e);return{dirty:m.has(e),error:t,hasError:t!==void 0,touched:f.has(e),value:u.get(e)}}function R(e){let t=S.get(e);if(t)return t;let n=Object.freeze(L(e));return S.set(e,n),n}function z(e){if(!D)if(j(),x=null,e===void 0)S.clear(),(0,t.batch)(()=>{F.value=P();for(let[e,t]of O)t.value=L(e)});else if(typeof e==`string`)S.delete(e),(0,t.batch)(()=>{F.value=P();let t=O.get(e);t&&(t.value=L(e))});else{let n=[...e];for(let e of n)S.delete(e);(0,t.batch)(()=>{F.value=P();for(let e of n){let t=O.get(e);t&&(t.value=L(e))}})}}function B(){if(D)throw new r}function V(e){B();try{(0,t.batch)(e)}catch(e){throw z(),e}}return{arrayCache:C,baseline:l,batch:V,buildFieldState:L,get cachedErrors(){return x},set cachedErrors(e){x=e},get cachedValues(){return b},set cachedValues(e){b=e},computeErrors:N,computeState:P,connectDefaults:o,dirty:m,disposeController:y,get disposed(){return D},set disposed(e){D=e},ensureNotDisposed:B,fieldCtrls:v,fieldErrors:d,fieldSignals:O,fieldStateCache:S,formStateSignal:F,formValidator:a,getFieldSnapshot:R,getOrCreateFieldSignal:A,getStateSnapshot:I,invalidateErrors:M,invalidateValues:j,get isSubmittingState(){return T},set isSubmittingState(e){T=e},get loadingState(){return s},set loadingState(e){s=e},requestNotify:z,rippleSubs:k,runCtrls:_,scopeCache:w,store:u,get submitCount(){return E},set submitCount(e){E=e},touched:f,validatingRuns:h,validators:i}}function v(e){function t(){e.disposed=!0,e.disposeController.abort();for(let t of e.fieldCtrls.values())t.abort();e.fieldCtrls.clear(),e.runCtrls.clear(),e.arrayCache.clear(),e.scopeCache.clear();for(let t of e.rippleSubs)t.dispose();e.rippleSubs.clear(),e.fieldSignals.clear()}function n(){return e.ensureNotDisposed(),Object.freeze({baseline:Object.freeze(Object.fromEntries(e.baseline)),dirty:Object.freeze([...e.dirty]),errors:Object.freeze(Object.fromEntries(e.fieldErrors)),store:Object.freeze(Object.fromEntries(e.store)),submitCount:e.submitCount,touched:Object.freeze([...e.touched])})}function r(t){e.ensureNotDisposed();for(let t of e.runCtrls)t.abort();for(let t of e.fieldCtrls.values())t.abort();e.runCtrls.clear(),e.fieldCtrls.clear(),e.validatingRuns.clear(),e.store.clear(),e.baseline.clear(),e.fieldErrors.clear(),e.touched.clear(),e.dirty.clear();for(let[n,r]of Object.entries(t.store))f(n)&&e.store.set(n,r);for(let[n,r]of Object.entries(t.baseline))f(n)&&e.baseline.set(n,r);for(let[n,r]of Object.entries(t.errors))f(n)&&e.fieldErrors.set(n,r);for(let n of t.touched)f(n)&&e.touched.add(n);for(let n of t.dirty)f(n)&&e.dirty.add(n);e.submitCount=t.submitCount,e.invalidateErrors(),e.invalidateValues(),e.requestNotify()}return{dispose:t,restore:r,snapshot:n}}function y(e){let t=[],n=null,r=null,i=!1,a=null;function o(e){if(!i)if(n){let t=n;n=null,r=null,t({done:!1,value:e})}else t.push(e)}function s(e){if(!i)if(i=!0,r){let t=r;n=null,r=null,t(e)}else a={err:e}}function c(){if(!i&&(i=!0,n)){let e=n;n=null,r=null,e({done:!0,value:void 0})}}function l(){i||(t=[],c(),e?.())}return{fail:s,finish:c,iterator:{next(){if(a){let{err:e}=a;return a=null,Promise.reject(e)}return t.length>0?Promise.resolve({done:!1,value:t.shift()}):i?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>{n=e,r=t})},return(){return l(),Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}},push:o,terminate:l}}function b(n,r){function i(e,r){if(n.disposed)return()=>{};let i=(0,t.watch)(n.formStateSignal,t=>{e(t)});return n.rippleSubs.add(i),r?.sync&&e(n.formStateSignal.value),()=>{i.dispose(),n.rippleSubs.delete(i)}}function a(e,r,i){if(n.disposed)return()=>{};let a=e;p(a);let o=n.getOrCreateFieldSignal(a),s=(0,t.watch)(o,e=>{r(e)});return n.rippleSubs.add(s),i?.sync&&r(o.value),()=>{s.dispose(),n.rippleSubs.delete(s)}}function o(t,i){n.ensureNotDisposed();let a=t;p(a);let o=i?.touchOnBlur??n.connectDefaults.touchOnBlur??!1,s=i?.validateOnBlur??n.connectDefaults.validateOnBlur??!1,c=i?.validateOnChange??n.connectDefaults.validateOnChange??!1,l=i?.validateOnTouch??n.connectDefaults.validateOnTouch??!1,u=i?.debounce??n.connectDefaults.debounce??0,d=null;function f(){u>0?(d!==null&&clearTimeout(d),d=setTimeout(()=>{d=null,!n.disposed&&r.validateFields([t]).catch(t=>{if(!(0,e.isAbortError)(t))throw t})},u)):r.validateFields([t]).catch(t=>{if(!(0,e.isAbortError)(t))throw t})}let m=!1;return{get dirty(){return n.dirty.has(a)},dispose(){m=!0,d!==null&&(clearTimeout(d),d=null)},get disposed(){return m},get error(){return n.fieldErrors.get(a)},onBlur:()=>{n.disposed||(o&&r.touch(t),s&&f())},onChange:e=>{n.disposed||(r.set(t,e),(c||l&&n.touched.has(a))&&f())},[Symbol.dispose](){this.dispose()},get touched(){return n.touched.has(a)},get value(){return n.store.get(a)}}}function s(){let e=y(()=>t());e.push(n.getStateSnapshot());let t=i(t=>{e.push(t)});return n.disposeController.signal.addEventListener(`abort`,()=>e.terminate(),{once:!0}),e.iterator}return{connect:o,subscribe:i,subscribeField:a,[Symbol.asyncIterator]:s}}function x(t,n){let r=`${n}.`;function i(e){return`${n}.${e}`}function s(e){return e===n||e.startsWith(r)}function c(e){return e.startsWith(r)?e.slice(r.length):e}function l(){let e=t.getStateSnapshot(),n=Object.fromEntries(Object.entries(e.errors).filter(([e])=>s(e)).map(([e,t])=>[c(e),t])),r=e.touchedFields.filter(s).map(c),i=e.validatingFields.filter(s).map(c),a=Object.keys(n).length===0,o=[...t.dirty].some(s),l=[...t.touched].some(s),u=i.length>0;return Object.freeze({errors:Object.freeze(n),isDirty:o,isLoading:e.isLoading,isSubmitting:e.isSubmitting,isTouched:l,isValid:a,isValidating:u,submitCount:e.submitCount,touchedFields:Object.freeze(r),validatingFields:Object.freeze(i)})}function u(){let n={};for(let[e,i]of t.store)e.startsWith(r)&&(n[e.slice(r.length)]=i);return(0,e.unflattenPaths)(n)}function d(){let e=new Set;for(let n of t.store.keys())s(n)&&e.add(c(n));for(let n of t.validators.keys())s(n)&&e.add(c(n));return Object.freeze([...e])}function f(){t.ensureNotDisposed();for(let e of t.store.keys())s(e)&&t.touched.add(e);for(let e of t.validators.keys())s(e)&&t.touched.add(e);t.requestNotify()}function p(){t.ensureNotDisposed();for(let e of[...t.touched])s(e)&&t.touched.delete(e);t.requestNotify()}function m(){t.ensureNotDisposed();for(let e of[...t.store.keys()])s(e)&&(t.fieldCtrls.get(e)?.abort(),t.fieldCtrls.delete(e),t.store.set(e,t.baseline.get(e)),t.dirty.delete(e),t.touched.delete(e),t.fieldErrors.delete(e)&&t.invalidateErrors());t.requestNotify()}function h(n){t.ensureNotDisposed();for(let e of[...t.fieldCtrls.keys()])s(e)&&(t.fieldCtrls.get(e)?.abort(),t.fieldCtrls.delete(e));let r=(0,e.flattenPaths)(n);for(let e of[...t.store.keys()])s(e)&&(t.store.delete(e),t.baseline.delete(e),t.dirty.delete(e),t.touched.delete(e),t.fieldErrors.delete(e));t.invalidateErrors();for(let[e,n]of Object.entries(r)){let r=i(e);t.store.set(r,n),t.baseline.set(r,n)}t.requestNotify()}function g(n){t.ensureNotDisposed();let r=(0,e.flattenPaths)(n),a=[];for(let[e,n]of Object.entries(r)){let r=i(e);t.baseline.set(r,n),t.store.set(r,n),t.dirty.delete(r),a.push(r)}t.requestNotify(a)}function _(e){t.ensureNotDisposed();for(let e of[...t.fieldErrors.keys()])s(e)&&t.fieldErrors.delete(e);if(e)for(let[n,r]of Object.entries(e))typeof r==`string`&&t.fieldErrors.set(i(n),r);t.invalidateErrors(),t.requestNotify()}async function v(e,n){if(t.ensureNotDisposed(),e!==void 0&&!Array.isArray(e)&&!(e instanceof AbortSignal)){let r=i(e);await t.runValidationCore([r],`partial`,n);let a=t.fieldErrors.get(r);return{errors:a===void 0?{}:{[e]:a},valid:a===void 0}}if(Array.isArray(e)){let r=e.map(e=>i(e));await t.runValidationCore(r,`partial`,n);let a={};for(let e of r){let n=t.fieldErrors.get(e);n!==void 0&&(a[c(e)]=n)}return{errors:a,valid:Object.keys(a).length===0}}let r=e,a=[...t.validators.keys()].filter(s);await t.runValidationCore(a,`partial`,r);let o={};for(let[e,n]of t.fieldErrors)s(e)&&(o[c(e)]=n);return{errors:o,valid:Object.keys(o).length===0}}async function y(e){if(t.ensureNotDisposed(),t.isSubmitting())throw new a(`submit() called while a submission is already in progress`);t.root.batch(()=>{t.incrementSubmitCount(),t.setSubmitting(!0),f()});try{let n=[...t.validators.keys()].filter(s);await t.runValidationCore(n,`partial`),t.ensureNotDisposed();let r={};for(let[e,n]of t.fieldErrors)s(e)&&(r[c(e)]=n);return Object.keys(r).length>0?{errors:r,ok:!1,type:`validation`}:{ok:!0,value:await e(u())}}finally{t.setSubmitting(!1),t.isDisposed()||t.requestNotify()}}function b(e,n){let r=null;return t.root.subscribe(()=>{let t=l();if(r){let e=r,n=Object.keys(t.errors),i=Object.keys(e.errors),a=n.length===i.length&&n.every(n=>t.errors[n]===e.errors[n]),o=t.touchedFields.length===e.touchedFields.length&&t.touchedFields.every((t,n)=>t===e.touchedFields[n]),s=t.validatingFields.length===e.validatingFields.length&&t.validatingFields.every((t,n)=>t===e.validatingFields[n]);if(t.isDirty===e.isDirty&&t.isLoading===e.isLoading&&t.isSubmitting===e.isSubmitting&&t.isTouched===e.isTouched&&t.isValid===e.isValid&&t.isValidating===e.isValidating&&t.submitCount===e.submitCount&&a&&o&&s)return}r=t,e(t)},n)}return{array:e=>t.root.array(i(e)),batch:e=>t.root.batch(e),clearError:e=>t.root.clearError(i(e)),connect:(e,n)=>t.root.connect(i(e),n),get disposalSignal(){return t.root.disposalSignal},dispose:()=>{},get disposed(){return t.isDisposed()},field:e=>t.root.field(i(e)),fields:{list:d,register:(e,n)=>t.root.fields.register(i(e),n),remove:e=>t.root.fields.remove(i(e)),setValidator:(e,n)=>t.root.fields.setValidator(i(e),n)},get:e=>t.root.get(i(e)),get isLoading(){return t.root.isLoading},get isSubmitting(){return t.root.isSubmitting},patch:g,replace:h,reset:m,resetErrors:_,resetField:e=>t.root.resetField(i(e)),restore:e=>t.root.restore(e),scope:e=>x(t,i(e)),set:(e,n,r)=>t.root.set(i(e),n,r),setError:(e,n)=>t.root.setError(i(e),n),snapshot:()=>t.root.snapshot(),get state(){return l()},submit:y,submitOrThrow:async e=>{let t=await y(e);if(!t.ok)throw new o(t.errors);return t.value},subscribe:(e,n)=>t.root.subscribe(e,n),subscribeField:(e,n,r)=>t.root.subscribeField(i(e),n,r),subscribeScoped:b,[Symbol.asyncIterator]:()=>t.root[Symbol.asyncIterator](),[Symbol.dispose](){this.dispose()},touch:e=>t.root.touch(i(e)),touchAll:f,untouch:e=>t.root.untouch(i(e)),untouchAll:p,validate:v,validateStream(e){let n=t.root.validateStream(e);return{async next(){for(;;){let e=await n.next();if(e.done)return e;if(s(e.value.field))return{done:!1,value:{error:e.value.error,field:c(e.value.field)}}}},return(){return n.return?n.return():Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}},values:u}}function S(t,n){async function r(e,n){let r=t.validators.get(e);if(!r)return;if(n.aborted)throw n.reason;let i=await r(t.store.get(e),n);return typeof i==`string`?i:void 0}async function i(e){if(!t.formValidator)return{};if(e.aborted)throw e.reason;let r=await t.formValidator(n.values(),e),i={};if(r)for(let[e,t]of Object.entries(r))f(e)&&typeof t==`string`&&(i[e]=t);return i}function c(e,n,r,i){if(i===`full`){t.fieldErrors.clear();for(let[e,t]of Object.entries(r))n[e]===void 0&&(n[e]=t);for(let[e,r]of Object.entries(n))t.fieldErrors.set(e,r);t.invalidateErrors(),t.requestNotify()}else{let r=new Set;for(let i of e){let e=n[i],a=t.fieldErrors.get(i);e===void 0?t.fieldErrors.delete(i)&&r.add(i):(t.fieldErrors.set(i,e),a!==e&&r.add(i))}r.size>0&&t.invalidateErrors(),t.requestNotify(r)}}async function l(n,a,o){let s=new Set(n),l=new Map;for(let e of s){t.fieldCtrls.get(e)?.abort();let n=new AbortController;t.fieldCtrls.set(e,n),l.set(e,n)}let u=new AbortController,d=h(u.signal,o,t.disposeController.signal);t.runCtrls.add(u);let f=Symbol();for(let e of s){let n=t.validatingRuns.get(e);n||(n=new Set,t.validatingRuns.set(e,n)),n.add(f)}t.requestNotify();try{let e=await Promise.all([...s].map(async e=>[e,await r(e,a===`partial`?h(l.get(e).signal,d):d)]));if(d.aborted)return{aborted:!0,errors:Object.fromEntries(t.fieldErrors),valid:t.fieldErrors.size===0};let n={};for(let[t,r]of e)r!==void 0&&(n[t]=r);return c(s,n,a===`full`?await i(d):{},a),{aborted:!1,errors:Object.fromEntries(t.fieldErrors),valid:t.fieldErrors.size===0}}catch(n){if((0,e.isAbortError)(n))return{aborted:!0,errors:Object.fromEntries(t.fieldErrors),valid:t.fieldErrors.size===0};throw n}finally{t.runCtrls.delete(u);for(let e of s){let n=t.validatingRuns.get(e);n&&(n.delete(f),n.size===0&&t.validatingRuns.delete(e))}t.requestNotify();for(let[e,n]of l)t.fieldCtrls.get(e)===n&&t.fieldCtrls.delete(e)}}async function u(e,n){t.ensureNotDisposed();let r=await l(e,`partial`,n);return{errors:r.errors,valid:r.valid}}async function d(e,n){if(t.ensureNotDisposed(),e===void 0||e instanceof AbortSignal){let n=await l([...t.validators.keys()],`full`,e);return{errors:n.errors,valid:n.valid}}if(Array.isArray(e))return u(e,n);await u([e],n);let r=e,i=t.fieldErrors.get(r);return{errors:i===void 0?{}:{[r]:i},valid:i===void 0}}async function p(e){let t=await m(e);if(!t.ok)throw new o(t.errors);return t.value}async function m(e){if(t.ensureNotDisposed(),t.isSubmittingState)throw new a(`submit() called while a submission is already in progress`);t.batch(()=>{t.submitCount++,t.isSubmittingState=!0,n.touchAll()});try{let r=await l([...t.validators.keys()],`full`);return t.ensureNotDisposed(),r.valid?{ok:!0,value:await e(n.values())}:{errors:r.errors,ok:!1,type:`validation`}}finally{t.isSubmittingState=!1,t.disposed||t.requestNotify()}}function g(n){t.ensureNotDisposed();let a=[...t.validators.keys()],o=new AbortController,c=n?h(o.signal,n,t.disposeController.signal):h(o.signal,t.disposeController.signal),l=y(()=>o.abort());return Promise.all(a.map(async t=>{if(!c.aborted)try{let e=await r(t,c);c.aborted||l.push({error:e,field:t})}catch(t){if(!(0,e.isAbortError)(t))throw t}})).then(async()=>{if(t.formValidator&&!c.aborted)try{let e=await i(c);if(!c.aborted){let t=new Set([s,...Object.keys(e)]);for(let n of t)l.push({error:e[n],field:n})}}catch{}}).catch(t=>{(0,e.isAbortError)(t)||(o.abort(),l.fail(t))}).finally(()=>{o.abort(),l.finish()}),l.iterator}return{runValidationCore:l,submit:m,submitOrThrow:p,validate:d,validateFields:u,validateStream:g}}function C(e,t,n){let r=e;return{append(i){let a=t.get(r);a!==void 0&&!Array.isArray(a)||n(e,Array.isArray(a)?[...a,i]:[i])},insert(i,a){let o=t.get(r);if(!Array.isArray(o))return;let s=[...o];s.splice(i,0,a),n(e,s)},move(i,a){let o=t.get(r);if(!Array.isArray(o))return;let s=[...o];s.splice(a,0,s.splice(i,1)[0]),n(e,s)},prepend(i){let a=t.get(r);a!==void 0&&!Array.isArray(a)||n(e,Array.isArray(a)?[i,...a]:[i])},remove(i){let a=t.get(r);Array.isArray(a)&&n(e,a.filter((e,t)=>t!==i))},replace(i,a){let o=t.get(r);if(!Array.isArray(o))return;let s=[...o];s[i]=a,n(e,s)},swap(i,a){let o=t.get(r);if(!Array.isArray(o))return;let s=[...o];[s[i],s[a]]=[s[a],s[i]],n(e,s)}}}function w(t){function n(e){let n=e;return p(n),t.store.get(n)}function r(){return t.cachedValues??=(0,e.unflattenPaths)(Object.fromEntries(t.store))}function i(e,n){t.baseline.get(e)===n?t.dirty.delete(e):t.dirty.add(e)}function a(e,n,r={}){t.ensureNotDisposed();let a=e;p(a),t.store.set(a,n),i(a,n),r.touched&&t.touched.add(a),t.requestNotify(a)}function o(e){let n=e;return p(n),t.getFieldSnapshot(n)}function s(e,n){t.ensureNotDisposed();let r=e;p(r),t.fieldErrors.set(r,n),t.invalidateErrors(),t.requestNotify(r)}function c(e){t.ensureNotDisposed();let n=e;p(n),t.fieldErrors.delete(n)&&(t.invalidateErrors(),t.requestNotify(n))}function l(e={}){t.ensureNotDisposed(),t.fieldErrors.clear();for(let[n,r]of Object.entries(e))p(n),typeof r==`string`&&t.fieldErrors.set(n,r);t.invalidateErrors(),t.requestNotify()}function d(e,n){/\.\d+(\.|$)/.test(e)&&!t.store.has(e)&&u(`${n}('${m(e,80)}'): path looks like an array item key. Array items are stored as whole arrays — register on the parent key instead.`)}function f(e,n){t.ensureNotDisposed();let r=e;p(r),d(r,`setValidator`),t.fieldCtrls.get(r)?.abort(),t.fieldCtrls.delete(r),n?t.validators.set(r,n):(t.validators.delete(r),t.fieldErrors.delete(r)&&(t.invalidateErrors(),t.requestNotify(r)))}function h(e,n={}){t.ensureNotDisposed();let r=e;return p(r),d(r,`fields.register`),n.validator!==void 0&&f(e,n.validator),n.defaultValue!==void 0&&!t.store.has(r)&&(t.store.set(r,n.defaultValue),t.baseline.set(r,n.defaultValue),t.requestNotify(r)),()=>{t.disposed||S(e)}}function g(){let e=new Set;for(let n of t.store.keys())e.add(n);for(let n of t.validators.keys())e.add(n);return Object.freeze([...e])}function _(e){t.ensureNotDisposed();let n=e;p(n),t.touched.add(n),t.requestNotify(n)}function v(e){t.ensureNotDisposed();let n=e;p(n),t.touched.delete(n)&&t.requestNotify(n)}function y(){t.ensureNotDisposed();for(let e of t.store.keys())t.touched.add(e);for(let e of t.validators.keys())t.touched.add(e);t.requestNotify()}function b(){t.ensureNotDisposed(),t.touched.clear(),t.requestNotify()}function x(e){t.ensureNotDisposed();let n=e;p(n),t.fieldCtrls.get(n)?.abort(),t.fieldCtrls.delete(n),t.store.set(n,t.baseline.get(n)),t.dirty.delete(n),t.touched.delete(n),t.fieldErrors.delete(n)&&t.invalidateErrors(),t.requestNotify(n)}function S(e){t.ensureNotDisposed();let n=e;p(n),t.store.delete(n),t.baseline.delete(n),t.dirty.delete(n),t.touched.delete(n),t.validators.delete(n),t.arrayCache.delete(n),t.fieldCtrls.get(n)?.abort(),t.fieldCtrls.delete(n),t.fieldErrors.delete(n)&&t.invalidateErrors(),t.requestNotify(n)}function w(){t.ensureNotDisposed();for(let e of t.runCtrls)e.abort();for(let e of t.fieldCtrls.values())e.abort();t.runCtrls.clear(),t.fieldCtrls.clear(),t.validatingRuns.clear(),t.store.clear(),t.fieldErrors.clear(),t.touched.clear(),t.dirty.clear(),t.submitCount=0,t.invalidateErrors();for(let[e,n]of t.baseline)t.store.set(e,n);t.requestNotify()}function T(n){t.ensureNotDisposed();for(let e of t.runCtrls)e.abort();for(let e of t.fieldCtrls.values())e.abort();t.runCtrls.clear(),t.fieldCtrls.clear(),t.validatingRuns.clear();let r=(0,e.flattenPaths)(n);t.store.clear(),t.baseline.clear(),t.fieldErrors.clear(),t.touched.clear(),t.dirty.clear(),t.submitCount=0,t.invalidateErrors();for(let[e,n]of Object.entries(r))t.store.set(e,n),t.baseline.set(e,n);t.requestNotify()}function E(n){t.ensureNotDisposed();let r=(0,e.flattenPaths)(n);for(let[e,n]of Object.entries(r))t.baseline.set(e,n),t.store.set(e,n),t.dirty.delete(e);t.requestNotify(Object.keys(r))}function D(e){t.ensureNotDisposed();let n=e;p(n);let r=t.arrayCache.get(n);if(r)return r;let i=C(e,t.store,a);return t.arrayCache.set(n,i),i}return{array:D,clearError:c,field:o,get:n,listFields:g,patch:E,registerField:h,removeField:S,replace:T,reset:w,resetErrors:l,resetField:x,set:a,setError:s,setValidator:f,touch:_,touchAll:y,untouch:v,untouchAll:b,values:r}}function T(e={}){let t=_(e),n=w(t),r=S(t,{touchAll:n.touchAll,values:n.values}),i=b(t,{set:n.set,touch:n.touch,validateFields:r.validateFields}),a=v(t);typeof e.defaultValues==`function`&&e.defaultValues().then(e=>{t.loadingState=!1,!t.disposed&&n.replace(e)}).catch(n=>{t.loadingState=!1,!t.disposed&&(u(`defaultValues factory rejected. Form will be empty. Error: ${m(String(n))}`),e.onLoadError?.(n),t.requestNotify())});let{listFields:o,registerField:s,removeField:c,setValidator:l,...d}=n,{runValidationCore:f,...p}=r,h={...d,...p,...i,...a,batch:t.batch,get disposalSignal(){return t.disposeController.signal},get disposed(){return t.disposed},fields:{list:o,register:s,remove:c,setValidator:l},get isLoading(){return t.loadingState},get isSubmitting(){return t.isSubmittingState},scope(e){let n=e,r=t.scopeCache.get(n);if(r)return r;let i=x({baseline:t.baseline,dirty:t.dirty,ensureNotDisposed:t.ensureNotDisposed,fieldCtrls:t.fieldCtrls,fieldErrors:t.fieldErrors,getStateSnapshot:t.getStateSnapshot,incrementSubmitCount:()=>{t.submitCount++},invalidateErrors:t.invalidateErrors,isDisposed:()=>t.disposed,isSubmitting:()=>t.isSubmittingState,requestNotify:t.requestNotify,root:h,runValidationCore:f,setSubmitting:e=>{t.isSubmittingState=e},store:t.store,touched:t.touched,validators:t.validators},e);return t.scopeCache.set(n,i),i},get state(){return t.getStateSnapshot()},subscribeScoped:i.subscribe,[Symbol.dispose](){this.dispose()}};return h}function E(t){let n=new FormData;for(let[r,i]of Object.entries((0,e.flattenPaths)(t)))if(i!=null)if(i instanceof File||i instanceof Blob)n.append(r,i);else if(i instanceof FileList)for(let e=0;e<i.length;e++)n.append(r,i[e]);else if(Array.isArray(i))for(let e of i)n.append(r,e instanceof File||e instanceof Blob?e:String(e));else n.append(r,String(i));return n}exports.FORM_ERROR=s,exports.ForgeConfigError=i,exports.ForgeDisposedError=r,exports.ForgeError=n,exports.ForgeSubmitError=a,exports.ForgeValidationError=o,exports.ValidationModes=c,exports.createForm=T,exports.toFormData=E;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@vielzeug/arsenal"),t=require("@vielzeug/ripple");var n=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},r=class extends n{constructor(){super(`Cannot modify a disposed form`)}},i=class extends n{},a=class extends n{},o=class extends n{errors;constructor(e){super(`Form validation failed`),this.errors=e}},s=`_form`,c={onBlur:{touchOnBlur:!0,validateOnBlur:!0},onChange:{touchOnBlur:!0,validateOnChange:!0},onSubmit:{},onTouched:{touchOnBlur:!0,validateOnBlur:!0,validateOnTouch:!0}},l=!globalThis.__FORGE_PROD__;function u(e){l&&console.warn(`[@vielzeug/forge] ${e}`)}function d(e){l&&e()}var f=new Set([`__proto__`,`constructor`,`prototype`]);function p(e){return e.split(`.`).every(e=>!f.has(e))}function m(e){if(g(e),!p(e))throw new i(`Unsafe key '${e}': segments __proto__, constructor, and prototype are reserved.`)}var h=new Set;function g(e){e.includes(`.`)&&(e.split(`.`).length<=5||h.has(e)||(h.add(e),d(()=>{u(`Path '${_(e,120)}' exceeds typed depth limits and may be treated as an untyped string path.`)})))}function _(e,t=200){return e.replace(/\p{C}/gu,`?`).slice(0,t)}function v(...e){let t=e.filter(e=>e!=null);if(t.length!==0)return t.length===1?t[0]:AbortSignal.any(t)}function y(e){if(!e)return;if(typeof e==`function`)return e;let t=e;return(e,n)=>{if(n?.aborted)return;let r=t.safeParse(e);if(r.success)return;let i={};for(let e of r.error.issues){let t=e.path.join(`.`)||`_form`;p(t)&&(i[t]||(i[t]=e.message))}return i}}function b(n){let i=new Map;for(let[e,t]of Object.entries(n.validators??{}))m(e),i.set(e,t);let a=y(n.validator),o=n.connect??{},s=typeof n.defaultValues==`function`,c=typeof n.defaultValues==`function`?void 0:n.defaultValues,l=new Map(Object.entries((0,e.flattenPaths)(c??{}))),u=new Map(l),d=new Map,f=new Set,p=new Set,h=new Map,g=new Set,_=new Map,v=new AbortController,b=null,x=null,S=new Map,C=new Map,w=new Map,T=!1,E=0,D=!1,O=new Map,k=new Set;function A(e){return O.has(e)||O.set(e,(0,t.signal)(L(e),{equals:(e,t)=>e.value===t.value&&e.error===t.error&&e.hasError===t.hasError&&e.touched===t.touched&&e.dirty===t.dirty})),O.get(e)}function j(){b=null}function M(){x=null}function N(){return x??=Object.freeze(Object.fromEntries(d))}function P(){return Object.freeze({errors:N(),isDirty:p.size>0,isLoading:s,isSubmitting:T,isTouched:f.size>0,isValid:d.size===0,isValidating:h.size>0,submitCount:E,touchedFields:Object.freeze([...f]),validatingFields:Object.freeze([...h.keys()])})}let F=(0,t.signal)(P());function I(){return F.value}function L(e){let t=d.get(e);return{dirty:p.has(e),error:t,hasError:t!==void 0,touched:f.has(e),value:u.get(e)}}function R(e){let t=S.get(e);if(t)return t;let n=Object.freeze(L(e));return S.set(e,n),n}function z(e){if(!D)if(j(),x=null,e===void 0)S.clear(),(0,t.batch)(()=>{F.value=P();for(let[e,t]of O)t.value=L(e)});else if(typeof e==`string`)S.delete(e),(0,t.batch)(()=>{F.value=P();let t=O.get(e);t&&(t.value=L(e))});else{let n=[...e];for(let e of n)S.delete(e);(0,t.batch)(()=>{F.value=P();for(let e of n){let t=O.get(e);t&&(t.value=L(e))}})}}function B(){if(D)throw new r}function V(e){B();try{(0,t.batch)(e)}catch(e){throw z(),e}}return{arrayCache:C,baseline:l,batch:V,buildFieldState:L,get cachedErrors(){return x},set cachedErrors(e){x=e},get cachedValues(){return b},set cachedValues(e){b=e},computeErrors:N,computeState:P,connectDefaults:o,dirty:p,disposeController:v,get disposed(){return D},set disposed(e){D=e},ensureNotDisposed:B,fieldCtrls:_,fieldErrors:d,fieldSignals:O,fieldStateCache:S,formStateSignal:F,formValidator:a,getFieldSnapshot:R,getOrCreateFieldSignal:A,getStateSnapshot:I,invalidateErrors:M,invalidateValues:j,get isSubmittingState(){return T},set isSubmittingState(e){T=e},get loadingState(){return s},set loadingState(e){s=e},requestNotify:z,rippleSubs:k,runCtrls:g,scopeCache:w,store:u,get submitCount(){return E},set submitCount(e){E=e},touched:f,validatingRuns:h,validators:i}}function x(e){function t(){e.disposed=!0,e.disposeController.abort();for(let t of e.fieldCtrls.values())t.abort();e.fieldCtrls.clear(),e.runCtrls.clear(),e.arrayCache.clear(),e.scopeCache.clear();for(let t of e.rippleSubs)t.dispose();e.rippleSubs.clear(),e.fieldSignals.clear()}function n(){return e.ensureNotDisposed(),Object.freeze({baseline:Object.freeze(Object.fromEntries(e.baseline)),dirty:Object.freeze([...e.dirty]),errors:Object.freeze(Object.fromEntries(e.fieldErrors)),store:Object.freeze(Object.fromEntries(e.store)),submitCount:e.submitCount,touched:Object.freeze([...e.touched])})}function r(t){e.ensureNotDisposed();for(let t of e.runCtrls)t.abort();for(let t of e.fieldCtrls.values())t.abort();e.runCtrls.clear(),e.fieldCtrls.clear(),e.validatingRuns.clear(),e.store.clear(),e.baseline.clear(),e.fieldErrors.clear(),e.touched.clear(),e.dirty.clear();for(let[n,r]of Object.entries(t.store))p(n)&&e.store.set(n,r);for(let[n,r]of Object.entries(t.baseline))p(n)&&e.baseline.set(n,r);for(let[n,r]of Object.entries(t.errors))p(n)&&e.fieldErrors.set(n,r);for(let n of t.touched)p(n)&&e.touched.add(n);for(let n of t.dirty)p(n)&&e.dirty.add(n);e.submitCount=t.submitCount,e.invalidateErrors(),e.invalidateValues(),e.requestNotify()}return{dispose:t,restore:r,snapshot:n}}function S(e){let t=[],n=null,r=null,i=!1,a=null;function o(e){if(!i)if(n){let t=n;n=null,r=null,t({done:!1,value:e})}else t.push(e)}function s(e){if(!i)if(i=!0,r){let t=r;n=null,r=null,t(e)}else a={err:e}}function c(){if(!i&&(i=!0,n)){let e=n;n=null,r=null,e({done:!0,value:void 0})}}function l(){i||(t=[],c(),e?.())}return{fail:s,finish:c,iterator:{next(){if(a){let{err:e}=a;return a=null,Promise.reject(e)}return t.length>0?Promise.resolve({done:!1,value:t.shift()}):i?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>{n=e,r=t})},return(){return l(),Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}},push:o,terminate:l}}function C(n,r){function i(e,r){if(n.disposed)return()=>{};let i=(0,t.watch)(n.formStateSignal,t=>{e(t)});return n.rippleSubs.add(i),r?.sync&&e(n.formStateSignal.value),()=>{i.dispose(),n.rippleSubs.delete(i)}}function a(e,r,i){if(n.disposed)return()=>{};let a=e;m(a);let o=n.getOrCreateFieldSignal(a),s=(0,t.watch)(o,e=>{r(e)});return n.rippleSubs.add(s),i?.sync&&r(o.value),()=>{s.dispose(),n.rippleSubs.delete(s)}}function o(t,i){n.ensureNotDisposed();let a=t;m(a);let o=i?.touchOnBlur??n.connectDefaults.touchOnBlur??!1,s=i?.validateOnBlur??n.connectDefaults.validateOnBlur??!1,c=i?.validateOnChange??n.connectDefaults.validateOnChange??!1,l=i?.validateOnTouch??n.connectDefaults.validateOnTouch??!1,u=i?.debounce??n.connectDefaults.debounce??0,d=null;function f(){u>0?(d!==null&&clearTimeout(d),d=setTimeout(()=>{d=null,!n.disposed&&r.validateFields([t]).catch(t=>{if(!(0,e.isAbortError)(t))throw t})},u)):r.validateFields([t]).catch(t=>{if(!(0,e.isAbortError)(t))throw t})}let p=!1;return{get dirty(){return n.dirty.has(a)},dispose(){p=!0,d!==null&&(clearTimeout(d),d=null)},get disposed(){return p},get error(){return n.fieldErrors.get(a)},onBlur:()=>{n.disposed||(o&&r.touch(t),s&&f())},onChange:e=>{n.disposed||(r.set(t,e),(c||l&&n.touched.has(a))&&f())},[Symbol.dispose](){this.dispose()},get touched(){return n.touched.has(a)},get value(){return n.store.get(a)}}}function s(){let e=S(()=>t());e.push(n.getStateSnapshot());let t=i(t=>{e.push(t)});return n.disposeController.signal.addEventListener(`abort`,()=>e.terminate(),{once:!0}),e.iterator}return{connect:o,subscribe:i,subscribeField:a,[Symbol.asyncIterator]:s}}function w(t,n){let r=`${n}.`;function i(e){return`${n}.${e}`}function s(e){return e===n||e.startsWith(r)}function c(e){return e.startsWith(r)?e.slice(r.length):e}function l(){let e=t.getStateSnapshot(),n=Object.fromEntries(Object.entries(e.errors).filter(([e])=>s(e)).map(([e,t])=>[c(e),t])),r=e.touchedFields.filter(s).map(c),i=e.validatingFields.filter(s).map(c),a=Object.keys(n).length===0,o=[...t.dirty].some(s),l=[...t.touched].some(s),u=i.length>0;return Object.freeze({errors:Object.freeze(n),isDirty:o,isLoading:e.isLoading,isSubmitting:e.isSubmitting,isTouched:l,isValid:a,isValidating:u,submitCount:e.submitCount,touchedFields:Object.freeze(r),validatingFields:Object.freeze(i)})}function u(){let n={};for(let[e,i]of t.store)e.startsWith(r)&&(n[e.slice(r.length)]=i);return(0,e.unflattenPaths)(n)}function d(){let e=new Set;for(let n of t.store.keys())s(n)&&e.add(c(n));for(let n of t.validators.keys())s(n)&&e.add(c(n));return Object.freeze([...e])}function f(){t.ensureNotDisposed();for(let e of t.store.keys())s(e)&&t.touched.add(e);for(let e of t.validators.keys())s(e)&&t.touched.add(e);t.requestNotify()}function p(){t.ensureNotDisposed();for(let e of[...t.touched])s(e)&&t.touched.delete(e);t.requestNotify()}function m(){t.ensureNotDisposed();for(let e of[...t.store.keys()])s(e)&&(t.fieldCtrls.get(e)?.abort(),t.fieldCtrls.delete(e),t.store.set(e,t.baseline.get(e)),t.dirty.delete(e),t.touched.delete(e),t.fieldErrors.delete(e)&&t.invalidateErrors());t.requestNotify()}function h(n){t.ensureNotDisposed();for(let e of[...t.fieldCtrls.keys()])s(e)&&(t.fieldCtrls.get(e)?.abort(),t.fieldCtrls.delete(e));let r=(0,e.flattenPaths)(n);for(let e of[...t.store.keys()])s(e)&&(t.store.delete(e),t.baseline.delete(e),t.dirty.delete(e),t.touched.delete(e),t.fieldErrors.delete(e));t.invalidateErrors();for(let[e,n]of Object.entries(r)){let r=i(e);t.store.set(r,n),t.baseline.set(r,n)}t.requestNotify()}function g(n){t.ensureNotDisposed();let r=(0,e.flattenPaths)(n),a=[];for(let[e,n]of Object.entries(r)){let r=i(e);t.baseline.set(r,n),t.store.set(r,n),t.dirty.delete(r),a.push(r)}t.requestNotify(a)}function _(e){t.ensureNotDisposed();for(let e of[...t.fieldErrors.keys()])s(e)&&t.fieldErrors.delete(e);if(e)for(let[n,r]of Object.entries(e))typeof r==`string`&&t.fieldErrors.set(i(n),r);t.invalidateErrors(),t.requestNotify()}async function v(e,n){if(t.ensureNotDisposed(),e!==void 0&&!Array.isArray(e)&&!(e instanceof AbortSignal)){let r=i(e);await t.runValidationCore([r],`partial`,n);let a=t.fieldErrors.get(r);return{errors:a===void 0?{}:{[e]:a},valid:a===void 0}}if(Array.isArray(e)){let r=e.map(e=>i(e));await t.runValidationCore(r,`partial`,n);let a={};for(let e of r){let n=t.fieldErrors.get(e);n!==void 0&&(a[c(e)]=n)}return{errors:a,valid:Object.keys(a).length===0}}let r=e,a=[...t.validators.keys()].filter(s);await t.runValidationCore(a,`partial`,r);let o={};for(let[e,n]of t.fieldErrors)s(e)&&(o[c(e)]=n);return{errors:o,valid:Object.keys(o).length===0}}async function y(e){if(t.ensureNotDisposed(),t.isSubmitting())throw new a(`submit() called while a submission is already in progress`);t.root.batch(()=>{t.incrementSubmitCount(),t.setSubmitting(!0),f()});try{let n=[...t.validators.keys()].filter(s);await t.runValidationCore(n,`partial`),t.ensureNotDisposed();let r={};for(let[e,n]of t.fieldErrors)s(e)&&(r[c(e)]=n);return Object.keys(r).length>0?{errors:r,ok:!1,type:`validation`}:{ok:!0,value:await e(u())}}finally{t.setSubmitting(!1),t.isDisposed()||t.requestNotify()}}function b(e,n){let r=null;return t.root.subscribe(()=>{let t=l();if(r){let e=r,n=Object.keys(t.errors),i=Object.keys(e.errors),a=n.length===i.length&&n.every(n=>t.errors[n]===e.errors[n]),o=t.touchedFields.length===e.touchedFields.length&&t.touchedFields.every((t,n)=>t===e.touchedFields[n]),s=t.validatingFields.length===e.validatingFields.length&&t.validatingFields.every((t,n)=>t===e.validatingFields[n]);if(t.isDirty===e.isDirty&&t.isLoading===e.isLoading&&t.isSubmitting===e.isSubmitting&&t.isTouched===e.isTouched&&t.isValid===e.isValid&&t.isValidating===e.isValidating&&t.submitCount===e.submitCount&&a&&o&&s)return}r=t,e(t)},n)}function x(){return{array(e){return t.root.array(i(e))},clearError(e){t.root.clearError(i(e))},connect(e,n){return t.root.connect(i(e),n)},field(e){return t.root.field(i(e))},get(e){return t.root.get(i(e))},register(e,n){return t.root.fields.register(i(e),n)},remove(e){t.root.fields.remove(i(e))},resetField(e){t.root.resetField(i(e))},set(e,n,r){t.root.set(i(e),n,r)},setError(e,n){t.root.setError(i(e),n)},setValidator(e,n){t.root.fields.setValidator(i(e),n)},subscribeField(e,n,r){return t.root.subscribeField(i(e),n,r)},touch(e){t.root.touch(i(e))},untouch(e){t.root.untouch(i(e))}}}let S=x();return{array:e=>S.array(e),batch:e=>t.root.batch(e),clearError:e=>S.clearError(e),connect:(e,t)=>S.connect(e,t),get disposalSignal(){return t.root.disposalSignal},dispose:()=>{},get disposed(){return t.isDisposed()},field:e=>S.field(e),fields:{list:d,register:(e,t)=>S.register(e,t),remove:e=>S.remove(e),setValidator:(e,t)=>S.setValidator(e,t)},get:e=>S.get(e),get isLoading(){return t.root.isLoading},get isSubmitting(){return t.root.isSubmitting},patch:g,replace:h,reset:m,resetErrors:_,resetField:e=>S.resetField(e),restore:e=>t.root.restore(e),scope:e=>w(t,i(e)),set:(e,t,n)=>S.set(e,t,n),setError:(e,t)=>S.setError(e,t),snapshot:()=>t.root.snapshot(),get state(){return l()},submit:y,submitOrThrow:async e=>{let t=await y(e);if(!t.ok)throw new o(t.errors);return t.value},subscribe:(e,n)=>t.root.subscribe(e,n),subscribeField:(e,t,n)=>S.subscribeField(e,t,n),subscribeScoped:b,[Symbol.asyncIterator]:()=>t.root[Symbol.asyncIterator](),[Symbol.dispose](){this.dispose()},touch:e=>S.touch(e),touchAll:f,untouch:e=>S.untouch(e),untouchAll:p,validate:v,validateStream(e){let n=t.root.validateStream(e);return{async next(){for(;;){let e=await n.next();if(e.done)return e;if(s(e.value.field))return{done:!1,value:{error:e.value.error,field:c(e.value.field)}}}},return(){return n.return?n.return():Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}},values:u}}function T(t,n){async function r(e,n){let r=t.validators.get(e);if(!r)return;if(n.aborted)throw n.reason;let i=await r(t.store.get(e),n);return typeof i==`string`?i:void 0}async function i(e){if(!t.formValidator)return{};if(e.aborted)throw e.reason;let r=await t.formValidator(n.values(),e),i={};if(r)for(let[e,t]of Object.entries(r))p(e)&&typeof t==`string`&&(i[e]=t);return i}function c(e,n,r,i){if(i===`full`){t.fieldErrors.clear();for(let[e,t]of Object.entries(r))n[e]===void 0&&(n[e]=t);for(let[e,r]of Object.entries(n))t.fieldErrors.set(e,r);t.invalidateErrors(),t.requestNotify()}else{let r=new Set;for(let i of e){let e=n[i],a=t.fieldErrors.get(i);e===void 0?t.fieldErrors.delete(i)&&r.add(i):(t.fieldErrors.set(i,e),a!==e&&r.add(i))}r.size>0&&t.invalidateErrors(),t.requestNotify(r)}}async function l(n,a,o){let s=new Set(n),l=new Map;for(let e of s){t.fieldCtrls.get(e)?.abort();let n=new AbortController;t.fieldCtrls.set(e,n),l.set(e,n)}let u=new AbortController,d=v(u.signal,o,t.disposeController.signal);t.runCtrls.add(u);let f=Symbol();for(let e of s){let n=t.validatingRuns.get(e);n||(n=new Set,t.validatingRuns.set(e,n)),n.add(f)}t.requestNotify();try{let e=await Promise.all([...s].map(async e=>[e,await r(e,a===`partial`?v(l.get(e).signal,d):d)]));if(d.aborted)return{aborted:!0,errors:Object.fromEntries(t.fieldErrors),valid:t.fieldErrors.size===0};let n={};for(let[t,r]of e)r!==void 0&&(n[t]=r);return c(s,n,a===`full`?await i(d):{},a),{aborted:!1,errors:Object.fromEntries(t.fieldErrors),valid:t.fieldErrors.size===0}}catch(n){if((0,e.isAbortError)(n))return{aborted:!0,errors:Object.fromEntries(t.fieldErrors),valid:t.fieldErrors.size===0};throw n}finally{t.runCtrls.delete(u);for(let e of s){let n=t.validatingRuns.get(e);n&&(n.delete(f),n.size===0&&t.validatingRuns.delete(e))}t.requestNotify();for(let[e,n]of l)t.fieldCtrls.get(e)===n&&t.fieldCtrls.delete(e)}}async function u(e,n){t.ensureNotDisposed();let r=await l(e,`partial`,n);return{errors:r.errors,valid:r.valid}}async function d(e,n){if(t.ensureNotDisposed(),e===void 0||e instanceof AbortSignal){let n=await l([...t.validators.keys()],`full`,e);return{errors:n.errors,valid:n.valid}}if(Array.isArray(e))return u(e,n);await u([e],n);let r=e,i=t.fieldErrors.get(r);return{errors:i===void 0?{}:{[r]:i},valid:i===void 0}}async function f(e){let t=await m(e);if(!t.ok)throw new o(t.errors);return t.value}async function m(e){if(t.ensureNotDisposed(),t.isSubmittingState)throw new a(`submit() called while a submission is already in progress`);t.batch(()=>{t.submitCount++,t.isSubmittingState=!0,n.touchAll()});try{let r=await l([...t.validators.keys()],`full`);return t.ensureNotDisposed(),r.valid?{ok:!0,value:await e(n.values())}:{errors:r.errors,ok:!1,type:`validation`}}finally{t.isSubmittingState=!1,t.disposed||t.requestNotify()}}function h(n){t.ensureNotDisposed();let a=[...t.validators.keys()],o=new AbortController,c=n?v(o.signal,n,t.disposeController.signal):v(o.signal,t.disposeController.signal),l=S(()=>o.abort());return Promise.all(a.map(async t=>{if(!c.aborted)try{let e=await r(t,c);c.aborted||l.push({error:e,field:t})}catch(t){if(!(0,e.isAbortError)(t))throw t}})).then(async()=>{if(t.formValidator&&!c.aborted)try{let e=await i(c);if(!c.aborted){let t=new Set([s,...Object.keys(e)]);for(let n of t)l.push({error:e[n],field:n})}}catch{}}).catch(t=>{(0,e.isAbortError)(t)||(o.abort(),l.fail(t))}).finally(()=>{o.abort(),l.finish()}),l.iterator}return{runValidationCore:l,submit:m,submitOrThrow:f,validate:d,validateFields:u,validateStream:h}}function E(e,t,n){let r=e;return{append(i){let a=t.get(r);a!==void 0&&!Array.isArray(a)||n(e,Array.isArray(a)?[...a,i]:[i])},insert(i,a){let o=t.get(r);if(!Array.isArray(o))return;let s=[...o];s.splice(i,0,a),n(e,s)},move(i,a){let o=t.get(r);if(!Array.isArray(o))return;let s=[...o];s.splice(a,0,s.splice(i,1)[0]),n(e,s)},prepend(i){let a=t.get(r);a!==void 0&&!Array.isArray(a)||n(e,Array.isArray(a)?[i,...a]:[i])},remove(i){let a=t.get(r);Array.isArray(a)&&n(e,a.filter((e,t)=>t!==i))},replace(i,a){let o=t.get(r);if(!Array.isArray(o))return;let s=[...o];s[i]=a,n(e,s)},swap(i,a){let o=t.get(r);if(!Array.isArray(o))return;let s=[...o];[s[i],s[a]]=[s[a],s[i]],n(e,s)}}}function D(t){function n(e){let n=e;return m(n),t.store.get(n)}function r(){return t.cachedValues??=(0,e.unflattenPaths)(Object.fromEntries(t.store))}function i(e,n){t.baseline.get(e)===n?t.dirty.delete(e):t.dirty.add(e)}function a(e,n,r={}){t.ensureNotDisposed();let a=e;m(a),t.store.set(a,n),i(a,n),r.touched&&t.touched.add(a),t.requestNotify(a)}function o(e){let n=e;return m(n),t.getFieldSnapshot(n)}function s(e,n){t.ensureNotDisposed();let r=e;m(r),t.fieldErrors.set(r,n),t.invalidateErrors(),t.requestNotify(r)}function c(e){t.ensureNotDisposed();let n=e;m(n),t.fieldErrors.delete(n)&&(t.invalidateErrors(),t.requestNotify(n))}function l(e={}){t.ensureNotDisposed(),t.fieldErrors.clear();for(let[n,r]of Object.entries(e))m(n),typeof r==`string`&&t.fieldErrors.set(n,r);t.invalidateErrors(),t.requestNotify()}function d(e,n){/\.\d+(\.|$)/.test(e)&&!t.store.has(e)&&u(`${n}('${_(e,80)}'): path looks like an array item key. Array items are stored as whole arrays — register on the parent key instead.`)}function f(e,n){t.ensureNotDisposed();let r=e;m(r),d(r,`setValidator`),t.fieldCtrls.get(r)?.abort(),t.fieldCtrls.delete(r),n?t.validators.set(r,n):(t.validators.delete(r),t.fieldErrors.delete(r)&&(t.invalidateErrors(),t.requestNotify(r)))}function p(e,n={}){t.ensureNotDisposed();let r=e;return m(r),d(r,`fields.register`),n.validator!==void 0&&f(e,n.validator),n.defaultValue!==void 0&&!t.store.has(r)&&(t.store.set(r,n.defaultValue),t.baseline.set(r,n.defaultValue),t.requestNotify(r)),()=>{t.disposed||S(e)}}function h(){let e=new Set;for(let n of t.store.keys())e.add(n);for(let n of t.validators.keys())e.add(n);return Object.freeze([...e])}function g(e){t.ensureNotDisposed();let n=e;m(n),t.touched.add(n),t.requestNotify(n)}function v(e){t.ensureNotDisposed();let n=e;m(n),t.touched.delete(n)&&t.requestNotify(n)}function y(){t.ensureNotDisposed();for(let e of t.store.keys())t.touched.add(e);for(let e of t.validators.keys())t.touched.add(e);t.requestNotify()}function b(){t.ensureNotDisposed(),t.touched.clear(),t.requestNotify()}function x(e){t.ensureNotDisposed();let n=e;m(n),t.fieldCtrls.get(n)?.abort(),t.fieldCtrls.delete(n),t.store.set(n,t.baseline.get(n)),t.dirty.delete(n),t.touched.delete(n),t.fieldErrors.delete(n)&&t.invalidateErrors(),t.requestNotify(n)}function S(e){t.ensureNotDisposed();let n=e;m(n),t.store.delete(n),t.baseline.delete(n),t.dirty.delete(n),t.touched.delete(n),t.validators.delete(n),t.arrayCache.delete(n),t.fieldCtrls.get(n)?.abort(),t.fieldCtrls.delete(n),t.fieldErrors.delete(n)&&t.invalidateErrors(),t.requestNotify(n)}function C(){t.ensureNotDisposed();for(let e of t.runCtrls)e.abort();for(let e of t.fieldCtrls.values())e.abort();t.runCtrls.clear(),t.fieldCtrls.clear(),t.validatingRuns.clear(),t.store.clear(),t.fieldErrors.clear(),t.touched.clear(),t.dirty.clear(),t.submitCount=0,t.invalidateErrors();for(let[e,n]of t.baseline)t.store.set(e,n);t.requestNotify()}function w(n){t.ensureNotDisposed();for(let e of t.runCtrls)e.abort();for(let e of t.fieldCtrls.values())e.abort();t.runCtrls.clear(),t.fieldCtrls.clear(),t.validatingRuns.clear();let r=(0,e.flattenPaths)(n);t.store.clear(),t.baseline.clear(),t.fieldErrors.clear(),t.touched.clear(),t.dirty.clear(),t.submitCount=0,t.invalidateErrors();for(let[e,n]of Object.entries(r))t.store.set(e,n),t.baseline.set(e,n);t.requestNotify()}function T(n){t.ensureNotDisposed();let r=(0,e.flattenPaths)(n);for(let[e,n]of Object.entries(r))t.baseline.set(e,n),t.store.set(e,n),t.dirty.delete(e);t.requestNotify(Object.keys(r))}function D(e){t.ensureNotDisposed();let n=e;m(n);let r=t.arrayCache.get(n);if(r)return r;let i=E(e,t.store,a);return t.arrayCache.set(n,i),i}return{array:D,clearError:c,field:o,get:n,listFields:h,patch:T,registerField:p,removeField:S,replace:w,reset:C,resetErrors:l,resetField:x,set:a,setError:s,setValidator:f,touch:g,touchAll:y,untouch:v,untouchAll:b,values:r}}function O(e={}){let t=b(e),n=D(t),r=T(t,{touchAll:n.touchAll,values:n.values}),i=C(t,{set:n.set,touch:n.touch,validateFields:r.validateFields}),a=x(t);typeof e.defaultValues==`function`&&e.defaultValues().then(e=>{t.loadingState=!1,!t.disposed&&n.replace(e)}).catch(n=>{t.loadingState=!1,!t.disposed&&(u(`defaultValues factory rejected. Form will be empty. Error: ${_(String(n))}`),e.onLoadError?.(n),t.requestNotify())});let{listFields:o,registerField:s,removeField:c,setValidator:l,...d}=n,{runValidationCore:f,...p}=r,m={...d,...p,...i,...a,batch:t.batch,get disposalSignal(){return t.disposeController.signal},get disposed(){return t.disposed},fields:{list:o,register:s,remove:c,setValidator:l},get isLoading(){return t.loadingState},get isSubmitting(){return t.isSubmittingState},scope(e){let n=e,r=t.scopeCache.get(n);if(r)return r;let i=w({baseline:t.baseline,dirty:t.dirty,ensureNotDisposed:t.ensureNotDisposed,fieldCtrls:t.fieldCtrls,fieldErrors:t.fieldErrors,getStateSnapshot:t.getStateSnapshot,incrementSubmitCount:()=>{t.submitCount++},invalidateErrors:t.invalidateErrors,isDisposed:()=>t.disposed,isSubmitting:()=>t.isSubmittingState,requestNotify:t.requestNotify,root:m,runValidationCore:f,setSubmitting:e=>{t.isSubmittingState=e},store:t.store,touched:t.touched,validators:t.validators},e);return t.scopeCache.set(n,i),i},get state(){return t.getStateSnapshot()},subscribeScoped:i.subscribe,[Symbol.dispose](){this.dispose()}};return m}function k(t){let n=new FormData;for(let[r,i]of Object.entries((0,e.flattenPaths)(t)))if(i!=null)if(i instanceof File||i instanceof Blob)n.append(r,i);else if(i instanceof FileList)for(let e=0;e<i.length;e++)n.append(r,i[e]);else if(Array.isArray(i))for(let e of i)n.append(r,e instanceof File||e instanceof Blob?e:String(e));else n.append(r,String(i));return n}exports.FORM_ERROR=s,exports.ForgeConfigError=i,exports.ForgeDisposedError=r,exports.ForgeError=n,exports.ForgeSubmitError=a,exports.ForgeValidationError=o,exports.ValidationModes=c,exports.createForm=O,exports.toFormData=k;
|
|
2
2
|
//# sourceMappingURL=forge.cjs.map
|