mutts 1.0.13 → 1.0.15

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 (54) hide show
  1. package/BROWSER_ASYNC_POLYFILL.md +79 -0
  2. package/README.md +2 -2
  3. package/dist/browser.cjs +216 -97
  4. package/dist/browser.cjs.map +1 -1
  5. package/dist/browser.d.ts +42 -9
  6. package/dist/browser.dev.cjs +81 -71
  7. package/dist/browser.dev.cjs.map +1 -1
  8. package/dist/browser.dev.d.ts +2 -2
  9. package/dist/browser.dev.esm.js +2 -2
  10. package/dist/browser.esm.js +137 -28
  11. package/dist/browser.esm.js.map +1 -1
  12. package/dist/chunks/{proxy-BtmPFjSr.esm.js → effects-CPjf6gNA.esm.js} +2605 -2155
  13. package/dist/chunks/effects-CPjf6gNA.esm.js.map +1 -0
  14. package/dist/chunks/{proxy-DBHj3kGK.cjs → effects-oUauWxxl.cjs} +2615 -2156
  15. package/dist/chunks/effects-oUauWxxl.cjs.map +1 -0
  16. package/dist/chunks/{index-CAdnMJev.cjs → index-Dtj2qZ0d.cjs} +418 -350
  17. package/dist/chunks/index-Dtj2qZ0d.cjs.map +1 -0
  18. package/dist/chunks/{index-XsYTUhHx.esm.js → index-YGpb1te7.esm.js} +156 -88
  19. package/dist/chunks/index-YGpb1te7.esm.js.map +1 -0
  20. package/dist/chunks/node-CKuro-Uk.cjs +187 -0
  21. package/dist/chunks/node-CKuro-Uk.cjs.map +1 -0
  22. package/dist/chunks/node-sQtns7M-.esm.js +185 -0
  23. package/dist/chunks/node-sQtns7M-.esm.js.map +1 -0
  24. package/dist/debug.cjs +76 -49
  25. package/dist/debug.cjs.map +1 -1
  26. package/dist/debug.esm.js +37 -10
  27. package/dist/debug.esm.js.map +1 -1
  28. package/dist/mutts.umd.js +4169 -3532
  29. package/dist/mutts.umd.js.map +1 -1
  30. package/dist/mutts.umd.min.js +1 -1
  31. package/dist/mutts.umd.min.js.map +1 -1
  32. package/dist/node.cjs +82 -72
  33. package/dist/node.cjs.map +1 -1
  34. package/dist/node.d.ts +2 -2
  35. package/dist/node.dev.cjs +82 -72
  36. package/dist/node.dev.cjs.map +1 -1
  37. package/dist/node.dev.d.ts +2 -2
  38. package/dist/node.dev.esm.js +3 -3
  39. package/dist/node.esm.js +3 -3
  40. package/dist/types.d.ts +30 -15
  41. package/docs/ai/api-reference.md +3 -1
  42. package/docs/ai/manual.md +17 -5
  43. package/docs/reactive/advanced.md +169 -10
  44. package/docs/reactive/debugging.md +15 -13
  45. package/docs/reactive.md +2 -1
  46. package/package.json +12 -7
  47. package/dist/chunks/index-CAdnMJev.cjs.map +0 -1
  48. package/dist/chunks/index-XsYTUhHx.esm.js.map +0 -1
  49. package/dist/chunks/node-DrrphEPf.cjs +0 -98
  50. package/dist/chunks/node-DrrphEPf.cjs.map +0 -1
  51. package/dist/chunks/node-NEZvVo4M.esm.js +0 -96
  52. package/dist/chunks/node-NEZvVo4M.esm.js.map +0 -1
  53. package/dist/chunks/proxy-BtmPFjSr.esm.js.map +0 -1
  54. package/dist/chunks/proxy-DBHj3kGK.cjs.map +0 -1
@@ -0,0 +1,79 @@
1
+ # Browser Async Polyfill
2
+
3
+ ## Problem
4
+
5
+ In the browser, JavaScript's `Promise` implementation carries "sticky" context through its prototype chain. When a Promise is created inside a zone (e.g., with `asyncZone`), it inherits the zone's context. If this Promise is then returned to an outer scope, the zone context "leaks" - it remains attached to the Promise even after execution has left the zone.
6
+
7
+ ## Solution
8
+
9
+ To prevent context leakage, mutts implements a **sanitization** mechanism for the browser environment:
10
+
11
+ ### 1. Promise Sanitization
12
+
13
+ The `asyncHooks.sanitizePromise` function wraps any Promise returned from a zone in a new Promise created in the outer scope:
14
+
15
+ ```typescript
16
+ asyncHooks.sanitizePromise = (res: any) => {
17
+ if (res && typeof (res as any).then === 'function') {
18
+ return new Promise((resolve, reject) => {
19
+ setTimeout(() => {
20
+ (res as any).then(resolve, reject)
21
+ }, 0)
22
+ })
23
+ }
24
+ return res
25
+ }
26
+ ```
27
+
28
+ This breaks the sticky context chain by:
29
+ 1. Creating a new Promise in the current (outer) scope
30
+ 2. Using `setTimeout` to defer the resolution
31
+ 3. The new Promise has no zone context from the inner scope
32
+
33
+ ### 2. Promise Patching
34
+
35
+ The browser polyfill patches the global `Promise` constructor and its prototype methods (`then`, `catch`, `finally`) to capture and propagate zone context correctly through the Promise chain.
36
+
37
+ ### 3. Scheduler Freezing
38
+
39
+ When the reactive system enters a broken state (unrecoverable error), all async schedulers are frozen to prevent further execution:
40
+
41
+ - `setTimeout` / `clearTimeout`
42
+ - `setInterval` / `clearInterval`
43
+ - `setImmediate` / `clearImmediate` (if available)
44
+ - `requestAnimationFrame` / `cancelAnimationFrame` (if available)
45
+ - `queueMicrotask` (if available)
46
+
47
+ This is a safety mechanism to prevent cascading errors while still allowing DOM event inspection.
48
+
49
+ ## Why This is Necessary
50
+
51
+ ### Node.js vs Browser
52
+
53
+ - **Node.js**: Uses `async_hooks` API which provides proper async context tracking without sticky Promise issues
54
+ - **Browser**: No native async context API, so mutts must implement its own mechanism using Promise prototype patching
55
+
56
+ ### The "Sticky" Problem
57
+
58
+ ```typescript
59
+ // Without sanitization:
60
+ asyncZone.with('inner-zone', async () => {
61
+ const promise = Promise.resolve('data')
62
+ return promise // This promise carries 'inner-zone' context
63
+ })
64
+ // In outer scope, the promise still thinks it's in 'inner-zone'
65
+
66
+ // With sanitization:
67
+ asyncZone.with('inner-zone', async () => {
68
+ const promise = Promise.resolve('data')
69
+ return sanitizePromise(promise) // Returns new promise without 'inner-zone' context
70
+ })
71
+ // In outer scope, the promise has no zone context
72
+ ```
73
+
74
+ ## Implementation Notes
75
+
76
+ - The polyfill is only applied in the browser environment
77
+ - Original functions are stored and can be restored
78
+ - The polyfill is idempotent - applying it multiple times is safe
79
+ - Symbol.species is overridden to return the patched Promise constructor
package/README.md CHANGED
@@ -14,7 +14,7 @@ In a world of "magic" and implicit state, Mutts chooses **Affirmative Logic**: y
14
14
  A surgical, proxy-based reactivity system that eliminates lifecycle choreography.
15
15
  - **Identity-Stable**: `morph()` transforms collections lazily with element-level precision.
16
16
  - **Dependency Tracking**: Automatic tracking through objects, arrays, maps, and prototype chains.
17
- - **Robust Batching**: Nested batch support with deterministic cleanup cycles.
17
+ - **Robust Batching**: Nested batch support with deterministic cleanup cycles and explicit phase-token ordering.
18
18
  - **[Read more: Reactive Core](./docs/reactive/core.md)**
19
19
 
20
20
  ### 2. Universal Async Context (Zones)
@@ -88,6 +88,7 @@ A comprehensive reactivity system. See the **[Introduction](./docs/reactive/core
88
88
  - **Class Reactivity**: `@reactive` decorator and `ReactiveBase` for class-based reactivity
89
89
  - **Reactive Mixin**: Always-reactive classes with mixin support (`Reactive`)
90
90
  - **Back-Reference System**: Efficient change propagation through object hierarchies
91
+ - **Effect Ordering**: Model render phases with ordinary reactive tokens so dependent effects can run after the work they rely on
91
92
  - **Type Safety**: Full TypeScript support with proper type inference
92
93
  - **Performance Optimized**: Lazy back-reference creation and efficient dependency tracking
93
94
  - **Debugging & Development**: Built-in tools like cycle detection, memoization discrepancy check and effects lineages (logical/virtual stack-trace)
@@ -261,4 +262,3 @@ A utility for creating extensible functions with chainable property modifiers. T
261
262
 
262
263
  ## [Utilities](./docs/utils.md)
263
264
  Documented helper functions for collections, type checks, and debugging (zip, deepCompare, tag, etc.).
264
-
package/dist/browser.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var proxy = require('./chunks/proxy-DBHj3kGK.cjs');
4
- var index = require('./chunks/index-CAdnMJev.cjs');
3
+ var effects = require('./chunks/effects-oUauWxxl.cjs');
4
+ var index = require('./chunks/index-Dtj2qZ0d.cjs');
5
5
 
6
6
  const promiseContexts = new WeakMap();
7
7
  // [HACK]: Sanitization
@@ -9,7 +9,7 @@ const promiseContexts = new WeakMap();
9
9
  // If returned to the outer scope, that context leaks. We wrap it in a new Promise
10
10
  // created here (in the outer scope) to break the chain and sanitize the return value.
11
11
  // See BROWSER_ASYNC_POLYFILL.md for full details.
12
- proxy.asyncHooks.sanitizePromise = (res) => {
12
+ effects.asyncHooks.sanitizePromise = (res) => {
13
13
  if (res && typeof res.then === 'function') {
14
14
  return new Promise((resolve, reject) => {
15
15
  setTimeout(() => {
@@ -21,7 +21,7 @@ proxy.asyncHooks.sanitizePromise = (res) => {
21
21
  };
22
22
  function captureRestorers() {
23
23
  const restorers = new Set();
24
- for (const hook of proxy.hooks) {
24
+ for (const hook of effects.hooks) {
25
25
  const restorer = hook();
26
26
  if (restorer)
27
27
  restorers.add(restorer);
@@ -40,28 +40,14 @@ function wrap(fn, capturedRestorers) {
40
40
  return fn.apply(this, args);
41
41
  }
42
42
  finally {
43
- /* cf BROWSER_ASYNC_POLYFILL.md
44
- // Note: my fear about this code: in between 2~3~4 microtask waits, some other microtasks might have started, stopped, ...
45
- // We might be in the middle of another promise hook trying to setup the zone
46
- // TODO We might wish to have a flag :asyncZone.acquired - like a semaphore - that we falsify here and set back when we setup the zone
47
- // - but this might perhaps be an overkill creating more problems than it solves
48
- if (originals.queueMicrotask) {
49
- // Double microtask ensures we run after the first await resumption microtask
50
- originals.queueMicrotask.call(globalThis, () => {
51
- originals.queueMicrotask.call(globalThis, () => {
52
- originals.queueMicrotask.call(globalThis, () => {
53
- for (let i = undoers.length - 1; i >= 0; i--) undoers[i]()
54
- })
55
- })
56
- })
57
- } else {
58
- for (let i = undoers.length - 1; i >= 0; i--) undoers[i]()
59
- }*/
43
+ // Browser async context is backed by sticky Promise metadata. Running undoers here
44
+ // breaks await propagation and can orphan reactive resource observers.
60
45
  }
61
46
  };
62
47
  }
63
48
  const GLOBAL_ORIGINALS = Symbol.for('mutts.originals');
64
49
  const GLOBAL_PROMISE = Symbol.for('mutts.OriginalPromise');
50
+ const schedulerGlobal = globalThis;
65
51
  let originals;
66
52
  let OriginalPromise;
67
53
  if (globalThis[GLOBAL_ORIGINALS]) {
@@ -82,9 +68,13 @@ else {
82
68
  race: OriginalPromise.race,
83
69
  any: OriginalPromise.any,
84
70
  setTimeout: globalThis.setTimeout,
71
+ clearTimeout: globalThis.clearTimeout,
85
72
  setInterval: globalThis.setInterval,
86
- setImmediate: globalThis.setImmediate,
87
- requestAnimationFrame: globalThis.requestAnimationFrame,
73
+ clearInterval: globalThis.clearInterval,
74
+ setImmediate: schedulerGlobal.setImmediate,
75
+ clearImmediate: schedulerGlobal.clearImmediate,
76
+ requestAnimationFrame: schedulerGlobal.requestAnimationFrame,
77
+ cancelAnimationFrame: schedulerGlobal.cancelAnimationFrame,
88
78
  queueMicrotask: globalThis.queueMicrotask,
89
79
  };
90
80
  globalThis[GLOBAL_ORIGINALS] = originals;
@@ -97,6 +87,74 @@ if (!originals.any)
97
87
  originals.any = OriginalPromise.any;
98
88
  if (!originals.race)
99
89
  originals.race = OriginalPromise.race;
90
+ if (!originals.clearTimeout)
91
+ originals.clearTimeout = globalThis.clearTimeout;
92
+ if (!originals.clearInterval)
93
+ originals.clearInterval = globalThis.clearInterval;
94
+ if (!originals.clearImmediate)
95
+ originals.clearImmediate = schedulerGlobal.clearImmediate;
96
+ if (!originals.cancelAnimationFrame)
97
+ originals.cancelAnimationFrame = schedulerGlobal.cancelAnimationFrame;
98
+ const pendingTimeouts = new Set();
99
+ const pendingIntervals = new Set();
100
+ const pendingImmediates = new Set();
101
+ const pendingAnimationFrames = new Set();
102
+ let asyncSchedulersFrozen = false;
103
+ function clearPendingSchedulers() {
104
+ for (const handle of Array.from(pendingTimeouts))
105
+ originals.clearTimeout.call(globalThis, handle);
106
+ for (const handle of Array.from(pendingIntervals))
107
+ originals.clearInterval.call(globalThis, handle);
108
+ if (originals.clearImmediate) {
109
+ for (const handle of Array.from(pendingImmediates)) {
110
+ originals.clearImmediate.call(globalThis, handle);
111
+ }
112
+ }
113
+ if (originals.cancelAnimationFrame) {
114
+ for (const handle of Array.from(pendingAnimationFrames)) {
115
+ originals.cancelAnimationFrame.call(globalThis, handle);
116
+ }
117
+ }
118
+ pendingTimeouts.clear();
119
+ pendingIntervals.clear();
120
+ pendingImmediates.clear();
121
+ pendingAnimationFrames.clear();
122
+ }
123
+ function freezeAsyncSchedulers() {
124
+ if (asyncSchedulersFrozen)
125
+ return;
126
+ asyncSchedulersFrozen = true;
127
+ clearPendingSchedulers();
128
+ }
129
+ function resumeAsyncSchedulers() {
130
+ asyncSchedulersFrozen = false;
131
+ }
132
+ function canceledTimeoutHandle() {
133
+ const handle = originals.setTimeout.call(globalThis, () => { }, 0);
134
+ originals.clearTimeout.call(globalThis, handle);
135
+ return handle;
136
+ }
137
+ function canceledIntervalHandle() {
138
+ const handle = originals.setInterval.call(globalThis, () => { }, 0);
139
+ originals.clearInterval.call(globalThis, handle);
140
+ return handle;
141
+ }
142
+ function canceledImmediateHandle() {
143
+ if (!originals.setImmediate || !originals.clearImmediate)
144
+ return undefined;
145
+ const handle = originals.setImmediate.call(globalThis, () => { });
146
+ originals.clearImmediate.call(globalThis, handle);
147
+ return handle;
148
+ }
149
+ function canceledAnimationFrameHandle() {
150
+ if (!originals.requestAnimationFrame || !originals.cancelAnimationFrame)
151
+ return 0;
152
+ const handle = originals.requestAnimationFrame.call(globalThis, () => { });
153
+ originals.cancelAnimationFrame.call(globalThis, handle);
154
+ return handle;
155
+ }
156
+ effects.onReactiveBroken(freezeAsyncSchedulers);
157
+ effects.onReactiveReset(resumeAsyncSchedulers);
100
158
  function patchedThen(onFulfilled, onRejected) {
101
159
  const context = promiseContexts.get(this) || captureRestorers();
102
160
  const nextPromise = originals.then.call(this, wrap(onFulfilled, context), wrap(onRejected, context));
@@ -196,19 +254,70 @@ try {
196
254
  catch (_e) { }
197
255
  globalThis.Promise = PatchedPromise;
198
256
  globalThis.setTimeout = ((callback, ...args) => {
199
- return originals.setTimeout.call(globalThis, wrap(callback), ...args);
257
+ if (asyncSchedulersFrozen)
258
+ return canceledTimeoutHandle();
259
+ const wrapped = wrap(callback);
260
+ const handle = originals.setTimeout.call(globalThis, (...callbackArgs) => {
261
+ pendingTimeouts.delete(handle);
262
+ wrapped(...callbackArgs);
263
+ }, ...args);
264
+ pendingTimeouts.add(handle);
265
+ return handle;
266
+ });
267
+ globalThis.clearTimeout = ((handle) => {
268
+ pendingTimeouts.delete(handle);
269
+ return originals.clearTimeout.call(globalThis, handle);
200
270
  });
201
271
  globalThis.setInterval = ((callback, ...args) => {
202
- return originals.setInterval.call(globalThis, wrap(callback), ...args);
272
+ if (asyncSchedulersFrozen)
273
+ return canceledIntervalHandle();
274
+ const wrapped = wrap(callback);
275
+ const handle = originals.setInterval.call(globalThis, (...callbackArgs) => {
276
+ wrapped(...callbackArgs);
277
+ }, ...args);
278
+ pendingIntervals.add(handle);
279
+ return handle;
280
+ });
281
+ globalThis.clearInterval = ((handle) => {
282
+ pendingIntervals.delete(handle);
283
+ return originals.clearInterval.call(globalThis, handle);
203
284
  });
204
285
  if (originals.setImmediate) {
205
- globalThis.setImmediate = ((callback, ...args) => {
206
- return originals.setImmediate.call(globalThis, wrap(callback), ...args);
286
+ schedulerGlobal.setImmediate = ((callback, ...args) => {
287
+ if (asyncSchedulersFrozen)
288
+ return canceledImmediateHandle();
289
+ const wrapped = wrap(callback);
290
+ const handle = originals.setImmediate.call(globalThis, (...callbackArgs) => {
291
+ pendingImmediates.delete(handle);
292
+ wrapped(...callbackArgs);
293
+ }, ...args);
294
+ pendingImmediates.add(handle);
295
+ return handle;
296
+ });
297
+ }
298
+ if (originals.clearImmediate) {
299
+ schedulerGlobal.clearImmediate = ((handle) => {
300
+ pendingImmediates.delete(handle);
301
+ return originals.clearImmediate.call(globalThis, handle);
207
302
  });
208
303
  }
209
304
  if (originals.requestAnimationFrame) {
210
305
  globalThis.requestAnimationFrame = (callback) => {
211
- return originals.requestAnimationFrame.call(globalThis, wrap(callback));
306
+ if (asyncSchedulersFrozen)
307
+ return canceledAnimationFrameHandle();
308
+ const wrapped = wrap(callback);
309
+ const handle = originals.requestAnimationFrame.call(globalThis, (time) => {
310
+ pendingAnimationFrames.delete(handle);
311
+ wrapped(time);
312
+ });
313
+ pendingAnimationFrames.add(handle);
314
+ return handle;
315
+ };
316
+ }
317
+ if (originals.cancelAnimationFrame) {
318
+ globalThis.cancelAnimationFrame = (handle) => {
319
+ pendingAnimationFrames.delete(handle);
320
+ return originals.cancelAnimationFrame.call(globalThis, handle);
212
321
  };
213
322
  }
214
323
  if (originals.queueMicrotask) {
@@ -217,78 +326,88 @@ if (originals.queueMicrotask) {
217
326
  };
218
327
  }
219
328
 
220
- exports.AZone = proxy.AZone;
221
- exports.CompareSymbol = proxy.CompareSymbol;
222
- exports.DecoratorError = proxy.DecoratorError;
223
- exports.IterableWeakMap = proxy.IterableWeakMap;
224
- exports.IterableWeakSet = proxy.IterableWeakSet;
225
- exports.ReactiveBase = proxy.ReactiveBase;
226
- exports.ReactiveError = proxy.ReactiveError;
329
+ exports.AZone = effects.AZone;
330
+ exports.CompareSymbol = effects.CompareSymbol;
331
+ exports.DecoratorError = effects.DecoratorError;
332
+ exports.IterableWeakMap = effects.IterableWeakMap;
333
+ exports.IterableWeakSet = effects.IterableWeakSet;
334
+ exports.ReactiveBase = effects.ReactiveBase;
335
+ exports.ReactiveError = effects.ReactiveError;
227
336
  Object.defineProperty(exports, "ReactiveErrorCode", {
228
337
  enumerable: true,
229
- get: function () { return proxy.ReactiveErrorCode; }
338
+ get: function () { return effects.ReactiveErrorCode; }
230
339
  });
231
- exports.Zone = proxy.Zone;
232
- exports.ZoneAggregator = proxy.ZoneAggregator;
233
- exports.ZoneHistory = proxy.ZoneHistory;
234
- exports.addBatchCleanup = proxy.addBatchCleanup;
235
- exports.addUnreactiveProps = proxy.addUnreactiveProps;
236
- exports.arrayEquals = proxy.arrayEquals;
237
- exports.assertUntracked = proxy.assertUntracked;
238
- exports.asyncHook = proxy.asyncHook;
239
- exports.asyncHooks = proxy.asyncHooks;
240
- exports.asyncZone = proxy.asyncZone;
241
- exports.atom = proxy.atom;
242
- exports.atomic = proxy.atomic;
243
- exports.biDi = proxy.biDi;
244
- exports.captioned = proxy.captioned;
245
- exports.captured = proxy.captured;
246
- exports.caught = proxy.caught;
247
- exports.createFlavor = proxy.createFlavor;
248
- exports.debugPreset = proxy.debugPreset;
249
- exports.decorator = proxy.decorator;
250
- exports.deepCompare = proxy.deepCompare;
251
- exports.defer = proxy.defer;
252
- exports.devPreset = proxy.devPreset;
253
- exports.effect = proxy.effect;
254
- exports.effectAggregator = proxy.effectAggregator;
255
- exports.effectContext = proxy.effectContext;
256
- exports.flavorOptions = proxy.flavorOptions;
257
- exports.flavored = proxy.flavored;
258
- exports.formatCleanupReason = proxy.formatCleanupReason;
259
- exports.getActivationLog = proxy.getActivationLog;
260
- exports.getActiveEffect = proxy.getActiveEffect;
261
- exports.getState = proxy.getState;
262
- exports.hooks = proxy.hooks;
263
- exports.inheritCaption = proxy.inheritCaption;
264
- exports.isConstructor = proxy.isConstructor;
265
- exports.isDev = proxy.isDev;
266
- exports.isNonReactive = proxy.isNonReactive;
267
- exports.isObject = proxy.isObject;
268
- exports.isProd = proxy.isProd;
269
- exports.isReactive = proxy.isReactive;
270
- exports.isTest = proxy.isTest;
271
- exports.legacyDecorator = proxy.legacyDecorator;
272
- exports.link = proxy.link;
273
- exports.mixin = proxy.mixin;
274
- exports.modernDecorator = proxy.modernDecorator;
275
- exports.named = proxy.named;
276
- exports.objectToProxy = proxy.objectToProxy;
277
- exports.onEffectThrow = proxy.onEffectThrow;
278
- exports.prodPreset = proxy.prodPreset;
279
- exports.proxyToObject = proxy.proxyToObject;
280
- exports.reactive = proxy.reactive;
281
- exports.reactiveOptions = proxy.options;
282
- exports.reset = proxy.reset;
283
- exports.root = proxy.root;
284
- exports.tag = proxy.tag;
285
- exports.touched = proxy.touched;
286
- exports.touched1 = proxy.touched1;
287
- exports.unlink = proxy.unlink;
288
- exports.untracked = proxy.untracked;
289
- exports.unwrap = proxy.unwrap;
290
- exports.withEffectContext = proxy.withEffectContext;
291
- exports.zip = proxy.zip;
340
+ exports.Zone = effects.Zone;
341
+ exports.ZoneAggregator = effects.ZoneAggregator;
342
+ exports.ZoneHistory = effects.ZoneHistory;
343
+ exports.addBatchCleanup = effects.addBatchCleanup;
344
+ exports.addUnreactiveProps = effects.addUnreactiveProps;
345
+ exports.arrayEquals = effects.arrayEquals;
346
+ exports.assertUntracked = effects.assertUntracked;
347
+ exports.asyncHook = effects.asyncHook;
348
+ exports.asyncHooks = effects.asyncHooks;
349
+ exports.asyncZone = effects.asyncZone;
350
+ exports.atom = effects.atom;
351
+ exports.atomic = effects.atomic;
352
+ exports.biDi = effects.biDi;
353
+ exports.captioned = effects.captioned;
354
+ exports.captured = effects.captured;
355
+ exports.caught = effects.caught;
356
+ exports.createFlavor = effects.createFlavor;
357
+ exports.debugPreset = effects.debugPreset;
358
+ exports.decorator = effects.decorator;
359
+ exports.deepCompare = effects.deepCompare;
360
+ exports.defer = effects.defer;
361
+ exports.devPreset = effects.devPreset;
362
+ exports.effect = effects.effect;
363
+ exports.effectAggregator = effects.effectAggregator;
364
+ exports.effectContext = effects.effectContext;
365
+ exports.flavorOptions = effects.flavorOptions;
366
+ exports.flavored = effects.flavored;
367
+ exports.formatCleanupReason = effects.formatCleanupReason;
368
+ exports.getActivationLog = effects.getActivationLog;
369
+ exports.getActiveEffect = effects.getActiveEffect;
370
+ exports.getState = effects.getState;
371
+ exports.hooks = effects.hooks;
372
+ exports.inert = effects.inert;
373
+ exports.inheritCaption = effects.inheritCaption;
374
+ exports.isConstructor = effects.isConstructor;
375
+ exports.isDev = effects.isDev;
376
+ exports.isNonReactive = effects.isNonReactive;
377
+ exports.isObject = effects.isObject;
378
+ exports.isProd = effects.isProd;
379
+ exports.isReactive = effects.isReactive;
380
+ exports.isReactiveBroken = effects.isReactiveBroken;
381
+ exports.isTest = effects.isTest;
382
+ exports.legacyDecorator = effects.legacyDecorator;
383
+ exports.link = effects.link;
384
+ exports.markRaw = effects.markRaw;
385
+ exports.markRawProps = effects.markRawProps;
386
+ exports.mixin = effects.mixin;
387
+ exports.modernDecorator = effects.modernDecorator;
388
+ exports.named = effects.named;
389
+ exports.objectToProxy = effects.objectToProxy;
390
+ exports.onEffectThrow = effects.onEffectThrow;
391
+ exports.onReactiveBroken = effects.onReactiveBroken;
392
+ exports.onReactiveReset = effects.onReactiveReset;
393
+ exports.prodPreset = effects.prodPreset;
394
+ exports.proxyToObject = effects.proxyToObject;
395
+ exports.reactive = effects.reactive;
396
+ exports.reactiveOptions = effects.options;
397
+ exports.readonlyReactive = effects.readonlyReactive;
398
+ exports.reset = effects.reset;
399
+ exports.root = effects.root;
400
+ exports.shallowReactive = effects.shallowReactive;
401
+ exports.tag = effects.tag;
402
+ exports.toRaw = effects.toRaw;
403
+ exports.touched = effects.touched;
404
+ exports.touched1 = effects.touched1;
405
+ exports.unlink = effects.unlink;
406
+ exports.untracked = effects.untracked;
407
+ exports.unwrap = effects.unwrap;
408
+ exports.withEffectContext = effects.withEffectContext;
409
+ exports.wrapInert = effects.wrapInert;
410
+ exports.zip = effects.zip;
292
411
  exports.ArrayReadForward = index.ArrayReadForward;
293
412
  exports.Destroyable = index.Destroyable;
294
413
  exports.DestructionError = index.DestructionError;
@@ -1 +1 @@
1
- {"version":3,"file":"browser.cjs","sources":["../src/async/browser.ts"],"sourcesContent":["import { asyncHooks, hooks, type Restorer } from '.'\n\nconst promiseContexts = new WeakMap<Promise<any>, Set<Restorer>>()\n\n// [HACK]: Sanitization\n// If a Promise is created inside the zone, it carries the \"Sticky\" zone context.\n// If returned to the outer scope, that context leaks. We wrap it in a new Promise\n// created here (in the outer scope) to break the chain and sanitize the return value.\n// See BROWSER_ASYNC_POLYFILL.md for full details.\nasyncHooks.sanitizePromise = (res: any) => {\n\tif (res && typeof (res as any).then === 'function') {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\t;(res as any).then(resolve, reject)\n\t\t\t}, 0)\n\t\t})\n\t}\n\treturn res\n}\n\nfunction captureRestorers() {\n\tconst restorers = new Set<Restorer>()\n\tfor (const hook of hooks) {\n\t\tconst restorer = hook()\n\t\tif (restorer) restorers.add(restorer)\n\t}\n\treturn restorers\n}\n\nfunction wrap<Args extends any[], R>(\n\tfn: ((...args: Args) => R) | null | undefined,\n\tcapturedRestorers?: Set<Restorer>\n) {\n\tif (typeof fn !== 'function') return fn\n\tconst restorers = capturedRestorers || captureRestorers()\n\treturn function (this: any, ...args: Args) {\n\t\tconst undoers: (() => void)[] = []\n\t\tfor (const restore of restorers) undoers.push(restore())\n\t\ttry {\n\t\t\treturn fn.apply(this, args)\n\t\t} finally {\n\t\t\t/* cf BROWSER_ASYNC_POLYFILL.md\n\t\t\t// Note: my fear about this code: in between 2~3~4 microtask waits, some other microtasks might have started, stopped, ...\n\t\t\t// We might be in the middle of another promise hook trying to setup the zone\n\t\t\t// TODO We might wish to have a flag :asyncZone.acquired - like a semaphore - that we falsify here and set back when we setup the zone\n\t\t\t// - but this might perhaps be an overkill creating more problems than it solves\n\t\t\tif (originals.queueMicrotask) {\n\t\t\t\t// Double microtask ensures we run after the first await resumption microtask\n\t\t\t\toriginals.queueMicrotask.call(globalThis, () => {\n\t\t\t\t\toriginals.queueMicrotask.call(globalThis, () => {\n\t\t\t\t\t\toriginals.queueMicrotask.call(globalThis, () => {\n\t\t\t\t\t\t\tfor (let i = undoers.length - 1; i >= 0; i--) undoers[i]()\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tfor (let i = undoers.length - 1; i >= 0; i--) undoers[i]()\n\t\t\t}*/\n\t\t}\n\t}\n}\n\nconst GLOBAL_ORIGINALS = Symbol.for('mutts.originals')\nconst GLOBAL_PROMISE = Symbol.for('mutts.OriginalPromise')\n\nlet originals: any\nlet OriginalPromise: any\n\nif ((globalThis as any)[GLOBAL_ORIGINALS]) {\n\toriginals = (globalThis as any)[GLOBAL_ORIGINALS]\n\tOriginalPromise = (globalThis as any)[GLOBAL_PROMISE]\n} else {\n\tOriginalPromise = globalThis.Promise\n\toriginals = {\n\t\t// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching\n\t\tthen: OriginalPromise.prototype.then,\n\t\tcatch: OriginalPromise.prototype.catch,\n\t\tfinally: OriginalPromise.prototype.finally,\n\t\tresolve: OriginalPromise.resolve,\n\t\treject: OriginalPromise.reject,\n\t\tall: OriginalPromise.all,\n\t\tallSettled: (OriginalPromise as any).allSettled,\n\t\trace: OriginalPromise.race,\n\t\tany: (OriginalPromise as any).any,\n\t\tsetTimeout: globalThis.setTimeout,\n\t\tsetInterval: globalThis.setInterval,\n\t\tsetImmediate: (globalThis as any).setImmediate,\n\t\trequestAnimationFrame: (globalThis as any).requestAnimationFrame,\n\t\tqueueMicrotask: globalThis.queueMicrotask,\n\t}\n\t;(globalThis as any)[GLOBAL_ORIGINALS] = originals\n\t;(globalThis as any)[GLOBAL_PROMISE] = OriginalPromise\n}\n\n// Ensure modern statics are captured even if originals was cached from an older version\nif (!originals.allSettled) originals.allSettled = (OriginalPromise as any).allSettled\nif (!originals.any) originals.any = (OriginalPromise as any).any\nif (!originals.race) originals.race = OriginalPromise.race\n\nfunction patchedThen(this: any, onFulfilled: any, onRejected: any) {\n\tconst context = promiseContexts.get(this) || captureRestorers()\n\tconst nextPromise = originals.then.call(\n\t\tthis,\n\t\twrap(onFulfilled, context),\n\t\twrap(onRejected, context)\n\t)\n\tif (context.size > 0) promiseContexts.set(nextPromise, context)\n\treturn nextPromise\n}\n\nfunction patchedCatch(this: any, onRejected: any) {\n\tconst context = promiseContexts.get(this) || captureRestorers()\n\tconst nextPromise = originals.catch.call(this, wrap(onRejected, context))\n\tif (context.size > 0) promiseContexts.set(nextPromise, context)\n\treturn nextPromise\n}\n\nfunction patchedFinally(this: any, onFinally: any) {\n\tconst context = promiseContexts.get(this) || captureRestorers()\n\tconst nextPromise = originals.finally.call(this, wrap(onFinally, context))\n\tif (context.size > 0) promiseContexts.set(nextPromise, context)\n\treturn nextPromise\n}\n\nfunction PatchedPromise<T>(\n\tthis: any,\n\texecutor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void\n) {\n\tif (typeof executor === 'function') {\n\t\tconst p = new OriginalPromise((resolve, reject) => {\n\t\t\tconst wrappedResolve = wrap(resolve)\n\t\t\tconst wrappedReject = wrap(reject)\n\t\t\texecutor(wrappedResolve, wrappedReject)\n\t\t})\n\t\tconst context = captureRestorers()\n\t\tpromiseContexts.set(p, context) // Always set, even if empty (Sticky Root)\n\t\treturn p\n\t}\n\treturn new OriginalPromise(executor)\n}\n\n// Copy statics\nObject.assign(PatchedPromise, OriginalPromise as any)\n\n// Inherit prototype for instanceof checks\nPatchedPromise.prototype = OriginalPromise.prototype\n\nPatchedPromise.resolve = (<T>(value?: T | PromiseLike<T>): Promise<T> => {\n\tconst p = originals.resolve.call(OriginalPromise, value) as Promise<T>\n\tconst context = captureRestorers()\n\t// Ensure we don't overwrite if it already has context (e.g. from constructor)\n\tif (context.size > 0 && !promiseContexts.has(p)) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.reject = (<T = never>(reason?: any): Promise<T> => {\n\tconst p = originals.reject.call(OriginalPromise, reason) as Promise<T>\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.all = (<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>[]> => {\n\tconst p = originals.all.call(OriginalPromise, values) as Promise<Awaited<T>[]>\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.allSettled = (<T>(\n\tvalues: Iterable<T | PromiseLike<T>>\n): Promise<PromiseSettledResult<Awaited<T>>[]> => {\n\tconst p = (originals.allSettled as any).call(OriginalPromise, values)\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.race = (<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>> => {\n\tconst p = originals.race.call(OriginalPromise, values) as Promise<Awaited<T>>\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.any = (<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>> => {\n\tconst p = (originals.any as any).call(OriginalPromise, values)\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\n// Only apply patches if not already applied (or re-apply safely)\n// Note: OriginalPromise.prototype might be shared if we used the global one.\n// We must ensure we don't patch it twice if it's the SAME object.\nif (OriginalPromise.prototype.then !== patchedThen) {\n\t// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching\n\tOriginalPromise.prototype.then = patchedThen as any\n\tOriginalPromise.prototype.catch = patchedCatch as any\n\tOriginalPromise.prototype.finally = patchedFinally as any\n}\n\ntry {\n\tObject.defineProperty(OriginalPromise, Symbol.species, {\n\t\tget: () => PatchedPromise,\n\t\tconfigurable: true,\n\t})\n} catch (_e) {}\n\n;(globalThis as any).Promise = PatchedPromise\n\nglobalThis.setTimeout = ((callback: Function, ...args: any[]) => {\n\treturn originals.setTimeout.call(globalThis, wrap(callback as any), ...args)\n}) as any\n\nglobalThis.setInterval = ((callback: Function, ...args: any[]) => {\n\treturn originals.setInterval.call(globalThis, wrap(callback as any), ...args)\n}) as any\n\nif (originals.setImmediate) {\n\t;(globalThis as any).setImmediate = ((callback: Function, ...args: any[]) => {\n\t\treturn originals.setImmediate.call(globalThis, wrap(callback as any), ...args)\n\t}) as any\n}\n\nif (originals.requestAnimationFrame) {\n\tglobalThis.requestAnimationFrame = (callback: FrameRequestCallback) => {\n\t\treturn originals.requestAnimationFrame.call(globalThis, wrap(callback))\n\t}\n}\n\nif (originals.queueMicrotask) {\n\tglobalThis.queueMicrotask = (callback: VoidFunction): void => {\n\t\toriginals.queueMicrotask.call(globalThis, wrap(callback))\n\t}\n}\n"],"names":["asyncHooks","hooks"],"mappings":"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"}
1
+ {"version":3,"file":"browser.cjs","sources":["../src/async/browser.ts"],"sourcesContent":["import { onReactiveBroken, onReactiveReset } from '../reactive/effects'\nimport { asyncHooks, hooks, type Restorer } from '.'\n\nconst promiseContexts = new WeakMap<Promise<any>, Set<Restorer>>()\n\n// [HACK]: Sanitization\n// If a Promise is created inside the zone, it carries the \"Sticky\" zone context.\n// If returned to the outer scope, that context leaks. We wrap it in a new Promise\n// created here (in the outer scope) to break the chain and sanitize the return value.\n// See BROWSER_ASYNC_POLYFILL.md for full details.\nasyncHooks.sanitizePromise = (res: any) => {\n\tif (res && typeof (res as any).then === 'function') {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\t;(res as any).then(resolve, reject)\n\t\t\t}, 0)\n\t\t})\n\t}\n\treturn res\n}\n\nfunction captureRestorers() {\n\tconst restorers = new Set<Restorer>()\n\tfor (const hook of hooks) {\n\t\tconst restorer = hook()\n\t\tif (restorer) restorers.add(restorer)\n\t}\n\treturn restorers\n}\n\nfunction wrap<Args extends any[], R>(\n\tfn: ((...args: Args) => R) | null | undefined,\n\tcapturedRestorers?: Set<Restorer>\n) {\n\tif (typeof fn !== 'function') return fn\n\tconst restorers = capturedRestorers || captureRestorers()\n\treturn function (this: any, ...args: Args) {\n\t\tconst undoers: (() => void)[] = []\n\t\tfor (const restore of restorers) undoers.push(restore())\n\t\ttry {\n\t\t\treturn fn.apply(this, args)\n\t\t} finally {\n\t\t\t// Browser async context is backed by sticky Promise metadata. Running undoers here\n\t\t\t// breaks await propagation and can orphan reactive resource observers.\n\t\t}\n\t}\n}\n\nconst GLOBAL_ORIGINALS = Symbol.for('mutts.originals')\nconst GLOBAL_PROMISE = Symbol.for('mutts.OriginalPromise')\n\ntype SchedulerGlobal = typeof globalThis & {\n\tsetImmediate?: typeof setImmediate\n\tclearImmediate?: typeof clearImmediate\n\trequestAnimationFrame?: typeof requestAnimationFrame\n\tcancelAnimationFrame?: typeof cancelAnimationFrame\n}\n\nconst schedulerGlobal = globalThis as SchedulerGlobal\n\nlet originals: any\nlet OriginalPromise: any\n\nif ((globalThis as any)[GLOBAL_ORIGINALS]) {\n\toriginals = (globalThis as any)[GLOBAL_ORIGINALS]\n\tOriginalPromise = (globalThis as any)[GLOBAL_PROMISE]\n} else {\n\tOriginalPromise = globalThis.Promise\n\toriginals = {\n\t\t// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching\n\t\tthen: OriginalPromise.prototype.then,\n\t\tcatch: OriginalPromise.prototype.catch,\n\t\tfinally: OriginalPromise.prototype.finally,\n\t\tresolve: OriginalPromise.resolve,\n\t\treject: OriginalPromise.reject,\n\t\tall: OriginalPromise.all,\n\t\tallSettled: (OriginalPromise as any).allSettled,\n\t\trace: OriginalPromise.race,\n\t\tany: (OriginalPromise as any).any,\n\t\tsetTimeout: globalThis.setTimeout,\n\t\tclearTimeout: globalThis.clearTimeout,\n\t\tsetInterval: globalThis.setInterval,\n\t\tclearInterval: globalThis.clearInterval,\n\t\tsetImmediate: schedulerGlobal.setImmediate,\n\t\tclearImmediate: schedulerGlobal.clearImmediate,\n\t\trequestAnimationFrame: schedulerGlobal.requestAnimationFrame,\n\t\tcancelAnimationFrame: schedulerGlobal.cancelAnimationFrame,\n\t\tqueueMicrotask: globalThis.queueMicrotask,\n\t}\n\t;(globalThis as any)[GLOBAL_ORIGINALS] = originals\n\t;(globalThis as any)[GLOBAL_PROMISE] = OriginalPromise\n}\n\n// Ensure modern statics are captured even if originals was cached from an older version\nif (!originals.allSettled) originals.allSettled = (OriginalPromise as any).allSettled\nif (!originals.any) originals.any = (OriginalPromise as any).any\nif (!originals.race) originals.race = OriginalPromise.race\nif (!originals.clearTimeout) originals.clearTimeout = globalThis.clearTimeout\nif (!originals.clearInterval) originals.clearInterval = globalThis.clearInterval\nif (!originals.clearImmediate) originals.clearImmediate = schedulerGlobal.clearImmediate\nif (!originals.cancelAnimationFrame)\n\toriginals.cancelAnimationFrame = schedulerGlobal.cancelAnimationFrame\n\nconst pendingTimeouts = new Set<unknown>()\nconst pendingIntervals = new Set<unknown>()\nconst pendingImmediates = new Set<unknown>()\nconst pendingAnimationFrames = new Set<unknown>()\nlet asyncSchedulersFrozen = false\n\nfunction clearPendingSchedulers() {\n\tfor (const handle of Array.from(pendingTimeouts)) originals.clearTimeout.call(globalThis, handle)\n\tfor (const handle of Array.from(pendingIntervals))\n\t\toriginals.clearInterval.call(globalThis, handle)\n\tif (originals.clearImmediate) {\n\t\tfor (const handle of Array.from(pendingImmediates)) {\n\t\t\toriginals.clearImmediate.call(globalThis, handle)\n\t\t}\n\t}\n\tif (originals.cancelAnimationFrame) {\n\t\tfor (const handle of Array.from(pendingAnimationFrames)) {\n\t\t\toriginals.cancelAnimationFrame.call(globalThis, handle)\n\t\t}\n\t}\n\tpendingTimeouts.clear()\n\tpendingIntervals.clear()\n\tpendingImmediates.clear()\n\tpendingAnimationFrames.clear()\n}\n\nfunction freezeAsyncSchedulers() {\n\tif (asyncSchedulersFrozen) return\n\tasyncSchedulersFrozen = true\n\tclearPendingSchedulers()\n}\n\nfunction resumeAsyncSchedulers() {\n\tasyncSchedulersFrozen = false\n}\n\nfunction canceledTimeoutHandle() {\n\tconst handle = originals.setTimeout.call(globalThis, () => {}, 0)\n\toriginals.clearTimeout.call(globalThis, handle)\n\treturn handle\n}\n\nfunction canceledIntervalHandle() {\n\tconst handle = originals.setInterval.call(globalThis, () => {}, 0)\n\toriginals.clearInterval.call(globalThis, handle)\n\treturn handle\n}\n\nfunction canceledImmediateHandle() {\n\tif (!originals.setImmediate || !originals.clearImmediate) return undefined\n\tconst handle = originals.setImmediate.call(globalThis, () => {})\n\toriginals.clearImmediate.call(globalThis, handle)\n\treturn handle\n}\n\nfunction canceledAnimationFrameHandle() {\n\tif (!originals.requestAnimationFrame || !originals.cancelAnimationFrame) return 0\n\tconst handle = originals.requestAnimationFrame.call(globalThis, () => {})\n\toriginals.cancelAnimationFrame.call(globalThis, handle)\n\treturn handle\n}\n\nonReactiveBroken(freezeAsyncSchedulers)\nonReactiveReset(resumeAsyncSchedulers)\n\nfunction patchedThen(this: any, onFulfilled: any, onRejected: any) {\n\tconst context = promiseContexts.get(this) || captureRestorers()\n\tconst nextPromise = originals.then.call(\n\t\tthis,\n\t\twrap(onFulfilled, context),\n\t\twrap(onRejected, context)\n\t)\n\tif (context.size > 0) promiseContexts.set(nextPromise, context)\n\treturn nextPromise\n}\n\nfunction patchedCatch(this: any, onRejected: any) {\n\tconst context = promiseContexts.get(this) || captureRestorers()\n\tconst nextPromise = originals.catch.call(this, wrap(onRejected, context))\n\tif (context.size > 0) promiseContexts.set(nextPromise, context)\n\treturn nextPromise\n}\n\nfunction patchedFinally(this: any, onFinally: any) {\n\tconst context = promiseContexts.get(this) || captureRestorers()\n\tconst nextPromise = originals.finally.call(this, wrap(onFinally, context))\n\tif (context.size > 0) promiseContexts.set(nextPromise, context)\n\treturn nextPromise\n}\n\nfunction PatchedPromise<T>(\n\tthis: any,\n\texecutor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void\n) {\n\tif (typeof executor === 'function') {\n\t\tconst p = new OriginalPromise((resolve, reject) => {\n\t\t\tconst wrappedResolve = wrap(resolve)\n\t\t\tconst wrappedReject = wrap(reject)\n\t\t\texecutor(wrappedResolve, wrappedReject)\n\t\t})\n\t\tconst context = captureRestorers()\n\t\tpromiseContexts.set(p, context) // Always set, even if empty (Sticky Root)\n\t\treturn p\n\t}\n\treturn new OriginalPromise(executor)\n}\n\n// Copy statics\nObject.assign(PatchedPromise, OriginalPromise as any)\n\n// Inherit prototype for instanceof checks\nPatchedPromise.prototype = OriginalPromise.prototype\n\nPatchedPromise.resolve = (<T>(value?: T | PromiseLike<T>): Promise<T> => {\n\tconst p = originals.resolve.call(OriginalPromise, value) as Promise<T>\n\tconst context = captureRestorers()\n\t// Ensure we don't overwrite if it already has context (e.g. from constructor)\n\tif (context.size > 0 && !promiseContexts.has(p)) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.reject = (<T = never>(reason?: any): Promise<T> => {\n\tconst p = originals.reject.call(OriginalPromise, reason) as Promise<T>\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.all = (<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>[]> => {\n\tconst p = originals.all.call(OriginalPromise, values) as Promise<Awaited<T>[]>\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.allSettled = (<T>(\n\tvalues: Iterable<T | PromiseLike<T>>\n): Promise<PromiseSettledResult<Awaited<T>>[]> => {\n\tconst p = (originals.allSettled as any).call(OriginalPromise, values)\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.race = (<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>> => {\n\tconst p = originals.race.call(OriginalPromise, values) as Promise<Awaited<T>>\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.any = (<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>> => {\n\tconst p = (originals.any as any).call(OriginalPromise, values)\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\n// Only apply patches if not already applied (or re-apply safely)\n// Note: OriginalPromise.prototype might be shared if we used the global one.\n// We must ensure we don't patch it twice if it's the SAME object.\nif (OriginalPromise.prototype.then !== patchedThen) {\n\t// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching\n\tOriginalPromise.prototype.then = patchedThen as any\n\tOriginalPromise.prototype.catch = patchedCatch as any\n\tOriginalPromise.prototype.finally = patchedFinally as any\n}\n\ntry {\n\tObject.defineProperty(OriginalPromise, Symbol.species, {\n\t\tget: () => PatchedPromise,\n\t\tconfigurable: true,\n\t})\n} catch (_e) {}\n\n;(globalThis as any).Promise = PatchedPromise\n\nglobalThis.setTimeout = ((callback: Function, ...args: any[]) => {\n\tif (asyncSchedulersFrozen) return canceledTimeoutHandle()\n\tconst wrapped = wrap(callback as any)\n\tconst handle = originals.setTimeout.call(\n\t\tglobalThis,\n\t\t(...callbackArgs: any[]) => {\n\t\t\tpendingTimeouts.delete(handle)\n\t\t\twrapped(...callbackArgs)\n\t\t},\n\t\t...args\n\t)\n\tpendingTimeouts.add(handle)\n\treturn handle\n}) as typeof globalThis.setTimeout\n\nglobalThis.clearTimeout = ((handle?: unknown) => {\n\tpendingTimeouts.delete(handle)\n\treturn originals.clearTimeout.call(globalThis, handle)\n}) as typeof globalThis.clearTimeout\n\nglobalThis.setInterval = ((callback: Function, ...args: any[]) => {\n\tif (asyncSchedulersFrozen) return canceledIntervalHandle()\n\tconst wrapped = wrap(callback as any)\n\tconst handle = originals.setInterval.call(\n\t\tglobalThis,\n\t\t(...callbackArgs: any[]) => {\n\t\t\twrapped(...callbackArgs)\n\t\t},\n\t\t...args\n\t)\n\tpendingIntervals.add(handle)\n\treturn handle\n}) as typeof globalThis.setInterval\n\nglobalThis.clearInterval = ((handle?: unknown) => {\n\tpendingIntervals.delete(handle)\n\treturn originals.clearInterval.call(globalThis, handle)\n}) as typeof globalThis.clearInterval\n\nif (originals.setImmediate) {\n\tschedulerGlobal.setImmediate = ((callback: Function, ...args: any[]) => {\n\t\tif (asyncSchedulersFrozen) return canceledImmediateHandle()\n\t\tconst wrapped = wrap(callback as any)\n\t\tconst handle = originals.setImmediate.call(\n\t\t\tglobalThis,\n\t\t\t(...callbackArgs: any[]) => {\n\t\t\t\tpendingImmediates.delete(handle)\n\t\t\t\twrapped(...callbackArgs)\n\t\t\t},\n\t\t\t...args\n\t\t)\n\t\tpendingImmediates.add(handle)\n\t\treturn handle\n\t}) as typeof setImmediate\n}\n\nif (originals.clearImmediate) {\n\tschedulerGlobal.clearImmediate = ((handle?: unknown) => {\n\t\tpendingImmediates.delete(handle)\n\t\treturn originals.clearImmediate.call(globalThis, handle)\n\t}) as typeof clearImmediate\n}\n\nif (originals.requestAnimationFrame) {\n\tglobalThis.requestAnimationFrame = (callback: FrameRequestCallback) => {\n\t\tif (asyncSchedulersFrozen) return canceledAnimationFrameHandle()\n\t\tconst wrapped = wrap(callback)\n\t\tconst handle = originals.requestAnimationFrame.call(globalThis, (time: DOMHighResTimeStamp) => {\n\t\t\tpendingAnimationFrames.delete(handle)\n\t\t\twrapped(time)\n\t\t})\n\t\tpendingAnimationFrames.add(handle)\n\t\treturn handle\n\t}\n}\n\nif (originals.cancelAnimationFrame) {\n\tglobalThis.cancelAnimationFrame = (handle: number) => {\n\t\tpendingAnimationFrames.delete(handle)\n\t\treturn originals.cancelAnimationFrame.call(globalThis, handle)\n\t}\n}\n\nif (originals.queueMicrotask) {\n\tglobalThis.queueMicrotask = (callback: VoidFunction): void => {\n\t\toriginals.queueMicrotask.call(globalThis, wrap(callback))\n\t}\n}\n"],"names":["asyncHooks","hooks","onReactiveBroken","onReactiveReset"],"mappings":"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"}