@fluixi/reactive 1.0.0-alpha.83 → 1.0.0-alpha.84
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/cdn/reactive.cjs +2673 -1
- package/dist/cdn/reactive.global.js +2 -1
- package/dist/cdn/reactive.mjs +2657 -1
- package/dist/cdn/signal.cjs +299 -1
- package/dist/cdn/signal.d.ts +1 -1
- package/dist/cdn/signal.global.js +2 -1
- package/dist/cdn/signal.js +1 -1
- package/dist/cdn/signal.mjs +276 -1
- package/dist/index.cjs +2673 -1
- package/dist/index.mjs +2657 -1
- package/dist/lib/index.cjs +2674 -1
- package/dist/lib/index.js +1 -1
- package/dist/lib/index.mjs +2659 -1
- package/dist/lib/observable/index.cjs +386 -1
- package/dist/lib/observable/index.mjs +364 -1
- package/dist/lib/observable/observable.cjs +384 -1
- package/dist/lib/observable/observable.d.ts +0 -137
- package/dist/lib/observable/observable.d.ts.map +1 -1
- package/dist/lib/observable/observable.js +0 -71
- package/dist/lib/observable/observable.mjs +361 -1
- package/dist/lib/observable/subscription.cjs +180 -1
- package/dist/lib/observable/subscription.d.ts +0 -12
- package/dist/lib/observable/subscription.d.ts.map +1 -1
- package/dist/lib/observable/subscription.js +0 -12
- package/dist/lib/observable/subscription.mjs +157 -1
- package/dist/lib/observable/types.cjs +18 -1
- package/dist/lib/observable/types.d.ts.map +1 -1
- package/dist/lib/predicates.cjs +44 -1
- package/dist/lib/predicates.d.ts +2 -2
- package/dist/lib/predicates.js +2 -2
- package/dist/lib/predicates.mjs +23 -1
- package/dist/lib/signal/api.cjs +571 -1
- package/dist/lib/signal/api.d.ts +211 -1
- package/dist/lib/signal/api.d.ts.map +1 -1
- package/dist/lib/signal/api.js +207 -12
- package/dist/lib/signal/api.mjs +548 -1
- package/dist/lib/signal/cached-resource.cjs +672 -1
- package/dist/lib/signal/cached-resource.d.ts +28 -16
- package/dist/lib/signal/cached-resource.d.ts.map +1 -1
- package/dist/lib/signal/cached-resource.js +35 -29
- package/dist/lib/signal/cached-resource.mjs +650 -1
- package/dist/lib/signal/graph/children.cjs +325 -1
- package/dist/lib/signal/graph/children.js +1 -1
- package/dist/lib/signal/graph/children.mjs +302 -1
- package/dist/lib/signal/graph/compat.cjs +578 -1
- package/dist/lib/signal/graph/compat.d.ts +13 -13
- package/dist/lib/signal/graph/compat.d.ts.map +1 -1
- package/dist/lib/signal/graph/compat.js +33 -31
- package/dist/lib/signal/graph/compat.mjs +556 -1
- package/dist/lib/signal/graph/core.cjs +295 -1
- package/dist/lib/signal/graph/core.d.ts +28 -24
- package/dist/lib/signal/graph/core.d.ts.map +1 -1
- package/dist/lib/signal/graph/core.js +38 -31
- package/dist/lib/signal/graph/core.mjs +273 -1
- package/dist/lib/signal/graph/debounced.cjs +668 -1
- package/dist/lib/signal/graph/debounced.d.ts +5 -5
- package/dist/lib/signal/graph/debounced.d.ts.map +1 -1
- package/dist/lib/signal/graph/debounced.js +5 -5
- package/dist/lib/signal/graph/debounced.mjs +645 -1
- package/dist/lib/signal/graph/derived.cjs +496 -1
- package/dist/lib/signal/graph/derived.d.ts +1 -1
- package/dist/lib/signal/graph/derived.js +1 -1
- package/dist/lib/signal/graph/derived.mjs +473 -1
- package/dist/lib/signal/graph/detect.cjs +66 -1
- package/dist/lib/signal/graph/detect.mjs +45 -1
- package/dist/lib/signal/graph/error-boundary.cjs +301 -1
- package/dist/lib/signal/graph/error-boundary.js +3 -3
- package/dist/lib/signal/graph/error-boundary.mjs +278 -1
- package/dist/lib/signal/graph/index.cjs +305 -1
- package/dist/lib/signal/graph/index.d.ts +7 -6
- package/dist/lib/signal/graph/index.d.ts.map +1 -1
- package/dist/lib/signal/graph/index.js +7 -6
- package/dist/lib/signal/graph/index.mjs +283 -1
- package/dist/lib/signal/graph/observe.cjs +163 -1
- package/dist/lib/signal/graph/observe.d.ts +8 -8
- package/dist/lib/signal/graph/observe.js +5 -5
- package/dist/lib/signal/graph/observe.mjs +140 -1
- package/dist/lib/signal/graph/resource.cjs +620 -1
- package/dist/lib/signal/graph/resource.d.ts +1 -1
- package/dist/lib/signal/graph/resource.js +7 -8
- package/dist/lib/signal/graph/resource.mjs +597 -1
- package/dist/lib/signal/graph/runtime.cjs +501 -1
- package/dist/lib/signal/graph/runtime.d.ts +7 -7
- package/dist/lib/signal/graph/runtime.d.ts.map +1 -1
- package/dist/lib/signal/graph/runtime.js +34 -30
- package/dist/lib/signal/graph/runtime.mjs +478 -1
- package/dist/lib/signal/graph/signal-next.cjs +1208 -1
- package/dist/lib/signal/graph/signal-next.d.ts +5 -5
- package/dist/lib/signal/graph/signal-next.d.ts.map +1 -1
- package/dist/lib/signal/graph/signal-next.js +14 -12
- package/dist/lib/signal/graph/signal-next.mjs +1186 -1
- package/dist/lib/signal/graph/ssr-hooks.cjs +60 -1
- package/dist/lib/signal/graph/ssr-hooks.d.ts +6 -7
- package/dist/lib/signal/graph/ssr-hooks.d.ts.map +1 -1
- package/dist/lib/signal/graph/ssr-hooks.js +6 -7
- package/dist/lib/signal/graph/ssr-hooks.mjs +39 -1
- package/dist/lib/signal/graph/state.cjs +72 -1
- package/dist/lib/signal/graph/state.d.ts +41 -10
- package/dist/lib/signal/graph/state.d.ts.map +1 -1
- package/dist/lib/signal/graph/state.js +83 -22
- package/dist/lib/signal/graph/state.mjs +49 -1
- package/dist/lib/signal/graph/suspense.cjs +301 -1
- package/dist/lib/signal/graph/suspense.js +4 -4
- package/dist/lib/signal/graph/suspense.mjs +278 -1
- package/dist/lib/signal/index-legacy.cjs +2540 -1
- package/dist/lib/signal/index-legacy.d.ts +1 -1
- package/dist/lib/signal/index-legacy.js +1 -1
- package/dist/lib/signal/index-legacy.mjs +2518 -1
- package/dist/lib/signal/index.cjs +1275 -1
- package/dist/lib/signal/index.d.ts +3 -2
- package/dist/lib/signal/index.d.ts.map +1 -1
- package/dist/lib/signal/index.js +7 -4
- package/dist/lib/signal/index.mjs +1253 -1
- package/dist/lib/signal/list.cjs +549 -1
- package/dist/lib/signal/list.d.ts +5 -5
- package/dist/lib/signal/list.js +5 -5
- package/dist/lib/signal/list.mjs +526 -1
- package/dist/lib/signal/resource-api.cjs +626 -1
- package/dist/lib/signal/resource-api.d.ts +5 -5
- package/dist/lib/signal/resource-api.js +5 -5
- package/dist/lib/signal/resource-api.mjs +603 -1
- package/dist/lib/signal/signal.cjs +2023 -1
- package/dist/lib/signal/signal.d.ts +4 -4
- package/dist/lib/signal/signal.d.ts.map +1 -1
- package/dist/lib/signal/signal.js +22 -23
- package/dist/lib/signal/signal.mjs +2000 -1
- package/dist/lib/signal/types.cjs +38 -1
- package/dist/lib/signal/types.d.ts.map +1 -1
- package/dist/lib/signal/types.js +2 -2
- package/dist/lib/signal/types.mjs +17 -1
- package/dist/lib/signal/utilities.cjs +1012 -1
- package/dist/lib/signal/utilities.d.ts +0 -108
- package/dist/lib/signal/utilities.d.ts.map +1 -1
- package/dist/lib/signal/utilities.js +0 -158
- package/dist/lib/signal/utilities.mjs +990 -1
- package/dist/lib/store/api.cjs +612 -1
- package/dist/lib/store/api.d.ts +33 -0
- package/dist/lib/store/api.d.ts.map +1 -1
- package/dist/lib/store/api.js +41 -8
- package/dist/lib/store/api.mjs +596 -1
- package/dist/lib/store/index.cjs +691 -1
- package/dist/lib/store/index.js +1 -1
- package/dist/lib/store/index.mjs +676 -1
- package/dist/lib/store/setter.types.cjs +18 -1
- package/dist/lib/store/setter.types.d.ts +43 -3
- package/dist/lib/store/setter.types.d.ts.map +1 -1
- package/dist/lib/store/store.cjs +658 -1
- package/dist/lib/store/store.d.ts +72 -0
- package/dist/lib/store/store.d.ts.map +1 -1
- package/dist/lib/store/store.js +148 -5
- package/dist/lib/store/store.mjs +644 -1
- package/dist/lib/store/types.cjs +18 -1
- package/dist/lib/store/types.d.ts +1 -1
- package/dist/lib/store/types.d.ts.map +1 -1
- package/dist/lib/store/utils.cjs +43 -1
- package/dist/lib/store/utils.d.ts +1 -1
- package/dist/lib/store/utils.js +1 -1
- package/dist/lib/store/utils.mjs +22 -1
- package/dist/lib/subject.cjs +450 -1
- package/dist/lib/subject.js +3 -91
- package/dist/lib/subject.mjs +427 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/version.generated.cjs +27 -1
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.js +2 -2
- package/dist/version.generated.mjs +7 -1
- package/package.json +5 -4
package/dist/cdn/reactive.cjs
CHANGED
|
@@ -1 +1,2673 @@
|
|
|
1
|
-
"use strict";var Tt=Object.defineProperty;var hr=Object.getOwnPropertyDescriptor;var Sr=Object.getOwnPropertyNames;var xr=Object.prototype.hasOwnProperty;var gr=(e,t)=>{for(var n in t)Tt(e,n,{get:t[n],enumerable:!0})},wr=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Sr(t))!xr.call(e,o)&&o!==n&&Tt(e,o,{get:()=>t[o],enumerable:!(r=hr(t,o))||r.enumerable});return e};var Or=e=>wr(Tt({},"__esModule",{value:!0}),e);var Bo={};gr(Bo,{$NAME:()=>Gn,$NODE:()=>ee,$PROXY:()=>Vr,$RAW:()=>xe,$SELF:()=>ot,$SIGNAL:()=>$r,$STORE:()=>zn,$TRACK:()=>st,Observable:()=>q,SafeSubscriber:()=>Ge,Signal:()=>Bn,Store:()=>G,StoreAPI:()=>ar,Subject:()=>mt,Subscriber:()=>ce,Subscription:()=>ue,SuspenseContext:()=>nt,VERSION:()=>We,__DEV__:()=>be,batch:()=>V,clearAllCachedResources:()=>qo,clearCachedResourceNamespace:()=>Mo,combineSignal:()=>io,combineSignals:()=>ao,createCachedResource:()=>No,createChildOwner:()=>vn,createComputed:()=>An,createComputedStore:()=>Zn,createContext:()=>ye,createDebounce:()=>Fn,createDebouncedResource:()=>Un,createDebouncedSignal:()=>Bt,createDeferred:()=>Dn,createEffect:()=>N,createErrorBoundary:()=>Mn,createMemo:()=>y,createMutableStore:()=>Wt,createRenderEffect:()=>kn,createResource:()=>me,createRoot:()=>J,createSelector:()=>_n,createSignal:()=>b,createStore:()=>$e,createStoreEffect:()=>er,createStoreMemo:()=>tr,createSuspenseBoundary:()=>In,debounceSignal:()=>vo,disposeScope:()=>bn,distinctSignal:()=>so,effect:()=>Wr,everySignal:()=>ro,filterSignal:()=>Zr,findSignal:()=>to,flush:()=>En,getNode:()=>or,getOwner:()=>Ue,getServerData:()=>Ne,getStoreNode:()=>sr,guardSignal:()=>To,indexArray:()=>Ir,isComponent:()=>Ct,isMemo:()=>At,isOwnerDisposed:()=>mn,isProvider:()=>Pt,isResource:()=>kt,isSignal:()=>je,isStore:()=>rr,isStoreProxy:()=>ct,isSuspense:()=>Et,keyArray:()=>Ur,makeArrayFlat:()=>Ze,mapArray:()=>Fr,mapSignal:()=>Jr,memo:()=>Hr,mergeSignal:()=>uo,modifiable:()=>ir,nextResourceId:()=>Me,observeReactiveNodes:()=>ht,omitSignal:()=>po,on:()=>Pn,onCleanup:()=>k,operate:()=>Rr,pickSignal:()=>fo,produceUtil:()=>ur,provide:()=>Te,provideErrorBoundary:()=>qn,provideSuspense:()=>jn,readChildren:()=>tt,readSignal:()=>mo,reconcileUtil:()=>cr,reduceSignal:()=>eo,reportReactiveBinding:()=>cn,reportReactiveContext:()=>le,reportReactiveContextCreated:()=>Xe,reportReactiveDirective:()=>fn,reportReactiveProps:()=>ln,reportResourceData:()=>qe,resource:()=>Ln,runWithOwner:()=>ve,selectSignal:()=>lo,setOwner:()=>wt,setResourceDataSink:()=>Mt,setResourceIdSource:()=>Nt,setResourceTracker:()=>It,setServerDataGetter:()=>jt,signal:()=>Kr,someSignal:()=>no,sortSignal:()=>oo,startTransition:()=>Rt,store:()=>lr,throttleSignal:()=>bo,trackResourcePromise:()=>Z,untrack:()=>U,untrackStore:()=>Gt,unwrap:()=>we,useContext:()=>hn,useTransition:()=>Cn,whenSignal:()=>yo,wrap:()=>nr,zipSignal:()=>co});module.exports=Or(Bo);var We="1.0.0-alpha.83";function vt(e){return typeof e=="function"&&!/^class\s/.test(Function.prototype.toString.call(e))}function tn(e){return e==null||Array.isArray(e)||typeof e=="function"||e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof Error?!1:typeof e=="object"}function bt(e){return e instanceof Promise||!!e&&(typeof e=="object"||typeof e=="function")&&"then"in e}var ue=class e{constructor(t){this._closed=!1;this._parentOrParents=null;this._subscriptions=null;t&&(this._subscriptions=[t])}get closed(){return this._closed}unsubscribe(){if(this._closed)return;this._closed=!0;let{_parentOrParents:t,_subscriptions:n}=this;if(t instanceof e)t.remove(this);else if(t!==null)for(let r of t)r.remove(this);if(n){for(let r of n)if(vt(r)&&!(r instanceof e))try{r()}catch(o){console.error("Error in unsubscribe function:",o)}else if(tn(r)&&typeof r.unsubscribe=="function")try{r.unsubscribe()}catch(o){console.error("Error unsubscribing child:",o)}this._subscriptions=null}}add(t){if(!t||t===this)return this;if(t.closed)return this;let{_closed:n,_subscriptions:r}=this;if(n){if(vt(t))try{t()}catch(o){console.error("Error in unsubscribe function:",o)}else if(t.unsubscribe)try{t.unsubscribe()}catch(o){console.error("Error unsubscribing:",o)}return this}return r||(this._subscriptions=[]),this._subscriptions.push(t),t instanceof e&&t._addParent(this),this}remove(t){let{_subscriptions:n}=this;if(!n)return;let r=n.indexOf(t);r!==-1&&(n.splice(r,1),t._removeParent(this))}_addParent(t){let{_parentOrParents:n}=this;n?Array.isArray(n)?n.push(t):this._parentOrParents=[n,t]:this._parentOrParents=t}_removeParent(t){let{_parentOrParents:n}=this;if(n===t)this._parentOrParents=null;else if(Array.isArray(n)){let r=n.indexOf(t);r!==-1&&(n.splice(r,1),n.length===1&&(this._parentOrParents=n[0]))}}};var ce=class extends ue{constructor(n,r,o){super();this.isStopped=!1;let s;n?typeof n=="object"?s=n:s={next:n,error:r,complete:o}:s={},this.destination=s}next(n){if(!this.isStopped&&this.destination.next)try{this.destination.next(n)}catch(r){this.error(r)}}error(n){if(!this.isStopped){if(this.isStopped=!0,this.destination.error)try{this.destination.error(n)}catch(r){throw r}else throw n;this.unsubscribe()}}complete(){if(!this.isStopped){if(this.isStopped=!0,this.destination.complete)try{this.destination.complete()}catch(n){this.error(n);return}this.unsubscribe()}}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}},Ge=class extends ce{constructor(n,r,o,s){super(n,r,o);this._isUnsubscribing=!1;this._parentSubscriber=null;this._parentSubscriber=s||null}next(n){if(!this.isStopped&&!this._isUnsubscribing)try{super.next(n)}catch(r){this.error(r)}}error(n){if(!this.isStopped&&!this._isUnsubscribing){this._isUnsubscribing=!0;try{super.error(n)}finally{this._isUnsubscribing=!1}}}complete(){if(!this.isStopped&&!this._isUnsubscribing){this._isUnsubscribing=!0;try{super.complete()}finally{this._isUnsubscribing=!1}}}unsubscribe(){this.closed||(this._isUnsubscribing=!0,super.unsubscribe(),this._isUnsubscribing=!1)}};function Rr(e){return new ce(e.next,e.error,e.complete)}var q=class extends ue{constructor(t){if(super(),t)this._subscribe=t;else throw new TypeError("Observable constructor requires a subscribe function")}subscribe(t,n,r){let o;t instanceof ce?o=t:o=new Ge(t,n,r);let{_subscribe:s}=this;try{let i=s.call(this,o);i&&(typeof i=="function"||typeof i.unsubscribe=="function")&&o.add(i)}catch(i){o.error(i)}return o}pipe(...t){return t.length===0?this:t.reduce((n,r)=>r(n),this)}toPromise(){return new Promise((t,n)=>{let r;this.subscribe({next:o=>r=o,error:n,complete:()=>t(r)})})}};var mt=class extends q{constructor(){super(n=>{if(this.closed)throw new Error("Subject has been closed");if(this.hasError)n.error(this.thrownError);else if(this.isStopped)n.complete();else return this.observers.push(n),()=>{let r=this.observers.indexOf(n);r!==-1&&this.observers.splice(r,1)}});this.observers=[];this.isStopped=!1;this.hasError=!1;this.thrownError=null}next(n){if(this.isStopped)return;let{observers:r}=this,o=r.length,s=r.slice();for(let i=0;i<o;i++)s[i].next?.(n)}error(n){if(this.isStopped)return;this.hasError=!0,this.thrownError=n,this.isStopped=!0;let{observers:r}=this;this.observers=[];let o=r.length,s=r.slice();for(let i=0;i<o;i++)s[i].error?.(n)}complete(){if(this.isStopped)return;this.isStopped=!0;let{observers:n}=this;this.observers=[];let r=n.length,o=n.slice();for(let s=0;s<r;s++)o[s].complete?.()}unsubscribe(){this.isStopped=!0,this.observers=[]}asObservable(){return new q(r=>this.subscribe(r))}};var Ar="__fluixi_signal_next_state__",kr=e=>{typeof queueMicrotask=="function"?queueMicrotask(e):Promise.resolve().then(e)},c=globalThis[Ar]??={consumer:null,untracked:!1,owner:null,queue:[],scheduled:!1,flushing:!1,batchDepth:0,hostSchedule:kr,onSuspend:null,onError:null,observer:null};function ht(e){return c.observer=e,()=>{c.observer===e&&(c.observer=null)}}var E=[],ze;function rn(e,t){if(!c.observer)return t();let n=ze;ze=e;try{return t()}finally{ze=n}}function Q(e){let t=c.observer;t&&t.created(e.parents===void 0?{...e,parents:E,origin:e.origin??ze}:e)}function on(e){return c.observer?(E.push(e),!0):!1}function sn(){E.pop()}function an(e){c.observer?.ran?.(e)}function un(e,t){c.observer?.wrote?.(e,t)}function cn(e,t,n,r){let o=c.observer;!o?.bound||!E.length||o.bound(E[E.length-1],e,t,n,r)}function ln(e){let t=c.observer;!t?.props||!E.length||!e||t.props(E[E.length-1],e)}function fn(e,t,n,r){let o=c.observer;!o?.directive||!E.length||o.directive(E[E.length-1],e,t,n,r)}function Xe(e){c.observer?.contextCreated?.(e)}function le(e,t,n){let r=c.observer;!r?.context||!E.length||r.context(E[E.length-1],e,t,n)}function St(e,t,n){c.observer?.moved?.(e,t,n)}function H(e){c.observer?.disposed?.(e)}var Cr="__FLUIXI_DEVTOOLS_HOOK__",nn=globalThis[Cr];if(typeof nn?.inject=="function")try{nn.inject({observeReactiveNodes:ht,version:We})}catch{}function fe(){return c.observer!=null}var dn=0,pn=1,Pe=2,Ye=class{constructor(){this.observers=null;this.watchers=null;this.version=0}updateIfNecessary(){}track(){if(c.untracked)return;let t=c.consumer;t&&((this.observers??=new Set).add(t),(t.sources??=new Set).add(this))}},de=class extends Ye{constructor(t,n){super(),this._value=t,this._equals=n?.equals===!1?()=>!1:n?.equals??Object.is}get(){return this.track(),this._value}set(t){if(!this._equals(this._value,t)){if(this._value=t,this.version++,un(this,c.consumer),this.observers)for(let n of[...this.observers])n.markDirty(Pe);xt(this)}}peek(){return this._value}},W=class extends Ye{constructor(n,r){super();this._threw=!1;this._initialized=!1;this.state=Pe;this.sources=null;this._fn=n,this._equals=r?.equals===!1?()=>!1:r?.equals??Object.is}get(){if(c.consumer===this)throw new Error("Signal.Computed cannot read itself");if(this.track(),this.updateIfNecessary(),this._threw)throw this._error;return this._value}updateIfNecessary(){if(this.state===pn&&this.sources){for(let n of this.sources)if(n.updateIfNecessary(),this.state===Pe)break}(this.state===Pe||!this._initialized)&&this.recompute(),this.state=dn}recompute(){if(this.sources){for(let l of this.sources)l.observers?.delete(this);this.sources.clear()}let n=c.consumer,r=c.untracked,o=on(this);c.consumer=this,c.untracked=!1;let s,i=!1,u;try{s=this._fn()}catch(l){i=!0,u=l,s=this._value}finally{c.consumer=n,c.untracked=r,o&&sn()}let a=!this._initialized||this._threw!==i||(i?u!==this._error:!this._equals(this._value,s));if(this._initialized=!0,this._threw=i,this._error=u,this._value=s,an(this),a){if(this.version++,this.observers)for(let l of[...this.observers])l.markDirty(Pe);xt(this)}}markDirty(n){if(this.state>=n)return;let r=this.state===dn;if(this.state=n,r){if(this.observers)for(let o of[...this.observers])o.markDirty(pn);xt(this)}}peek(){if(this.updateIfNecessary(),this._threw)throw this._error;return this._value}};function xt(e){if(e.watchers)for(let t of[...e.watchers])t._notify(e)}var pe=class{constructor(t){this._watched=new Set;this._pending=new Set;this._notifyFn=t}watch(...t){for(let n of t)this._watched.add(n),(n.watchers??=new Set).add(this)}unwatch(...t){for(let n of t)this._watched.delete(n),n.watchers?.delete(this),this._pending.delete(n)}getPending(){let t=[...this._pending];return this._pending.clear(),t}_notify(t){if(!this._watched.has(t)||this._pending.has(t))return;let n=this._pending.size===0;this._pending.add(t),n&&this._notifyFn()}};function _e(e){if(c.untracked)return e();c.untracked=!0;try{return e()}finally{c.untracked=!1}}function yn(){return c.consumer}function Tn(e){return!!(e.observers&&e.observers.size)||!!(e.watchers&&e.watchers.size)}function vn(e){let t=Fe(e);return e&&(e.owned??=[]).push(t),t}function bn(e,t=!0){De(e,t)}function mn(e){return!!e&&e.disposed===!0}function Fe(e){return{cleanups:null,owned:null,parent:e,contexts:null}}function ye(e,t){let n=Symbol(t??"context");return Xe(n),{id:n,defaultValue:e,Provider:o=>{le(n,"provide",o.value);let s=c.owner,i=Fe(s);(i.contexts=new Map).set(n,o.value),s&&(s.owned??=[]).push(i),c.owner=i;try{return o.children}finally{c.owner=s}}}}function hn(e){let t=c.owner;for(;t;){if(t.contexts&&t.contexts.has(e.id)){let n=t.contexts.get(e.id);return le(e.id,"read",n),n}t=t.parent}return le(e.id,"read",e.defaultValue),e.defaultValue}function Qe(e,t){let n=e;for(;n;){if(n.contexts&&n.contexts.has(t.id))return n.contexts.get(t.id);n=n.parent}return t.defaultValue}function Te(e,t,n){let r=Fe(c.owner);(r.contexts=new Map).set(e.id,t),c.owner&&(c.owner.owned??=[]).push(r);let o=c.owner;c.owner=r;try{return n()}finally{c.owner=o}}function Sn(e){c.onSuspend=e}function xn(e){return c.onSuspend?(c.onSuspend(e,c.owner),!0):!1}function gn(e){c.onError=e}function Ue(){return c.owner}function wt(e){let t=c.owner;return c.owner=e,t}function ve(e,t){let n=c.owner;c.owner=e;try{return t()}finally{c.owner=n}}function k(e){if(c.owner){if(c.owner.disposed){e();return}(c.owner.cleanups??=[]).push(e)}}function De(e,t=!0){if(!e.disposed){if(e.owned){for(let n=e.owned.length-1;n>=0;n--)De(e.owned[n]);e.owned=null}if(e.cleanups){for(let n=e.cleanups.length-1;n>=0;n--)e.cleanups[n]();e.cleanups=null}t&&(e.disposed=!0)}}function J(e){let t=Fe(c.owner);c.owner&&(c.owner.owned??=[]).push(t);let n=c.owner;c.owner=t;try{return e(()=>De(t))}finally{c.owner=n}}function wn(e){c.hostSchedule=e??(t=>{Promise.resolve().then(t)})}function Er(e){e.queued||(e.queued=!0,c.queue.push(e),!c.scheduled&&c.batchDepth===0&&(c.scheduled=!0,c.hostSchedule(Ie)))}function Ie(){if(c.scheduled=!1,c.flushing)return;c.flushing=!0;let e=0;try{for(;c.queue.length;){if(++e>1e5)throw new Error("[fluixi] effect flush did not settle (cycle?)");let t=c.queue;c.queue=[];for(let n of t)n.queued=!1,n.disposed||n.run()}}finally{c.flushing=!1}}function On(){c.batchDepth===0&&Ie()}function Ot(e){c.batchDepth++;try{return e()}finally{--c.batchDepth===0&&Ie()}}var gt=class{constructor(t,n=!1){this.queued=!1;this.disposed=!1;this.owner=Fe(c.owner),c.owner&&(c.owner.cleanups??=[]).push(()=>this.dispose()),this.computed=new W(()=>{De(this.owner,!1),ve(this.owner,()=>{let r=t();typeof r=="function"&&(this.owner.cleanups??=[]).push(r)})}),Q({kind:"effect",node:this.computed,handle:this,internal:!n}),this.watcher=new pe(()=>Er(this)),this.run(),this.watcher.watch(this.computed)}run(){if(!this.disposed){this.watcher.getPending();try{this.computed.get()}catch(t){if(t&&typeof t.then=="function"&&c.onSuspend){c.onSuspend(t,this.owner);return}if(c.onError&&c.onError(t,this.owner))return;throw t}}}dispose(){this.disposed||(this.disposed=!0,H(this.computed),this.watcher.unwatch(this.computed),De(this.owner))}};function Je(e,t=!1){let n=new gt(e,t);return()=>n.dispose()}function Pr(e){return!!e&&typeof e.then=="function"}wn(()=>{});var Rn=Symbol.for("signal"),_r=Symbol.for("memo"),Dr=Symbol.for("signal-node");function b(e,t){let n=new de(e,{equals:t?.equals}),r=(()=>n.get()),o=(s=>{let i=typeof s=="function"?s(n.peek()):s;return n.set(i),On(),i});return Object.defineProperty(r,Rn,{value:!0,enumerable:!0}),Object.defineProperty(r,Dr,{value:{get value(){return n.peek()},get version(){return n.version}},enumerable:!1}),Q({kind:"signal",node:n,handle:r,name:t?.name,set:o}),fe()&&k(()=>H(n)),[r,o]}function y(e,t,n){let r=t,o=Ue(),s=new W(()=>ve(o,()=>{try{return r=e(r)}catch(u){if(Pr(u))return xn(u),r;throw u}}),{equals:n?.equals}),i=(()=>s.get());return Object.defineProperty(i,Rn,{value:!0,enumerable:!0}),Object.defineProperty(i,_r,{value:!0,enumerable:!0}),Q({kind:"memo",node:s,handle:i,name:n?.name}),fe()&&k(()=>H(s)),i}function N(e,t){let n=t;return Je(()=>{n=e(n)},!0)}function An(e,t){let n=t;Je(()=>{n=e(n)})}function kn(e,t){let n=t;return Je(()=>{n=e(n)})}function V(e){return Ot(e)}function U(e){return _e(e)}function Rt(e){return Ot(e),Promise.resolve()}function Cn(){return[()=>!1,Rt]}function En(){return Ie(),Promise.resolve()}function Pn(e,t,n){let r=Array.isArray(e),o,s=n?.defer??!1;return i=>{let u=r?e.map(l=>l()):e();if(s){s=!1,o=u;return}let a=_e(()=>t(u,o,i));return o=u,a}}function Fr(e,t,n){let r=[];return k(()=>{for(let o of r)o.dispose();r=[]}),y(()=>{let o=e()||[];return U(()=>{if(o.length===0){for(let a of r)a.dispose();return r=[],n?.fallback?n.fallback():[]}let s=new Map;for(let a of r)s.has(a.item)||s.set(a.item,a);let i=[],u=new Set;for(let a=0;a<o.length;a++){let l=o[a],m=s.get(l);if(m&&!u.has(m))m.setIndex(a),i.push(m),u.add(m);else{let d,v,h;J(x=>{h=x;let[P,p]=b(a,{name:"row index"});v=p,d=t(l,P)});let O={item:l,rendered:d,dispose:h,setIndex:v};i.push(O),u.add(O)}}for(let a of r)u.has(a)||a.dispose();return r=i,i.map(a=>a.rendered)})},void 0,{name:"mapArray"})}function Ur(e,t,n,r){let o=[],s=[];return k(()=>{for(let i of s)i.dispose();o=[],s=[]}),y(()=>{let i=e()||[];return U(()=>{if(i.length===0){for(let d of s)d.dispose();return o=[],s=[],r?.fallback?r.fallback():[]}let u=new Map;for(let d=0;d<o.length;d++)u.set(o[d],s[d]);let a=[],l=[],m=new Set;for(let d=0;d<i.length;d++){let v=t(i[d]),h=u.get(v);if(h&&!m.has(v))h.setIndex(d),a.push(h);else{let O,x,P;J(p=>{P=p;let[I,A]=b(d,{name:"row index"});x=A;let L=y(_=>{let j=(e()||[])[I()];return j??_},i[d]);O=n(L,I)}),a.push({rendered:O,dispose:P,setIndex:x})}l.push(v),m.add(v)}for(let[d,v]of u)m.has(d)||v.dispose();return o=l,s=a,a.map(d=>d.rendered)})},void 0,{name:"keyArray"})}function Ir(e,t,n){let r=[];return k(()=>{for(let o of r)o.dispose();r=[]}),y(()=>{let o=e()||[];return U(()=>{if(o.length===0){for(let a of r)a.dispose();return r=[],n?.fallback?n.fallback():[]}let s=r.length,i=o.length;for(let a=s;a<i;a++){let l,m,d,v=o[a];J(h=>{d=h;let[O,x]=b(v);m=x,l=t(O,a)}),r.push({rendered:l,setItem:m,dispose:d})}for(let a=i;a<s;a++)r[a].dispose();i<s&&(r=r.slice(0,i));let u=Math.min(s,i);for(let a=0;a<u;a++)r[a].setItem(o[a]);return r.map(a=>a.rendered)})},void 0,{name:"indexArray"})}var jr=typeof window>"u"?!1:window.__FLUIXI_PROD__===!0,be=typeof process>"u"?jr:!1,Nr=Symbol.for("signal"),Mr=Symbol.for("memo"),qr=Symbol.for("resource");function je(e){return typeof e=="function"&&e[Nr]===!0}function At(e){return typeof e=="function"&&e[Mr]===!0}function kt(e){return typeof e=="function"&&e[qr]===!0}function Ct(e){return typeof e=="function"&&e[Symbol.for("fluixi-component")]===!0}function Et(e){return typeof e=="function"&&e[Symbol.for("fluixi-suspense")]===!0}function Pt(e){return typeof e=="function"&&e[Symbol.for("fluixi-provider")]===!0}function Ze(e){return Array.isArray(e)?e.length===2&&e[1]===" "?Array.isArray(e[0])?Ze(e[0]):(typeof e[0]=="function",e[0]):e.length===1&&typeof e[0]=="function"?e[0]:e:e}var _t=null;function It(e){_t=e}function Z(e){_t&&_t(e)}var Dt=null;function jt(e){Dt=e}function Ne(e){return Dt?Dt(e):void 0}var Ft=null;function Nt(e){Ft=e}function Me(){return Ft?Ft():void 0}var Ut=null;function Mt(e){Ut=e}function qe(e,t){Ut&&Ut(e,t)}function _n(e,t=(n,r)=>n===r){let n=new Map;return N(()=>{let r=e();for(let[o,s]of n){let[i,u]=s,a=t(o,r);i()!==a&&u(a)}}),r=>{let o=n.get(r);if(!o){let[s,i]=b(!1);o=[s,i],n.set(r,o);let u=e();i(t(r,u))}return o[0]()}}function Dn(e,t){let[n,r]=b(e(),t);return N(()=>{let o=e();t?.timeoutMs?setTimeout(()=>r(()=>o),t.timeoutMs):typeof requestIdleCallback=="function"?requestIdleCallback(()=>r(()=>o)):Promise.resolve().then(()=>r(()=>o))}),n}function Fn(e,t){let n,r=(...o)=>{n!==void 0&&clearTimeout(n),n=setTimeout(()=>{n=void 0,e(...o)},t)};return k(()=>{n!==void 0&&clearTimeout(n)}),r}function Br(e){return!!e&&typeof e.then=="function"}var qt=Symbol();function me(e,t,n={}){let r,o;typeof t=="function"?(r=typeof e=="function"?e:()=>e,o=t):(r=()=>!0,o=e,t&&typeof t=="object"&&(n=t));let s=n.transport===!1?void 0:Me(),i=s!==void 0?Ne(s):void 0,u=i!==void 0,[a,l]=b(i!==void 0?i.value:n.initialValue,{equals:!1}),[m,d]=b(void 0,{equals:!1}),[v,h]=b(i!==void 0||n.initialValue!==void 0?"ready":"unresolved",{equals:!1}),[O,x]=b(void 0,{equals:!1}),[P,p]=b(void 0,{equals:!1}),I=qt,A=!1;N(()=>{let C=r();if(P(),C===!1||C===null||C===void 0){I=qt,V(()=>{h("unresolved"),x(void 0),d(void 0)});return}let j=A;if(A=!1,I!==qt&&C===I&&!j)return;if(I=C,u){u=!1;return}let K=!1;k(()=>K=!0);let X=U(v),Ee=U(a),se=X==="ready"||X==="refreshing";V(()=>{h(se?"refreshing":"pending"),d(void 0)});try{let M=o(C,{value:Ee,refetching:se});Br(M)?(x(M),Z(M),M.then(Y=>{K||(s!==void 0&&qe(s,Y),V(()=>{l(()=>Y),h("ready"),x(void 0)}))},Y=>{K||V(()=>{d(Y),h("errored"),x(void 0)})})):V(()=>{l(()=>M),h("ready"),x(void 0)})}catch(M){if(K)return;V(()=>{d(M),h("errored"),x(void 0)})}});let L=()=>{let C=v();return C==="pending"||C==="refreshing"},_=(()=>{let C=m();if(C)throw C;if(L()){let j=O();if(j)throw j}return a()});return Object.defineProperties(_,{state:{get:v},loading:{get:L},error:{get:m},latest:{get:a}}),Object.defineProperty(_,Symbol.for("resource"),{value:!0,enumerable:!0}),Object.defineProperty(_,Symbol.for("signal"),{value:!0,enumerable:!0}),[_,{mutate:l,refetch:()=>{A=!0,p(void 0)}}]}function Bt(e,t=300){let[n,r]=b(e),[o,s]=b(e),[i,u]=b(!1),a,l=()=>{a!==void 0&&(clearTimeout(a),a=void 0)},m=()=>{l();let v=U(n);return s(()=>v),u(!1),v},d=(v=>{let h=typeof v=="function"?v(U(n)):v;return r(()=>h),u(!0),l(),a=setTimeout(m,t),h});return k(l),[o,d,{immediate:n,pending:i,flush:m,cancel:()=>{l(),u(!1)}}]}function Lr(e){return e!=null&&e!==""}function Un(e,t,n={}){let{delay:r=300,initialValue:o,shouldFetch:s=Lr}=n,[i,u,a]=Bt(e,r),l=()=>s(i())?i():!1,[m,{refetch:d}]=me(l,t,o===void 0?{}:{initialValue:o});return[m,{...a,query:i,setQuery:u,refetch:d}]}function et(e){if(typeof e=="function"&&!e.length){let t=e();return je(t)?t:et(t)}if(Array.isArray(e)){let t=[];for(let n=0;n<e.length;n++){let r=et(e[n]);Array.isArray(r)?t.push.apply(t,r):t.push(r)}return t}return e}function tt(e){let t=y(e);return be?y(()=>et(t()),void 0,{name:"children"}):y(()=>et(t()))}var nt=ye();Sn((e,t)=>{let n=Qe(t,nt);n&&(n.increment(),e.finally(()=>n.decrement()))});function In(){let[e,t]=b(0),n=0;return{increment:()=>t(n+=1),decrement:()=>t(n-=1),inFallback:()=>e()>0}}function jn(e,t){return Te(nt,e,t)}var Nn=ye();gn((e,t)=>{let n=Qe(t,Nn);return n?(n.setError(e),!0):!1});function Mn(){let[e,t]=b(void 0,{equals:!1});return{error:e,reset:()=>t(()=>{}),setError:r=>t(()=>r)}}function qn(e,t){return Te(Nn,e,t)}var Bn={State:de,Computed:W,subtle:{Watcher:pe,untrack:_e,currentComputed:yn,hasSinks:Tn}};var $r=Symbol.for("signal"),Vr=Symbol.for("fluixi-proxy");function Kr(e,t){let[n,r]=b(e,t);return Object.assign(n,{set:r})}function Hr(e,t,n){return y(e,t,n)}function Wr(e,t){return N(e,t)}function Ln(...e){let[t,n]=me(...e);return Object.assign(t,n)}var g=require("@fluixi/reactive/signal");var xe=Symbol("store-raw"),ee=Symbol("store-node"),$n=Symbol("store-has"),ot=Symbol("store-self"),st=Symbol("store-track"),Gn=Symbol("store-name"),zn=Symbol("store-store"),Le=new WeakMap,$t=new WeakMap,ge=new WeakMap,it=new WeakMap;function Gr(e,t){if(!Se(e)||!fe())return;let n=new Set,r=i=>{if(!(!Se(i)||n.has(i))){n.add(i);for(let u of Object.values(i))r(u)}};r(it.get(t)??t);let o=new Set,s=i=>{if(!Se(i))return;let u=i;if(n.has(u)||o.has(u))return;o.add(u);let a=Le.get(u);if(a){for(let l of a.keys.values())H(l);a.all&&H(a.all),Le.delete(u),ge.delete(u),$t.delete(u)}for(let l of Object.values(u))s(l)};s(e)}var at=(e,t,n)=>n?`${e}[${String(t)}]`:`${e}.${String(t)}`;function Xn(e,t,n){let r=t?.owner,o=r&&n!==void 0?at(r.name,n,t?.array):void 0,[s,i]=rn(r?.store,()=>(0,g.createSignal)(e,o?{name:o}:void 0)),u=s;return u.$=i,u}function ut(e){let t=Le.get(e);return t?t.owner||(t.owner=ge.get(e)):Le.set(e,t={keys:new Map,owner:ge.get(e),array:Array.isArray(e)}),t}function Vn(e,t,n){let r=e.keys.get(t);return r||e.keys.set(t,r=Xn(n,e,t)),r}function zr(e,t,n,r){let o=ge.get(e);if(o&&o.store===t&&o.name===n)return;let s={store:t,name:n};ge.set(e,s),it.set(e,it.get(r)??r);let i=Le.get(e);if(i&&(i.owner=s,!!fe())){for(let[u,a]of i.keys)St(a,t,at(n,u,i.array));i.all&&St(i.all,t,at(n,"*",i.array))}}function Kn(e){let t=ut(e);(t.all||(t.all=Xn(void 0,t,"*")))()}function Hn(e,t){e.$(typeof t=="function"?()=>t:t)}function Se(e){if(e==null||typeof e!="object")return!1;if(Array.isArray(e))return!0;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function rt(e){if(!Se(e))return e;let t=$t.get(e);if(t)return t;let n=new Proxy(e,Xr);return $t.set(e,n),n}var Xr={get(e,t,n){if(t===xe||t===ee)return e;if(t===g.$PROXY)return n;if(t===$n)return a=>a in e;if(t==="__proxy")return!0;if(t===st||t===ot)return Kn(e),n;let r=e[t];if(typeof r=="function"&&!Object.prototype.hasOwnProperty.call(e,t))return r;let o=Object.getOwnPropertyDescriptor(e,t);if(o&&o.get)return o.get.call(n);let s=ut(e),i=Vn(s,t,r),u=i();return Se(u)?(s.owner&&zr(u,i,at(s.owner.name,t,s.array),e),rt(u)):u},set(){return!0},deleteProperty(e,t){return t in e&&Be(e,t,void 0),!0},has(e,t){return t===xe||t===g.$PROXY||t===ee||t===$n||t===ot||t===st?!0:(Vn(ut(e),t,e[t])(),t in e)},ownKeys(e){return Kn(e),Reflect.ownKeys(e)},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e,t)}};function Yn(e,t=new Set){if(e==null||typeof e!="object")return e;let n=e[xe]??e;if(t.has(n)||!Se(n))return n;t.add(n);let r=!1,o=i=>{let u=Yn(i,t);return u!==i&&(r=!0),u};if(Array.isArray(n)){let i=n.map(o);return r?i:n}let s={};for(let i of Object.keys(n))s[i]=o(n[i]);return r?s:n}function Be(e,t,n){let r=Yn(n),o=e[t];if(o===r&&(r!==void 0||t in e))return;let s=Array.isArray(e),i=s?e.length:0;r===void 0?delete e[t]:e[t]=r;let u=ut(e),a=u.keys.get(t);if(a&&Hn(a,r),Gr(o,e),s&&e.length!==i){let l=u.keys.get("length");l&&Hn(l,e.length)}u.all&&u.all.$(void 0)}function Wn(e,t){return typeof e=="function"?e(t):e}function Vt(e,t){for(let n of Object.keys(t)){let r=t[n],o=e[n];r&&typeof r=="object"&&!Array.isArray(r)&&o&&typeof o=="object"&&!Array.isArray(o)?Vt(o,r):Be(e,n,r)}}function Ht(e){let t=[],n=e.replace(/\[([^\]]*)\]/g,".$1");for(let r of n.split("."))r.length&&t.push(r);return t}function Qn(e,t,n){let r=t.length-1;for(let s=0;s<r;s++){let i=t[s];if(i==="*"){let a=t.slice(s+1);if(Array.isArray(e))for(let l=0;l<e.length;l++)Qn(e[l],a,n);return}let u=e[i];(u==null||typeof u!="object")&&(u=/^\d+$/.test(t[s+1])?[]:{},Be(e,i,u)),e=u}let o=t[r];if(o==="*"){if(Array.isArray(e))for(let s=0;s<e.length;s++)Be(e,s,Wn(n,e[s]));return}Be(e,o,Wn(n,e[o]))}function Lt(e,t,n){Qn(e,Ht(t),n)}function Yr(e,t){let n=t[0];if(typeof n=="function"&&t.length===1){let r=n(e);r&&r!==e&&Vt(e,r);return}if(Array.isArray(n)&&t.length===1){for(let r of n)Array.isArray(r)&&Lt(e,r[0],r[1]);return}if(n&&typeof n=="object"&&!Array.isArray(n)&&t.length===1){Vt(e,n);return}if(Array.isArray(t[1])&&t.length>=3){Lt(e,`${n}.${t[1].join(".")}`,t[2]);return}Lt(e,String(n),t[1])}function Kt(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Kt);let t={};for(let n of Object.keys(e))t[n]=Kt(e[n]);return t}function he(e,t){let n=e;for(let r of Ht(t)){if(n==null)return;n=n[r]}return n}var G=class{constructor(t,n={immutable:!0}){this.options=n;this.root=t,this.set=((...r)=>(0,g.batch)(()=>Yr(this.root,r))),t&&typeof t=="object"&&(ge.set(t,{store:this,name:n.name??"store"}),it.set(t,t)),Q({kind:"store",node:this,handle:()=>this.root,name:n.name})}get state(){return rt(this.root)}get proxy(){return rt(this.root)}get accessor(){return(()=>rt(this.root))}unwrap(){return this.root}getNode(t){return this.root&&this.root[t]}get(t){if(t==null||t==="")return we(this.state);let n=this.state;for(let r of Ht(t)){if(n==null)return;n=n[r]}return we(n)}select(t){return(0,g.createMemo)(()=>t(this.state))}subscribe(t){return(0,g.createEffect)(()=>t(this.state))}watch(t,n){let r;return(0,g.createEffect)(()=>{let o=t(this.state);Object.is(o,r)||(n(o,r),r=o)})}reactive(t){return(0,g.createMemo)(()=>this.state[t])}produce(t){this.set((n=>{let r=Kt(n);return t(r),r}))}reconcile(t,n={}){this.set(t)}push(t,...n){let r=he(this.root,t);this.set(t,r.concat(n))}pop(t){let n=he(this.root,t).slice(),r=n.pop();return this.set(t,n),r}shift(t){let n=he(this.root,t).slice(),r=n.shift();return this.set(t,n),r}splice(t,n,r,...o){let s=he(this.root,t).slice(),i=s.splice(n,r,...o);return this.set(t,s),i}insert(t,n,r){let o=he(this.root,t).slice();o.splice(n,0,r),this.set(t,o)}removeAt(t,n){let r=he(this.root,t).slice(),o=r.splice(n,1);return this.set(t,r),o}toObservable(){let[t]=(0,g.createSignal)(this.state);return t.toObservable()}dispose(){}},Qr=["get","select","watch","subscribe","produce","reconcile","push","pop","shift","splice","insert","removeAt","unwrap","toObservable"];function Jn(e,t){for(let n of Qr)e[n]=t[n].bind(t);e.$=t.reactive.bind(t)}function $e(e,t={immutable:!0}){let n=new G(e,t);return Jn(n.set,n),[n.proxy,n.set]}function Wt(e,t={}){return new G(e,{...t,immutable:!1})}function Zn(e,t={}){let n=new G(e(),t);return(0,g.createEffect)(()=>n.set(e())),n}function er(e,t,n){return(0,g.createEffect)(()=>n(t(e)))}function tr(e,t,n){return(0,g.createMemo)(()=>t(e),void 0,n)}function nr(e,t={}){let n=new G(e,t),r=(()=>n.proxy);return Jn(r,n),r}function we(e){if(e==null||typeof e!="object")return e;let t=e[xe];return t!==void 0?t:e}function Gt(e){return(0,g.untrack)(()=>we(e))}function rr(e){return ct(e)}function or(e){return ct(e)?e[ee]:null}function sr(e){return e&&typeof e=="object"&&ee in e?e[ee]:null}function ct(e){return!!e&&typeof e=="object"&&(g.$PROXY in e||e.__proxy===!0)}function ir(e){return e}var ar=Object.freeze({createStore:$e,createMutableStore:Wt,batch:g.batch,unwrap:we,untrackStore:Gt});function zt(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(zt);let t={};for(let n of Object.keys(e))t[n]=zt(e[n]);return t}function ur(e){return t=>{let n=zt(t);return e(n),n}}function cr(e,t={}){return()=>e}function lr(e,t){let[n,r]=$e(e,t);return new Proxy(n,{get:(o,s)=>s==="set"?r:o[s],has:(o,s)=>s==="set"||Reflect.has(o,s)})}function Jr(e,t,n){return y(()=>t(e()),void 0,n)}function Zr(e,t,n){return y(()=>e().filter(t),void 0,n)}function eo(e,t,n,r){return y(()=>e().reduce(t,n),void 0,r)}function to(e,t,n){return y(()=>e().find(t),void 0,n)}function no(e,t,n){return y(()=>e().some(t),void 0,n)}function ro(e,t,n){return y(()=>e().every(t),void 0,n)}function oo(e,t,n){return y(()=>[...e()].sort(t),void 0,n)}function so(e,t){return y(()=>[...new Set(e())],void 0,t)}function io(e,t,n){return y(()=>{let r=e.map(o=>o());return t(r)},void 0,n)}function ao(...e){return new q(t=>{let n=()=>e.map(o=>typeof o=="function"?o():o.get()),r=e.map(o=>typeof o=="function"&&o.subscribe?o.subscribe(()=>{t.next(n())}):typeof o!="function"?o.subscribe(()=>{t.next(n())}):N(()=>{t.next(n())}));return()=>{r.forEach(o=>{typeof o=="function"?o():o&&typeof o.unsubscribe=="function"&&o.unsubscribe()})}})}function uo(e,t,n){return y(()=>e()||t(),void 0,n)}function co(e,t,n,r){return y(()=>n(e(),t()),void 0,r)}function lo(e,t,n){return y(()=>t(e()),void 0,{equals:n,internal:!0})}function fo(e,t,n){return y(()=>{let r=e(),o={};for(let s of t)o[s]=r[s];return o},void 0,n)}function po(e,t,n){return y(()=>{let o={...e()};for(let s of t)delete o[s];return o},void 0,n)}function yo(e,t,n,r){return y(()=>e()?t():n(),void 0,r)}function To(e,t,n){return y(()=>e()?t():void 0,void 0,n)}function vo(e,t,n){let[r,o]=b(e()),s;return y(()=>{let i=e();clearTimeout(s),s=setTimeout(()=>o(()=>i),t)}),r}function bo(e,t,n){let[r,o]=b(e()),s=0,i;return y(()=>{let u=e(),a=Date.now();a-s>=t?(s=a,o(()=>u)):(clearTimeout(i),i=setTimeout(()=>{s=Date.now(),o(()=>u)},t-(a-s)))}),r}function mo(e){let t=e;for(;typeof t=="function";)t=t();return t}var ho=Symbol.for("signal");var fr=Symbol("fluixi-proxy"),So=Symbol.for("signal-node"),Ve=0,Yt=1,pt=2,Re=3,S=null,R=null,f=null,ft=null,dt=0,xo=!1,Xt=!1,Oe=0,go=1e6,z=new WeakMap,lt=null;var wo=new Map,Oo=0;function Ro(){return`node_${++Oo}_${Date.now()}`}function Ao(e){be&&wo.set(e.id,new WeakRef(e))}function ko(e,t,n){let r={id:Ro(),type:e,value:t,version:0,equals:n?.equals,name:n?.name,created:Date.now(),updated:Date.now()};return Ao(r),r}function Co(e,t){return e===t}function pr(e){throw typeof console<"u"&&console.error("Reactive error:",e),e}function Eo(e){if(f)f.indexOf(e)===-1&&f.push(e);else if(lt&<.running&&!e.pure)lt.effects.indexOf(e)===-1&<.effects.push(e);else if(!e.pure||e.computed)Jt(e);else if(e.pure&&!e.computed&&e.accessor){let t=R,n=f;R=null,f=[],e.accessor(),R=t;let r=f;if(f=n,r.length>0){let o=f;yt(r),f=o}}}function dr(e,t){for(let n=0;n<e.length;n++)t(e[n])}function te(e,t){let n=e;typeof n=="object"&&n&&fr in n&&delete n[fr];let r=ko("signal",n,{equals:t?.equals===!1?void 0:t?.equals,name:t?.name}),o=[i,u];z.set(o,new Set);let s;function i(){let a=R;if(a){a.sources?a.sources.indexOf(o)===-1&&a.sources.push(o):a.sources=[o];let l=z.get(o);l&&!l.has(a)&&l.add(a)}return n}function u(a){let l=typeof a=="function"?a(n):a,m=r.equals||Co;if(t?.equals===!1||!m(n,l)){n=l,r.value=l,r.version++,r.updated=Date.now();let v=z.get(o);if(v&&v.size>0){let P=function(p,I=!1){let A=p.state;if(!(A===Re&&p===R)){if(I&&!p.pure){A===Ve&&(p.state=Yt,xo&&(f!==null&&f.indexOf(p)===-1?f.push(p):O.push(p)));return}if(!x.has(p)&&(x.add(p),p.state=pt,A===Ve||A===Yt?O.push(p):!p.pure&&f!==null&&f.indexOf(p)===-1&&f.push(p),p.pure&&p.accessor)){let L=z.get(p.accessor);L&&dr(Array.from(L),_=>P(_,!0))}}};var d=P;let h=Array.from(v),O=[],x=new Set;dr(h,P);for(let p of O)Eo(p)}}}return i.toObservable=()=>new q(a=>{let l=!0;return Qt(()=>{let d=i();l?l=!1:a.next(d)})}),Object.defineProperty(i,ho,{value:!0,enumerable:!0}),Object.defineProperty(i,So,{value:r,enumerable:!1}),o}function Qt(e,t,n){let r={fn:e,state:pt,sources:null,sourceSlots:null,owned:null,cleanups:null,owner:S,contexts:null,pure:!1,updatedAt:null};S&&(S.owned?S.owned.push(r):S.owned=[r]);let o=B&&Ce(B);return o&&(r.suspense=o),yr(r,t),()=>Ae(r)}function yr(e,t){if(e.sources){for(let o of e.sources){let s=z.get(o);s&&s.delete(e)}e.sources=null,e.sourceSlots=null}if(e.owned){for(let o=0;o<e.owned.length;o++)Ae(e.owned[o]);e.owned=null}let n=R,r=S;if(R=e,S=e,dt++,dt>go)throw dt=0,R=n,S=r,new Error("Potential infinite loop detected. Exceeded maximum iterations.");try{e.state=Re;let o=e.fn(t);typeof o=="function"&&(e.cleanups?e.cleanups.push(o):e.cleanups=[o]),e.state===Re&&(e.state=Ve)}catch(o){if(bt(o)){let s=B&&Ce(B);s&&(s.increment(),o.finally(()=>s.decrement()),e.suspense&&s.effects.push(e));return}pr(o)}finally{R=n,S=r}}function Jt(e){if(!(e.disposed||!e.fn||e.state===Ve)&&(e.state===pt||e.state===Yt||e.state===Re)){if(e.cleanups){for(let t=0;t<e.cleanups.length;t++)e.cleanups[t]();e.cleanups=null}if(e.owned){for(let t=0;t<e.owned.length;t++)Ae(e.owned[t]);e.owned=null}e.renderEffect?vr(e):yr(e,e.value)}}function Ae(e){if(e.disposed=!0,e.sources)for(let t of e.sources){let n=z.get(t);n&&n.delete(e)}if(e.cleanups)for(let t=0;t<e.cleanups.length;t++)e.cleanups[t]();if(e.owned)for(let t=0;t<e.owned.length;t++)Ae(e.owned[t]);if(e.owner&&e.owner.owned){let t=e.owner.owned.indexOf(e);t!==-1&&e.owner.owned.splice(t,1)}}function yt(e){let t=[],n=[];for(let o of e)o.pure&&!o.computed&&o.accessor?t.indexOf(o)===-1&&t.push(o):(o.computed||!o.pure)&&n.indexOf(o)===-1&&n.push(o);f=[];let r=0;for(;r<t.length;){let o=t[r++],s=z.get(o.accessor);if(s&&s.size>0){let u=R;R=null,o.accessor(),R=u}let i=f.splice(0);for(let u of i)u.pure&&!u.computed&&u.accessor?t.indexOf(u)===-1&&t.push(u):(u.computed||!u.pure)&&n.indexOf(u)===-1&&n.push(u)}f=null;for(let o of n)(o.computed||!o.pure)&&Jt(o)}function ne(e){if(f&&Oe>0)return e();if(f&&Oe===0){let t=f,n=[];f=n,Oe++;let r;try{r=e()}finally{Oe--,f=t}let o=f;return yt(n),f=o,r}Oe++,f=[],ft=[];try{return e()}finally{Oe--,Po()}}function Po(){if(!Xt){Xt=!0,dt=0;try{for(;f&&f.length>0;){let e=f;f=null,yt(e)}if(f=null,ft){let e=ft;ft=null;for(let t=0;t<e.length;t++)Jt(e[t])}}finally{Xt=!1}}}function ke(e){let t=R;R=null;try{return e()}finally{R=t}}function Tr(e){S&&(S.cleanups?S.cleanups.push(e):S.cleanups=[e])}function _o(e){let t=Symbol("context"),n=Do(t);return{id:t,Provider:n,defaultValue:e}}function Do(e){return t=>{let n=S;for(;n;)n.contexts||(n.contexts=new Map),n.contexts.has(e)||n.contexts.set(e,t.value),n=n.owner;let r;return Fo(()=>{r=ke(()=>{let o=S;return o&&(o.contexts||(o.contexts=new Map),o.contexts.set(e,t.value)),tt(()=>t.children)})}),r}}function Ce(e){let t=S;for(;t;){if(t.contexts&&t.contexts.has(e.id))return t.contexts.get(e.id);t=t.owner}if(e)return e.defaultValue}function Fo(e,t,n){let r={fn:e,state:pt,sources:null,sourceSlots:null,value:t,owned:null,cleanups:null,owner:S,contexts:null,pure:!1,updatedAt:null,renderEffect:!0};S&&(S.owned?S.owned.push(r):S.owned=[r]);let o=B&&Ce(B);return o&&(r.suspense=o),vr(r),()=>Ae(r)}function vr(e){if(e.sources){for(let o of e.sources){let s=z.get(o);s&&s.delete(e)}e.sources=null,e.sourceSlots=null}if(e.cleanups){for(let o=0;o<e.cleanups.length;o++)e.cleanups[o]();e.cleanups=null}if(e.owned){for(let o=0;o<e.owned.length;o++)Ae(e.owned[o]);e.owned=null}let t=R,n=S,r=f;R=e,S=e,f===null&&(f=[]),e.state=Re;try{let o=e.fn(e.value);typeof o=="function"&&(e.cleanups||(e.cleanups=[]),e.cleanups.push(o)),e.value=o,e.state===Re&&(e.state=Ve)}catch(o){if(bt(o)){let s=B&&Ce(B);s&&(s.increment(),o.finally(()=>s.decrement()),e.suspense&&s.effects.push(e));return}pr(o)}finally{R=t,S=n;let o=f;if(f=r,o!==r&&o&&o.length>0){let s=f;yt(o),f=s}}}var B;function br(){return B||(B=_o())}var oe=new Map,re=new Map,Uo=0,Io=Symbol.for("signal"),jo=Symbol.for("resource");function No(e,t,n={}){let r,o,s;typeof t=="function"?(r=e,o=t,s=n):(r=()=>!0,o=e,s=t??n);let{ttl:i=1/0,name:u=`_auto_${Uo++}`,staleWhileRevalidate:a=!0}=s,l=u,m=T=>`${l}:${JSON.stringify(T)}`,d=T=>i===1/0||Date.now()-T.timestamp<=i,[v,h]=te(void 0,{equals:!1}),[O,x]=te("unresolved",{equals:!1}),[P,p]=te(void 0,{equals:!1}),[I,A]=te(void 0,{equals:!1}),[L,_]=te(!1),[C,j]=te(0,{equals:!1}),K=Symbol("unset"),X=K,Ee=!1,se=!1;function M(T,D,F,$){if(re.has(D)){re.get(D).then(w=>{$()||Y(w,F)},w=>{!$()&&!F&&Zt(w)}),F||A(re.get(D));return}let ie=Promise.resolve(o(T)).then(w=>(oe.set(D,{value:w,timestamp:Date.now()}),re.delete(D),w),w=>{throw re.delete(D),w});if(re.set(D,ie),!F){Z(ie),A(ie);let w=Ke&&Ce(Ke);w&&(w.increment(),ie.finally(()=>w.decrement()))}ie.then(w=>{$()||Y(w,F)},w=>{!$()&&!F&&Zt(w)})}function Y(T,D){ne(()=>{h(()=>T),x("ready"),_(!1),A(void 0),p(void 0)})}function Zt(T){ne(()=>{p(T),x("errored"),A(void 0)})}let Ke;Qt(()=>{Ke===void 0&&(Ke=br());let T=r();if(C(),T===!1||T===null||T===void 0){X=K,ne(()=>{x("unresolved"),A(void 0),p(void 0)});return}let D=Ee,F=se;Ee=!1,se=!1;let $=m(T);F&&oe.delete($);let ie=X===K||T!==X;X=T;let w=!1;Tr(()=>{w=!0});let ae=oe.get($);if(ae&&d(ae)&&!D&&!F){(ke(O)!=="ready"||ke(v)!==ae.value)&&ne(()=>{h(()=>ae.value),x("ready"),_(!1),p(void 0)});return}if(ae&&a&&!F){ne(()=>{h(()=>ae.value),x("ready"),_(!0),p(void 0),A(void 0)}),M(T,$,!0,()=>w);return}let en=ke(O),mr=en==="ready"||en==="refreshing";ne(()=>{x(mr?"refreshing":"pending"),p(void 0),_(!1)}),M(T,$,!1,()=>w)});let He=(()=>{let T=P();if(T)throw T;if(O()==="pending"){let F=I();if(F)throw F}return v()});return Object.defineProperty(He,jo,{value:!0,enumerable:!0}),Object.defineProperty(He,Io,{value:!0,enumerable:!0}),Object.defineProperties(He,{state:{get:O},loading:{get:()=>{let T=O();return T==="pending"||T==="refreshing"}},error:{get:P},latest:{get:v},stale:{get:L}}),[He,{mutate:h,refetch:()=>{Ee=!0,j(T=>T+1)},invalidate:()=>{let T=ke(r);T!=null&&T!==!1&&oe.delete(m(T)),se=!0,j(D=>D+1)}}]}function Mo(e){let t=`${e}:`;for(let n of oe.keys())n.startsWith(t)&&oe.delete(n)}function qo(){oe.clear(),re.clear()}
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/cdn/reactive.ts
|
|
21
|
+
var reactive_exports = {};
|
|
22
|
+
__export(reactive_exports, {
|
|
23
|
+
$NAME: () => $NAME,
|
|
24
|
+
$NODE: () => $NODE2,
|
|
25
|
+
$PROXY: () => $PROXY,
|
|
26
|
+
$RAW: () => $RAW,
|
|
27
|
+
$SELF: () => $SELF,
|
|
28
|
+
$SIGNAL: () => $SIGNAL3,
|
|
29
|
+
$STORE: () => $STORE,
|
|
30
|
+
$TRACK: () => $TRACK,
|
|
31
|
+
Observable: () => Observable,
|
|
32
|
+
SafeSubscriber: () => SafeSubscriber,
|
|
33
|
+
Signal: () => Signal,
|
|
34
|
+
Store: () => Store,
|
|
35
|
+
StoreAPI: () => StoreAPI,
|
|
36
|
+
Subject: () => Subject,
|
|
37
|
+
Subscriber: () => Subscriber,
|
|
38
|
+
Subscription: () => Subscription,
|
|
39
|
+
SuspenseContext: () => SuspenseContext,
|
|
40
|
+
VERSION: () => VERSION,
|
|
41
|
+
__DEV__: () => __DEV__,
|
|
42
|
+
batch: () => batch2,
|
|
43
|
+
childOwner: () => childOwner,
|
|
44
|
+
clearAllCachedResources: () => clearAllCachedResources,
|
|
45
|
+
clearCachedResourceNamespace: () => clearCachedResourceNamespace,
|
|
46
|
+
combineSignal: () => combineSignal,
|
|
47
|
+
combineSignals: () => combineSignals,
|
|
48
|
+
computed: () => computed,
|
|
49
|
+
context: () => context,
|
|
50
|
+
createCachedResource: () => createCachedResource,
|
|
51
|
+
createChildOwner: () => createChildOwner,
|
|
52
|
+
createComputed: () => createComputed,
|
|
53
|
+
createComputedStore: () => createComputedStore,
|
|
54
|
+
createContext: () => createContext,
|
|
55
|
+
createDebounce: () => createDebounce,
|
|
56
|
+
createDebouncedResource: () => createDebouncedResource,
|
|
57
|
+
createDebouncedSignal: () => createDebouncedSignal,
|
|
58
|
+
createDeferred: () => createDeferred,
|
|
59
|
+
createEffect: () => createEffect,
|
|
60
|
+
createErrorBoundary: () => createErrorBoundary,
|
|
61
|
+
createMemo: () => createMemo,
|
|
62
|
+
createMutableStore: () => createMutableStore,
|
|
63
|
+
createRenderEffect: () => createRenderEffect,
|
|
64
|
+
createResource: () => createResource,
|
|
65
|
+
createRoot: () => createRoot,
|
|
66
|
+
createSelector: () => createSelector,
|
|
67
|
+
createSignal: () => createSignal,
|
|
68
|
+
createStore: () => createStore,
|
|
69
|
+
createStoreEffect: () => createStoreEffect,
|
|
70
|
+
createStoreMemo: () => createStoreMemo,
|
|
71
|
+
createSuspenseBoundary: () => createSuspenseBoundary,
|
|
72
|
+
debounceSignal: () => debounceSignal,
|
|
73
|
+
disposeScope: () => disposeScope,
|
|
74
|
+
distinctSignal: () => distinctSignal,
|
|
75
|
+
effect: () => effect2,
|
|
76
|
+
everySignal: () => everySignal,
|
|
77
|
+
filterSignal: () => filterSignal,
|
|
78
|
+
findSignal: () => findSignal,
|
|
79
|
+
flush: () => flush,
|
|
80
|
+
getNode: () => getNode,
|
|
81
|
+
getOwner: () => getOwner,
|
|
82
|
+
getServerData: () => getServerData,
|
|
83
|
+
getStoreNode: () => getStoreNode,
|
|
84
|
+
guardSignal: () => guardSignal,
|
|
85
|
+
indexArray: () => indexArray,
|
|
86
|
+
isComponent: () => isComponent,
|
|
87
|
+
isMemo: () => isMemo,
|
|
88
|
+
isOwnerDisposed: () => isOwnerDisposed,
|
|
89
|
+
isProvider: () => isProvider,
|
|
90
|
+
isResource: () => isResource,
|
|
91
|
+
isSignal: () => isSignal,
|
|
92
|
+
isStore: () => isStore,
|
|
93
|
+
isStoreProxy: () => isStoreProxy,
|
|
94
|
+
isSuspense: () => isSuspense,
|
|
95
|
+
joinedVersions: () => joinedVersions,
|
|
96
|
+
keyArray: () => keyArray,
|
|
97
|
+
makeArrayFlat: () => makeArrayFlat,
|
|
98
|
+
mapArray: () => mapArray,
|
|
99
|
+
mapSignal: () => mapSignal,
|
|
100
|
+
memo: () => memo,
|
|
101
|
+
mergeSignal: () => mergeSignal,
|
|
102
|
+
modifiable: () => modifiable,
|
|
103
|
+
nextResourceId: () => nextResourceId,
|
|
104
|
+
observeReactiveNodes: () => observeReactiveNodes,
|
|
105
|
+
omitSignal: () => omitSignal,
|
|
106
|
+
on: () => on,
|
|
107
|
+
onCleanup: () => onCleanup,
|
|
108
|
+
operate: () => operate,
|
|
109
|
+
pickSignal: () => pickSignal,
|
|
110
|
+
produceUtil: () => produce,
|
|
111
|
+
provide: () => provide,
|
|
112
|
+
provideErrorBoundary: () => provideErrorBoundary,
|
|
113
|
+
provideSuspense: () => provideSuspense,
|
|
114
|
+
readChildren: () => readChildren,
|
|
115
|
+
readSignal: () => readSignal,
|
|
116
|
+
reconcileUtil: () => reconcile,
|
|
117
|
+
reduceSignal: () => reduceSignal,
|
|
118
|
+
renderEffect: () => renderEffect,
|
|
119
|
+
reportReactiveBinding: () => reportReactiveBinding,
|
|
120
|
+
reportReactiveContext: () => reportReactiveContext,
|
|
121
|
+
reportReactiveContextCreated: () => reportReactiveContextCreated,
|
|
122
|
+
reportReactiveDirective: () => reportReactiveDirective,
|
|
123
|
+
reportReactiveProps: () => reportReactiveProps,
|
|
124
|
+
reportResourceData: () => reportResourceData,
|
|
125
|
+
resource: () => resource,
|
|
126
|
+
root: () => root,
|
|
127
|
+
runWithOwner: () => runWithOwner,
|
|
128
|
+
selectSignal: () => selectSignal,
|
|
129
|
+
setOwner: () => setOwner,
|
|
130
|
+
setResourceDataSink: () => setResourceDataSink,
|
|
131
|
+
setResourceIdSource: () => setResourceIdSource,
|
|
132
|
+
setResourceTracker: () => setResourceTracker,
|
|
133
|
+
setServerDataGetter: () => setServerDataGetter,
|
|
134
|
+
signal: () => signal,
|
|
135
|
+
someSignal: () => someSignal,
|
|
136
|
+
sortSignal: () => sortSignal,
|
|
137
|
+
startTransition: () => startTransition,
|
|
138
|
+
store: () => store,
|
|
139
|
+
throttleSignal: () => throttleSignal,
|
|
140
|
+
trackResourcePromise: () => trackResourcePromise,
|
|
141
|
+
untrack: () => untrack2,
|
|
142
|
+
untrackStore: () => untrackStore,
|
|
143
|
+
unwrap: () => unwrap,
|
|
144
|
+
useContext: () => useContext,
|
|
145
|
+
useTransition: () => useTransition,
|
|
146
|
+
whenSignal: () => whenSignal,
|
|
147
|
+
wrap: () => wrap,
|
|
148
|
+
zipSignal: () => zipSignal
|
|
149
|
+
});
|
|
150
|
+
module.exports = __toCommonJS(reactive_exports);
|
|
151
|
+
|
|
152
|
+
// src/version.generated.ts
|
|
153
|
+
var VERSION = "1.0.0-alpha.84";
|
|
154
|
+
|
|
155
|
+
// src/lib/predicates.ts
|
|
156
|
+
function isFunction(value) {
|
|
157
|
+
return typeof value === "function" && !/^class\s/.test(Function.prototype.toString.call(value));
|
|
158
|
+
}
|
|
159
|
+
function isObject(value) {
|
|
160
|
+
if (value == null) return false;
|
|
161
|
+
if (Array.isArray(value)) return false;
|
|
162
|
+
if (typeof value === "function") return false;
|
|
163
|
+
if (value instanceof Date) return false;
|
|
164
|
+
if (value instanceof RegExp) return false;
|
|
165
|
+
if (value instanceof Map) return false;
|
|
166
|
+
if (value instanceof Set) return false;
|
|
167
|
+
if (value instanceof Error) return false;
|
|
168
|
+
return typeof value === "object";
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// src/lib/observable/subscription.ts
|
|
172
|
+
var Subscription = class _Subscription {
|
|
173
|
+
/**
|
|
174
|
+
* Creates a new Subscription.
|
|
175
|
+
*/
|
|
176
|
+
constructor(unsubscribe) {
|
|
177
|
+
/** @private */
|
|
178
|
+
this._closed = false;
|
|
179
|
+
/** @private */
|
|
180
|
+
this._parentOrParents = null;
|
|
181
|
+
/** @private */
|
|
182
|
+
this._subscriptions = null;
|
|
183
|
+
if (unsubscribe) {
|
|
184
|
+
this._subscriptions = [unsubscribe];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Whether the subscription is closed.
|
|
189
|
+
*/
|
|
190
|
+
get closed() {
|
|
191
|
+
return this._closed;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Disposes the resources held by the subscription.
|
|
195
|
+
* May be called multiple times (idempotent).
|
|
196
|
+
*/
|
|
197
|
+
unsubscribe() {
|
|
198
|
+
if (this._closed) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
this._closed = true;
|
|
202
|
+
const { _parentOrParents, _subscriptions } = this;
|
|
203
|
+
if (_parentOrParents instanceof _Subscription) {
|
|
204
|
+
_parentOrParents.remove(this);
|
|
205
|
+
} else if (_parentOrParents !== null) {
|
|
206
|
+
for (const parent of _parentOrParents) {
|
|
207
|
+
parent.remove(this);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (_subscriptions) {
|
|
211
|
+
for (const sub of _subscriptions) {
|
|
212
|
+
if (isFunction(sub) && !(sub instanceof _Subscription)) {
|
|
213
|
+
try {
|
|
214
|
+
sub();
|
|
215
|
+
} catch (error) {
|
|
216
|
+
console.error("Error in unsubscribe function:", error);
|
|
217
|
+
}
|
|
218
|
+
} else if (isObject(sub) && typeof sub.unsubscribe === "function") {
|
|
219
|
+
try {
|
|
220
|
+
sub.unsubscribe();
|
|
221
|
+
} catch (error) {
|
|
222
|
+
console.error("Error unsubscribing child:", error);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
this._subscriptions = null;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Adds a child subscription or cleanup function to this subscription.
|
|
231
|
+
* When this subscription is unsubscribed, all added subscriptions/functions will be unsubscribed/called.
|
|
232
|
+
*
|
|
233
|
+
* @throws {TypeError} If the argument is not a subscription-like object or function
|
|
234
|
+
*/
|
|
235
|
+
add(subscription) {
|
|
236
|
+
if (!subscription || subscription === this) {
|
|
237
|
+
return this;
|
|
238
|
+
}
|
|
239
|
+
if (subscription.closed) {
|
|
240
|
+
return this;
|
|
241
|
+
}
|
|
242
|
+
let { _closed, _subscriptions } = this;
|
|
243
|
+
if (_closed) {
|
|
244
|
+
if (isFunction(subscription)) {
|
|
245
|
+
try {
|
|
246
|
+
subscription();
|
|
247
|
+
} catch (error) {
|
|
248
|
+
console.error("Error in unsubscribe function:", error);
|
|
249
|
+
}
|
|
250
|
+
} else if (subscription.unsubscribe) {
|
|
251
|
+
try {
|
|
252
|
+
subscription.unsubscribe();
|
|
253
|
+
} catch (error) {
|
|
254
|
+
console.error("Error unsubscribing:", error);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return this;
|
|
258
|
+
}
|
|
259
|
+
if (!_subscriptions) {
|
|
260
|
+
this._subscriptions = [];
|
|
261
|
+
}
|
|
262
|
+
this._subscriptions.push(subscription);
|
|
263
|
+
if (subscription instanceof _Subscription) {
|
|
264
|
+
subscription._addParent(this);
|
|
265
|
+
}
|
|
266
|
+
return this;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Removes a child subscription from this subscription.
|
|
270
|
+
*/
|
|
271
|
+
remove(subscription) {
|
|
272
|
+
const { _subscriptions } = this;
|
|
273
|
+
if (!_subscriptions) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const index = _subscriptions.indexOf(subscription);
|
|
277
|
+
if (index !== -1) {
|
|
278
|
+
_subscriptions.splice(index, 1);
|
|
279
|
+
subscription._removeParent(this);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/** @private */
|
|
283
|
+
_addParent(parent) {
|
|
284
|
+
const { _parentOrParents } = this;
|
|
285
|
+
if (!_parentOrParents) {
|
|
286
|
+
this._parentOrParents = parent;
|
|
287
|
+
} else if (Array.isArray(_parentOrParents)) {
|
|
288
|
+
_parentOrParents.push(parent);
|
|
289
|
+
} else {
|
|
290
|
+
this._parentOrParents = [_parentOrParents, parent];
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/** @private */
|
|
294
|
+
_removeParent(parent) {
|
|
295
|
+
const { _parentOrParents } = this;
|
|
296
|
+
if (_parentOrParents === parent) {
|
|
297
|
+
this._parentOrParents = null;
|
|
298
|
+
} else if (Array.isArray(_parentOrParents)) {
|
|
299
|
+
const index = _parentOrParents.indexOf(parent);
|
|
300
|
+
if (index !== -1) {
|
|
301
|
+
_parentOrParents.splice(index, 1);
|
|
302
|
+
if (_parentOrParents.length === 1) {
|
|
303
|
+
this._parentOrParents = _parentOrParents[0];
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
// src/lib/observable/observable.ts
|
|
311
|
+
var Subscriber = class extends Subscription {
|
|
312
|
+
/**
|
|
313
|
+
* Creates a new Subscriber.
|
|
314
|
+
*/
|
|
315
|
+
constructor(destinationOrNext, error, complete) {
|
|
316
|
+
super();
|
|
317
|
+
/** @private */
|
|
318
|
+
this.isStopped = false;
|
|
319
|
+
let observer;
|
|
320
|
+
if (!destinationOrNext) {
|
|
321
|
+
observer = {};
|
|
322
|
+
} else if (typeof destinationOrNext === "object") {
|
|
323
|
+
observer = destinationOrNext;
|
|
324
|
+
} else {
|
|
325
|
+
observer = {
|
|
326
|
+
next: destinationOrNext,
|
|
327
|
+
error,
|
|
328
|
+
complete
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
this.destination = observer;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Sends the next value to the observer.
|
|
335
|
+
*/
|
|
336
|
+
next(value) {
|
|
337
|
+
if (!this.isStopped && this.destination.next) {
|
|
338
|
+
try {
|
|
339
|
+
this.destination.next(value);
|
|
340
|
+
} catch (error) {
|
|
341
|
+
this.error(error);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Sends an error notification to the observer.
|
|
347
|
+
*/
|
|
348
|
+
error(err) {
|
|
349
|
+
if (!this.isStopped) {
|
|
350
|
+
this.isStopped = true;
|
|
351
|
+
if (this.destination.error) {
|
|
352
|
+
try {
|
|
353
|
+
this.destination.error(err);
|
|
354
|
+
} catch (error) {
|
|
355
|
+
throw error;
|
|
356
|
+
}
|
|
357
|
+
} else {
|
|
358
|
+
throw err;
|
|
359
|
+
}
|
|
360
|
+
this.unsubscribe();
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Sends a complete notification to the observer.
|
|
365
|
+
*/
|
|
366
|
+
complete() {
|
|
367
|
+
if (!this.isStopped) {
|
|
368
|
+
this.isStopped = true;
|
|
369
|
+
if (this.destination.complete) {
|
|
370
|
+
try {
|
|
371
|
+
this.destination.complete();
|
|
372
|
+
} catch (error) {
|
|
373
|
+
this.error(error);
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
this.unsubscribe();
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Unsubscribes the subscriber.
|
|
382
|
+
*/
|
|
383
|
+
unsubscribe() {
|
|
384
|
+
if (this.closed) {
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
this.isStopped = true;
|
|
388
|
+
super.unsubscribe();
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
var SafeSubscriber = class extends Subscriber {
|
|
392
|
+
constructor(observerOrNext, error, complete, parentSubscriber) {
|
|
393
|
+
super(observerOrNext, error, complete);
|
|
394
|
+
/** @private */
|
|
395
|
+
this._isUnsubscribing = false;
|
|
396
|
+
/** @private */
|
|
397
|
+
this._parentSubscriber = null;
|
|
398
|
+
this._parentSubscriber = parentSubscriber || null;
|
|
399
|
+
}
|
|
400
|
+
next(value) {
|
|
401
|
+
if (!this.isStopped && !this._isUnsubscribing) {
|
|
402
|
+
try {
|
|
403
|
+
super.next(value);
|
|
404
|
+
} catch (error) {
|
|
405
|
+
this.error(error);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
error(err) {
|
|
410
|
+
if (!this.isStopped && !this._isUnsubscribing) {
|
|
411
|
+
this._isUnsubscribing = true;
|
|
412
|
+
try {
|
|
413
|
+
super.error(err);
|
|
414
|
+
} finally {
|
|
415
|
+
this._isUnsubscribing = false;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
complete() {
|
|
420
|
+
if (!this.isStopped && !this._isUnsubscribing) {
|
|
421
|
+
this._isUnsubscribing = true;
|
|
422
|
+
try {
|
|
423
|
+
super.complete();
|
|
424
|
+
} finally {
|
|
425
|
+
this._isUnsubscribing = false;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
unsubscribe() {
|
|
430
|
+
if (this.closed) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
this._isUnsubscribing = true;
|
|
434
|
+
super.unsubscribe();
|
|
435
|
+
this._isUnsubscribing = false;
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
function operate(destination) {
|
|
439
|
+
return new Subscriber(destination.next, destination.error, destination.complete);
|
|
440
|
+
}
|
|
441
|
+
var Observable = class extends Subscription {
|
|
442
|
+
/**
|
|
443
|
+
* Creates a new Observable.
|
|
444
|
+
*/
|
|
445
|
+
constructor(subscribe) {
|
|
446
|
+
super();
|
|
447
|
+
if (subscribe) {
|
|
448
|
+
this._subscribe = subscribe;
|
|
449
|
+
} else {
|
|
450
|
+
throw new TypeError("Observable constructor requires a subscribe function");
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
subscribe(observerOrNext, error, complete) {
|
|
454
|
+
let subscriber;
|
|
455
|
+
if (observerOrNext instanceof Subscriber) {
|
|
456
|
+
subscriber = observerOrNext;
|
|
457
|
+
} else {
|
|
458
|
+
subscriber = new SafeSubscriber(observerOrNext, error, complete);
|
|
459
|
+
}
|
|
460
|
+
const { _subscribe } = this;
|
|
461
|
+
try {
|
|
462
|
+
const result = _subscribe.call(this, subscriber);
|
|
463
|
+
if (result) {
|
|
464
|
+
if (typeof result === "function") {
|
|
465
|
+
subscriber.add(result);
|
|
466
|
+
} else if (typeof result.unsubscribe === "function") {
|
|
467
|
+
subscriber.add(result);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
} catch (err) {
|
|
471
|
+
subscriber.error(err);
|
|
472
|
+
}
|
|
473
|
+
return subscriber;
|
|
474
|
+
}
|
|
475
|
+
pipe(...operations) {
|
|
476
|
+
if (operations.length === 0) {
|
|
477
|
+
return this;
|
|
478
|
+
}
|
|
479
|
+
return operations.reduce(
|
|
480
|
+
(prev, fn) => fn(prev),
|
|
481
|
+
this
|
|
482
|
+
);
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Converts the Observable to a Promise.
|
|
486
|
+
* The Promise resolves with the last emitted value when the Observable completes,
|
|
487
|
+
* or rejects if the Observable errors.
|
|
488
|
+
*
|
|
489
|
+
* @example
|
|
490
|
+
* // Convert Observable to Promise
|
|
491
|
+
* const value = await of(1, 2, 3).toPromise();
|
|
492
|
+
* console.log(value); // 3
|
|
493
|
+
*
|
|
494
|
+
* @example
|
|
495
|
+
* // Handle empty Observable
|
|
496
|
+
* const value = await EMPTY.toPromise();
|
|
497
|
+
* console.log(value); // undefined
|
|
498
|
+
*/
|
|
499
|
+
toPromise() {
|
|
500
|
+
return new Promise((resolve, reject) => {
|
|
501
|
+
let lastValue;
|
|
502
|
+
this.subscribe({
|
|
503
|
+
next: (value) => lastValue = value,
|
|
504
|
+
error: reject,
|
|
505
|
+
complete: () => resolve(lastValue)
|
|
506
|
+
});
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
|
|
511
|
+
// src/lib/subject.ts
|
|
512
|
+
var Subject = class extends Observable {
|
|
513
|
+
constructor() {
|
|
514
|
+
super((subscriber) => {
|
|
515
|
+
if (this.closed) {
|
|
516
|
+
throw new Error("Subject has been closed");
|
|
517
|
+
} else if (this.hasError) {
|
|
518
|
+
subscriber.error(this.thrownError);
|
|
519
|
+
} else if (this.isStopped) {
|
|
520
|
+
subscriber.complete();
|
|
521
|
+
} else {
|
|
522
|
+
this.observers.push(subscriber);
|
|
523
|
+
return () => {
|
|
524
|
+
const index = this.observers.indexOf(subscriber);
|
|
525
|
+
if (index !== -1) {
|
|
526
|
+
this.observers.splice(index, 1);
|
|
527
|
+
}
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
return void 0;
|
|
531
|
+
});
|
|
532
|
+
this.observers = [];
|
|
533
|
+
// override closed = false;
|
|
534
|
+
this.isStopped = false;
|
|
535
|
+
this.hasError = false;
|
|
536
|
+
this.thrownError = null;
|
|
537
|
+
}
|
|
538
|
+
next(value) {
|
|
539
|
+
if (this.isStopped) return;
|
|
540
|
+
const { observers } = this;
|
|
541
|
+
const len = observers.length;
|
|
542
|
+
const copy = observers.slice();
|
|
543
|
+
for (let i = 0; i < len; i++) {
|
|
544
|
+
copy[i].next?.(value);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
error(err) {
|
|
548
|
+
if (this.isStopped) return;
|
|
549
|
+
this.hasError = true;
|
|
550
|
+
this.thrownError = err;
|
|
551
|
+
this.isStopped = true;
|
|
552
|
+
const { observers } = this;
|
|
553
|
+
this.observers = [];
|
|
554
|
+
const len = observers.length;
|
|
555
|
+
const copy = observers.slice();
|
|
556
|
+
for (let i = 0; i < len; i++) {
|
|
557
|
+
copy[i].error?.(err);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
complete() {
|
|
561
|
+
if (this.isStopped) return;
|
|
562
|
+
this.isStopped = true;
|
|
563
|
+
const { observers } = this;
|
|
564
|
+
this.observers = [];
|
|
565
|
+
const len = observers.length;
|
|
566
|
+
const copy = observers.slice();
|
|
567
|
+
for (let i = 0; i < len; i++) {
|
|
568
|
+
copy[i].complete?.();
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
unsubscribe() {
|
|
572
|
+
this.isStopped = true;
|
|
573
|
+
this.observers = [];
|
|
574
|
+
}
|
|
575
|
+
asObservable() {
|
|
576
|
+
const observable = new Observable((subscriber) => {
|
|
577
|
+
return this.subscribe(subscriber);
|
|
578
|
+
});
|
|
579
|
+
return observable;
|
|
580
|
+
}
|
|
581
|
+
};
|
|
582
|
+
|
|
583
|
+
// src/lib/signal/graph/state.ts
|
|
584
|
+
var MAJOR = VERSION.split(".")[0];
|
|
585
|
+
var KEY = `__fluixi_signal_state_v${MAJOR}__`;
|
|
586
|
+
var VERSIONS_KEY = `__fluixi_signal_builds_v${MAJOR}__`;
|
|
587
|
+
var defaultSchedule = (run) => {
|
|
588
|
+
if (typeof queueMicrotask === "function") queueMicrotask(run);
|
|
589
|
+
else void Promise.resolve().then(run);
|
|
590
|
+
};
|
|
591
|
+
function defaults() {
|
|
592
|
+
return {
|
|
593
|
+
consumer: null,
|
|
594
|
+
untracked: false,
|
|
595
|
+
owner: null,
|
|
596
|
+
queue: [],
|
|
597
|
+
scheduled: false,
|
|
598
|
+
flushing: false,
|
|
599
|
+
batchDepth: 0,
|
|
600
|
+
hostSchedule: defaultSchedule,
|
|
601
|
+
onSuspend: null,
|
|
602
|
+
onError: null,
|
|
603
|
+
observer: null
|
|
604
|
+
};
|
|
605
|
+
}
|
|
606
|
+
var realm = globalThis;
|
|
607
|
+
function backfillState(existing) {
|
|
608
|
+
const fresh = defaults();
|
|
609
|
+
const target = existing;
|
|
610
|
+
for (const field of Object.keys(fresh)) {
|
|
611
|
+
if (!(field in existing)) target[field] = fresh[field];
|
|
612
|
+
}
|
|
613
|
+
return existing;
|
|
614
|
+
}
|
|
615
|
+
function claim() {
|
|
616
|
+
const existing = realm[KEY];
|
|
617
|
+
return existing ? backfillState(existing) : realm[KEY] = defaults();
|
|
618
|
+
}
|
|
619
|
+
var G = claim();
|
|
620
|
+
(realm[VERSIONS_KEY] ??= []).push(VERSION);
|
|
621
|
+
function joinedVersions() {
|
|
622
|
+
return [...new Set(realm[VERSIONS_KEY] ?? [])];
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// src/lib/signal/graph/observe.ts
|
|
626
|
+
function observeReactiveNodes(next) {
|
|
627
|
+
G.observer = next;
|
|
628
|
+
return () => {
|
|
629
|
+
if (G.observer === next) G.observer = null;
|
|
630
|
+
};
|
|
631
|
+
}
|
|
632
|
+
var running = [];
|
|
633
|
+
var origin;
|
|
634
|
+
function withReactiveOrigin(owner, fn) {
|
|
635
|
+
if (!G.observer) return fn();
|
|
636
|
+
const previous = origin;
|
|
637
|
+
origin = owner;
|
|
638
|
+
try {
|
|
639
|
+
return fn();
|
|
640
|
+
} finally {
|
|
641
|
+
origin = previous;
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
function reportReactiveNode(report) {
|
|
645
|
+
const observer = G.observer;
|
|
646
|
+
if (observer) {
|
|
647
|
+
observer.created(
|
|
648
|
+
report.parents === void 0 ? { ...report, parents: running, origin: report.origin ?? origin } : report
|
|
649
|
+
);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
function enterReactiveRun(node) {
|
|
653
|
+
if (!G.observer) return false;
|
|
654
|
+
running.push(node);
|
|
655
|
+
return true;
|
|
656
|
+
}
|
|
657
|
+
function exitReactiveRun() {
|
|
658
|
+
running.pop();
|
|
659
|
+
}
|
|
660
|
+
function reportReactiveRun(node) {
|
|
661
|
+
G.observer?.ran?.(node);
|
|
662
|
+
}
|
|
663
|
+
function reportReactiveWrite(node, by) {
|
|
664
|
+
G.observer?.wrote?.(node, by);
|
|
665
|
+
}
|
|
666
|
+
function reportReactiveBinding(target, kind, name, accessor) {
|
|
667
|
+
const observer = G.observer;
|
|
668
|
+
if (!observer?.bound || !running.length) return;
|
|
669
|
+
observer.bound(running[running.length - 1], target, kind, name, accessor);
|
|
670
|
+
}
|
|
671
|
+
function reportReactiveProps(props) {
|
|
672
|
+
const observer = G.observer;
|
|
673
|
+
if (!observer?.props || !running.length || !props) return;
|
|
674
|
+
observer.props(running[running.length - 1], props);
|
|
675
|
+
}
|
|
676
|
+
function reportReactiveDirective(target, kind, name, accessor) {
|
|
677
|
+
const observer = G.observer;
|
|
678
|
+
if (!observer?.directive || !running.length) return;
|
|
679
|
+
observer.directive(running[running.length - 1], target, kind, name, accessor);
|
|
680
|
+
}
|
|
681
|
+
function reportReactiveContextCreated(id) {
|
|
682
|
+
G.observer?.contextCreated?.(id);
|
|
683
|
+
}
|
|
684
|
+
function reportReactiveContext(id, kind, value) {
|
|
685
|
+
const observer = G.observer;
|
|
686
|
+
if (!observer?.context || !running.length) return;
|
|
687
|
+
observer.context(running[running.length - 1], id, kind, value);
|
|
688
|
+
}
|
|
689
|
+
function reportReactiveMove(node, origin2, name) {
|
|
690
|
+
G.observer?.moved?.(node, origin2, name);
|
|
691
|
+
}
|
|
692
|
+
function reportReactiveDispose(node) {
|
|
693
|
+
G.observer?.disposed?.(node);
|
|
694
|
+
}
|
|
695
|
+
var HOOK = "__FLUIXI_DEVTOOLS_HOOK__";
|
|
696
|
+
var hook = globalThis[HOOK];
|
|
697
|
+
if (typeof hook?.inject === "function") {
|
|
698
|
+
try {
|
|
699
|
+
hook.inject({ observeReactiveNodes, version: VERSION });
|
|
700
|
+
} catch {
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
function isObserved() {
|
|
704
|
+
return G.observer != null;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
// src/lib/signal/graph/core.ts
|
|
708
|
+
var CLEAN = 0;
|
|
709
|
+
var CHECK = 1;
|
|
710
|
+
var DIRTY = 2;
|
|
711
|
+
var Source = class {
|
|
712
|
+
constructor() {
|
|
713
|
+
/** Computeds, and watched leaves, that read this node. */
|
|
714
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
715
|
+
this.observers = null;
|
|
716
|
+
/** Watchers eagerly observing this node, which is how `runtime.ts` schedules effects. */
|
|
717
|
+
this.watchers = null;
|
|
718
|
+
/** Bumped whenever this node's value actually changes (equality-gated). */
|
|
719
|
+
this.version = 0;
|
|
720
|
+
}
|
|
721
|
+
/** Settle this node so a reader sees a current value/version. Overridden by Computed. */
|
|
722
|
+
updateIfNecessary() {
|
|
723
|
+
}
|
|
724
|
+
/** Link the current consumer (if any) as an observer of this node. */
|
|
725
|
+
track() {
|
|
726
|
+
if (G.untracked) return;
|
|
727
|
+
const consumer = G.consumer;
|
|
728
|
+
if (!consumer) return;
|
|
729
|
+
(this.observers ??= /* @__PURE__ */ new Set()).add(consumer);
|
|
730
|
+
(consumer.sources ??= /* @__PURE__ */ new Set()).add(this);
|
|
731
|
+
}
|
|
732
|
+
};
|
|
733
|
+
var State = class extends Source {
|
|
734
|
+
constructor(value, options) {
|
|
735
|
+
super();
|
|
736
|
+
this._value = value;
|
|
737
|
+
this._equals = options?.equals === false ? () => false : options?.equals ?? Object.is;
|
|
738
|
+
}
|
|
739
|
+
get() {
|
|
740
|
+
this.track();
|
|
741
|
+
return this._value;
|
|
742
|
+
}
|
|
743
|
+
set(next) {
|
|
744
|
+
if (this._equals(this._value, next)) return;
|
|
745
|
+
this._value = next;
|
|
746
|
+
this.version++;
|
|
747
|
+
reportReactiveWrite(this, G.consumer);
|
|
748
|
+
if (this.observers) for (const o of [...this.observers]) o.markDirty(DIRTY);
|
|
749
|
+
notifyWatchers(this);
|
|
750
|
+
}
|
|
751
|
+
/** Read without subscribing (peek). */
|
|
752
|
+
peek() {
|
|
753
|
+
return this._value;
|
|
754
|
+
}
|
|
755
|
+
};
|
|
756
|
+
var Computed = class extends Source {
|
|
757
|
+
constructor(fn, options) {
|
|
758
|
+
super();
|
|
759
|
+
this._threw = false;
|
|
760
|
+
this._initialized = false;
|
|
761
|
+
this.state = DIRTY;
|
|
762
|
+
/** Nodes this computation read on its last run. Rebuilt on every run. */
|
|
763
|
+
this.sources = null;
|
|
764
|
+
this._fn = fn;
|
|
765
|
+
this._equals = options?.equals === false ? () => false : options?.equals ?? Object.is;
|
|
766
|
+
}
|
|
767
|
+
get() {
|
|
768
|
+
if (G.consumer === this) {
|
|
769
|
+
throw new Error("Signal.Computed cannot read itself");
|
|
770
|
+
}
|
|
771
|
+
this.track();
|
|
772
|
+
this.updateIfNecessary();
|
|
773
|
+
if (this._threw) throw this._error;
|
|
774
|
+
return this._value;
|
|
775
|
+
}
|
|
776
|
+
/** Settle, if CHECK, verify sources; if DIRTY (or never run), recompute. */
|
|
777
|
+
updateIfNecessary() {
|
|
778
|
+
if (this.state === CHECK) {
|
|
779
|
+
if (this.sources) {
|
|
780
|
+
for (const s of this.sources) {
|
|
781
|
+
s.updateIfNecessary();
|
|
782
|
+
if (this.state === DIRTY) break;
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
if (this.state === DIRTY || !this._initialized) this.recompute();
|
|
787
|
+
this.state = CLEAN;
|
|
788
|
+
}
|
|
789
|
+
recompute() {
|
|
790
|
+
if (this.sources) {
|
|
791
|
+
for (const s of this.sources) s.observers?.delete(this);
|
|
792
|
+
this.sources.clear();
|
|
793
|
+
}
|
|
794
|
+
const prevConsumer = G.consumer;
|
|
795
|
+
const prevUntracked = G.untracked;
|
|
796
|
+
const watched = enterReactiveRun(this);
|
|
797
|
+
G.consumer = this;
|
|
798
|
+
G.untracked = false;
|
|
799
|
+
let next;
|
|
800
|
+
let threw = false;
|
|
801
|
+
let err;
|
|
802
|
+
try {
|
|
803
|
+
next = this._fn();
|
|
804
|
+
} catch (e) {
|
|
805
|
+
threw = true;
|
|
806
|
+
err = e;
|
|
807
|
+
next = this._value;
|
|
808
|
+
} finally {
|
|
809
|
+
G.consumer = prevConsumer;
|
|
810
|
+
G.untracked = prevUntracked;
|
|
811
|
+
if (watched) exitReactiveRun();
|
|
812
|
+
}
|
|
813
|
+
const changed = !this._initialized || this._threw !== threw || (threw ? err !== this._error : !this._equals(this._value, next));
|
|
814
|
+
this._initialized = true;
|
|
815
|
+
this._threw = threw;
|
|
816
|
+
this._error = err;
|
|
817
|
+
this._value = next;
|
|
818
|
+
reportReactiveRun(this);
|
|
819
|
+
if (changed) {
|
|
820
|
+
this.version++;
|
|
821
|
+
if (this.observers) for (const o of [...this.observers]) o.markDirty(DIRTY);
|
|
822
|
+
notifyWatchers(this);
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
/**
|
|
826
|
+
* Push a maybe-dirty mark. A direct observer of a changed node gets DIRTY; its
|
|
827
|
+
* own observers get CHECK (recurse), stopping where already marked, so the
|
|
828
|
+
* push is O(newly-dirtied) and never recomputes.
|
|
829
|
+
*/
|
|
830
|
+
markDirty(level) {
|
|
831
|
+
if (this.state >= level) return;
|
|
832
|
+
const wasClean = this.state === CLEAN;
|
|
833
|
+
this.state = level;
|
|
834
|
+
if (wasClean) {
|
|
835
|
+
if (this.observers) for (const o of [...this.observers]) o.markDirty(CHECK);
|
|
836
|
+
notifyWatchers(this);
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
peek() {
|
|
840
|
+
this.updateIfNecessary();
|
|
841
|
+
if (this._threw) throw this._error;
|
|
842
|
+
return this._value;
|
|
843
|
+
}
|
|
844
|
+
};
|
|
845
|
+
function notifyWatchers(node) {
|
|
846
|
+
if (!node.watchers) return;
|
|
847
|
+
for (const w of [...node.watchers]) w._notify(node);
|
|
848
|
+
}
|
|
849
|
+
var Watcher = class {
|
|
850
|
+
constructor(notify) {
|
|
851
|
+
this._watched = /* @__PURE__ */ new Set();
|
|
852
|
+
this._pending = /* @__PURE__ */ new Set();
|
|
853
|
+
this._notifyFn = notify;
|
|
854
|
+
}
|
|
855
|
+
watch(...nodes) {
|
|
856
|
+
for (const n of nodes) {
|
|
857
|
+
this._watched.add(n);
|
|
858
|
+
(n.watchers ??= /* @__PURE__ */ new Set()).add(this);
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
unwatch(...nodes) {
|
|
862
|
+
for (const n of nodes) {
|
|
863
|
+
this._watched.delete(n);
|
|
864
|
+
n.watchers?.delete(this);
|
|
865
|
+
this._pending.delete(n);
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
/** Watched nodes that may have changed since the last getPending(). */
|
|
869
|
+
getPending() {
|
|
870
|
+
const out = [...this._pending];
|
|
871
|
+
this._pending.clear();
|
|
872
|
+
return out;
|
|
873
|
+
}
|
|
874
|
+
/** @internal, a watched node became non-clean. Edge-triggered: notify once. */
|
|
875
|
+
_notify(node) {
|
|
876
|
+
if (!this._watched.has(node) || this._pending.has(node)) return;
|
|
877
|
+
const wasEmpty = this._pending.size === 0;
|
|
878
|
+
this._pending.add(node);
|
|
879
|
+
if (wasEmpty) this._notifyFn();
|
|
880
|
+
}
|
|
881
|
+
};
|
|
882
|
+
function untrack(fn) {
|
|
883
|
+
if (G.untracked) return fn();
|
|
884
|
+
G.untracked = true;
|
|
885
|
+
try {
|
|
886
|
+
return fn();
|
|
887
|
+
} finally {
|
|
888
|
+
G.untracked = false;
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
function currentComputed() {
|
|
892
|
+
return G.consumer;
|
|
893
|
+
}
|
|
894
|
+
function hasSinks(node) {
|
|
895
|
+
return !!(node.observers && node.observers.size) || !!(node.watchers && node.watchers.size);
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
// src/lib/signal/graph/runtime.ts
|
|
899
|
+
function createChildOwner(parent) {
|
|
900
|
+
const owner = makeOwner(parent);
|
|
901
|
+
if (parent) (parent.owned ??= []).push(owner);
|
|
902
|
+
return owner;
|
|
903
|
+
}
|
|
904
|
+
function disposeScope(owner, final = true) {
|
|
905
|
+
disposeOwner(owner, final);
|
|
906
|
+
}
|
|
907
|
+
function isOwnerDisposed(owner) {
|
|
908
|
+
return !!owner && owner.disposed === true;
|
|
909
|
+
}
|
|
910
|
+
function makeOwner(parent) {
|
|
911
|
+
return { cleanups: null, owned: null, parent, contexts: null };
|
|
912
|
+
}
|
|
913
|
+
function createContext(defaultValue, name) {
|
|
914
|
+
const id = Symbol(name ?? "context");
|
|
915
|
+
reportReactiveContextCreated(id);
|
|
916
|
+
const Provider = (props) => {
|
|
917
|
+
reportReactiveContext(id, "provide", props.value);
|
|
918
|
+
const parent = G.owner;
|
|
919
|
+
const owner = makeOwner(parent);
|
|
920
|
+
(owner.contexts = /* @__PURE__ */ new Map()).set(id, props.value);
|
|
921
|
+
if (parent) (parent.owned ??= []).push(owner);
|
|
922
|
+
G.owner = owner;
|
|
923
|
+
try {
|
|
924
|
+
return props.children;
|
|
925
|
+
} finally {
|
|
926
|
+
G.owner = parent;
|
|
927
|
+
}
|
|
928
|
+
};
|
|
929
|
+
return { id, defaultValue, Provider };
|
|
930
|
+
}
|
|
931
|
+
function useContext(context2) {
|
|
932
|
+
let o = G.owner;
|
|
933
|
+
while (o) {
|
|
934
|
+
if (o.contexts && o.contexts.has(context2.id)) {
|
|
935
|
+
const found = o.contexts.get(context2.id);
|
|
936
|
+
reportReactiveContext(context2.id, "read", found);
|
|
937
|
+
return found;
|
|
938
|
+
}
|
|
939
|
+
o = o.parent;
|
|
940
|
+
}
|
|
941
|
+
reportReactiveContext(context2.id, "read", context2.defaultValue);
|
|
942
|
+
return context2.defaultValue;
|
|
943
|
+
}
|
|
944
|
+
function readContextFrom(owner, context2) {
|
|
945
|
+
let o = owner;
|
|
946
|
+
while (o) {
|
|
947
|
+
if (o.contexts && o.contexts.has(context2.id)) return o.contexts.get(context2.id);
|
|
948
|
+
o = o.parent;
|
|
949
|
+
}
|
|
950
|
+
return context2.defaultValue;
|
|
951
|
+
}
|
|
952
|
+
function provide(context2, value, fn) {
|
|
953
|
+
const owner = makeOwner(G.owner);
|
|
954
|
+
(owner.contexts = /* @__PURE__ */ new Map()).set(context2.id, value);
|
|
955
|
+
if (G.owner) (G.owner.owned ??= []).push(owner);
|
|
956
|
+
const prev = G.owner;
|
|
957
|
+
G.owner = owner;
|
|
958
|
+
try {
|
|
959
|
+
return fn();
|
|
960
|
+
} finally {
|
|
961
|
+
G.owner = prev;
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
function setSuspendHandler(fn) {
|
|
965
|
+
G.onSuspend = fn;
|
|
966
|
+
}
|
|
967
|
+
function reportSuspend(promise) {
|
|
968
|
+
if (G.onSuspend) {
|
|
969
|
+
G.onSuspend(promise, G.owner);
|
|
970
|
+
return true;
|
|
971
|
+
}
|
|
972
|
+
return false;
|
|
973
|
+
}
|
|
974
|
+
function setErrorHandler(fn) {
|
|
975
|
+
G.onError = fn;
|
|
976
|
+
}
|
|
977
|
+
function getOwner() {
|
|
978
|
+
return G.owner;
|
|
979
|
+
}
|
|
980
|
+
function setOwner(owner) {
|
|
981
|
+
const prev = G.owner;
|
|
982
|
+
G.owner = owner;
|
|
983
|
+
return prev;
|
|
984
|
+
}
|
|
985
|
+
function runWithOwner(owner, fn) {
|
|
986
|
+
const prev = G.owner;
|
|
987
|
+
G.owner = owner;
|
|
988
|
+
try {
|
|
989
|
+
return fn();
|
|
990
|
+
} finally {
|
|
991
|
+
G.owner = prev;
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
function onCleanup(fn) {
|
|
995
|
+
if (!G.owner) return;
|
|
996
|
+
if (G.owner.disposed) {
|
|
997
|
+
fn();
|
|
998
|
+
return;
|
|
999
|
+
}
|
|
1000
|
+
(G.owner.cleanups ??= []).push(fn);
|
|
1001
|
+
}
|
|
1002
|
+
function disposeOwner(owner, final = true) {
|
|
1003
|
+
if (owner.disposed) return;
|
|
1004
|
+
if (owner.owned) {
|
|
1005
|
+
for (let i = owner.owned.length - 1; i >= 0; i--) disposeOwner(owner.owned[i]);
|
|
1006
|
+
owner.owned = null;
|
|
1007
|
+
}
|
|
1008
|
+
if (owner.cleanups) {
|
|
1009
|
+
for (let i = owner.cleanups.length - 1; i >= 0; i--) owner.cleanups[i]();
|
|
1010
|
+
owner.cleanups = null;
|
|
1011
|
+
}
|
|
1012
|
+
if (final) owner.disposed = true;
|
|
1013
|
+
}
|
|
1014
|
+
function createRoot(fn) {
|
|
1015
|
+
const owner = makeOwner(G.owner);
|
|
1016
|
+
if (G.owner) (G.owner.owned ??= []).push(owner);
|
|
1017
|
+
const prev = G.owner;
|
|
1018
|
+
G.owner = owner;
|
|
1019
|
+
try {
|
|
1020
|
+
return fn(() => disposeOwner(owner));
|
|
1021
|
+
} finally {
|
|
1022
|
+
G.owner = prev;
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
function setScheduler(fn) {
|
|
1026
|
+
G.hostSchedule = fn ?? ((run) => void Promise.resolve().then(run));
|
|
1027
|
+
}
|
|
1028
|
+
function enqueue(e) {
|
|
1029
|
+
if (e.queued) return;
|
|
1030
|
+
e.queued = true;
|
|
1031
|
+
G.queue.push(e);
|
|
1032
|
+
if (!G.scheduled && G.batchDepth === 0) {
|
|
1033
|
+
G.scheduled = true;
|
|
1034
|
+
G.hostSchedule(flushSync);
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
function flushSync() {
|
|
1038
|
+
G.scheduled = false;
|
|
1039
|
+
if (G.flushing) return;
|
|
1040
|
+
G.flushing = true;
|
|
1041
|
+
let guard = 0;
|
|
1042
|
+
try {
|
|
1043
|
+
while (G.queue.length) {
|
|
1044
|
+
if (++guard > 1e5) throw new Error("[fluixi] effect flush did not settle (cycle?)");
|
|
1045
|
+
const batchOf = G.queue;
|
|
1046
|
+
G.queue = [];
|
|
1047
|
+
for (const e of batchOf) {
|
|
1048
|
+
e.queued = false;
|
|
1049
|
+
if (!e.disposed) e.run();
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
} finally {
|
|
1053
|
+
G.flushing = false;
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
function afterWrite() {
|
|
1057
|
+
if (G.batchDepth === 0) flushSync();
|
|
1058
|
+
}
|
|
1059
|
+
function batch(fn) {
|
|
1060
|
+
G.batchDepth++;
|
|
1061
|
+
try {
|
|
1062
|
+
return fn();
|
|
1063
|
+
} finally {
|
|
1064
|
+
if (--G.batchDepth === 0) flushSync();
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
1067
|
+
var EffectNode = class {
|
|
1068
|
+
constructor(fn, report = false) {
|
|
1069
|
+
this.queued = false;
|
|
1070
|
+
this.disposed = false;
|
|
1071
|
+
this.owner = makeOwner(G.owner);
|
|
1072
|
+
if (G.owner) (G.owner.cleanups ??= []).push(() => this.dispose());
|
|
1073
|
+
this.computed = new Computed(() => {
|
|
1074
|
+
disposeOwner(this.owner, false);
|
|
1075
|
+
runWithOwner(this.owner, () => {
|
|
1076
|
+
const r = fn();
|
|
1077
|
+
if (typeof r === "function") (this.owner.cleanups ??= []).push(r);
|
|
1078
|
+
});
|
|
1079
|
+
});
|
|
1080
|
+
reportReactiveNode({ kind: "effect", node: this.computed, handle: this, internal: !report });
|
|
1081
|
+
this.watcher = new Watcher(() => enqueue(this));
|
|
1082
|
+
this.run();
|
|
1083
|
+
this.watcher.watch(this.computed);
|
|
1084
|
+
}
|
|
1085
|
+
run() {
|
|
1086
|
+
if (this.disposed) return;
|
|
1087
|
+
this.watcher.getPending();
|
|
1088
|
+
try {
|
|
1089
|
+
this.computed.get();
|
|
1090
|
+
} catch (e) {
|
|
1091
|
+
if (e && typeof e.then === "function" && G.onSuspend) {
|
|
1092
|
+
G.onSuspend(e, this.owner);
|
|
1093
|
+
return;
|
|
1094
|
+
}
|
|
1095
|
+
if (G.onError && G.onError(e, this.owner)) return;
|
|
1096
|
+
throw e;
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
dispose() {
|
|
1100
|
+
if (this.disposed) return;
|
|
1101
|
+
this.disposed = true;
|
|
1102
|
+
reportReactiveDispose(this.computed);
|
|
1103
|
+
this.watcher.unwatch(this.computed);
|
|
1104
|
+
disposeOwner(this.owner);
|
|
1105
|
+
}
|
|
1106
|
+
};
|
|
1107
|
+
function effect(fn, report = false) {
|
|
1108
|
+
const node = new EffectNode(fn, report);
|
|
1109
|
+
return () => node.dispose();
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
// src/lib/signal/graph/compat.ts
|
|
1113
|
+
function isThenable(v) {
|
|
1114
|
+
return !!v && typeof v.then === "function";
|
|
1115
|
+
}
|
|
1116
|
+
setScheduler(() => {
|
|
1117
|
+
});
|
|
1118
|
+
var $SIGNAL = /* @__PURE__ */ Symbol.for("signal");
|
|
1119
|
+
var $MEMO = /* @__PURE__ */ Symbol.for("memo");
|
|
1120
|
+
var $NODE = /* @__PURE__ */ Symbol.for("signal-node");
|
|
1121
|
+
function createSignal(value, options) {
|
|
1122
|
+
const state = new State(value, { equals: options?.equals });
|
|
1123
|
+
const read = (() => state.get());
|
|
1124
|
+
const write = ((next) => {
|
|
1125
|
+
const v = typeof next === "function" ? next(state.peek()) : next;
|
|
1126
|
+
state.set(v);
|
|
1127
|
+
afterWrite();
|
|
1128
|
+
return v;
|
|
1129
|
+
});
|
|
1130
|
+
Object.defineProperty(read, $SIGNAL, { value: true, enumerable: true });
|
|
1131
|
+
Object.defineProperty(read, $NODE, {
|
|
1132
|
+
value: {
|
|
1133
|
+
get value() {
|
|
1134
|
+
return state.peek();
|
|
1135
|
+
},
|
|
1136
|
+
get version() {
|
|
1137
|
+
return state.version;
|
|
1138
|
+
}
|
|
1139
|
+
},
|
|
1140
|
+
enumerable: false
|
|
1141
|
+
});
|
|
1142
|
+
reportReactiveNode({
|
|
1143
|
+
kind: "signal",
|
|
1144
|
+
node: state,
|
|
1145
|
+
handle: read,
|
|
1146
|
+
name: options?.name,
|
|
1147
|
+
set: write
|
|
1148
|
+
});
|
|
1149
|
+
if (isObserved()) onCleanup(() => reportReactiveDispose(state));
|
|
1150
|
+
return [read, write];
|
|
1151
|
+
}
|
|
1152
|
+
function createMemo(fn, value, options) {
|
|
1153
|
+
let prev = value;
|
|
1154
|
+
const owner = getOwner();
|
|
1155
|
+
const c = new Computed(
|
|
1156
|
+
() => runWithOwner(owner, () => {
|
|
1157
|
+
try {
|
|
1158
|
+
return prev = fn(prev);
|
|
1159
|
+
} catch (e) {
|
|
1160
|
+
if (isThenable(e)) {
|
|
1161
|
+
reportSuspend(e);
|
|
1162
|
+
return prev;
|
|
1163
|
+
}
|
|
1164
|
+
throw e;
|
|
1165
|
+
}
|
|
1166
|
+
}),
|
|
1167
|
+
{ equals: options?.equals }
|
|
1168
|
+
);
|
|
1169
|
+
const read = (() => c.get());
|
|
1170
|
+
Object.defineProperty(read, $SIGNAL, { value: true, enumerable: true });
|
|
1171
|
+
Object.defineProperty(read, $MEMO, { value: true, enumerable: true });
|
|
1172
|
+
reportReactiveNode({ kind: "memo", node: c, handle: read, name: options?.name });
|
|
1173
|
+
if (isObserved()) onCleanup(() => reportReactiveDispose(c));
|
|
1174
|
+
return read;
|
|
1175
|
+
}
|
|
1176
|
+
function createEffect(fn, value) {
|
|
1177
|
+
let prev = value;
|
|
1178
|
+
return effect(() => {
|
|
1179
|
+
const r = fn(prev);
|
|
1180
|
+
prev = r;
|
|
1181
|
+
}, true);
|
|
1182
|
+
}
|
|
1183
|
+
function createComputed(fn, value) {
|
|
1184
|
+
let prev = value;
|
|
1185
|
+
effect(() => {
|
|
1186
|
+
prev = fn(prev);
|
|
1187
|
+
});
|
|
1188
|
+
}
|
|
1189
|
+
function createRenderEffect(fn, value) {
|
|
1190
|
+
let prev = value;
|
|
1191
|
+
return effect(() => {
|
|
1192
|
+
prev = fn(prev);
|
|
1193
|
+
});
|
|
1194
|
+
}
|
|
1195
|
+
function batch2(fn) {
|
|
1196
|
+
return batch(fn);
|
|
1197
|
+
}
|
|
1198
|
+
function untrack2(fn) {
|
|
1199
|
+
return untrack(fn);
|
|
1200
|
+
}
|
|
1201
|
+
function startTransition(fn) {
|
|
1202
|
+
batch(fn);
|
|
1203
|
+
return Promise.resolve();
|
|
1204
|
+
}
|
|
1205
|
+
function useTransition() {
|
|
1206
|
+
return [() => false, startTransition];
|
|
1207
|
+
}
|
|
1208
|
+
function flush() {
|
|
1209
|
+
flushSync();
|
|
1210
|
+
return Promise.resolve();
|
|
1211
|
+
}
|
|
1212
|
+
function on(deps, fn, options) {
|
|
1213
|
+
const isArray = Array.isArray(deps);
|
|
1214
|
+
let prevValue;
|
|
1215
|
+
let defer = options?.defer ?? false;
|
|
1216
|
+
return (prevResult) => {
|
|
1217
|
+
const value = isArray ? deps.map((d) => d()) : deps();
|
|
1218
|
+
if (defer) {
|
|
1219
|
+
defer = false;
|
|
1220
|
+
prevValue = value;
|
|
1221
|
+
return void 0;
|
|
1222
|
+
}
|
|
1223
|
+
const result = untrack(() => fn(value, prevValue, prevResult));
|
|
1224
|
+
prevValue = value;
|
|
1225
|
+
return result;
|
|
1226
|
+
};
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
// src/lib/signal/list.ts
|
|
1230
|
+
function mapArray(list, mapFn, options) {
|
|
1231
|
+
let items = [];
|
|
1232
|
+
onCleanup(() => {
|
|
1233
|
+
for (const e of items) e.dispose();
|
|
1234
|
+
items = [];
|
|
1235
|
+
});
|
|
1236
|
+
return createMemo(() => {
|
|
1237
|
+
const next = list() || [];
|
|
1238
|
+
return untrack2(() => {
|
|
1239
|
+
if (next.length === 0) {
|
|
1240
|
+
for (const e of items) e.dispose();
|
|
1241
|
+
items = [];
|
|
1242
|
+
return options?.fallback ? options.fallback() : [];
|
|
1243
|
+
}
|
|
1244
|
+
const prevByItem = /* @__PURE__ */ new Map();
|
|
1245
|
+
for (const e of items) if (!prevByItem.has(e.item)) prevByItem.set(e.item, e);
|
|
1246
|
+
const result = [];
|
|
1247
|
+
const used = /* @__PURE__ */ new Set();
|
|
1248
|
+
for (let i = 0; i < next.length; i++) {
|
|
1249
|
+
const value = next[i];
|
|
1250
|
+
const reuse = prevByItem.get(value);
|
|
1251
|
+
if (reuse && !used.has(reuse)) {
|
|
1252
|
+
reuse.setIndex(i);
|
|
1253
|
+
result.push(reuse);
|
|
1254
|
+
used.add(reuse);
|
|
1255
|
+
} else {
|
|
1256
|
+
let rendered, setIndex, dispose;
|
|
1257
|
+
createRoot((d) => {
|
|
1258
|
+
dispose = d;
|
|
1259
|
+
const [index, setIdx] = createSignal(i, { name: "row index" });
|
|
1260
|
+
setIndex = setIdx;
|
|
1261
|
+
rendered = mapFn(value, index);
|
|
1262
|
+
});
|
|
1263
|
+
const entry = { item: value, rendered, dispose, setIndex };
|
|
1264
|
+
result.push(entry);
|
|
1265
|
+
used.add(entry);
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
for (const e of items) if (!used.has(e)) e.dispose();
|
|
1269
|
+
items = result;
|
|
1270
|
+
return result.map((e) => e.rendered);
|
|
1271
|
+
});
|
|
1272
|
+
}, void 0, { name: "mapArray" });
|
|
1273
|
+
}
|
|
1274
|
+
function keyArray(list, keyFn, mapFn, options) {
|
|
1275
|
+
let keys = [];
|
|
1276
|
+
let entries = [];
|
|
1277
|
+
onCleanup(() => {
|
|
1278
|
+
for (const e of entries) e.dispose();
|
|
1279
|
+
keys = [];
|
|
1280
|
+
entries = [];
|
|
1281
|
+
});
|
|
1282
|
+
return createMemo(() => {
|
|
1283
|
+
const next = list() || [];
|
|
1284
|
+
return untrack2(() => {
|
|
1285
|
+
if (next.length === 0) {
|
|
1286
|
+
for (const e of entries) e.dispose();
|
|
1287
|
+
keys = [];
|
|
1288
|
+
entries = [];
|
|
1289
|
+
return options?.fallback ? options.fallback() : [];
|
|
1290
|
+
}
|
|
1291
|
+
const prevByKey = /* @__PURE__ */ new Map();
|
|
1292
|
+
for (let i = 0; i < keys.length; i++) prevByKey.set(keys[i], entries[i]);
|
|
1293
|
+
const resultEntries = [];
|
|
1294
|
+
const resultKeys = [];
|
|
1295
|
+
const usedKeys = /* @__PURE__ */ new Set();
|
|
1296
|
+
for (let i = 0; i < next.length; i++) {
|
|
1297
|
+
const key = keyFn(next[i]);
|
|
1298
|
+
const reuse = prevByKey.get(key);
|
|
1299
|
+
if (reuse && !usedKeys.has(key)) {
|
|
1300
|
+
reuse.setIndex(i);
|
|
1301
|
+
resultEntries.push(reuse);
|
|
1302
|
+
} else {
|
|
1303
|
+
let rendered, setIndex, dispose;
|
|
1304
|
+
createRoot((d) => {
|
|
1305
|
+
dispose = d;
|
|
1306
|
+
const [index, setIdx] = createSignal(i, { name: "row index" });
|
|
1307
|
+
setIndex = setIdx;
|
|
1308
|
+
const item = createMemo((prev) => {
|
|
1309
|
+
const cur = list() || [];
|
|
1310
|
+
const v = cur[index()];
|
|
1311
|
+
return v !== void 0 && v !== null ? v : prev;
|
|
1312
|
+
}, next[i]);
|
|
1313
|
+
rendered = mapFn(item, index);
|
|
1314
|
+
});
|
|
1315
|
+
resultEntries.push({ rendered, dispose, setIndex });
|
|
1316
|
+
}
|
|
1317
|
+
resultKeys.push(key);
|
|
1318
|
+
usedKeys.add(key);
|
|
1319
|
+
}
|
|
1320
|
+
for (const [key, e] of prevByKey) if (!usedKeys.has(key)) e.dispose();
|
|
1321
|
+
keys = resultKeys;
|
|
1322
|
+
entries = resultEntries;
|
|
1323
|
+
return resultEntries.map((e) => e.rendered);
|
|
1324
|
+
});
|
|
1325
|
+
}, void 0, { name: "keyArray" });
|
|
1326
|
+
}
|
|
1327
|
+
function indexArray(list, mapFn, options) {
|
|
1328
|
+
let slots = [];
|
|
1329
|
+
onCleanup(() => {
|
|
1330
|
+
for (const s of slots) s.dispose();
|
|
1331
|
+
slots = [];
|
|
1332
|
+
});
|
|
1333
|
+
return createMemo(() => {
|
|
1334
|
+
const next = list() || [];
|
|
1335
|
+
return untrack2(() => {
|
|
1336
|
+
if (next.length === 0) {
|
|
1337
|
+
for (const s of slots) s.dispose();
|
|
1338
|
+
slots = [];
|
|
1339
|
+
return options?.fallback ? options.fallback() : [];
|
|
1340
|
+
}
|
|
1341
|
+
const prevLen = slots.length;
|
|
1342
|
+
const nextLen = next.length;
|
|
1343
|
+
for (let i = prevLen; i < nextLen; i++) {
|
|
1344
|
+
let rendered, setItem, dispose;
|
|
1345
|
+
const value = next[i];
|
|
1346
|
+
createRoot((d) => {
|
|
1347
|
+
dispose = d;
|
|
1348
|
+
const [item, setVal] = createSignal(value);
|
|
1349
|
+
setItem = setVal;
|
|
1350
|
+
rendered = mapFn(item, i);
|
|
1351
|
+
});
|
|
1352
|
+
slots.push({ rendered, setItem, dispose });
|
|
1353
|
+
}
|
|
1354
|
+
for (let i = nextLen; i < prevLen; i++) slots[i].dispose();
|
|
1355
|
+
if (nextLen < prevLen) slots = slots.slice(0, nextLen);
|
|
1356
|
+
const survive = Math.min(prevLen, nextLen);
|
|
1357
|
+
for (let i = 0; i < survive; i++) slots[i].setItem(next[i]);
|
|
1358
|
+
return slots.map((s) => s.rendered);
|
|
1359
|
+
});
|
|
1360
|
+
}, void 0, { name: "indexArray" });
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
// src/lib/signal/graph/detect.ts
|
|
1364
|
+
var __BROWSER_PROD__ = typeof window === "undefined" ? false : window.__FLUIXI_PROD__ === true;
|
|
1365
|
+
var __DEV__ = typeof process === "undefined" ? __BROWSER_PROD__ : false;
|
|
1366
|
+
var $SIGNAL2 = /* @__PURE__ */ Symbol.for("signal");
|
|
1367
|
+
var $MEMO2 = /* @__PURE__ */ Symbol.for("memo");
|
|
1368
|
+
var $RESOURCE = /* @__PURE__ */ Symbol.for("resource");
|
|
1369
|
+
function isSignal(value) {
|
|
1370
|
+
return typeof value === "function" && value[$SIGNAL2] === true;
|
|
1371
|
+
}
|
|
1372
|
+
function isMemo(value) {
|
|
1373
|
+
return typeof value === "function" && value[$MEMO2] === true;
|
|
1374
|
+
}
|
|
1375
|
+
function isResource(value) {
|
|
1376
|
+
return typeof value === "function" && value[$RESOURCE] === true;
|
|
1377
|
+
}
|
|
1378
|
+
function isComponent(value) {
|
|
1379
|
+
return typeof value === "function" && value[/* @__PURE__ */ Symbol.for("fluixi-component")] === true;
|
|
1380
|
+
}
|
|
1381
|
+
function isSuspense(value) {
|
|
1382
|
+
return typeof value === "function" && value[/* @__PURE__ */ Symbol.for("fluixi-suspense")] === true;
|
|
1383
|
+
}
|
|
1384
|
+
function isProvider(value) {
|
|
1385
|
+
return typeof value === "function" && value[/* @__PURE__ */ Symbol.for("fluixi-provider")] === true;
|
|
1386
|
+
}
|
|
1387
|
+
function makeArrayFlat(values) {
|
|
1388
|
+
if (!Array.isArray(values)) return values;
|
|
1389
|
+
if (values.length === 2 && values[1] === " ") {
|
|
1390
|
+
if (Array.isArray(values[0])) return makeArrayFlat(values[0]);
|
|
1391
|
+
if (typeof values[0] === "function") return values[0];
|
|
1392
|
+
return values[0];
|
|
1393
|
+
}
|
|
1394
|
+
if (values.length === 1 && typeof values[0] === "function") return values[0];
|
|
1395
|
+
return values;
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
// src/lib/signal/graph/ssr-hooks.ts
|
|
1399
|
+
var _resourceTracker = null;
|
|
1400
|
+
function setResourceTracker(fn) {
|
|
1401
|
+
_resourceTracker = fn;
|
|
1402
|
+
}
|
|
1403
|
+
function trackResourcePromise(p) {
|
|
1404
|
+
if (_resourceTracker) _resourceTracker(p);
|
|
1405
|
+
}
|
|
1406
|
+
var _serverDataGetter = null;
|
|
1407
|
+
function setServerDataGetter(fn) {
|
|
1408
|
+
_serverDataGetter = fn;
|
|
1409
|
+
}
|
|
1410
|
+
function getServerData(id) {
|
|
1411
|
+
return _serverDataGetter ? _serverDataGetter(id) : void 0;
|
|
1412
|
+
}
|
|
1413
|
+
var _resourceIdSource = null;
|
|
1414
|
+
function setResourceIdSource(fn) {
|
|
1415
|
+
_resourceIdSource = fn;
|
|
1416
|
+
}
|
|
1417
|
+
function nextResourceId() {
|
|
1418
|
+
return _resourceIdSource ? _resourceIdSource() : void 0;
|
|
1419
|
+
}
|
|
1420
|
+
var _resourceDataSink = null;
|
|
1421
|
+
function setResourceDataSink(fn) {
|
|
1422
|
+
_resourceDataSink = fn;
|
|
1423
|
+
}
|
|
1424
|
+
function reportResourceData(id, value) {
|
|
1425
|
+
if (_resourceDataSink) _resourceDataSink(id, value);
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
// src/lib/signal/graph/derived.ts
|
|
1429
|
+
function createSelector(source, fn = (k, v) => k === v) {
|
|
1430
|
+
const map = /* @__PURE__ */ new Map();
|
|
1431
|
+
createEffect(() => {
|
|
1432
|
+
const value = source();
|
|
1433
|
+
for (const [key, signal2] of map) {
|
|
1434
|
+
const [get, set] = signal2;
|
|
1435
|
+
const match = fn(key, value);
|
|
1436
|
+
if (get() !== match) set(match);
|
|
1437
|
+
}
|
|
1438
|
+
});
|
|
1439
|
+
return (key) => {
|
|
1440
|
+
let signal2 = map.get(key);
|
|
1441
|
+
if (!signal2) {
|
|
1442
|
+
const [get, set] = createSignal(false);
|
|
1443
|
+
signal2 = [get, set];
|
|
1444
|
+
map.set(key, signal2);
|
|
1445
|
+
const value = source();
|
|
1446
|
+
set(fn(key, value));
|
|
1447
|
+
}
|
|
1448
|
+
return signal2[0]();
|
|
1449
|
+
};
|
|
1450
|
+
}
|
|
1451
|
+
function createDeferred(source, options) {
|
|
1452
|
+
const [delayed, setDelayed] = createSignal(source(), options);
|
|
1453
|
+
createEffect(() => {
|
|
1454
|
+
const v = source();
|
|
1455
|
+
if (options?.timeoutMs) setTimeout(() => setDelayed(() => v), options.timeoutMs);
|
|
1456
|
+
else if (typeof requestIdleCallback === "function")
|
|
1457
|
+
requestIdleCallback(() => setDelayed(() => v));
|
|
1458
|
+
else Promise.resolve().then(() => setDelayed(() => v));
|
|
1459
|
+
});
|
|
1460
|
+
return delayed;
|
|
1461
|
+
}
|
|
1462
|
+
function createDebounce(fn, delay) {
|
|
1463
|
+
let timer;
|
|
1464
|
+
const debounced = (...args) => {
|
|
1465
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
1466
|
+
timer = setTimeout(() => {
|
|
1467
|
+
timer = void 0;
|
|
1468
|
+
fn(...args);
|
|
1469
|
+
}, delay);
|
|
1470
|
+
};
|
|
1471
|
+
onCleanup(() => {
|
|
1472
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
1473
|
+
});
|
|
1474
|
+
return debounced;
|
|
1475
|
+
}
|
|
1476
|
+
|
|
1477
|
+
// src/lib/signal/graph/resource.ts
|
|
1478
|
+
function isPromise(v) {
|
|
1479
|
+
return !!v && typeof v.then === "function";
|
|
1480
|
+
}
|
|
1481
|
+
var UNSET = /* @__PURE__ */ Symbol();
|
|
1482
|
+
function createResource(source, fetcherFn, options = {}) {
|
|
1483
|
+
let s;
|
|
1484
|
+
let fetcher;
|
|
1485
|
+
if (typeof fetcherFn === "function") {
|
|
1486
|
+
s = typeof source === "function" ? source : () => source;
|
|
1487
|
+
fetcher = fetcherFn;
|
|
1488
|
+
} else {
|
|
1489
|
+
s = () => true;
|
|
1490
|
+
fetcher = source;
|
|
1491
|
+
if (fetcherFn && typeof fetcherFn === "object") options = fetcherFn;
|
|
1492
|
+
}
|
|
1493
|
+
const ssrId = options.transport === false ? void 0 : nextResourceId();
|
|
1494
|
+
const seed = ssrId !== void 0 ? getServerData(ssrId) : void 0;
|
|
1495
|
+
let skipFirstFetch = seed !== void 0;
|
|
1496
|
+
const [value, setValue] = createSignal(
|
|
1497
|
+
seed !== void 0 ? seed.value : options.initialValue,
|
|
1498
|
+
{ equals: false }
|
|
1499
|
+
);
|
|
1500
|
+
const [error, setError] = createSignal(void 0, { equals: false });
|
|
1501
|
+
const [state, setState] = createSignal(
|
|
1502
|
+
seed !== void 0 || options.initialValue !== void 0 ? "ready" : "unresolved",
|
|
1503
|
+
{ equals: false }
|
|
1504
|
+
);
|
|
1505
|
+
const [promise, setPromise] = createSignal(void 0, { equals: false });
|
|
1506
|
+
const [track, trigger] = createSignal(void 0, { equals: false });
|
|
1507
|
+
let prevKey = UNSET;
|
|
1508
|
+
let manualRefetch = false;
|
|
1509
|
+
createEffect(() => {
|
|
1510
|
+
const val = s();
|
|
1511
|
+
track();
|
|
1512
|
+
if (val === false || val === null || val === void 0) {
|
|
1513
|
+
prevKey = UNSET;
|
|
1514
|
+
batch2(() => {
|
|
1515
|
+
setState("unresolved");
|
|
1516
|
+
setPromise(void 0);
|
|
1517
|
+
setError(void 0);
|
|
1518
|
+
});
|
|
1519
|
+
return;
|
|
1520
|
+
}
|
|
1521
|
+
const isManual = manualRefetch;
|
|
1522
|
+
manualRefetch = false;
|
|
1523
|
+
if (prevKey !== UNSET && val === prevKey && !isManual) return;
|
|
1524
|
+
prevKey = val;
|
|
1525
|
+
if (skipFirstFetch) {
|
|
1526
|
+
skipFirstFetch = false;
|
|
1527
|
+
return;
|
|
1528
|
+
}
|
|
1529
|
+
let cancelled = false;
|
|
1530
|
+
onCleanup(() => cancelled = true);
|
|
1531
|
+
const currentState = untrack2(state);
|
|
1532
|
+
const currentValue = untrack2(value);
|
|
1533
|
+
const isRefreshing = currentState === "ready" || currentState === "refreshing";
|
|
1534
|
+
batch2(() => {
|
|
1535
|
+
setState(isRefreshing ? "refreshing" : "pending");
|
|
1536
|
+
setError(void 0);
|
|
1537
|
+
});
|
|
1538
|
+
try {
|
|
1539
|
+
const res = fetcher(val, { value: currentValue, refetching: isRefreshing });
|
|
1540
|
+
if (isPromise(res)) {
|
|
1541
|
+
setPromise(res);
|
|
1542
|
+
trackResourcePromise(res);
|
|
1543
|
+
res.then(
|
|
1544
|
+
(v) => {
|
|
1545
|
+
if (cancelled) return;
|
|
1546
|
+
if (ssrId !== void 0) reportResourceData(ssrId, v);
|
|
1547
|
+
batch2(() => {
|
|
1548
|
+
setValue(() => v);
|
|
1549
|
+
setState("ready");
|
|
1550
|
+
setPromise(void 0);
|
|
1551
|
+
});
|
|
1552
|
+
},
|
|
1553
|
+
(e) => {
|
|
1554
|
+
if (cancelled) return;
|
|
1555
|
+
batch2(() => {
|
|
1556
|
+
setError(e);
|
|
1557
|
+
setState("errored");
|
|
1558
|
+
setPromise(void 0);
|
|
1559
|
+
});
|
|
1560
|
+
}
|
|
1561
|
+
);
|
|
1562
|
+
} else {
|
|
1563
|
+
batch2(() => {
|
|
1564
|
+
setValue(() => res);
|
|
1565
|
+
setState("ready");
|
|
1566
|
+
setPromise(void 0);
|
|
1567
|
+
});
|
|
1568
|
+
}
|
|
1569
|
+
} catch (e) {
|
|
1570
|
+
if (cancelled) return;
|
|
1571
|
+
batch2(() => {
|
|
1572
|
+
setError(e);
|
|
1573
|
+
setState("errored");
|
|
1574
|
+
setPromise(void 0);
|
|
1575
|
+
});
|
|
1576
|
+
}
|
|
1577
|
+
});
|
|
1578
|
+
const loading = () => {
|
|
1579
|
+
const st = state();
|
|
1580
|
+
return st === "pending" || st === "refreshing";
|
|
1581
|
+
};
|
|
1582
|
+
const resource2 = (() => {
|
|
1583
|
+
const e = error();
|
|
1584
|
+
if (e) throw e;
|
|
1585
|
+
if (loading()) {
|
|
1586
|
+
const p = promise();
|
|
1587
|
+
if (p) throw p;
|
|
1588
|
+
}
|
|
1589
|
+
return value();
|
|
1590
|
+
});
|
|
1591
|
+
Object.defineProperties(resource2, {
|
|
1592
|
+
state: { get: state },
|
|
1593
|
+
loading: { get: loading },
|
|
1594
|
+
error: { get: error },
|
|
1595
|
+
latest: { get: value }
|
|
1596
|
+
});
|
|
1597
|
+
Object.defineProperty(resource2, /* @__PURE__ */ Symbol.for("resource"), { value: true, enumerable: true });
|
|
1598
|
+
Object.defineProperty(resource2, /* @__PURE__ */ Symbol.for("signal"), { value: true, enumerable: true });
|
|
1599
|
+
return [
|
|
1600
|
+
resource2,
|
|
1601
|
+
{
|
|
1602
|
+
mutate: setValue,
|
|
1603
|
+
refetch: () => {
|
|
1604
|
+
manualRefetch = true;
|
|
1605
|
+
trigger(void 0);
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
];
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
// src/lib/signal/graph/debounced.ts
|
|
1612
|
+
function createDebouncedSignal(initial, delay = 300) {
|
|
1613
|
+
const [immediate, setImmediate] = createSignal(initial);
|
|
1614
|
+
const [settled, setSettled] = createSignal(initial);
|
|
1615
|
+
const [pending, setPending] = createSignal(false);
|
|
1616
|
+
let timer;
|
|
1617
|
+
const clear = () => {
|
|
1618
|
+
if (timer === void 0) return;
|
|
1619
|
+
clearTimeout(timer);
|
|
1620
|
+
timer = void 0;
|
|
1621
|
+
};
|
|
1622
|
+
const settle = () => {
|
|
1623
|
+
clear();
|
|
1624
|
+
const value = untrack2(immediate);
|
|
1625
|
+
setSettled(() => value);
|
|
1626
|
+
setPending(false);
|
|
1627
|
+
return value;
|
|
1628
|
+
};
|
|
1629
|
+
const set = ((value) => {
|
|
1630
|
+
const next = typeof value === "function" ? value(untrack2(immediate)) : value;
|
|
1631
|
+
setImmediate(() => next);
|
|
1632
|
+
setPending(true);
|
|
1633
|
+
clear();
|
|
1634
|
+
timer = setTimeout(settle, delay);
|
|
1635
|
+
return next;
|
|
1636
|
+
});
|
|
1637
|
+
onCleanup(clear);
|
|
1638
|
+
return [settled, set, { immediate, pending, flush: settle, cancel: () => {
|
|
1639
|
+
clear();
|
|
1640
|
+
setPending(false);
|
|
1641
|
+
} }];
|
|
1642
|
+
}
|
|
1643
|
+
function meaningful(query) {
|
|
1644
|
+
return query !== void 0 && query !== null && query !== "";
|
|
1645
|
+
}
|
|
1646
|
+
function createDebouncedResource(initial, fetcher, options = {}) {
|
|
1647
|
+
const { delay = 300, initialValue, shouldFetch = meaningful } = options;
|
|
1648
|
+
const [query, setQuery, controls] = createDebouncedSignal(initial, delay);
|
|
1649
|
+
const source = () => shouldFetch(query()) ? query() : false;
|
|
1650
|
+
const [resource2, { refetch }] = createResource(
|
|
1651
|
+
source,
|
|
1652
|
+
fetcher,
|
|
1653
|
+
initialValue === void 0 ? {} : { initialValue }
|
|
1654
|
+
);
|
|
1655
|
+
return [resource2, { ...controls, query, setQuery, refetch }];
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
// src/lib/signal/graph/children.ts
|
|
1659
|
+
function resolveChildrenValue(children) {
|
|
1660
|
+
if (typeof children === "function" && !children.length) {
|
|
1661
|
+
const result = children();
|
|
1662
|
+
if (isSignal(result)) return result;
|
|
1663
|
+
return resolveChildrenValue(result);
|
|
1664
|
+
}
|
|
1665
|
+
if (Array.isArray(children)) {
|
|
1666
|
+
const results = [];
|
|
1667
|
+
for (let i = 0; i < children.length; i++) {
|
|
1668
|
+
const result = resolveChildrenValue(children[i]);
|
|
1669
|
+
Array.isArray(result) ? results.push.apply(results, result) : results.push(result);
|
|
1670
|
+
}
|
|
1671
|
+
return results;
|
|
1672
|
+
}
|
|
1673
|
+
return children;
|
|
1674
|
+
}
|
|
1675
|
+
function readChildren(fn) {
|
|
1676
|
+
const children = createMemo(fn);
|
|
1677
|
+
return __DEV__ ? createMemo(() => resolveChildrenValue(children()), void 0, { name: "children" }) : createMemo(() => resolveChildrenValue(children()));
|
|
1678
|
+
}
|
|
1679
|
+
|
|
1680
|
+
// src/lib/signal/graph/suspense.ts
|
|
1681
|
+
var SuspenseContext = createContext();
|
|
1682
|
+
setSuspendHandler((promise, owner) => {
|
|
1683
|
+
const boundary = readContextFrom(owner, SuspenseContext);
|
|
1684
|
+
if (!boundary) return;
|
|
1685
|
+
boundary.increment();
|
|
1686
|
+
promise.finally(() => boundary.decrement());
|
|
1687
|
+
});
|
|
1688
|
+
function createSuspenseBoundary() {
|
|
1689
|
+
const [pending, setPending] = createSignal(0);
|
|
1690
|
+
let count = 0;
|
|
1691
|
+
return {
|
|
1692
|
+
increment: () => setPending(count += 1),
|
|
1693
|
+
decrement: () => setPending(count -= 1),
|
|
1694
|
+
inFallback: () => pending() > 0
|
|
1695
|
+
};
|
|
1696
|
+
}
|
|
1697
|
+
function provideSuspense(boundary, fn) {
|
|
1698
|
+
return provide(SuspenseContext, boundary, fn);
|
|
1699
|
+
}
|
|
1700
|
+
|
|
1701
|
+
// src/lib/signal/graph/error-boundary.ts
|
|
1702
|
+
var ErrorContext = createContext();
|
|
1703
|
+
setErrorHandler((error, owner) => {
|
|
1704
|
+
const boundary = readContextFrom(owner, ErrorContext);
|
|
1705
|
+
if (!boundary) return false;
|
|
1706
|
+
boundary.setError(error);
|
|
1707
|
+
return true;
|
|
1708
|
+
});
|
|
1709
|
+
function createErrorBoundary() {
|
|
1710
|
+
const [error, setError] = createSignal(void 0, { equals: false });
|
|
1711
|
+
const boundary = {
|
|
1712
|
+
error,
|
|
1713
|
+
reset: () => setError(() => void 0),
|
|
1714
|
+
setError: (e) => setError(() => e)
|
|
1715
|
+
};
|
|
1716
|
+
return boundary;
|
|
1717
|
+
}
|
|
1718
|
+
function provideErrorBoundary(boundary, fn) {
|
|
1719
|
+
return provide(ErrorContext, boundary, fn);
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1722
|
+
// src/lib/signal/graph/index.ts
|
|
1723
|
+
var Signal = {
|
|
1724
|
+
State,
|
|
1725
|
+
Computed,
|
|
1726
|
+
subtle: {
|
|
1727
|
+
Watcher,
|
|
1728
|
+
untrack,
|
|
1729
|
+
currentComputed,
|
|
1730
|
+
hasSinks
|
|
1731
|
+
}
|
|
1732
|
+
};
|
|
1733
|
+
|
|
1734
|
+
// src/lib/signal/graph/signal-next.ts
|
|
1735
|
+
var $SIGNAL3 = /* @__PURE__ */ Symbol.for("signal");
|
|
1736
|
+
var $PROXY = /* @__PURE__ */ Symbol.for("fluixi-proxy");
|
|
1737
|
+
|
|
1738
|
+
// src/lib/signal/api.ts
|
|
1739
|
+
function signal(value, options) {
|
|
1740
|
+
const [read, write] = createSignal(value, options);
|
|
1741
|
+
return Object.assign(read, { set: write });
|
|
1742
|
+
}
|
|
1743
|
+
function memo(fn, value, options) {
|
|
1744
|
+
return createMemo(fn, value, options);
|
|
1745
|
+
}
|
|
1746
|
+
function effect2(fn, value) {
|
|
1747
|
+
return createEffect(fn, value);
|
|
1748
|
+
}
|
|
1749
|
+
function root(fn) {
|
|
1750
|
+
return createRoot(fn);
|
|
1751
|
+
}
|
|
1752
|
+
function renderEffect(fn, value) {
|
|
1753
|
+
return createRenderEffect(fn, value);
|
|
1754
|
+
}
|
|
1755
|
+
function computed(fn, value) {
|
|
1756
|
+
createComputed(fn, value);
|
|
1757
|
+
}
|
|
1758
|
+
function context(defaultValue, name) {
|
|
1759
|
+
return createContext(defaultValue, name);
|
|
1760
|
+
}
|
|
1761
|
+
function childOwner(parent) {
|
|
1762
|
+
return createChildOwner(parent);
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
// src/lib/signal/resource-api.ts
|
|
1766
|
+
function resource(...args) {
|
|
1767
|
+
const [read, actions] = createResource(...args);
|
|
1768
|
+
return Object.assign(read, actions);
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
// src/lib/store/store.ts
|
|
1772
|
+
var import_signal = require("@fluixi/reactive/signal");
|
|
1773
|
+
var $RAW = /* @__PURE__ */ Symbol("store-raw");
|
|
1774
|
+
var $NODE2 = /* @__PURE__ */ Symbol("store-node");
|
|
1775
|
+
var $HAS = /* @__PURE__ */ Symbol("store-has");
|
|
1776
|
+
var $SELF = /* @__PURE__ */ Symbol("store-self");
|
|
1777
|
+
var $TRACK = /* @__PURE__ */ Symbol("store-track");
|
|
1778
|
+
var $NAME = /* @__PURE__ */ Symbol("store-name");
|
|
1779
|
+
var $STORE = /* @__PURE__ */ Symbol("store-store");
|
|
1780
|
+
var NODES = /* @__PURE__ */ new WeakMap();
|
|
1781
|
+
var PROXIES = /* @__PURE__ */ new WeakMap();
|
|
1782
|
+
var OWNERS = /* @__PURE__ */ new WeakMap();
|
|
1783
|
+
var ROOTS = /* @__PURE__ */ new WeakMap();
|
|
1784
|
+
function forgetReplaced(dead, state) {
|
|
1785
|
+
if (!isTrackable(dead) || !isObserved()) return;
|
|
1786
|
+
const alive = /* @__PURE__ */ new Set();
|
|
1787
|
+
const keep = (value) => {
|
|
1788
|
+
if (!isTrackable(value) || alive.has(value)) return;
|
|
1789
|
+
alive.add(value);
|
|
1790
|
+
for (const child of Object.values(value)) keep(child);
|
|
1791
|
+
};
|
|
1792
|
+
keep(ROOTS.get(state) ?? state);
|
|
1793
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1794
|
+
const drop = (value) => {
|
|
1795
|
+
if (!isTrackable(value)) return;
|
|
1796
|
+
const target = value;
|
|
1797
|
+
if (alive.has(target) || seen.has(target)) return;
|
|
1798
|
+
seen.add(target);
|
|
1799
|
+
const ns = NODES.get(target);
|
|
1800
|
+
if (ns) {
|
|
1801
|
+
for (const node of ns.keys.values()) reportReactiveDispose(node);
|
|
1802
|
+
if (ns.all) reportReactiveDispose(ns.all);
|
|
1803
|
+
NODES.delete(target);
|
|
1804
|
+
OWNERS.delete(target);
|
|
1805
|
+
PROXIES.delete(target);
|
|
1806
|
+
}
|
|
1807
|
+
for (const child of Object.values(target)) drop(child);
|
|
1808
|
+
};
|
|
1809
|
+
drop(dead);
|
|
1810
|
+
}
|
|
1811
|
+
var pathOf = (base, key, array) => array ? `${base}[${String(key)}]` : `${base}.${String(key)}`;
|
|
1812
|
+
function createDataNode(initial, ns, key) {
|
|
1813
|
+
const owner = ns?.owner;
|
|
1814
|
+
const label = owner && key !== void 0 ? pathOf(owner.name, key, ns?.array) : void 0;
|
|
1815
|
+
const [get, set] = withReactiveOrigin(
|
|
1816
|
+
owner?.store,
|
|
1817
|
+
() => (0, import_signal.createSignal)(initial, label ? { name: label } : void 0)
|
|
1818
|
+
);
|
|
1819
|
+
const node = get;
|
|
1820
|
+
node.$ = set;
|
|
1821
|
+
return node;
|
|
1822
|
+
}
|
|
1823
|
+
function nodesOf(target) {
|
|
1824
|
+
let ns = NODES.get(target);
|
|
1825
|
+
if (!ns) NODES.set(target, ns = { keys: /* @__PURE__ */ new Map(), owner: OWNERS.get(target), array: Array.isArray(target) });
|
|
1826
|
+
else if (!ns.owner) ns.owner = OWNERS.get(target);
|
|
1827
|
+
return ns;
|
|
1828
|
+
}
|
|
1829
|
+
function keyNode(ns, key, seed) {
|
|
1830
|
+
let node = ns.keys.get(key);
|
|
1831
|
+
if (!node) ns.keys.set(key, node = createDataNode(seed, ns, key));
|
|
1832
|
+
return node;
|
|
1833
|
+
}
|
|
1834
|
+
function claim2(target, holder, name, parent) {
|
|
1835
|
+
const was = OWNERS.get(target);
|
|
1836
|
+
if (was && was.store === holder && was.name === name) return;
|
|
1837
|
+
const owner = { store: holder, name };
|
|
1838
|
+
OWNERS.set(target, owner);
|
|
1839
|
+
ROOTS.set(target, ROOTS.get(parent) ?? parent);
|
|
1840
|
+
const ns = NODES.get(target);
|
|
1841
|
+
if (!ns) return;
|
|
1842
|
+
ns.owner = owner;
|
|
1843
|
+
if (!isObserved()) return;
|
|
1844
|
+
for (const [key, node] of ns.keys) reportReactiveMove(node, holder, pathOf(name, key, ns.array));
|
|
1845
|
+
if (ns.all) reportReactiveMove(ns.all, holder, pathOf(name, "*", ns.array));
|
|
1846
|
+
}
|
|
1847
|
+
function trackKeys(target) {
|
|
1848
|
+
const ns = nodesOf(target);
|
|
1849
|
+
(ns.all || (ns.all = createDataNode(void 0, ns, "*")))();
|
|
1850
|
+
}
|
|
1851
|
+
function pokeNode(node, value) {
|
|
1852
|
+
node.$(typeof value === "function" ? () => value : value);
|
|
1853
|
+
}
|
|
1854
|
+
function isTrackable(value) {
|
|
1855
|
+
if (value == null || typeof value !== "object") return false;
|
|
1856
|
+
if (Array.isArray(value)) return true;
|
|
1857
|
+
const proto = Object.getPrototypeOf(value);
|
|
1858
|
+
return proto === Object.prototype || proto === null;
|
|
1859
|
+
}
|
|
1860
|
+
function box(value) {
|
|
1861
|
+
if (!isTrackable(value)) return value;
|
|
1862
|
+
const existing = PROXIES.get(value);
|
|
1863
|
+
if (existing) return existing;
|
|
1864
|
+
const proxy = new Proxy(value, handler);
|
|
1865
|
+
PROXIES.set(value, proxy);
|
|
1866
|
+
return proxy;
|
|
1867
|
+
}
|
|
1868
|
+
var handler = {
|
|
1869
|
+
get(target, key, receiver) {
|
|
1870
|
+
if (key === $RAW) return target;
|
|
1871
|
+
if (key === $NODE2) return target;
|
|
1872
|
+
if (key === import_signal.$PROXY) return receiver;
|
|
1873
|
+
if (key === $HAS) return (k) => k in target;
|
|
1874
|
+
if (key === "__proxy") return true;
|
|
1875
|
+
if (key === $TRACK || key === $SELF) {
|
|
1876
|
+
trackKeys(target);
|
|
1877
|
+
return receiver;
|
|
1878
|
+
}
|
|
1879
|
+
const value = target[key];
|
|
1880
|
+
if (typeof value === "function" && !Object.prototype.hasOwnProperty.call(target, key)) {
|
|
1881
|
+
return value;
|
|
1882
|
+
}
|
|
1883
|
+
const desc = Object.getOwnPropertyDescriptor(target, key);
|
|
1884
|
+
if (desc && desc.get) return desc.get.call(receiver);
|
|
1885
|
+
const ns = nodesOf(target);
|
|
1886
|
+
const holder = keyNode(ns, key, value);
|
|
1887
|
+
const current = holder();
|
|
1888
|
+
if (!isTrackable(current)) return current;
|
|
1889
|
+
if (ns.owner) claim2(current, holder, pathOf(ns.owner.name, key, ns.array), target);
|
|
1890
|
+
return box(current);
|
|
1891
|
+
},
|
|
1892
|
+
set() {
|
|
1893
|
+
return true;
|
|
1894
|
+
},
|
|
1895
|
+
deleteProperty(target, key) {
|
|
1896
|
+
if (key in target) writeKey(target, key, void 0);
|
|
1897
|
+
return true;
|
|
1898
|
+
},
|
|
1899
|
+
has(target, key) {
|
|
1900
|
+
if (key === $RAW || key === import_signal.$PROXY || key === $NODE2 || key === $HAS || key === $SELF || key === $TRACK)
|
|
1901
|
+
return true;
|
|
1902
|
+
keyNode(nodesOf(target), key, target[key])();
|
|
1903
|
+
return key in target;
|
|
1904
|
+
},
|
|
1905
|
+
ownKeys(target) {
|
|
1906
|
+
trackKeys(target);
|
|
1907
|
+
return Reflect.ownKeys(target);
|
|
1908
|
+
},
|
|
1909
|
+
getOwnPropertyDescriptor(target, key) {
|
|
1910
|
+
return Reflect.getOwnPropertyDescriptor(target, key);
|
|
1911
|
+
}
|
|
1912
|
+
};
|
|
1913
|
+
function rawValue(value, seen = /* @__PURE__ */ new Set()) {
|
|
1914
|
+
if (value == null || typeof value !== "object") return value;
|
|
1915
|
+
const raw = value[$RAW] ?? value;
|
|
1916
|
+
if (seen.has(raw) || !isTrackable(raw)) return raw;
|
|
1917
|
+
seen.add(raw);
|
|
1918
|
+
let changed = false;
|
|
1919
|
+
const swap = (v) => {
|
|
1920
|
+
const next = rawValue(v, seen);
|
|
1921
|
+
if (next !== v) changed = true;
|
|
1922
|
+
return next;
|
|
1923
|
+
};
|
|
1924
|
+
if (Array.isArray(raw)) {
|
|
1925
|
+
const out2 = raw.map(swap);
|
|
1926
|
+
return changed ? out2 : raw;
|
|
1927
|
+
}
|
|
1928
|
+
const out = {};
|
|
1929
|
+
for (const k of Object.keys(raw)) out[k] = swap(raw[k]);
|
|
1930
|
+
return changed ? out : raw;
|
|
1931
|
+
}
|
|
1932
|
+
function writeKey(state, key, rawInput) {
|
|
1933
|
+
const value = rawValue(rawInput);
|
|
1934
|
+
const prev = state[key];
|
|
1935
|
+
if (prev === value && (value !== void 0 || key in state)) return;
|
|
1936
|
+
const isArray = Array.isArray(state);
|
|
1937
|
+
const len = isArray ? state.length : 0;
|
|
1938
|
+
if (value === void 0) delete state[key];
|
|
1939
|
+
else state[key] = value;
|
|
1940
|
+
const ns = nodesOf(state);
|
|
1941
|
+
const node = ns.keys.get(key);
|
|
1942
|
+
if (node) pokeNode(node, value);
|
|
1943
|
+
forgetReplaced(prev, state);
|
|
1944
|
+
if (isArray && state.length !== len) {
|
|
1945
|
+
const lengthNode = ns.keys.get("length");
|
|
1946
|
+
if (lengthNode) pokeNode(lengthNode, state.length);
|
|
1947
|
+
}
|
|
1948
|
+
if (ns.all) ns.all.$(void 0);
|
|
1949
|
+
}
|
|
1950
|
+
function nextValue(value, prev) {
|
|
1951
|
+
return typeof value === "function" ? value(prev) : value;
|
|
1952
|
+
}
|
|
1953
|
+
function mergeInto(state, value) {
|
|
1954
|
+
for (const key of Object.keys(value)) {
|
|
1955
|
+
const next = value[key];
|
|
1956
|
+
const prev = state[key];
|
|
1957
|
+
if (next && typeof next === "object" && !Array.isArray(next) && prev && typeof prev === "object" && !Array.isArray(prev)) {
|
|
1958
|
+
mergeInto(prev, next);
|
|
1959
|
+
} else {
|
|
1960
|
+
writeKey(state, key, next);
|
|
1961
|
+
}
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
function parsePath(path) {
|
|
1965
|
+
const out = [];
|
|
1966
|
+
const normalized = path.replace(/\[([^\]]*)\]/g, ".$1");
|
|
1967
|
+
for (const part of normalized.split(".")) if (part.length) out.push(part);
|
|
1968
|
+
return out;
|
|
1969
|
+
}
|
|
1970
|
+
function applyAt(current, segs, value) {
|
|
1971
|
+
const last = segs.length - 1;
|
|
1972
|
+
for (let i = 0; i < last; i++) {
|
|
1973
|
+
const seg = segs[i];
|
|
1974
|
+
if (seg === "*") {
|
|
1975
|
+
const rest = segs.slice(i + 1);
|
|
1976
|
+
if (Array.isArray(current))
|
|
1977
|
+
for (let idx = 0; idx < current.length; idx++)
|
|
1978
|
+
applyAt(current[idx], rest, value);
|
|
1979
|
+
return;
|
|
1980
|
+
}
|
|
1981
|
+
let next = current[seg];
|
|
1982
|
+
if (next == null || typeof next !== "object") {
|
|
1983
|
+
next = /^\d+$/.test(segs[i + 1]) ? [] : {};
|
|
1984
|
+
writeKey(current, seg, next);
|
|
1985
|
+
}
|
|
1986
|
+
current = next;
|
|
1987
|
+
}
|
|
1988
|
+
const term = segs[last];
|
|
1989
|
+
if (term === "*") {
|
|
1990
|
+
if (Array.isArray(current))
|
|
1991
|
+
for (let idx = 0; idx < current.length; idx++)
|
|
1992
|
+
writeKey(current, idx, nextValue(value, current[idx]));
|
|
1993
|
+
return;
|
|
1994
|
+
}
|
|
1995
|
+
writeKey(current, term, nextValue(value, current[term]));
|
|
1996
|
+
}
|
|
1997
|
+
function applyPath(root2, path, value) {
|
|
1998
|
+
applyAt(root2, parsePath(path), value);
|
|
1999
|
+
}
|
|
2000
|
+
function isPathBatch(value) {
|
|
2001
|
+
return Array.isArray(value) && value.length > 0 && value.every((e) => Array.isArray(e) && e.length >= 2 && typeof e[0] === "string");
|
|
2002
|
+
}
|
|
2003
|
+
function replaceArray(target, next) {
|
|
2004
|
+
for (let i = target.length - 1; i >= next.length; i--) writeKey(target, String(i), void 0);
|
|
2005
|
+
if (target.length !== next.length) writeKey(target, "length", next.length);
|
|
2006
|
+
for (let i = 0; i < next.length; i++) writeKey(target, String(i), next[i]);
|
|
2007
|
+
}
|
|
2008
|
+
function applySet(root2, args) {
|
|
2009
|
+
const first = args[0];
|
|
2010
|
+
if (typeof first === "function" && args.length === 1) {
|
|
2011
|
+
const next = first(root2);
|
|
2012
|
+
if (next && next !== root2) mergeInto(root2, next);
|
|
2013
|
+
return;
|
|
2014
|
+
}
|
|
2015
|
+
if (Array.isArray(first) && args.length === 1) {
|
|
2016
|
+
if (isPathBatch(first)) {
|
|
2017
|
+
for (const entry of first) applyPath(root2, entry[0], entry[1]);
|
|
2018
|
+
return;
|
|
2019
|
+
}
|
|
2020
|
+
if (Array.isArray(root2)) {
|
|
2021
|
+
replaceArray(root2, first);
|
|
2022
|
+
return;
|
|
2023
|
+
}
|
|
2024
|
+
if (first.length === 0) return;
|
|
2025
|
+
throw new TypeError(
|
|
2026
|
+
"[fluixi] set() was given an array that is neither a batch of [path, value] pairs nor a replacement for an array root. Name the path you meant, as in set('items', [...])."
|
|
2027
|
+
);
|
|
2028
|
+
}
|
|
2029
|
+
if (first && typeof first === "object" && !Array.isArray(first) && args.length === 1) {
|
|
2030
|
+
mergeInto(root2, first);
|
|
2031
|
+
return;
|
|
2032
|
+
}
|
|
2033
|
+
if (Array.isArray(args[1]) && args.length >= 3) {
|
|
2034
|
+
applyPath(root2, `${first}.${args[1].join(".")}`, args[2]);
|
|
2035
|
+
return;
|
|
2036
|
+
}
|
|
2037
|
+
applyPath(root2, String(first), args[1]);
|
|
2038
|
+
}
|
|
2039
|
+
function clone(value) {
|
|
2040
|
+
if (value == null || typeof value !== "object") return value;
|
|
2041
|
+
if (Array.isArray(value)) return value.map(clone);
|
|
2042
|
+
const out = {};
|
|
2043
|
+
for (const key of Object.keys(value)) out[key] = clone(value[key]);
|
|
2044
|
+
return out;
|
|
2045
|
+
}
|
|
2046
|
+
function rawAt(root2, path) {
|
|
2047
|
+
let cur = root2;
|
|
2048
|
+
for (const seg of parsePath(path)) {
|
|
2049
|
+
if (cur == null) return void 0;
|
|
2050
|
+
cur = cur[seg];
|
|
2051
|
+
}
|
|
2052
|
+
return cur;
|
|
2053
|
+
}
|
|
2054
|
+
var Store = class {
|
|
2055
|
+
constructor(initialState, options = { immutable: true }) {
|
|
2056
|
+
this.options = options;
|
|
2057
|
+
this.root = initialState;
|
|
2058
|
+
this.set = ((...args) => (0, import_signal.batch)(() => applySet(this.root, args)));
|
|
2059
|
+
if (initialState && typeof initialState === "object") {
|
|
2060
|
+
OWNERS.set(initialState, { store: this, name: options.name ?? "store" });
|
|
2061
|
+
ROOTS.set(initialState, initialState);
|
|
2062
|
+
}
|
|
2063
|
+
reportReactiveNode({
|
|
2064
|
+
kind: "store",
|
|
2065
|
+
node: this,
|
|
2066
|
+
handle: () => this.root,
|
|
2067
|
+
name: options.name
|
|
2068
|
+
});
|
|
2069
|
+
}
|
|
2070
|
+
get state() {
|
|
2071
|
+
return box(this.root);
|
|
2072
|
+
}
|
|
2073
|
+
get proxy() {
|
|
2074
|
+
return box(this.root);
|
|
2075
|
+
}
|
|
2076
|
+
get accessor() {
|
|
2077
|
+
return (() => box(this.root));
|
|
2078
|
+
}
|
|
2079
|
+
unwrap() {
|
|
2080
|
+
return this.root;
|
|
2081
|
+
}
|
|
2082
|
+
getNode(key) {
|
|
2083
|
+
return this.root && this.root[key];
|
|
2084
|
+
}
|
|
2085
|
+
// Tracked read at a path. Empty path returns the whole (unwrapped) state.
|
|
2086
|
+
get(path) {
|
|
2087
|
+
if (path == null || path === "") return unwrap(this.state);
|
|
2088
|
+
let cur = this.state;
|
|
2089
|
+
for (const seg of parsePath(path)) {
|
|
2090
|
+
if (cur == null) return void 0;
|
|
2091
|
+
cur = cur[seg];
|
|
2092
|
+
}
|
|
2093
|
+
return unwrap(cur);
|
|
2094
|
+
}
|
|
2095
|
+
select(selector) {
|
|
2096
|
+
return (0, import_signal.createMemo)(() => selector(this.state));
|
|
2097
|
+
}
|
|
2098
|
+
subscribe(listener) {
|
|
2099
|
+
return (0, import_signal.createEffect)(() => listener(this.state));
|
|
2100
|
+
}
|
|
2101
|
+
watch(selector, effect3) {
|
|
2102
|
+
let prev;
|
|
2103
|
+
return (0, import_signal.createEffect)(() => {
|
|
2104
|
+
const cur = selector(this.state);
|
|
2105
|
+
if (!Object.is(cur, prev)) {
|
|
2106
|
+
effect3(cur, prev);
|
|
2107
|
+
prev = cur;
|
|
2108
|
+
}
|
|
2109
|
+
});
|
|
2110
|
+
}
|
|
2111
|
+
// Reactive accessor for a top-level key.
|
|
2112
|
+
reactive(key) {
|
|
2113
|
+
return (0, import_signal.createMemo)(() => this.state[key]);
|
|
2114
|
+
}
|
|
2115
|
+
produce(producer) {
|
|
2116
|
+
this.set(((prev) => {
|
|
2117
|
+
const draft = clone(prev);
|
|
2118
|
+
producer(draft);
|
|
2119
|
+
return draft;
|
|
2120
|
+
}));
|
|
2121
|
+
}
|
|
2122
|
+
reconcile(value, _options = {}) {
|
|
2123
|
+
this.set(value);
|
|
2124
|
+
}
|
|
2125
|
+
push(path, ...items) {
|
|
2126
|
+
const arr = rawAt(this.root, path);
|
|
2127
|
+
this.set(path, arr.concat(items));
|
|
2128
|
+
}
|
|
2129
|
+
pop(path) {
|
|
2130
|
+
const arr = rawAt(this.root, path).slice();
|
|
2131
|
+
const item = arr.pop();
|
|
2132
|
+
this.set(path, arr);
|
|
2133
|
+
return item;
|
|
2134
|
+
}
|
|
2135
|
+
shift(path) {
|
|
2136
|
+
const arr = rawAt(this.root, path).slice();
|
|
2137
|
+
const item = arr.shift();
|
|
2138
|
+
this.set(path, arr);
|
|
2139
|
+
return item;
|
|
2140
|
+
}
|
|
2141
|
+
splice(path, start, deleteCount, ...items) {
|
|
2142
|
+
const arr = rawAt(this.root, path).slice();
|
|
2143
|
+
const removed = arr.splice(start, deleteCount, ...items);
|
|
2144
|
+
this.set(path, arr);
|
|
2145
|
+
return removed;
|
|
2146
|
+
}
|
|
2147
|
+
insert(path, index, value) {
|
|
2148
|
+
const arr = rawAt(this.root, path).slice();
|
|
2149
|
+
arr.splice(index, 0, value);
|
|
2150
|
+
this.set(path, arr);
|
|
2151
|
+
}
|
|
2152
|
+
removeAt(path, index) {
|
|
2153
|
+
const arr = rawAt(this.root, path).slice();
|
|
2154
|
+
const removed = arr.splice(index, 1);
|
|
2155
|
+
this.set(path, arr);
|
|
2156
|
+
return removed;
|
|
2157
|
+
}
|
|
2158
|
+
/**
|
|
2159
|
+
* Swap a whole value, rather than merging into it.
|
|
2160
|
+
*
|
|
2161
|
+
* `set(partial)` merges per key, which is what you want for an object and never what
|
|
2162
|
+
* you want for an array. This replaces: `replace(value)` at the root, or
|
|
2163
|
+
* `replace(path, value)` further down.
|
|
2164
|
+
*
|
|
2165
|
+
* @example
|
|
2166
|
+
* ```ts
|
|
2167
|
+
* const [items, set] = createStore([1, 2, 3]);
|
|
2168
|
+
* set.replace([]); // now empty
|
|
2169
|
+
* set.replace(['a', 'b']); // now two entries
|
|
2170
|
+
* ```
|
|
2171
|
+
*/
|
|
2172
|
+
replace(pathOrValue, maybeValue) {
|
|
2173
|
+
if (arguments.length >= 2) {
|
|
2174
|
+
const target = rawAt(this.root, String(pathOrValue));
|
|
2175
|
+
const next = maybeValue;
|
|
2176
|
+
if (Array.isArray(target) && Array.isArray(next)) {
|
|
2177
|
+
replaceArray(target, next);
|
|
2178
|
+
return;
|
|
2179
|
+
}
|
|
2180
|
+
this.set(pathOrValue, next);
|
|
2181
|
+
return;
|
|
2182
|
+
}
|
|
2183
|
+
const root2 = this.root;
|
|
2184
|
+
if (Array.isArray(root2) && Array.isArray(pathOrValue)) {
|
|
2185
|
+
replaceArray(root2, pathOrValue);
|
|
2186
|
+
return;
|
|
2187
|
+
}
|
|
2188
|
+
this.set(pathOrValue);
|
|
2189
|
+
}
|
|
2190
|
+
/**
|
|
2191
|
+
* Empty an array, at the root or at a path.
|
|
2192
|
+
*
|
|
2193
|
+
* @example
|
|
2194
|
+
* ```ts
|
|
2195
|
+
* set.clear(); // the root array
|
|
2196
|
+
* set.clear('todos'); // a nested one
|
|
2197
|
+
* ```
|
|
2198
|
+
*/
|
|
2199
|
+
clear(path) {
|
|
2200
|
+
const target = path === void 0 ? this.root : rawAt(this.root, path);
|
|
2201
|
+
if (Array.isArray(target)) {
|
|
2202
|
+
replaceArray(target, []);
|
|
2203
|
+
return;
|
|
2204
|
+
}
|
|
2205
|
+
if (target && typeof target === "object") {
|
|
2206
|
+
for (const key of Object.keys(target)) writeKey(target, key, void 0);
|
|
2207
|
+
}
|
|
2208
|
+
}
|
|
2209
|
+
toObservable() {
|
|
2210
|
+
const [get] = (0, import_signal.createSignal)(this.state);
|
|
2211
|
+
return get.toObservable();
|
|
2212
|
+
}
|
|
2213
|
+
dispose() {
|
|
2214
|
+
}
|
|
2215
|
+
};
|
|
2216
|
+
var SETTER_METHODS = [
|
|
2217
|
+
"get",
|
|
2218
|
+
"select",
|
|
2219
|
+
"watch",
|
|
2220
|
+
"subscribe",
|
|
2221
|
+
"produce",
|
|
2222
|
+
"reconcile",
|
|
2223
|
+
"push",
|
|
2224
|
+
"pop",
|
|
2225
|
+
"shift",
|
|
2226
|
+
"splice",
|
|
2227
|
+
"insert",
|
|
2228
|
+
"removeAt",
|
|
2229
|
+
"replace",
|
|
2230
|
+
"clear",
|
|
2231
|
+
"unwrap",
|
|
2232
|
+
"toObservable"
|
|
2233
|
+
];
|
|
2234
|
+
function attachStoreMethods(target, store2) {
|
|
2235
|
+
for (const name of SETTER_METHODS) target[name] = store2[name].bind(store2);
|
|
2236
|
+
target.$ = store2.reactive.bind(store2);
|
|
2237
|
+
}
|
|
2238
|
+
function createStore(initialState, options = { immutable: true }) {
|
|
2239
|
+
const store2 = new Store(initialState, options);
|
|
2240
|
+
attachStoreMethods(store2.set, store2);
|
|
2241
|
+
return [store2.proxy, store2.set];
|
|
2242
|
+
}
|
|
2243
|
+
function createMutableStore(initialState, options = {}) {
|
|
2244
|
+
return new Store(initialState, { ...options, immutable: false });
|
|
2245
|
+
}
|
|
2246
|
+
function createComputedStore(fn, options = {}) {
|
|
2247
|
+
const store2 = new Store(fn(), options);
|
|
2248
|
+
(0, import_signal.createEffect)(() => store2.set(fn()));
|
|
2249
|
+
return store2;
|
|
2250
|
+
}
|
|
2251
|
+
function createStoreEffect(state, selector, effect3) {
|
|
2252
|
+
return (0, import_signal.createEffect)(() => effect3(selector(state)));
|
|
2253
|
+
}
|
|
2254
|
+
function createStoreMemo(store2, selector, options) {
|
|
2255
|
+
return (0, import_signal.createMemo)(() => selector(store2), void 0, options);
|
|
2256
|
+
}
|
|
2257
|
+
function wrap(value, options = {}) {
|
|
2258
|
+
const store2 = new Store(value, options);
|
|
2259
|
+
const accessor = (() => store2.proxy);
|
|
2260
|
+
attachStoreMethods(accessor, store2);
|
|
2261
|
+
return accessor;
|
|
2262
|
+
}
|
|
2263
|
+
function unwrap(item) {
|
|
2264
|
+
if (item == null || typeof item !== "object") return item;
|
|
2265
|
+
const raw = item[$RAW];
|
|
2266
|
+
return raw !== void 0 ? raw : item;
|
|
2267
|
+
}
|
|
2268
|
+
function untrackStore(store2) {
|
|
2269
|
+
return (0, import_signal.untrack)(() => unwrap(store2));
|
|
2270
|
+
}
|
|
2271
|
+
function isStore(store2) {
|
|
2272
|
+
return isStoreProxy(store2);
|
|
2273
|
+
}
|
|
2274
|
+
function getNode(store2) {
|
|
2275
|
+
return isStoreProxy(store2) ? store2[$NODE2] : null;
|
|
2276
|
+
}
|
|
2277
|
+
function getStoreNode(store2) {
|
|
2278
|
+
if (store2 && typeof store2 === "object" && $NODE2 in store2)
|
|
2279
|
+
return store2[$NODE2];
|
|
2280
|
+
return null;
|
|
2281
|
+
}
|
|
2282
|
+
function isStoreProxy(value) {
|
|
2283
|
+
return !!value && typeof value === "object" && (import_signal.$PROXY in value || value.__proxy === true);
|
|
2284
|
+
}
|
|
2285
|
+
function modifiable(value) {
|
|
2286
|
+
return value;
|
|
2287
|
+
}
|
|
2288
|
+
var StoreAPI = Object.freeze({
|
|
2289
|
+
createStore,
|
|
2290
|
+
createMutableStore,
|
|
2291
|
+
batch: import_signal.batch,
|
|
2292
|
+
unwrap,
|
|
2293
|
+
untrackStore
|
|
2294
|
+
});
|
|
2295
|
+
|
|
2296
|
+
// src/lib/store/utils.ts
|
|
2297
|
+
function clone2(value) {
|
|
2298
|
+
if (value == null || typeof value !== "object") return value;
|
|
2299
|
+
if (Array.isArray(value)) return value.map(clone2);
|
|
2300
|
+
const out = {};
|
|
2301
|
+
for (const key of Object.keys(value)) out[key] = clone2(value[key]);
|
|
2302
|
+
return out;
|
|
2303
|
+
}
|
|
2304
|
+
function produce(producer) {
|
|
2305
|
+
return (state) => {
|
|
2306
|
+
const draft = clone2(state);
|
|
2307
|
+
producer(draft);
|
|
2308
|
+
return draft;
|
|
2309
|
+
};
|
|
2310
|
+
}
|
|
2311
|
+
function reconcile(value, _options = {}) {
|
|
2312
|
+
return () => value;
|
|
2313
|
+
}
|
|
2314
|
+
|
|
2315
|
+
// src/lib/store/api.ts
|
|
2316
|
+
function store(initialState, options) {
|
|
2317
|
+
const [state, set] = createStore(initialState, options);
|
|
2318
|
+
return new Proxy(state, {
|
|
2319
|
+
get: (target, key) => key === "set" ? set : target[key],
|
|
2320
|
+
has: (target, key) => key === "set" || Reflect.has(target, key)
|
|
2321
|
+
});
|
|
2322
|
+
}
|
|
2323
|
+
|
|
2324
|
+
// src/lib/signal/utilities.ts
|
|
2325
|
+
function mapSignal(signal2, fn, options) {
|
|
2326
|
+
return createMemo(() => fn(signal2()), void 0, options);
|
|
2327
|
+
}
|
|
2328
|
+
function filterSignal(signal2, predicate, options) {
|
|
2329
|
+
return createMemo(() => signal2().filter(predicate), void 0, options);
|
|
2330
|
+
}
|
|
2331
|
+
function reduceSignal(signal2, reducer, initialValue, options) {
|
|
2332
|
+
return createMemo(
|
|
2333
|
+
() => signal2().reduce(reducer, initialValue),
|
|
2334
|
+
void 0,
|
|
2335
|
+
options
|
|
2336
|
+
);
|
|
2337
|
+
}
|
|
2338
|
+
function findSignal(signal2, predicate, options) {
|
|
2339
|
+
return createMemo(() => signal2().find(predicate), void 0, options);
|
|
2340
|
+
}
|
|
2341
|
+
function someSignal(signal2, predicate, options) {
|
|
2342
|
+
return createMemo(() => signal2().some(predicate), void 0, options);
|
|
2343
|
+
}
|
|
2344
|
+
function everySignal(signal2, predicate, options) {
|
|
2345
|
+
return createMemo(() => signal2().every(predicate), void 0, options);
|
|
2346
|
+
}
|
|
2347
|
+
function sortSignal(signal2, compareFn, options) {
|
|
2348
|
+
return createMemo(() => [...signal2()].sort(compareFn), void 0, options);
|
|
2349
|
+
}
|
|
2350
|
+
function distinctSignal(signal2, options) {
|
|
2351
|
+
return createMemo(() => [...new Set(signal2())], void 0, options);
|
|
2352
|
+
}
|
|
2353
|
+
function combineSignal(signals, combiner, options) {
|
|
2354
|
+
return createMemo(
|
|
2355
|
+
() => {
|
|
2356
|
+
const values = signals.map((s) => s());
|
|
2357
|
+
return combiner(values);
|
|
2358
|
+
},
|
|
2359
|
+
void 0,
|
|
2360
|
+
options
|
|
2361
|
+
);
|
|
2362
|
+
}
|
|
2363
|
+
function combineSignals(...signals) {
|
|
2364
|
+
return new Observable((observer) => {
|
|
2365
|
+
const getValues = () => signals.map((s) => typeof s === "function" ? s() : s.get());
|
|
2366
|
+
const disposers = signals.map((signal2) => {
|
|
2367
|
+
if (typeof signal2 === "function" && signal2.subscribe) {
|
|
2368
|
+
return signal2.subscribe(() => {
|
|
2369
|
+
observer.next(getValues());
|
|
2370
|
+
});
|
|
2371
|
+
} else if (typeof signal2 !== "function") {
|
|
2372
|
+
return signal2.subscribe(() => {
|
|
2373
|
+
observer.next(getValues());
|
|
2374
|
+
});
|
|
2375
|
+
}
|
|
2376
|
+
return createEffect(() => {
|
|
2377
|
+
observer.next(getValues());
|
|
2378
|
+
});
|
|
2379
|
+
});
|
|
2380
|
+
return () => {
|
|
2381
|
+
disposers.forEach((dispose) => {
|
|
2382
|
+
if (typeof dispose === "function") dispose();
|
|
2383
|
+
else if (dispose && typeof dispose.unsubscribe === "function") {
|
|
2384
|
+
dispose.unsubscribe();
|
|
2385
|
+
}
|
|
2386
|
+
});
|
|
2387
|
+
};
|
|
2388
|
+
});
|
|
2389
|
+
}
|
|
2390
|
+
function mergeSignal(primary, fallback, options) {
|
|
2391
|
+
return createMemo(() => primary() || fallback(), void 0, options);
|
|
2392
|
+
}
|
|
2393
|
+
function zipSignal(a, b, operator, options) {
|
|
2394
|
+
return createMemo(() => operator(a(), b()), void 0, options);
|
|
2395
|
+
}
|
|
2396
|
+
function selectSignal(signal2, selector, equals) {
|
|
2397
|
+
return createMemo(() => selector(signal2()), void 0, {
|
|
2398
|
+
equals,
|
|
2399
|
+
internal: true
|
|
2400
|
+
});
|
|
2401
|
+
}
|
|
2402
|
+
function pickSignal(signal2, keys, options) {
|
|
2403
|
+
return createMemo(
|
|
2404
|
+
() => {
|
|
2405
|
+
const obj = signal2();
|
|
2406
|
+
const result = {};
|
|
2407
|
+
for (const key of keys) {
|
|
2408
|
+
result[key] = obj[key];
|
|
2409
|
+
}
|
|
2410
|
+
return result;
|
|
2411
|
+
},
|
|
2412
|
+
void 0,
|
|
2413
|
+
options
|
|
2414
|
+
);
|
|
2415
|
+
}
|
|
2416
|
+
function omitSignal(signal2, keys, options) {
|
|
2417
|
+
return createMemo(
|
|
2418
|
+
() => {
|
|
2419
|
+
const obj = signal2();
|
|
2420
|
+
const result = { ...obj };
|
|
2421
|
+
for (const key of keys) {
|
|
2422
|
+
delete result[key];
|
|
2423
|
+
}
|
|
2424
|
+
return result;
|
|
2425
|
+
},
|
|
2426
|
+
void 0,
|
|
2427
|
+
options
|
|
2428
|
+
);
|
|
2429
|
+
}
|
|
2430
|
+
function whenSignal(condition, whenTrue, whenFalse, options) {
|
|
2431
|
+
return createMemo(
|
|
2432
|
+
() => condition() ? whenTrue() : whenFalse(),
|
|
2433
|
+
void 0,
|
|
2434
|
+
options
|
|
2435
|
+
);
|
|
2436
|
+
}
|
|
2437
|
+
function guardSignal(condition, accessor, options) {
|
|
2438
|
+
return createMemo(
|
|
2439
|
+
() => condition() ? accessor() : void 0,
|
|
2440
|
+
void 0,
|
|
2441
|
+
options
|
|
2442
|
+
);
|
|
2443
|
+
}
|
|
2444
|
+
function debounceSignal(signal2, delay, options) {
|
|
2445
|
+
const [debounced, setDebounced] = createSignal(signal2());
|
|
2446
|
+
let timeoutId;
|
|
2447
|
+
createMemo(() => {
|
|
2448
|
+
const value = signal2();
|
|
2449
|
+
clearTimeout(timeoutId);
|
|
2450
|
+
timeoutId = setTimeout(() => setDebounced(() => value), delay);
|
|
2451
|
+
});
|
|
2452
|
+
return debounced;
|
|
2453
|
+
}
|
|
2454
|
+
function throttleSignal(signal2, delay, options) {
|
|
2455
|
+
const [throttled, setThrottled] = createSignal(signal2());
|
|
2456
|
+
let lastUpdate = 0;
|
|
2457
|
+
let timeoutId;
|
|
2458
|
+
createMemo(() => {
|
|
2459
|
+
const value = signal2();
|
|
2460
|
+
const now = Date.now();
|
|
2461
|
+
if (now - lastUpdate >= delay) {
|
|
2462
|
+
lastUpdate = now;
|
|
2463
|
+
setThrottled(() => value);
|
|
2464
|
+
} else {
|
|
2465
|
+
clearTimeout(timeoutId);
|
|
2466
|
+
timeoutId = setTimeout(() => {
|
|
2467
|
+
lastUpdate = Date.now();
|
|
2468
|
+
setThrottled(() => value);
|
|
2469
|
+
}, delay - (now - lastUpdate));
|
|
2470
|
+
}
|
|
2471
|
+
});
|
|
2472
|
+
return throttled;
|
|
2473
|
+
}
|
|
2474
|
+
function readSignal(signal2) {
|
|
2475
|
+
let value = signal2;
|
|
2476
|
+
while (typeof value === "function") value = value();
|
|
2477
|
+
return value;
|
|
2478
|
+
}
|
|
2479
|
+
|
|
2480
|
+
// src/lib/signal/cached-resource.ts
|
|
2481
|
+
var ttlCache = /* @__PURE__ */ new Map();
|
|
2482
|
+
var inflight = /* @__PURE__ */ new Map();
|
|
2483
|
+
var _autoId = 0;
|
|
2484
|
+
var $SIGNAL4 = /* @__PURE__ */ Symbol.for("signal");
|
|
2485
|
+
var $RESOURCE2 = /* @__PURE__ */ Symbol.for("resource");
|
|
2486
|
+
function createCachedResource(sourceOrFetcher, fetcherOrOptions, opts = {}) {
|
|
2487
|
+
let sourceFn;
|
|
2488
|
+
let fetchFn;
|
|
2489
|
+
let options;
|
|
2490
|
+
if (typeof fetcherOrOptions === "function") {
|
|
2491
|
+
sourceFn = sourceOrFetcher;
|
|
2492
|
+
fetchFn = fetcherOrOptions;
|
|
2493
|
+
options = opts;
|
|
2494
|
+
} else {
|
|
2495
|
+
sourceFn = () => true;
|
|
2496
|
+
fetchFn = sourceOrFetcher;
|
|
2497
|
+
options = fetcherOrOptions ?? opts;
|
|
2498
|
+
}
|
|
2499
|
+
const {
|
|
2500
|
+
ttl = Infinity,
|
|
2501
|
+
name = `_auto_${_autoId++}`,
|
|
2502
|
+
staleWhileRevalidate = true
|
|
2503
|
+
} = options;
|
|
2504
|
+
const ns = name;
|
|
2505
|
+
const buildKey = (key) => `${ns}:${JSON.stringify(key)}`;
|
|
2506
|
+
const isFresh = (entry) => ttl === Infinity || Date.now() - entry.timestamp <= ttl;
|
|
2507
|
+
const [value, setValue] = createSignal(void 0, { equals: false });
|
|
2508
|
+
const [resourceState, setResourceState] = createSignal("unresolved", { equals: false });
|
|
2509
|
+
const [resourceError, setResourceError] = createSignal(void 0, { equals: false });
|
|
2510
|
+
const [pendingP, setPendingP] = createSignal(void 0, { equals: false });
|
|
2511
|
+
const [isStale, setIsStale] = createSignal(false);
|
|
2512
|
+
const [tick, setTick] = createSignal(0, { equals: false });
|
|
2513
|
+
const UNSET2 = /* @__PURE__ */ Symbol("unset");
|
|
2514
|
+
let prevKey = UNSET2;
|
|
2515
|
+
let flagRefetch = false;
|
|
2516
|
+
let flagInvalidate = false;
|
|
2517
|
+
function doFetch(key, ck, background, isCancelled) {
|
|
2518
|
+
if (inflight.has(ck)) {
|
|
2519
|
+
inflight.get(ck).then(
|
|
2520
|
+
(v) => {
|
|
2521
|
+
if (!isCancelled()) settle(v, background);
|
|
2522
|
+
},
|
|
2523
|
+
(e) => {
|
|
2524
|
+
if (!isCancelled() && !background) fail(e);
|
|
2525
|
+
}
|
|
2526
|
+
);
|
|
2527
|
+
if (!background) setPendingP(inflight.get(ck));
|
|
2528
|
+
return;
|
|
2529
|
+
}
|
|
2530
|
+
const promise = Promise.resolve(fetchFn(key)).then(
|
|
2531
|
+
(v) => {
|
|
2532
|
+
ttlCache.set(ck, { value: v, timestamp: Date.now() });
|
|
2533
|
+
inflight.delete(ck);
|
|
2534
|
+
return v;
|
|
2535
|
+
},
|
|
2536
|
+
(e) => {
|
|
2537
|
+
inflight.delete(ck);
|
|
2538
|
+
throw e;
|
|
2539
|
+
}
|
|
2540
|
+
);
|
|
2541
|
+
inflight.set(ck, promise);
|
|
2542
|
+
if (!background) {
|
|
2543
|
+
trackResourcePromise(promise);
|
|
2544
|
+
setPendingP(promise);
|
|
2545
|
+
}
|
|
2546
|
+
promise.then(
|
|
2547
|
+
(v) => {
|
|
2548
|
+
if (!isCancelled()) settle(v, background);
|
|
2549
|
+
},
|
|
2550
|
+
(e) => {
|
|
2551
|
+
if (!isCancelled() && !background) fail(e);
|
|
2552
|
+
}
|
|
2553
|
+
);
|
|
2554
|
+
}
|
|
2555
|
+
function settle(v, background) {
|
|
2556
|
+
batch2(() => {
|
|
2557
|
+
setValue(() => v);
|
|
2558
|
+
setResourceState("ready");
|
|
2559
|
+
setIsStale(false);
|
|
2560
|
+
setPendingP(void 0);
|
|
2561
|
+
setResourceError(void 0);
|
|
2562
|
+
});
|
|
2563
|
+
}
|
|
2564
|
+
function fail(e) {
|
|
2565
|
+
batch2(() => {
|
|
2566
|
+
setResourceError(e);
|
|
2567
|
+
setResourceState("errored");
|
|
2568
|
+
setPendingP(void 0);
|
|
2569
|
+
});
|
|
2570
|
+
}
|
|
2571
|
+
createEffect(() => {
|
|
2572
|
+
const key = sourceFn();
|
|
2573
|
+
tick();
|
|
2574
|
+
if (key === false || key === null || key === void 0) {
|
|
2575
|
+
prevKey = UNSET2;
|
|
2576
|
+
batch2(() => {
|
|
2577
|
+
setResourceState("unresolved");
|
|
2578
|
+
setPendingP(void 0);
|
|
2579
|
+
setResourceError(void 0);
|
|
2580
|
+
});
|
|
2581
|
+
return;
|
|
2582
|
+
}
|
|
2583
|
+
const doRefetch = flagRefetch;
|
|
2584
|
+
const doInvalidate = flagInvalidate;
|
|
2585
|
+
flagRefetch = false;
|
|
2586
|
+
flagInvalidate = false;
|
|
2587
|
+
const ck = buildKey(key);
|
|
2588
|
+
if (doInvalidate) ttlCache.delete(ck);
|
|
2589
|
+
const keyChanged = prevKey === UNSET2 || key !== prevKey;
|
|
2590
|
+
prevKey = key;
|
|
2591
|
+
let cancelled = false;
|
|
2592
|
+
onCleanup(() => {
|
|
2593
|
+
cancelled = true;
|
|
2594
|
+
});
|
|
2595
|
+
const cached = ttlCache.get(ck);
|
|
2596
|
+
if (cached && isFresh(cached) && !doRefetch && !doInvalidate) {
|
|
2597
|
+
const cur2 = untrack2(resourceState);
|
|
2598
|
+
if (cur2 !== "ready" || untrack2(value) !== cached.value) {
|
|
2599
|
+
batch2(() => {
|
|
2600
|
+
setValue(() => cached.value);
|
|
2601
|
+
setResourceState("ready");
|
|
2602
|
+
setIsStale(false);
|
|
2603
|
+
setResourceError(void 0);
|
|
2604
|
+
});
|
|
2605
|
+
}
|
|
2606
|
+
return;
|
|
2607
|
+
}
|
|
2608
|
+
if (cached && staleWhileRevalidate && !doInvalidate) {
|
|
2609
|
+
batch2(() => {
|
|
2610
|
+
setValue(() => cached.value);
|
|
2611
|
+
setResourceState("ready");
|
|
2612
|
+
setIsStale(true);
|
|
2613
|
+
setResourceError(void 0);
|
|
2614
|
+
setPendingP(void 0);
|
|
2615
|
+
});
|
|
2616
|
+
doFetch(key, ck, true, () => cancelled);
|
|
2617
|
+
return;
|
|
2618
|
+
}
|
|
2619
|
+
const cur = untrack2(resourceState);
|
|
2620
|
+
const isReload = cur === "ready" || cur === "refreshing";
|
|
2621
|
+
batch2(() => {
|
|
2622
|
+
setResourceState(isReload ? "refreshing" : "pending");
|
|
2623
|
+
setResourceError(void 0);
|
|
2624
|
+
setIsStale(false);
|
|
2625
|
+
});
|
|
2626
|
+
doFetch(key, ck, false, () => cancelled);
|
|
2627
|
+
});
|
|
2628
|
+
const resource2 = (() => {
|
|
2629
|
+
const e = resourceError();
|
|
2630
|
+
if (e) throw e;
|
|
2631
|
+
const s = resourceState();
|
|
2632
|
+
if (s === "pending") {
|
|
2633
|
+
const p = pendingP();
|
|
2634
|
+
if (p) throw p;
|
|
2635
|
+
}
|
|
2636
|
+
return value();
|
|
2637
|
+
});
|
|
2638
|
+
Object.defineProperty(resource2, $RESOURCE2, { value: true, enumerable: true });
|
|
2639
|
+
Object.defineProperty(resource2, $SIGNAL4, { value: true, enumerable: true });
|
|
2640
|
+
Object.defineProperties(resource2, {
|
|
2641
|
+
state: { get: resourceState },
|
|
2642
|
+
loading: { get: () => {
|
|
2643
|
+
const s = resourceState();
|
|
2644
|
+
return s === "pending" || s === "refreshing";
|
|
2645
|
+
} },
|
|
2646
|
+
error: { get: resourceError },
|
|
2647
|
+
latest: { get: value },
|
|
2648
|
+
stale: { get: isStale }
|
|
2649
|
+
});
|
|
2650
|
+
const refetch = () => {
|
|
2651
|
+
flagRefetch = true;
|
|
2652
|
+
setTick((v) => v + 1);
|
|
2653
|
+
};
|
|
2654
|
+
const invalidate = () => {
|
|
2655
|
+
const key = untrack2(sourceFn);
|
|
2656
|
+
if (key !== null && key !== void 0 && key !== false) {
|
|
2657
|
+
ttlCache.delete(buildKey(key));
|
|
2658
|
+
}
|
|
2659
|
+
flagInvalidate = true;
|
|
2660
|
+
setTick((v) => v + 1);
|
|
2661
|
+
};
|
|
2662
|
+
return [resource2, { mutate: setValue, refetch, invalidate }];
|
|
2663
|
+
}
|
|
2664
|
+
function clearCachedResourceNamespace(name) {
|
|
2665
|
+
const prefix = `${name}:`;
|
|
2666
|
+
for (const key of ttlCache.keys()) {
|
|
2667
|
+
if (key.startsWith(prefix)) ttlCache.delete(key);
|
|
2668
|
+
}
|
|
2669
|
+
}
|
|
2670
|
+
function clearAllCachedResources() {
|
|
2671
|
+
ttlCache.clear();
|
|
2672
|
+
inflight.clear();
|
|
2673
|
+
}
|