@lytjs/reactivity 5.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +327 -202
  2. package/dist/async.cjs +276 -0
  3. package/dist/async.cjs.map +1 -0
  4. package/dist/async.d.cts +32 -0
  5. package/dist/async.d.ts +32 -0
  6. package/dist/async.mjs +273 -0
  7. package/dist/async.mjs.map +1 -0
  8. package/dist/index.cjs +1607 -1
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.cts +226 -0
  11. package/dist/index.d.ts +226 -0
  12. package/dist/index.mjs +1543 -1
  13. package/dist/index.mjs.map +1 -0
  14. package/dist/ref-CwOCKoy2.d.cts +42 -0
  15. package/dist/ref-CwOCKoy2.d.ts +42 -0
  16. package/dist/scope.cjs +74 -0
  17. package/dist/scope.cjs.map +1 -0
  18. package/dist/scope.d.cts +71 -0
  19. package/dist/scope.d.ts +71 -0
  20. package/dist/scope.mjs +70 -0
  21. package/dist/scope.mjs.map +1 -0
  22. package/dist/signal-BOAyevht.d.cts +109 -0
  23. package/dist/signal-BOAyevht.d.ts +109 -0
  24. package/dist/signal-component.cjs +39 -0
  25. package/dist/signal-component.cjs.map +1 -0
  26. package/dist/signal-component.d.cts +31 -0
  27. package/dist/signal-component.d.ts +31 -0
  28. package/dist/signal-component.mjs +35 -0
  29. package/dist/signal-component.mjs.map +1 -0
  30. package/dist/signal.cjs +350 -1
  31. package/dist/signal.cjs.map +1 -0
  32. package/dist/signal.d.cts +1 -0
  33. package/dist/signal.d.ts +1 -0
  34. package/dist/signal.mjs +334 -1
  35. package/dist/signal.mjs.map +1 -0
  36. package/dist/types-CMYee6LB.d.cts +270 -0
  37. package/dist/types-CXeWWYm6.d.ts +270 -0
  38. package/package.json +54 -31
  39. package/dist/types/computed.d.ts +0 -70
  40. package/dist/types/computed.d.ts.map +0 -1
  41. package/dist/types/effect.d.ts +0 -157
  42. package/dist/types/effect.d.ts.map +0 -1
  43. package/dist/types/index.d.ts +0 -21
  44. package/dist/types/index.d.ts.map +0 -1
  45. package/dist/types/reactive.d.ts +0 -98
  46. package/dist/types/reactive.d.ts.map +0 -1
  47. package/dist/types/ref.d.ts +0 -128
  48. package/dist/types/ref.d.ts.map +0 -1
  49. package/dist/types/scheduler.d.ts +0 -44
  50. package/dist/types/scheduler.d.ts.map +0 -1
  51. package/dist/types/signal-component.d.ts +0 -45
  52. package/dist/types/signal-component.d.ts.map +0 -1
  53. package/dist/types/signal.d.ts +0 -87
  54. package/dist/types/signal.d.ts.map +0 -1
  55. package/dist/types/watch.d.ts +0 -125
  56. package/dist/types/watch.d.ts.map +0 -1
package/dist/index.mjs CHANGED
@@ -1 +1,1543 @@
1
- var u=null,g=[],ae=0,K=new WeakMap,b=class{constructor(t,n={}){this.active=!0;this.deps=new Set;this.fn=t,this.scheduler=n.scheduler,this.beforeRun=n.beforeRun,this.afterRun=n.afterRun,this.lazy=n.lazy,this.id=ae++}run(){var t,n;if(!this.active)return this.fn();if(g.includes(this))return this.fn();try{return(t=this.beforeRun)==null||t.call(this),g.push(this),u=this,Y(this),this.fn()}finally{(n=this.afterRun)==null||n.call(this),g.pop(),u=g[g.length-1]||null}}stop(){this.active&&(Y(this),this.onStop&&this.onStop(),this.active=!1)}},P=!0,J=[];function A(){J.push(P),P=!1}function M(){let e=J.pop();P=e===void 0?!0:e}function Y(e){let{deps:t}=e;for(let n of t)n.delete(e);t.clear()}function c(e,t){if(!P||!u)return;let n=K.get(e);n||(n=new Map,K.set(e,n));let r=n.get(t);r||(r=new Set,n.set(t,r)),r.has(u)||(r.add(u),u.deps.add(r))}function l(e,t,n,r){let o=K.get(e);if(!o)return;let i=new Set,s=f=>{if(f)for(let p of f)(p!==u||p.allowRecurse)&&i.add(p)};if(s(o.get(t)),(n==="add"||n==="delete")&&s(o.get(m)),n==="set"&&Array.isArray(e)){let f=o.get("length");f&&typeof t=="number"&&t<e.length&&s(f)}for(let f of i)f.scheduler?f.scheduler(f):f.run()}var m=Symbol("iterate");function ue(e,t={}){let n=new b(e,t);t.lazy||n.run();let r=n.run.bind(n);return r.effect=n,r.stop=()=>n.stop(),r}function le(e){var t;(t=e==null?void 0:e.effect)==null||t.stop()}var y=Symbol("readonly"),R=Symbol("raw"),x=Symbol("reactive"),$=Symbol("skip"),U=new WeakMap,q=new WeakMap,L=new WeakMap;function C(e){return e!==null&&typeof e=="object"}function Q(e,t){return!Object.is(e,t)}function V(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var F={};["includes","indexOf","lastIndexOf"].forEach(e=>{F[e]=function(...t){let n=h(this);for(let r=0;r<n.length;r++)c(n,String(r));return c(n,"length"),n[e](...t)}});["push","pop","shift","unshift","splice","sort","reverse"].forEach(e=>{F[e]=function(...t){A();let n=Array.prototype[e].apply(this,t);return M(),l(h(this),"length","set",h(this).length),n}});var pe={get(e,t,n){if(t===R)return e;if(t===x)return!0;if(Array.isArray(e)&&F.hasOwnProperty(t))return F[t];c(e,t);let r=Reflect.get(e,t,n);return t===y?e[y]===!0:!C(r)||e[$]?r:I(r)},set(e,t,n,r){let o=e[t],i=Array.isArray(e)&&B(t)?Number(t)<e.length:V(e,t),s=Reflect.set(e,t,n,r);return(e===(r==null?void 0:r[R])||e===h(r))&&(i?Q(n,o)&&l(e,t,"set",n):l(e,t,"add",n)),s},deleteProperty(e,t){let n=V(e,t),r=Reflect.deleteProperty(e,t);return r&&n&&l(e,t,"delete"),r},has(e,t){return c(e,t),Reflect.has(e,t)},ownKeys(e){return c(e,m),Reflect.ownKeys(e)}},de={get(e,t,n){if(t===R)return e;if(t===x||t===y)return!0;c(e,t);let r=Reflect.get(e,t,n);return C(r)?D(r):r},set(e,t,n,r){return!1},deleteProperty(e,t){return!1},has(e,t){return c(e,t),Reflect.has(e,t)},ownKeys(e){return c(e,m),Reflect.ownKeys(e)}},be={get(e,t,n){return t===R?e:t===x?!0:(c(e,t),Reflect.get(e,t,n))},set(e,t,n,r){let o=e[t],i=Array.isArray(e)&&B(t)?Number(t)<e.length:V(e,t),s=Reflect.set(e,t,n,r);return(e===(r==null?void 0:r[R])||e===h(r))&&(i?Q(n,o)&&l(e,t,"set",n):l(e,t,"add",n)),s},deleteProperty(e,t){let n=V(e,t),r=Reflect.deleteProperty(e,t);return r&&n&&l(e,t,"delete"),r},has(e,t){return c(e,t),Reflect.has(e,t)},ownKeys(e){return c(e,m),Reflect.ownKeys(e)}};function B(e){return typeof e=="string"&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e}function I(e,t={}){if(!C(e)||e[x])return e;if(e[y])return D(e);let n=U.get(e);if(n)return n;let r=new Proxy(e,pe);return U.set(e,r),r}function D(e){if(!C(e))return e;let t=q.get(e);if(t)return t;e[y]=!0;let n=new Proxy(e,de);return q.set(e,n),n}function ye(e){if(!C(e))return e;let t=L.get(e);if(t)return t;let n=new Proxy(e,be);return L.set(e,n),n}function h(e){let t=e&&e[R];return t?h(t):e}function E(e){return X(e)?E(e[R]):!!(e&&e[x])}function X(e){return!!(e&&e[y])}function Re(e){return e[y]=!0,e}function Te(e){return e[$]=!0,e}import{isObject as he}from"@lytjs/common";var j=Symbol("ref"),Z=Symbol("shallowRef"),H=new WeakMap;function me(e){return H.get(e)||e}function xe(e){if(T(e))return e;let t={_value:ee(e),_rawValue:e,__v_isRef:!0,[j]:!0},n=new Proxy(t,Se);return H.set(n,t),n}function ee(e){return he(e)?I(e):e}var Se={get(e,t,n){return t==="value"?(c(e,"value"),e._value):t===j||t==="__v_isRef"?!0:t==="_rawValue"?e._rawValue:Reflect.get(e,t,n)},set(e,t,n,r){if(t==="value"){let o=e._rawValue;return Object.is(o,n)||(e._rawValue=n,e._value=ee(n),l(e,"value","set",n)),!0}return Reflect.set(e,t,n,r)}};function ve(e){if(T(e))return e;let t={_value:e,_rawValue:e,__v_isRef:!0,__v_isShallow:!0,[j]:!0,[Z]:!0},n=new Proxy(t,we);return H.set(n,t),n}var we={get(e,t,n){return t==="value"?(c(e,"value"),e._value):t===j||t==="__v_isRef"||t==="__v_isShallow"?!0:t==="_rawValue"?e._rawValue:Reflect.get(e,t,n)},set(e,t,n,r){if(t==="value"){let o=e._rawValue;return Object.is(o,n)||(e._rawValue=n,e._value=n,l(e,"value","set",n)),!0}return Reflect.set(e,t,n,r)}};function T(e){return!!(e&&e.__v_isRef===!0)}function _e(e){return T(e)?e.value:e}function te(e,t){let n=e[t];return T(n)?n:new Proxy({_obj:e,_key:t,__v_isRef:!0},{get(r,o,i){return o==="value"?r._obj[r._key]:o==="__v_isRef"?!0:Reflect.get(r,o,i)},set(r,o,i,s){return o==="value"?(r._obj[r._key]=i,!0):Reflect.set(r,o,i,s)}})}function ge(e){let t={};for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=te(e,n));return t}function Ce(e){let t=me(e);l(t,"value","set",t._rawValue)}var z=class{constructor(t,n){this._dirty=!0;this.__v_isRef=!0;this.deps=new Set;this._setter=n,this._effect=new b(t,{scheduler:()=>{this._dirty||(this._dirty=!0,this.triggerDep())},lazy:!0}),this._value=void 0}get value(){return c(this,"value"),u&&!this.deps.has(u)&&(this.deps.add(u),u.deps.add(this.deps)),this._dirty&&(this._value=this._effect.run(),this._dirty=!1),this._value}set value(t){this._setter&&this._setter(t)}triggerDep(){for(let t of this.deps)t.scheduler?t.scheduler(t):t.run()}};function Ee(e){let t,n;return typeof e=="function"?(t=e,n=void 0):(t=e.get,n=e.set),new z(t,n)}import{queueJob as re,nextTick as je,isObject as oe}from"@lytjs/common";function O(e,t=1/0,n){if(!oe(e)||t<=0||(n||(n=new Set),n.has(e)))return e;if(n.add(e),T(e))O(e.value,t-1,n);else if(Array.isArray(e))for(let r=0;r<e.length;r++)O(e[r],t-1,n);else for(let r of Object.keys(e))O(e[r],t-1,n);return e}function ne(e){return T(e)?()=>e.value:E(e)?()=>O(e):typeof e=="function"?e:()=>O(e)}function Oe(e,t,n={}){let r,o=!1;if(Array.isArray(e)){o=!0;let a=e.map(_=>ne(_));r=()=>a.map(_=>_())}else r=ne(e);E(e)&&n.deep!==!1&&(n.deep=!0);let i=o?[]:void 0,s,f=a=>{s=a},p=()=>{s&&(s(),s=void 0);let a=w.run();(o?a.some((_,ce)=>!Object.is(_,i[ce])):!Object.is(a,i)||n.deep&&oe(a))&&(t(a,o?[...i]:i,f),i=o?[...a]:a)},w=new b(r,{lazy:!0,scheduler:()=>{n.flush==="sync"?p():re(p)}});return n.immediate?p():i=w.run(),()=>{w.stop()}}function We(e,t={}){let n,r=()=>{n&&(n(),n=void 0),e(i=>{n=i})},o=new b(r,{scheduler:()=>{t.flush==="sync"?r():re(r)}});return o.run(),()=>{o.stop(),n&&(n(),n=void 0)}}import{queueJob as vt,queuePostFlushCb as wt,hasPendingJob as _t,clearQueue as gt}from"@lytjs/common";import{LytError as ke}from"@lytjs/common";var d=null,W=!1,k=0,S=new Set,G=!1;function N(e){let t=e,n=new Set,r=function(){return d&&!W&&n.add(d),t};return r.set=function(o){Object.is(t,o)||(t=o,se(n))},r.update=function(o){r.set(o(t))},r._subscribe=function(o){n.add(o)},r._unsubscribe=function(o){n.delete(o)},r.dispose=function(){n.clear()},r}function Pe(e){let t,n=!0,r=!1,o=new Set,i=new Set,s=function(){if(d&&!W&&i.add(d),n){if(r)throw new ke("LYT_REACTIVITY_CIRCULAR_DEPENDENCY","computed \u5728\u5176\u81EA\u8EAB\u7684\u8BA1\u7B97\u56FE\u4E2D");r=!0;for(let a of o)a._unsubscribe(s);o.clear();let w=d;d=s;try{t=e()}finally{d=w,r=!1}n=!1}return t},f={_dirty:!1,notify(){n=!0,se(i)}};return s.notify=f.notify.bind(f),s._dirty=!1,s._subscribe=function(p){i.add(p)},s._unsubscribe=function(p){i.delete(p)},s}function Ve(e){let t=null,n=!1,r=new Set,o=()=>{if(n)return;t&&(t(),t=null);for(let f of r)f._unsubscribe(i);r.clear();let s=d;d=i;try{e(f=>{t=f})}finally{d=s}},i={_dirty:!1,notify(){k>0?S.add(i):o()}};return o(),()=>{n=!0,t&&(t(),t=null);for(let s of r)s._unsubscribe(i);r.clear(),S.delete(i)}}function Fe(e){k++;try{e()}finally{k--,k===0&&ie()}}function ie(){if(!G){G=!0;try{let e=new Set(S);S.clear();for(let t of e)t.notify();S.size>0&&ie()}finally{G=!1}}}function Ie(e){let t=W;W=!0;try{return e()}finally{W=t}}function se(e){if(k>0)for(let t of e)S.add(t);else for(let t of e)t.notify()}var v=[];function fe(){return v.length>0?v[v.length-1]:null}function Ke(e){return e()}function Ae(e){let t=N(e),n=o=>t.set(o),r=fe();return[t,n]}function Me(){let e={_cleanupFns:[]};return v.push(e),()=>{for(let n of e._cleanupFns)n();e._cleanupFns.length=0;let t=v.indexOf(e);t!==-1&&v.splice(t,1)}}function De(e){let t=fe();t&&t._cleanupFns.push(e)}export{m as ITERATE_KEY,b as ReactiveEffect,u as activeEffect,Fe as batch,gt as clearQueue,Ee as computed,Pe as computedSignal,ue as effect,Me as enterSignalComponentContext,_t as hasPendingJob,E as isReactive,X as isReadonly,T as isRef,Re as markReadOnly,Te as markSkip,je as nextTick,De as onSignalCleanup,A as pauseTracking,vt as queueJob,wt as queuePostFlushCb,R as rawSymbol,I as reactive,x as reactiveFlag,D as readonly,y as readonlyFlag,xe as ref,j as refSymbol,M as resetTracking,ye as shallowReactive,ve as shallowRef,Z as shallowRefSymbol,N as signal,Ve as signalEffect,le as stop,h as toRaw,te as toRef,ge as toRefs,c as track,l as trigger,Ce as triggerRef,_e as unref,Ie as untrack,Ke as useSignal,Ae as useSignalState,Oe as watch,We as watchEffect};
1
+ import { isSymbol, isFunction, isArray, isObject, hasChanged, NOOP, isMap, isSet, hasOwn } from '@lytjs/common-is';
2
+ import { error } from '@lytjs/common-error';
3
+ import { unsafeCast } from '@lytjs/common-assertions';
4
+ import { REACTIVITY_MAX_TRIGGER_DEPTH } from '@lytjs/common-constants';
5
+ import { queuePostFlushCb, queuePreFlushCb } from '@lytjs/common-scheduler';
6
+
7
+ // src/reactive.ts
8
+ var RefSymbol = /* @__PURE__ */ Symbol(void 0);
9
+ var ShallowRefSymbol = /* @__PURE__ */ Symbol(void 0);
10
+ var ComputedRefSymbol = /* @__PURE__ */ Symbol(void 0);
11
+ var ReactiveSymbol = /* @__PURE__ */ Symbol(void 0);
12
+ var ReadonlySymbol = /* @__PURE__ */ Symbol(void 0);
13
+ var SignalSymbol = /* @__PURE__ */ Symbol(void 0);
14
+ var ComputedSignalSymbol = /* @__PURE__ */ Symbol(void 0);
15
+ var ReactiveFlags = {
16
+ IS_REACTIVE: "__v_isReactive",
17
+ IS_READONLY: "__v_isReadonly",
18
+ IS_SHALLOW: "__v_isShallow",
19
+ IS_REF: "__v_isRef",
20
+ RAW: "__v_raw",
21
+ SKIP: "__v_skip"
22
+ };
23
+ var TrackOpTypes = {
24
+ GET: "get",
25
+ HAS: "has",
26
+ ITERATE: "iterate"
27
+ };
28
+ var TriggerOpTypes = {
29
+ SET: "set",
30
+ ADD: "add",
31
+ DELETE: "delete",
32
+ CLEAR: "clear"
33
+ };
34
+ var ITERATE_KEY = /* @__PURE__ */ Symbol("iterate");
35
+ var activeSubscriber = null;
36
+ var isUntracked = false;
37
+ var trackDependency = null;
38
+ var batchDepth = 0;
39
+ var MAX_BATCH_DEPTH = 100;
40
+ var pendingNotifications = /* @__PURE__ */ new Set();
41
+ var pendingTriggerOps = /* @__PURE__ */ new Map();
42
+ var isNotifying = false;
43
+ function signal(initialValue) {
44
+ let value = initialValue;
45
+ const subscribers = /* @__PURE__ */ new Set();
46
+ let disposed = false;
47
+ const store = {};
48
+ const SIGNAL_KEY = /* @__PURE__ */ Symbol("signal_value");
49
+ store[SIGNAL_KEY] = initialValue;
50
+ const signalFn = function signalFn2() {
51
+ const currentSubscriber = activeSubscriber;
52
+ if (currentSubscriber && !isUntracked && !disposed) {
53
+ if (!subscribers.has(currentSubscriber)) {
54
+ subscribers.add(currentSubscriber);
55
+ if (trackDependency) {
56
+ trackDependency(signalFn2, () => {
57
+ subscribers.delete(currentSubscriber);
58
+ });
59
+ }
60
+ }
61
+ }
62
+ if (!disposed) {
63
+ track(store, TrackOpTypes.GET, SIGNAL_KEY);
64
+ }
65
+ return value;
66
+ };
67
+ Object.defineProperty(signalFn, SignalSymbol, { value: true });
68
+ signalFn.set = (newValue) => {
69
+ if (disposed) return;
70
+ if (Object.is(newValue, value)) return;
71
+ value = newValue;
72
+ store[SIGNAL_KEY] = newValue;
73
+ notifySubscribers(subscribers, store, SIGNAL_KEY, newValue);
74
+ };
75
+ signalFn.update = (updater) => {
76
+ if (disposed) return;
77
+ const newValue = updater(value);
78
+ if (Object.is(newValue, value)) return;
79
+ value = newValue;
80
+ store[SIGNAL_KEY] = newValue;
81
+ notifySubscribers(subscribers, store, SIGNAL_KEY, newValue);
82
+ };
83
+ signalFn.dispose = () => {
84
+ disposed = true;
85
+ subscribers.clear();
86
+ };
87
+ signalFn.cleanup = () => {
88
+ subscribers.clear();
89
+ trigger(store, TriggerOpTypes.SET, SIGNAL_KEY);
90
+ };
91
+ signalFn._subscribe = (subscriber) => {
92
+ if (disposed) return () => {
93
+ };
94
+ subscribers.add(subscriber);
95
+ return () => subscribers.delete(subscriber);
96
+ };
97
+ return signalFn;
98
+ }
99
+ function createComputedSignalInternal(getter, typeName) {
100
+ let value;
101
+ let dirty = true;
102
+ let isComputing = false;
103
+ const dependencies = /* @__PURE__ */ new Map();
104
+ const subscribers = /* @__PURE__ */ new Set();
105
+ let disposed = false;
106
+ const store = {};
107
+ const COMPUTED_SIGNAL_KEY = /* @__PURE__ */ Symbol("computed_signal_value");
108
+ const invalidate = () => {
109
+ if (disposed) return;
110
+ dirty = true;
111
+ trigger(store, TriggerOpTypes.SET, COMPUTED_SIGNAL_KEY);
112
+ const subs = Array.from(subscribers);
113
+ for (const sub of subs) {
114
+ sub();
115
+ }
116
+ };
117
+ const computedFn = function computedFn2() {
118
+ if (disposed) return value;
119
+ track(store, TrackOpTypes.GET, COMPUTED_SIGNAL_KEY);
120
+ if (activeSubscriber && !isUntracked) {
121
+ subscribers.add(activeSubscriber);
122
+ }
123
+ if (dirty) {
124
+ if (isComputing) {
125
+ throw new Error(`[lytjs/signal] Circular dependency detected in ${typeName}.`);
126
+ }
127
+ isComputing = true;
128
+ try {
129
+ for (const unsubscribe of dependencies.values()) {
130
+ unsubscribe();
131
+ }
132
+ dependencies.clear();
133
+ const prevSubscriber = activeSubscriber;
134
+ const prevTrackDependency = trackDependency;
135
+ activeSubscriber = invalidate;
136
+ trackDependency = (dep, unsubscribe) => {
137
+ dependencies.set(dep, unsubscribe);
138
+ };
139
+ try {
140
+ value = getter();
141
+ dirty = false;
142
+ } finally {
143
+ activeSubscriber = prevSubscriber;
144
+ trackDependency = prevTrackDependency;
145
+ }
146
+ } finally {
147
+ isComputing = false;
148
+ }
149
+ }
150
+ return value;
151
+ };
152
+ Object.defineProperty(computedFn, ComputedSignalSymbol, { value: true });
153
+ const dispose = () => {
154
+ disposed = true;
155
+ for (const unsubscribe of dependencies.values()) {
156
+ unsubscribe();
157
+ }
158
+ dependencies.clear();
159
+ subscribers.clear();
160
+ };
161
+ return { computedFn, invalidate, dispose };
162
+ }
163
+ function computed(fn) {
164
+ const { computedFn, dispose } = createComputedSignalInternal(fn, "computed signal");
165
+ computedFn.dispose = dispose;
166
+ computedFn.stop = dispose;
167
+ return computedFn;
168
+ }
169
+ function writableComputedSignal(getter, setter) {
170
+ const { computedFn, dispose } = createComputedSignalInternal(getter, "writable computed signal");
171
+ computedFn.set = (newValue) => {
172
+ setter(newValue);
173
+ };
174
+ computedFn.dispose = dispose;
175
+ computedFn.stop = dispose;
176
+ return computedFn;
177
+ }
178
+ function signalBatch(fn) {
179
+ if (batchDepth >= MAX_BATCH_DEPTH) {
180
+ fn();
181
+ return;
182
+ }
183
+ batchDepth++;
184
+ try {
185
+ fn();
186
+ } finally {
187
+ batchDepth--;
188
+ if (batchDepth === 0) {
189
+ flushPendingNotifications();
190
+ }
191
+ }
192
+ }
193
+ function signalUntrack(fn) {
194
+ const prevIsUntracked = isUntracked;
195
+ isUntracked = true;
196
+ try {
197
+ return fn();
198
+ } finally {
199
+ isUntracked = prevIsUntracked;
200
+ }
201
+ }
202
+ function _isSignalUntracked() {
203
+ return isUntracked;
204
+ }
205
+ function notifySubscribers(subscribers, store, signalKey, newValue) {
206
+ if (batchDepth > 0 || isNotifying) {
207
+ const it2 = subscribers.values();
208
+ let next2 = it2.next();
209
+ while (!next2.done) {
210
+ pendingNotifications.add(next2.value);
211
+ next2 = it2.next();
212
+ }
213
+ if (store && signalKey !== void 0) {
214
+ pendingTriggerOps.set(signalKey, { store, signalKey, newValue });
215
+ }
216
+ return;
217
+ }
218
+ const it = subscribers.values();
219
+ let next = it.next();
220
+ while (!next.done) {
221
+ next.value();
222
+ next = it.next();
223
+ }
224
+ if (store && signalKey !== void 0) {
225
+ trigger(store, TriggerOpTypes.SET, signalKey);
226
+ }
227
+ }
228
+ function flushPendingNotifications() {
229
+ if (isNotifying) return;
230
+ isNotifying = true;
231
+ try {
232
+ let iterations = 0;
233
+ while ((pendingNotifications.size > 0 || pendingTriggerOps.size > 0) && iterations < REACTIVITY_MAX_TRIGGER_DEPTH) {
234
+ const notifications = new Set(pendingNotifications);
235
+ const triggers = new Set(pendingTriggerOps.values());
236
+ pendingNotifications.clear();
237
+ pendingTriggerOps.clear();
238
+ const notifIt = notifications.values();
239
+ let notifNext = notifIt.next();
240
+ while (!notifNext.done) {
241
+ notifNext.value();
242
+ notifNext = notifIt.next();
243
+ }
244
+ const triggerIt = triggers.values();
245
+ let triggerNext = triggerIt.next();
246
+ while (!triggerNext.done) {
247
+ const { store, signalKey, newValue } = triggerNext.value;
248
+ trigger(store, TriggerOpTypes.SET, signalKey, newValue);
249
+ triggerNext = triggerIt.next();
250
+ }
251
+ iterations++;
252
+ }
253
+ } finally {
254
+ isNotifying = false;
255
+ }
256
+ }
257
+ function computedSignal(fn) {
258
+ return computed(fn);
259
+ }
260
+ function valueOf(sig) {
261
+ return sig();
262
+ }
263
+ function set(sig, newValue) {
264
+ if (isWritableSignal(sig)) {
265
+ sig.set(newValue);
266
+ }
267
+ }
268
+ function isWritableSignal(sig) {
269
+ return typeof sig === "function" && "set" in sig;
270
+ }
271
+ function update(sig, updater) {
272
+ sig.update(updater);
273
+ }
274
+ function readonlySignal(sig) {
275
+ const readonlyFn = function readonlyFn2() {
276
+ return sig();
277
+ };
278
+ Object.defineProperty(readonlyFn, SignalSymbol, { value: true });
279
+ return readonlyFn;
280
+ }
281
+ var activeEffect;
282
+ var _trackDepth = 0;
283
+ var targetMap = /* @__PURE__ */ new WeakMap();
284
+ var shouldTrack = true;
285
+ var trackStack = [];
286
+ var isFirstRenderPass = false;
287
+ var skippedTrackingCount = 0;
288
+ function withFirstRenderOptimization(fn) {
289
+ const wasFirstRender = isFirstRenderPass;
290
+ isFirstRenderPass = true;
291
+ try {
292
+ return fn();
293
+ } finally {
294
+ if (!wasFirstRender) {
295
+ isFirstRenderPass = false;
296
+ }
297
+ }
298
+ }
299
+ function shouldSkipTracking() {
300
+ return isFirstRenderPass;
301
+ }
302
+ function getSkippedTrackingCount() {
303
+ return skippedTrackingCount;
304
+ }
305
+ function resetSkippedTrackingCount() {
306
+ skippedTrackingCount = 0;
307
+ }
308
+ function getActiveEffect() {
309
+ return activeEffect;
310
+ }
311
+ function getShouldTrack() {
312
+ return shouldTrack;
313
+ }
314
+ var createDep = () => {
315
+ return /* @__PURE__ */ new Set();
316
+ };
317
+ var triggerDepth = 0;
318
+ function track(target, _type, key) {
319
+ if (!shouldTrack || activeEffect === void 0) return;
320
+ if (_isSignalUntracked()) return;
321
+ let depsMap = targetMap.get(target);
322
+ if (!depsMap) {
323
+ targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
324
+ }
325
+ let dep = depsMap.get(key);
326
+ if (!dep) {
327
+ depsMap.set(key, dep = createDep());
328
+ }
329
+ trackEffect(dep);
330
+ }
331
+ function trackEffect(dep) {
332
+ if (shouldSkipTracking()) {
333
+ skippedTrackingCount++;
334
+ return;
335
+ }
336
+ if (activeEffect && !dep.has(activeEffect)) {
337
+ dep.add(activeEffect);
338
+ activeEffect.deps.push(dep);
339
+ }
340
+ }
341
+ function trigger(target, type, key, _newValue, _oldValue) {
342
+ const depsMap = targetMap.get(target);
343
+ if (!depsMap) return;
344
+ const deps = [];
345
+ if (type === "clear") {
346
+ deps.push(...depsMap.values());
347
+ } else {
348
+ if (key !== void 0) {
349
+ deps.push(depsMap.get(key));
350
+ }
351
+ if (type === "add") {
352
+ if (Array.isArray(target)) {
353
+ deps.push(depsMap.get("length"));
354
+ } else {
355
+ deps.push(depsMap.get(ITERATE_KEY));
356
+ }
357
+ } else if (type === "delete") {
358
+ if (!Array.isArray(target)) {
359
+ deps.push(depsMap.get(ITERATE_KEY));
360
+ }
361
+ } else if (type === "set") {
362
+ if (Array.isArray(target) && isIntegerKey(key)) {
363
+ deps.push(depsMap.get("length"));
364
+ }
365
+ }
366
+ }
367
+ const effects = [];
368
+ for (const dep of deps) {
369
+ if (dep) {
370
+ for (const effect2 of dep) {
371
+ effects.push(effect2);
372
+ }
373
+ }
374
+ }
375
+ triggerEffects([...new Set(effects)]);
376
+ }
377
+ function triggerEffects(effects) {
378
+ if (triggerDepth > REACTIVITY_MAX_TRIGGER_DEPTH) {
379
+ return;
380
+ }
381
+ triggerDepth++;
382
+ try {
383
+ for (const effect2 of effects) {
384
+ if (effect2.computed) {
385
+ triggerEffect(effect2);
386
+ }
387
+ }
388
+ for (const effect2 of effects) {
389
+ if (!effect2.computed) {
390
+ triggerEffect(effect2);
391
+ }
392
+ }
393
+ } finally {
394
+ triggerDepth--;
395
+ }
396
+ }
397
+ function triggerEffect(effect2) {
398
+ if (effect2 !== activeEffect || effect2.allowRecurse) {
399
+ if (effect2.scheduler) {
400
+ effect2.scheduler();
401
+ } else {
402
+ effect2.run();
403
+ }
404
+ }
405
+ }
406
+ var ReactiveEffect = class {
407
+ constructor(fn, scheduler) {
408
+ this.fn = fn;
409
+ this.scheduler = scheduler;
410
+ this.active = true;
411
+ this.deps = [];
412
+ this.parent = void 0;
413
+ // 运行前清理(onEffectCleanup 注册的)
414
+ this._cleanups = [];
415
+ }
416
+ run() {
417
+ if (!this.active) {
418
+ return void 0;
419
+ }
420
+ if (this._cleanups.length > 0) {
421
+ for (let i = 0; i < this._cleanups.length; i++) {
422
+ this._cleanups[i]();
423
+ }
424
+ this._cleanups.length = 0;
425
+ }
426
+ const prevShouldTrack = shouldTrack;
427
+ try {
428
+ this.parent = activeEffect;
429
+ activeEffect = this;
430
+ shouldTrack = true;
431
+ _trackDepth++;
432
+ return this.fn();
433
+ } catch (error3) {
434
+ if (this.onError) {
435
+ this.onError(error3);
436
+ return void 0;
437
+ }
438
+ throw error3;
439
+ } finally {
440
+ _trackDepth--;
441
+ activeEffect = this.parent;
442
+ shouldTrack = prevShouldTrack;
443
+ this.parent = void 0;
444
+ }
445
+ }
446
+ stop() {
447
+ if (this.active) {
448
+ cleanupEffect(this);
449
+ if (this._cleanups.length > 0) {
450
+ for (let i = 0; i < this._cleanups.length; i++) {
451
+ this._cleanups[i]();
452
+ }
453
+ this._cleanups.length = 0;
454
+ }
455
+ if (this.onStop) {
456
+ this.onStop();
457
+ }
458
+ this.active = false;
459
+ this.scheduler = void 0;
460
+ }
461
+ }
462
+ };
463
+ function cleanupEffect(effect2) {
464
+ const { deps } = effect2;
465
+ for (let i = 0; i < deps.length; i++) {
466
+ deps[i].delete(effect2);
467
+ }
468
+ deps.length = 0;
469
+ }
470
+ function effect(fn, options) {
471
+ const _effect = new ReactiveEffect(fn);
472
+ if (options) {
473
+ _effect.scheduler = options.scheduler;
474
+ _effect.allowRecurse = options.allowRecurse;
475
+ _effect.onStop = options.onStop;
476
+ _effect.onTrack = options.onTrack;
477
+ _effect.onTrigger = options.onTrigger;
478
+ _effect.onError = options.onError;
479
+ }
480
+ if (!options || !options.lazy) {
481
+ _effect.run();
482
+ }
483
+ const runner = _effect.run.bind(_effect);
484
+ runner.effect = _effect;
485
+ return runner;
486
+ }
487
+ function stop(runner) {
488
+ runner.effect.stop();
489
+ }
490
+ function pauseTracking() {
491
+ trackStack.push(shouldTrack);
492
+ shouldTrack = false;
493
+ }
494
+ function enableTracking() {
495
+ trackStack.push(shouldTrack);
496
+ shouldTrack = true;
497
+ }
498
+ function resetTracking() {
499
+ const last = trackStack.pop();
500
+ shouldTrack = last === void 0 ? true : last;
501
+ }
502
+ function batch(fn) {
503
+ const stackLength = trackStack.length;
504
+ pauseTracking();
505
+ try {
506
+ fn();
507
+ } finally {
508
+ while (trackStack.length > stackLength) {
509
+ trackStack.pop();
510
+ }
511
+ shouldTrack = trackStack.length > 0 ? trackStack[trackStack.length - 1] : true;
512
+ }
513
+ }
514
+ function batchAsync(fn) {
515
+ const stackLength = trackStack.length;
516
+ pauseTracking();
517
+ const restoreTracking = () => {
518
+ while (trackStack.length > stackLength) {
519
+ trackStack.pop();
520
+ }
521
+ shouldTrack = trackStack.length > 0 ? trackStack[trackStack.length - 1] : true;
522
+ };
523
+ try {
524
+ const result = fn();
525
+ if (result && typeof result === "object" && "then" in result) {
526
+ return result.finally(restoreTracking);
527
+ }
528
+ restoreTracking();
529
+ return Promise.resolve();
530
+ } catch (e) {
531
+ restoreTracking();
532
+ return Promise.reject(e);
533
+ }
534
+ }
535
+ function untrack(fn) {
536
+ const stackLength = trackStack.length;
537
+ pauseTracking();
538
+ try {
539
+ return fn();
540
+ } finally {
541
+ while (trackStack.length > stackLength) {
542
+ trackStack.pop();
543
+ }
544
+ shouldTrack = trackStack.length > 0 ? trackStack[trackStack.length - 1] : true;
545
+ }
546
+ }
547
+ function onEffectCleanup(fn, failSilently = false) {
548
+ if (activeEffect === void 0) {
549
+ return;
550
+ }
551
+ activeEffect._cleanups.push(fn);
552
+ }
553
+ function isIntegerKey(key) {
554
+ return typeof key === "string" && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key && Number.isSafeInteger(Number(key));
555
+ }
556
+ var MAX_RAW_DEPTH = 100;
557
+ var _rawSeenSet = /* @__PURE__ */ new Set();
558
+ var _rawDepth = 0;
559
+ function toRaw(observed) {
560
+ _rawDepth++;
561
+ if (_rawDepth === 1) {
562
+ _rawSeenSet.clear();
563
+ }
564
+ try {
565
+ let current = observed;
566
+ let depth = 0;
567
+ while (current && current[ReactiveFlags.RAW]) {
568
+ if (_rawSeenSet.has(current) || depth >= MAX_RAW_DEPTH) return current;
569
+ _rawSeenSet.add(current);
570
+ current = current[ReactiveFlags.RAW];
571
+ depth++;
572
+ }
573
+ return current;
574
+ } finally {
575
+ _rawDepth--;
576
+ if (_rawDepth === 0) {
577
+ _rawSeenSet.clear();
578
+ }
579
+ }
580
+ }
581
+ function isRef(r) {
582
+ return !!(r && typeof r === "object" && r.__v_isRef === true);
583
+ }
584
+
585
+ // src/reactive.ts
586
+ var MUTATING_METHODS = /* @__PURE__ */ new Set(["set", "add", "delete", "clear"]);
587
+ var collectionMethodCache = /* @__PURE__ */ new WeakMap();
588
+ var arrayInstrumentations = {};
589
+ ["includes", "indexOf", "lastIndexOf"].forEach((method) => {
590
+ const originMethod = Array.prototype[method];
591
+ arrayInstrumentations[method] = function(...args) {
592
+ const arr = toRaw(this);
593
+ track(arr, TrackOpTypes.HAS, "length");
594
+ const result = originMethod.apply(arr, args);
595
+ if (result === -1 || result === false) {
596
+ return originMethod.apply(
597
+ arr,
598
+ args.map((a) => toRaw(a))
599
+ );
600
+ }
601
+ return result;
602
+ };
603
+ });
604
+ ["push", "pop", "shift", "unshift", "splice"].forEach((method) => {
605
+ const originMethod = Array.prototype[method];
606
+ arrayInstrumentations[method] = function(...args) {
607
+ pauseTracking();
608
+ try {
609
+ const result = originMethod.apply(this, args);
610
+ return result;
611
+ } finally {
612
+ resetTracking();
613
+ }
614
+ };
615
+ });
616
+ ["sort", "reverse", "fill", "copyWithin"].forEach((method) => {
617
+ const originMethod = Array.prototype[method];
618
+ arrayInstrumentations[method] = function(...args) {
619
+ const arr = toRaw(this);
620
+ pauseTracking();
621
+ try {
622
+ const result = originMethod.apply(arr, args);
623
+ trigger(arr, TriggerOpTypes.SET, "length");
624
+ return result;
625
+ } finally {
626
+ resetTracking();
627
+ }
628
+ };
629
+ });
630
+ var builtInSymbols = new Set(
631
+ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => {
632
+ const value = unsafeCast(Symbol[key]);
633
+ return isSymbol(value) ? value : void 0;
634
+ }).filter((sym) => sym !== void 0)
635
+ );
636
+ function isNonTrackableKey(key) {
637
+ return key === "__proto__" || key === "__v_isRef";
638
+ }
639
+ function toTriggerKey(value) {
640
+ if (typeof value === "string" || typeof value === "symbol") {
641
+ return value;
642
+ }
643
+ return void 0;
644
+ }
645
+ function createReactiveObject(target, isReadonlyFlag, _isShallow, baseHandlers, collectionHandlers, proxyMap) {
646
+ if (!isObject(target)) {
647
+ return target;
648
+ }
649
+ if (target[ReactiveFlags.SKIP]) {
650
+ return target;
651
+ }
652
+ if (target[ReactiveFlags.RAW] && !(isReadonlyFlag && target[ReactiveFlags.IS_REACTIVE])) {
653
+ return target;
654
+ }
655
+ const existingProxy = proxyMap.get(target);
656
+ if (existingProxy) {
657
+ return existingProxy;
658
+ }
659
+ const handlers = isMap(target) || isSet(target) ? collectionHandlers : baseHandlers;
660
+ const proxy = new Proxy(target, handlers);
661
+ proxyMap.set(target, proxy);
662
+ return proxy;
663
+ }
664
+ function createMutableHandler(isReadonly2, isShallow) {
665
+ return {
666
+ get(target, key, _receiver) {
667
+ if (key === ReactiveFlags.IS_REACTIVE) return !isReadonly2;
668
+ if (key === ReactiveFlags.IS_READONLY) return isReadonly2;
669
+ if (key === ReactiveFlags.IS_SHALLOW) return isShallow;
670
+ if (key === ReactiveFlags.RAW) return target;
671
+ const targetIsArray = Array.isArray(target);
672
+ if (!isReadonly2 && targetIsArray && hasOwn(arrayInstrumentations, key)) {
673
+ return Reflect.get(arrayInstrumentations, key, _receiver);
674
+ }
675
+ const res = Reflect.get(target, key, _receiver);
676
+ if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKey(key)) {
677
+ return res;
678
+ }
679
+ if (!isReadonly2) {
680
+ track(target, TrackOpTypes.GET, key);
681
+ }
682
+ if (isShallow) {
683
+ return res;
684
+ }
685
+ if (isRef(res)) {
686
+ return targetIsArray && isIntegerKey(key) ? res : res.value;
687
+ }
688
+ if (isObject(res)) {
689
+ return isReadonly2 ? readonly(res) : reactive(res);
690
+ }
691
+ return res;
692
+ },
693
+ set(target, key, value, receiver) {
694
+ if (isReadonly2) {
695
+ return true;
696
+ }
697
+ let oldValue = Reflect.get(target, key);
698
+ if (!isShallow) {
699
+ value = toRaw(value);
700
+ oldValue = toRaw(oldValue);
701
+ if (!Array.isArray(target) && isRef(oldValue) && !isRef(value)) {
702
+ oldValue.value = value;
703
+ return true;
704
+ }
705
+ }
706
+ const hadKey = Array.isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);
707
+ const result = Reflect.set(target, key, value, receiver);
708
+ if (target === toRaw(receiver)) {
709
+ if (!hadKey) {
710
+ trigger(target, TriggerOpTypes.ADD, key);
711
+ } else if (hasChanged(value, oldValue)) {
712
+ trigger(target, TriggerOpTypes.SET, key);
713
+ }
714
+ }
715
+ return result;
716
+ },
717
+ deleteProperty(target, key) {
718
+ if (isReadonly2) {
719
+ return true;
720
+ }
721
+ const hadKey = hasOwn(target, key);
722
+ Reflect.get(target, key);
723
+ const result = Reflect.deleteProperty(target, key);
724
+ if (result && hadKey) {
725
+ trigger(target, TriggerOpTypes.DELETE, key);
726
+ }
727
+ return result;
728
+ },
729
+ has(target, key) {
730
+ const result = Reflect.has(target, key);
731
+ if (!isSymbol(key) || !builtInSymbols.has(key)) {
732
+ if (!isReadonly2) {
733
+ track(target, TrackOpTypes.HAS, key);
734
+ }
735
+ }
736
+ return result;
737
+ },
738
+ // FIX: P2-08 ownKeys 属性枚举顺序一致:
739
+ // 返回 Reflect.ownKeys 结果,确保与原生 Object.keys() 枚举顺序一致
740
+ ownKeys(target) {
741
+ if (!isReadonly2) {
742
+ track(target, TrackOpTypes.ITERATE, Array.isArray(target) ? "length" : ITERATE_KEY);
743
+ }
744
+ return Reflect.ownKeys(target);
745
+ }
746
+ };
747
+ }
748
+ function createCollectionHandler(isReadonly2, isShallow) {
749
+ return {
750
+ get(target, key, _receiver) {
751
+ if (key === ReactiveFlags.IS_REACTIVE) return !isReadonly2;
752
+ if (key === ReactiveFlags.IS_READONLY) return isReadonly2;
753
+ if (key === ReactiveFlags.IS_SHALLOW) return isShallow;
754
+ if (key === ReactiveFlags.RAW) return target;
755
+ if (key === "size" || key === "has" || key === "forEach" || key === "entries" || key === "keys" || key === "values" || key === Symbol.iterator) {
756
+ track(target, TrackOpTypes.GET, ITERATE_KEY);
757
+ }
758
+ const res = Reflect.get(target, key, target);
759
+ if (typeof res === "function") {
760
+ if (!isReadonly2 && (key === "entries" || key === "keys" || key === "values" || key === Symbol.iterator)) {
761
+ let methodCache = collectionMethodCache.get(target);
762
+ if (!methodCache) {
763
+ methodCache = /* @__PURE__ */ new Map();
764
+ collectionMethodCache.set(target, methodCache);
765
+ }
766
+ let cachedFn = methodCache.get(key);
767
+ if (!cachedFn) {
768
+ cachedFn = (...args) => {
769
+ track(target, TrackOpTypes.GET, ITERATE_KEY);
770
+ return res.apply(target, args);
771
+ };
772
+ methodCache.set(key, cachedFn);
773
+ }
774
+ return cachedFn;
775
+ }
776
+ if (!isReadonly2) {
777
+ if (MUTATING_METHODS.has(key)) {
778
+ return (...args) => {
779
+ const rawTarget = toRaw(target);
780
+ if (key === "set") {
781
+ const oldValue = rawTarget.get(args[0]);
782
+ const hadKey = rawTarget.has(args[0]);
783
+ const result2 = res.apply(target, args);
784
+ if (!hadKey || !Object.is(toRaw(oldValue), toRaw(args[1]))) {
785
+ const triggerKey = toTriggerKey(args[0]);
786
+ if (triggerKey !== void 0) {
787
+ trigger(target, TriggerOpTypes.SET, triggerKey, args[1]);
788
+ }
789
+ }
790
+ return result2;
791
+ } else if (key === "add") {
792
+ const had = rawTarget.has(args[0]);
793
+ const result2 = res.apply(target, args);
794
+ if (!had) {
795
+ const triggerKey = toTriggerKey(args[0]);
796
+ if (triggerKey !== void 0) {
797
+ trigger(target, TriggerOpTypes.ADD, triggerKey, args[0]);
798
+ }
799
+ trigger(target, TriggerOpTypes.ADD, ITERATE_KEY);
800
+ }
801
+ return result2;
802
+ } else if (key === "delete") {
803
+ const hadKey = rawTarget.has(args[0]);
804
+ const result2 = res.apply(target, args);
805
+ if (hadKey) {
806
+ const triggerKey = toTriggerKey(args[0]);
807
+ if (triggerKey !== void 0) {
808
+ trigger(target, TriggerOpTypes.DELETE, triggerKey);
809
+ }
810
+ trigger(target, TriggerOpTypes.DELETE, ITERATE_KEY);
811
+ }
812
+ return result2;
813
+ } else if (key === "clear") {
814
+ const hadItems = rawTarget.size > 0;
815
+ const result2 = res.apply(target, args);
816
+ if (hadItems) {
817
+ trigger(target, TriggerOpTypes.CLEAR, void 0);
818
+ }
819
+ return result2;
820
+ }
821
+ const result = res.apply(target, args);
822
+ trigger(target, TriggerOpTypes.ADD, ITERATE_KEY);
823
+ return result;
824
+ };
825
+ }
826
+ if (key === "get") {
827
+ return (...args) => {
828
+ track(target, TrackOpTypes.GET, args[0]);
829
+ return res.apply(target, args);
830
+ };
831
+ }
832
+ } else {
833
+ if (MUTATING_METHODS.has(key)) {
834
+ return (..._args) => {
835
+ if (key === "delete") return false;
836
+ return void 0;
837
+ };
838
+ }
839
+ }
840
+ return res.bind(target);
841
+ }
842
+ return res;
843
+ }
844
+ };
845
+ }
846
+ var mutableHandlers = createMutableHandler(false, false);
847
+ var readonlyHandlers = createMutableHandler(true, false);
848
+ var shallowReactiveHandlers = createMutableHandler(false, true);
849
+ var shallowReadonlyHandlers = createMutableHandler(true, true);
850
+ var mutableCollectionHandlers = createCollectionHandler(false, false);
851
+ var readonlyCollectionHandlers = createCollectionHandler(true, false);
852
+ var shallowCollectionHandlers = createCollectionHandler(false, true);
853
+ var shallowReadonlyCollectionHandlers = createCollectionHandler(true, true);
854
+ var reactiveMap = /* @__PURE__ */ new WeakMap();
855
+ var shallowReactiveMap = /* @__PURE__ */ new WeakMap();
856
+ var readonlyMap = /* @__PURE__ */ new WeakMap();
857
+ var shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
858
+ function reactive(target) {
859
+ if (isReadonly(target)) return target;
860
+ return createReactiveObject(
861
+ target,
862
+ false,
863
+ false,
864
+ mutableHandlers,
865
+ mutableCollectionHandlers,
866
+ reactiveMap
867
+ );
868
+ }
869
+ function shallowReactive(target) {
870
+ return createReactiveObject(
871
+ target,
872
+ false,
873
+ true,
874
+ shallowReactiveHandlers,
875
+ shallowCollectionHandlers,
876
+ shallowReactiveMap
877
+ );
878
+ }
879
+ function readonly(target) {
880
+ return createReactiveObject(
881
+ target,
882
+ true,
883
+ false,
884
+ readonlyHandlers,
885
+ readonlyCollectionHandlers,
886
+ readonlyMap
887
+ );
888
+ }
889
+ function shallowReadonly(target) {
890
+ return createReactiveObject(
891
+ target,
892
+ true,
893
+ true,
894
+ shallowReadonlyHandlers,
895
+ shallowReadonlyCollectionHandlers,
896
+ shallowReadonlyMap
897
+ );
898
+ }
899
+ function isReactive(value) {
900
+ if (isReadonly(value)) {
901
+ return isReactive(value[ReactiveFlags.RAW]);
902
+ }
903
+ return !!(value && value[ReactiveFlags.IS_REACTIVE]);
904
+ }
905
+ function isReadonly(value) {
906
+ return !!(value && value[ReactiveFlags.IS_READONLY]);
907
+ }
908
+ function isProxy(value) {
909
+ return isReactive(value) || isReadonly(value);
910
+ }
911
+ function markRaw(value) {
912
+ if (Object.isFrozen(value) || Object.isSealed(value)) {
913
+ return value;
914
+ }
915
+ Object.defineProperty(value, ReactiveFlags.SKIP, { value: true });
916
+ return value;
917
+ }
918
+ var RefImpl = class {
919
+ constructor(value, isShallow) {
920
+ // 使用 Dep 类型替代 Set<any>,提供更精确的类型约束
921
+ this.dep = createDep();
922
+ this.__v_isRef = true;
923
+ this.__v_isShallow = isShallow || void 0;
924
+ this._rawValue = isShallow ? value : toRaw(value);
925
+ this._value = isShallow ? value : toReactive(value);
926
+ }
927
+ get value() {
928
+ trackRefValue(this);
929
+ return this._value;
930
+ }
931
+ set value(newVal) {
932
+ const useDirectValue = this.__v_isShallow;
933
+ newVal = useDirectValue ? newVal : toRaw(newVal);
934
+ if (hasChanged(newVal, this._rawValue)) {
935
+ this._rawValue;
936
+ this._rawValue = newVal;
937
+ this._value = useDirectValue ? newVal : toReactive(newVal);
938
+ triggerRefValue(this);
939
+ }
940
+ }
941
+ };
942
+ var ShallowRefImpl = class {
943
+ constructor(value) {
944
+ // 使用 Dep 类型替代 Set<any>,提供更精确的类型约束
945
+ this.dep = createDep();
946
+ this.__v_isRef = true;
947
+ this.__v_isShallow = true;
948
+ this._rawValue = value;
949
+ this._value = value;
950
+ }
951
+ get value() {
952
+ trackRefValue(this);
953
+ return this._value;
954
+ }
955
+ set value(newVal) {
956
+ if (hasChanged(newVal, this._rawValue)) {
957
+ this._rawValue;
958
+ this._rawValue = newVal;
959
+ this._value = newVal;
960
+ triggerRefValue(this);
961
+ }
962
+ }
963
+ };
964
+ function trackRefValue(ref2) {
965
+ if (getShouldTrack() && getActiveEffect()) {
966
+ track(ref2, TrackOpTypes.GET, "value");
967
+ }
968
+ }
969
+ function triggerRefValue(ref2, newVal, oldVal) {
970
+ trigger(ref2, TriggerOpTypes.SET, "value");
971
+ }
972
+ function ref(value) {
973
+ if (isRef(value)) {
974
+ return value;
975
+ }
976
+ return unsafeCast(new RefImpl(value, false));
977
+ }
978
+ function shallowRef(value) {
979
+ if (isRef(value)) return unsafeCast(value);
980
+ return unsafeCast(new ShallowRefImpl(value));
981
+ }
982
+ function triggerRef(ref2) {
983
+ triggerRefValue(unsafeCast(ref2), ref2.value);
984
+ }
985
+ function isShallowRef(r) {
986
+ return isRef(r) && !!r.__v_isShallow;
987
+ }
988
+ function isComputedRef(r) {
989
+ return isRef(r) && !!r.__v_isComputed;
990
+ }
991
+ function unref(r) {
992
+ return isRef(r) ? r.value : r;
993
+ }
994
+ function toRef(object, key) {
995
+ if (isRef(object[key])) return unsafeCast(object[key]);
996
+ return unsafeCast(new ObjectRefImpl(object, key));
997
+ }
998
+ function toRefs(object) {
999
+ const result = {};
1000
+ for (const key in object) {
1001
+ result[key] = toRef(object, key);
1002
+ }
1003
+ return result;
1004
+ }
1005
+ function customRef(factory) {
1006
+ return unsafeCast(new CustomRefImpl(factory));
1007
+ }
1008
+ function toValue(source) {
1009
+ if (isRef(source)) return source.value;
1010
+ if (typeof source === "function") {
1011
+ return source();
1012
+ }
1013
+ return source;
1014
+ }
1015
+ var ObjectRefImpl = class {
1016
+ constructor(_object, _key) {
1017
+ this._object = _object;
1018
+ this._key = _key;
1019
+ this.__v_isRef = true;
1020
+ }
1021
+ get value() {
1022
+ return this._object[this._key];
1023
+ }
1024
+ set value(newVal) {
1025
+ this._object[this._key] = newVal;
1026
+ }
1027
+ };
1028
+ var CustomRefImpl = class {
1029
+ constructor(factory) {
1030
+ this.__v_isRef = true;
1031
+ this.dep = createDep();
1032
+ const { get, set: set2 } = factory(
1033
+ () => trackRefValue(this),
1034
+ () => triggerRefValue(this)
1035
+ );
1036
+ this._getter = get;
1037
+ this._setter = set2;
1038
+ }
1039
+ get value() {
1040
+ return this._getter();
1041
+ }
1042
+ set value(newVal) {
1043
+ this._setter(newVal);
1044
+ }
1045
+ };
1046
+ function toReactive(value) {
1047
+ return isObject(value) ? reactive(value) : value;
1048
+ }
1049
+ var MAX_COMPUTED_DEPTH = 100;
1050
+ var computedDepth = 0;
1051
+ var computedStack = /* @__PURE__ */ new Set();
1052
+ var _a;
1053
+ _a = ComputedRefSymbol;
1054
+ var _ComputedRefImpl = class _ComputedRefImpl {
1055
+ // 60秒后清理缓存
1056
+ constructor(getter, _setter, isSSR) {
1057
+ this._setter = _setter;
1058
+ // 使用 Dep 类型替代 Set<any>,提供更精确的类型约束
1059
+ this.dep = createDep();
1060
+ this._dirty = true;
1061
+ this._initialized = false;
1062
+ this[_a] = true;
1063
+ this.__v_isRef = true;
1064
+ this.__v_isComputed = true;
1065
+ // FIX: P2-6 计算属性缓存清理相关属性
1066
+ this._cacheCleanupTimer = null;
1067
+ this.effect = new ReactiveEffect(getter, () => {
1068
+ if (!this._dirty) {
1069
+ this._dirty = true;
1070
+ triggerRefValue(this);
1071
+ }
1072
+ this._resetCacheCleanupTimer();
1073
+ });
1074
+ this.effect.computed = true;
1075
+ const effect2 = this.effect;
1076
+ effect2.onStop = () => {
1077
+ this._cleanupCache();
1078
+ };
1079
+ if (isSSR) {
1080
+ try {
1081
+ this._value = getter();
1082
+ this._dirty = false;
1083
+ } catch (e) {
1084
+ this._dirty = true;
1085
+ }
1086
+ }
1087
+ }
1088
+ // FIX: P2-6 重置缓存清理定时器
1089
+ _resetCacheCleanupTimer() {
1090
+ if (this._cacheCleanupTimer) {
1091
+ clearTimeout(this._cacheCleanupTimer);
1092
+ }
1093
+ this._cacheCleanupTimer = setTimeout(() => {
1094
+ if (!this.effect.active) {
1095
+ this._cleanupCache();
1096
+ }
1097
+ }, _ComputedRefImpl.CACHE_CLEANUP_DELAY);
1098
+ }
1099
+ // FIX: P2-6 清理缓存值
1100
+ _cleanupCache() {
1101
+ if (!this.effect.active) {
1102
+ if (this._cacheCleanupTimer) {
1103
+ clearTimeout(this._cacheCleanupTimer);
1104
+ this._cacheCleanupTimer = null;
1105
+ }
1106
+ this._value = unsafeCast(void 0);
1107
+ this._initialized = false;
1108
+ this._dirty = true;
1109
+ }
1110
+ }
1111
+ // FIX: P2-6 手动清理缓存的公共方法
1112
+ /**
1113
+ * 手动清理计算属性的缓存值。
1114
+ * 在组件卸载时调用此方法可以释放内存。
1115
+ */
1116
+ cleanupCache() {
1117
+ if (this._cacheCleanupTimer) {
1118
+ clearTimeout(this._cacheCleanupTimer);
1119
+ this._cacheCleanupTimer = null;
1120
+ }
1121
+ this._cleanupCache();
1122
+ }
1123
+ get value() {
1124
+ trackRefValue(this);
1125
+ if (this._dirty) {
1126
+ if (this.effect.active) {
1127
+ if (computedStack.has(this)) {
1128
+ throw new Error(
1129
+ `[LytJS/reactivity] Circular dependency detected in computed property. A computed property is indirectly referencing itself, causing an infinite loop.
1130
+ Error Code: CIRCULAR_REFERENCE (4008)
1131
+ Suggestion: Check your computed property dependencies and avoid referencing the computed itself or other computeds that depend on it.`
1132
+ );
1133
+ }
1134
+ computedDepth++;
1135
+ if (computedDepth > MAX_COMPUTED_DEPTH) {
1136
+ computedDepth--;
1137
+ throw new Error(
1138
+ `[LytJS/reactivity] Maximum computed depth exceeded (${MAX_COMPUTED_DEPTH}). Possible infinite loop in computed properties.
1139
+ Error Code: CIRCULAR_REFERENCE (4008)
1140
+ Suggestion: Check for circular dependencies in your computed properties.`
1141
+ );
1142
+ }
1143
+ computedStack.add(this);
1144
+ try {
1145
+ const value = this.effect.run();
1146
+ if (value !== void 0) {
1147
+ this._value = value;
1148
+ this._initialized = true;
1149
+ }
1150
+ this._dirty = false;
1151
+ } catch (e) {
1152
+ if (this._initialized) {
1153
+ this._dirty = false;
1154
+ }
1155
+ throw e;
1156
+ } finally {
1157
+ computedStack.delete(this);
1158
+ computedDepth--;
1159
+ }
1160
+ }
1161
+ }
1162
+ return this._value;
1163
+ }
1164
+ set value(newValue) {
1165
+ if (this._setter) {
1166
+ this._setter(newValue);
1167
+ }
1168
+ }
1169
+ };
1170
+ _ComputedRefImpl.CACHE_CLEANUP_DELAY = 6e4;
1171
+ var ComputedRefImpl = _ComputedRefImpl;
1172
+ var _isSSR = false;
1173
+ function setSSRMode(isSSR) {
1174
+ _isSSR = isSSR;
1175
+ }
1176
+ function computed2(getterOrOptions) {
1177
+ let getter;
1178
+ let setter;
1179
+ if (isFunction(getterOrOptions)) {
1180
+ getter = getterOrOptions;
1181
+ setter = void 0;
1182
+ } else {
1183
+ getter = getterOrOptions.get;
1184
+ setter = getterOrOptions.set;
1185
+ }
1186
+ return new ComputedRefImpl(getter, setter, _isSSR);
1187
+ }
1188
+ function getSource(source) {
1189
+ if (isRef(source)) return () => source.value;
1190
+ if (isObject(source) && isReactive(source)) return () => traverse(source);
1191
+ if (typeof source === "function") return source;
1192
+ return NOOP;
1193
+ }
1194
+ var MAX_TRAVERSE_DEPTH = 100;
1195
+ function traverse(value, seen, depth = 0) {
1196
+ const _seen = /* @__PURE__ */ new Set();
1197
+ if (!isObject(value) || _seen.has(value)) return value;
1198
+ const stack = [{ value, depth }];
1199
+ while (stack.length > 0) {
1200
+ const current = stack.pop();
1201
+ const { value: val, depth: d } = current;
1202
+ if (!isObject(val) || _seen.has(val)) continue;
1203
+ if (d > MAX_TRAVERSE_DEPTH) {
1204
+ continue;
1205
+ }
1206
+ _seen.add(val);
1207
+ if (isArray(val)) {
1208
+ for (let i = val.length - 1; i >= 0; i--) {
1209
+ stack.push({ value: val[i], depth: d + 1 });
1210
+ }
1211
+ } else if (val instanceof Map) {
1212
+ val.forEach((v, key) => {
1213
+ stack.push({ value: v, depth: d + 1 });
1214
+ if (isObject(key)) {
1215
+ stack.push({ value: key, depth: d + 1 });
1216
+ }
1217
+ });
1218
+ } else if (val instanceof Set) {
1219
+ val.forEach((v) => {
1220
+ stack.push({ value: v, depth: d + 1 });
1221
+ });
1222
+ } else {
1223
+ const keys = Object.keys(val);
1224
+ for (let i = keys.length - 1; i >= 0; i--) {
1225
+ stack.push({
1226
+ value: val[keys[i]],
1227
+ depth: d + 1
1228
+ });
1229
+ }
1230
+ }
1231
+ }
1232
+ return value;
1233
+ }
1234
+ function watch(source, cb, options) {
1235
+ const {
1236
+ immediate,
1237
+ deep,
1238
+ flush = "pre",
1239
+ once,
1240
+ onTrack,
1241
+ onTrigger,
1242
+ scheduler: userScheduler
1243
+ } = options || {};
1244
+ let getter;
1245
+ let forceTrigger = false;
1246
+ let isMultiSource = false;
1247
+ if (isArray(source)) {
1248
+ isMultiSource = true;
1249
+ forceTrigger = source.some((s) => isObject(s) && isReactive(s));
1250
+ getter = () => source.map((s) => {
1251
+ if (isRef(s)) return s.value;
1252
+ if (isObject(s) && isReactive(s)) return traverse(s);
1253
+ if (isFunction(s)) return s();
1254
+ return void 0;
1255
+ });
1256
+ } else {
1257
+ getter = getSource(source);
1258
+ if (isObject(source) && isReactive(source)) {
1259
+ forceTrigger = true;
1260
+ }
1261
+ }
1262
+ if (deep) {
1263
+ const baseGetter = getter;
1264
+ getter = () => traverse(baseGetter());
1265
+ }
1266
+ let oldValue = isMultiSource ? new Array(source.length).fill(void 0) : void 0;
1267
+ const cleanupFns = [];
1268
+ let isStopped = false;
1269
+ let consecutiveErrors = 0;
1270
+ const MAX_CONSECUTIVE_ERRORS = 3;
1271
+ const onCleanup = (fn) => {
1272
+ cleanupFns.push(fn);
1273
+ };
1274
+ const job = () => {
1275
+ if (!watcher.active || isStopped) return;
1276
+ if (cb) {
1277
+ let newValue;
1278
+ try {
1279
+ newValue = watcher.run();
1280
+ consecutiveErrors = 0;
1281
+ } catch (e) {
1282
+ consecutiveErrors++;
1283
+ if (consecutiveErrors <= MAX_CONSECUTIVE_ERRORS) {
1284
+ error(`Error in watch getter: ${e}`);
1285
+ }
1286
+ throw e;
1287
+ }
1288
+ if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {
1289
+ if (cleanupFns.length > 0) {
1290
+ cleanupFns.forEach((f) => f());
1291
+ cleanupFns.length = 0;
1292
+ }
1293
+ try {
1294
+ cb(
1295
+ newValue,
1296
+ oldValue,
1297
+ onCleanup
1298
+ );
1299
+ consecutiveErrors = 0;
1300
+ } catch (e) {
1301
+ consecutiveErrors++;
1302
+ if (consecutiveErrors <= MAX_CONSECUTIVE_ERRORS) {
1303
+ error(`Error in watch callback: ${e}`);
1304
+ }
1305
+ }
1306
+ oldValue = newValue;
1307
+ if (once) {
1308
+ isStopped = true;
1309
+ watcher.stop();
1310
+ }
1311
+ }
1312
+ } else {
1313
+ try {
1314
+ watcher.run();
1315
+ consecutiveErrors = 0;
1316
+ } catch (e) {
1317
+ consecutiveErrors++;
1318
+ if (consecutiveErrors <= MAX_CONSECUTIVE_ERRORS) {
1319
+ error(`Error in watch effect run: ${e}`);
1320
+ }
1321
+ throw e;
1322
+ }
1323
+ }
1324
+ };
1325
+ const rawScheduler = userScheduler || (flush === "sync" ? job : () => {
1326
+ if (flush === "post") {
1327
+ queuePostFlushCb(job);
1328
+ } else {
1329
+ queuePreFlushCb(job);
1330
+ }
1331
+ });
1332
+ const scheduler = userScheduler ? (...args) => rawScheduler(job, ...args) : rawScheduler;
1333
+ const watcher = new ReactiveEffect(getter, scheduler);
1334
+ watcher.onStop = () => {
1335
+ if (cleanupFns.length > 0) {
1336
+ for (let i = cleanupFns.length - 1; i >= 0; i--) {
1337
+ cleanupFns[i]();
1338
+ }
1339
+ cleanupFns.length = 0;
1340
+ }
1341
+ };
1342
+ if (immediate) {
1343
+ job();
1344
+ } else {
1345
+ oldValue = watcher.run();
1346
+ }
1347
+ return () => {
1348
+ if (isStopped) return;
1349
+ isStopped = true;
1350
+ watcher.stop();
1351
+ getter = () => {
1352
+ };
1353
+ cleanupFns.length = 0;
1354
+ cb = NOOP;
1355
+ oldValue = void 0;
1356
+ consecutiveErrors = 0;
1357
+ };
1358
+ }
1359
+ function watchEffect(effectFn, options) {
1360
+ return doWatchEffect(effectFn, options);
1361
+ }
1362
+ function watchPostEffect(effectFn, options) {
1363
+ return doWatchEffect(effectFn, { ...options, flush: "post" });
1364
+ }
1365
+ function watchSyncEffect(effectFn, options) {
1366
+ return doWatchEffect(effectFn, { ...options, flush: "sync" });
1367
+ }
1368
+ function doWatchEffect(source, options = {}) {
1369
+ const { flush = "pre", onTrack, onTrigger } = options;
1370
+ const cleanupFns = [];
1371
+ let isStopped = false;
1372
+ const onCleanup = (fn) => {
1373
+ cleanupFns.push(fn);
1374
+ };
1375
+ const getter = () => {
1376
+ if (cleanupFns.length > 0) {
1377
+ cleanupFns.forEach((f) => f());
1378
+ cleanupFns.length = 0;
1379
+ }
1380
+ source(onCleanup);
1381
+ };
1382
+ let effectRef;
1383
+ const schedulerFn = flush === "sync" ? () => effectRef?.run() : () => {
1384
+ if (flush === "post") {
1385
+ queuePostFlushCb(() => effectRef?.run());
1386
+ } else {
1387
+ queuePreFlushCb(() => effectRef?.run());
1388
+ }
1389
+ };
1390
+ const currentEffect = new ReactiveEffect(getter, schedulerFn);
1391
+ effectRef = currentEffect;
1392
+ currentEffect.onStop = () => {
1393
+ if (cleanupFns.length > 0) {
1394
+ for (let i = cleanupFns.length - 1; i >= 0; i--) {
1395
+ cleanupFns[i]();
1396
+ }
1397
+ cleanupFns.length = 0;
1398
+ }
1399
+ };
1400
+ currentEffect.run();
1401
+ return () => {
1402
+ if (isStopped) return;
1403
+ isStopped = true;
1404
+ currentEffect.stop();
1405
+ cleanupFns.length = 0;
1406
+ source = NOOP;
1407
+ effectRef = void 0;
1408
+ };
1409
+ }
1410
+
1411
+ // src/batch.ts
1412
+ var scopeStack = [];
1413
+ var globalBatchDepth = 0;
1414
+ var MAX_NESTING_DEPTH = 100;
1415
+ function batchScope(callback, options = {}) {
1416
+ const { async = false, name = "batchScope", onError } = options;
1417
+ if (globalBatchDepth >= MAX_NESTING_DEPTH) {
1418
+ const error3 = new Error(
1419
+ `[lytjs/reactivity] Maximum batchScope nesting depth (${MAX_NESTING_DEPTH}) exceeded. This may indicate an infinite loop.`
1420
+ );
1421
+ if (onError) {
1422
+ onError(error3);
1423
+ throw error3;
1424
+ }
1425
+ throw error3;
1426
+ }
1427
+ const ctx = {
1428
+ depth: globalBatchDepth,
1429
+ name,
1430
+ committed: false,
1431
+ cancelled: false
1432
+ };
1433
+ scopeStack.push(ctx);
1434
+ globalBatchDepth++;
1435
+ try {
1436
+ if (async) {
1437
+ let result;
1438
+ const promise = batchAsync(() => {
1439
+ result = callback(ctx);
1440
+ });
1441
+ promise.then(() => {
1442
+ ctx.committed = true;
1443
+ scopeStack.pop();
1444
+ globalBatchDepth--;
1445
+ }).catch((error3) => {
1446
+ scopeStack.pop();
1447
+ globalBatchDepth--;
1448
+ if (onError) {
1449
+ onError(error3);
1450
+ } else {
1451
+ throw error3;
1452
+ }
1453
+ });
1454
+ return result;
1455
+ } else {
1456
+ let result;
1457
+ batch(() => {
1458
+ result = callback(ctx);
1459
+ });
1460
+ ctx.committed = true;
1461
+ if (result === void 0) {
1462
+ throw new Error(
1463
+ "[lytjs/reactivity] batchScope sync mode: callback returned undefined."
1464
+ );
1465
+ }
1466
+ return result;
1467
+ }
1468
+ } catch (error3) {
1469
+ if (onError) {
1470
+ onError(error3);
1471
+ throw error3;
1472
+ }
1473
+ throw error3;
1474
+ } finally {
1475
+ if (!async) {
1476
+ scopeStack.pop();
1477
+ globalBatchDepth--;
1478
+ }
1479
+ }
1480
+ }
1481
+ async function batchScopeAsync(callback, options = {}) {
1482
+ const { name = "batchScopeAsync", onError } = options;
1483
+ if (globalBatchDepth >= MAX_NESTING_DEPTH) {
1484
+ const error3 = new Error(
1485
+ `[lytjs/reactivity] Maximum batchScope nesting depth (${MAX_NESTING_DEPTH}) exceeded.`
1486
+ );
1487
+ if (onError) {
1488
+ onError(error3);
1489
+ return Promise.reject(error3);
1490
+ }
1491
+ return Promise.reject(error3);
1492
+ }
1493
+ const ctx = {
1494
+ depth: globalBatchDepth,
1495
+ name,
1496
+ committed: false,
1497
+ cancelled: false
1498
+ };
1499
+ scopeStack.push(ctx);
1500
+ globalBatchDepth++;
1501
+ try {
1502
+ let result;
1503
+ await batchAsync(async () => {
1504
+ result = await callback(ctx);
1505
+ });
1506
+ ctx.committed = true;
1507
+ return result;
1508
+ } catch (error3) {
1509
+ if (onError) {
1510
+ onError(error3);
1511
+ throw error3;
1512
+ }
1513
+ throw error3;
1514
+ } finally {
1515
+ scopeStack.pop();
1516
+ globalBatchDepth--;
1517
+ }
1518
+ }
1519
+ function batchScopeUntrack(fn) {
1520
+ return untrack(fn);
1521
+ }
1522
+ function getBatchScopeDepth() {
1523
+ return globalBatchDepth;
1524
+ }
1525
+ function getCurrentBatchScopeStack() {
1526
+ return [...scopeStack];
1527
+ }
1528
+ function isInBatchScope() {
1529
+ return globalBatchDepth > 0;
1530
+ }
1531
+ function flushBatchScopes() {
1532
+ return Promise.resolve();
1533
+ }
1534
+ function _notifyDevToolsSignalChange(signalId, value) {
1535
+ return;
1536
+ }
1537
+ function _notifyDevToolsEffectRun(effectId) {
1538
+ return;
1539
+ }
1540
+
1541
+ export { ComputedRefSymbol, ReactiveSymbol, ReadonlySymbol, RefSymbol, ShallowRefSymbol, _notifyDevToolsEffectRun, _notifyDevToolsSignalChange, batch, batchAsync, batchScope, batchScopeAsync, batchScopeUntrack, computed2 as computed, computedSignal, customRef, effect, enableTracking, flushBatchScopes, getBatchScopeDepth, getCurrentBatchScopeStack, getSkippedTrackingCount, isComputedRef, isInBatchScope, isProxy, isReactive, isReadonly, isRef, isShallowRef, markRaw, onEffectCleanup, pauseTracking, reactive, readonly, readonlySignal, ref, resetSkippedTrackingCount, resetTracking, set, setSSRMode, shallowReactive, shallowReadonly, shallowRef, shouldSkipTracking, signal, signalBatch, computed as signalComputed, signalUntrack, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref, untrack, update, valueOf, watch, watchEffect, watchPostEffect, watchSyncEffect, withFirstRenderOptimization, writableComputedSignal };
1542
+ //# sourceMappingURL=index.mjs.map
1543
+ //# sourceMappingURL=index.mjs.map