mutts 1.0.6 → 1.0.8
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 +61 -23
- package/dist/async/browser.d.ts +2 -0
- package/dist/async/browser.d.ts.map +1 -0
- package/dist/async/index.d.ts +18 -0
- package/dist/async/index.d.ts.map +1 -0
- package/dist/async/node.d.ts +2 -0
- package/dist/async/node.d.ts.map +1 -0
- package/dist/{chunks/index-CDCOjzTy.js → browser.cjs} +5913 -4382
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.ts +1655 -0
- package/dist/browser.esm.js +305 -0
- package/dist/browser.esm.js.map +1 -0
- package/dist/chunks/async-browser-CA0jPWIi.cjs +304 -0
- package/dist/chunks/async-browser-CA0jPWIi.cjs.map +1 -0
- package/dist/chunks/async-core-UqHzvJ-S.cjs +25 -0
- package/dist/chunks/async-core-UqHzvJ-S.cjs.map +1 -0
- package/dist/chunks/async-node-BYHuGTni.cjs +103 -0
- package/dist/chunks/async-node-BYHuGTni.cjs.map +1 -0
- package/dist/chunks/{index-DiP0RXoZ.esm.js → index-DhaOVusv.esm.js} +5851 -4345
- package/dist/chunks/index-DhaOVusv.esm.js.map +1 -0
- package/dist/decorator.d.ts +17 -18
- package/dist/decorator.d.ts.map +1 -0
- package/dist/destroyable.d.ts +12 -15
- package/dist/destroyable.d.ts.map +1 -0
- package/dist/devtools/devtool/devtools.d.ts +1 -0
- package/dist/devtools/devtool/devtools.d.ts.map +1 -0
- package/dist/devtools/devtool/panel.d.ts +2 -0
- package/dist/devtools/devtool/panel.d.ts.map +1 -0
- package/dist/devtools/panel.js.map +1 -1
- package/dist/entry-browser.d.ts +3 -0
- package/dist/entry-browser.d.ts.map +1 -0
- package/dist/entry-node.d.ts +3 -0
- package/dist/entry-node.d.ts.map +1 -0
- package/dist/eventful.d.ts +3 -5
- package/dist/eventful.d.ts.map +1 -0
- package/dist/index.d.ts +13 -19
- package/dist/index.d.ts.map +1 -0
- package/dist/indexable.d.ts +10 -10
- package/dist/indexable.d.ts.map +1 -0
- package/dist/introspection.d.ts +27 -0
- package/dist/introspection.d.ts.map +1 -0
- package/dist/iterableWeak.d.ts +53 -0
- package/dist/iterableWeak.d.ts.map +1 -0
- package/dist/mixins.d.ts +25 -0
- package/dist/mixins.d.ts.map +1 -0
- package/dist/mutts.umd.js +1 -1
- 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 +105 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.d.ts +1 -0
- package/dist/node.esm.js +104 -0
- package/dist/node.esm.js.map +1 -0
- package/dist/promiseChain.d.ts +4 -5
- package/dist/promiseChain.d.ts.map +1 -0
- package/dist/reactive/array.d.ts +49 -0
- package/dist/reactive/array.d.ts.map +1 -0
- package/dist/reactive/buffer.d.ts +44 -0
- package/dist/reactive/buffer.d.ts.map +1 -0
- package/dist/reactive/change.d.ts +29 -0
- package/dist/reactive/change.d.ts.map +1 -0
- package/dist/reactive/debug.d.ts +111 -0
- package/dist/reactive/debug.d.ts.map +1 -0
- package/dist/reactive/deep-touch.d.ts +28 -0
- package/dist/reactive/deep-touch.d.ts.map +1 -0
- package/dist/reactive/deep-watch-state.d.ts +25 -0
- package/dist/reactive/deep-watch-state.d.ts.map +1 -0
- package/dist/reactive/deep-watch.d.ts +19 -0
- package/dist/reactive/deep-watch.d.ts.map +1 -0
- package/dist/reactive/effect-context.d.ts +7 -0
- package/dist/reactive/effect-context.d.ts.map +1 -0
- package/dist/reactive/effects.d.ts +151 -0
- package/dist/reactive/effects.d.ts.map +1 -0
- package/dist/reactive/index.d.ts +20 -0
- package/dist/reactive/index.d.ts.map +1 -0
- package/dist/reactive/interface.d.ts +64 -0
- package/dist/reactive/interface.d.ts.map +1 -0
- package/dist/reactive/map.d.ts +30 -0
- package/dist/reactive/map.d.ts.map +1 -0
- package/dist/reactive/memoize.d.ts +5 -0
- package/dist/reactive/memoize.d.ts.map +1 -0
- package/dist/reactive/non-reactive-state.d.ts +9 -0
- package/dist/reactive/non-reactive-state.d.ts.map +1 -0
- package/dist/reactive/non-reactive.d.ts +11 -0
- package/dist/reactive/non-reactive.d.ts.map +1 -0
- package/dist/reactive/project.d.ts +41 -0
- package/dist/reactive/project.d.ts.map +1 -0
- package/dist/reactive/proxy-state.d.ts +8 -0
- package/dist/reactive/proxy-state.d.ts.map +1 -0
- package/dist/reactive/proxy.d.ts +23 -0
- package/dist/reactive/proxy.d.ts.map +1 -0
- package/dist/reactive/record.d.ts +116 -0
- package/dist/reactive/record.d.ts.map +1 -0
- package/dist/reactive/register.d.ts +64 -0
- package/dist/reactive/register.d.ts.map +1 -0
- package/dist/reactive/registry.d.ts +20 -0
- package/dist/reactive/registry.d.ts.map +1 -0
- package/dist/reactive/set.d.ts +28 -0
- package/dist/reactive/set.d.ts.map +1 -0
- package/dist/reactive/tracking.d.ts +7 -0
- package/dist/reactive/tracking.d.ts.map +1 -0
- package/dist/reactive/types.d.ts +376 -0
- package/dist/reactive/types.d.ts.map +1 -0
- package/dist/std-decorators.d.ts +9 -11
- package/dist/std-decorators.d.ts.map +1 -0
- package/dist/utils.d.ts +49 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/zone.d.ts +40 -0
- package/dist/zone.d.ts.map +1 -0
- package/docs/ai/api-reference.md +0 -2
- package/docs/reactive/advanced.md +2 -5
- package/docs/reactive/collections.md +0 -125
- package/docs/reactive/core.md +27 -24
- package/docs/reactive/debugging.md +12 -2
- package/docs/reactive/project.md +1 -1
- package/docs/reactive/scan.md +78 -0
- package/docs/reactive.md +2 -1
- package/docs/std-decorators.md +69 -0
- package/docs/zone.md +95 -0
- package/package.json +67 -23
- package/src/async/browser.ts +319 -0
- package/src/async/index.ts +23 -0
- package/src/async/node.ts +104 -0
- package/src/decorator.ts +5 -1
- package/src/destroyable.ts +1 -1
- package/src/entry-browser.ts +5 -0
- package/src/entry-node.ts +5 -0
- package/src/index.d.ts +12 -9
- package/src/index.ts +23 -14
- package/src/indexable.ts +42 -0
- package/src/mixins.ts +2 -2
- package/src/reactive/array.ts +274 -179
- package/src/reactive/buffer.ts +168 -0
- package/src/reactive/change.ts +2 -2
- package/src/reactive/effect-context.ts +15 -91
- package/src/reactive/effects.ts +119 -179
- package/src/reactive/index.ts +11 -13
- package/src/reactive/interface.ts +19 -33
- package/src/reactive/map.ts +49 -62
- package/src/reactive/memoize.ts +19 -9
- package/src/reactive/project.ts +43 -22
- package/src/reactive/proxy.ts +16 -41
- package/src/reactive/record.ts +3 -3
- package/src/reactive/register.ts +5 -7
- package/src/reactive/registry.ts +9 -17
- package/src/reactive/set.ts +43 -57
- package/src/reactive/tracking.ts +1 -29
- package/src/reactive/types.ts +46 -23
- package/src/utils.ts +80 -37
- package/src/zone.ts +138 -0
- package/dist/chunks/_tslib-BgjropY9.js +0 -81
- package/dist/chunks/_tslib-BgjropY9.js.map +0 -1
- package/dist/chunks/_tslib-MCKDzsSq.esm.js +0 -75
- package/dist/chunks/_tslib-MCKDzsSq.esm.js.map +0 -1
- package/dist/chunks/decorator-BGILvPtN.esm.js +0 -627
- package/dist/chunks/decorator-BGILvPtN.esm.js.map +0 -1
- package/dist/chunks/decorator-BQ2eBTCj.js +0 -651
- package/dist/chunks/decorator-BQ2eBTCj.js.map +0 -1
- package/dist/chunks/index-CDCOjzTy.js.map +0 -1
- package/dist/chunks/index-DiP0RXoZ.esm.js.map +0 -1
- package/dist/decorator.esm.js +0 -2
- package/dist/decorator.esm.js.map +0 -1
- package/dist/decorator.js +0 -11
- package/dist/decorator.js.map +0 -1
- package/dist/destroyable.esm.js +0 -109
- package/dist/destroyable.esm.js.map +0 -1
- package/dist/destroyable.js +0 -116
- package/dist/destroyable.js.map +0 -1
- package/dist/eventful.esm.js +0 -66
- package/dist/eventful.esm.js.map +0 -1
- package/dist/eventful.js +0 -68
- package/dist/eventful.js.map +0 -1
- package/dist/index.esm.js +0 -53
- package/dist/index.esm.js.map +0 -1
- package/dist/index.js +0 -139
- package/dist/index.js.map +0 -1
- package/dist/indexable.esm.js +0 -285
- package/dist/indexable.esm.js.map +0 -1
- package/dist/indexable.js +0 -291
- package/dist/indexable.js.map +0 -1
- package/dist/promiseChain.esm.js +0 -78
- package/dist/promiseChain.esm.js.map +0 -1
- package/dist/promiseChain.js +0 -80
- package/dist/promiseChain.js.map +0 -1
- package/dist/reactive.d.ts +0 -910
- package/dist/reactive.esm.js +0 -5
- package/dist/reactive.esm.js.map +0 -1
- package/dist/reactive.js +0 -59
- package/dist/reactive.js.map +0 -1
- package/dist/std-decorators.esm.js +0 -196
- package/dist/std-decorators.esm.js.map +0 -1
- package/dist/std-decorators.js +0 -204
- package/dist/std-decorators.js.map +0 -1
- package/src/reactive/mapped.ts +0 -129
- package/src/reactive/zone.ts +0 -208
package/README.md
CHANGED
|
@@ -44,6 +44,66 @@ import { Destroyable, allocated } from 'mutts/destroyable'
|
|
|
44
44
|
|
|
45
45
|
**Note:** When importing from source files, you'll need to configure your build system (TypeScript, Vite, Webpack, etc.) to handle TypeScript compilation and module resolution. The source files are published alongside the built modules, so you can import directly from the `src` directory.
|
|
46
46
|
|
|
47
|
+
### Environment Setup (Node vs Browser)
|
|
48
|
+
|
|
49
|
+
`mutts` has two distinct entry points to handle environment-specific behaviors (like `async_hooks` in Node vs `wrap` in Browser).
|
|
50
|
+
|
|
51
|
+
* **Automatic Resolution**: Bundlers (Vite, Rollup, Webpack) and Node.js will automatically pick the correct entry point (`mutts/node` or `mutts/browser`) based on the `exports` field in `package.json`.
|
|
52
|
+
* **Manual Selection**: You can force a specific environment if needed:
|
|
53
|
+
```typescript
|
|
54
|
+
import 'mutts/node' // Side-effect import to polyfill async hooks in tests
|
|
55
|
+
import { ... } from 'mutts/node' // Explicit Node entry
|
|
56
|
+
import { ... } from 'mutts/browser' // Explicit Browser entry
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## [Reactive](./docs/reactive.md)
|
|
60
|
+
|
|
61
|
+
A comprehensive reactivity system. See the **[Introduction](./docs/reactive/core.md)** or browse the **[Table of Contents](./docs/reactive.md)**.
|
|
62
|
+
|
|
63
|
+
**Key Features:**
|
|
64
|
+
- **Core Reactivity**: Proxy-based property access tracking with `reactive()`, `effect()`, `memoize()`, `project()`, and `scan()`
|
|
65
|
+
- **Deep Watching**: Automatic tracking of nested object changes with `deepWatch()`
|
|
66
|
+
- **Reactive Collections**: Specialized reactive versions of Array, Map, Set, WeakMap, and WeakSet
|
|
67
|
+
- **Class Reactivity**: `@reactive` decorator and `ReactiveBase` for class-based reactivity
|
|
68
|
+
- **Reactive Mixin**: Always-reactive classes with mixin support (`Reactive`)
|
|
69
|
+
- **Back-Reference System**: Efficient change propagation through object hierarchies
|
|
70
|
+
- **Type Safety**: Full TypeScript support with proper type inference
|
|
71
|
+
- **Performance Optimized**: Lazy back-reference creation and efficient dependency tracking
|
|
72
|
+
- **Debugging & Development**: Built-in tools like cycle detection and memoization discrepancy check
|
|
73
|
+
|
|
74
|
+
**Use Cases:**
|
|
75
|
+
- State management systems
|
|
76
|
+
- UI framework reactivity
|
|
77
|
+
- Data synchronization
|
|
78
|
+
- Real-time applications
|
|
79
|
+
- Form validation and processing
|
|
80
|
+
|
|
81
|
+
## [Zones & Async Context](./docs/zone.md)
|
|
82
|
+
|
|
83
|
+
A powerful context propagation system that maintains state across asynchronous boundaries (Promises, timeouts, listeners).
|
|
84
|
+
|
|
85
|
+
**Key Features:**
|
|
86
|
+
- **Universal Context**: Works reliably in both Node.js (via `async_hooks`) and Browser/Edge environments.
|
|
87
|
+
- **Zone**: A simple value container that propagates with execution flow.
|
|
88
|
+
- **ZoneHistory**: A zone that tracks the history of values it has held in the current execution path.
|
|
89
|
+
- **ZoneAggregator**: Combines multiple zones into a single propagatable context.
|
|
90
|
+
- **Async Hooks**: Low-level hooks to capture, restore, and undo context changes across async boundaries.
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
import { Zone, asyncZone } from 'mutts'
|
|
94
|
+
|
|
95
|
+
const userZone = new Zone<User>()
|
|
96
|
+
// Register for async propagation
|
|
97
|
+
asyncZone.add(userZone)
|
|
98
|
+
|
|
99
|
+
userZone.with(currentUser, async () => {
|
|
100
|
+
// Context is available here
|
|
101
|
+
await someAsyncWork()
|
|
102
|
+
// Context is STILL available here, magically!
|
|
103
|
+
console.log(userZone.active) // currentUser
|
|
104
|
+
})
|
|
105
|
+
```
|
|
106
|
+
|
|
47
107
|
## [Indexable](./docs/indexable.md)
|
|
48
108
|
|
|
49
109
|
A way to write classes that allow numeric indexes managed by a custom function - either given in the class by the symbols [getAt] and [setAt] either by a specification if the Indexable class.
|
|
@@ -156,26 +216,4 @@ A comprehensive resource management system that provides automatic cleanup for o
|
|
|
156
216
|
- Network resource management
|
|
157
217
|
- Memory management for large objects
|
|
158
218
|
- Plugin systems with proper cleanup
|
|
159
|
-
- Temporary resource management
|
|
160
|
-
|
|
161
|
-
## [Reactive](./docs/reactive.md)
|
|
162
|
-
|
|
163
|
-
A comprehensive reactivity system. See the **[Introduction](./docs/reactive/core.md)** or browse the **[Table of Contents](./docs/reactive.md)**.
|
|
164
|
-
|
|
165
|
-
**Key Features:**
|
|
166
|
-
- **Core Reactivity**: Proxy-based property access tracking with `reactive()`, `effect()`, and `memoize()`
|
|
167
|
-
- **Deep Watching**: Automatic tracking of nested object changes with `deepWatch()`
|
|
168
|
-
- **Reactive Collections**: Specialized reactive versions of Array, Map, Set, WeakMap, and WeakSet
|
|
169
|
-
- **Class Reactivity**: `@reactive` decorator and `ReactiveBase` for class-based reactivity
|
|
170
|
-
- **Reactive Mixin**: Always-reactive classes with mixin support (`Reactive`)
|
|
171
|
-
- **Back-Reference System**: Efficient change propagation through object hierarchies
|
|
172
|
-
- **Type Safety**: Full TypeScript support with proper type inference
|
|
173
|
-
- **Performance Optimized**: Lazy back-reference creation and efficient dependency tracking
|
|
174
|
-
- **Debugging & Development**: Built-in tools like cycle detection and memoization discrepancy check
|
|
175
|
-
|
|
176
|
-
**Use Cases:**
|
|
177
|
-
- State management systems
|
|
178
|
-
- UI framework reactivity
|
|
179
|
-
- Data synchronization
|
|
180
|
-
- Real-time applications
|
|
181
|
-
- Form validation and processing
|
|
219
|
+
- Temporary resource management
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/async/browser.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type Restorer = () => () => void;
|
|
2
|
+
export type Hook = () => Restorer;
|
|
3
|
+
export declare const asyncHooks: {
|
|
4
|
+
addHook(_hook: Hook): () => void;
|
|
5
|
+
/**
|
|
6
|
+
* [Hack] Sanitize a promise (or value) to prevent context leaks.
|
|
7
|
+
* Default: Identity function.
|
|
8
|
+
* Browser: Uses Macrotask wrapping to break microtask chains.
|
|
9
|
+
*/
|
|
10
|
+
sanitizePromise(p: any): any;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Register a hook that will be called whenever an asynchronous operation is initiated.
|
|
14
|
+
* The hook should return a restorer function which will be called just before the async callback runs.
|
|
15
|
+
* That restorer should in turn return an undoer function which will be called just after the async callback finishes.
|
|
16
|
+
*/
|
|
17
|
+
export declare const asyncHook: (hook: Hook) => () => void;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,MAAM,IAAI,CAAA;AACvC,MAAM,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAA;AAEjC,eAAO,MAAM,UAAU;mBACP,IAAI,GAAG,MAAM,IAAI;IAG7B;;;;OAIG;uBACgB,GAAG,GAAG,GAAG;CAG/B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,WAlBP,IAkBoC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/async/node.ts"],"names":[],"mappings":""}
|