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
package/dist/browser.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { c as EffectAccess, d as EffectCloser, S as ScopedCallback, e as State, a as Evolution, b as EffectCleanup, Z as ZoneAggregator, C as CleanupReason, H as HistoryValue, E as EffectTrigger, f as CatchFunction, g as EffectOptions } from './types.js';
2
- export { A as AZone, G as GetterWrapper, P as PropTrigger, R as ReactiveError, h as ReactiveErrorCode, i as Zone, j as ZoneHistory, k as asyncZone, l as debugPreset, m as devPreset, n as formatCleanupReason, o as isReactive, p as objectToProxy, q as prodPreset, r as proxyToObject, s as reactiveOptions, u as unwrap } from './types.js';
2
+ export { A as AZone, h as CycleHandlingMode, D as DeprecatedCycleHandlingMode, G as GetterWrapper, P as PropTrigger, R as ReactiveError, i as ReactiveErrorCode, j as SchedulerMode, k as Zone, l as ZoneHistory, m as asyncZone, n as debugPreset, o as devPreset, p as formatCleanupReason, q as isReactive, r as objectToProxy, s as prodPreset, t as proxyToObject, u as reactiveOptions, v as toRaw, w as unwrap } from './types.js';
3
3
 
4
4
  type Restorer = () => () => void;
5
5
  type Hook = () => Restorer;
@@ -243,15 +243,15 @@ declare class Eventful<Events extends EventsBase> {
243
243
  emit: (<EventType extends keyof Events>(event: EventType, ...args: Parameters<Events[EventType]>) => void) & Events;
244
244
  }
245
245
 
246
- type AnyFunction = (...args: any[]) => any;
247
- type CaptionedOptions<T extends AnyFunction> = {
246
+ type AnyFunction$1 = (...args: any[]) => any;
247
+ type CaptionedOptions<T extends AnyFunction$1> = {
248
248
  callbackIndex?: number;
249
249
  name?: string;
250
250
  rename?: (caption: string, callback: Function) => unknown;
251
251
  warn?: (message: string) => void;
252
252
  shouldWarnAnonymous?: (callback: Function, args: Parameters<T>) => boolean;
253
253
  };
254
- type Captioned<T extends AnyFunction> = T & ((strings: TemplateStringsArray, ...values: readonly unknown[]) => T);
254
+ type Captioned<T extends AnyFunction$1> = T & ((strings: TemplateStringsArray, ...values: readonly unknown[]) => T);
255
255
  /**
256
256
  * Wraps a callback-first function so it also accepts a tagged-template call form.
257
257
  *
@@ -271,8 +271,8 @@ type Captioned<T extends AnyFunction> = T & ((strings: TemplateStringsArray, ...
271
271
  * Anonymous uncaptioned callbacks may trigger a warning depending on
272
272
  * `shouldWarnAnonymous`.
273
273
  */
274
- declare function captioned<T extends AnyFunction>(fn: T, options?: CaptionedOptions<T>): Captioned<T>;
275
- declare function inheritCaption<T extends AnyFunction>(source: AnyFunction, target: T): T;
274
+ declare function captioned<T extends AnyFunction$1>(fn: T, options?: CaptionedOptions<T>): Captioned<T>;
275
+ declare function inheritCaption<T extends AnyFunction$1>(source: AnyFunction$1, target: T): T;
276
276
  /**
277
277
  * Creates a flavored (extensible) version of a function with chainable property modifiers.
278
278
  */
@@ -592,6 +592,7 @@ declare class IterableWeakSet<K extends WeakKey> implements Set<K> {
592
592
  [Symbol.iterator](): SetIterator<K>;
593
593
  readonly [Symbol.toStringTag]: string;
594
594
  union<U>(other: ReadonlySetLike<U>): Set<K | U>;
595
+ union(...sets: Set<K>[]): this;
595
596
  intersection<U>(other: ReadonlySetLike<U>): Set<K & U>;
596
597
  difference<U>(other: ReadonlySetLike<U>): Set<K>;
597
598
  symmetricDifference<U>(other: ReadonlySetLike<U>): Set<K | U>;
@@ -727,6 +728,15 @@ interface Lift {
727
728
  * @returns A reactive object synchronized with the callback's result, with a [cleanup] property to stop tracking
728
729
  */
729
730
  declare const lift: Lift;
731
+ /**
732
+ * Position object provided to array morph callbacks.
733
+ *
734
+ * @property index - Current index of the item in the source array. The object is stable
735
+ * per item and its `index` updates reactively when the item moves due to shifts/reorders.
736
+ */
737
+ type MorphPosition = {
738
+ index: number;
739
+ };
730
740
  /**
731
741
  * Options for `morph` and its variants.
732
742
  *
@@ -746,7 +756,7 @@ type MorphOptions<I> = {
746
756
  * @see morphRecord
747
757
  */
748
758
  type Morph = {
749
- <I, O>(source: readonly I[] | (() => readonly I[]), fn: (arg: I, access?: EffectAccess) => O, options?: MorphOptions<I>): readonly O[];
759
+ <I, O>(source: readonly I[] | (() => readonly I[]), fn: (arg: I, position: MorphPosition, access?: EffectAccess) => O, options?: MorphOptions<I>): readonly O[];
750
760
  <K, V, O>(source: Map<K, V>, fn: (arg: V, key: K, access?: EffectAccess) => O, options?: MorphOptions<V>): Map<K, O>;
751
761
  <S extends Record<PropertyKey, any>, O>(source: S, fn: (arg: S[keyof S], key: keyof S, access?: EffectAccess) => O, options?: MorphOptions<S[keyof S]>): {
752
762
  [K in keyof S]: O;
@@ -901,6 +911,12 @@ declare function getActivationLog(): Omit<ActivationRecord, "batchId">[];
901
911
  declare function caught(onThrow: CatchFunction, effect?: EffectTrigger): void;
902
912
  /** @deprecated Use `caught` instead */
903
913
  declare const onEffectThrow: typeof caught;
914
+ /** True after an unrecoverable reactive failure until `reset()`. */
915
+ declare function isReactiveBroken(): boolean;
916
+ type ReactiveBrokenHandler = (error: unknown) => void;
917
+ type ReactiveResetHandler = () => void;
918
+ declare function onReactiveBroken(handler: ReactiveBrokenHandler): () => void;
919
+ declare function onReactiveReset(handler: ReactiveResetHandler): () => void;
904
920
  /**
905
921
  * Adds a cleanup function to be called when the current batch of effects completes
906
922
  * @param cleanup - The cleanup function to add
@@ -999,6 +1015,16 @@ declare const effect: Effect;
999
1015
  */
1000
1016
  type RootRunner = <T>(fn: () => T) => T;
1001
1017
  declare const untracked: Captioned<RootRunner>;
1018
+ type AnyFunction = (this: any, ...args: any[]) => any;
1019
+ declare function wrapInert<Fn extends AnyFunction>(fn: Fn): Fn;
1020
+ type Inert = (<T>(fn: () => T) => T) & MethodDecorator & ((target: any, context: ClassMethodDecoratorContext) => any);
1021
+ /**
1022
+ * Executes a function with fast-path reads that bypass proxy overhead and dependency tracking.
1023
+ * Writes remain fully reactive. Uses a counter for safe nesting.
1024
+ * Can also decorate methods so the whole method body runs inertly.
1025
+ * @param fn - The function to execute
1026
+ */
1027
+ declare const inert: Inert;
1002
1028
  /**
1003
1029
  * Executes a function from a virgin/root context - no parent effect, no tracking
1004
1030
  * Creates completely independent effects that won't be cleaned up by any parent
@@ -1082,6 +1108,9 @@ declare const memoize: ReturnType<typeof makeMemoizeDecorator> & {
1082
1108
  * If a set is provided, merges with existing unreactive properties (never overrides true).
1083
1109
  */
1084
1110
  declare function addUnreactiveProps<T extends object>(proto: T, set?: Iterable<PropertyKey>): T;
1111
+ declare function nonReactive<T extends object[]>(...obj: T): T[0];
1112
+ declare const markRaw: typeof nonReactive;
1113
+ declare const markRawProps: typeof addUnreactiveProps;
1085
1114
  declare function isNonReactive(obj: any): boolean;
1086
1115
 
1087
1116
  type SubProxy = {
@@ -1100,11 +1129,15 @@ declare const ReactiveBase: (new (...args: any[]) => {
1100
1129
  [x: string]: any;
1101
1130
  } & Base);
1102
1131
  declare function reactiveObject<T>(anyTarget: T, subProxy?: SubProxy): T;
1132
+ declare function shallowReactiveObject<T>(anyTarget: T): T;
1133
+ declare function readonlyReactiveObject<T>(anyTarget: T): T;
1103
1134
  /**
1104
1135
  * Main decorator for making classes reactive
1105
1136
  * Automatically makes class instances reactive when created
1106
1137
  */
1107
1138
  declare const reactive: LegacyClassDecorator<new (...args: any[]) => any> & ModernClassDecorator<new (...args: any[]) => any> & typeof reactiveObject;
1139
+ declare const shallowReactive: typeof shallowReactiveObject;
1140
+ declare const readonlyReactive: typeof readonlyReactiveObject;
1108
1141
 
1109
1142
  /**
1110
1143
  * Provides type-safe access to a source object's property within the organized callback.
@@ -1403,5 +1436,5 @@ declare const isDev: boolean;
1403
1436
  declare const isProd: boolean;
1404
1437
  declare const isTest: boolean;
1405
1438
 
1406
- export { ArrayReadForward, CleanupReason, CompareSymbol, DecoratorError, Destroyable, DestructionError, EffectAccess, EffectCleanup, EffectCloser, EffectOptions, EffectTrigger, Eventful, Evolution, HistoryValue, Indexable, IterableWeakMap, IterableWeakSet, ReactiveBase, ScopedCallback, ZoneAggregator, addBatchCleanup, addUnreactiveProps, allocated, allocatedValues, arrayDiff, arrayEquals, assertUntracked, asyncHook, asyncHooks, atom, atomic, attend, biDi, cache, cached, callOnGC, captioned, captured, caught, chainPromise, createFlavor, debounce, decorator, deepCompare, deepWatch, defer, deprecated, descriptor, destructor, effect, effectAggregator, effectContext, flavorOptions, flavored, forwardArray, getActivationLog, getActiveEffect, getAt, getState, hooks$1 as hooks, inheritCaption, isCached, isConstructor, isDev, isNonReactive, isObject, isProd, isTest, legacyDecorator, lift, link, memoize, mixin, modernDecorator, morph, named, onEffectThrow, organize, organized, profileInfo, reactive, reset, resource, root, setAt, tag, throttle, touched, touched1, unlink, unreactive, untracked, watch, when, withEffectContext, zip };
1407
- export type { ArrayDiffResult, Captioned, ContextManager, Decorator, DecoratorDescription, DecoratorFactory, EffectContext, EventsBase, GenericClassDecorator, Hook, LegacyClassDecorator, LegacyPropertyDecorator, Memoizable, MemoizableArgument, MixinClass, MixinFunction, ModernAccessorDecorator, ModernClassDecorator, ModernGetterDecorator, ModernMethodDecorator, ModernSetterDecorator, PromiseChain, Resource, Restorer };
1439
+ export { ArrayReadForward, CleanupReason, CompareSymbol, DecoratorError, Destroyable, DestructionError, EffectAccess, EffectCleanup, EffectCloser, EffectOptions, EffectTrigger, Eventful, Evolution, HistoryValue, Indexable, IterableWeakMap, IterableWeakSet, ReactiveBase, ScopedCallback, ZoneAggregator, addBatchCleanup, addUnreactiveProps, allocated, allocatedValues, arrayDiff, arrayEquals, assertUntracked, asyncHook, asyncHooks, atom, atomic, attend, biDi, cache, cached, callOnGC, captioned, captured, caught, chainPromise, createFlavor, debounce, decorator, deepCompare, deepWatch, defer, deprecated, descriptor, destructor, effect, effectAggregator, effectContext, flavorOptions, flavored, forwardArray, getActivationLog, getActiveEffect, getAt, getState, hooks$1 as hooks, inert, inheritCaption, isCached, isConstructor, isDev, isNonReactive, isObject, isProd, isReactiveBroken, isTest, legacyDecorator, lift, link, markRaw, markRawProps, memoize, mixin, modernDecorator, morph, named, onEffectThrow, onReactiveBroken, onReactiveReset, organize, organized, profileInfo, reactive, readonlyReactive, reset, resource, root, setAt, shallowReactive, tag, throttle, touched, touched1, unlink, unreactive, untracked, watch, when, withEffectContext, wrapInert, zip };
1440
+ export type { ArrayDiffResult, Captioned, ContextManager, Decorator, DecoratorDescription, DecoratorFactory, EffectContext, EventsBase, GenericClassDecorator, Hook, LegacyClassDecorator, LegacyPropertyDecorator, Memoizable, MemoizableArgument, MixinClass, MixinFunction, ModernAccessorDecorator, ModernClassDecorator, ModernGetterDecorator, ModernMethodDecorator, ModernSetterDecorator, MorphPosition, PromiseChain, Resource, Restorer };
@@ -2,8 +2,8 @@
2
2
 
3
3
  require('./debug.cjs');
4
4
  require('./browser.cjs');
5
- var index = require('./chunks/index-CAdnMJev.cjs');
6
- var proxy = require('./chunks/proxy-DBHj3kGK.cjs');
5
+ var index = require('./chunks/index-Dtj2qZ0d.cjs');
6
+ var effects = require('./chunks/effects-oUauWxxl.cjs');
7
7
 
8
8
 
9
9
 
@@ -40,76 +40,86 @@ exports.throttle = index.throttle;
40
40
  exports.unreactive = index.unreactive;
41
41
  exports.watch = index.watch;
42
42
  exports.when = index.when;
43
- exports.AZone = proxy.AZone;
44
- exports.CompareSymbol = proxy.CompareSymbol;
45
- exports.DecoratorError = proxy.DecoratorError;
46
- exports.IterableWeakMap = proxy.IterableWeakMap;
47
- exports.IterableWeakSet = proxy.IterableWeakSet;
48
- exports.ReactiveBase = proxy.ReactiveBase;
49
- exports.ReactiveError = proxy.ReactiveError;
43
+ exports.AZone = effects.AZone;
44
+ exports.CompareSymbol = effects.CompareSymbol;
45
+ exports.DecoratorError = effects.DecoratorError;
46
+ exports.IterableWeakMap = effects.IterableWeakMap;
47
+ exports.IterableWeakSet = effects.IterableWeakSet;
48
+ exports.ReactiveBase = effects.ReactiveBase;
49
+ exports.ReactiveError = effects.ReactiveError;
50
50
  Object.defineProperty(exports, "ReactiveErrorCode", {
51
51
  enumerable: true,
52
- get: function () { return proxy.ReactiveErrorCode; }
52
+ get: function () { return effects.ReactiveErrorCode; }
53
53
  });
54
- exports.Zone = proxy.Zone;
55
- exports.ZoneAggregator = proxy.ZoneAggregator;
56
- exports.ZoneHistory = proxy.ZoneHistory;
57
- exports.addBatchCleanup = proxy.addBatchCleanup;
58
- exports.addUnreactiveProps = proxy.addUnreactiveProps;
59
- exports.arrayEquals = proxy.arrayEquals;
60
- exports.assertUntracked = proxy.assertUntracked;
61
- exports.asyncHook = proxy.asyncHook;
62
- exports.asyncHooks = proxy.asyncHooks;
63
- exports.asyncZone = proxy.asyncZone;
64
- exports.atom = proxy.atom;
65
- exports.atomic = proxy.atomic;
66
- exports.biDi = proxy.biDi;
67
- exports.captioned = proxy.captioned;
68
- exports.captured = proxy.captured;
69
- exports.caught = proxy.caught;
70
- exports.createFlavor = proxy.createFlavor;
71
- exports.debugPreset = proxy.debugPreset;
72
- exports.decorator = proxy.decorator;
73
- exports.deepCompare = proxy.deepCompare;
74
- exports.defer = proxy.defer;
75
- exports.devPreset = proxy.devPreset;
76
- exports.effect = proxy.effect;
77
- exports.effectAggregator = proxy.effectAggregator;
78
- exports.effectContext = proxy.effectContext;
79
- exports.flavorOptions = proxy.flavorOptions;
80
- exports.flavored = proxy.flavored;
81
- exports.formatCleanupReason = proxy.formatCleanupReason;
82
- exports.getActivationLog = proxy.getActivationLog;
83
- exports.getActiveEffect = proxy.getActiveEffect;
84
- exports.getState = proxy.getState;
85
- exports.hooks = proxy.hooks;
86
- exports.inheritCaption = proxy.inheritCaption;
87
- exports.isConstructor = proxy.isConstructor;
88
- exports.isDev = proxy.isDev;
89
- exports.isNonReactive = proxy.isNonReactive;
90
- exports.isObject = proxy.isObject;
91
- exports.isProd = proxy.isProd;
92
- exports.isReactive = proxy.isReactive;
93
- exports.isTest = proxy.isTest;
94
- exports.legacyDecorator = proxy.legacyDecorator;
95
- exports.link = proxy.link;
96
- exports.mixin = proxy.mixin;
97
- exports.modernDecorator = proxy.modernDecorator;
98
- exports.named = proxy.named;
99
- exports.objectToProxy = proxy.objectToProxy;
100
- exports.onEffectThrow = proxy.onEffectThrow;
101
- exports.prodPreset = proxy.prodPreset;
102
- exports.proxyToObject = proxy.proxyToObject;
103
- exports.reactive = proxy.reactive;
104
- exports.reactiveOptions = proxy.options;
105
- exports.reset = proxy.reset;
106
- exports.root = proxy.root;
107
- exports.tag = proxy.tag;
108
- exports.touched = proxy.touched;
109
- exports.touched1 = proxy.touched1;
110
- exports.unlink = proxy.unlink;
111
- exports.untracked = proxy.untracked;
112
- exports.unwrap = proxy.unwrap;
113
- exports.withEffectContext = proxy.withEffectContext;
114
- exports.zip = proxy.zip;
54
+ exports.Zone = effects.Zone;
55
+ exports.ZoneAggregator = effects.ZoneAggregator;
56
+ exports.ZoneHistory = effects.ZoneHistory;
57
+ exports.addBatchCleanup = effects.addBatchCleanup;
58
+ exports.addUnreactiveProps = effects.addUnreactiveProps;
59
+ exports.arrayEquals = effects.arrayEquals;
60
+ exports.assertUntracked = effects.assertUntracked;
61
+ exports.asyncHook = effects.asyncHook;
62
+ exports.asyncHooks = effects.asyncHooks;
63
+ exports.asyncZone = effects.asyncZone;
64
+ exports.atom = effects.atom;
65
+ exports.atomic = effects.atomic;
66
+ exports.biDi = effects.biDi;
67
+ exports.captioned = effects.captioned;
68
+ exports.captured = effects.captured;
69
+ exports.caught = effects.caught;
70
+ exports.createFlavor = effects.createFlavor;
71
+ exports.debugPreset = effects.debugPreset;
72
+ exports.decorator = effects.decorator;
73
+ exports.deepCompare = effects.deepCompare;
74
+ exports.defer = effects.defer;
75
+ exports.devPreset = effects.devPreset;
76
+ exports.effect = effects.effect;
77
+ exports.effectAggregator = effects.effectAggregator;
78
+ exports.effectContext = effects.effectContext;
79
+ exports.flavorOptions = effects.flavorOptions;
80
+ exports.flavored = effects.flavored;
81
+ exports.formatCleanupReason = effects.formatCleanupReason;
82
+ exports.getActivationLog = effects.getActivationLog;
83
+ exports.getActiveEffect = effects.getActiveEffect;
84
+ exports.getState = effects.getState;
85
+ exports.hooks = effects.hooks;
86
+ exports.inert = effects.inert;
87
+ exports.inheritCaption = effects.inheritCaption;
88
+ exports.isConstructor = effects.isConstructor;
89
+ exports.isDev = effects.isDev;
90
+ exports.isNonReactive = effects.isNonReactive;
91
+ exports.isObject = effects.isObject;
92
+ exports.isProd = effects.isProd;
93
+ exports.isReactive = effects.isReactive;
94
+ exports.isReactiveBroken = effects.isReactiveBroken;
95
+ exports.isTest = effects.isTest;
96
+ exports.legacyDecorator = effects.legacyDecorator;
97
+ exports.link = effects.link;
98
+ exports.markRaw = effects.markRaw;
99
+ exports.markRawProps = effects.markRawProps;
100
+ exports.mixin = effects.mixin;
101
+ exports.modernDecorator = effects.modernDecorator;
102
+ exports.named = effects.named;
103
+ exports.objectToProxy = effects.objectToProxy;
104
+ exports.onEffectThrow = effects.onEffectThrow;
105
+ exports.onReactiveBroken = effects.onReactiveBroken;
106
+ exports.onReactiveReset = effects.onReactiveReset;
107
+ exports.prodPreset = effects.prodPreset;
108
+ exports.proxyToObject = effects.proxyToObject;
109
+ exports.reactive = effects.reactive;
110
+ exports.reactiveOptions = effects.options;
111
+ exports.readonlyReactive = effects.readonlyReactive;
112
+ exports.reset = effects.reset;
113
+ exports.root = effects.root;
114
+ exports.shallowReactive = effects.shallowReactive;
115
+ exports.tag = effects.tag;
116
+ exports.toRaw = effects.toRaw;
117
+ exports.touched = effects.touched;
118
+ exports.touched1 = effects.touched1;
119
+ exports.unlink = effects.unlink;
120
+ exports.untracked = effects.untracked;
121
+ exports.unwrap = effects.unwrap;
122
+ exports.withEffectContext = effects.withEffectContext;
123
+ exports.wrapInert = effects.wrapInert;
124
+ exports.zip = effects.zip;
115
125
  //# sourceMappingURL=browser.dev.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.dev.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"browser.dev.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- export { A as AZone, C as CleanupReason, c as EffectAccess, b as EffectCleanup, d as EffectCloser, g as EffectOptions, E as EffectTrigger, a as Evolution, G as GetterWrapper, H as HistoryValue, P as PropTrigger, R as ReactiveError, h as ReactiveErrorCode, S as ScopedCallback, i as Zone, Z as ZoneAggregator, j as ZoneHistory, k as asyncZone, l as debugPreset, m as devPreset, n as formatCleanupReason, o as isReactive, p as objectToProxy, q as prodPreset, r as proxyToObject, s as reactiveOptions, u as unwrap } from './types.js';
2
- export { ArrayDiffResult, ArrayReadForward, Captioned, CompareSymbol, ContextManager, Decorator, DecoratorDescription, DecoratorError, DecoratorFactory, Destroyable, DestructionError, EffectContext, Eventful, EventsBase, GenericClassDecorator, Hook, Indexable, IterableWeakMap, IterableWeakSet, LegacyClassDecorator, LegacyPropertyDecorator, Memoizable, MemoizableArgument, MixinClass, MixinFunction, ModernAccessorDecorator, ModernClassDecorator, ModernGetterDecorator, ModernMethodDecorator, ModernSetterDecorator, PromiseChain, ReactiveBase, Resource, Restorer, addBatchCleanup, addUnreactiveProps, allocated, allocatedValues, arrayDiff, arrayEquals, assertUntracked, asyncHook, asyncHooks, atom, atomic, attend, biDi, cache, cached, callOnGC, captioned, captured, caught, chainPromise, createFlavor, debounce, decorator, deepCompare, deepWatch, defer, deprecated, descriptor, destructor, effect, effectAggregator, effectContext, flavorOptions, flavored, forwardArray, getActivationLog, getActiveEffect, getAt, getState, hooks, inheritCaption, isCached, isConstructor, isDev, isNonReactive, isObject, isProd, isTest, legacyDecorator, lift, link, memoize, mixin, modernDecorator, morph, named, onEffectThrow, organize, organized, profileInfo, reactive, reset, resource, root, setAt, tag, throttle, touched, touched1, unlink, unreactive, untracked, watch, when, withEffectContext, zip } from './browser.js';
1
+ export { A as AZone, C as CleanupReason, h as CycleHandlingMode, D as DeprecatedCycleHandlingMode, c as EffectAccess, b as EffectCleanup, d as EffectCloser, g as EffectOptions, E as EffectTrigger, a as Evolution, G as GetterWrapper, H as HistoryValue, P as PropTrigger, R as ReactiveError, i as ReactiveErrorCode, j as SchedulerMode, S as ScopedCallback, k as Zone, Z as ZoneAggregator, l as ZoneHistory, m as asyncZone, n as debugPreset, o as devPreset, p as formatCleanupReason, q as isReactive, r as objectToProxy, s as prodPreset, t as proxyToObject, u as reactiveOptions, v as toRaw, w as unwrap } from './types.js';
2
+ export { ArrayDiffResult, ArrayReadForward, Captioned, CompareSymbol, ContextManager, Decorator, DecoratorDescription, DecoratorError, DecoratorFactory, Destroyable, DestructionError, EffectContext, Eventful, EventsBase, GenericClassDecorator, Hook, Indexable, IterableWeakMap, IterableWeakSet, LegacyClassDecorator, LegacyPropertyDecorator, Memoizable, MemoizableArgument, MixinClass, MixinFunction, ModernAccessorDecorator, ModernClassDecorator, ModernGetterDecorator, ModernMethodDecorator, ModernSetterDecorator, MorphPosition, PromiseChain, ReactiveBase, Resource, Restorer, addBatchCleanup, addUnreactiveProps, allocated, allocatedValues, arrayDiff, arrayEquals, assertUntracked, asyncHook, asyncHooks, atom, atomic, attend, biDi, cache, cached, callOnGC, captioned, captured, caught, chainPromise, createFlavor, debounce, decorator, deepCompare, deepWatch, defer, deprecated, descriptor, destructor, effect, effectAggregator, effectContext, flavorOptions, flavored, forwardArray, getActivationLog, getActiveEffect, getAt, getState, hooks, inert, inheritCaption, isCached, isConstructor, isDev, isNonReactive, isObject, isProd, isReactiveBroken, isTest, legacyDecorator, lift, link, markRaw, markRawProps, memoize, mixin, modernDecorator, morph, named, onEffectThrow, onReactiveBroken, onReactiveReset, organize, organized, profileInfo, reactive, readonlyReactive, reset, resource, root, setAt, shallowReactive, tag, throttle, touched, touched1, unlink, unreactive, untracked, watch, when, withEffectContext, wrapInert, zip } from './browser.js';
@@ -1,5 +1,5 @@
1
1
  import './debug.esm.js';
2
2
  import './browser.esm.js';
3
- export { A as ArrayReadForward, D as Destroyable, a as DestructionError, E as Eventful, I as Indexable, b as allocated, c as allocatedValues, d as arrayDiff, e as attend, f as cache, g as cached, h as callOnGC, i as chainPromise, j as debounce, k as deepWatch, l as deprecated, m as descriptor, n as destructor, o as forwardArray, p as getAt, q as isCached, r as lift, s as memoize, t as morph, u as organize, v as organized, w as profileInfo, x as resource, y as setAt, z as throttle, B as unreactive, C as watch, F as when } from './chunks/index-XsYTUhHx.esm.js';
4
- export { A as AZone, C as CompareSymbol, D as DecoratorError, I as IterableWeakMap, a as IterableWeakSet, R as ReactiveBase, b as ReactiveError, c as ReactiveErrorCode, Z as Zone, d as ZoneAggregator, e as ZoneHistory, f as addBatchCleanup, g as addUnreactiveProps, h as arrayEquals, i as assertUntracked, j as asyncHook, k as asyncHooks, l as asyncZone, m as atom, n as atomic, o as biDi, p as captioned, q as captured, r as caught, s as createFlavor, t as debugPreset, u as decorator, v as deepCompare, w as defer, x as devPreset, y as effect, z as effectAggregator, B as effectContext, E as flavorOptions, F as flavored, G as formatCleanupReason, H as getActivationLog, J as getActiveEffect, K as getState, L as hooks, M as inheritCaption, N as isConstructor, O as isDev, P as isNonReactive, Q as isObject, S as isProd, T as isReactive, U as isTest, V as legacyDecorator, W as link, X as mixin, Y as modernDecorator, _ as named, $ as objectToProxy, a0 as onEffectThrow, a1 as prodPreset, a2 as proxyToObject, a3 as reactive, a4 as reactiveOptions, a5 as reset, a6 as root, a7 as tag, a8 as touched, a9 as touched1, aa as unlink, ab as untracked, ac as unwrap, ad as withEffectContext, ae as zip } from './chunks/proxy-BtmPFjSr.esm.js';
3
+ export { A as ArrayReadForward, D as Destroyable, a as DestructionError, E as Eventful, I as Indexable, b as allocated, c as allocatedValues, d as arrayDiff, e as attend, f as cache, g as cached, h as callOnGC, i as chainPromise, j as debounce, k as deepWatch, l as deprecated, m as descriptor, n as destructor, o as forwardArray, p as getAt, q as isCached, r as lift, s as memoize, t as morph, u as organize, v as organized, w as profileInfo, x as resource, y as setAt, z as throttle, B as unreactive, C as watch, F as when } from './chunks/index-YGpb1te7.esm.js';
4
+ export { A as AZone, C as CompareSymbol, D as DecoratorError, I as IterableWeakMap, a as IterableWeakSet, R as ReactiveBase, b as ReactiveError, c as ReactiveErrorCode, Z as Zone, d as ZoneAggregator, e as ZoneHistory, f as addBatchCleanup, g as addUnreactiveProps, h as arrayEquals, i as assertUntracked, j as asyncHook, k as asyncHooks, l as asyncZone, m as atom, n as atomic, o as biDi, p as captioned, q as captured, r as caught, s as createFlavor, t as debugPreset, u as decorator, v as deepCompare, w as defer, x as devPreset, y as effect, z as effectAggregator, B as effectContext, E as flavorOptions, F as flavored, G as formatCleanupReason, H as getActivationLog, J as getActiveEffect, K as getState, L as hooks, M as inert, N as inheritCaption, O as isConstructor, P as isDev, Q as isNonReactive, S as isObject, T as isProd, U as isReactive, V as isReactiveBroken, W as isTest, X as legacyDecorator, Y as link, _ as markRaw, $ as markRawProps, a0 as mixin, a1 as modernDecorator, a2 as named, a3 as objectToProxy, a4 as onEffectThrow, a5 as onReactiveBroken, a6 as onReactiveReset, a7 as prodPreset, a8 as proxyToObject, a9 as reactive, aa as reactiveOptions, ab as readonlyReactive, ac as reset, ad as root, ae as shallowReactive, af as tag, ag as toRaw, ah as touched, ai as touched1, aj as unlink, ak as untracked, al as unwrap, am as withEffectContext, an as wrapInert, ao as zip } from './chunks/effects-CPjf6gNA.esm.js';
5
5
  //# sourceMappingURL=browser.dev.esm.js.map
@@ -1,6 +1,6 @@
1
- import { L as hooks, k as asyncHooks } from './chunks/proxy-BtmPFjSr.esm.js';
2
- export { A as AZone, C as CompareSymbol, D as DecoratorError, I as IterableWeakMap, a as IterableWeakSet, R as ReactiveBase, b as ReactiveError, c as ReactiveErrorCode, Z as Zone, d as ZoneAggregator, e as ZoneHistory, f as addBatchCleanup, g as addUnreactiveProps, h as arrayEquals, i as assertUntracked, j as asyncHook, l as asyncZone, m as atom, n as atomic, o as biDi, p as captioned, q as captured, r as caught, s as createFlavor, t as debugPreset, u as decorator, v as deepCompare, w as defer, x as devPreset, y as effect, z as effectAggregator, B as effectContext, E as flavorOptions, F as flavored, G as formatCleanupReason, H as getActivationLog, J as getActiveEffect, K as getState, M as inheritCaption, N as isConstructor, O as isDev, P as isNonReactive, Q as isObject, S as isProd, T as isReactive, U as isTest, V as legacyDecorator, W as link, X as mixin, Y as modernDecorator, _ as named, $ as objectToProxy, a0 as onEffectThrow, a1 as prodPreset, a2 as proxyToObject, a3 as reactive, a4 as reactiveOptions, a5 as reset, a6 as root, a7 as tag, a8 as touched, a9 as touched1, aa as unlink, ab as untracked, ac as unwrap, ad as withEffectContext, ae as zip } from './chunks/proxy-BtmPFjSr.esm.js';
3
- export { A as ArrayReadForward, D as Destroyable, a as DestructionError, E as Eventful, I as Indexable, b as allocated, c as allocatedValues, d as arrayDiff, e as attend, f as cache, g as cached, h as callOnGC, i as chainPromise, j as debounce, k as deepWatch, l as deprecated, m as descriptor, n as destructor, o as forwardArray, p as getAt, q as isCached, r as lift, s as memoize, t as morph, u as organize, v as organized, w as profileInfo, x as resource, y as setAt, z as throttle, B as unreactive, C as watch, F as when } from './chunks/index-XsYTUhHx.esm.js';
1
+ import { k as asyncHooks, a5 as onReactiveBroken, a6 as onReactiveReset, L as hooks } from './chunks/effects-CPjf6gNA.esm.js';
2
+ export { A as AZone, C as CompareSymbol, D as DecoratorError, I as IterableWeakMap, a as IterableWeakSet, R as ReactiveBase, b as ReactiveError, c as ReactiveErrorCode, Z as Zone, d as ZoneAggregator, e as ZoneHistory, f as addBatchCleanup, g as addUnreactiveProps, h as arrayEquals, i as assertUntracked, j as asyncHook, l as asyncZone, m as atom, n as atomic, o as biDi, p as captioned, q as captured, r as caught, s as createFlavor, t as debugPreset, u as decorator, v as deepCompare, w as defer, x as devPreset, y as effect, z as effectAggregator, B as effectContext, E as flavorOptions, F as flavored, G as formatCleanupReason, H as getActivationLog, J as getActiveEffect, K as getState, M as inert, N as inheritCaption, O as isConstructor, P as isDev, Q as isNonReactive, S as isObject, T as isProd, U as isReactive, V as isReactiveBroken, W as isTest, X as legacyDecorator, Y as link, _ as markRaw, $ as markRawProps, a0 as mixin, a1 as modernDecorator, a2 as named, a3 as objectToProxy, a4 as onEffectThrow, a7 as prodPreset, a8 as proxyToObject, a9 as reactive, aa as reactiveOptions, ab as readonlyReactive, ac as reset, ad as root, ae as shallowReactive, af as tag, ag as toRaw, ah as touched, ai as touched1, aj as unlink, ak as untracked, al as unwrap, am as withEffectContext, an as wrapInert, ao as zip } from './chunks/effects-CPjf6gNA.esm.js';
3
+ export { A as ArrayReadForward, D as Destroyable, a as DestructionError, E as Eventful, I as Indexable, b as allocated, c as allocatedValues, d as arrayDiff, e as attend, f as cache, g as cached, h as callOnGC, i as chainPromise, j as debounce, k as deepWatch, l as deprecated, m as descriptor, n as destructor, o as forwardArray, p as getAt, q as isCached, r as lift, s as memoize, t as morph, u as organize, v as organized, w as profileInfo, x as resource, y as setAt, z as throttle, B as unreactive, C as watch, F as when } from './chunks/index-YGpb1te7.esm.js';
4
4
 
5
5
  const promiseContexts = new WeakMap();
6
6
  // [HACK]: Sanitization
@@ -39,28 +39,14 @@ function wrap(fn, capturedRestorers) {
39
39
  return fn.apply(this, args);
40
40
  }
41
41
  finally {
42
- /* cf BROWSER_ASYNC_POLYFILL.md
43
- // Note: my fear about this code: in between 2~3~4 microtask waits, some other microtasks might have started, stopped, ...
44
- // We might be in the middle of another promise hook trying to setup the zone
45
- // 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
46
- // - but this might perhaps be an overkill creating more problems than it solves
47
- if (originals.queueMicrotask) {
48
- // Double microtask ensures we run after the first await resumption microtask
49
- originals.queueMicrotask.call(globalThis, () => {
50
- originals.queueMicrotask.call(globalThis, () => {
51
- originals.queueMicrotask.call(globalThis, () => {
52
- for (let i = undoers.length - 1; i >= 0; i--) undoers[i]()
53
- })
54
- })
55
- })
56
- } else {
57
- for (let i = undoers.length - 1; i >= 0; i--) undoers[i]()
58
- }*/
42
+ // Browser async context is backed by sticky Promise metadata. Running undoers here
43
+ // breaks await propagation and can orphan reactive resource observers.
59
44
  }
60
45
  };
61
46
  }
62
47
  const GLOBAL_ORIGINALS = Symbol.for('mutts.originals');
63
48
  const GLOBAL_PROMISE = Symbol.for('mutts.OriginalPromise');
49
+ const schedulerGlobal = globalThis;
64
50
  let originals;
65
51
  let OriginalPromise;
66
52
  if (globalThis[GLOBAL_ORIGINALS]) {
@@ -81,9 +67,13 @@ else {
81
67
  race: OriginalPromise.race,
82
68
  any: OriginalPromise.any,
83
69
  setTimeout: globalThis.setTimeout,
70
+ clearTimeout: globalThis.clearTimeout,
84
71
  setInterval: globalThis.setInterval,
85
- setImmediate: globalThis.setImmediate,
86
- requestAnimationFrame: globalThis.requestAnimationFrame,
72
+ clearInterval: globalThis.clearInterval,
73
+ setImmediate: schedulerGlobal.setImmediate,
74
+ clearImmediate: schedulerGlobal.clearImmediate,
75
+ requestAnimationFrame: schedulerGlobal.requestAnimationFrame,
76
+ cancelAnimationFrame: schedulerGlobal.cancelAnimationFrame,
87
77
  queueMicrotask: globalThis.queueMicrotask,
88
78
  };
89
79
  globalThis[GLOBAL_ORIGINALS] = originals;
@@ -96,6 +86,74 @@ if (!originals.any)
96
86
  originals.any = OriginalPromise.any;
97
87
  if (!originals.race)
98
88
  originals.race = OriginalPromise.race;
89
+ if (!originals.clearTimeout)
90
+ originals.clearTimeout = globalThis.clearTimeout;
91
+ if (!originals.clearInterval)
92
+ originals.clearInterval = globalThis.clearInterval;
93
+ if (!originals.clearImmediate)
94
+ originals.clearImmediate = schedulerGlobal.clearImmediate;
95
+ if (!originals.cancelAnimationFrame)
96
+ originals.cancelAnimationFrame = schedulerGlobal.cancelAnimationFrame;
97
+ const pendingTimeouts = new Set();
98
+ const pendingIntervals = new Set();
99
+ const pendingImmediates = new Set();
100
+ const pendingAnimationFrames = new Set();
101
+ let asyncSchedulersFrozen = false;
102
+ function clearPendingSchedulers() {
103
+ for (const handle of Array.from(pendingTimeouts))
104
+ originals.clearTimeout.call(globalThis, handle);
105
+ for (const handle of Array.from(pendingIntervals))
106
+ originals.clearInterval.call(globalThis, handle);
107
+ if (originals.clearImmediate) {
108
+ for (const handle of Array.from(pendingImmediates)) {
109
+ originals.clearImmediate.call(globalThis, handle);
110
+ }
111
+ }
112
+ if (originals.cancelAnimationFrame) {
113
+ for (const handle of Array.from(pendingAnimationFrames)) {
114
+ originals.cancelAnimationFrame.call(globalThis, handle);
115
+ }
116
+ }
117
+ pendingTimeouts.clear();
118
+ pendingIntervals.clear();
119
+ pendingImmediates.clear();
120
+ pendingAnimationFrames.clear();
121
+ }
122
+ function freezeAsyncSchedulers() {
123
+ if (asyncSchedulersFrozen)
124
+ return;
125
+ asyncSchedulersFrozen = true;
126
+ clearPendingSchedulers();
127
+ }
128
+ function resumeAsyncSchedulers() {
129
+ asyncSchedulersFrozen = false;
130
+ }
131
+ function canceledTimeoutHandle() {
132
+ const handle = originals.setTimeout.call(globalThis, () => { }, 0);
133
+ originals.clearTimeout.call(globalThis, handle);
134
+ return handle;
135
+ }
136
+ function canceledIntervalHandle() {
137
+ const handle = originals.setInterval.call(globalThis, () => { }, 0);
138
+ originals.clearInterval.call(globalThis, handle);
139
+ return handle;
140
+ }
141
+ function canceledImmediateHandle() {
142
+ if (!originals.setImmediate || !originals.clearImmediate)
143
+ return undefined;
144
+ const handle = originals.setImmediate.call(globalThis, () => { });
145
+ originals.clearImmediate.call(globalThis, handle);
146
+ return handle;
147
+ }
148
+ function canceledAnimationFrameHandle() {
149
+ if (!originals.requestAnimationFrame || !originals.cancelAnimationFrame)
150
+ return 0;
151
+ const handle = originals.requestAnimationFrame.call(globalThis, () => { });
152
+ originals.cancelAnimationFrame.call(globalThis, handle);
153
+ return handle;
154
+ }
155
+ onReactiveBroken(freezeAsyncSchedulers);
156
+ onReactiveReset(resumeAsyncSchedulers);
99
157
  function patchedThen(onFulfilled, onRejected) {
100
158
  const context = promiseContexts.get(this) || captureRestorers();
101
159
  const nextPromise = originals.then.call(this, wrap(onFulfilled, context), wrap(onRejected, context));
@@ -195,19 +253,70 @@ try {
195
253
  catch (_e) { }
196
254
  globalThis.Promise = PatchedPromise;
197
255
  globalThis.setTimeout = ((callback, ...args) => {
198
- return originals.setTimeout.call(globalThis, wrap(callback), ...args);
256
+ if (asyncSchedulersFrozen)
257
+ return canceledTimeoutHandle();
258
+ const wrapped = wrap(callback);
259
+ const handle = originals.setTimeout.call(globalThis, (...callbackArgs) => {
260
+ pendingTimeouts.delete(handle);
261
+ wrapped(...callbackArgs);
262
+ }, ...args);
263
+ pendingTimeouts.add(handle);
264
+ return handle;
265
+ });
266
+ globalThis.clearTimeout = ((handle) => {
267
+ pendingTimeouts.delete(handle);
268
+ return originals.clearTimeout.call(globalThis, handle);
199
269
  });
200
270
  globalThis.setInterval = ((callback, ...args) => {
201
- return originals.setInterval.call(globalThis, wrap(callback), ...args);
271
+ if (asyncSchedulersFrozen)
272
+ return canceledIntervalHandle();
273
+ const wrapped = wrap(callback);
274
+ const handle = originals.setInterval.call(globalThis, (...callbackArgs) => {
275
+ wrapped(...callbackArgs);
276
+ }, ...args);
277
+ pendingIntervals.add(handle);
278
+ return handle;
279
+ });
280
+ globalThis.clearInterval = ((handle) => {
281
+ pendingIntervals.delete(handle);
282
+ return originals.clearInterval.call(globalThis, handle);
202
283
  });
203
284
  if (originals.setImmediate) {
204
- globalThis.setImmediate = ((callback, ...args) => {
205
- return originals.setImmediate.call(globalThis, wrap(callback), ...args);
285
+ schedulerGlobal.setImmediate = ((callback, ...args) => {
286
+ if (asyncSchedulersFrozen)
287
+ return canceledImmediateHandle();
288
+ const wrapped = wrap(callback);
289
+ const handle = originals.setImmediate.call(globalThis, (...callbackArgs) => {
290
+ pendingImmediates.delete(handle);
291
+ wrapped(...callbackArgs);
292
+ }, ...args);
293
+ pendingImmediates.add(handle);
294
+ return handle;
295
+ });
296
+ }
297
+ if (originals.clearImmediate) {
298
+ schedulerGlobal.clearImmediate = ((handle) => {
299
+ pendingImmediates.delete(handle);
300
+ return originals.clearImmediate.call(globalThis, handle);
206
301
  });
207
302
  }
208
303
  if (originals.requestAnimationFrame) {
209
304
  globalThis.requestAnimationFrame = (callback) => {
210
- return originals.requestAnimationFrame.call(globalThis, wrap(callback));
305
+ if (asyncSchedulersFrozen)
306
+ return canceledAnimationFrameHandle();
307
+ const wrapped = wrap(callback);
308
+ const handle = originals.requestAnimationFrame.call(globalThis, (time) => {
309
+ pendingAnimationFrames.delete(handle);
310
+ wrapped(time);
311
+ });
312
+ pendingAnimationFrames.add(handle);
313
+ return handle;
314
+ };
315
+ }
316
+ if (originals.cancelAnimationFrame) {
317
+ globalThis.cancelAnimationFrame = (handle) => {
318
+ pendingAnimationFrames.delete(handle);
319
+ return originals.cancelAnimationFrame.call(globalThis, handle);
211
320
  };
212
321
  }
213
322
  if (originals.queueMicrotask) {
@@ -216,5 +325,5 @@ if (originals.queueMicrotask) {
216
325
  };
217
326
  }
218
327
 
219
- export { asyncHooks, hooks };
328
+ export { asyncHooks, hooks, onReactiveBroken, onReactiveReset };
220
329
  //# sourceMappingURL=browser.esm.js.map