mutts 1.0.10 → 1.0.12
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/README.md +3 -3
- package/dist/browser.cjs +244 -3199
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.ts +2 -2
- package/dist/browser.dev.cjs +51 -50
- 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 +15 -13
- package/dist/browser.esm.js.map +1 -1
- package/dist/chunks/{index-CaaQQlPJ.esm.js → index-BUop6B2U.esm.js} +384 -981
- package/dist/chunks/index-BUop6B2U.esm.js.map +1 -0
- package/dist/chunks/index-yK0HVxHv.cjs +2612 -0
- package/dist/chunks/index-yK0HVxHv.cjs.map +1 -0
- package/dist/chunks/{node-nKJBk8iJ.esm.js → node-Bo7WU5S2.esm.js} +2 -2
- package/dist/chunks/{node-nKJBk8iJ.esm.js.map → node-Bo7WU5S2.esm.js.map} +1 -1
- package/dist/chunks/{async-node-3PrbVAbB.cjs → node-Dd0esp5F.cjs} +4 -4
- package/dist/chunks/node-Dd0esp5F.cjs.map +1 -0
- package/dist/chunks/{proxy-Dtg-bJ3T.cjs → proxy-BvM4yewA.cjs} +441 -342
- package/dist/chunks/proxy-BvM4yewA.cjs.map +1 -0
- package/dist/chunks/{proxy-r7lARftl.esm.js → proxy-D2C49sXH.esm.js} +401 -330
- package/dist/chunks/proxy-D2C49sXH.esm.js.map +1 -0
- package/dist/debug.cjs +17 -4
- package/dist/debug.cjs.map +1 -1
- package/dist/debug.d.ts +2 -2
- package/dist/debug.esm.js +17 -3
- package/dist/debug.esm.js.map +1 -1
- package/dist/index.d.ts +84 -209
- package/dist/mutts.umd.js +842 -1362
- 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 +51 -49
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +2 -2
- package/dist/node.dev.cjs +51 -49
- 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-W5vD6m2n.d.ts → types-Bx2PhORg.d.ts} +38 -47
- package/docs/ai/api-reference.md +0 -14
- package/docs/ai/manual.md +2 -22
- package/docs/reactive/advanced.md +13 -14
- package/docs/reactive/attend.md +1 -2
- package/docs/reactive/collections.md +2 -149
- package/docs/reactive/core.md +218 -96
- package/docs/reactive/debugging.md +2 -2
- package/docs/reactive/resource.md +1 -1
- package/docs/reactive.md +1 -3
- package/docs/zone.md +1 -1
- package/package.json +18 -9
- package/dist/chunks/async-browser-BU_IfxYD.cjs +0 -216
- package/dist/chunks/async-browser-BU_IfxYD.cjs.map +0 -1
- package/dist/chunks/async-core-CRLKP3l-.cjs +0 -29
- package/dist/chunks/async-core-CRLKP3l-.cjs.map +0 -1
- package/dist/chunks/async-node-3PrbVAbB.cjs.map +0 -1
- package/dist/chunks/index-CaaQQlPJ.esm.js.map +0 -1
- package/dist/chunks/proxy-Dtg-bJ3T.cjs.map +0 -1
- package/dist/chunks/proxy-r7lARftl.esm.js.map +0 -1
- package/docs/reactive/scan.md +0 -324
|
@@ -7,10 +7,10 @@ The `mutts` reactive system provides several built-in tools to help track down s
|
|
|
7
7
|
|
|
8
8
|
## The `reactiveOptions` Reference
|
|
9
9
|
|
|
10
|
-
The `reactiveOptions` object (exported from `mutts
|
|
10
|
+
The `reactiveOptions` object (exported from `mutts`) allows you to hook into the reactive system's internals.
|
|
11
11
|
|
|
12
12
|
```typescript
|
|
13
|
-
import { reactiveOptions } from 'mutts
|
|
13
|
+
import { reactiveOptions } from 'mutts';
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
### Lifecycle Hooks
|
|
@@ -42,7 +42,7 @@ A reactive object implementing the `Resource<T>` interface.
|
|
|
42
42
|
### Basic Async Fetch
|
|
43
43
|
|
|
44
44
|
```typescript
|
|
45
|
-
import { reactive, resource } from 'mutts
|
|
45
|
+
import { reactive, resource } from 'mutts'
|
|
46
46
|
|
|
47
47
|
// ID usually comes from another reactive source
|
|
48
48
|
const state = reactive({ userId: 1 })
|
package/docs/reactive.md
CHANGED
|
@@ -10,14 +10,12 @@ The Mutts Reactive System documentation has been split into focused sections for
|
|
|
10
10
|
## [Collections](./reactive/collections.md)
|
|
11
11
|
* **[Reactive Collections](./reactive/collections.md#collections)**: Map, Set, WeakMap, WeakSet
|
|
12
12
|
* **[Reactive Arrays](./reactive/collections.md#reactivearray)**: Full array method support
|
|
13
|
-
* **[Register](./reactive/collections.md#register)**: ID-keyed ordered collections
|
|
14
13
|
* **[Morphing](./reactive/collections.md#morph)**: `morph`, `organized`
|
|
15
14
|
* **[Attend](./reactive/attend.md)**: Reactive enumeration (`attend`)
|
|
16
|
-
* **[Scan](./reactive/scan.md)**: Reactive scan and accumulation
|
|
17
15
|
* **[Resource](./reactive/resource.md)**: Async state tracking (`resource`)
|
|
18
16
|
|
|
19
17
|
## [Advanced Topics](./reactive/advanced.md)
|
|
20
|
-
* **[Choosing the Right Primitive](./reactive/advanced.md#choosing-the-right-reactive-primitive)**: Comparison table of effect-value functions (memoize, lift, project,
|
|
18
|
+
* **[Choosing the Right Primitive](./reactive/advanced.md#choosing-the-right-reactive-primitive)**: Comparison table of effect-value functions (memoize, lift, project, etc.)
|
|
21
19
|
* **[Atomic Operations](./reactive/advanced.md#atomic-operations)**: Batching and Bidirectional binding
|
|
22
20
|
* **[Evolution Tracking](./reactive/advanced.md#evolution-tracking)**: History introspection
|
|
23
21
|
* **[Prototype Chains](./reactive/advanced.md#prototype-chains-and-pure-objects)**: Advanced inheritance patterns
|
package/docs/zone.md
CHANGED
|
@@ -52,7 +52,7 @@ The base class for all zone implementations.
|
|
|
52
52
|
- `active: T | undefined`: The current value in the zone.
|
|
53
53
|
- `with<R>(value: T, fn: () => R): R`: Executes `fn` with `value` set as active.
|
|
54
54
|
- `root<R>(fn: () => R): R`: Executes `fn` with the zone cleared (undefined).
|
|
55
|
-
- `zoned:
|
|
55
|
+
- `zoned: GetterWrapper`: A getter that returns a function which, when called, restores the zone to its **current** state.
|
|
56
56
|
|
|
57
57
|
### `Zone<T>`
|
|
58
58
|
Simple stack-based storage.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mutts",
|
|
3
3
|
"description": "Modern UTility TS: A collection of TypeScript utilities",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.12",
|
|
5
5
|
"main": "dist/browser.cjs",
|
|
6
6
|
"module": "dist/browser.esm.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -102,21 +102,15 @@
|
|
|
102
102
|
"test": "npm run test:node && npm run test:browser",
|
|
103
103
|
"test:node": "TEST_ENV=node NODE_OPTIONS='--expose-gc' vitest run",
|
|
104
104
|
"test:browser": "TEST_ENV=browser vitest run --browser",
|
|
105
|
-
"test:zone:node": "TEST_ENV=node vitest run tests/zone.test.ts",
|
|
106
|
-
"test:zone:browser": "TEST_ENV=browser vitest run tests/zone.test.ts",
|
|
107
|
-
"test:async:node": "TEST_ENV=node vitest run tests/async-hook.test.ts",
|
|
108
|
-
"test:async:browser": "TEST_ENV=browser vitest run tests/async-hook.test.ts",
|
|
109
105
|
"test:coverage": "TEST_ENV=node vitest run --coverage",
|
|
110
|
-
"test:coverage:watch": "TEST_ENV=node vitest run --coverage --watch",
|
|
111
|
-
"test:legacy": "TEST_ENV=node TSCONFIG=tsconfig.legacy.json vitest run --detectOpenHandles",
|
|
112
|
-
"test:modern": "TEST_ENV=node TSCONFIG=tsconfig.modern.json vitest run --detectOpenHandles",
|
|
113
106
|
"test:profile": "RUN_PROFILING=1 NODE_OPTIONS=--expose-gc vitest run",
|
|
114
107
|
"test:profile:benchmark": "RUN_PROFILING=1 NODE_OPTIONS=--expose-gc vitest run -t benchmark",
|
|
115
108
|
"test:profile:detailed": "RUN_PROFILING=1 node --prof node_modules/vitest/vitest.mjs --no-coverage",
|
|
116
109
|
"benchmark:save": "tsx tests/profiling/benchmark.ts save",
|
|
117
110
|
"benchmark:compare": "tsx tests/profiling/benchmark.ts compare",
|
|
118
111
|
"benchmark:list": "tsx tests/profiling/benchmark.ts list",
|
|
119
|
-
"biome": "biome check --write src"
|
|
112
|
+
"biome": "biome check --write src",
|
|
113
|
+
"biome:unsafe": "biome check --write --unsafe src"
|
|
120
114
|
},
|
|
121
115
|
"keywords": [
|
|
122
116
|
"typescript",
|
|
@@ -143,6 +137,21 @@
|
|
|
143
137
|
"url": "https://github.com/eddow/mutts/issues"
|
|
144
138
|
},
|
|
145
139
|
"type": "module",
|
|
140
|
+
"sideEffects": [
|
|
141
|
+
"./src/index.ts",
|
|
142
|
+
"./src/entry-browser.ts",
|
|
143
|
+
"./src/entry-browser.dev.ts",
|
|
144
|
+
"./src/entry-node.ts",
|
|
145
|
+
"./src/entry-node.dev.ts",
|
|
146
|
+
"./dist/browser.esm.js",
|
|
147
|
+
"./dist/browser.dev.esm.js",
|
|
148
|
+
"./dist/browser.cjs",
|
|
149
|
+
"./dist/browser.dev.cjs",
|
|
150
|
+
"./dist/node.esm.js",
|
|
151
|
+
"./dist/node.dev.esm.js",
|
|
152
|
+
"./dist/node.cjs",
|
|
153
|
+
"./dist/node.dev.cjs"
|
|
154
|
+
],
|
|
146
155
|
"engines": {
|
|
147
156
|
"node": ">=16.0.0"
|
|
148
157
|
},
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var asyncCore = require('./async-core-CRLKP3l-.cjs');
|
|
4
|
-
|
|
5
|
-
const promiseContexts = new WeakMap();
|
|
6
|
-
// [HACK]: Sanitization
|
|
7
|
-
// If a Promise is created inside the zone, it carries the "Sticky" zone context.
|
|
8
|
-
// If returned to the outer scope, that context leaks. We wrap it in a new Promise
|
|
9
|
-
// created here (in the outer scope) to break the chain and sanitize the return value.
|
|
10
|
-
// See BROWSER_ASYNC_POLYFILL.md for full details.
|
|
11
|
-
asyncCore.asyncHooks.sanitizePromise = (res) => {
|
|
12
|
-
if (res && typeof res.then === 'function') {
|
|
13
|
-
return new Promise((resolve, reject) => {
|
|
14
|
-
setTimeout(() => {
|
|
15
|
-
res.then(resolve, reject);
|
|
16
|
-
}, 0);
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
return res;
|
|
20
|
-
};
|
|
21
|
-
function captureRestorers() {
|
|
22
|
-
const restorers = new Set();
|
|
23
|
-
for (const hook of asyncCore.hooks) {
|
|
24
|
-
const restorer = hook();
|
|
25
|
-
if (restorer)
|
|
26
|
-
restorers.add(restorer);
|
|
27
|
-
}
|
|
28
|
-
return restorers;
|
|
29
|
-
}
|
|
30
|
-
function wrap(fn, capturedRestorers) {
|
|
31
|
-
if (typeof fn !== 'function')
|
|
32
|
-
return fn;
|
|
33
|
-
const restorers = capturedRestorers || captureRestorers();
|
|
34
|
-
return function (...args) {
|
|
35
|
-
const undoers = [];
|
|
36
|
-
for (const restore of restorers)
|
|
37
|
-
undoers.push(restore());
|
|
38
|
-
try {
|
|
39
|
-
return fn.apply(this, args);
|
|
40
|
-
}
|
|
41
|
-
finally {
|
|
42
|
-
if (originals.queueMicrotask) {
|
|
43
|
-
// Double microtask ensures we run after the first await resumption microtask
|
|
44
|
-
originals.queueMicrotask.call(globalThis, () => {
|
|
45
|
-
originals.queueMicrotask.call(globalThis, () => {
|
|
46
|
-
originals.queueMicrotask.call(globalThis, () => {
|
|
47
|
-
for (let i = undoers.length - 1; i >= 0; i--)
|
|
48
|
-
undoers[i]();
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
for (let i = undoers.length - 1; i >= 0; i--)
|
|
55
|
-
undoers[i]();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
const GLOBAL_ORIGINALS = Symbol.for('mutts.originals');
|
|
61
|
-
const GLOBAL_PROMISE = Symbol.for('mutts.OriginalPromise');
|
|
62
|
-
let originals;
|
|
63
|
-
let OriginalPromise;
|
|
64
|
-
if (globalThis[GLOBAL_ORIGINALS]) {
|
|
65
|
-
originals = globalThis[GLOBAL_ORIGINALS];
|
|
66
|
-
OriginalPromise = globalThis[GLOBAL_PROMISE];
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
OriginalPromise = globalThis.Promise;
|
|
70
|
-
originals = {
|
|
71
|
-
// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching
|
|
72
|
-
then: OriginalPromise.prototype.then,
|
|
73
|
-
catch: OriginalPromise.prototype.catch,
|
|
74
|
-
finally: OriginalPromise.prototype.finally,
|
|
75
|
-
resolve: OriginalPromise.resolve,
|
|
76
|
-
reject: OriginalPromise.reject,
|
|
77
|
-
all: OriginalPromise.all,
|
|
78
|
-
allSettled: OriginalPromise.allSettled,
|
|
79
|
-
race: OriginalPromise.race,
|
|
80
|
-
any: OriginalPromise.any,
|
|
81
|
-
setTimeout: globalThis.setTimeout,
|
|
82
|
-
setInterval: globalThis.setInterval,
|
|
83
|
-
setImmediate: globalThis.setImmediate,
|
|
84
|
-
requestAnimationFrame: globalThis.requestAnimationFrame,
|
|
85
|
-
queueMicrotask: globalThis.queueMicrotask,
|
|
86
|
-
};
|
|
87
|
-
globalThis[GLOBAL_ORIGINALS] = originals;
|
|
88
|
-
globalThis[GLOBAL_PROMISE] = OriginalPromise;
|
|
89
|
-
}
|
|
90
|
-
// Ensure modern statics are captured even if originals was cached from an older version
|
|
91
|
-
if (!originals.allSettled)
|
|
92
|
-
originals.allSettled = OriginalPromise.allSettled;
|
|
93
|
-
if (!originals.any)
|
|
94
|
-
originals.any = OriginalPromise.any;
|
|
95
|
-
if (!originals.race)
|
|
96
|
-
originals.race = OriginalPromise.race;
|
|
97
|
-
function patchedThen(onFulfilled, onRejected) {
|
|
98
|
-
const context = promiseContexts.get(this) || captureRestorers();
|
|
99
|
-
const nextPromise = originals.then.call(this, wrap(onFulfilled, context), wrap(onRejected, context));
|
|
100
|
-
if (context.size > 0)
|
|
101
|
-
promiseContexts.set(nextPromise, context);
|
|
102
|
-
return nextPromise;
|
|
103
|
-
}
|
|
104
|
-
function patchedCatch(onRejected) {
|
|
105
|
-
const context = promiseContexts.get(this) || captureRestorers();
|
|
106
|
-
const nextPromise = originals.catch.call(this, wrap(onRejected, context));
|
|
107
|
-
if (context.size > 0)
|
|
108
|
-
promiseContexts.set(nextPromise, context);
|
|
109
|
-
return nextPromise;
|
|
110
|
-
}
|
|
111
|
-
function patchedFinally(onFinally) {
|
|
112
|
-
const context = promiseContexts.get(this) || captureRestorers();
|
|
113
|
-
const nextPromise = originals.finally.call(this, wrap(onFinally, context));
|
|
114
|
-
if (context.size > 0)
|
|
115
|
-
promiseContexts.set(nextPromise, context);
|
|
116
|
-
return nextPromise;
|
|
117
|
-
}
|
|
118
|
-
function PatchedPromise(executor) {
|
|
119
|
-
if (typeof executor === 'function') {
|
|
120
|
-
const p = new OriginalPromise((resolve, reject) => {
|
|
121
|
-
const wrappedResolve = wrap(resolve);
|
|
122
|
-
const wrappedReject = wrap(reject);
|
|
123
|
-
executor(wrappedResolve, wrappedReject);
|
|
124
|
-
});
|
|
125
|
-
const context = captureRestorers();
|
|
126
|
-
promiseContexts.set(p, context); // Always set, even if empty (Sticky Root)
|
|
127
|
-
return p;
|
|
128
|
-
}
|
|
129
|
-
return new OriginalPromise(executor);
|
|
130
|
-
}
|
|
131
|
-
// Copy statics
|
|
132
|
-
Object.assign(PatchedPromise, OriginalPromise);
|
|
133
|
-
// Inherit prototype for instanceof checks
|
|
134
|
-
PatchedPromise.prototype = OriginalPromise.prototype;
|
|
135
|
-
PatchedPromise.resolve = ((value) => {
|
|
136
|
-
const p = originals.resolve.call(OriginalPromise, value);
|
|
137
|
-
const context = captureRestorers();
|
|
138
|
-
// Ensure we don't overwrite if it already has context (e.g. from constructor)
|
|
139
|
-
if (context.size > 0 && !promiseContexts.has(p))
|
|
140
|
-
promiseContexts.set(p, context);
|
|
141
|
-
return p;
|
|
142
|
-
});
|
|
143
|
-
PatchedPromise.reject = ((reason) => {
|
|
144
|
-
const p = originals.reject.call(OriginalPromise, reason);
|
|
145
|
-
const context = captureRestorers();
|
|
146
|
-
if (context.size > 0)
|
|
147
|
-
promiseContexts.set(p, context);
|
|
148
|
-
return p;
|
|
149
|
-
});
|
|
150
|
-
PatchedPromise.all = ((values) => {
|
|
151
|
-
const p = originals.all.call(OriginalPromise, values);
|
|
152
|
-
const context = captureRestorers();
|
|
153
|
-
if (context.size > 0)
|
|
154
|
-
promiseContexts.set(p, context);
|
|
155
|
-
return p;
|
|
156
|
-
});
|
|
157
|
-
PatchedPromise.allSettled = ((values) => {
|
|
158
|
-
const p = originals.allSettled.call(OriginalPromise, values);
|
|
159
|
-
const context = captureRestorers();
|
|
160
|
-
if (context.size > 0)
|
|
161
|
-
promiseContexts.set(p, context);
|
|
162
|
-
return p;
|
|
163
|
-
});
|
|
164
|
-
PatchedPromise.race = ((values) => {
|
|
165
|
-
const p = originals.race.call(OriginalPromise, values);
|
|
166
|
-
const context = captureRestorers();
|
|
167
|
-
if (context.size > 0)
|
|
168
|
-
promiseContexts.set(p, context);
|
|
169
|
-
return p;
|
|
170
|
-
});
|
|
171
|
-
PatchedPromise.any = ((values) => {
|
|
172
|
-
const p = originals.any.call(OriginalPromise, values);
|
|
173
|
-
const context = captureRestorers();
|
|
174
|
-
if (context.size > 0)
|
|
175
|
-
promiseContexts.set(p, context);
|
|
176
|
-
return p;
|
|
177
|
-
});
|
|
178
|
-
// Only apply patches if not already applied (or re-apply safely)
|
|
179
|
-
// Note: OriginalPromise.prototype might be shared if we used the global one.
|
|
180
|
-
// We must ensure we don't patch it twice if it's the SAME object.
|
|
181
|
-
if (OriginalPromise.prototype.then !== patchedThen) {
|
|
182
|
-
// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching
|
|
183
|
-
OriginalPromise.prototype.then = patchedThen;
|
|
184
|
-
OriginalPromise.prototype.catch = patchedCatch;
|
|
185
|
-
OriginalPromise.prototype.finally = patchedFinally;
|
|
186
|
-
}
|
|
187
|
-
try {
|
|
188
|
-
Object.defineProperty(OriginalPromise, Symbol.species, {
|
|
189
|
-
get: () => PatchedPromise,
|
|
190
|
-
configurable: true,
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
catch (_e) { }
|
|
194
|
-
globalThis.Promise = PatchedPromise;
|
|
195
|
-
globalThis.setTimeout = ((callback, ...args) => {
|
|
196
|
-
return originals.setTimeout.call(globalThis, wrap(callback), ...args);
|
|
197
|
-
});
|
|
198
|
-
globalThis.setInterval = ((callback, ...args) => {
|
|
199
|
-
return originals.setInterval.call(globalThis, wrap(callback), ...args);
|
|
200
|
-
});
|
|
201
|
-
if (originals.setImmediate) {
|
|
202
|
-
globalThis.setImmediate = ((callback, ...args) => {
|
|
203
|
-
return originals.setImmediate.call(globalThis, wrap(callback), ...args);
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
if (originals.requestAnimationFrame) {
|
|
207
|
-
globalThis.requestAnimationFrame = (callback) => {
|
|
208
|
-
return originals.requestAnimationFrame.call(globalThis, wrap(callback));
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
if (originals.queueMicrotask) {
|
|
212
|
-
globalThis.queueMicrotask = (callback) => {
|
|
213
|
-
originals.queueMicrotask.call(globalThis, wrap(callback));
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
//# sourceMappingURL=async-browser-BU_IfxYD.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"async-browser-BU_IfxYD.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\tif (originals.queueMicrotask) {\n\t\t\t\t// Double microtask ensures we run after the first await resumption microtask\n\t\t\t\toriginals.queueMicrotask.call(globalThis, () => {\n\t\t\t\t\toriginals.queueMicrotask.call(globalThis, () => {\n\t\t\t\t\t\toriginals.queueMicrotask.call(globalThis, () => {\n\t\t\t\t\t\t\tfor (let i = undoers.length - 1; i >= 0; i--) undoers[i]()\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tfor (let i = undoers.length - 1; i >= 0; i--) undoers[i]()\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst GLOBAL_ORIGINALS = Symbol.for('mutts.originals')\nconst GLOBAL_PROMISE = Symbol.for('mutts.OriginalPromise')\n\nlet originals: any\nlet OriginalPromise: any\n\nif ((globalThis as any)[GLOBAL_ORIGINALS]) {\n\toriginals = (globalThis as any)[GLOBAL_ORIGINALS]\n\tOriginalPromise = (globalThis as any)[GLOBAL_PROMISE]\n} else {\n\tOriginalPromise = globalThis.Promise\n\toriginals = {\n\t\t// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching\n\t\tthen: OriginalPromise.prototype.then,\n\t\tcatch: OriginalPromise.prototype.catch,\n\t\tfinally: OriginalPromise.prototype.finally,\n\t\tresolve: OriginalPromise.resolve,\n\t\treject: OriginalPromise.reject,\n\t\tall: OriginalPromise.all,\n\t\tallSettled: (OriginalPromise as any).allSettled,\n\t\trace: OriginalPromise.race,\n\t\tany: (OriginalPromise as any).any,\n\t\tsetTimeout: globalThis.setTimeout,\n\t\tsetInterval: globalThis.setInterval,\n\t\tsetImmediate: (globalThis as any).setImmediate,\n\t\trequestAnimationFrame: (globalThis as any).requestAnimationFrame,\n\t\tqueueMicrotask: globalThis.queueMicrotask,\n\t}\n\t;(globalThis as any)[GLOBAL_ORIGINALS] = originals\n\t;(globalThis as any)[GLOBAL_PROMISE] = OriginalPromise\n}\n\n// Ensure modern statics are captured even if originals was cached from an older version\nif (!originals.allSettled) originals.allSettled = (OriginalPromise as any).allSettled\nif (!originals.any) originals.any = (OriginalPromise as any).any\nif (!originals.race) originals.race = OriginalPromise.race\n\nfunction patchedThen(this: any, onFulfilled: any, onRejected: any) {\n\tconst context = promiseContexts.get(this) || captureRestorers()\n\tconst nextPromise = originals.then.call(\n\t\tthis,\n\t\twrap(onFulfilled, context),\n\t\twrap(onRejected, context)\n\t)\n\tif (context.size > 0) promiseContexts.set(nextPromise, context)\n\treturn nextPromise\n}\n\nfunction patchedCatch(this: any, onRejected: any) {\n\tconst context = promiseContexts.get(this) || captureRestorers()\n\tconst nextPromise = originals.catch.call(this, wrap(onRejected, context))\n\tif (context.size > 0) promiseContexts.set(nextPromise, context)\n\treturn nextPromise\n}\n\nfunction patchedFinally(this: any, onFinally: any) {\n\tconst context = promiseContexts.get(this) || captureRestorers()\n\tconst nextPromise = originals.finally.call(this, wrap(onFinally, context))\n\tif (context.size > 0) promiseContexts.set(nextPromise, context)\n\treturn nextPromise\n}\n\nfunction PatchedPromise<T>(\n\tthis: any,\n\texecutor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void\n) {\n\tif (typeof executor === 'function') {\n\t\tconst p = new OriginalPromise((resolve, reject) => {\n\t\t\tconst wrappedResolve = wrap(resolve)\n\t\t\tconst wrappedReject = wrap(reject)\n\t\t\texecutor(wrappedResolve, wrappedReject)\n\t\t})\n\t\tconst context = captureRestorers()\n\t\tpromiseContexts.set(p, context) // Always set, even if empty (Sticky Root)\n\t\treturn p\n\t}\n\treturn new OriginalPromise(executor)\n}\n\n// Copy statics\nObject.assign(PatchedPromise, OriginalPromise as any)\n\n// Inherit prototype for instanceof checks\nPatchedPromise.prototype = OriginalPromise.prototype\n\nPatchedPromise.resolve = (<T>(value?: T | PromiseLike<T>): Promise<T> => {\n\tconst p = originals.resolve.call(OriginalPromise, value) as Promise<T>\n\tconst context = captureRestorers()\n\t// Ensure we don't overwrite if it already has context (e.g. from constructor)\n\tif (context.size > 0 && !promiseContexts.has(p)) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.reject = (<T = never>(reason?: any): Promise<T> => {\n\tconst p = originals.reject.call(OriginalPromise, reason) as Promise<T>\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.all = (<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>[]> => {\n\tconst p = originals.all.call(OriginalPromise, values) as Promise<Awaited<T>[]>\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.allSettled = (<T>(\n\tvalues: Iterable<T | PromiseLike<T>>\n): Promise<PromiseSettledResult<Awaited<T>>[]> => {\n\tconst p = (originals.allSettled as any).call(OriginalPromise, values)\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.race = (<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>> => {\n\tconst p = originals.race.call(OriginalPromise, values) as Promise<Awaited<T>>\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\nPatchedPromise.any = (<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>> => {\n\tconst p = (originals.any as any).call(OriginalPromise, values)\n\tconst context = captureRestorers()\n\tif (context.size > 0) promiseContexts.set(p, context)\n\treturn p\n}) as any\n\n// Only apply patches if not already applied (or re-apply safely)\n// Note: OriginalPromise.prototype might be shared if we used the global one.\n// We must ensure we don't patch it twice if it's the SAME object.\nif (OriginalPromise.prototype.then !== patchedThen) {\n\t// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching\n\tOriginalPromise.prototype.then = patchedThen as any\n\tOriginalPromise.prototype.catch = patchedCatch as any\n\tOriginalPromise.prototype.finally = patchedFinally as any\n}\n\ntry {\n\tObject.defineProperty(OriginalPromise, Symbol.species, {\n\t\tget: () => PatchedPromise,\n\t\tconfigurable: true,\n\t})\n} catch (_e) {}\n\n;(globalThis as any).Promise = PatchedPromise\n\nglobalThis.setTimeout = ((callback: Function, ...args: any[]) => {\n\treturn originals.setTimeout.call(globalThis, wrap(callback as any), ...args)\n}) as any\n\nglobalThis.setInterval = ((callback: Function, ...args: any[]) => {\n\treturn originals.setInterval.call(globalThis, wrap(callback as any), ...args)\n}) as any\n\nif (originals.setImmediate) {\n\t;(globalThis as any).setImmediate = ((callback: Function, ...args: any[]) => {\n\t\treturn originals.setImmediate.call(globalThis, wrap(callback as any), ...args)\n\t}) as any\n}\n\nif (originals.requestAnimationFrame) {\n\tglobalThis.requestAnimationFrame = (callback: FrameRequestCallback) => {\n\t\treturn originals.requestAnimationFrame.call(globalThis, wrap(callback))\n\t}\n}\n\nif (originals.queueMicrotask) {\n\tglobalThis.queueMicrotask = (callback: VoidFunction): void => {\n\t\toriginals.queueMicrotask.call(globalThis, wrap(callback))\n\t}\n}\n"],"names":["asyncHooks","hooks"],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// Queue for hooks registered before the environment is ready (circular dependency fix)
|
|
4
|
-
const hooks = new Set();
|
|
5
|
-
const asyncHooks = {
|
|
6
|
-
addHook(hook) {
|
|
7
|
-
hooks.add(hook);
|
|
8
|
-
return () => hooks.delete(hook);
|
|
9
|
-
},
|
|
10
|
-
/**
|
|
11
|
-
* [Hack] Sanitize a promise (or value) to prevent context leaks.
|
|
12
|
-
* Default: Identity function.
|
|
13
|
-
* Browser: Uses Macrotask wrapping to break microtask chains.
|
|
14
|
-
*/
|
|
15
|
-
sanitizePromise(p) {
|
|
16
|
-
return p;
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Register a hook that will be called whenever an asynchronous operation is initiated.
|
|
21
|
-
* The hook should return a restorer function which will be called just before the async callback runs.
|
|
22
|
-
* That restorer should in turn return an undoer function which will be called just after the async callback finishes.
|
|
23
|
-
*/
|
|
24
|
-
const asyncHook = (hook) => asyncHooks.addHook(hook);
|
|
25
|
-
|
|
26
|
-
exports.asyncHook = asyncHook;
|
|
27
|
-
exports.asyncHooks = asyncHooks;
|
|
28
|
-
exports.hooks = hooks;
|
|
29
|
-
//# sourceMappingURL=async-core-CRLKP3l-.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"async-core-CRLKP3l-.cjs","sources":["../../src/async/index.ts"],"sourcesContent":["export type Restorer = () => () => void\nexport type Hook = () => Restorer\n\n// Queue for hooks registered before the environment is ready (circular dependency fix)\nexport const hooks = new Set<Hook>()\n\nexport const asyncHooks = {\n\taddHook(hook: Hook): () => void {\n\t\thooks.add(hook)\n\t\treturn () => hooks.delete(hook)\n\t},\n\t/**\n\t * [Hack] Sanitize a promise (or value) to prevent context leaks.\n\t * Default: Identity function.\n\t * Browser: Uses Macrotask wrapping to break microtask chains.\n\t */\n\tsanitizePromise(p: any): any {\n\t\treturn p\n\t},\n}\n\n/**\n * Register a hook that will be called whenever an asynchronous operation is initiated.\n * The hook should return a restorer function which will be called just before the async callback runs.\n * That restorer should in turn return an undoer function which will be called just after the async callback finishes.\n */\nexport const asyncHook = (hook: Hook) => asyncHooks.addHook(hook)\n"],"names":[],"mappings":";;AAGA;AACO,MAAM,KAAK,GAAG,IAAI,GAAG;AAErB,MAAM,UAAU,GAAG;AACzB,IAAA,OAAO,CAAC,IAAU,EAAA;AACjB,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACf,OAAO,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IAChC,CAAC;AACD;;;;AAIG;AACH,IAAA,eAAe,CAAC,CAAM,EAAA;AACrB,QAAA,OAAO,CAAC;IACT,CAAC;;AAGF;;;;AAIG;AACI,MAAM,SAAS,GAAG,CAAC,IAAU,KAAK,UAAU,CAAC,OAAO,CAAC,IAAI;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"async-node-3PrbVAbB.cjs","sources":["../../src/async/node.ts"],"sourcesContent":["import { createHook } from 'node:async_hooks'\nimport { hooks, type Restorer } from '.'\n\n// 1. Generic async_hooks implementation for Hooks\n// This maintains support for 'asyncHooks.addHook' for generic use cases.\n\nconst contexts = new Map<number, Restorer[]>()\nconst activeUndoers = new Map<number, (() => void)[]>()\n\n// Helper to capture current hooks state\nfunction captureRestorers() {\n\tif (hooks.size === 0) return []\n\tconst restorers: Restorer[] = []\n\tfor (const h of hooks) {\n\t\tconst r = h()\n\t\tif (r) restorers.push(r)\n\t}\n\treturn restorers\n}\n\n// Manual Wrap function to handle Promise callbacks\nfunction wrap<Args extends any[], R>(fn: ((...args: Args) => R) | null | undefined) {\n\tif (typeof fn !== 'function') return fn\n\tconst restorers = captureRestorers()\n\tif (restorers.length === 0) return fn\n\n\treturn function (this: any, ...args: Args) {\n\t\tconst undoers: (() => void)[] = []\n\t\tfor (const restore of restorers) {\n\t\t\tconst u = restore()\n\t\t\tif (u) undoers.push(u)\n\t\t}\n\t\ttry {\n\t\t\treturn fn.apply(this, args)\n\t\t} finally {\n\t\t\tfor (let i = undoers.length - 1; i >= 0; i--) undoers[i]()\n\t\t}\n\t}\n}\n\nconst hook = createHook({\n\tinit(asyncId, _type, _triggerId, _resource) {\n\t\t// Used for native resources like Timers\n\t\tconst restorers = captureRestorers()\n\t\tif (restorers.length > 0) contexts.set(asyncId, restorers)\n\t},\n\tbefore(asyncId) {\n\t\tconst restorers = contexts.get(asyncId)\n\t\tif (!restorers) return\n\t\tconst undoers: (() => void)[] = []\n\t\tfor (const restore of restorers) {\n\t\t\tconst u = restore()\n\t\t\tif (u) undoers.push(u)\n\t\t}\n\t\tif (undoers.length > 0) activeUndoers.set(asyncId, undoers)\n\t},\n\tafter(asyncId) {\n\t\tconst undoers = activeUndoers.get(asyncId)\n\t\tif (!undoers) return\n\t\tfor (let i = undoers.length - 1; i >= 0; i--) undoers[i]()\n\t\tactiveUndoers.delete(asyncId)\n\t},\n\tdestroy(asyncId) {\n\t\tcontexts.delete(asyncId)\n\t\tactiveUndoers.delete(asyncId)\n\t},\n})\nhook.enable()\n\n// 2. Shadow Promise Implementation\n// Ensures V8 await resumptions are visible as .then callbacks, wrapping them to restore context.\n\nconst OriginalPromise = globalThis.Promise\nconst originalMethods = {\n\t// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching\n\tthen: OriginalPromise.prototype.then,\n\tcatch: OriginalPromise.prototype.catch,\n\tfinally: OriginalPromise.prototype.finally,\n\tresolve: OriginalPromise.resolve,\n\treject: OriginalPromise.reject,\n\tall: OriginalPromise.all,\n}\n\n// Patch prototype\n// biome-ignore lint/suspicious/noThenProperty: Intentional Promise.prototype patching\nOriginalPromise.prototype.then = function (onFulfilled, onRejected) {\n\treturn originalMethods.then.call(this, wrap(onFulfilled), wrap(onRejected))\n} as any\nOriginalPromise.prototype.catch = function (onRejected) {\n\treturn originalMethods.catch.call(this, wrap(onRejected))\n} as any\nOriginalPromise.prototype.finally = function (onFinally) {\n\treturn originalMethods.finally.call(this, wrap(onFinally))\n} as any\n"],"names":["hooks","createHook"],"mappings":"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"}
|