mutts 1.0.10 → 1.0.11
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 +395 -987
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.ts +2 -2
- package/dist/browser.dev.cjs +13 -9
- 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/{async-browser-BU_IfxYD.cjs → async-browser-Dgr5CreQ.cjs} +13 -11
- package/dist/chunks/async-browser-Dgr5CreQ.cjs.map +1 -0
- package/dist/chunks/{index-CaaQQlPJ.esm.js → index-Sf74wXTV.esm.js} +384 -981
- package/dist/chunks/index-Sf74wXTV.esm.js.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/{proxy-Dtg-bJ3T.cjs → proxy-Cc79Lrzj.cjs} +414 -339
- package/dist/chunks/proxy-Cc79Lrzj.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 -3
- 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 +13 -9
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +2 -2
- package/dist/node.dev.cjs +13 -9
- 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.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
package/dist/node.cjs
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
require('./chunks/async-node-3PrbVAbB.cjs');
|
|
4
4
|
var browser = require('./browser.cjs');
|
|
5
|
-
var proxy = require('./chunks/proxy-
|
|
5
|
+
var proxy = require('./chunks/proxy-Cc79Lrzj.cjs');
|
|
6
6
|
var asyncCore = require('./chunks/async-core-CRLKP3l-.cjs');
|
|
7
7
|
require('node:async_hooks');
|
|
8
|
-
require('./chunks/async-browser-
|
|
8
|
+
require('./chunks/async-browser-Dgr5CreQ.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
@@ -14,7 +14,6 @@ exports.Destroyable = browser.Destroyable;
|
|
|
14
14
|
exports.DestructionError = browser.DestructionError;
|
|
15
15
|
exports.Eventful = browser.Eventful;
|
|
16
16
|
exports.Indexable = browser.Indexable;
|
|
17
|
-
exports.Register = browser.Register;
|
|
18
17
|
exports.allocated = browser.allocated;
|
|
19
18
|
exports.allocatedValues = browser.allocatedValues;
|
|
20
19
|
exports.arrayDiff = browser.arrayDiff;
|
|
@@ -38,9 +37,7 @@ exports.organize = browser.organize;
|
|
|
38
37
|
exports.organized = browser.organized;
|
|
39
38
|
exports.profileInfo = browser.profileInfo;
|
|
40
39
|
exports.project = browser.morph;
|
|
41
|
-
exports.register = browser.register;
|
|
42
40
|
exports.resource = browser.resource;
|
|
43
|
-
exports.scan = browser.scan;
|
|
44
41
|
exports.setAt = browser.setAt;
|
|
45
42
|
exports.throttle = browser.throttle;
|
|
46
43
|
exports.unreactive = browser.unreactive;
|
|
@@ -60,18 +57,21 @@ exports.Zone = proxy.Zone;
|
|
|
60
57
|
exports.ZoneAggregator = proxy.ZoneAggregator;
|
|
61
58
|
exports.ZoneHistory = proxy.ZoneHistory;
|
|
62
59
|
exports.addBatchCleanup = proxy.addBatchCleanup;
|
|
60
|
+
exports.addUnreactiveProps = proxy.addUnreactiveProps;
|
|
63
61
|
exports.arrayEquals = proxy.arrayEquals;
|
|
62
|
+
exports.assertUntracked = proxy.assertUntracked;
|
|
64
63
|
exports.asyncZone = proxy.asyncZone;
|
|
65
64
|
exports.atom = proxy.atom;
|
|
66
65
|
exports.atomic = proxy.atomic;
|
|
67
66
|
exports.biDi = proxy.biDi;
|
|
67
|
+
exports.captured = proxy.captured;
|
|
68
68
|
exports.caught = proxy.caught;
|
|
69
|
-
exports.cleanedBy = proxy.cleanedBy;
|
|
70
|
-
exports.cleanup = proxy.cleanup;
|
|
71
69
|
exports.createFlavor = proxy.createFlavor;
|
|
70
|
+
exports.debugPreset = proxy.debugPreset;
|
|
72
71
|
exports.decorator = proxy.decorator;
|
|
73
72
|
exports.deepCompare = proxy.deepCompare;
|
|
74
73
|
exports.defer = proxy.defer;
|
|
74
|
+
exports.devPreset = proxy.devPreset;
|
|
75
75
|
exports.effect = proxy.effect;
|
|
76
76
|
exports.effectAggregator = proxy.effectAggregator;
|
|
77
77
|
exports.flavorOptions = proxy.flavorOptions;
|
|
@@ -80,26 +80,30 @@ exports.formatCleanupReason = proxy.formatCleanupReason;
|
|
|
80
80
|
exports.getActivationLog = proxy.getActivationLog;
|
|
81
81
|
exports.getActiveEffect = proxy.getActiveEffect;
|
|
82
82
|
exports.getState = proxy.getState;
|
|
83
|
-
exports.immutables = proxy.immutables;
|
|
84
83
|
exports.isConstructor = proxy.isConstructor;
|
|
84
|
+
exports.isDev = proxy.isDev;
|
|
85
85
|
exports.isNonReactive = proxy.isNonReactive;
|
|
86
86
|
exports.isObject = proxy.isObject;
|
|
87
|
+
exports.isProd = proxy.isProd;
|
|
87
88
|
exports.isReactive = proxy.isReactive;
|
|
89
|
+
exports.isTest = proxy.isTest;
|
|
88
90
|
exports.legacyDecorator = proxy.legacyDecorator;
|
|
91
|
+
exports.link = proxy.link;
|
|
89
92
|
exports.mixin = proxy.mixin;
|
|
90
93
|
exports.modernDecorator = proxy.modernDecorator;
|
|
91
94
|
exports.named = proxy.named;
|
|
92
95
|
exports.objectToProxy = proxy.objectToProxy;
|
|
93
96
|
exports.onEffectThrow = proxy.onEffectThrow;
|
|
97
|
+
exports.prodPreset = proxy.prodPreset;
|
|
94
98
|
exports.proxyToObject = proxy.proxyToObject;
|
|
95
99
|
exports.reactive = proxy.reactive;
|
|
96
100
|
exports.reactiveOptions = proxy.options;
|
|
97
101
|
exports.reset = proxy.reset;
|
|
98
102
|
exports.root = proxy.root;
|
|
99
|
-
exports.stopped = proxy.stopped;
|
|
100
103
|
exports.tag = proxy.tag;
|
|
101
104
|
exports.touched = proxy.touched;
|
|
102
105
|
exports.touched1 = proxy.touched1;
|
|
106
|
+
exports.unlink = proxy.unlink;
|
|
103
107
|
exports.untracked = proxy.untracked;
|
|
104
108
|
exports.unwrap = proxy.unwrap;
|
|
105
109
|
exports.zip = proxy.zip;
|
package/dist/node.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/node.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ArrayDiffResult, ArrayReadForward, ContextManager, Decorator, DecoratorDescription, DecoratorError, DecoratorFactory, Destroyable, DestructionError, Eventful, EventsBase, GenericClassDecorator, Hook, Indexable, IterableWeakMap, IterableWeakSet, LegacyClassDecorator, LegacyPropertyDecorator, Memoizable, MemoizableArgument, MixinClass, MixinFunction, ModernAccessorDecorator, ModernClassDecorator, ModernGetterDecorator, ModernMethodDecorator, ModernSetterDecorator, PromiseChain, ReactiveBase,
|
|
2
|
-
export { A as AZone,
|
|
1
|
+
export { ArrayDiffResult, ArrayReadForward, ContextManager, Decorator, DecoratorDescription, DecoratorError, DecoratorFactory, Destroyable, DestructionError, Eventful, EventsBase, GenericClassDecorator, Hook, Indexable, IterableWeakMap, IterableWeakSet, LegacyClassDecorator, LegacyPropertyDecorator, Memoizable, MemoizableArgument, MixinClass, MixinFunction, ModernAccessorDecorator, ModernClassDecorator, ModernGetterDecorator, ModernMethodDecorator, ModernSetterDecorator, PromiseChain, ReactiveBase, Resource, Restorer, addBatchCleanup, addUnreactiveProps, allocated, allocatedValues, arrayDiff, arrayEquals, assertUntracked, asyncHook, asyncHooks, atom, atomic, attend, biDi, cache, cached, callOnGC, captured, caught, chainPromise, createFlavor, debounce, decorator, deepCompare, deepWatch, defer, deprecated, descriptor, destructor, effect, effectAggregator, flavorOptions, flavored, forwardArray, getActivationLog, getActiveEffect, getAt, getState, hooks, isCached, isConstructor, isDev, isNonReactive, isObject, isProd, isTest, legacyDecorator, lift, link, memoize, mixin, modernDecorator, morph, named, onEffectThrow, organize, organized, profileInfo, morph as project, reactive, reset, resource, root, setAt, tag, throttle, touched, touched1, unlink, unreactive, untracked, watch, when, zip } from './index.js';
|
|
2
|
+
export { A as AZone, C as CleanupReason, c as EffectAccess, b as EffectCleanup, d as EffectCloser, g as EffectOptions, E as EffectTrigger, a as Evolution, G as GetterWrapper, H as HistoryValue, P as PropTrigger, R as ReactiveError, h as ReactiveErrorCode, S as ScopedCallback, i as Zone, Z as ZoneAggregator, j as ZoneHistory, k as asyncZone, l as debugPreset, m as devPreset, n as formatCleanupReason, o as isReactive, p as objectToProxy, q as prodPreset, r as proxyToObject, s as reactiveOptions, u as unwrap } from './types-Bx2PhORg.js';
|
package/dist/node.dev.cjs
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
require('./debug.cjs');
|
|
4
4
|
require('./chunks/async-node-3PrbVAbB.cjs');
|
|
5
5
|
var browser = require('./browser.cjs');
|
|
6
|
-
var proxy = require('./chunks/proxy-
|
|
6
|
+
var proxy = require('./chunks/proxy-Cc79Lrzj.cjs');
|
|
7
7
|
var asyncCore = require('./chunks/async-core-CRLKP3l-.cjs');
|
|
8
8
|
require('node:async_hooks');
|
|
9
|
-
require('./chunks/async-browser-
|
|
9
|
+
require('./chunks/async-browser-Dgr5CreQ.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
@@ -15,7 +15,6 @@ exports.Destroyable = browser.Destroyable;
|
|
|
15
15
|
exports.DestructionError = browser.DestructionError;
|
|
16
16
|
exports.Eventful = browser.Eventful;
|
|
17
17
|
exports.Indexable = browser.Indexable;
|
|
18
|
-
exports.Register = browser.Register;
|
|
19
18
|
exports.allocated = browser.allocated;
|
|
20
19
|
exports.allocatedValues = browser.allocatedValues;
|
|
21
20
|
exports.arrayDiff = browser.arrayDiff;
|
|
@@ -39,9 +38,7 @@ exports.organize = browser.organize;
|
|
|
39
38
|
exports.organized = browser.organized;
|
|
40
39
|
exports.profileInfo = browser.profileInfo;
|
|
41
40
|
exports.project = browser.morph;
|
|
42
|
-
exports.register = browser.register;
|
|
43
41
|
exports.resource = browser.resource;
|
|
44
|
-
exports.scan = browser.scan;
|
|
45
42
|
exports.setAt = browser.setAt;
|
|
46
43
|
exports.throttle = browser.throttle;
|
|
47
44
|
exports.unreactive = browser.unreactive;
|
|
@@ -61,18 +58,21 @@ exports.Zone = proxy.Zone;
|
|
|
61
58
|
exports.ZoneAggregator = proxy.ZoneAggregator;
|
|
62
59
|
exports.ZoneHistory = proxy.ZoneHistory;
|
|
63
60
|
exports.addBatchCleanup = proxy.addBatchCleanup;
|
|
61
|
+
exports.addUnreactiveProps = proxy.addUnreactiveProps;
|
|
64
62
|
exports.arrayEquals = proxy.arrayEquals;
|
|
63
|
+
exports.assertUntracked = proxy.assertUntracked;
|
|
65
64
|
exports.asyncZone = proxy.asyncZone;
|
|
66
65
|
exports.atom = proxy.atom;
|
|
67
66
|
exports.atomic = proxy.atomic;
|
|
68
67
|
exports.biDi = proxy.biDi;
|
|
68
|
+
exports.captured = proxy.captured;
|
|
69
69
|
exports.caught = proxy.caught;
|
|
70
|
-
exports.cleanedBy = proxy.cleanedBy;
|
|
71
|
-
exports.cleanup = proxy.cleanup;
|
|
72
70
|
exports.createFlavor = proxy.createFlavor;
|
|
71
|
+
exports.debugPreset = proxy.debugPreset;
|
|
73
72
|
exports.decorator = proxy.decorator;
|
|
74
73
|
exports.deepCompare = proxy.deepCompare;
|
|
75
74
|
exports.defer = proxy.defer;
|
|
75
|
+
exports.devPreset = proxy.devPreset;
|
|
76
76
|
exports.effect = proxy.effect;
|
|
77
77
|
exports.effectAggregator = proxy.effectAggregator;
|
|
78
78
|
exports.flavorOptions = proxy.flavorOptions;
|
|
@@ -81,26 +81,30 @@ exports.formatCleanupReason = proxy.formatCleanupReason;
|
|
|
81
81
|
exports.getActivationLog = proxy.getActivationLog;
|
|
82
82
|
exports.getActiveEffect = proxy.getActiveEffect;
|
|
83
83
|
exports.getState = proxy.getState;
|
|
84
|
-
exports.immutables = proxy.immutables;
|
|
85
84
|
exports.isConstructor = proxy.isConstructor;
|
|
85
|
+
exports.isDev = proxy.isDev;
|
|
86
86
|
exports.isNonReactive = proxy.isNonReactive;
|
|
87
87
|
exports.isObject = proxy.isObject;
|
|
88
|
+
exports.isProd = proxy.isProd;
|
|
88
89
|
exports.isReactive = proxy.isReactive;
|
|
90
|
+
exports.isTest = proxy.isTest;
|
|
89
91
|
exports.legacyDecorator = proxy.legacyDecorator;
|
|
92
|
+
exports.link = proxy.link;
|
|
90
93
|
exports.mixin = proxy.mixin;
|
|
91
94
|
exports.modernDecorator = proxy.modernDecorator;
|
|
92
95
|
exports.named = proxy.named;
|
|
93
96
|
exports.objectToProxy = proxy.objectToProxy;
|
|
94
97
|
exports.onEffectThrow = proxy.onEffectThrow;
|
|
98
|
+
exports.prodPreset = proxy.prodPreset;
|
|
95
99
|
exports.proxyToObject = proxy.proxyToObject;
|
|
96
100
|
exports.reactive = proxy.reactive;
|
|
97
101
|
exports.reactiveOptions = proxy.options;
|
|
98
102
|
exports.reset = proxy.reset;
|
|
99
103
|
exports.root = proxy.root;
|
|
100
|
-
exports.stopped = proxy.stopped;
|
|
101
104
|
exports.tag = proxy.tag;
|
|
102
105
|
exports.touched = proxy.touched;
|
|
103
106
|
exports.touched1 = proxy.touched1;
|
|
107
|
+
exports.unlink = proxy.unlink;
|
|
104
108
|
exports.untracked = proxy.untracked;
|
|
105
109
|
exports.unwrap = proxy.unwrap;
|
|
106
110
|
exports.zip = proxy.zip;
|
package/dist/node.dev.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.dev.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node.dev.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/node.dev.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { A as AZone,
|
|
2
|
-
export { ArrayDiffResult, ArrayReadForward, ContextManager, Decorator, DecoratorDescription, DecoratorError, DecoratorFactory, Destroyable, DestructionError, Eventful, EventsBase, GenericClassDecorator, Hook, Indexable, IterableWeakMap, IterableWeakSet, LegacyClassDecorator, LegacyPropertyDecorator, Memoizable, MemoizableArgument, MixinClass, MixinFunction, ModernAccessorDecorator, ModernClassDecorator, ModernGetterDecorator, ModernMethodDecorator, ModernSetterDecorator, PromiseChain, ReactiveBase,
|
|
1
|
+
export { A as AZone, C as CleanupReason, c as EffectAccess, b as EffectCleanup, d as EffectCloser, g as EffectOptions, E as EffectTrigger, a as Evolution, G as GetterWrapper, H as HistoryValue, P as PropTrigger, R as ReactiveError, h as ReactiveErrorCode, S as ScopedCallback, i as Zone, Z as ZoneAggregator, j as ZoneHistory, k as asyncZone, l as debugPreset, m as devPreset, n as formatCleanupReason, o as isReactive, p as objectToProxy, q as prodPreset, r as proxyToObject, s as reactiveOptions, u as unwrap } from './types-Bx2PhORg.js';
|
|
2
|
+
export { ArrayDiffResult, ArrayReadForward, ContextManager, Decorator, DecoratorDescription, DecoratorError, DecoratorFactory, Destroyable, DestructionError, Eventful, EventsBase, GenericClassDecorator, Hook, Indexable, IterableWeakMap, IterableWeakSet, LegacyClassDecorator, LegacyPropertyDecorator, Memoizable, MemoizableArgument, MixinClass, MixinFunction, ModernAccessorDecorator, ModernClassDecorator, ModernGetterDecorator, ModernMethodDecorator, ModernSetterDecorator, PromiseChain, ReactiveBase, Resource, Restorer, addBatchCleanup, addUnreactiveProps, allocated, allocatedValues, arrayDiff, arrayEquals, assertUntracked, asyncHook, asyncHooks, atom, atomic, attend, biDi, cache, cached, callOnGC, captured, caught, chainPromise, createFlavor, debounce, decorator, deepCompare, deepWatch, defer, deprecated, descriptor, destructor, effect, effectAggregator, flavorOptions, flavored, forwardArray, getActivationLog, getActiveEffect, getAt, getState, hooks, isCached, isConstructor, isDev, isNonReactive, isObject, isProd, isTest, legacyDecorator, lift, link, memoize, mixin, modernDecorator, morph, named, onEffectThrow, organize, organized, profileInfo, morph as project, reactive, reset, resource, root, setAt, tag, throttle, touched, touched1, unlink, unreactive, untracked, watch, when, zip } from './index.js';
|
package/dist/node.dev.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './debug.esm.js';
|
|
2
|
-
import './chunks/node-
|
|
3
|
-
export { A as ArrayReadForward, D as Destroyable, a as DestructionError, E as Eventful, I as Indexable,
|
|
4
|
-
export { A as AZone, D as DecoratorError, I as IterableWeakMap, a as IterableWeakSet, R as ReactiveBase, b as ReactiveError, c as ReactiveErrorCode, Z as Zone, d as ZoneAggregator, e as ZoneHistory, f as addBatchCleanup, g as
|
|
2
|
+
import './chunks/node-Bo7WU5S2.esm.js';
|
|
3
|
+
export { A as ArrayReadForward, D as Destroyable, a as DestructionError, E as Eventful, I as Indexable, b as allocated, c as allocatedValues, d as arrayDiff, e as attend, f as cache, g as cached, h as callOnGC, i as chainPromise, j as debounce, k as deepWatch, l as deprecated, m as descriptor, n as destructor, o as forwardArray, p as getAt, q as isCached, r as lift, s as memoize, t as morph, u as organize, v as organized, w as profileInfo, t as project, x as resource, y as setAt, z as throttle, B as unreactive, C as watch, F as when } from './chunks/index-Sf74wXTV.esm.js';
|
|
4
|
+
export { A as AZone, D as DecoratorError, I as IterableWeakMap, a as IterableWeakSet, R as ReactiveBase, b as ReactiveError, c as ReactiveErrorCode, Z as Zone, d as ZoneAggregator, e as ZoneHistory, f as addBatchCleanup, g as addUnreactiveProps, h as arrayEquals, i as assertUntracked, j as asyncHook, k as asyncHooks, l as asyncZone, m as atom, n as atomic, o as biDi, p as captured, q as caught, r as createFlavor, s as debugPreset, t as decorator, u as deepCompare, v as defer, w as devPreset, x as effect, y as effectAggregator, z as flavorOptions, B as flavored, C as formatCleanupReason, E as getActivationLog, F as getActiveEffect, G as getState, H as hooks, J as isConstructor, K as isDev, L as isNonReactive, M as isObject, N as isProd, O as isReactive, P as isTest, Q as legacyDecorator, S as link, T as mixin, U as modernDecorator, V as named, W as objectToProxy, X as onEffectThrow, Y as prodPreset, _ as proxyToObject, $ as reactive, a0 as reactiveOptions, a1 as reset, a2 as root, a3 as tag, a4 as touched, a5 as touched1, a6 as unlink, a7 as untracked, a8 as unwrap, a9 as zip } from './chunks/proxy-D2C49sXH.esm.js';
|
|
5
5
|
import 'node:async_hooks';
|
|
6
6
|
//# sourceMappingURL=node.dev.esm.js.map
|
package/dist/node.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import './chunks/node-
|
|
2
|
-
export { A as ArrayReadForward, D as Destroyable, a as DestructionError, E as Eventful, I as Indexable,
|
|
3
|
-
export { A as AZone, D as DecoratorError, I as IterableWeakMap, a as IterableWeakSet, R as ReactiveBase, b as ReactiveError, c as ReactiveErrorCode, Z as Zone, d as ZoneAggregator, e as ZoneHistory, f as addBatchCleanup, g as
|
|
1
|
+
import './chunks/node-Bo7WU5S2.esm.js';
|
|
2
|
+
export { A as ArrayReadForward, D as Destroyable, a as DestructionError, E as Eventful, I as Indexable, b as allocated, c as allocatedValues, d as arrayDiff, e as attend, f as cache, g as cached, h as callOnGC, i as chainPromise, j as debounce, k as deepWatch, l as deprecated, m as descriptor, n as destructor, o as forwardArray, p as getAt, q as isCached, r as lift, s as memoize, t as morph, u as organize, v as organized, w as profileInfo, t as project, x as resource, y as setAt, z as throttle, B as unreactive, C as watch, F as when } from './chunks/index-Sf74wXTV.esm.js';
|
|
3
|
+
export { A as AZone, D as DecoratorError, I as IterableWeakMap, a as IterableWeakSet, R as ReactiveBase, b as ReactiveError, c as ReactiveErrorCode, Z as Zone, d as ZoneAggregator, e as ZoneHistory, f as addBatchCleanup, g as addUnreactiveProps, h as arrayEquals, i as assertUntracked, j as asyncHook, k as asyncHooks, l as asyncZone, m as atom, n as atomic, o as biDi, p as captured, q as caught, r as createFlavor, s as debugPreset, t as decorator, u as deepCompare, v as defer, w as devPreset, x as effect, y as effectAggregator, z as flavorOptions, B as flavored, C as formatCleanupReason, E as getActivationLog, F as getActiveEffect, G as getState, H as hooks, J as isConstructor, K as isDev, L as isNonReactive, M as isObject, N as isProd, O as isReactive, P as isTest, Q as legacyDecorator, S as link, T as mixin, U as modernDecorator, V as named, W as objectToProxy, X as onEffectThrow, Y as prodPreset, _ as proxyToObject, $ as reactive, a0 as reactiveOptions, a1 as reset, a2 as root, a3 as tag, a4 as touched, a5 as touched1, a6 as unlink, a7 as untracked, a8 as unwrap, a9 as zip } from './chunks/proxy-D2C49sXH.esm.js';
|
|
4
4
|
import 'node:async_hooks';
|
|
5
5
|
//# sourceMappingURL=node.esm.js.map
|
|
@@ -4,9 +4,9 @@ declare abstract class AZone<T> {
|
|
|
4
4
|
protected leave(entered: unknown): void;
|
|
5
5
|
with<R>(value: T | undefined, fn: () => R): R;
|
|
6
6
|
root<R>(fn: () => R): R;
|
|
7
|
-
get zoned():
|
|
7
|
+
get zoned(): GetterWrapper;
|
|
8
8
|
}
|
|
9
|
-
type
|
|
9
|
+
type GetterWrapper = <R>(fn: () => R) => R;
|
|
10
10
|
declare class Zone<T> extends AZone<T> {
|
|
11
11
|
active: T | undefined;
|
|
12
12
|
}
|
|
@@ -35,6 +35,17 @@ declare class ZoneAggregator extends AZone<Map<AZone<unknown>, unknown>> {
|
|
|
35
35
|
delete(z: AZone<unknown>): void;
|
|
36
36
|
clear(): void;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Aggregator of zones that should be preserved across async boundaries.
|
|
40
|
+
* If you add a zone here, it will be preserved across async boundaries.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* import { Zone, asyncZone } from 'mutts'
|
|
45
|
+
* const userZone = new Zone<User>()
|
|
46
|
+
* asyncZone.add(userZone)
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
38
49
|
declare const asyncZone: ZoneAggregator;
|
|
39
50
|
|
|
40
51
|
/**
|
|
@@ -54,7 +65,7 @@ interface EffectAccess {
|
|
|
54
65
|
* })
|
|
55
66
|
* ```
|
|
56
67
|
*/
|
|
57
|
-
tracked:
|
|
68
|
+
tracked: GetterWrapper;
|
|
58
69
|
/**
|
|
59
70
|
* Tracks dependencies in the parent effect context
|
|
60
71
|
* Use this when child effects should track dependencies in the parent,
|
|
@@ -72,7 +83,7 @@ interface EffectAccess {
|
|
|
72
83
|
* })
|
|
73
84
|
* ```
|
|
74
85
|
*/
|
|
75
|
-
ascend:
|
|
86
|
+
ascend: GetterWrapper;
|
|
76
87
|
/**
|
|
77
88
|
* `false` on the first execution, `true` or `CleanupReason` on subsequent runs.
|
|
78
89
|
* `true` means this is a re-run but detailed reason gathering is disabled or unavailable.
|
|
@@ -91,6 +102,11 @@ interface EffectAccess {
|
|
|
91
102
|
* ```
|
|
92
103
|
*/
|
|
93
104
|
reaction: boolean | CleanupReason;
|
|
105
|
+
/**
|
|
106
|
+
* AbortSignal that is aborted when the effect is cleaned up or re-runs.
|
|
107
|
+
* Use this to cancel async operations (like fetch) when the effect is no longer valid.
|
|
108
|
+
*/
|
|
109
|
+
signal: AbortSignal;
|
|
94
110
|
}
|
|
95
111
|
/**
|
|
96
112
|
* Base type for effect callbacks - simple function without additional properties
|
|
@@ -113,6 +129,7 @@ type CleanupReason = {
|
|
|
113
129
|
cause: CleanupReason;
|
|
114
130
|
} | {
|
|
115
131
|
type: 'stopped';
|
|
132
|
+
detail?: string;
|
|
116
133
|
} | {
|
|
117
134
|
type: 'gc';
|
|
118
135
|
} | {
|
|
@@ -139,11 +156,9 @@ type CleanupReason = {
|
|
|
139
156
|
*/
|
|
140
157
|
declare function formatCleanupReason(reason: CleanupReason, depth?: number): unknown[];
|
|
141
158
|
/**
|
|
142
|
-
* Type for effect cleanup functions
|
|
159
|
+
* Type for effect cleanup functions.
|
|
143
160
|
*/
|
|
144
|
-
type EffectCleanup = ScopedCallback
|
|
145
|
-
[stopped]: boolean;
|
|
146
|
-
};
|
|
161
|
+
type EffectCleanup = ScopedCallback;
|
|
147
162
|
/**
|
|
148
163
|
* Type for the `runEffect` function of an effect - argument-less function to call to trigger the effect
|
|
149
164
|
*/
|
|
@@ -198,16 +213,8 @@ type State = {
|
|
|
198
213
|
evolution: Evolution;
|
|
199
214
|
next: State;
|
|
200
215
|
} | {};
|
|
201
|
-
/**
|
|
202
|
-
* Symbol to check if an effect is stopped
|
|
203
|
-
*/
|
|
204
|
-
declare const stopped: unique symbol;
|
|
205
|
-
/**
|
|
206
|
-
* Symbol to access effect cleanup function
|
|
207
|
-
*/
|
|
208
|
-
declare const cleanup: unique symbol;
|
|
209
216
|
type EffectCloser = (reason?: CleanupReason) => void;
|
|
210
|
-
type CatchFunction = (error:
|
|
217
|
+
type CatchFunction = (error: unknown) => EffectCloser | undefined | void;
|
|
211
218
|
/**
|
|
212
219
|
* Structured error codes for machine-readable diagnosis
|
|
213
220
|
*/
|
|
@@ -304,6 +311,12 @@ declare const options: {
|
|
|
304
311
|
* @param runningChain - The array of effects from the detected one to the currently running one
|
|
305
312
|
*/
|
|
306
313
|
skipRunningEffect: (_effect: EffectTrigger) => void;
|
|
314
|
+
/**
|
|
315
|
+
* Debug purpose: called when an effect starts executing.
|
|
316
|
+
* @param effect - The effect being executed (root function)
|
|
317
|
+
* @param reaction - false for initial creation, true/CleanupReason for subsequent runs
|
|
318
|
+
*/
|
|
319
|
+
effectRun: (_effect: Function, _reaction: boolean | CleanupReason) => void;
|
|
307
320
|
/**
|
|
308
321
|
* Debug purpose: maximum effect chain (like call stack max depth)
|
|
309
322
|
* Used to prevent infinite loops
|
|
@@ -431,39 +444,17 @@ declare const options: {
|
|
|
431
444
|
enableHistory: boolean;
|
|
432
445
|
historySize: number;
|
|
433
446
|
} | null;
|
|
434
|
-
/**
|
|
435
|
-
* Configuration for zone hooks - control which async APIs are hooked
|
|
436
|
-
* Each option controls whether the corresponding async API is wrapped to preserve effect context
|
|
437
|
-
* Only applies when asyncMode is enabled (truthy)
|
|
438
|
-
* @deprecated Should take all when we made sure PIXI.create, Game.create, ... are -> .root()
|
|
439
|
-
*/
|
|
440
|
-
zones: {
|
|
441
|
-
/**
|
|
442
|
-
* Hook setTimeout to preserve effect context
|
|
443
|
-
* @default true
|
|
444
|
-
*/
|
|
445
|
-
setTimeout: boolean;
|
|
446
|
-
/**
|
|
447
|
-
* Hook setInterval to preserve effect context
|
|
448
|
-
* @default true
|
|
449
|
-
*/
|
|
450
|
-
setInterval: boolean;
|
|
451
|
-
/**
|
|
452
|
-
* Hook requestAnimationFrame (runs in untracked context when hooked)
|
|
453
|
-
* @default true
|
|
454
|
-
*/
|
|
455
|
-
requestAnimationFrame: boolean;
|
|
456
|
-
/**
|
|
457
|
-
* Hook queueMicrotask to preserve effect context
|
|
458
|
-
* @default true
|
|
459
|
-
*/
|
|
460
|
-
queueMicrotask: boolean;
|
|
461
|
-
};
|
|
462
447
|
};
|
|
448
|
+
/** Production preset: no introspection, heuristic cycle detection, minimal overhead */
|
|
449
|
+
declare const prodPreset: Partial<typeof options>;
|
|
450
|
+
/** Development preset (default): introspection on, early cycle detection, warnings */
|
|
451
|
+
declare const devPreset: Partial<typeof options>;
|
|
452
|
+
/** Debug preset: full diagnostics, throws on violations, rich lineage capture */
|
|
453
|
+
declare const debugPreset: Partial<typeof options>;
|
|
463
454
|
declare const objectToProxy: WeakMap<object, object>;
|
|
464
455
|
declare const proxyToObject: WeakMap<object, object>;
|
|
465
456
|
declare function unwrap<T>(obj: T): T;
|
|
466
457
|
declare function isReactive(obj: any): boolean;
|
|
467
458
|
|
|
468
|
-
export { AZone as A, ReactiveError as R, ZoneAggregator as Z,
|
|
469
|
-
export type {
|
|
459
|
+
export { AZone as A, ReactiveError as R, ZoneAggregator as Z, ReactiveErrorCode as h, Zone as i, ZoneHistory as j, asyncZone as k, debugPreset as l, devPreset as m, formatCleanupReason as n, isReactive as o, objectToProxy as p, prodPreset as q, proxyToObject as r, options as s, unwrap as u };
|
|
460
|
+
export type { CleanupReason as C, EffectTrigger as E, GetterWrapper as G, HistoryValue as H, PropTrigger as P, ScopedCallback as S, Evolution as a, EffectCleanup as b, EffectAccess as c, EffectCloser as d, State as e, CatchFunction as f, EffectOptions as g };
|
package/docs/ai/api-reference.md
CHANGED
|
@@ -55,20 +55,6 @@ export declare function biDi<T>(target: (val: T) => void, source: { get: () => T
|
|
|
55
55
|
// COLLECTIONS
|
|
56
56
|
// --------------------------------------------------------------------------------
|
|
57
57
|
|
|
58
|
-
export interface Register<T, K extends PropertyKey = PropertyKey> extends Iterable<T> {
|
|
59
|
-
length: number;
|
|
60
|
-
[index: number]: T;
|
|
61
|
-
get(key: K): T | undefined;
|
|
62
|
-
set(key: K, value: T): void;
|
|
63
|
-
hasKey(key: K): boolean;
|
|
64
|
-
indexOfKey(key: K): number;
|
|
65
|
-
remove(key: K): void;
|
|
66
|
-
removeAt(index: number): T | undefined;
|
|
67
|
-
push(...items: T[]): number;
|
|
68
|
-
// ... complete array methods are supported
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export declare function register<T, K extends PropertyKey = PropertyKey>(keyFn: (item: T) => K, initial?: Iterable<T>): Register<T, K>;
|
|
72
58
|
export declare function project<S, R>(source: S, apply: (access: any, target: any) => any): R;
|
|
73
59
|
export declare function organized<S, T>(source: S, apply: (access: any, target: T) => any, baseTarget?: T): T;
|
|
74
60
|
|
package/docs/ai/manual.md
CHANGED
|
@@ -21,9 +21,9 @@ Proxy-based **fine-grained reactivity** — changes propagate synchronously thro
|
|
|
21
21
|
**All exports come from `'mutts'`** — no subpath imports like `mutts/reactive` or `mutts/zone`.
|
|
22
22
|
|
|
23
23
|
```ts
|
|
24
|
-
import { reactive, effect, memoize, morph, attend, lift,
|
|
24
|
+
import { reactive, effect, memoize, morph, attend, lift, cleanup,
|
|
25
25
|
atom, atomic, defer, untracked, unreactive, watch, when, biDi, caught, why,
|
|
26
|
-
cleanedBy, organized,
|
|
26
|
+
cleanedBy, organized,
|
|
27
27
|
Zone, asyncZone, ZoneHistory, ZoneAggregator,
|
|
28
28
|
decorator, mixin, Eventful, Destroyable, flavored, Indexable, chainPromise,
|
|
29
29
|
reactiveOptions, isReactive, unwrap, getState
|
|
@@ -274,18 +274,6 @@ await when(() => state.ready, { timeout: 5000 }) // rejects after 5s
|
|
|
274
274
|
|
|
275
275
|
Array methods (`push`, `splice`, `sort`, etc.) all trigger reactivity.
|
|
276
276
|
|
|
277
|
-
### 4.1 Register — Keyed ordered collection
|
|
278
|
-
|
|
279
|
-
```ts
|
|
280
|
-
const list = new Register(item => item.id, [{ id: 1, label: 'A' }])
|
|
281
|
-
list.get(1) // O(1) lookup by key
|
|
282
|
-
list.set(1, newItem) // update by key
|
|
283
|
-
list.remove(1) // remove by key
|
|
284
|
-
list.keep(x => x.active) // filter in-place
|
|
285
|
-
list.upsert(v => list.push(v), ...items) // update or insert
|
|
286
|
-
// Full array surface + CRUD events: on('add'|'delete'|'update'|'rekey', ...)
|
|
287
|
-
```
|
|
288
|
-
|
|
289
277
|
---
|
|
290
278
|
|
|
291
279
|
## 5. COLLECTION TRANSFORMS
|
|
@@ -321,14 +309,6 @@ const doubled = organized(source, (access, target) => {
|
|
|
321
309
|
})
|
|
322
310
|
```
|
|
323
311
|
|
|
324
|
-
### 5.4 scan() — Reactive accumulation
|
|
325
|
-
|
|
326
|
-
```ts
|
|
327
|
-
const result = scan(source, (acc, item) => acc + item.val, 0)
|
|
328
|
-
// [1, 3, 6] — changing source[1] recomputes from index 1 onward
|
|
329
|
-
// Items must be objects (WeakMap keys). Move-optimized.
|
|
330
|
-
```
|
|
331
|
-
|
|
332
312
|
### 5.6 lift() — Sync a computed array/object
|
|
333
313
|
|
|
334
314
|
```ts
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
The `atomic` function wraps a function to batch all reactive effects triggered within it, ensuring effects run only once after the function completes. It can be used both as a function wrapper and as a decorator.
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { atomic, reactive, effect } from 'mutts
|
|
8
|
+
import { atomic, reactive, effect } from 'mutts'
|
|
9
9
|
|
|
10
10
|
const state = reactive({ a: 0, b: 0 })
|
|
11
11
|
|
|
@@ -48,7 +48,7 @@ The wrapped function preserves its signature (parameters and return value), and
|
|
|
48
48
|
While `atomic()` **wraps** a function for later calls, `atom()` **runs** a function immediately and atomically. It always executes right away, even inside a nested batch.
|
|
49
49
|
|
|
50
50
|
```typescript
|
|
51
|
-
import { atom, reactive, effect } from 'mutts
|
|
51
|
+
import { atom, reactive, effect } from 'mutts'
|
|
52
52
|
|
|
53
53
|
const state = reactive({ a: 0, b: 0 })
|
|
54
54
|
|
|
@@ -85,9 +85,9 @@ update(1, 2) // runs when called
|
|
|
85
85
|
When an effect needs to perform an action that would modify state the effect depends on, this can create a reactive cycle. The `addBatchCleanup` function (also exported as `defer` for semantic clarity) allows you to defer such work until after the current batch of effects completes.
|
|
86
86
|
|
|
87
87
|
```typescript
|
|
88
|
-
import { addBatchCleanup, effect, reactive } from 'mutts
|
|
88
|
+
import { addBatchCleanup, effect, reactive } from 'mutts'
|
|
89
89
|
// or use the semantic alias:
|
|
90
|
-
// import { defer } from 'mutts
|
|
90
|
+
// import { defer } from 'mutts'
|
|
91
91
|
|
|
92
92
|
const state = reactive({
|
|
93
93
|
items: [],
|
|
@@ -298,7 +298,7 @@ effect(() => {
|
|
|
298
298
|
Creates a bidirectional binding between a reactive value and a non-reactive external value (like DOM elements), automatically preventing infinite loops.
|
|
299
299
|
|
|
300
300
|
```typescript
|
|
301
|
-
import { biDi, reactive } from 'mutts
|
|
301
|
+
import { biDi, reactive } from 'mutts'
|
|
302
302
|
|
|
303
303
|
const model = reactive({ value: '' })
|
|
304
304
|
|
|
@@ -1142,15 +1142,14 @@ Mutts provides several ways to derive values from reactive state. They differ in
|
|
|
1142
1142
|
| `lift(() => ({...}))` | Eager | Reactive object proxy | Yes (per-prop) | **Yes** | `result[cleanup]()` | Derived objects, computed shapes |
|
|
1143
1143
|
| `morph(source, fn)` | **Lazy** | Reactive proxy | Yes (per-key) | **Yes** | `cleanedBy` | Lazy per-element map with identity tracking |
|
|
1144
1144
|
| `morph.pure(source, fn)` | **Lazy** | Reactive proxy | Yes (per-key) | **Yes** | `cleanedBy` | Same, but skips per-item dependency tracking |
|
|
1145
|
-
| `scan(source, fn, init)` | Eager | Reactive array | Yes (per-index) | **Yes** | `result[cleanup]()` | Running accumulations (prefix sums) |
|
|
1146
1145
|
| `when(() => cond)` | Eager | Promise\<T\> | N/A | N/A | Auto (on resolve/timeout) | Awaiting a reactive condition |
|
|
1147
1146
|
| `watch(source, cb)` | Eager | Callback (old/new) | N/A | N/A | Auto (parent/GC) + Returned cleanup | Observing specific changes |
|
|
1148
1147
|
|
|
1149
1148
|
### Key distinctions
|
|
1150
1149
|
|
|
1151
1150
|
- **Lazy vs Eager**: `memoize` only recomputes when the result is read. Everything else recomputes immediately when dependencies change — even if nobody is consuming the output.
|
|
1152
|
-
- **Trackable**: Can downstream effects depend on the result? `memoize`'s return value is trackable because calling it runs inside an effect context. `lift`/`morph
|
|
1153
|
-
- **Identity stable**: `lift
|
|
1151
|
+
- **Trackable**: Can downstream effects depend on the result? `memoize`'s return value is trackable because calling it runs inside an effect context. `lift`/`morph` return reactive proxies where each property/index is independently trackable.
|
|
1152
|
+
- **Identity stable**: `lift` and `morph` return the **same proxy** across recomputations — only changed slots are updated. This is critical for downstream transformations or DOM reconciliation that relies on reference identity.
|
|
1154
1153
|
|
|
1155
1154
|
### Common patterns
|
|
1156
1155
|
|
|
@@ -1229,7 +1228,7 @@ state.items = fetchedItems // deep touch diffs old vs new per-index — no lift
|
|
|
1229
1228
|
**Signature**
|
|
1230
1229
|
|
|
1231
1230
|
```typescript
|
|
1232
|
-
import { morph } from 'mutts
|
|
1231
|
+
import { morph } from 'mutts'
|
|
1233
1232
|
|
|
1234
1233
|
function morph<I, O>(
|
|
1235
1234
|
source: readonly I[] | (() => readonly I[]),
|
|
@@ -1254,7 +1253,7 @@ function morph<I, O>(
|
|
|
1254
1253
|
**Basic usage**
|
|
1255
1254
|
|
|
1256
1255
|
```typescript
|
|
1257
|
-
import { morph, reactive, effect } from 'mutts
|
|
1256
|
+
import { morph, reactive, effect } from 'mutts'
|
|
1258
1257
|
|
|
1259
1258
|
const items = reactive(['alice', 'bob', 'charlie'])
|
|
1260
1259
|
const upper = morph(items, name => name.toUpperCase())
|
|
@@ -1355,7 +1354,7 @@ pure[0] // 10 — stale, no per-item effect to invalidate
|
|
|
1355
1354
|
**Signature**
|
|
1356
1355
|
|
|
1357
1356
|
```typescript
|
|
1358
|
-
import { memoize } from 'mutts
|
|
1357
|
+
import { memoize } from 'mutts'
|
|
1359
1358
|
|
|
1360
1359
|
type Memoizable = object | any[] | symbol
|
|
1361
1360
|
|
|
@@ -1380,7 +1379,7 @@ function memoize<Result>(
|
|
|
1380
1379
|
**Basic usage**
|
|
1381
1380
|
|
|
1382
1381
|
```typescript
|
|
1383
|
-
import { effect, memoize, reactive } from 'mutts
|
|
1382
|
+
import { effect, memoize, reactive } from 'mutts'
|
|
1384
1383
|
|
|
1385
1384
|
const source = reactive({ value: 1 })
|
|
1386
1385
|
const args = { node: source }
|
|
@@ -1426,7 +1425,7 @@ Use `maxArgs` when the memoized function should only consider the first _n_ argu
|
|
|
1426
1425
|
A flavored variant that gracefully handles non-WeakKey arguments (primitives, `null`, `undefined`). Instead of throwing, it falls back to recomputing the function without caching.
|
|
1427
1426
|
|
|
1428
1427
|
```typescript
|
|
1429
|
-
import { memoize } from 'mutts
|
|
1428
|
+
import { memoize } from 'mutts'
|
|
1430
1429
|
|
|
1431
1430
|
const process = memoize.lenient((value: string | { data: string }) => {
|
|
1432
1431
|
return typeof value === 'string' ? value.toUpperCase() : value.data
|
|
@@ -1447,7 +1446,7 @@ This is useful when a memoized function may receive both objects and primitives,
|
|
|
1447
1446
|
Apply `@memoize` (or `@memoize.lenient`) to class getters or methods to share the same cache semantics. Getters cache per instance; methods cache per instance and argument tuple.
|
|
1448
1447
|
|
|
1449
1448
|
```typescript
|
|
1450
|
-
import { memoize, reactive } from 'mutts
|
|
1449
|
+
import { memoize, reactive } from 'mutts'
|
|
1451
1450
|
|
|
1452
1451
|
class Example {
|
|
1453
1452
|
state = reactive({ count: 0 })
|
package/docs/reactive/attend.md
CHANGED
|
@@ -137,6 +137,5 @@ attend(
|
|
|
137
137
|
| `attend` | — | Reactive lifecycle per key |
|
|
138
138
|
| `organized` | ✅ | Reactive record mapping with access objects |
|
|
139
139
|
| `project` | ❌ | Reactive collection mapping (manages a target + projection context) |
|
|
140
|
-
| `scan` | ❌ | Reactive accumulation (sequential key dependency) |
|
|
141
140
|
|
|
142
|
-
`project`
|
|
141
|
+
`project` has additional concerns (target management) that go beyond `attend`'s independent-key lifecycle model.
|