mutts 1.0.12 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BROWSER_ASYNC_POLYFILL.md +79 -0
- package/README.md +7 -4
- package/dist/browser.cjs +150 -27
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.ts +1440 -2
- package/dist/browser.dev.cjs +17 -3
- package/dist/browser.dev.cjs.map +1 -1
- package/dist/browser.dev.d.ts +2 -2
- package/dist/browser.dev.esm.js +2 -2
- package/dist/browser.esm.js +137 -28
- package/dist/browser.esm.js.map +1 -1
- package/dist/chunks/{index-yK0HVxHv.cjs → index-BnTNC9eC.cjs} +347 -156
- package/dist/chunks/index-BnTNC9eC.cjs.map +1 -0
- package/dist/chunks/{index-BUop6B2U.esm.js → index-CAWVZL7P.esm.js} +345 -154
- package/dist/chunks/index-CAWVZL7P.esm.js.map +1 -0
- package/dist/chunks/node-Df_5r_WA.cjs +187 -0
- package/dist/chunks/node-Df_5r_WA.cjs.map +1 -0
- package/dist/chunks/node-DuIduHw3.esm.js +185 -0
- package/dist/chunks/node-DuIduHw3.esm.js.map +1 -0
- package/dist/chunks/{proxy-D2C49sXH.esm.js → proxy-C2lnvvbx.esm.js} +943 -272
- package/dist/chunks/proxy-C2lnvvbx.esm.js.map +1 -0
- package/dist/chunks/{proxy-BvM4yewA.cjs → proxy-HA_QQnd5.cjs} +959 -273
- package/dist/chunks/proxy-HA_QQnd5.cjs.map +1 -0
- package/dist/debug.cjs +571 -173
- package/dist/debug.cjs.map +1 -1
- package/dist/debug.d.ts +96 -80
- package/dist/debug.esm.js +567 -173
- package/dist/debug.esm.js.map +1 -1
- package/dist/devtools/panel.js.map +1 -1
- package/dist/mutts.umd.js +4351 -3366
- package/dist/mutts.umd.js.map +1 -1
- package/dist/mutts.umd.min.js +1 -1
- package/dist/mutts.umd.min.js.map +1 -1
- package/dist/node.cjs +18 -4
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +2 -2
- package/dist/node.dev.cjs +18 -4
- package/dist/node.dev.cjs.map +1 -1
- package/dist/node.dev.d.ts +2 -2
- package/dist/node.dev.esm.js +3 -3
- package/dist/node.esm.js +3 -3
- package/dist/{types-Bx2PhORg.d.ts → types.d.ts} +42 -15
- package/docs/ai/api-reference.md +105 -13
- package/docs/ai/manual.md +77 -29
- package/docs/debug-getReason.md +161 -0
- package/docs/flavored.md +98 -1
- package/docs/reactive/advanced.md +184 -12
- package/docs/reactive/attend.md +32 -0
- package/docs/reactive/core.md +40 -6
- package/docs/reactive/debugging.md +40 -15
- package/docs/reactive.md +4 -1
- package/package.json +13 -9
- package/dist/chunks/index-BUop6B2U.esm.js.map +0 -1
- package/dist/chunks/index-yK0HVxHv.cjs.map +0 -1
- package/dist/chunks/node-Bo7WU5S2.esm.js +0 -96
- package/dist/chunks/node-Bo7WU5S2.esm.js.map +0 -1
- package/dist/chunks/node-Dd0esp5F.cjs +0 -98
- package/dist/chunks/node-Dd0esp5F.cjs.map +0 -1
- package/dist/chunks/proxy-BvM4yewA.cjs.map +0 -1
- package/dist/chunks/proxy-D2C49sXH.esm.js.map +0 -1
- package/dist/index.d.ts +0 -1322
|
@@ -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)
|
|
@@ -40,6 +40,7 @@ Mutts is designed with a **Condensed Token Footprint**. It prioritizes high read
|
|
|
40
40
|
> [!IMPORTANT]
|
|
41
41
|
> **Are you an AI Agent?**
|
|
42
42
|
> Read the **[AI Agent Manual](./docs/ai/manual.md)** for structured protocols, introspection APIs, and error definitions designed for your reasoning loop. A comprehensive **[API Reference](./docs/ai/api-reference.md)** is also available.
|
|
43
|
+
> For documentation-aware MCP workflows, you can use **[`soup-chop`](https://www.npmjs.com/package/soup-chop)** as a documentation MCP for mutts.
|
|
43
44
|
|
|
44
45
|
---
|
|
45
46
|
|
|
@@ -87,6 +88,7 @@ A comprehensive reactivity system. See the **[Introduction](./docs/reactive/core
|
|
|
87
88
|
- **Class Reactivity**: `@reactive` decorator and `ReactiveBase` for class-based reactivity
|
|
88
89
|
- **Reactive Mixin**: Always-reactive classes with mixin support (`Reactive`)
|
|
89
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
|
|
90
92
|
- **Type Safety**: Full TypeScript support with proper type inference
|
|
91
93
|
- **Performance Optimized**: Lazy back-reference creation and efficient dependency tracking
|
|
92
94
|
- **Debugging & Development**: Built-in tools like cycle detection, memoization discrepancy check and effects lineages (logical/virtual stack-trace)
|
|
@@ -240,22 +242,23 @@ A comprehensive resource management system that provides automatic cleanup for o
|
|
|
240
242
|
|
|
241
243
|
## [Flavored](./docs/flavored.md)
|
|
242
244
|
|
|
243
|
-
A utility for creating extensible functions with chainable property modifiers.
|
|
245
|
+
A utility for creating extensible functions with chainable property modifiers. The same docs section also covers `captioned`, the sibling helper for callback-first tagged-template calls.
|
|
244
246
|
|
|
245
247
|
**Key Features:**
|
|
246
248
|
- **Property-based Modifiers**: Add chainable properties to functions via getters or methods
|
|
247
249
|
- **Flavoring Robustness**: Automatic arity tracking and argument padding
|
|
248
250
|
- **Options Merging**: `flavorOptions` helper for automatic options object merging
|
|
249
251
|
- **Argument Transformation**: `createFlavor` helper for custom argument transformation
|
|
252
|
+
- **Tagged Callback Captions**: `captioned` helper for call-site naming like `` effect`name`(fn) ``
|
|
250
253
|
- **Hand-made Functions**: Return custom functions for complete control (the generic case)
|
|
251
254
|
- **Full TypeScript Support**: Proper type inference for chained modifiers
|
|
252
255
|
|
|
253
256
|
**Use Cases:**
|
|
254
|
-
- Creating functions with preset configurations (e.g., `effect.opaque
|
|
257
|
+
- Creating functions with preset configurations (e.g., `effect.opaque`)
|
|
258
|
+
- Naming callback-oriented calls like `effect`, `lift`, `watch`, `attend`, or `morph` without a separate flavor
|
|
255
259
|
- Fluent APIs for function variants
|
|
256
260
|
- Partial application with named parameters
|
|
257
261
|
- Building chainable configuration DSLs
|
|
258
262
|
|
|
259
263
|
## [Utilities](./docs/utils.md)
|
|
260
264
|
Documented helper functions for collections, type checks, and debugging (zip, deepCompare, tag, etc.).
|
|
261
|
-
|
package/dist/browser.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var proxy = require('./chunks/proxy-
|
|
4
|
-
var index = require('./chunks/index-
|
|
3
|
+
var proxy = require('./chunks/proxy-HA_QQnd5.cjs');
|
|
4
|
+
var index = require('./chunks/index-BnTNC9eC.cjs');
|
|
5
5
|
|
|
6
6
|
const promiseContexts = new WeakMap();
|
|
7
7
|
// [HACK]: Sanitization
|
|
@@ -40,28 +40,14 @@ function wrap(fn, capturedRestorers) {
|
|
|
40
40
|
return fn.apply(this, args);
|
|
41
41
|
}
|
|
42
42
|
finally {
|
|
43
|
-
|
|
44
|
-
//
|
|
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
|
-
|
|
87
|
-
|
|
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
|
+
proxy.onReactiveBroken(freezeAsyncSchedulers);
|
|
157
|
+
proxy.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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
206
|
-
|
|
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
|
-
|
|
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) {
|
|
@@ -218,6 +327,7 @@ if (originals.queueMicrotask) {
|
|
|
218
327
|
}
|
|
219
328
|
|
|
220
329
|
exports.AZone = proxy.AZone;
|
|
330
|
+
exports.CompareSymbol = proxy.CompareSymbol;
|
|
221
331
|
exports.DecoratorError = proxy.DecoratorError;
|
|
222
332
|
exports.IterableWeakMap = proxy.IterableWeakMap;
|
|
223
333
|
exports.IterableWeakSet = proxy.IterableWeakSet;
|
|
@@ -240,6 +350,7 @@ exports.asyncZone = proxy.asyncZone;
|
|
|
240
350
|
exports.atom = proxy.atom;
|
|
241
351
|
exports.atomic = proxy.atomic;
|
|
242
352
|
exports.biDi = proxy.biDi;
|
|
353
|
+
exports.captioned = proxy.captioned;
|
|
243
354
|
exports.captured = proxy.captured;
|
|
244
355
|
exports.caught = proxy.caught;
|
|
245
356
|
exports.createFlavor = proxy.createFlavor;
|
|
@@ -250,6 +361,7 @@ exports.defer = proxy.defer;
|
|
|
250
361
|
exports.devPreset = proxy.devPreset;
|
|
251
362
|
exports.effect = proxy.effect;
|
|
252
363
|
exports.effectAggregator = proxy.effectAggregator;
|
|
364
|
+
exports.effectContext = proxy.effectContext;
|
|
253
365
|
exports.flavorOptions = proxy.flavorOptions;
|
|
254
366
|
exports.flavored = proxy.flavored;
|
|
255
367
|
exports.formatCleanupReason = proxy.formatCleanupReason;
|
|
@@ -257,32 +369,44 @@ exports.getActivationLog = proxy.getActivationLog;
|
|
|
257
369
|
exports.getActiveEffect = proxy.getActiveEffect;
|
|
258
370
|
exports.getState = proxy.getState;
|
|
259
371
|
exports.hooks = proxy.hooks;
|
|
372
|
+
exports.inert = proxy.inert;
|
|
373
|
+
exports.inheritCaption = proxy.inheritCaption;
|
|
260
374
|
exports.isConstructor = proxy.isConstructor;
|
|
261
375
|
exports.isDev = proxy.isDev;
|
|
262
376
|
exports.isNonReactive = proxy.isNonReactive;
|
|
263
377
|
exports.isObject = proxy.isObject;
|
|
264
378
|
exports.isProd = proxy.isProd;
|
|
265
379
|
exports.isReactive = proxy.isReactive;
|
|
380
|
+
exports.isReactiveBroken = proxy.isReactiveBroken;
|
|
266
381
|
exports.isTest = proxy.isTest;
|
|
267
382
|
exports.legacyDecorator = proxy.legacyDecorator;
|
|
268
383
|
exports.link = proxy.link;
|
|
384
|
+
exports.markRaw = proxy.markRaw;
|
|
385
|
+
exports.markRawProps = proxy.markRawProps;
|
|
269
386
|
exports.mixin = proxy.mixin;
|
|
270
387
|
exports.modernDecorator = proxy.modernDecorator;
|
|
271
388
|
exports.named = proxy.named;
|
|
272
389
|
exports.objectToProxy = proxy.objectToProxy;
|
|
273
390
|
exports.onEffectThrow = proxy.onEffectThrow;
|
|
391
|
+
exports.onReactiveBroken = proxy.onReactiveBroken;
|
|
392
|
+
exports.onReactiveReset = proxy.onReactiveReset;
|
|
274
393
|
exports.prodPreset = proxy.prodPreset;
|
|
275
394
|
exports.proxyToObject = proxy.proxyToObject;
|
|
276
395
|
exports.reactive = proxy.reactive;
|
|
277
396
|
exports.reactiveOptions = proxy.options;
|
|
397
|
+
exports.readonlyReactive = proxy.readonlyReactive;
|
|
278
398
|
exports.reset = proxy.reset;
|
|
279
399
|
exports.root = proxy.root;
|
|
400
|
+
exports.shallowReactive = proxy.shallowReactive;
|
|
280
401
|
exports.tag = proxy.tag;
|
|
402
|
+
exports.toRaw = proxy.toRaw;
|
|
281
403
|
exports.touched = proxy.touched;
|
|
282
404
|
exports.touched1 = proxy.touched1;
|
|
283
405
|
exports.unlink = proxy.unlink;
|
|
284
406
|
exports.untracked = proxy.untracked;
|
|
285
407
|
exports.unwrap = proxy.unwrap;
|
|
408
|
+
exports.withEffectContext = proxy.withEffectContext;
|
|
409
|
+
exports.wrapInert = proxy.wrapInert;
|
|
286
410
|
exports.zip = proxy.zip;
|
|
287
411
|
exports.ArrayReadForward = index.ArrayReadForward;
|
|
288
412
|
exports.Destroyable = index.Destroyable;
|
|
@@ -311,7 +435,6 @@ exports.morph = index.morph;
|
|
|
311
435
|
exports.organize = index.organize;
|
|
312
436
|
exports.organized = index.organized;
|
|
313
437
|
exports.profileInfo = index.profileInfo;
|
|
314
|
-
exports.project = index.morph;
|
|
315
438
|
exports.resource = index.resource;
|
|
316
439
|
exports.setAt = index.setAt;
|
|
317
440
|
exports.throttle = index.throttle;
|
package/dist/browser.cjs.map
CHANGED
|
@@ -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":";;;;;AAEA,MAAM,eAAe,GAAG,IAAI,OAAO,EAA+B;AAElE;AACA;AACA;AACA;AACA;AACAA,gBAAU,CAAC,eAAe,GAAG,CAAC,GAAQ,KAAI;IACzC,IAAI,GAAG,IAAI,OAAQ,GAAW,CAAC,IAAI,KAAK,UAAU,EAAE;QACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACtC,UAAU,CAAC,MAAK;AACb,gBAAA,GAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;YACpC,CAAC,EAAE,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACH;AACA,IAAA,OAAO,GAAG;AACX,CAAC;AAED,SAAS,gBAAgB,GAAA;AACxB,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY;AACrC,IAAA,KAAK,MAAM,IAAI,IAAIC,WAAK,EAAE;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,EAAE;AACvB,QAAA,IAAI,QAAQ;AAAE,YAAA,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtC;AACA,IAAA,OAAO,SAAS;AACjB;AAEA,SAAS,IAAI,CACZ,EAA6C,EAC7C,iBAAiC,EAAA;IAEjC,IAAI,OAAO,EAAE,KAAK,UAAU;AAAE,QAAA,OAAO,EAAE;AACvC,IAAA,MAAM,SAAS,GAAG,iBAAiB,IAAI,gBAAgB,EAAE;IACzD,OAAO,UAAqB,GAAG,IAAU,EAAA;QACxC,MAAM,OAAO,GAAmB,EAAE;QAClC,KAAK,MAAM,OAAO,IAAI,SAAS;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACxD,QAAA,IAAI;YACH,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B;gBAAU;AACT;;;;;;;;;;;;;;;;AAgBG;QACJ;AACD,IAAA,CAAC;AACF;AAEA,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACtD,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAE1D,IAAI,SAAc;AAClB,IAAI,eAAoB;AAExB,IAAK,UAAkB,CAAC,gBAAgB,CAAC,EAAE;AAC1C,IAAA,SAAS,GAAI,UAAkB,CAAC,gBAAgB,CAAC;AACjD,IAAA,eAAe,GAAI,UAAkB,CAAC,cAAc,CAAC;AACtD;KAAO;AACN,IAAA,eAAe,GAAG,UAAU,CAAC,OAAO;AACpC,IAAA,SAAS,GAAG;;AAEX,QAAA,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,IAAI;AACpC,QAAA,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK;AACtC,QAAA,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO;QAC1C,OAAO,EAAE,eAAe,CAAC,OAAO;QAChC,MAAM,EAAE,eAAe,CAAC,MAAM;QAC9B,GAAG,EAAE,eAAe,CAAC,GAAG;QACxB,UAAU,EAAG,eAAuB,CAAC,UAAU;QAC/C,IAAI,EAAE,eAAe,CAAC,IAAI;QAC1B,GAAG,EAAG,eAAuB,CAAC,GAAG;QACjC,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,YAAY,EAAG,UAAkB,CAAC,YAAY;QAC9C,qBAAqB,EAAG,UAAkB,CAAC,qBAAqB;QAChE,cAAc,EAAE,UAAU,CAAC,cAAc;KACzC;AACC,IAAA,UAAkB,CAAC,gBAAgB,CAAC,GAAG,SAAS;AAChD,IAAA,UAAkB,CAAC,cAAc,CAAC,GAAG,eAAe;AACvD;AAEA;AACA,IAAI,CAAC,SAAS,CAAC,UAAU;AAAE,IAAA,SAAS,CAAC,UAAU,GAAI,eAAuB,CAAC,UAAU;AACrF,IAAI,CAAC,SAAS,CAAC,GAAG;AAAE,IAAA,SAAS,CAAC,GAAG,GAAI,eAAuB,CAAC,GAAG;AAChE,IAAI,CAAC,SAAS,CAAC,IAAI;AAAE,IAAA,SAAS,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI;AAE1D,SAAS,WAAW,CAAY,WAAgB,EAAE,UAAe,EAAA;IAChE,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB,EAAE;IAC/D,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CACtC,IAAI,EACJ,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAC1B,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CACzB;AACD,IAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;AAAE,QAAA,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;AAC/D,IAAA,OAAO,WAAW;AACnB;AAEA,SAAS,YAAY,CAAY,UAAe,EAAA;IAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB,EAAE;AAC/D,IAAA,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACzE,IAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;AAAE,QAAA,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;AAC/D,IAAA,OAAO,WAAW;AACnB;AAEA,SAAS,cAAc,CAAY,SAAc,EAAA;IAChD,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB,EAAE;AAC/D,IAAA,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1E,IAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;AAAE,QAAA,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;AAC/D,IAAA,OAAO,WAAW;AACnB;AAEA,SAAS,cAAc,CAEtB,QAAgG,EAAA;AAEhG,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;QACnC,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACjD,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;AACpC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;AAClC,YAAA,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC;AACxC,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;QAClC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AAC/B,QAAA,OAAO,CAAC;IACT;AACA,IAAA,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC;AACrC;AAEA;AACA,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,eAAsB,CAAC;AAErD;AACA,cAAc,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS;AAEpD,cAAc,CAAC,OAAO,IAAI,CAAI,KAA0B,KAAgB;AACvE,IAAA,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAe;AACtE,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;;AAElC,IAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,QAAA,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AAChF,IAAA,OAAO,CAAC;AACT,CAAC,CAAQ;AAET,cAAc,CAAC,MAAM,IAAI,CAAY,MAAY,KAAgB;AAChE,IAAA,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAe;AACtE,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;AAAE,QAAA,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AACrD,IAAA,OAAO,CAAC;AACT,CAAC,CAAQ;AAET,cAAc,CAAC,GAAG,IAAI,CAAI,MAAoC,KAA2B;AACxF,IAAA,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAA0B;AAC9E,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;AAAE,QAAA,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AACrD,IAAA,OAAO,CAAC;AACT,CAAC,CAAQ;AAET,cAAc,CAAC,UAAU,IAAI,CAC5B,MAAoC,KACY;AAChD,IAAA,MAAM,CAAC,GAAI,SAAS,CAAC,UAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;AACrE,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;AAAE,QAAA,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AACrD,IAAA,OAAO,CAAC;AACT,CAAC,CAAQ;AAET,cAAc,CAAC,IAAI,IAAI,CAAI,MAAoC,KAAyB;AACvF,IAAA,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAwB;AAC7E,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;AAAE,QAAA,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AACrD,IAAA,OAAO,CAAC;AACT,CAAC,CAAQ;AAET,cAAc,CAAC,GAAG,IAAI,CAAI,MAAoC,KAAyB;AACtF,IAAA,MAAM,CAAC,GAAI,SAAS,CAAC,GAAW,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;AAC9D,IAAA,MAAM,OAAO,GAAG,gBAAgB,EAAE;AAClC,IAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;AAAE,QAAA,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AACrD,IAAA,OAAO,CAAC;AACT,CAAC,CAAQ;AAET;AACA;AACA;AACA,IAAI,eAAe,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE;;AAEnD,IAAA,eAAe,CAAC,SAAS,CAAC,IAAI,GAAG,WAAkB;AACnD,IAAA,eAAe,CAAC,SAAS,CAAC,KAAK,GAAG,YAAmB;AACrD,IAAA,eAAe,CAAC,SAAS,CAAC,OAAO,GAAG,cAAqB;AAC1D;AAEA,IAAI;IACH,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE;AACtD,QAAA,GAAG,EAAE,MAAM,cAAc;AACzB,QAAA,YAAY,EAAE,IAAI;AAClB,KAAA,CAAC;AACH;AAAE,OAAO,EAAE,EAAE,EAAC;AAEZ,UAAkB,CAAC,OAAO,GAAG,cAAc;AAE7C,UAAU,CAAC,UAAU,IAAI,CAAC,QAAkB,EAAE,GAAG,IAAW,KAAI;AAC/D,IAAA,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAe,CAAC,EAAE,GAAG,IAAI,CAAC;AAC7E,CAAC,CAAQ;AAET,UAAU,CAAC,WAAW,IAAI,CAAC,QAAkB,EAAE,GAAG,IAAW,KAAI;AAChE,IAAA,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAe,CAAC,EAAE,GAAG,IAAI,CAAC;AAC9E,CAAC,CAAQ;AAET,IAAI,SAAS,CAAC,YAAY,EAAE;IACzB,UAAkB,CAAC,YAAY,IAAI,CAAC,QAAkB,EAAE,GAAG,IAAW,KAAI;AAC3E,QAAA,OAAO,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAe,CAAC,EAAE,GAAG,IAAI,CAAC;AAC/E,IAAA,CAAC,CAAQ;AACV;AAEA,IAAI,SAAS,CAAC,qBAAqB,EAAE;AACpC,IAAA,UAAU,CAAC,qBAAqB,GAAG,CAAC,QAA8B,KAAI;AACrE,QAAA,OAAO,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxE,IAAA,CAAC;AACF;AAEA,IAAI,SAAS,CAAC,cAAc,EAAE;AAC7B,IAAA,UAAU,CAAC,cAAc,GAAG,CAAC,QAAsB,KAAU;AAC5D,QAAA,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1D,IAAA,CAAC;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
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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"}
|