@vielzeug/forge 1.3.0 → 1.4.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/dist/_utils.cjs +1 -1
- package/dist/_utils.cjs.map +1 -1
- package/dist/_utils.d.ts.map +1 -1
- package/dist/_utils.js +1 -0
- package/dist/_utils.js.map +1 -1
- package/dist/core/array.cjs +1 -1
- package/dist/core/array.cjs.map +1 -1
- package/dist/core/array.d.ts.map +1 -1
- package/dist/core/array.js +63 -32
- package/dist/core/array.js.map +1 -1
- package/dist/core/asyncQueue.cjs.map +1 -1
- package/dist/core/asyncQueue.d.ts +2 -2
- package/dist/core/asyncQueue.js.map +1 -1
- package/dist/core/context.cjs +1 -1
- package/dist/core/context.cjs.map +1 -1
- package/dist/core/context.d.ts +2 -5
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +72 -109
- package/dist/core/context.js.map +1 -1
- package/dist/core/fields.cjs +2 -0
- package/dist/core/fields.cjs.map +1 -0
- package/dist/core/fields.d.ts +52 -0
- package/dist/core/fields.d.ts.map +1 -0
- package/dist/core/fields.js +310 -0
- package/dist/core/fields.js.map +1 -0
- package/dist/core/lifecycle.cjs +1 -1
- package/dist/core/lifecycle.cjs.map +1 -1
- package/dist/core/lifecycle.d.ts +3 -1
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +10 -14
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core/notifier.cjs +2 -0
- package/dist/core/notifier.cjs.map +1 -0
- package/dist/core/notifier.d.ts +33 -0
- package/dist/core/notifier.d.ts.map +1 -0
- package/dist/core/notifier.js +78 -0
- package/dist/core/notifier.js.map +1 -0
- package/dist/core/observe.cjs +1 -1
- package/dist/core/observe.cjs.map +1 -1
- package/dist/core/observe.d.ts +8 -6
- package/dist/core/observe.d.ts.map +1 -1
- package/dist/core/observe.js +34 -45
- package/dist/core/observe.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 +6 -3
- package/dist/core/scope.d.ts.map +1 -1
- package/dist/core/scope.js +105 -156
- package/dist/core/scope.js.map +1 -1
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +3 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -2
- package/dist/errors.js.map +1 -1
- 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.cjs.map +1 -1
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +45 -56
- package/dist/form.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +4 -4
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +53 -36
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/package.json +4 -4
- package/dist/core/validation.cjs +0 -2
- package/dist/core/validation.cjs.map +0 -1
- package/dist/core/validation.d.ts +0 -23
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/validation.js +0 -173
- package/dist/core/validation.js.map +0 -1
- package/dist/core/values.cjs +0 -2
- package/dist/core/values.cjs.map +0 -1
- package/dist/core/values.d.ts +0 -31
- package/dist/core/values.d.ts.map +0 -1
- package/dist/core/values.js +0 -149
- package/dist/core/values.js.map +0 -1
package/dist/forge.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{flattenPaths as e,isAbortError as t,unflattenPaths as n}from"@vielzeug/arsenal";import{batch as r,signal as i,watch as a}from"@vielzeug/ripple";var o=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}},s=class extends o{constructor(){super(`Cannot modify a disposed form`)}},c=class extends o{},l=class extends o{},u=class extends o{errors;constructor(e){super(`Form validation failed`),this.errors=e}},d=`_form`,f={onBlur:{touchOnBlur:!0,validateOnBlur:!0},onChange:{touchOnBlur:!0,validateOnChange:!0},onSubmit:{},onTouched:{touchOnBlur:!0,validateOnBlur:!0,validateOnTouch:!0}},p=!globalThis.__FORGE_PROD__;function m(e){p&&console.warn(`[@vielzeug/forge] ${e}`)}function h(e){p&&e()}var g=new Set([`__proto__`,`constructor`,`prototype`]);function _(e){return e.split(`.`).every(e=>!g.has(e))}function v(e){if(b(e),!_(e))throw new c(`Unsafe key '${e}': segments __proto__, constructor, and prototype are reserved.`)}var y=new Set;function b(e){e.includes(`.`)&&(e.split(`.`).length<=5||y.has(e)||(y.add(e),h(()=>{m(`Path '${x(e,120)}' exceeds typed depth limits and may be treated as an untyped string path.`)})))}function x(e,t=200){return e.replace(/\p{C}/gu,`?`).slice(0,t)}function S(...e){let t=e.filter(e=>e!=null);if(t.length!==0)return t.length===1?t[0]:AbortSignal.any(t)}function C(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`;_(t)&&(i[t]||(i[t]=e.message))}return i}}function w(t){let n=new Map;for(let[e,r]of Object.entries(t.validators??{}))v(e),n.set(e,r);let a=C(t.validator),o=t.connect??{},c=typeof t.defaultValues==`function`,l=typeof t.defaultValues==`function`?void 0:t.defaultValues,u=new Map(Object.entries(e(l??{}))),d=new Map(u),f=new Map,p=new Set,m=new Set,h=new Map,g=new Set,_=new Map,y=new AbortController,b=null,x=null,S=new Map,w=new Map,T=new Map,E=!1,D=0,O=!1,k=new Map,A=new Set;function j(e){return k.has(e)||k.set(e,i(R(e),{equals:(e,t)=>e.value===t.value&&e.error===t.error&&e.hasError===t.hasError&&e.touched===t.touched&&e.dirty===t.dirty})),k.get(e)}function M(){b=null}function N(){x=null}function P(){return x??=Object.freeze(Object.fromEntries(f))}function F(){return Object.freeze({errors:P(),isDirty:m.size>0,isLoading:c,isSubmitting:E,isTouched:p.size>0,isValid:f.size===0,isValidating:h.size>0,submitCount:D,touchedFields:Object.freeze([...p]),validatingFields:Object.freeze([...h.keys()])})}let I=i(F());function L(){return I.value}function R(e){let t=f.get(e);return{dirty:m.has(e),error:t,hasError:t!==void 0,touched:p.has(e),value:d.get(e)}}function z(e){let t=S.get(e);if(t)return t;let n=Object.freeze(R(e));return S.set(e,n),n}function B(e){if(!O)if(M(),x=null,e===void 0)S.clear(),r(()=>{I.value=F();for(let[e,t]of k)t.value=R(e)});else if(typeof e==`string`)S.delete(e),r(()=>{I.value=F();let t=k.get(e);t&&(t.value=R(e))});else{let t=[...e];for(let e of t)S.delete(e);r(()=>{I.value=F();for(let e of t){let t=k.get(e);t&&(t.value=R(e))}})}}function V(){if(O)throw new s}function H(e){V();try{r(e)}catch(e){throw B(),e}}return{arrayCache:w,baseline:u,batch:H,buildFieldState:R,get cachedErrors(){return x},set cachedErrors(e){x=e},get cachedValues(){return b},set cachedValues(e){b=e},computeErrors:P,computeState:F,connectDefaults:o,dirty:m,disposeController:y,get disposed(){return O},set disposed(e){O=e},ensureNotDisposed:V,fieldCtrls:_,fieldErrors:f,fieldSignals:k,fieldStateCache:S,formStateSignal:I,formValidator:a,getFieldSnapshot:z,getOrCreateFieldSignal:j,getStateSnapshot:L,invalidateErrors:N,invalidateValues:M,get isSubmittingState(){return E},set isSubmittingState(e){E=e},get loadingState(){return c},set loadingState(e){c=e},requestNotify:B,rippleSubs:A,runCtrls:g,scopeCache:T,store:d,get submitCount(){return D},set submitCount(e){D=e},touched:p,validatingRuns:h,validators:n}}function T(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))_(n)&&e.store.set(n,r);for(let[n,r]of Object.entries(t.baseline))_(n)&&e.baseline.set(n,r);for(let[n,r]of Object.entries(t.errors))_(n)&&e.fieldErrors.set(n,r);for(let n of t.touched)_(n)&&e.touched.add(n);for(let n of t.dirty)_(n)&&e.dirty.add(n);e.submitCount=t.submitCount,e.invalidateErrors(),e.invalidateValues(),e.requestNotify()}return{dispose:t,restore:r,snapshot:n}}function E(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 D(e,n){function r(t,n){if(e.disposed)return()=>{};let r=a(e.formStateSignal,e=>{t(e)});return e.rippleSubs.add(r),n?.sync&&t(e.formStateSignal.value),()=>{r.dispose(),e.rippleSubs.delete(r)}}function i(t,n,r){if(e.disposed)return()=>{};let i=t;v(i);let o=e.getOrCreateFieldSignal(i),s=a(o,e=>{n(e)});return e.rippleSubs.add(s),r?.sync&&n(o.value),()=>{s.dispose(),e.rippleSubs.delete(s)}}function o(r,i){e.ensureNotDisposed();let a=r;v(a);let o=i?.touchOnBlur??e.connectDefaults.touchOnBlur??!1,s=i?.validateOnBlur??e.connectDefaults.validateOnBlur??!1,c=i?.validateOnChange??e.connectDefaults.validateOnChange??!1,l=i?.validateOnTouch??e.connectDefaults.validateOnTouch??!1,u=i?.debounce??e.connectDefaults.debounce??0,d=null;function f(){u>0?(d!==null&&clearTimeout(d),d=setTimeout(()=>{d=null,!e.disposed&&n.validateFields([r]).catch(e=>{if(!t(e))throw e})},u)):n.validateFields([r]).catch(e=>{if(!t(e))throw e})}let p=!1;return{get dirty(){return e.dirty.has(a)},dispose(){p=!0,d!==null&&(clearTimeout(d),d=null)},get disposed(){return p},get error(){return e.fieldErrors.get(a)},onBlur:()=>{e.disposed||(o&&n.touch(r),s&&f())},onChange:t=>{e.disposed||(n.set(r,t),(c||l&&e.touched.has(a))&&f())},[Symbol.dispose](){this.dispose()},get touched(){return e.touched.has(a)},get value(){return e.store.get(a)}}}function s(){let t=E(()=>n());t.push(e.getStateSnapshot());let n=r(e=>{t.push(e)});return e.disposeController.signal.addEventListener(`abort`,()=>t.terminate(),{once:!0}),t.iterator}return{connect:o,subscribe:r,subscribeField:i,[Symbol.asyncIterator]:s}}function O(t,r){let i=`${r}.`;function a(e){return`${r}.${e}`}function o(e){return e===r||e.startsWith(i)}function s(e){return e.startsWith(i)?e.slice(i.length):e}function c(){let e=t.getStateSnapshot(),n=Object.fromEntries(Object.entries(e.errors).filter(([e])=>o(e)).map(([e,t])=>[s(e),t])),r=e.touchedFields.filter(o).map(s),i=e.validatingFields.filter(o).map(s),a=Object.keys(n).length===0,c=[...t.dirty].some(o),l=[...t.touched].some(o),u=i.length>0;return Object.freeze({errors:Object.freeze(n),isDirty:c,isLoading:e.isLoading,isSubmitting:e.isSubmitting,isTouched:l,isValid:a,isValidating:u,submitCount:e.submitCount,touchedFields:Object.freeze(r),validatingFields:Object.freeze(i)})}function d(){let e={};for(let[n,r]of t.store)n.startsWith(i)&&(e[n.slice(i.length)]=r);return n(e)}function f(){let e=new Set;for(let n of t.store.keys())o(n)&&e.add(s(n));for(let n of t.validators.keys())o(n)&&e.add(s(n));return Object.freeze([...e])}function p(){t.ensureNotDisposed();for(let e of t.store.keys())o(e)&&t.touched.add(e);for(let e of t.validators.keys())o(e)&&t.touched.add(e);t.requestNotify()}function m(){t.ensureNotDisposed();for(let e of[...t.touched])o(e)&&t.touched.delete(e);t.requestNotify()}function h(){t.ensureNotDisposed();for(let e of[...t.store.keys()])o(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 g(n){t.ensureNotDisposed();for(let e of[...t.fieldCtrls.keys()])o(e)&&(t.fieldCtrls.get(e)?.abort(),t.fieldCtrls.delete(e));let r=e(n);for(let e of[...t.store.keys()])o(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=a(e);t.store.set(r,n),t.baseline.set(r,n)}t.requestNotify()}function _(n){t.ensureNotDisposed();let r=e(n),i=[];for(let[e,n]of Object.entries(r)){let r=a(e);t.baseline.set(r,n),t.store.set(r,n),t.dirty.delete(r),i.push(r)}t.requestNotify(i)}function v(e){t.ensureNotDisposed();for(let e of[...t.fieldErrors.keys()])o(e)&&t.fieldErrors.delete(e);if(e)for(let[n,r]of Object.entries(e))typeof r==`string`&&t.fieldErrors.set(a(n),r);t.invalidateErrors(),t.requestNotify()}async function y(e,n){if(t.ensureNotDisposed(),e!==void 0&&!Array.isArray(e)&&!(e instanceof AbortSignal)){let r=a(e);await t.runValidationCore([r],`partial`,n);let i=t.fieldErrors.get(r);return{errors:i===void 0?{}:{[e]:i},valid:i===void 0}}if(Array.isArray(e)){let r=e.map(e=>a(e));await t.runValidationCore(r,`partial`,n);let i={};for(let e of r){let n=t.fieldErrors.get(e);n!==void 0&&(i[s(e)]=n)}return{errors:i,valid:Object.keys(i).length===0}}let r=e,i=[...t.validators.keys()].filter(o);await t.runValidationCore(i,`partial`,r);let c={};for(let[e,n]of t.fieldErrors)o(e)&&(c[s(e)]=n);return{errors:c,valid:Object.keys(c).length===0}}async function b(e){if(t.ensureNotDisposed(),t.isSubmitting())throw new l(`submit() called while a submission is already in progress`);t.root.batch(()=>{t.incrementSubmitCount(),t.setSubmitting(!0),p()});try{let n=[...t.validators.keys()].filter(o);await t.runValidationCore(n,`partial`),t.ensureNotDisposed();let r={};for(let[e,n]of t.fieldErrors)o(e)&&(r[s(e)]=n);return Object.keys(r).length>0?{errors:r,ok:!1,type:`validation`}:{ok:!0,value:await e(d())}}finally{t.setSubmitting(!1),t.isDisposed()||t.requestNotify()}}function x(e,n){let r=null;return t.root.subscribe(()=>{let t=c();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 S(){return{array(e){return t.root.array(a(e))},clearError(e){t.root.clearError(a(e))},connect(e,n){return t.root.connect(a(e),n)},field(e){return t.root.field(a(e))},get(e){return t.root.get(a(e))},register(e,n){return t.root.fields.register(a(e),n)},remove(e){t.root.fields.remove(a(e))},resetField(e){t.root.resetField(a(e))},set(e,n,r){t.root.set(a(e),n,r)},setError(e,n){t.root.setError(a(e),n)},setValidator(e,n){t.root.fields.setValidator(a(e),n)},subscribeField(e,n,r){return t.root.subscribeField(a(e),n,r)},touch(e){t.root.touch(a(e))},untouch(e){t.root.untouch(a(e))}}}let C=S();return{array:e=>C.array(e),batch:e=>t.root.batch(e),clearError:e=>C.clearError(e),connect:(e,t)=>C.connect(e,t),get disposalSignal(){return t.root.disposalSignal},dispose:()=>{},get disposed(){return t.isDisposed()},field:e=>C.field(e),fields:{list:f,register:(e,t)=>C.register(e,t),remove:e=>C.remove(e),setValidator:(e,t)=>C.setValidator(e,t)},get:e=>C.get(e),get isLoading(){return t.root.isLoading},get isSubmitting(){return t.root.isSubmitting},patch:_,replace:g,reset:h,resetErrors:v,resetField:e=>C.resetField(e),restore:e=>t.root.restore(e),scope:e=>O(t,a(e)),set:(e,t,n)=>C.set(e,t,n),setError:(e,t)=>C.setError(e,t),snapshot:()=>t.root.snapshot(),get state(){return c()},submit:b,submitOrThrow:async e=>{let t=await b(e);if(!t.ok)throw new u(t.errors);return t.value},subscribe:(e,n)=>t.root.subscribe(e,n),subscribeField:(e,t,n)=>C.subscribeField(e,t,n),subscribeScoped:x,[Symbol.asyncIterator]:()=>t.root[Symbol.asyncIterator](),[Symbol.dispose](){this.dispose()},touch:e=>C.touch(e),touchAll:p,untouch:e=>C.untouch(e),untouchAll:m,validate:y,validateStream(e){let n=t.root.validateStream(e);return{async next(){for(;;){let e=await n.next();if(e.done)return e;if(o(e.value.field))return{done:!1,value:{error:e.value.error,field:s(e.value.field)}}}},return(){return n.return?n.return():Promise.resolve({done:!0,value:void 0})},[Symbol.asyncIterator](){return this}}},values:d}}function k(e,n){async function r(t,n){let r=e.validators.get(t);if(!r)return;if(n.aborted)throw n.reason;let i=await r(e.store.get(t),n);return typeof i==`string`?i:void 0}async function i(t){if(!e.formValidator)return{};if(t.aborted)throw t.reason;let r=await e.formValidator(n.values(),t),i={};if(r)for(let[e,t]of Object.entries(r))_(e)&&typeof t==`string`&&(i[e]=t);return i}function a(t,n,r,i){if(i===`full`){e.fieldErrors.clear();for(let[e,t]of Object.entries(r))n[e]===void 0&&(n[e]=t);for(let[t,r]of Object.entries(n))e.fieldErrors.set(t,r);e.invalidateErrors(),e.requestNotify()}else{let r=new Set;for(let i of t){let t=n[i],a=e.fieldErrors.get(i);t===void 0?e.fieldErrors.delete(i)&&r.add(i):(e.fieldErrors.set(i,t),a!==t&&r.add(i))}r.size>0&&e.invalidateErrors(),e.requestNotify(r)}}async function o(n,o,s){let c=new Set(n),l=new Map;for(let t of c){e.fieldCtrls.get(t)?.abort();let n=new AbortController;e.fieldCtrls.set(t,n),l.set(t,n)}let u=new AbortController,d=S(u.signal,s,e.disposeController.signal);e.runCtrls.add(u);let f=Symbol();for(let t of c){let n=e.validatingRuns.get(t);n||(n=new Set,e.validatingRuns.set(t,n)),n.add(f)}e.requestNotify();try{let t=await Promise.all([...c].map(async e=>[e,await r(e,o===`partial`?S(l.get(e).signal,d):d)]));if(d.aborted)return{aborted:!0,errors:Object.fromEntries(e.fieldErrors),valid:e.fieldErrors.size===0};let n={};for(let[e,r]of t)r!==void 0&&(n[e]=r);return a(c,n,o===`full`?await i(d):{},o),{aborted:!1,errors:Object.fromEntries(e.fieldErrors),valid:e.fieldErrors.size===0}}catch(n){if(t(n))return{aborted:!0,errors:Object.fromEntries(e.fieldErrors),valid:e.fieldErrors.size===0};throw n}finally{e.runCtrls.delete(u);for(let t of c){let n=e.validatingRuns.get(t);n&&(n.delete(f),n.size===0&&e.validatingRuns.delete(t))}e.requestNotify();for(let[t,n]of l)e.fieldCtrls.get(t)===n&&e.fieldCtrls.delete(t)}}async function s(t,n){e.ensureNotDisposed();let r=await o(t,`partial`,n);return{errors:r.errors,valid:r.valid}}async function c(t,n){if(e.ensureNotDisposed(),t===void 0||t instanceof AbortSignal){let n=await o([...e.validators.keys()],`full`,t);return{errors:n.errors,valid:n.valid}}if(Array.isArray(t))return s(t,n);await s([t],n);let r=t,i=e.fieldErrors.get(r);return{errors:i===void 0?{}:{[r]:i},valid:i===void 0}}async function f(e){let t=await p(e);if(!t.ok)throw new u(t.errors);return t.value}async function p(t){if(e.ensureNotDisposed(),e.isSubmittingState)throw new l(`submit() called while a submission is already in progress`);e.batch(()=>{e.submitCount++,e.isSubmittingState=!0,n.touchAll()});try{let r=await o([...e.validators.keys()],`full`);return e.ensureNotDisposed(),r.valid?{ok:!0,value:await t(n.values())}:{errors:r.errors,ok:!1,type:`validation`}}finally{e.isSubmittingState=!1,e.disposed||e.requestNotify()}}function m(n){e.ensureNotDisposed();let a=[...e.validators.keys()],o=new AbortController,s=n?S(o.signal,n,e.disposeController.signal):S(o.signal,e.disposeController.signal),c=E(()=>o.abort());return Promise.all(a.map(async e=>{if(!s.aborted)try{let t=await r(e,s);s.aborted||c.push({error:t,field:e})}catch(e){if(!t(e))throw e}})).then(async()=>{if(e.formValidator&&!s.aborted)try{let e=await i(s);if(!s.aborted){let t=new Set([d,...Object.keys(e)]);for(let n of t)c.push({error:e[n],field:n})}}catch{}}).catch(e=>{t(e)||(o.abort(),c.fail(e))}).finally(()=>{o.abort(),c.finish()}),c.iterator}return{runValidationCore:o,submit:p,submitOrThrow:f,validate:c,validateFields:s,validateStream:m}}function A(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 j(t){function r(e){let n=e;return v(n),t.store.get(n)}function i(){return t.cachedValues??=n(Object.fromEntries(t.store))}function a(e,n){t.baseline.get(e)===n?t.dirty.delete(e):t.dirty.add(e)}function o(e,n,r={}){t.ensureNotDisposed();let i=e;v(i),t.store.set(i,n),a(i,n),r.touched&&t.touched.add(i),t.requestNotify(i)}function s(e){let n=e;return v(n),t.getFieldSnapshot(n)}function c(e,n){t.ensureNotDisposed();let r=e;v(r),t.fieldErrors.set(r,n),t.invalidateErrors(),t.requestNotify(r)}function l(e){t.ensureNotDisposed();let n=e;v(n),t.fieldErrors.delete(n)&&(t.invalidateErrors(),t.requestNotify(n))}function u(e={}){t.ensureNotDisposed(),t.fieldErrors.clear();for(let[n,r]of Object.entries(e))v(n),typeof r==`string`&&t.fieldErrors.set(n,r);t.invalidateErrors(),t.requestNotify()}function d(e,n){/\.\d+(\.|$)/.test(e)&&!t.store.has(e)&&m(`${n}('${x(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;v(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 v(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||C(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;v(n),t.touched.add(n),t.requestNotify(n)}function _(e){t.ensureNotDisposed();let n=e;v(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 S(e){t.ensureNotDisposed();let n=e;v(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 C(e){t.ensureNotDisposed();let n=e;v(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=e(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=e(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;v(n);let r=t.arrayCache.get(n);if(r)return r;let i=A(e,t.store,o);return t.arrayCache.set(n,i),i}return{array:D,clearError:l,field:s,get:r,listFields:h,patch:E,registerField:p,removeField:C,replace:T,reset:w,resetErrors:u,resetField:S,set:o,setError:c,setValidator:f,touch:g,touchAll:y,untouch:_,untouchAll:b,values:i}}function M(e={}){let t=w(e),n=j(t),r=k(t,{touchAll:n.touchAll,values:n.values}),i=D(t,{set:n.set,touch:n.touch,validateFields:r.validateFields}),a=T(t);typeof e.defaultValues==`function`&&e.defaultValues().then(e=>{t.loadingState=!1,!t.disposed&&n.replace(e)}).catch(n=>{t.loadingState=!1,!t.disposed&&(m(`defaultValues factory rejected. Form will be empty. Error: ${x(String(n))}`),e.onLoadError?.(n),t.requestNotify())});let{listFields:o,registerField:s,removeField:c,setValidator:l,...u}=n,{runValidationCore:d,...f}=r,p={...u,...f,...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=O({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:p,runValidationCore:d,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 p}function N(t){let n=new FormData;for(let[r,i]of Object.entries(e(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}export{d as FORM_ERROR,c as ForgeConfigError,s as ForgeDisposedError,o as ForgeError,l as ForgeSubmitError,u as ForgeValidationError,f as ValidationModes,M as createForm,N as toFormData};
|
|
1
|
+
import{flattenPaths as e,isAbortError as t,unflattenPaths as n}from"@vielzeug/arsenal";import{batch as r,signal as i,watch as a}from"@vielzeug/ripple";var o=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}},s=class extends o{constructor(e){super(e?`Cannot call ${e}() on a disposed form`:`Cannot modify a disposed form`)}},c=class extends o{},l=class extends o{},u=class extends o{errors;constructor(e){super(`Form validation failed`),this.errors=e}},d=`_form`,f=5,p={onBlur:{touchOnBlur:!0,validateOnBlur:!0},onChange:{touchOnBlur:!0,validateOnChange:!0},onSubmit:{},onTouched:{touchOnBlur:!0,validateOnBlur:!0,validateOnTouch:!0}},m=!globalThis.__FORGE_PROD__;function h(e){m&&console.warn(`[@vielzeug/forge] ${e}`)}function g(e){m&&e()}var _=new Set([`__proto__`,`constructor`,`prototype`]);function v(e){return e.split(`.`).every(e=>!_.has(e))}function y(e){if(x(e),!v(e))throw new c(`Unsafe key '${e}': segments __proto__, constructor, and prototype are reserved.`)}var b=new Set;function x(e){e.includes(`.`)&&(e.split(`.`).length<=5||b.has(e)||(b.add(e),g(()=>{h(`Path '${S(e,120)}' exceeds typed depth limits and may be treated as an untyped string path.`)})))}function S(e,t=200){return e.replace(/\p{C}/gu,`?`).slice(0,t)}function C(...e){let t=e.filter(e=>e!=null);if(t.length!==0)return t.length===1?t[0]:AbortSignal.any(t)}function w(e){let t=i(e.computeState()),n=new Map,o=new Map,s=new Set,c=!1;function l(t){let r=n.get(t);return r||(r=i(e.buildFieldState(t),{equals:(e,t)=>e.value===t.value&&e.error===t.error&&e.hasError===t.hasError&&e.touched===t.touched&&e.dirty===t.dirty}),n.set(t,r)),r}function u(t){let n=o.get(t);if(n)return n;let r=Object.freeze(e.buildFieldState(t));return o.set(t,r),r}function d(){return t.value}function f(i){if(!c)if(e.invalidateCaches(),i===void 0)o.clear(),r(()=>{t.value=e.computeState();for(let[t,r]of n)r.value=e.buildFieldState(t)});else if(typeof i==`string`)o.delete(i),r(()=>{t.value=e.computeState();let r=n.get(i);r&&(r.value=e.buildFieldState(i))});else{let a=[...i];for(let e of a)o.delete(e);r(()=>{t.value=e.computeState();for(let t of a){let r=n.get(t);r&&(r.value=e.buildFieldState(t))}})}}function p(e,n){if(c)return()=>{};let r=a(t,t=>{e(t)});return s.add(r),n?.sync&&e(t.value),()=>{r.dispose(),s.delete(r)}}function m(e,t,n){if(c)return()=>{};y(e);let r=l(e),i=a(r,e=>{t(e)});return s.add(i),n?.sync&&t(r.value),()=>{i.dispose(),s.delete(i)}}function h(){c=!0;for(let e of s)e.dispose();s.clear(),n.clear(),o.clear()}return{dispose:h,getFieldSnapshot:u,getOrCreateFieldSignal:l,getStateSnapshot:d,requestNotify:f,subscribe:p,subscribeField:m}}function T(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`;v(t)&&(i[t]||(i[t]=e.message))}return i}}function E(t){let n=new Map;for(let[e,r]of Object.entries(t.validators??{}))y(e),n.set(e,r);let i=T(t.validator),a=typeof t.defaultValues==`function`,o=typeof t.defaultValues==`function`?void 0:t.defaultValues,c=new Map(Object.entries(e(o??{}))),l=new Map(c),u=new Map,d=new Set,f=new Set,p=new Map,m=new Set,h=new Map,g=new AbortController,_=null,v=null,b=new Map,x=!1,S=0,C=!1;function E(){_=null}function D(){v=null}function O(){return v??=Object.freeze(Object.fromEntries(u))}function k(){return Object.freeze({errors:O(),isDirty:f.size>0,isLoading:a,isSubmitting:x,isTouched:d.size>0,isValid:u.size===0,isValidating:p.size>0,submitCount:S,touchedFields:Object.freeze([...d]),validatingFields:Object.freeze([...p.keys()])})}function A(e){let t=u.get(e);return{dirty:f.has(e),error:t,hasError:t!==void 0,touched:d.has(e),value:l.get(e)}}let j=w({buildFieldState:A,computeState:k,invalidateCaches(){E(),D()}});function M(e){if(C)throw new s(e)}function N(e){M(`batch`);try{r(e)}catch(e){throw j.requestNotify(),e}}function P(){C=!0,g.abort();for(let e of h.values())e.abort();h.clear(),m.clear(),b.clear(),j.dispose()}return{arrayCache:b,baseline:c,batch:N,get cachedValues(){return _},set cachedValues(e){_=e},computeErrors:O,dirty:f,dispose:P,disposeController:g,get disposed(){return C},ensureNotDisposed:M,fieldCtrls:h,fieldErrors:u,formValidator:i,getFieldSnapshot:j.getFieldSnapshot,getStateSnapshot:j.getStateSnapshot,invalidateErrors:D,invalidateValues:E,get isSubmittingState(){return x},set isSubmittingState(e){x=e},get loadingState(){return a},set loadingState(e){a=e},requestNotify:j.requestNotify,runCtrls:m,store:l,get submitCount(){return S},set submitCount(e){S=e},subscribe:j.subscribe,subscribeField:j.subscribeField,touched:d,validatingRuns:p,validators:n}}function D(e,t,n){let r=e;function i(e,t){g(()=>{h(`array('${S(r,80)}').${e}(): field is not an array (got ${t===null?`null`:typeof t}) — no-op.`)})}return{append(a){let o=t.get(r);if(o!==void 0&&!Array.isArray(o)){i(`append`,o);return}n(e,Array.isArray(o)?[...o,a]:[a])},insert(a,o){let s=t.get(r);if(!Array.isArray(s)){i(`insert`,s);return}let c=[...s];c.splice(a,0,o),n(e,c)},move(a,o){let s=t.get(r);if(!Array.isArray(s)){i(`move`,s);return}let c=[...s];c.splice(o,0,c.splice(a,1)[0]),n(e,c)},prepend(a){let o=t.get(r);if(o!==void 0&&!Array.isArray(o)){i(`prepend`,o);return}n(e,Array.isArray(o)?[a,...o]:[a])},remove(a){let o=t.get(r);if(!Array.isArray(o)){i(`remove`,o);return}n(e,o.filter((e,t)=>t!==a))},replace(a,o){let s=t.get(r);if(!Array.isArray(s)){i(`replace`,s);return}let c=[...s];c[a]=o,n(e,c)},swap(a,o){let s=t.get(r);if(!Array.isArray(s)){i(`swap`,s);return}let c=[...s];[c[a],c[o]]=[c[o],c[a]],n(e,c)}}}function O(r){function i(e){let t=e;return y(t),r.store.get(t)}function a(){return r.cachedValues??=n(Object.fromEntries(r.store))}function o(e,t){r.baseline.get(e)===t?r.dirty.delete(e):r.dirty.add(e)}function s(e,t,n={}){r.ensureNotDisposed(`set`);let i=e;y(i),r.store.set(i,t),o(i,t),n.touched&&r.touched.add(i),r.requestNotify(i)}function c(e){let t=e;return y(t),r.getFieldSnapshot(t)}function d(e,t){r.ensureNotDisposed(`setError`);let n=e;y(n),r.fieldErrors.set(n,t),r.invalidateErrors(),r.requestNotify(n)}function f(e){r.ensureNotDisposed(`clearError`);let t=e;y(t),r.fieldErrors.delete(t)&&(r.invalidateErrors(),r.requestNotify(t))}function p(e,t,n){for(let t of[...r.fieldErrors.keys()])e(t)&&r.fieldErrors.delete(t);for(let[e,i]of Object.entries(t)){let t=n(e);y(t),typeof i==`string`&&r.fieldErrors.set(t,i)}r.invalidateErrors()}function m(e={}){r.ensureNotDisposed(`resetErrors`),p(()=>!0,e,e=>e),r.requestNotify()}function g(e,t){/\.\d+(\.|$)/.test(e)&&!r.store.has(e)&&h(`${t}('${S(e,80)}'): path looks like an array item key. Array items are stored as whole arrays — register on the parent key instead.`)}function _(e,t){r.ensureNotDisposed(`setValidator`);let n=e;y(n),g(n,`setValidator`),r.fieldCtrls.get(n)?.abort(),r.fieldCtrls.delete(n),t?r.validators.set(n,t):(r.validators.delete(n),r.fieldErrors.delete(n)&&(r.invalidateErrors(),r.requestNotify(n)))}function b(e,t={}){r.ensureNotDisposed(`fields.register`);let n=e;return y(n),g(n,`fields.register`),t.validator!==void 0&&_(e,t.validator),t.defaultValue!==void 0&&!r.store.has(n)&&(r.store.set(n,t.defaultValue),r.baseline.set(n,t.defaultValue),r.requestNotify(n)),()=>{r.disposed||M(e)}}function x(){let e=new Set;for(let t of r.store.keys())e.add(t);for(let t of r.validators.keys())e.add(t);return Object.freeze([...e])}function w(e){r.ensureNotDisposed(`touch`);let t=e;y(t),r.touched.add(t),r.requestNotify(t)}function T(e){r.ensureNotDisposed(`untouch`);let t=e;y(t),r.touched.delete(t)&&r.requestNotify(t)}function E(e){for(let t of r.store.keys())e(t)&&r.touched.add(t);for(let t of r.validators.keys())e(t)&&r.touched.add(t)}function O(){r.ensureNotDisposed(`touchAll`),E(()=>!0),r.requestNotify()}function k(e){for(let t of[...r.touched])e(t)&&r.touched.delete(t)}function A(){r.ensureNotDisposed(`untouchAll`),k(()=>!0),r.requestNotify()}function j(e){r.ensureNotDisposed(`resetField`);let t=e;y(t),r.fieldCtrls.get(t)?.abort(),r.fieldCtrls.delete(t),r.store.set(t,r.baseline.get(t)),r.dirty.delete(t),r.touched.delete(t),r.fieldErrors.delete(t)&&r.invalidateErrors(),r.requestNotify(t)}function M(e){r.ensureNotDisposed(`fields.remove`);let t=e;y(t),r.store.delete(t),r.baseline.delete(t),r.dirty.delete(t),r.touched.delete(t),r.validators.delete(t),r.arrayCache.delete(t),r.fieldCtrls.get(t)?.abort(),r.fieldCtrls.delete(t),r.fieldErrors.delete(t)&&r.invalidateErrors(),r.requestNotify(t)}function N(){return new Set([...r.store.keys(),...r.touched,...r.fieldErrors.keys(),...r.validators.keys()])}function P(e){for(let t of N())e(t)&&(r.fieldCtrls.get(t)?.abort(),r.fieldCtrls.delete(t),r.baseline.has(t)?r.store.set(t,r.baseline.get(t)):r.store.delete(t),r.dirty.delete(t),r.touched.delete(t),r.fieldErrors.delete(t)&&r.invalidateErrors())}function F(){r.ensureNotDisposed(`reset`);for(let e of r.runCtrls)e.abort();r.runCtrls.clear(),r.validatingRuns.clear(),P(()=>!0),r.submitCount=0,r.requestNotify()}function I(e,t,n){for(let t of N())e(t)&&(r.fieldCtrls.get(t)?.abort(),r.fieldCtrls.delete(t),r.store.delete(t),r.baseline.delete(t),r.dirty.delete(t),r.touched.delete(t),r.fieldErrors.delete(t)&&r.invalidateErrors());for(let[e,i]of Object.entries(t)){let t=n(e);r.store.set(t,i),r.baseline.set(t,i)}}function L(t){r.ensureNotDisposed(`replace`);for(let e of r.runCtrls)e.abort();r.runCtrls.clear(),r.validatingRuns.clear(),I(()=>!0,e(t),e=>e),r.submitCount=0,r.requestNotify()}function R(t,n){let i=e(t),a=[];for(let[e,t]of Object.entries(i)){let i=n(e);r.baseline.set(i,t),r.store.set(i,t),r.dirty.delete(i),a.push(i)}return a}function z(e){r.ensureNotDisposed(`patch`),r.requestNotify(R(e,e=>e))}function B(e){r.ensureNotDisposed(`array`);let t=e;y(t);let n=r.arrayCache.get(t);if(n)return n;let i=D(e,r.store,s);return r.arrayCache.set(t,i),i}async function V(e,t){let n=r.validators.get(e);if(!n)return;if(t.aborted)throw t.reason;let i=await n(r.store.get(e),t);return typeof i==`string`?i:void 0}async function H(e){if(!r.formValidator)return{};if(e.aborted)throw e.reason;let t=await r.formValidator(a(),e),n={};if(t)for(let[e,r]of Object.entries(t))v(e)&&typeof r==`string`&&(n[e]=r);return n}function U(e,t,n,i){if(i===`full`){r.fieldErrors.clear();for(let[e,r]of Object.entries(n))t[e]===void 0&&(t[e]=r);for(let[e,n]of Object.entries(t))r.fieldErrors.set(e,n);r.invalidateErrors(),r.requestNotify()}else{let n=new Set;for(let i of e){let e=t[i],a=r.fieldErrors.get(i);e===void 0?r.fieldErrors.delete(i)&&n.add(i):(r.fieldErrors.set(i,e),a!==e&&n.add(i))}n.size>0&&r.invalidateErrors(),r.requestNotify(n)}}async function W(e,n,i){let a=new Set(e),o=new Map;for(let e of a){r.fieldCtrls.get(e)?.abort();let t=new AbortController;r.fieldCtrls.set(e,t),o.set(e,t)}let s=new AbortController,c=C(s.signal,i,r.disposeController.signal);r.runCtrls.add(s);let l=Symbol();for(let e of a){let t=r.validatingRuns.get(e);t||(t=new Set,r.validatingRuns.set(e,t)),t.add(l)}r.requestNotify();try{let e=await Promise.all([...a].map(async e=>[e,await V(e,n===`partial`?C(o.get(e).signal,c):c)]));if(c.aborted)return{aborted:!0,errors:Object.fromEntries(r.fieldErrors),valid:r.fieldErrors.size===0};let t={};for(let[n,r]of e)r!==void 0&&(t[n]=r);return U(a,t,n===`full`?await H(c):{},n),{aborted:!1,errors:Object.fromEntries(r.fieldErrors),valid:r.fieldErrors.size===0}}catch(e){if(t(e))return{aborted:!0,errors:Object.fromEntries(r.fieldErrors),valid:r.fieldErrors.size===0};throw e}finally{r.runCtrls.delete(s);for(let e of a){let t=r.validatingRuns.get(e);t&&(t.delete(l),t.size===0&&r.validatingRuns.delete(e))}r.requestNotify();for(let[e,t]of o)r.fieldCtrls.get(e)===t&&r.fieldCtrls.delete(e)}}async function G(e,t){r.ensureNotDisposed(`validate`);let n=await W(e,`partial`,t);return{errors:n.errors,valid:n.valid}}async function K(e,t){if(r.ensureNotDisposed(`validate`),e===void 0||e instanceof AbortSignal){let t=await W([...r.validators.keys()],`full`,e);return{errors:t.errors,valid:t.valid}}if(Array.isArray(e))return G(e,t);await G([e],t);let n=e,i=r.fieldErrors.get(n);return{errors:i===void 0?{}:{[n]:i},valid:i===void 0}}async function q(e){let t=await J(e);if(!t.ok)throw new u(t.errors);return t.value}async function J(e){if(r.ensureNotDisposed(`submit`),r.isSubmittingState)throw new l(`submit() called while a submission is already in progress`);r.batch(()=>{r.submitCount++,r.isSubmittingState=!0,O()});try{let t=await W([...r.validators.keys()],`full`);return r.ensureNotDisposed(`submit`),t.valid?{ok:!0,value:await e(a())}:{errors:t.errors,ok:!1,type:`validation`}}finally{r.isSubmittingState=!1,r.disposed||r.requestNotify()}}return{array:B,clearError:f,field:c,get:i,listFields:x,patch:z,patchKeys:R,registerField:b,removeField:M,replace:L,replaceKeys:I,reset:F,resetErrors:m,resetErrorsKeys:p,resetField:j,resetKeys:P,runValidationCore:W,set:s,setError:d,setValidator:_,submit:J,submitOrThrow:q,touch:w,touchAll:O,touchAllKeys:E,untouch:T,untouchAll:A,untouchAllKeys:k,validate:K,validateFields:G,values:a}}function k(e,t){function n(){e.dispose(),t.onDispose?.()}function r(){return e.ensureNotDisposed(`history.snapshot`),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 i(t){e.ensureNotDisposed(`history.restore`);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))v(n)&&e.store.set(n,r);for(let[n,r]of Object.entries(t.baseline))v(n)&&e.baseline.set(n,r);for(let[n,r]of Object.entries(t.errors))v(n)&&e.fieldErrors.set(n,r);for(let n of t.touched)v(n)&&e.touched.add(n);for(let n of t.dirty)v(n)&&e.dirty.add(n);e.submitCount=t.submitCount,e.invalidateErrors(),e.invalidateValues(),e.requestNotify()}return{dispose:n,restore:i,snapshot:r}}function A(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 j(e,n){function r(t,n){return e.subscribe(t,n)}function i(t,n,r){let i=t;return y(i),e.subscribeField(i,n,r)}function a(r,i){e.ensureNotDisposed(`connect`);let a=r;y(a);function o(e,t){return i?.[e]??n.connectDefaults[e]??t}let s=o(`touchOnBlur`,!1),c=o(`validateOnBlur`,!1),l=o(`validateOnChange`,!1),u=o(`validateOnTouch`,!1),d=o(`debounce`,0),f=null;function p(){d>0?(f!==null&&clearTimeout(f),f=setTimeout(()=>{f=null,!e.disposed&&n.validateFields([r]).catch(e=>{if(!t(e))throw e})},d)):n.validateFields([r]).catch(e=>{if(!t(e))throw e})}let m=!1;return{get dirty(){return e.dirty.has(a)},dispose(){m=!0,f!==null&&(clearTimeout(f),f=null)},get disposed(){return m},get error(){return e.fieldErrors.get(a)},onBlur:()=>{e.disposed||(s&&n.touch(r),c&&p())},onChange:t=>{e.disposed||(n.set(r,t),(l||u&&e.touched.has(a))&&p())},[Symbol.dispose](){this.dispose()},get touched(){return e.touched.has(a)},get value(){return e.store.get(a)}}}function o(){let t=A(()=>n());t.push(e.getStateSnapshot());let n=r(e=>{t.push(e)});return e.disposeController.signal.addEventListener(`abort`,()=>t.terminate(),{once:!0}),t.iterator}return{connect:a,subscribe:r,subscribeField:i,[Symbol.asyncIterator]:o}}function M(t,r){let{ctx:i,fieldOps:a,root:o}=t,s=`${r}.`;function c(e){return`${r}.${e}`}function d(e){return e===r||e.startsWith(s)}function f(e){return e.startsWith(s)?e.slice(s.length):e}function p(){let e=i.getStateSnapshot(),t=Object.fromEntries(Object.entries(e.errors).filter(([e])=>d(e)).map(([e,t])=>[f(e),t])),n=e.touchedFields.filter(d).map(f),r=e.validatingFields.filter(d).map(f),a=Object.keys(t).length===0,o=[...i.dirty].some(d),s=[...i.touched].some(d),c=r.length>0;return Object.freeze({errors:Object.freeze(t),isDirty:o,isLoading:e.isLoading,isSubmitting:e.isSubmitting,isTouched:s,isValid:a,isValidating:c,submitCount:e.submitCount,touchedFields:Object.freeze(n),validatingFields:Object.freeze(r)})}function m(){let e={};for(let[t,n]of i.store)t.startsWith(s)&&(e[t.slice(s.length)]=n);return n(e)}function h(){let e=new Set;for(let t of i.store.keys())d(t)&&e.add(f(t));for(let t of i.validators.keys())d(t)&&e.add(f(t));return Object.freeze([...e])}function g(){i.ensureNotDisposed(`touchAll`),a.touchAllKeys(d),i.requestNotify()}function _(){i.ensureNotDisposed(`untouchAll`),a.untouchAllKeys(d),i.requestNotify()}function v(){i.ensureNotDisposed(`reset`),a.resetKeys(d),i.requestNotify()}function y(t){i.ensureNotDisposed(`replace`),a.replaceKeys(d,e(t),c),i.requestNotify()}function b(e){i.ensureNotDisposed(`patch`),i.requestNotify(a.patchKeys(e,c))}function x(e){i.ensureNotDisposed(`resetErrors`),a.resetErrorsKeys(d,e??{},c),i.requestNotify()}async function S(e,t){if(i.ensureNotDisposed(`validate`),e!==void 0&&!Array.isArray(e)&&!(e instanceof AbortSignal)){let n=c(e);await a.runValidationCore([n],`partial`,t);let r=i.fieldErrors.get(n);return{errors:r===void 0?{}:{[e]:r},valid:r===void 0}}if(Array.isArray(e)){let n=e.map(e=>c(e));await a.runValidationCore(n,`partial`,t);let r={};for(let e of n){let t=i.fieldErrors.get(e);t!==void 0&&(r[f(e)]=t)}return{errors:r,valid:Object.keys(r).length===0}}let n=e,r=[...i.validators.keys()].filter(d);await a.runValidationCore(r,`partial`,n);let o={};for(let[e,t]of i.fieldErrors)d(e)&&(o[f(e)]=t);return{errors:o,valid:Object.keys(o).length===0}}async function C(e){if(i.ensureNotDisposed(`submit`),i.isSubmittingState)throw new l(`submit() called while a submission is already in progress`);i.batch(()=>{i.submitCount++,i.isSubmittingState=!0,g()});try{let t=[...i.validators.keys()].filter(d);await a.runValidationCore(t,`partial`),i.ensureNotDisposed(`submit`);let n={};for(let[e,t]of i.fieldErrors)d(e)&&(n[f(e)]=t);return Object.keys(n).length>0?{errors:n,ok:!1,type:`validation`}:{ok:!0,value:await e(m())}}finally{i.isSubmittingState=!1,i.disposed||i.requestNotify()}}function w(e,t){let n=null;return o.subscribe(()=>{let t=p();if(n){let e=n,r=Object.keys(t.errors),i=Object.keys(e.errors),a=r.length===i.length&&r.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}n=t,e(t)},t)}function T(){return{array(e){return o.array(c(e))},clearError(e){o.clearError(c(e))},connect(e,t){return o.connect(c(e),t)},field(e){return o.field(c(e))},get(e){return o.get(c(e))},register(e,t){return o.fields.register(c(e),t)},remove(e){o.fields.remove(c(e))},resetField(e){o.resetField(c(e))},set(e,t,n){o.set(c(e),t,n)},setError(e,t){o.setError(c(e),t)},setValidator(e,t){o.fields.setValidator(c(e),t)},subscribeField(e,t,n){return o.subscribeField(c(e),t,n)},touch(e){o.touch(c(e))},untouch(e){o.untouch(c(e))}}}let E=T();return{array:e=>E.array(e),batch:e=>o.batch(e),clearError:e=>E.clearError(e),connect:(e,t)=>E.connect(e,t),get disposalSignal(){return o.disposalSignal},dispose:()=>{},get disposed(){return i.disposed},field:e=>E.field(e),fields:{list:h,register:(e,t)=>E.register(e,t),remove:e=>E.remove(e),setValidator:(e,t)=>E.setValidator(e,t)},get:e=>E.get(e),history:{restore:e=>o.history.restore(e),snapshot:()=>o.history.snapshot()},get isLoading(){return o.isLoading},get isSubmitting(){return o.isSubmitting},patch:b,replace:y,reset:v,resetErrors:x,resetField:e=>E.resetField(e),scope:e=>M(t,c(e)),set:(e,t,n)=>E.set(e,t,n),setError:(e,t)=>E.setError(e,t),get state(){return p()},submit:C,submitOrThrow:async e=>{let t=await C(e);if(!t.ok)throw new u(t.errors);return t.value},subscribe:w,subscribeField:(e,t,n)=>E.subscribeField(e,t,n),[Symbol.asyncIterator]:()=>o[Symbol.asyncIterator](),[Symbol.dispose](){this.dispose()},touch:e=>E.touch(e),touchAll:g,untouch:e=>E.untouch(e),untouchAll:_,validate:S,values:m}}function N(e={}){let t=E(e),n=O(t),r=j(t,{connectDefaults:e.connect??{},set:n.set,touch:n.touch,validateFields:n.validateFields}),i=new Map,a=k(t,{onDispose:()=>i.clear()});typeof e.defaultValues==`function`&&e.defaultValues().then(e=>{t.loadingState=!1,!t.disposed&&n.replace(e)}).catch(n=>{t.loadingState=!1,!t.disposed&&(h(`defaultValues factory rejected. Form will be empty. Error: ${S(String(n))}`),e.onLoadError?.(n),t.requestNotify())});let{listFields:o,patchKeys:s,registerField:c,removeField:l,replaceKeys:u,resetErrorsKeys:d,resetKeys:f,runValidationCore:p,setValidator:m,touchAllKeys:g,untouchAllKeys:_,...v}=n,{restore:y,snapshot:b,...x}=a,C={...v,...r,...x,batch:t.batch,get disposalSignal(){return t.disposeController.signal},get disposed(){return t.disposed},fields:{list:o,register:c,remove:l,setValidator:m},history:{restore:y,snapshot:b},get isLoading(){return t.loadingState},get isSubmitting(){return t.isSubmittingState},scope(e){let n=e,r=i.get(n);if(r)return r;let a=M({ctx:t,fieldOps:{patchKeys:s,replaceKeys:u,resetErrorsKeys:d,resetKeys:f,runValidationCore:p,touchAllKeys:g,untouchAllKeys:_},root:C},e);return i.set(n,a),a},get state(){return t.getStateSnapshot()},[Symbol.dispose](){this.dispose()}};return C}function P(t){let n=new FormData;for(let[r,i]of Object.entries(e(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}export{d as FORM_ERROR,c as ForgeConfigError,s as ForgeDisposedError,o as ForgeError,l as ForgeSubmitError,u as ForgeValidationError,f as MAX_TYPED_PATH_DEPTH,p as ValidationModes,N as createForm,P as toFormData};
|
|
2
2
|
//# sourceMappingURL=forge.js.map
|