sia-reactor 0.0.22 → 0.0.23
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 +4 -4
- package/dist/{TimeTravelOverlay-eWjAy0yr.d.ts → TimeTravelOverlay-Dglcwpg-.d.ts} +2 -2
- package/dist/{TimeTravelOverlay-DiXUgbUU.d.cts → TimeTravelOverlay-OjklzuCD.d.cts} +2 -2
- package/dist/adapters/react.cjs +9 -8
- package/dist/adapters/react.d.cts +3 -3
- package/dist/adapters/react.d.ts +3 -3
- package/dist/adapters/react.js +3 -3
- package/dist/adapters/vanilla.cjs +9 -8
- package/dist/adapters/vanilla.d.cts +4 -4
- package/dist/adapters/vanilla.d.ts +4 -4
- package/dist/adapters/vanilla.js +3 -3
- package/dist/{chunk-CS3FOV6J.js → chunk-5JNWC7Z4.js} +2 -2
- package/dist/{chunk-BTA6MIQ6.js → chunk-MKL3JUPO.js} +25 -17
- package/dist/{chunk-3SKLWTEA.js → chunk-MSTHQVNK.js} +11 -10
- package/dist/{index-BgbbNXTW.d.cts → index-m0aAWxhX.d.cts} +37 -24
- package/dist/{index-BgbbNXTW.d.ts → index-m0aAWxhX.d.ts} +37 -24
- package/dist/index.cjs +16 -15
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/modules.cjs +53 -55
- package/dist/modules.d.cts +7 -8
- package/dist/modules.d.ts +7 -8
- package/dist/modules.js +31 -39
- package/dist/super.d.ts +49 -34
- package/dist/super.global.js +62 -62
- package/dist/{timeTravel-CraHdbXZ.d.cts → timeTravel-DExvNb04.d.ts} +7 -7
- package/dist/{timeTravel-YUxRHRgh.d.ts → timeTravel-DctvcHVt.d.cts} +7 -7
- package/dist/utils.cjs +28 -17
- package/dist/utils.d.cts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +5 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -102,7 +102,7 @@ import { setAny, getAny, mergeObjs } from "sia-reactor/utils";
|
|
|
102
102
|
|
|
103
103
|
```javascript
|
|
104
104
|
import { reactive, Reactor } from "sia-reactor";
|
|
105
|
-
import "sia-reactor/utils"; // deep object helpers (setAny/getAny/deleteAny/inAny/parseAnyObj/fanout/mergeObjs/deepClone/nuke...)
|
|
105
|
+
import "sia-reactor/utils"; // deep object helpers (setAny/getAny/deleteAny/inAny/parseAnyObj/fanout/mergeObjs/deepClone/nuke...) take note of `fanout`!
|
|
106
106
|
import "sia-reactor/modules"; // built-in modules + storage adapters
|
|
107
107
|
import "sia-reactor/adapters/vanilla"; // Autotracker + effect API + TimeTravelOverlay class
|
|
108
108
|
import "sia-reactor/adapters/react"; // useReactor/useSelector/usePath hooks
|
|
@@ -245,7 +245,7 @@ const persist = new PersistModule({ // Plug it in. State is now automatically hy
|
|
|
245
245
|
key: "APP_PREFS",
|
|
246
246
|
paths: ["theme", "settings.brightness"],
|
|
247
247
|
throttle: 5000,
|
|
248
|
-
fanout: true, // async hydration should use leaf writes
|
|
248
|
+
fanout: true, // async hydration should use leaf writes to sync already initialized listeners.
|
|
249
249
|
adapter: new IndexedDBAdapter({ dbName: "Session", version: 1, onversionchange: () => location.reload(), useSnapshot: true }) // or `LocalStorageAdapter` (instance or signature)
|
|
250
250
|
};
|
|
251
251
|
state.use(persist, getReactor(state))); // Put `Reactor` as second constructor arg if you want type inference, e.g. for the paths in the array.
|
|
@@ -346,7 +346,7 @@ player.on("intent.playing", (e) => {
|
|
|
346
346
|
### Troubleshooting
|
|
347
347
|
|
|
348
348
|
- Listener timing feels late: `on(path, ...)` is microtask-batched by design; use `watch(path, ...)` only for strict immediate engine sync on leaf paths preferably.
|
|
349
|
-
- Listeners don't react to changes: use `fanout(
|
|
349
|
+
- Listeners don't react to changes: use `fanout(target, object, { depth: n })` instead of direct object sets to keep immutable semantics.
|
|
350
350
|
- `reject()` appears ignored: call it in capture phase and ensure branch is wrapped in `intent(...)`, also remember it's the listener's choice to comply.
|
|
351
351
|
- Snapshot behavior feels stale: enable `referenceTracking: true` with `smartCloning: true`, also use these when persisting to environments that don't take proxies, e.g. IndexedDB.
|
|
352
352
|
- Cross-frame data is skipped: enable `crossRealms: true` for iframe/other realm objects.
|
|
@@ -475,7 +475,7 @@ rtr.on("todos", ({ type, target: { path, key } }) => {
|
|
|
475
475
|
if (type === "update") console.log(path, key);
|
|
476
476
|
}, { depth: 1 });
|
|
477
477
|
// Better: narrow first, then destructure inside
|
|
478
|
-
rtr.on("todos", (e: REvent<
|
|
478
|
+
rtr.on("todos", (e: REvent<User, "todos", 1>) => {
|
|
479
479
|
if (e.type === "update") {
|
|
480
480
|
const { path, key } = e.target;
|
|
481
481
|
console.log(path, key); // or e.target.path, e.target.key
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as Reactive } from './index-
|
|
2
|
-
import { m as TimeTravelModule } from './timeTravel-
|
|
1
|
+
import { d as Reactive } from './index-m0aAWxhX.js';
|
|
2
|
+
import { m as TimeTravelModule } from './timeTravel-DExvNb04.js';
|
|
3
3
|
|
|
4
4
|
/** Reactive options for the TimeTravel overlay instance. */
|
|
5
5
|
interface TimeTravelConfig {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as Reactive } from './index-
|
|
2
|
-
import { m as TimeTravelModule } from './timeTravel-
|
|
1
|
+
import { d as Reactive } from './index-m0aAWxhX.cjs';
|
|
2
|
+
import { m as TimeTravelModule } from './timeTravel-DctvcHVt.cjs';
|
|
3
3
|
|
|
4
4
|
/** Reactive options for the TimeTravel overlay instance. */
|
|
5
5
|
interface TimeTravelConfig {
|
package/dist/adapters/react.cjs
CHANGED
|
@@ -63,7 +63,7 @@ var NOOP = () => {
|
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
// src/ts/utils/obj.ts
|
|
66
|
-
var
|
|
66
|
+
var arrRegex = /^([^\[\]]+)\[(\d+)\]$/;
|
|
67
67
|
function isObj(obj, arraycheck = true) {
|
|
68
68
|
return "object" === typeof obj && obj !== null && (arraycheck ? !Array.isArray(obj) : true);
|
|
69
69
|
}
|
|
@@ -71,7 +71,7 @@ function isPOJO(obj, config = NIL, typecheck = true) {
|
|
|
71
71
|
return (typecheck ? isObj(obj, false) : true) && (config.crossRealms ? Object.prototype.toString.call(obj) === "[object Object]" : obj.constructor === Object);
|
|
72
72
|
}
|
|
73
73
|
function canHandle(obj, config = NIL, typecheck = true) {
|
|
74
|
-
if (typecheck && !isObj(obj, false)) return false;
|
|
74
|
+
if (typecheck && !isObj(obj, false) || obj[INERTIA]) return false;
|
|
75
75
|
if (Array.isArray(obj) || !config.preserveContext && isPOJO(obj, config, false)) return true;
|
|
76
76
|
if (config.preserveContext) return !(obj instanceof Map) && !(obj instanceof Set) && !(obj instanceof WeakMap) && !(obj instanceof WeakSet) && !(obj instanceof Error) && !(obj instanceof Number) && !(obj instanceof Date) && !(obj instanceof String) && !(obj instanceof RegExp) && !(obj instanceof ArrayBuffer) && !(obj instanceof Promise);
|
|
77
77
|
return false;
|
|
@@ -82,7 +82,7 @@ function getAny(source, key, separator = ".", keyFunc) {
|
|
|
82
82
|
const keys2 = key.split(separator);
|
|
83
83
|
let currObj = source;
|
|
84
84
|
for (let i = 0, len = keys2.length; i < len; i++) {
|
|
85
|
-
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(
|
|
85
|
+
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
86
86
|
if (match) {
|
|
87
87
|
const [, key3, iStr] = match;
|
|
88
88
|
if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return void 0;
|
|
@@ -99,7 +99,7 @@ function setAny(target, key, value, separator = ".", keyFunc) {
|
|
|
99
99
|
if (!key.includes(separator)) return void (target[keyFunc ? keyFunc(key) : key] = value);
|
|
100
100
|
const keys2 = key.split(separator);
|
|
101
101
|
for (let currObj = target, i = 0, len = keys2.length; i < len; i++) {
|
|
102
|
-
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(
|
|
102
|
+
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
103
103
|
if (match) {
|
|
104
104
|
const [, key3, iStr] = match;
|
|
105
105
|
if (!Array.isArray(currObj[key3])) currObj[key3] = [];
|
|
@@ -120,7 +120,7 @@ function deleteAny(target, key, separator = ".", keyFunc) {
|
|
|
120
120
|
if (!key.includes(separator)) return void delete target[keyFunc ? keyFunc(key) : key];
|
|
121
121
|
const keys2 = key.split(separator);
|
|
122
122
|
for (let currObj = target, i = 0, len = keys2.length; i < len; i++) {
|
|
123
|
-
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(
|
|
123
|
+
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
124
124
|
if (match) {
|
|
125
125
|
const [, key3, iStr] = match;
|
|
126
126
|
if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return;
|
|
@@ -138,7 +138,7 @@ function inAny(source, key, separator = ".", keyFunc) {
|
|
|
138
138
|
if (!key.includes(separator)) return key in source;
|
|
139
139
|
const keys2 = key.split(separator);
|
|
140
140
|
for (let currObj = source, i = 0, len = keys2.length; i < len; i++) {
|
|
141
|
-
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(
|
|
141
|
+
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
142
142
|
if (match) {
|
|
143
143
|
const [, key3, iStr] = match;
|
|
144
144
|
if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return false;
|
|
@@ -339,7 +339,7 @@ var Reactor = class {
|
|
|
339
339
|
if (this.config.referenceTracking && parent && key && !this.link(target, parent, key, false)) return target;
|
|
340
340
|
const cached = this.proxyCache.get(target);
|
|
341
341
|
if (cached) return cached;
|
|
342
|
-
if (
|
|
342
|
+
if (!canHandle(target, this.config, false)) return target;
|
|
343
343
|
rejectable ||= target[REJECTABLE];
|
|
344
344
|
indiffable ||= target[INDIFFABLE];
|
|
345
345
|
const proxy = new Proxy(target, {
|
|
@@ -621,7 +621,8 @@ var Reactor = class {
|
|
|
621
621
|
for (let i = 0, len = keys2.length; i < len; i++)
|
|
622
622
|
try {
|
|
623
623
|
clone[keys2[i]] = this.cloned(obj[keys2[i]], raw, seen);
|
|
624
|
-
} catch {
|
|
624
|
+
} catch (e) {
|
|
625
|
+
if (e instanceof RangeError) throw e;
|
|
625
626
|
}
|
|
626
627
|
if (!raw && this.config.smartCloning) this.snapCache.set(obj, clone), obj[SSVERSION] = version;
|
|
627
628
|
return clone;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { E as EffectOptions, R as Reactor, d as Reactive,
|
|
1
|
+
import { E as EffectOptions, R as Reactor, d as Reactive, u as ReactorBuild, W as WildPaths, v as PathValue } from '../index-m0aAWxhX.cjs';
|
|
2
2
|
import { useLayoutEffect } from 'react';
|
|
3
|
-
import { m as TimeTravelModule } from '../timeTravel-
|
|
4
|
-
import { T as TimeTravelConfig } from '../TimeTravelOverlay-
|
|
3
|
+
import { m as TimeTravelModule } from '../timeTravel-DctvcHVt.cjs';
|
|
4
|
+
import { T as TimeTravelConfig } from '../TimeTravelOverlay-OjklzuCD.cjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Subscribes a component to desired Reactor state and returns it.
|
package/dist/adapters/react.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { E as EffectOptions, R as Reactor, d as Reactive,
|
|
1
|
+
import { E as EffectOptions, R as Reactor, d as Reactive, u as ReactorBuild, W as WildPaths, v as PathValue } from '../index-m0aAWxhX.js';
|
|
2
2
|
import { useLayoutEffect } from 'react';
|
|
3
|
-
import { m as TimeTravelModule } from '../timeTravel-
|
|
4
|
-
import { T as TimeTravelConfig } from '../TimeTravelOverlay-
|
|
3
|
+
import { m as TimeTravelModule } from '../timeTravel-DExvNb04.js';
|
|
4
|
+
import { T as TimeTravelConfig } from '../TimeTravelOverlay-Dglcwpg-.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Subscribes a component to desired Reactor state and returns it.
|
package/dist/adapters/react.js
CHANGED
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
Autotracker,
|
|
3
3
|
TimeTravelOverlay,
|
|
4
4
|
withTracker
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-5JNWC7Z4.js";
|
|
6
6
|
import {
|
|
7
7
|
getReactor
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-MSTHQVNK.js";
|
|
9
9
|
import "../chunk-5A44QFT6.js";
|
|
10
10
|
import "../chunk-P37ADJMM.js";
|
|
11
11
|
import {
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
NIL,
|
|
14
14
|
NOOP,
|
|
15
15
|
getAny
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-MKL3JUPO.js";
|
|
17
17
|
|
|
18
18
|
// src/ts/adapters/react/hooks/useReactor.ts
|
|
19
19
|
import { useRef, useCallback, useSyncExternalStore, useMemo } from "react";
|
|
@@ -51,7 +51,7 @@ var NOOP = () => {
|
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
// src/ts/utils/obj.ts
|
|
54
|
-
var
|
|
54
|
+
var arrRegex = /^([^\[\]]+)\[(\d+)\]$/;
|
|
55
55
|
function isObj(obj, arraycheck = true) {
|
|
56
56
|
return "object" === typeof obj && obj !== null && (arraycheck ? !Array.isArray(obj) : true);
|
|
57
57
|
}
|
|
@@ -59,7 +59,7 @@ function isPOJO(obj, config = NIL, typecheck = true) {
|
|
|
59
59
|
return (typecheck ? isObj(obj, false) : true) && (config.crossRealms ? Object.prototype.toString.call(obj) === "[object Object]" : obj.constructor === Object);
|
|
60
60
|
}
|
|
61
61
|
function canHandle(obj, config = NIL, typecheck = true) {
|
|
62
|
-
if (typecheck && !isObj(obj, false)) return false;
|
|
62
|
+
if (typecheck && !isObj(obj, false) || obj[INERTIA]) return false;
|
|
63
63
|
if (Array.isArray(obj) || !config.preserveContext && isPOJO(obj, config, false)) return true;
|
|
64
64
|
if (config.preserveContext) return !(obj instanceof Map) && !(obj instanceof Set) && !(obj instanceof WeakMap) && !(obj instanceof WeakSet) && !(obj instanceof Error) && !(obj instanceof Number) && !(obj instanceof Date) && !(obj instanceof String) && !(obj instanceof RegExp) && !(obj instanceof ArrayBuffer) && !(obj instanceof Promise);
|
|
65
65
|
return false;
|
|
@@ -70,7 +70,7 @@ function getAny(source, key, separator = ".", keyFunc) {
|
|
|
70
70
|
const keys2 = key.split(separator);
|
|
71
71
|
let currObj = source;
|
|
72
72
|
for (let i = 0, len = keys2.length; i < len; i++) {
|
|
73
|
-
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(
|
|
73
|
+
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
74
74
|
if (match) {
|
|
75
75
|
const [, key3, iStr] = match;
|
|
76
76
|
if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return void 0;
|
|
@@ -87,7 +87,7 @@ function setAny(target, key, value, separator = ".", keyFunc) {
|
|
|
87
87
|
if (!key.includes(separator)) return void (target[keyFunc ? keyFunc(key) : key] = value);
|
|
88
88
|
const keys2 = key.split(separator);
|
|
89
89
|
for (let currObj = target, i = 0, len = keys2.length; i < len; i++) {
|
|
90
|
-
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(
|
|
90
|
+
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
91
91
|
if (match) {
|
|
92
92
|
const [, key3, iStr] = match;
|
|
93
93
|
if (!Array.isArray(currObj[key3])) currObj[key3] = [];
|
|
@@ -108,7 +108,7 @@ function deleteAny(target, key, separator = ".", keyFunc) {
|
|
|
108
108
|
if (!key.includes(separator)) return void delete target[keyFunc ? keyFunc(key) : key];
|
|
109
109
|
const keys2 = key.split(separator);
|
|
110
110
|
for (let currObj = target, i = 0, len = keys2.length; i < len; i++) {
|
|
111
|
-
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(
|
|
111
|
+
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
112
112
|
if (match) {
|
|
113
113
|
const [, key3, iStr] = match;
|
|
114
114
|
if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return;
|
|
@@ -126,7 +126,7 @@ function inAny(source, key, separator = ".", keyFunc) {
|
|
|
126
126
|
if (!key.includes(separator)) return key in source;
|
|
127
127
|
const keys2 = key.split(separator);
|
|
128
128
|
for (let currObj = source, i = 0, len = keys2.length; i < len; i++) {
|
|
129
|
-
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(
|
|
129
|
+
const key2 = keyFunc ? keyFunc(keys2[i]) : keys2[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
130
130
|
if (match) {
|
|
131
131
|
const [, key3, iStr] = match;
|
|
132
132
|
if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return false;
|
|
@@ -479,7 +479,7 @@ var Reactor = class {
|
|
|
479
479
|
if (this.config.referenceTracking && parent && key && !this.link(target, parent, key, false)) return target;
|
|
480
480
|
const cached = this.proxyCache.get(target);
|
|
481
481
|
if (cached) return cached;
|
|
482
|
-
if (
|
|
482
|
+
if (!canHandle(target, this.config, false)) return target;
|
|
483
483
|
rejectable ||= target[REJECTABLE];
|
|
484
484
|
indiffable ||= target[INDIFFABLE];
|
|
485
485
|
const proxy = new Proxy(target, {
|
|
@@ -761,7 +761,8 @@ var Reactor = class {
|
|
|
761
761
|
for (let i = 0, len = keys2.length; i < len; i++)
|
|
762
762
|
try {
|
|
763
763
|
clone[keys2[i]] = this.cloned(obj[keys2[i]], raw, seen);
|
|
764
|
-
} catch {
|
|
764
|
+
} catch (e) {
|
|
765
|
+
if (e instanceof RangeError) throw e;
|
|
765
766
|
}
|
|
766
767
|
if (!raw && this.config.smartCloning) this.snapCache.set(obj, clone), obj[SSVERSION] = version;
|
|
767
768
|
return clone;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { E as EffectOptions } from '../index-
|
|
2
|
-
export { A as Autotracker, w as withTracker } from '../index-
|
|
3
|
-
export { T as TimeTravelConfig, a as TimeTravelOverlay } from '../TimeTravelOverlay-
|
|
4
|
-
import '../timeTravel-
|
|
1
|
+
import { E as EffectOptions } from '../index-m0aAWxhX.cjs';
|
|
2
|
+
export { A as Autotracker, w as withTracker } from '../index-m0aAWxhX.cjs';
|
|
3
|
+
export { T as TimeTravelConfig, a as TimeTravelOverlay } from '../TimeTravelOverlay-OjklzuCD.cjs';
|
|
4
|
+
import '../timeTravel-DctvcHVt.cjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Runs a reactive side effect in vanilla JavaScript.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { E as EffectOptions } from '../index-
|
|
2
|
-
export { A as Autotracker, w as withTracker } from '../index-
|
|
3
|
-
export { T as TimeTravelConfig, a as TimeTravelOverlay } from '../TimeTravelOverlay-
|
|
4
|
-
import '../timeTravel-
|
|
1
|
+
import { E as EffectOptions } from '../index-m0aAWxhX.js';
|
|
2
|
+
export { A as Autotracker, w as withTracker } from '../index-m0aAWxhX.js';
|
|
3
|
+
export { T as TimeTravelConfig, a as TimeTravelOverlay } from '../TimeTravelOverlay-Dglcwpg-.js';
|
|
4
|
+
import '../timeTravel-DExvNb04.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Runs a reactive side effect in vanilla JavaScript.
|
package/dist/adapters/vanilla.js
CHANGED
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
TimeTravelOverlay,
|
|
4
4
|
effect,
|
|
5
5
|
withTracker
|
|
6
|
-
} from "../chunk-
|
|
7
|
-
import "../chunk-
|
|
6
|
+
} from "../chunk-5JNWC7Z4.js";
|
|
7
|
+
import "../chunk-MSTHQVNK.js";
|
|
8
8
|
import "../chunk-5A44QFT6.js";
|
|
9
9
|
import "../chunk-P37ADJMM.js";
|
|
10
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-MKL3JUPO.js";
|
|
11
11
|
export {
|
|
12
12
|
Autotracker,
|
|
13
13
|
TimeTravelOverlay,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
reactive
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MSTHQVNK.js";
|
|
4
4
|
import {
|
|
5
5
|
createEl,
|
|
6
6
|
formatKeyForDisplay,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
RAW,
|
|
14
14
|
canHandle,
|
|
15
15
|
nuke
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-MKL3JUPO.js";
|
|
17
17
|
|
|
18
18
|
// src/ts/adapters/autotracker.ts
|
|
19
19
|
var Autotracker = class {
|
|
@@ -22,7 +22,7 @@ var NOOP = () => {
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
// src/ts/utils/obj.ts
|
|
25
|
-
var
|
|
25
|
+
var arrRegex = /^([^\[\]]+)\[(\d+)\]$/;
|
|
26
26
|
function isObj(obj, arraycheck = true) {
|
|
27
27
|
return "object" === typeof obj && obj !== null && (arraycheck ? !Array.isArray(obj) : true);
|
|
28
28
|
}
|
|
@@ -30,7 +30,7 @@ function isPOJO(obj, config = NIL, typecheck = true) {
|
|
|
30
30
|
return (typecheck ? isObj(obj, false) : true) && (config.crossRealms ? Object.prototype.toString.call(obj) === "[object Object]" : obj.constructor === Object);
|
|
31
31
|
}
|
|
32
32
|
function canHandle(obj, config = NIL, typecheck = true) {
|
|
33
|
-
if (typecheck && !isObj(obj, false)) return false;
|
|
33
|
+
if (typecheck && !isObj(obj, false) || obj[INERTIA]) return false;
|
|
34
34
|
if (Array.isArray(obj) || !config.preserveContext && isPOJO(obj, config, false)) return true;
|
|
35
35
|
if (config.preserveContext) return !(obj instanceof Map) && !(obj instanceof Set) && !(obj instanceof WeakMap) && !(obj instanceof WeakSet) && !(obj instanceof Error) && !(obj instanceof Number) && !(obj instanceof Date) && !(obj instanceof String) && !(obj instanceof RegExp) && !(obj instanceof ArrayBuffer) && !(obj instanceof Promise);
|
|
36
36
|
return false;
|
|
@@ -41,7 +41,7 @@ function getAny(source, key, separator = ".", keyFunc) {
|
|
|
41
41
|
const keys = key.split(separator);
|
|
42
42
|
let currObj = source;
|
|
43
43
|
for (let i = 0, len = keys.length; i < len; i++) {
|
|
44
|
-
const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes("[") && key2.match(
|
|
44
|
+
const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
45
45
|
if (match) {
|
|
46
46
|
const [, key3, iStr] = match;
|
|
47
47
|
if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return void 0;
|
|
@@ -58,7 +58,7 @@ function setAny(target, key, value, separator = ".", keyFunc) {
|
|
|
58
58
|
if (!key.includes(separator)) return void (target[keyFunc ? keyFunc(key) : key] = value);
|
|
59
59
|
const keys = key.split(separator);
|
|
60
60
|
for (let currObj = target, i = 0, len = keys.length; i < len; i++) {
|
|
61
|
-
const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes("[") && key2.match(
|
|
61
|
+
const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
62
62
|
if (match) {
|
|
63
63
|
const [, key3, iStr] = match;
|
|
64
64
|
if (!Array.isArray(currObj[key3])) currObj[key3] = [];
|
|
@@ -79,7 +79,7 @@ function deleteAny(target, key, separator = ".", keyFunc) {
|
|
|
79
79
|
if (!key.includes(separator)) return void delete target[keyFunc ? keyFunc(key) : key];
|
|
80
80
|
const keys = key.split(separator);
|
|
81
81
|
for (let currObj = target, i = 0, len = keys.length; i < len; i++) {
|
|
82
|
-
const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes("[") && key2.match(
|
|
82
|
+
const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
83
83
|
if (match) {
|
|
84
84
|
const [, key3, iStr] = match;
|
|
85
85
|
if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return;
|
|
@@ -97,7 +97,7 @@ function inAny(source, key, separator = ".", keyFunc) {
|
|
|
97
97
|
if (!key.includes(separator)) return key in source;
|
|
98
98
|
const keys = key.split(separator);
|
|
99
99
|
for (let currObj = source, i = 0, len = keys.length; i < len; i++) {
|
|
100
|
-
const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes("[") && key2.match(
|
|
100
|
+
const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes("[") && key2.match(arrRegex);
|
|
101
101
|
if (match) {
|
|
102
102
|
const [, key3, iStr] = match;
|
|
103
103
|
if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return false;
|
|
@@ -125,30 +125,35 @@ function parseEvtOpts(options, opts, boolOpt = opts[0], result = {}) {
|
|
|
125
125
|
return Object.assign(result, "boolean" === typeof options ? { [boolOpt]: options } : options), result;
|
|
126
126
|
}
|
|
127
127
|
function fanout(a, b, c, d) {
|
|
128
|
-
const
|
|
129
|
-
if (
|
|
128
|
+
const isEvPd = !!a?.target, isPath = !isEvPd && "string" === typeof b, [state, path, olds, news, opts, type] = isEvPd ? [a.root, a.currentTarget.path, a.currentTarget.oldValue, a.currentTarget.value, b || NIL, a.type] : isPath ? [a, b, getAny(a, b), c, d || NIL, void 0] : [void 0, void 0, a, b, c || NIL, void 0], target = isEvPd ? getAny(a.root, a.currentTarget.path) : isPath ? getAny(state, path) : olds;
|
|
129
|
+
if (isEvPd && type !== "set" && type !== "delete" || !target || !canHandle(news, opts)) return;
|
|
130
130
|
const prev = CTX.isCascading;
|
|
131
|
-
CTX.isCascading =
|
|
131
|
+
CTX.isCascading = isEvPd;
|
|
132
132
|
try {
|
|
133
|
-
const walk = (target2, obj, depth = 1, keys = Object.keys(obj)) => {
|
|
133
|
+
const walk = (target2, obj, depth = isEvPd ? 1 : Infinity, keys = Object.keys(obj)) => {
|
|
134
134
|
for (let i = 0, len = keys.length; i < len; i++) {
|
|
135
135
|
const val = obj[keys[i]];
|
|
136
136
|
try {
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
if ((opts.atomic ?? true) && Array.isArray(val)) target2[keys[i]] = val, target2[keys[i]].length = target2[keys[i]].length;
|
|
138
|
+
else depth > 1 && canHandle(val, opts) ? walk(target2[keys[i]] ||= {}, val, depth - 1) : target2[keys[i]] = val;
|
|
139
|
+
} catch (e) {
|
|
140
|
+
if (e instanceof RangeError) throw e;
|
|
139
141
|
}
|
|
140
142
|
}
|
|
141
143
|
};
|
|
142
|
-
|
|
144
|
+
if ((opts.atomic ?? true) && Array.isArray(news) && isPath) setAny(state, path, news), getAny(state, path).length = news.length;
|
|
145
|
+
else walk(target, opts.merge ? mergeObjs(olds, news, opts) : news, opts.depth === true ? Infinity : opts.depth);
|
|
143
146
|
} finally {
|
|
144
147
|
CTX.isCascading = prev;
|
|
145
148
|
}
|
|
146
149
|
}
|
|
147
|
-
|
|
150
|
+
var fanoutOptsArr = ["merge", "depth", "atomic"];
|
|
151
|
+
function mergeObjs(o1, o2, config, pojocheck = true) {
|
|
152
|
+
if (pojocheck && (!isPOJO(o1 || NIL, config) || !isPOJO(o2 || NIL, config))) return o2;
|
|
148
153
|
const merged = { ...o1 ||= {}, ...o2 ||= {} }, keys = Object.keys(merged);
|
|
149
154
|
for (let i = 0, len = keys.length; i < len; i++) {
|
|
150
|
-
const
|
|
151
|
-
if (
|
|
155
|
+
const o1C = o1[keys[i]], o2C = o2[keys[i]];
|
|
156
|
+
if (isPOJO(o1C, config) && isPOJO(o2C, config)) merged[keys[i]] = mergeObjs(o1C, o2C, config, false);
|
|
152
157
|
}
|
|
153
158
|
return merged;
|
|
154
159
|
}
|
|
@@ -168,7 +173,8 @@ function deepClone(obj, config = NIL, seen = /* @__PURE__ */ new WeakMap()) {
|
|
|
168
173
|
for (let i = 0, len = keys.length; i < len; i++)
|
|
169
174
|
try {
|
|
170
175
|
clone[keys[i]] = deepClone(obj[keys[i]], config, seen);
|
|
171
|
-
} catch {
|
|
176
|
+
} catch (e) {
|
|
177
|
+
if (e instanceof RangeError) throw e;
|
|
172
178
|
}
|
|
173
179
|
return clone;
|
|
174
180
|
}
|
|
@@ -200,6 +206,7 @@ export {
|
|
|
200
206
|
EVT_OPTS,
|
|
201
207
|
NIL,
|
|
202
208
|
NOOP,
|
|
209
|
+
arrRegex,
|
|
203
210
|
isObj,
|
|
204
211
|
isPOJO,
|
|
205
212
|
canHandle,
|
|
@@ -210,6 +217,7 @@ export {
|
|
|
210
217
|
parseAnyObj,
|
|
211
218
|
parseEvtOpts,
|
|
212
219
|
fanout,
|
|
220
|
+
fanoutOptsArr,
|
|
213
221
|
mergeObjs,
|
|
214
222
|
getTrailRecords,
|
|
215
223
|
deepClone,
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
nuke,
|
|
21
21
|
parseEvtOpts,
|
|
22
22
|
setAny
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-MKL3JUPO.js";
|
|
24
24
|
|
|
25
25
|
// src/ts/core/event.ts
|
|
26
26
|
var ReactorEvent = class _ReactorEvent {
|
|
@@ -187,7 +187,7 @@ var Reactor = class {
|
|
|
187
187
|
if (this.config.referenceTracking && parent && key && !this.link(target, parent, key, false)) return target;
|
|
188
188
|
const cached = this.proxyCache.get(target);
|
|
189
189
|
if (cached) return cached;
|
|
190
|
-
if (
|
|
190
|
+
if (!canHandle(target, this.config, false)) return target;
|
|
191
191
|
rejectable ||= target[REJECTABLE];
|
|
192
192
|
indiffable ||= target[INDIFFABLE];
|
|
193
193
|
const proxy = new Proxy(target, {
|
|
@@ -469,7 +469,8 @@ var Reactor = class {
|
|
|
469
469
|
for (let i = 0, len = keys.length; i < len; i++)
|
|
470
470
|
try {
|
|
471
471
|
clone[keys[i]] = this.cloned(obj[keys[i]], raw, seen);
|
|
472
|
-
} catch {
|
|
472
|
+
} catch (e) {
|
|
473
|
+
if (e instanceof RangeError) throw e;
|
|
473
474
|
}
|
|
474
475
|
if (!raw && this.config.smartCloning) this.snapCache.set(obj, clone), obj[SSVERSION] = version;
|
|
475
476
|
return clone;
|
|
@@ -706,7 +707,7 @@ function inert(target) {
|
|
|
706
707
|
function live(target) {
|
|
707
708
|
return delete getRaw(target)[INERTIA], target;
|
|
708
709
|
}
|
|
709
|
-
function isInert(target) {
|
|
710
|
+
function isInert(target = NIL) {
|
|
710
711
|
return !!getRaw(target)[INERTIA];
|
|
711
712
|
}
|
|
712
713
|
function intent(target) {
|
|
@@ -715,7 +716,7 @@ function intent(target) {
|
|
|
715
716
|
function state(target) {
|
|
716
717
|
return delete getRaw(target)[REJECTABLE], target;
|
|
717
718
|
}
|
|
718
|
-
function isIntent(target) {
|
|
719
|
+
function isIntent(target = NIL) {
|
|
719
720
|
return !!getRaw(target)[REJECTABLE];
|
|
720
721
|
}
|
|
721
722
|
function volatile(target) {
|
|
@@ -724,19 +725,19 @@ function volatile(target) {
|
|
|
724
725
|
function stable(target) {
|
|
725
726
|
return delete getRaw(target)[INDIFFABLE], target;
|
|
726
727
|
}
|
|
727
|
-
function isVolatile(target) {
|
|
728
|
+
function isVolatile(target = NIL) {
|
|
728
729
|
return !!getRaw(target)[INDIFFABLE];
|
|
729
730
|
}
|
|
730
731
|
function getReactor(target, create = false, build) {
|
|
731
732
|
return (target instanceof Reactor ? target : target.__Reactor__) || (create ? new Reactor(target, build) : void 0);
|
|
732
733
|
}
|
|
733
|
-
function getRaw(target) {
|
|
734
|
-
return target
|
|
734
|
+
function getRaw(target = NIL) {
|
|
735
|
+
return target[RAW] || target;
|
|
735
736
|
}
|
|
736
|
-
function getVersion(target) {
|
|
737
|
+
function getVersion(target = NIL) {
|
|
737
738
|
return getRaw(target)[VERSION] || 0;
|
|
738
739
|
}
|
|
739
|
-
function getSnapshotVersion(target) {
|
|
740
|
+
function getSnapshotVersion(target = NIL) {
|
|
740
741
|
return getRaw(target)[SSVERSION] || 0;
|
|
741
742
|
}
|
|
742
743
|
|