@logixjs/core 0.0.1
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/dist/Action-BkRHy2vg.d.cts +10 -0
- package/dist/Action-mqVvtEHt.d.ts +10 -0
- package/dist/Action.cjs +57 -0
- package/dist/Action.cjs.map +1 -0
- package/dist/Action.d.cts +2 -0
- package/dist/Action.d.ts +2 -0
- package/dist/Action.js +9 -0
- package/dist/Action.js.map +1 -0
- package/dist/Actions-AsQ07yTP.d.cts +22 -0
- package/dist/Actions-AsQ07yTP.d.ts +22 -0
- package/dist/Actions.cjs +19 -0
- package/dist/Actions.cjs.map +1 -0
- package/dist/Actions.d.cts +2 -0
- package/dist/Actions.d.ts +2 -0
- package/dist/Actions.js +2 -0
- package/dist/Actions.js.map +1 -0
- package/dist/Bound-BN1DQ_lM.d.ts +23 -0
- package/dist/Bound-BPIfH9SS.d.cts +23 -0
- package/dist/Bound.cjs +1532 -0
- package/dist/Bound.cjs.map +1 -0
- package/dist/Bound.d.cts +7 -0
- package/dist/Bound.d.ts +7 -0
- package/dist/Bound.js +25 -0
- package/dist/Bound.js.map +1 -0
- package/dist/Debug-B5q5Bkzx.d.ts +320 -0
- package/dist/Debug-Bq8Sqjcr.d.cts +320 -0
- package/dist/Debug.cjs +1821 -0
- package/dist/Debug.cjs.map +1 -0
- package/dist/Debug.d.cts +13 -0
- package/dist/Debug.d.ts +13 -0
- package/dist/Debug.js +76 -0
- package/dist/Debug.js.map +1 -0
- package/dist/EffectOp.cjs +169 -0
- package/dist/EffectOp.cjs.map +1 -0
- package/dist/EffectOp.d.cts +118 -0
- package/dist/EffectOp.d.ts +118 -0
- package/dist/EffectOp.js +28 -0
- package/dist/EffectOp.js.map +1 -0
- package/dist/Env-DuJ6JrU2.d.cts +10 -0
- package/dist/Env-DuJ6JrU2.d.ts +10 -0
- package/dist/Env.cjs +60 -0
- package/dist/Env.cjs.map +1 -0
- package/dist/Env.d.cts +1 -0
- package/dist/Env.d.ts +1 -0
- package/dist/Env.js +11 -0
- package/dist/Env.js.map +1 -0
- package/dist/Flow-1fZT8MpX.d.cts +152 -0
- package/dist/Flow-BhpjE22E.d.ts +152 -0
- package/dist/Flow.cjs +504 -0
- package/dist/Flow.cjs.map +1 -0
- package/dist/Flow.d.cts +8 -0
- package/dist/Flow.d.ts +8 -0
- package/dist/Flow.js +15 -0
- package/dist/Flow.js.map +1 -0
- package/dist/Handle-D8D1zPb_.d.cts +30 -0
- package/dist/Handle-D_cLW1Z3.d.ts +30 -0
- package/dist/Handle.cjs +42 -0
- package/dist/Handle.cjs.map +1 -0
- package/dist/Handle.d.cts +7 -0
- package/dist/Handle.d.ts +7 -0
- package/dist/Handle.js +10 -0
- package/dist/Handle.js.map +1 -0
- package/dist/Kernel-8kC-jOda.d.cts +171 -0
- package/dist/Kernel-CnGE1Fyk.d.ts +171 -0
- package/dist/Kernel.cjs +284 -0
- package/dist/Kernel.cjs.map +1 -0
- package/dist/Kernel.d.cts +14 -0
- package/dist/Kernel.d.ts +14 -0
- package/dist/Kernel.js +36 -0
- package/dist/Kernel.js.map +1 -0
- package/dist/Link-Db7975nU.d.ts +45 -0
- package/dist/Link-fX8x1eCK.d.cts +45 -0
- package/dist/Link.cjs +542 -0
- package/dist/Link.cjs.map +1 -0
- package/dist/Link.d.cts +7 -0
- package/dist/Link.d.ts +7 -0
- package/dist/Link.js +35 -0
- package/dist/Link.js.map +1 -0
- package/dist/Logic-BRjEMr-W.d.ts +38 -0
- package/dist/Logic-DRh4sDZj.d.cts +38 -0
- package/dist/Logic.cjs +37 -0
- package/dist/Logic.cjs.map +1 -0
- package/dist/Logic.d.cts +7 -0
- package/dist/Logic.d.ts +7 -0
- package/dist/Logic.js +10 -0
- package/dist/Logic.js.map +1 -0
- package/dist/MatchBuilder-0QOc-nlU.d.ts +14 -0
- package/dist/MatchBuilder-CJk5oCkR.d.cts +14 -0
- package/dist/MatchBuilder.cjs +85 -0
- package/dist/MatchBuilder.cjs.map +1 -0
- package/dist/MatchBuilder.d.cts +8 -0
- package/dist/MatchBuilder.d.ts +8 -0
- package/dist/MatchBuilder.js +11 -0
- package/dist/MatchBuilder.js.map +1 -0
- package/dist/Middleware.cjs +411 -0
- package/dist/Middleware.cjs.map +1 -0
- package/dist/Middleware.d.cts +88 -0
- package/dist/Middleware.d.ts +88 -0
- package/dist/Middleware.js +27 -0
- package/dist/Middleware.js.map +1 -0
- package/dist/Module-B_0xRDMR.d.cts +203 -0
- package/dist/Module-DnzluX2J.d.ts +203 -0
- package/dist/Module.cjs +13512 -0
- package/dist/Module.cjs.map +1 -0
- package/dist/Module.d.cts +8 -0
- package/dist/Module.d.ts +8 -0
- package/dist/Module.js +53 -0
- package/dist/Module.js.map +1 -0
- package/dist/ModuleTag-C8FHY_sY.d.ts +93 -0
- package/dist/ModuleTag-EGbgBMpZ.d.cts +93 -0
- package/dist/ModuleTag.cjs +12231 -0
- package/dist/ModuleTag.cjs.map +1 -0
- package/dist/ModuleTag.d.cts +8 -0
- package/dist/ModuleTag.d.ts +8 -0
- package/dist/ModuleTag.js +39 -0
- package/dist/ModuleTag.js.map +1 -0
- package/dist/Observability-COqEvp2C.d.cts +713 -0
- package/dist/Observability-cY4kLn0S.d.ts +713 -0
- package/dist/Observability.cjs +5865 -0
- package/dist/Observability.cjs.map +1 -0
- package/dist/Observability.d.cts +9 -0
- package/dist/Observability.d.ts +9 -0
- package/dist/Observability.js +41 -0
- package/dist/Observability.js.map +1 -0
- package/dist/Platform-C49Pv956.d.cts +21 -0
- package/dist/Platform-C49Pv956.d.ts +21 -0
- package/dist/Platform-CHX8o-U4.d.ts +51 -0
- package/dist/Platform-CVlv0xLQ.d.cts +51 -0
- package/dist/Platform.cjs +58 -0
- package/dist/Platform.cjs.map +1 -0
- package/dist/Platform.d.cts +4 -0
- package/dist/Platform.d.ts +4 -0
- package/dist/Platform.js +15 -0
- package/dist/Platform.js.map +1 -0
- package/dist/Process-CM9xbMdP.d.ts +92 -0
- package/dist/Process-mL8fHDSB.d.cts +92 -0
- package/dist/Process.cjs +575 -0
- package/dist/Process.cjs.map +1 -0
- package/dist/Process.d.cts +8 -0
- package/dist/Process.d.ts +8 -0
- package/dist/Process.js +42 -0
- package/dist/Process.js.map +1 -0
- package/dist/ReadQuery-BlMwhe-F.d.ts +30 -0
- package/dist/ReadQuery-CL5XlXts.d.cts +30 -0
- package/dist/ReadQuery-SinbStGF.d.cts +38 -0
- package/dist/ReadQuery-SinbStGF.d.ts +38 -0
- package/dist/ReadQuery.cjs +377 -0
- package/dist/ReadQuery.cjs.map +1 -0
- package/dist/ReadQuery.d.cts +2 -0
- package/dist/ReadQuery.d.ts +2 -0
- package/dist/ReadQuery.js +14 -0
- package/dist/ReadQuery.js.map +1 -0
- package/dist/Reflection-CQnKwPXj.d.ts +182 -0
- package/dist/Reflection-Kabo1mlU.d.cts +182 -0
- package/dist/Reflection.cjs +2954 -0
- package/dist/Reflection.cjs.map +1 -0
- package/dist/Reflection.d.cts +17 -0
- package/dist/Reflection.d.ts +17 -0
- package/dist/Reflection.js +40 -0
- package/dist/Reflection.js.map +1 -0
- package/dist/Resource-Dy1xD_DG.d.cts +75 -0
- package/dist/Resource-Dy1xD_DG.d.ts +75 -0
- package/dist/Resource.cjs +166 -0
- package/dist/Resource.cjs.map +1 -0
- package/dist/Resource.d.cts +3 -0
- package/dist/Resource.d.ts +3 -0
- package/dist/Resource.js +21 -0
- package/dist/Resource.js.map +1 -0
- package/dist/Root-7ADUMk4t.d.cts +29 -0
- package/dist/Root-7ADUMk4t.d.ts +29 -0
- package/dist/Root.cjs +125 -0
- package/dist/Root.cjs.map +1 -0
- package/dist/Root.d.cts +4 -0
- package/dist/Root.d.ts +4 -0
- package/dist/Root.js +12 -0
- package/dist/Root.js.map +1 -0
- package/dist/Runtime-B-aL-f29.d.cts +274 -0
- package/dist/Runtime-CtyzZG4i.d.ts +274 -0
- package/dist/Runtime.cjs +5740 -0
- package/dist/Runtime.cjs.map +1 -0
- package/dist/Runtime.d.cts +19 -0
- package/dist/Runtime.d.ts +19 -0
- package/dist/Runtime.js +62 -0
- package/dist/Runtime.js.map +1 -0
- package/dist/ScopeRegistry-D1owDNSm.d.cts +61 -0
- package/dist/ScopeRegistry-D1owDNSm.d.ts +61 -0
- package/dist/ScopeRegistry.cjs +152 -0
- package/dist/ScopeRegistry.cjs.map +1 -0
- package/dist/ScopeRegistry.d.cts +2 -0
- package/dist/ScopeRegistry.d.ts +2 -0
- package/dist/ScopeRegistry.js +16 -0
- package/dist/ScopeRegistry.js.map +1 -0
- package/dist/State-CU50R26M.d.cts +19 -0
- package/dist/State-CU50R26M.d.ts +19 -0
- package/dist/State.cjs +19 -0
- package/dist/State.cjs.map +1 -0
- package/dist/State.d.cts +2 -0
- package/dist/State.d.ts +2 -0
- package/dist/State.js +2 -0
- package/dist/State.js.map +1 -0
- package/dist/StateTrait-BGsZghTz.d.ts +122 -0
- package/dist/StateTrait-OWhbj12c.d.cts +122 -0
- package/dist/StateTrait.cjs +2737 -0
- package/dist/StateTrait.cjs.map +1 -0
- package/dist/StateTrait.d.cts +9 -0
- package/dist/StateTrait.d.ts +9 -0
- package/dist/StateTrait.js +39 -0
- package/dist/StateTrait.js.map +1 -0
- package/dist/TraitLifecycle-CwV5WPFX.d.cts +88 -0
- package/dist/TraitLifecycle-LdIWmKlg.d.ts +88 -0
- package/dist/TraitLifecycle.cjs +581 -0
- package/dist/TraitLifecycle.cjs.map +1 -0
- package/dist/TraitLifecycle.d.cts +8 -0
- package/dist/TraitLifecycle.d.ts +8 -0
- package/dist/TraitLifecycle.js +24 -0
- package/dist/TraitLifecycle.js.map +1 -0
- package/dist/action-DiMDD_0v.d.cts +35 -0
- package/dist/action-DiMDD_0v.d.ts +35 -0
- package/dist/chunk-24VULZ7A.js +76 -0
- package/dist/chunk-24VULZ7A.js.map +1 -0
- package/dist/chunk-3IYZ5IGG.js +17 -0
- package/dist/chunk-3IYZ5IGG.js.map +1 -0
- package/dist/chunk-3QMIVH35.js +43 -0
- package/dist/chunk-3QMIVH35.js.map +1 -0
- package/dist/chunk-3RMKLXHX.js +83 -0
- package/dist/chunk-3RMKLXHX.js.map +1 -0
- package/dist/chunk-3TMODYZV.js +111 -0
- package/dist/chunk-3TMODYZV.js.map +1 -0
- package/dist/chunk-3VG5TWQR.js +27 -0
- package/dist/chunk-3VG5TWQR.js.map +1 -0
- package/dist/chunk-4CQAV7YB.js +37 -0
- package/dist/chunk-4CQAV7YB.js.map +1 -0
- package/dist/chunk-4SO6JMZL.js +7 -0
- package/dist/chunk-4SO6JMZL.js.map +1 -0
- package/dist/chunk-66ALHVEX.js +40 -0
- package/dist/chunk-66ALHVEX.js.map +1 -0
- package/dist/chunk-76WT3HOR.js +397 -0
- package/dist/chunk-76WT3HOR.js.map +1 -0
- package/dist/chunk-ANLBCBDC.js +285 -0
- package/dist/chunk-ANLBCBDC.js.map +1 -0
- package/dist/chunk-AUIR5O6W.js +75 -0
- package/dist/chunk-AUIR5O6W.js.map +1 -0
- package/dist/chunk-BABLDP24.js +445 -0
- package/dist/chunk-BABLDP24.js.map +1 -0
- package/dist/chunk-BE3HW4FY.js +1099 -0
- package/dist/chunk-BE3HW4FY.js.map +1 -0
- package/dist/chunk-BZ2SHDN2.js +54 -0
- package/dist/chunk-BZ2SHDN2.js.map +1 -0
- package/dist/chunk-CW6T36TN.js +393 -0
- package/dist/chunk-CW6T36TN.js.map +1 -0
- package/dist/chunk-DFNM3WX2.js +632 -0
- package/dist/chunk-DFNM3WX2.js.map +1 -0
- package/dist/chunk-DMBALCE2.js +1034 -0
- package/dist/chunk-DMBALCE2.js.map +1 -0
- package/dist/chunk-EGK3KN7B.js +406 -0
- package/dist/chunk-EGK3KN7B.js.map +1 -0
- package/dist/chunk-EY4NZKDR.js +19 -0
- package/dist/chunk-EY4NZKDR.js.map +1 -0
- package/dist/chunk-G5ZBFPNU.js +23 -0
- package/dist/chunk-G5ZBFPNU.js.map +1 -0
- package/dist/chunk-GMPEOUP2.js +31 -0
- package/dist/chunk-GMPEOUP2.js.map +1 -0
- package/dist/chunk-IHVBV5C2.js +279 -0
- package/dist/chunk-IHVBV5C2.js.map +1 -0
- package/dist/chunk-IPF7E66P.js +23 -0
- package/dist/chunk-IPF7E66P.js.map +1 -0
- package/dist/chunk-JCXGZRMU.js +204 -0
- package/dist/chunk-JCXGZRMU.js.map +1 -0
- package/dist/chunk-JGIWG6SR.js +6359 -0
- package/dist/chunk-JGIWG6SR.js.map +1 -0
- package/dist/chunk-JWOYLO27.js +241 -0
- package/dist/chunk-JWOYLO27.js.map +1 -0
- package/dist/chunk-KIXAU3GM.js +137 -0
- package/dist/chunk-KIXAU3GM.js.map +1 -0
- package/dist/chunk-KL5ACTCT.js +8 -0
- package/dist/chunk-KL5ACTCT.js.map +1 -0
- package/dist/chunk-KP7MUZNX.js +83 -0
- package/dist/chunk-KP7MUZNX.js.map +1 -0
- package/dist/chunk-LEU6UA5J.js +1 -0
- package/dist/chunk-LEU6UA5J.js.map +1 -0
- package/dist/chunk-M2RGJPXX.js +35 -0
- package/dist/chunk-M2RGJPXX.js.map +1 -0
- package/dist/chunk-M3BFQ7HK.js +13 -0
- package/dist/chunk-M3BFQ7HK.js.map +1 -0
- package/dist/chunk-M3WTHJHJ.js +1051 -0
- package/dist/chunk-M3WTHJHJ.js.map +1 -0
- package/dist/chunk-M7IYCTJV.js +79 -0
- package/dist/chunk-M7IYCTJV.js.map +1 -0
- package/dist/chunk-NBD3KUOZ.js +838 -0
- package/dist/chunk-NBD3KUOZ.js.map +1 -0
- package/dist/chunk-NQZ2OSGR.js +151 -0
- package/dist/chunk-NQZ2OSGR.js.map +1 -0
- package/dist/chunk-NZJKFF45.js +106 -0
- package/dist/chunk-NZJKFF45.js.map +1 -0
- package/dist/chunk-OFADUJWJ.js +175 -0
- package/dist/chunk-OFADUJWJ.js.map +1 -0
- package/dist/chunk-OGWBVHB3.js +461 -0
- package/dist/chunk-OGWBVHB3.js.map +1 -0
- package/dist/chunk-PAYXCY6A.js +1696 -0
- package/dist/chunk-PAYXCY6A.js.map +1 -0
- package/dist/chunk-PYOE4VSI.js +1924 -0
- package/dist/chunk-PYOE4VSI.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/chunk-QCHIQWAJ.js +21 -0
- package/dist/chunk-QCHIQWAJ.js.map +1 -0
- package/dist/chunk-QMM6O4CD.js +71 -0
- package/dist/chunk-QMM6O4CD.js.map +1 -0
- package/dist/chunk-RNFE3ML2.js +22 -0
- package/dist/chunk-RNFE3ML2.js.map +1 -0
- package/dist/chunk-TAAPQVZN.js +23 -0
- package/dist/chunk-TAAPQVZN.js.map +1 -0
- package/dist/chunk-THATMZXD.js +21 -0
- package/dist/chunk-THATMZXD.js.map +1 -0
- package/dist/chunk-TKZ7MEIA.js +27 -0
- package/dist/chunk-TKZ7MEIA.js.map +1 -0
- package/dist/chunk-TQOBJYDP.js +7 -0
- package/dist/chunk-TQOBJYDP.js.map +1 -0
- package/dist/chunk-VZB726PE.js +93 -0
- package/dist/chunk-VZB726PE.js.map +1 -0
- package/dist/chunk-W3TEWHLO.js +568 -0
- package/dist/chunk-W3TEWHLO.js.map +1 -0
- package/dist/chunk-YS3AZQ2G.js +52 -0
- package/dist/chunk-YS3AZQ2G.js.map +1 -0
- package/dist/chunk-ZDTRWK5F.js +40 -0
- package/dist/chunk-ZDTRWK5F.js.map +1 -0
- package/dist/chunk-ZFLHVFUC.js +192 -0
- package/dist/chunk-ZFLHVFUC.js.map +1 -0
- package/dist/chunk-ZFY7U2FR.js +133 -0
- package/dist/chunk-ZFY7U2FR.js.map +1 -0
- package/dist/chunk-ZGDVUPTM.js +270 -0
- package/dist/chunk-ZGDVUPTM.js.map +1 -0
- package/dist/index.cjs +19700 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +195 -0
- package/dist/index.d.ts +195 -0
- package/dist/index.js +286 -0
- package/dist/index.js.map +1 -0
- package/dist/ir-BMP7yxJJ.d.cts +39 -0
- package/dist/ir-DUOz6H-5.d.ts +39 -0
- package/dist/module-B8CBqIZ_.d.cts +1191 -0
- package/dist/module-k7m3txak.d.ts +1191 -0
- package/dist/protocol-g_1897M2.d.cts +127 -0
- package/dist/protocol-g_1897M2.d.ts +127 -0
- package/package.json +162 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export
|
|
3
|
+
} from "./chunk-PZ5AY32C.js";
|
|
4
|
+
|
|
5
|
+
// src/internal/state-trait/rowid.ts
|
|
6
|
+
var parseSegments = (path) => {
|
|
7
|
+
if (!path) return [];
|
|
8
|
+
return path.split(".").map((seg) => /^[0-9]+$/.test(seg) ? Number(seg) : seg);
|
|
9
|
+
};
|
|
10
|
+
var getAtPath = (state, path) => {
|
|
11
|
+
if (!path || state == null) return state;
|
|
12
|
+
const segments = parseSegments(path);
|
|
13
|
+
let current = state;
|
|
14
|
+
for (const seg of segments) {
|
|
15
|
+
if (current == null) return void 0;
|
|
16
|
+
if (typeof seg === "number") {
|
|
17
|
+
current = Array.isArray(current) ? current[seg] : current[String(seg)];
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
current = current[seg];
|
|
21
|
+
}
|
|
22
|
+
return current;
|
|
23
|
+
};
|
|
24
|
+
var setAtPathMutating = (draft, path, value) => {
|
|
25
|
+
if (!path) return;
|
|
26
|
+
const segments = parseSegments(path);
|
|
27
|
+
if (segments.length === 0) return;
|
|
28
|
+
let current = draft;
|
|
29
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
30
|
+
const key = segments[i];
|
|
31
|
+
const nextKey = segments[i + 1];
|
|
32
|
+
const next = current?.[key];
|
|
33
|
+
if (next == null || typeof next !== "object") {
|
|
34
|
+
current[key] = typeof nextKey === "number" ? [] : {};
|
|
35
|
+
}
|
|
36
|
+
current = current[key];
|
|
37
|
+
}
|
|
38
|
+
const last = segments[segments.length - 1];
|
|
39
|
+
current[last] = value;
|
|
40
|
+
};
|
|
41
|
+
var unsetAtPathMutating = (draft, path) => {
|
|
42
|
+
if (!path) return;
|
|
43
|
+
const segments = parseSegments(path);
|
|
44
|
+
if (segments.length === 0) return;
|
|
45
|
+
let current = draft;
|
|
46
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
47
|
+
const key = segments[i];
|
|
48
|
+
const next = current?.[key];
|
|
49
|
+
if (next == null || typeof next !== "object") {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
current = next;
|
|
53
|
+
}
|
|
54
|
+
const last = segments[segments.length - 1];
|
|
55
|
+
if (Array.isArray(current) && typeof last === "number") {
|
|
56
|
+
current[last] = void 0;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (current && typeof current === "object") {
|
|
60
|
+
delete current[last];
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
var parseListItemFieldPath = (fieldPath) => {
|
|
64
|
+
const raw = typeof fieldPath === "string" ? fieldPath.trim() : "";
|
|
65
|
+
if (!raw) return void 0;
|
|
66
|
+
const segments = raw.split(".").filter(Boolean);
|
|
67
|
+
let lastListSeg = -1;
|
|
68
|
+
for (let i = 0; i < segments.length; i++) {
|
|
69
|
+
if (segments[i].endsWith("[]")) lastListSeg = i;
|
|
70
|
+
}
|
|
71
|
+
if (lastListSeg < 0) return void 0;
|
|
72
|
+
const strip = (seg) => seg.endsWith("[]") ? seg.slice(0, -2) : seg;
|
|
73
|
+
const listPath = segments.slice(0, lastListSeg + 1).map(strip).join(".");
|
|
74
|
+
const itemPath = segments.slice(lastListSeg + 1).map(strip).join(".");
|
|
75
|
+
return { listPath, itemPath };
|
|
76
|
+
};
|
|
77
|
+
var toListItemValuePath = (listPath, index, itemPath) => itemPath ? `${listPath}.${index}.${itemPath}` : `${listPath}.${index}`;
|
|
78
|
+
var readTrackBy = (item, trackBy) => {
|
|
79
|
+
if (!item || typeof item !== "object") return void 0;
|
|
80
|
+
const segments = trackBy.split(".");
|
|
81
|
+
let current = item;
|
|
82
|
+
for (const seg of segments) {
|
|
83
|
+
if (current == null) return void 0;
|
|
84
|
+
current = current[seg];
|
|
85
|
+
}
|
|
86
|
+
return current;
|
|
87
|
+
};
|
|
88
|
+
var didReorderByReference = (prevItems, nextItems) => {
|
|
89
|
+
const buckets = /* @__PURE__ */ new Map();
|
|
90
|
+
for (let i = 0; i < prevItems.length; i++) {
|
|
91
|
+
const item = prevItems[i];
|
|
92
|
+
const list = buckets.get(item) ?? [];
|
|
93
|
+
list.push(i);
|
|
94
|
+
buckets.set(item, list);
|
|
95
|
+
}
|
|
96
|
+
for (let nextIndex = 0; nextIndex < nextItems.length; nextIndex++) {
|
|
97
|
+
const item = nextItems[nextIndex];
|
|
98
|
+
const q = buckets.get(item);
|
|
99
|
+
if (!q || q.length === 0) continue;
|
|
100
|
+
const prevIndex = q.shift();
|
|
101
|
+
if (prevIndex !== nextIndex) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
};
|
|
107
|
+
var hasStableTrackByKeys = (items, trackBy) => items.every((item) => readTrackBy(item, trackBy) !== void 0);
|
|
108
|
+
var isSameTrackBySequence = (prevItems, nextItems, trackBy) => {
|
|
109
|
+
if (prevItems.length !== nextItems.length) return false;
|
|
110
|
+
for (let i = 0; i < prevItems.length; i++) {
|
|
111
|
+
if (!Object.is(readTrackBy(prevItems[i], trackBy), readTrackBy(nextItems[i], trackBy))) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
};
|
|
117
|
+
var reconcileIds = (prev, nextItems, trackBy, makeRowId) => {
|
|
118
|
+
const nextRowId = makeRowId ?? /* @__PURE__ */ (() => {
|
|
119
|
+
let rowSeq = 0;
|
|
120
|
+
return () => {
|
|
121
|
+
rowSeq += 1;
|
|
122
|
+
return `r${rowSeq}`;
|
|
123
|
+
};
|
|
124
|
+
})();
|
|
125
|
+
if (!prev) {
|
|
126
|
+
return {
|
|
127
|
+
ids: nextItems.map(() => nextRowId()),
|
|
128
|
+
removed: []
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (prev.itemsRef === nextItems) {
|
|
132
|
+
return {
|
|
133
|
+
ids: prev.ids,
|
|
134
|
+
removed: []
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const sameLength = prev.itemsRef.length === nextItems.length;
|
|
138
|
+
if (sameLength) {
|
|
139
|
+
if (trackBy) {
|
|
140
|
+
const canUseKeys = hasStableTrackByKeys(prev.itemsRef, trackBy) && hasStableTrackByKeys(nextItems, trackBy);
|
|
141
|
+
if (canUseKeys) {
|
|
142
|
+
if (isSameTrackBySequence(prev.itemsRef, nextItems, trackBy)) {
|
|
143
|
+
return {
|
|
144
|
+
ids: prev.ids,
|
|
145
|
+
removed: []
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
if (!didReorderByReference(prev.itemsRef, nextItems)) {
|
|
150
|
+
return {
|
|
151
|
+
ids: prev.ids,
|
|
152
|
+
removed: []
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} else if (!didReorderByReference(prev.itemsRef, nextItems)) {
|
|
157
|
+
return {
|
|
158
|
+
ids: prev.ids,
|
|
159
|
+
removed: []
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const keyOf = (item) => {
|
|
164
|
+
if (!trackBy) return item;
|
|
165
|
+
const k = readTrackBy(item, trackBy);
|
|
166
|
+
return k !== void 0 ? k : item;
|
|
167
|
+
};
|
|
168
|
+
const buckets = /* @__PURE__ */ new Map();
|
|
169
|
+
for (let i = 0; i < prev.itemsRef.length; i++) {
|
|
170
|
+
const key = keyOf(prev.itemsRef[i]);
|
|
171
|
+
const list = buckets.get(key) ?? [];
|
|
172
|
+
list.push(prev.ids[i]);
|
|
173
|
+
buckets.set(key, list);
|
|
174
|
+
}
|
|
175
|
+
const ids = [];
|
|
176
|
+
for (let i = 0; i < nextItems.length; i++) {
|
|
177
|
+
const key = keyOf(nextItems[i]);
|
|
178
|
+
const list = buckets.get(key);
|
|
179
|
+
if (list && list.length > 0) {
|
|
180
|
+
ids.push(list.shift());
|
|
181
|
+
} else {
|
|
182
|
+
ids.push(nextRowId());
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const removed = [];
|
|
186
|
+
for (const list of buckets.values()) {
|
|
187
|
+
removed.push(...list);
|
|
188
|
+
}
|
|
189
|
+
return { ids, removed };
|
|
190
|
+
};
|
|
191
|
+
var buildIndexById = (ids) => {
|
|
192
|
+
const map = /* @__PURE__ */ new Map();
|
|
193
|
+
for (let i = 0; i < ids.length; i++) {
|
|
194
|
+
map.set(ids[i], i);
|
|
195
|
+
}
|
|
196
|
+
return map;
|
|
197
|
+
};
|
|
198
|
+
var RowIdStore = class {
|
|
199
|
+
constructor(instanceId) {
|
|
200
|
+
this.instanceId = instanceId;
|
|
201
|
+
this.lists = /* @__PURE__ */ new Map();
|
|
202
|
+
this.removalListeners = /* @__PURE__ */ new Map();
|
|
203
|
+
this.rowIdIndex = /* @__PURE__ */ new Map();
|
|
204
|
+
this.nextRowSeq = 0;
|
|
205
|
+
this.listKey = (listPath, parentRowId) => parentRowId ? `${listPath}@@${parentRowId}` : listPath;
|
|
206
|
+
this.makeRowId = () => {
|
|
207
|
+
this.nextRowSeq += 1;
|
|
208
|
+
return this.instanceId ? `${this.instanceId}::r${this.nextRowSeq}` : `r${this.nextRowSeq}`;
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
notifyRemoved(listPath, rowId) {
|
|
212
|
+
const listeners = this.removalListeners.get(listPath);
|
|
213
|
+
if (!listeners || listeners.size === 0) return;
|
|
214
|
+
for (const fn of listeners) {
|
|
215
|
+
try {
|
|
216
|
+
fn(rowId);
|
|
217
|
+
} catch {
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
removeDescendants(parentRowId) {
|
|
222
|
+
const keys = [];
|
|
223
|
+
for (const [k, st] of this.lists.entries()) {
|
|
224
|
+
if (st.parentRowId === parentRowId) keys.push(k);
|
|
225
|
+
}
|
|
226
|
+
for (const key of keys) {
|
|
227
|
+
const st = this.lists.get(key);
|
|
228
|
+
if (!st) continue;
|
|
229
|
+
this.lists.delete(key);
|
|
230
|
+
for (let i = 0; i < st.ids.length; i++) {
|
|
231
|
+
const rowId = st.ids[i];
|
|
232
|
+
this.rowIdIndex.delete(rowId);
|
|
233
|
+
this.notifyRemoved(st.listPath, rowId);
|
|
234
|
+
this.removeDescendants(rowId);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
onRemoved(listPath, listener) {
|
|
239
|
+
const set = this.removalListeners.get(listPath) ?? /* @__PURE__ */ new Set();
|
|
240
|
+
set.add(listener);
|
|
241
|
+
this.removalListeners.set(listPath, set);
|
|
242
|
+
return () => {
|
|
243
|
+
const current = this.removalListeners.get(listPath);
|
|
244
|
+
if (!current) return;
|
|
245
|
+
current.delete(listener);
|
|
246
|
+
if (current.size === 0) this.removalListeners.delete(listPath);
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
getRowId(listPath, index, parentRowId) {
|
|
250
|
+
const state = this.lists.get(this.listKey(listPath, parentRowId));
|
|
251
|
+
return state ? state.ids[index] : void 0;
|
|
252
|
+
}
|
|
253
|
+
getIndex(listPath, rowId) {
|
|
254
|
+
const info = this.rowIdIndex.get(rowId);
|
|
255
|
+
if (!info) return void 0;
|
|
256
|
+
if (info.listPath !== listPath) return void 0;
|
|
257
|
+
return info.index;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* ensureList:
|
|
261
|
+
* - Align RowID mapping for the given listPath with the current items.
|
|
262
|
+
* - Returns the latest ids (index -> RowId).
|
|
263
|
+
*/
|
|
264
|
+
ensureList(listPath, items, trackBy, parentRowId) {
|
|
265
|
+
const key = this.listKey(listPath, parentRowId);
|
|
266
|
+
const prev = this.lists.get(key);
|
|
267
|
+
const { ids, removed } = reconcileIds(prev, items, trackBy ?? prev?.trackBy, this.makeRowId);
|
|
268
|
+
const next = {
|
|
269
|
+
listPath,
|
|
270
|
+
parentRowId,
|
|
271
|
+
itemsRef: items,
|
|
272
|
+
ids,
|
|
273
|
+
indexById: buildIndexById(ids),
|
|
274
|
+
trackBy: trackBy ?? prev?.trackBy
|
|
275
|
+
};
|
|
276
|
+
this.lists.set(key, next);
|
|
277
|
+
if (removed.length > 0) {
|
|
278
|
+
for (const rowId of removed) {
|
|
279
|
+
this.rowIdIndex.delete(rowId);
|
|
280
|
+
this.notifyRemoved(listPath, rowId);
|
|
281
|
+
this.removeDescendants(rowId);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
for (let i = 0; i < ids.length; i++) {
|
|
285
|
+
const rowId = ids[i];
|
|
286
|
+
this.rowIdIndex.set(rowId, { key, listPath, index: i });
|
|
287
|
+
}
|
|
288
|
+
return ids;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* updateAll:
|
|
292
|
+
* - After each commit, align RowID mappings for all known lists.
|
|
293
|
+
* - configs come from list declarations in StateTraitProgram.spec (may include trackBy).
|
|
294
|
+
*/
|
|
295
|
+
updateAll(state, configs) {
|
|
296
|
+
const cfgByPath = /* @__PURE__ */ new Map();
|
|
297
|
+
const paths = [];
|
|
298
|
+
for (const cfg of configs) {
|
|
299
|
+
if (!cfg || typeof cfg.path !== "string") continue;
|
|
300
|
+
const p = cfg.path.trim();
|
|
301
|
+
if (!p) continue;
|
|
302
|
+
cfgByPath.set(p, cfg);
|
|
303
|
+
paths.push(p);
|
|
304
|
+
}
|
|
305
|
+
const pathSet = new Set(paths);
|
|
306
|
+
const parentOf = (path) => {
|
|
307
|
+
const segments = path.split(".").filter(Boolean);
|
|
308
|
+
let best;
|
|
309
|
+
for (let i = 1; i < segments.length; i++) {
|
|
310
|
+
const prefix = segments.slice(0, i).join(".");
|
|
311
|
+
if (pathSet.has(prefix)) best = prefix;
|
|
312
|
+
}
|
|
313
|
+
return best;
|
|
314
|
+
};
|
|
315
|
+
const parentByPath = /* @__PURE__ */ new Map();
|
|
316
|
+
const suffixByPath = /* @__PURE__ */ new Map();
|
|
317
|
+
const childrenByParent = /* @__PURE__ */ new Map();
|
|
318
|
+
for (const path of paths) {
|
|
319
|
+
const parent = parentOf(path);
|
|
320
|
+
parentByPath.set(path, parent);
|
|
321
|
+
const suffix = parent ? path.slice(parent.length + 1) : path;
|
|
322
|
+
suffixByPath.set(path, suffix);
|
|
323
|
+
const list = childrenByParent.get(parent) ?? [];
|
|
324
|
+
list.push(path);
|
|
325
|
+
childrenByParent.set(parent, list);
|
|
326
|
+
}
|
|
327
|
+
const roots = (childrenByParent.get(void 0) ?? []).slice().sort((a, b) => a.localeCompare(b));
|
|
328
|
+
const visit = (listPath, parentRowId, listValue) => {
|
|
329
|
+
const cfg = cfgByPath.get(listPath);
|
|
330
|
+
const items = Array.isArray(listValue) ? listValue : [];
|
|
331
|
+
const ids = this.ensureList(listPath, items, cfg?.trackBy, parentRowId);
|
|
332
|
+
const children = (childrenByParent.get(listPath) ?? []).slice().sort((a, b) => a.localeCompare(b));
|
|
333
|
+
if (children.length === 0) return;
|
|
334
|
+
for (let i = 0; i < items.length; i++) {
|
|
335
|
+
const row = items[i];
|
|
336
|
+
const rowId = ids[i];
|
|
337
|
+
if (!rowId) continue;
|
|
338
|
+
for (const childPath of children) {
|
|
339
|
+
const suffix = suffixByPath.get(childPath) ?? "";
|
|
340
|
+
const childValue = suffix ? getAtPath(row, suffix) : void 0;
|
|
341
|
+
visit(childPath, rowId, childValue);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
for (const root of roots) {
|
|
346
|
+
const value = getAtPath(state, root);
|
|
347
|
+
visit(root, void 0, value);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
var collectListConfigs = (spec) => {
|
|
352
|
+
const configs = [];
|
|
353
|
+
for (const key in spec) {
|
|
354
|
+
if (!Object.prototype.hasOwnProperty.call(spec, key)) continue;
|
|
355
|
+
const raw = spec[key];
|
|
356
|
+
if (!raw || typeof raw !== "object") continue;
|
|
357
|
+
const tag = raw._tag;
|
|
358
|
+
if (tag !== "StateTraitList") continue;
|
|
359
|
+
const trackBy = raw.identityHint?.trackBy;
|
|
360
|
+
configs.push({
|
|
361
|
+
path: key,
|
|
362
|
+
trackBy: typeof trackBy === "string" ? trackBy : void 0
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
return configs;
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
// src/internal/runtime/core/ReplayLog.ts
|
|
369
|
+
var ReplayLog_exports = {};
|
|
370
|
+
__export(ReplayLog_exports, {
|
|
371
|
+
ReplayLog: () => ReplayLog,
|
|
372
|
+
consumeNextResourceSnapshot: () => consumeNextResourceSnapshot,
|
|
373
|
+
layer: () => layer,
|
|
374
|
+
make: () => make,
|
|
375
|
+
record: () => record,
|
|
376
|
+
resetCursor: () => resetCursor,
|
|
377
|
+
snapshot: () => snapshot
|
|
378
|
+
});
|
|
379
|
+
import { Context, Effect, Layer } from "effect";
|
|
380
|
+
var ReplayLog = class extends Context.Tag("@logixjs/core/ReplayLog")() {
|
|
381
|
+
};
|
|
382
|
+
var make = (initial) => {
|
|
383
|
+
const events = initial ? Array.from(initial) : [];
|
|
384
|
+
let cursor = 0;
|
|
385
|
+
const consumeNext = (predicate) => Effect.sync(() => {
|
|
386
|
+
for (let i = cursor; i < events.length; i++) {
|
|
387
|
+
const event = events[i];
|
|
388
|
+
if (!predicate(event)) continue;
|
|
389
|
+
cursor = i + 1;
|
|
390
|
+
return event;
|
|
391
|
+
}
|
|
392
|
+
return void 0;
|
|
393
|
+
});
|
|
394
|
+
const consumeNextResourceSnapshot2 = (params) => consumeNext((event) => {
|
|
395
|
+
if (event._tag !== "ResourceSnapshot") return false;
|
|
396
|
+
if (event.resourceId !== params.resourceId) return false;
|
|
397
|
+
if (event.fieldPath !== params.fieldPath) return false;
|
|
398
|
+
if (params.keyHash !== void 0 && event.keyHash !== params.keyHash) {
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
if (params.phase !== void 0 && event.phase !== params.phase) {
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
return true;
|
|
405
|
+
}).pipe(Effect.map((event) => event));
|
|
406
|
+
return {
|
|
407
|
+
record: (event) => Effect.sync(() => events.push(event)),
|
|
408
|
+
snapshot: Effect.sync(() => events.slice()),
|
|
409
|
+
resetCursor: Effect.sync(() => {
|
|
410
|
+
cursor = 0;
|
|
411
|
+
}),
|
|
412
|
+
consumeNext,
|
|
413
|
+
consumeNextResourceSnapshot: consumeNextResourceSnapshot2
|
|
414
|
+
};
|
|
415
|
+
};
|
|
416
|
+
var layer = (initial) => Layer.succeed(ReplayLog, make(initial));
|
|
417
|
+
var record = (event) => Effect.gen(function* () {
|
|
418
|
+
const log = yield* ReplayLog;
|
|
419
|
+
yield* log.record(event);
|
|
420
|
+
});
|
|
421
|
+
var snapshot = Effect.gen(function* () {
|
|
422
|
+
const log = yield* ReplayLog;
|
|
423
|
+
return yield* log.snapshot;
|
|
424
|
+
});
|
|
425
|
+
var resetCursor = Effect.gen(function* () {
|
|
426
|
+
const log = yield* ReplayLog;
|
|
427
|
+
yield* log.resetCursor;
|
|
428
|
+
});
|
|
429
|
+
var consumeNextResourceSnapshot = (params) => Effect.gen(function* () {
|
|
430
|
+
const log = yield* ReplayLog;
|
|
431
|
+
return yield* log.consumeNextResourceSnapshot(params);
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
export {
|
|
435
|
+
ReplayLog,
|
|
436
|
+
ReplayLog_exports,
|
|
437
|
+
getAtPath,
|
|
438
|
+
setAtPathMutating,
|
|
439
|
+
unsetAtPathMutating,
|
|
440
|
+
parseListItemFieldPath,
|
|
441
|
+
toListItemValuePath,
|
|
442
|
+
RowIdStore,
|
|
443
|
+
collectListConfigs
|
|
444
|
+
};
|
|
445
|
+
//# sourceMappingURL=chunk-BABLDP24.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/state-trait/rowid.ts","../src/internal/runtime/core/ReplayLog.ts"],"sourcesContent":["export type RowId = string\n\nexport interface ListConfig {\n readonly path: string\n readonly trackBy?: string\n}\n\nexport type ListRemovalListener = (rowId: RowId) => void\n\ntype Segment = string | number\n\nconst parseSegments = (path: string): ReadonlyArray<Segment> => {\n if (!path) return []\n return path.split('.').map((seg) => (/^[0-9]+$/.test(seg) ? Number(seg) : seg))\n}\n\nexport const getAtPath = (state: any, path: string): any => {\n if (!path || state == null) return state\n const segments = parseSegments(path)\n let current: any = state\n for (const seg of segments) {\n if (current == null) return undefined\n if (typeof seg === 'number') {\n current = Array.isArray(current) ? current[seg] : current[String(seg)]\n continue\n }\n current = current[seg]\n }\n return current\n}\n\nexport const setAtPathMutating = (draft: unknown, path: string, value: unknown): void => {\n if (!path) return\n const segments = parseSegments(path)\n if (segments.length === 0) return\n\n let current: any = draft\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i]!\n const nextKey = segments[i + 1]!\n\n const next = current?.[key as any]\n if (next == null || typeof next !== 'object') {\n current[key as any] = typeof nextKey === 'number' ? [] : {}\n }\n current = current[key as any]\n }\n\n const last = segments[segments.length - 1]!\n current[last as any] = value\n}\n\nexport const unsetAtPathMutating = (draft: unknown, path: string): void => {\n if (!path) return\n const segments = parseSegments(path)\n if (segments.length === 0) return\n\n let current: any = draft\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i]!\n const next = current?.[key as any]\n if (next == null || typeof next !== 'object') {\n return\n }\n current = next\n }\n\n const last = segments[segments.length - 1]!\n if (Array.isArray(current) && typeof last === 'number') {\n current[last] = undefined\n return\n }\n\n if (current && typeof current === 'object') {\n delete current[last as any]\n }\n}\n\nexport const joinPath = (prefix: string, suffix: string): string => {\n if (!prefix) return suffix\n if (!suffix) return prefix\n return `${prefix}.${suffix}`\n}\n\nexport interface ListItemFieldPath {\n readonly listPath: string\n readonly itemPath: string\n}\n\n/**\n * parseListItemFieldPath:\n * - Recognize a list.item field path like \"items[].profileResource\".\n * - Supports nested arrays: returns listPath/itemPath for the innermost list.\n */\nexport const parseListItemFieldPath = (fieldPath: string): ListItemFieldPath | undefined => {\n const raw = typeof fieldPath === 'string' ? fieldPath.trim() : ''\n if (!raw) return undefined\n\n const segments = raw.split('.').filter(Boolean)\n let lastListSeg = -1\n for (let i = 0; i < segments.length; i++) {\n if (segments[i]!.endsWith('[]')) lastListSeg = i\n }\n if (lastListSeg < 0) return undefined\n\n const strip = (seg: string): string => (seg.endsWith('[]') ? seg.slice(0, -2) : seg)\n\n const listPath = segments\n .slice(0, lastListSeg + 1)\n .map(strip)\n .join('.')\n\n const itemPath = segments\n .slice(lastListSeg + 1)\n .map(strip)\n .join('.')\n\n return { listPath, itemPath }\n}\n\nexport const toListItemValuePath = (listPath: string, index: number, itemPath: string): string =>\n itemPath ? `${listPath}.${index}.${itemPath}` : `${listPath}.${index}`\n\ntype ListState = {\n readonly listPath: string\n readonly parentRowId?: RowId\n readonly itemsRef: ReadonlyArray<unknown>\n readonly ids: ReadonlyArray<RowId>\n readonly indexById: ReadonlyMap<RowId, number>\n readonly trackBy?: string\n}\n\nconst readTrackBy = (item: unknown, trackBy: string): unknown => {\n if (!item || typeof item !== 'object') return undefined\n const segments = trackBy.split('.')\n let current: any = item\n for (const seg of segments) {\n if (current == null) return undefined\n current = current[seg as any]\n }\n return current\n}\n\nconst didReorderByReference = (prevItems: ReadonlyArray<unknown>, nextItems: ReadonlyArray<unknown>): boolean => {\n const buckets = new Map<unknown, Array<number>>()\n for (let i = 0; i < prevItems.length; i++) {\n const item = prevItems[i]\n const list = buckets.get(item) ?? []\n list.push(i)\n buckets.set(item, list)\n }\n\n for (let nextIndex = 0; nextIndex < nextItems.length; nextIndex++) {\n const item = nextItems[nextIndex]\n const q = buckets.get(item)\n if (!q || q.length === 0) continue\n const prevIndex = q.shift()!\n if (prevIndex !== nextIndex) {\n return true\n }\n }\n\n return false\n}\n\nconst hasStableTrackByKeys = (items: ReadonlyArray<unknown>, trackBy: string): boolean =>\n items.every((item) => readTrackBy(item, trackBy) !== undefined)\n\nconst isSameTrackBySequence = (\n prevItems: ReadonlyArray<unknown>,\n nextItems: ReadonlyArray<unknown>,\n trackBy: string,\n): boolean => {\n if (prevItems.length !== nextItems.length) return false\n for (let i = 0; i < prevItems.length; i++) {\n if (!Object.is(readTrackBy(prevItems[i], trackBy), readTrackBy(nextItems[i], trackBy))) {\n return false\n }\n }\n return true\n}\n\nconst reconcileIds = (\n prev: ListState | undefined,\n nextItems: ReadonlyArray<unknown>,\n trackBy?: string,\n makeRowId?: () => RowId,\n): { readonly ids: ReadonlyArray<RowId>; readonly removed: ReadonlyArray<RowId> } => {\n const nextRowId =\n makeRowId ??\n (() => {\n let rowSeq = 0\n return () => {\n rowSeq += 1\n return `r${rowSeq}`\n }\n })()\n\n if (!prev) {\n return {\n ids: nextItems.map(() => nextRowId()),\n removed: [],\n }\n }\n\n if (prev.itemsRef === nextItems) {\n return {\n ids: prev.ids,\n removed: [],\n }\n }\n\n // Important: keep RowId stable under \"non-structural changes\" (field updates / object clones only),\n // otherwise in-flight state and caches would be invalidated needlessly.\n const sameLength = prev.itemsRef.length === nextItems.length\n if (sameLength) {\n // trackBy case: if the key sequence is identical, we can reuse old ids;\n // otherwise we must reconcile by key (avoid misclassifying clone+reorder as \"no reorder\").\n if (trackBy) {\n const canUseKeys = hasStableTrackByKeys(prev.itemsRef, trackBy) && hasStableTrackByKeys(nextItems, trackBy)\n if (canUseKeys) {\n if (isSameTrackBySequence(prev.itemsRef, nextItems, trackBy)) {\n return {\n ids: prev.ids,\n removed: [],\n }\n }\n } else {\n // If trackBy keys are not available, fall back to reference-level detection (keep stability for \"cloned but not reordered\").\n if (!didReorderByReference(prev.itemsRef, nextItems)) {\n return {\n ids: prev.ids,\n removed: [],\n }\n }\n }\n } else if (!didReorderByReference(prev.itemsRef, nextItems)) {\n return {\n ids: prev.ids,\n removed: [],\n }\n }\n }\n\n const keyOf = (item: unknown): unknown => {\n if (!trackBy) return item\n const k = readTrackBy(item, trackBy)\n return k !== undefined ? k : item\n }\n\n const buckets = new Map<unknown, Array<RowId>>()\n for (let i = 0; i < prev.itemsRef.length; i++) {\n const key = keyOf(prev.itemsRef[i])\n const list = buckets.get(key) ?? []\n list.push(prev.ids[i]!)\n buckets.set(key, list)\n }\n\n const ids: Array<RowId> = []\n for (let i = 0; i < nextItems.length; i++) {\n const key = keyOf(nextItems[i])\n const list = buckets.get(key)\n if (list && list.length > 0) {\n ids.push(list.shift()!)\n } else {\n ids.push(nextRowId())\n }\n }\n\n const removed: Array<RowId> = []\n for (const list of buckets.values()) {\n removed.push(...list)\n }\n\n return { ids, removed }\n}\n\nconst buildIndexById = (ids: ReadonlyArray<RowId>): ReadonlyMap<RowId, number> => {\n const map = new Map<RowId, number>()\n for (let i = 0; i < ids.length; i++) {\n map.set(ids[i]!, i)\n }\n return map\n}\n\nexport class RowIdStore {\n private readonly lists = new Map<string, ListState>()\n private readonly removalListeners = new Map<string, Set<ListRemovalListener>>()\n private readonly rowIdIndex = new Map<\n RowId,\n { readonly key: string; readonly listPath: string; readonly index: number }\n >()\n private nextRowSeq = 0\n\n constructor(private readonly instanceId?: string) {}\n\n private listKey = (listPath: string, parentRowId?: RowId): string =>\n parentRowId ? `${listPath}@@${parentRowId}` : listPath\n\n private makeRowId = (): RowId => {\n this.nextRowSeq += 1\n return this.instanceId ? `${this.instanceId}::r${this.nextRowSeq}` : `r${this.nextRowSeq}`\n }\n\n private notifyRemoved(listPath: string, rowId: RowId): void {\n const listeners = this.removalListeners.get(listPath)\n if (!listeners || listeners.size === 0) return\n for (const fn of listeners) {\n try {\n fn(rowId)\n } catch {\n // listener failures should never break runtime behavior\n }\n }\n }\n\n private removeDescendants(parentRowId: RowId): void {\n const keys: Array<string> = []\n for (const [k, st] of this.lists.entries()) {\n if (st.parentRowId === parentRowId) keys.push(k)\n }\n\n for (const key of keys) {\n const st = this.lists.get(key)\n if (!st) continue\n this.lists.delete(key)\n for (let i = 0; i < st.ids.length; i++) {\n const rowId = st.ids[i]!\n this.rowIdIndex.delete(rowId)\n this.notifyRemoved(st.listPath, rowId)\n this.removeDescendants(rowId)\n }\n }\n }\n\n onRemoved(listPath: string, listener: ListRemovalListener): () => void {\n const set = this.removalListeners.get(listPath) ?? new Set<ListRemovalListener>()\n set.add(listener)\n this.removalListeners.set(listPath, set)\n return () => {\n const current = this.removalListeners.get(listPath)\n if (!current) return\n current.delete(listener)\n if (current.size === 0) this.removalListeners.delete(listPath)\n }\n }\n\n getRowId(listPath: string, index: number, parentRowId?: RowId): RowId | undefined {\n const state = this.lists.get(this.listKey(listPath, parentRowId))\n return state ? state.ids[index] : undefined\n }\n\n getIndex(listPath: string, rowId: RowId): number | undefined {\n const info = this.rowIdIndex.get(rowId)\n if (!info) return undefined\n if (info.listPath !== listPath) return undefined\n return info.index\n }\n\n /**\n * ensureList:\n * - Align RowID mapping for the given listPath with the current items.\n * - Returns the latest ids (index -> RowId).\n */\n ensureList(\n listPath: string,\n items: ReadonlyArray<unknown>,\n trackBy?: string,\n parentRowId?: RowId,\n ): ReadonlyArray<RowId> {\n const key = this.listKey(listPath, parentRowId)\n const prev = this.lists.get(key)\n const { ids, removed } = reconcileIds(prev, items, trackBy ?? prev?.trackBy, this.makeRowId)\n\n const next: ListState = {\n listPath,\n parentRowId,\n itemsRef: items,\n ids,\n indexById: buildIndexById(ids),\n trackBy: trackBy ?? prev?.trackBy,\n }\n this.lists.set(key, next)\n\n if (removed.length > 0) {\n for (const rowId of removed) {\n this.rowIdIndex.delete(rowId)\n this.notifyRemoved(listPath, rowId)\n this.removeDescendants(rowId)\n }\n }\n\n // Refresh the reverse rowId -> index mapping (index changes are allowed).\n for (let i = 0; i < ids.length; i++) {\n const rowId = ids[i]!\n this.rowIdIndex.set(rowId, { key, listPath, index: i })\n }\n\n return ids\n }\n\n /**\n * updateAll:\n * - After each commit, align RowID mappings for all known lists.\n * - configs come from list declarations in StateTraitProgram.spec (may include trackBy).\n */\n updateAll(state: unknown, configs: ReadonlyArray<ListConfig>): void {\n const cfgByPath = new Map<string, ListConfig>()\n const paths: Array<string> = []\n for (const cfg of configs) {\n if (!cfg || typeof cfg.path !== 'string') continue\n const p = cfg.path.trim()\n if (!p) continue\n cfgByPath.set(p, cfg)\n paths.push(p)\n }\n\n const pathSet = new Set(paths)\n\n const parentOf = (path: string): string | undefined => {\n const segments = path.split('.').filter(Boolean)\n let best: string | undefined\n for (let i = 1; i < segments.length; i++) {\n const prefix = segments.slice(0, i).join('.')\n if (pathSet.has(prefix)) best = prefix\n }\n return best\n }\n\n const parentByPath = new Map<string, string | undefined>()\n const suffixByPath = new Map<string, string>()\n const childrenByParent = new Map<string | undefined, Array<string>>()\n\n for (const path of paths) {\n const parent = parentOf(path)\n parentByPath.set(path, parent)\n const suffix = parent ? path.slice(parent.length + 1) : path\n suffixByPath.set(path, suffix)\n const list = childrenByParent.get(parent) ?? []\n list.push(path)\n childrenByParent.set(parent, list)\n }\n\n // roots first (and deterministic traversal)\n const roots = (childrenByParent.get(undefined) ?? []).slice().sort((a, b) => a.localeCompare(b))\n\n const visit = (listPath: string, parentRowId: RowId | undefined, listValue: unknown): void => {\n const cfg = cfgByPath.get(listPath)\n const items = Array.isArray(listValue) ? (listValue as ReadonlyArray<unknown>) : []\n const ids = this.ensureList(listPath, items, cfg?.trackBy, parentRowId)\n\n const children = (childrenByParent.get(listPath) ?? []).slice().sort((a, b) => a.localeCompare(b))\n if (children.length === 0) return\n\n for (let i = 0; i < items.length; i++) {\n const row = items[i]\n const rowId = ids[i]\n if (!rowId) continue\n for (const childPath of children) {\n const suffix = suffixByPath.get(childPath) ?? ''\n const childValue = suffix ? getAtPath(row as any, suffix) : undefined\n visit(childPath, rowId, childValue)\n }\n }\n }\n\n for (const root of roots) {\n const value = getAtPath(state as any, root)\n visit(root, undefined, value)\n }\n }\n}\n\nexport const collectListConfigs = (spec: Record<string, unknown>): ReadonlyArray<ListConfig> => {\n const configs: Array<ListConfig> = []\n for (const key in spec) {\n if (!Object.prototype.hasOwnProperty.call(spec, key)) continue\n const raw = spec[key]\n if (!raw || typeof raw !== 'object') continue\n const tag = (raw as any)._tag\n if (tag !== 'StateTraitList') continue\n const trackBy = (raw as any).identityHint?.trackBy\n configs.push({\n path: key,\n trackBy: typeof trackBy === 'string' ? trackBy : undefined,\n })\n }\n return configs\n}\n","import { Context, Effect, Layer } from 'effect'\n\nexport type ResourceSnapshotPhase = 'idle' | 'loading' | 'success' | 'error'\n\nexport type ReplayLogEvent =\n | {\n readonly _tag: 'ResourceSnapshot'\n readonly resourceId: string\n readonly fieldPath: string\n readonly keyHash?: string\n /**\n * Optional: source concurrency policy (e.g. \"switch\" / \"exhaust-trailing\").\n * - Must remain slim & serializable.\n * - Used by Devtools/replay to explain why old results are dropped / why trailing happens.\n */\n readonly concurrency?: string\n readonly phase: ResourceSnapshotPhase\n readonly snapshot: unknown\n readonly timestamp: number\n readonly moduleId?: string\n readonly instanceId?: string\n }\n | {\n readonly _tag: 'InvalidateRequest'\n readonly timestamp: number\n readonly moduleId?: string\n readonly instanceId?: string\n readonly kind: 'resource' | 'query'\n readonly target: string\n readonly meta?: unknown\n }\n\nexport type ResourceSnapshotEvent = Extract<ReplayLogEvent, { readonly _tag: 'ResourceSnapshot' }>\n\nexport interface ReplayLogService {\n readonly record: (event: ReplayLogEvent) => Effect.Effect<void>\n readonly snapshot: Effect.Effect<ReadonlyArray<ReplayLogEvent>>\n readonly resetCursor: Effect.Effect<void>\n readonly consumeNext: (predicate: (event: ReplayLogEvent) => boolean) => Effect.Effect<ReplayLogEvent | undefined>\n readonly consumeNextResourceSnapshot: (params: {\n readonly resourceId: string\n readonly fieldPath: string\n readonly keyHash?: string\n readonly phase?: ResourceSnapshotPhase\n }) => Effect.Effect<ResourceSnapshotEvent | undefined>\n}\n\nexport class ReplayLog extends Context.Tag('@logixjs/core/ReplayLog')<ReplayLog, ReplayLogService>() {}\n\nexport const make = (initial?: ReadonlyArray<ReplayLogEvent>): ReplayLogService => {\n const events: Array<ReplayLogEvent> = initial ? Array.from(initial) : []\n let cursor = 0\n\n const consumeNext = (predicate: (event: ReplayLogEvent) => boolean): Effect.Effect<ReplayLogEvent | undefined> =>\n Effect.sync(() => {\n for (let i = cursor; i < events.length; i++) {\n const event = events[i]\n if (!predicate(event)) continue\n cursor = i + 1\n return event\n }\n return undefined\n })\n\n const consumeNextResourceSnapshot = (params: {\n readonly resourceId: string\n readonly fieldPath: string\n readonly keyHash?: string\n readonly phase?: ResourceSnapshotPhase\n }): Effect.Effect<ResourceSnapshotEvent | undefined> =>\n consumeNext((event): event is ResourceSnapshotEvent => {\n if (event._tag !== 'ResourceSnapshot') return false\n if (event.resourceId !== params.resourceId) return false\n if (event.fieldPath !== params.fieldPath) return false\n if (params.keyHash !== undefined && event.keyHash !== params.keyHash) {\n return false\n }\n if (params.phase !== undefined && event.phase !== params.phase) {\n return false\n }\n return true\n }).pipe(Effect.map((event) => event as ResourceSnapshotEvent | undefined))\n\n return {\n record: (event) => Effect.sync(() => events.push(event)),\n snapshot: Effect.sync(() => events.slice()),\n resetCursor: Effect.sync(() => {\n cursor = 0\n }),\n consumeNext,\n consumeNextResourceSnapshot,\n }\n}\n\nexport const layer = (initial?: ReadonlyArray<ReplayLogEvent>): Layer.Layer<ReplayLog, never, never> =>\n Layer.succeed(ReplayLog, make(initial))\n\nexport const record = (event: ReplayLogEvent): Effect.Effect<void, never, ReplayLog> =>\n Effect.gen(function* () {\n const log = yield* ReplayLog\n yield* log.record(event)\n })\n\nexport const snapshot: Effect.Effect<ReadonlyArray<ReplayLogEvent>, never, ReplayLog> = Effect.gen(function* () {\n const log = yield* ReplayLog\n return yield* log.snapshot\n})\n\nexport const resetCursor: Effect.Effect<void, never, ReplayLog> = Effect.gen(function* () {\n const log = yield* ReplayLog\n yield* log.resetCursor\n})\n\nexport const consumeNextResourceSnapshot = (params: {\n readonly resourceId: string\n readonly fieldPath: string\n readonly keyHash?: string\n readonly phase?: ResourceSnapshotPhase\n}): Effect.Effect<ResourceSnapshotEvent | undefined, never, ReplayLog> =>\n Effect.gen(function* () {\n const log = yield* ReplayLog\n return yield* log.consumeNextResourceSnapshot(params)\n })\n"],"mappings":";;;;;AAWA,IAAM,gBAAgB,CAAC,SAAyC;AAC9D,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,SAAO,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,QAAS,WAAW,KAAK,GAAG,IAAI,OAAO,GAAG,IAAI,GAAI;AAChF;AAEO,IAAM,YAAY,CAAC,OAAY,SAAsB;AAC1D,MAAI,CAAC,QAAQ,SAAS,KAAM,QAAO;AACnC,QAAM,WAAW,cAAc,IAAI;AACnC,MAAI,UAAe;AACnB,aAAW,OAAO,UAAU;AAC1B,QAAI,WAAW,KAAM,QAAO;AAC5B,QAAI,OAAO,QAAQ,UAAU;AAC3B,gBAAU,MAAM,QAAQ,OAAO,IAAI,QAAQ,GAAG,IAAI,QAAQ,OAAO,GAAG,CAAC;AACrE;AAAA,IACF;AACA,cAAU,QAAQ,GAAG;AAAA,EACvB;AACA,SAAO;AACT;AAEO,IAAM,oBAAoB,CAAC,OAAgB,MAAc,UAAyB;AACvF,MAAI,CAAC,KAAM;AACX,QAAM,WAAW,cAAc,IAAI;AACnC,MAAI,SAAS,WAAW,EAAG;AAE3B,MAAI,UAAe;AACnB,WAAS,IAAI,GAAG,IAAI,SAAS,SAAS,GAAG,KAAK;AAC5C,UAAM,MAAM,SAAS,CAAC;AACtB,UAAM,UAAU,SAAS,IAAI,CAAC;AAE9B,UAAM,OAAO,UAAU,GAAU;AACjC,QAAI,QAAQ,QAAQ,OAAO,SAAS,UAAU;AAC5C,cAAQ,GAAU,IAAI,OAAO,YAAY,WAAW,CAAC,IAAI,CAAC;AAAA,IAC5D;AACA,cAAU,QAAQ,GAAU;AAAA,EAC9B;AAEA,QAAM,OAAO,SAAS,SAAS,SAAS,CAAC;AACzC,UAAQ,IAAW,IAAI;AACzB;AAEO,IAAM,sBAAsB,CAAC,OAAgB,SAAuB;AACzE,MAAI,CAAC,KAAM;AACX,QAAM,WAAW,cAAc,IAAI;AACnC,MAAI,SAAS,WAAW,EAAG;AAE3B,MAAI,UAAe;AACnB,WAAS,IAAI,GAAG,IAAI,SAAS,SAAS,GAAG,KAAK;AAC5C,UAAM,MAAM,SAAS,CAAC;AACtB,UAAM,OAAO,UAAU,GAAU;AACjC,QAAI,QAAQ,QAAQ,OAAO,SAAS,UAAU;AAC5C;AAAA,IACF;AACA,cAAU;AAAA,EACZ;AAEA,QAAM,OAAO,SAAS,SAAS,SAAS,CAAC;AACzC,MAAI,MAAM,QAAQ,OAAO,KAAK,OAAO,SAAS,UAAU;AACtD,YAAQ,IAAI,IAAI;AAChB;AAAA,EACF;AAEA,MAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,WAAO,QAAQ,IAAW;AAAA,EAC5B;AACF;AAkBO,IAAM,yBAAyB,CAAC,cAAqD;AAC1F,QAAM,MAAM,OAAO,cAAc,WAAW,UAAU,KAAK,IAAI;AAC/D,MAAI,CAAC,IAAK,QAAO;AAEjB,QAAM,WAAW,IAAI,MAAM,GAAG,EAAE,OAAO,OAAO;AAC9C,MAAI,cAAc;AAClB,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,SAAS,CAAC,EAAG,SAAS,IAAI,EAAG,eAAc;AAAA,EACjD;AACA,MAAI,cAAc,EAAG,QAAO;AAE5B,QAAM,QAAQ,CAAC,QAAyB,IAAI,SAAS,IAAI,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI;AAEhF,QAAM,WAAW,SACd,MAAM,GAAG,cAAc,CAAC,EACxB,IAAI,KAAK,EACT,KAAK,GAAG;AAEX,QAAM,WAAW,SACd,MAAM,cAAc,CAAC,EACrB,IAAI,KAAK,EACT,KAAK,GAAG;AAEX,SAAO,EAAE,UAAU,SAAS;AAC9B;AAEO,IAAM,sBAAsB,CAAC,UAAkB,OAAe,aACnE,WAAW,GAAG,QAAQ,IAAI,KAAK,IAAI,QAAQ,KAAK,GAAG,QAAQ,IAAI,KAAK;AAWtE,IAAM,cAAc,CAAC,MAAe,YAA6B;AAC/D,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,QAAM,WAAW,QAAQ,MAAM,GAAG;AAClC,MAAI,UAAe;AACnB,aAAW,OAAO,UAAU;AAC1B,QAAI,WAAW,KAAM,QAAO;AAC5B,cAAU,QAAQ,GAAU;AAAA,EAC9B;AACA,SAAO;AACT;AAEA,IAAM,wBAAwB,CAAC,WAAmC,cAA+C;AAC/G,QAAM,UAAU,oBAAI,IAA4B;AAChD,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,OAAO,UAAU,CAAC;AACxB,UAAM,OAAO,QAAQ,IAAI,IAAI,KAAK,CAAC;AACnC,SAAK,KAAK,CAAC;AACX,YAAQ,IAAI,MAAM,IAAI;AAAA,EACxB;AAEA,WAAS,YAAY,GAAG,YAAY,UAAU,QAAQ,aAAa;AACjE,UAAM,OAAO,UAAU,SAAS;AAChC,UAAM,IAAI,QAAQ,IAAI,IAAI;AAC1B,QAAI,CAAC,KAAK,EAAE,WAAW,EAAG;AAC1B,UAAM,YAAY,EAAE,MAAM;AAC1B,QAAI,cAAc,WAAW;AAC3B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,uBAAuB,CAAC,OAA+B,YAC3D,MAAM,MAAM,CAAC,SAAS,YAAY,MAAM,OAAO,MAAM,MAAS;AAEhE,IAAM,wBAAwB,CAC5B,WACA,WACA,YACY;AACZ,MAAI,UAAU,WAAW,UAAU,OAAQ,QAAO;AAClD,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,QAAI,CAAC,OAAO,GAAG,YAAY,UAAU,CAAC,GAAG,OAAO,GAAG,YAAY,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG;AACtF,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,eAAe,CACnB,MACA,WACA,SACA,cACmF;AACnF,QAAM,YACJ,aACC,uBAAM;AACL,QAAI,SAAS;AACb,WAAO,MAAM;AACX,gBAAU;AACV,aAAO,IAAI,MAAM;AAAA,IACnB;AAAA,EACF,GAAG;AAEL,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,MACL,KAAK,UAAU,IAAI,MAAM,UAAU,CAAC;AAAA,MACpC,SAAS,CAAC;AAAA,IACZ;AAAA,EACF;AAEA,MAAI,KAAK,aAAa,WAAW;AAC/B,WAAO;AAAA,MACL,KAAK,KAAK;AAAA,MACV,SAAS,CAAC;AAAA,IACZ;AAAA,EACF;AAIA,QAAM,aAAa,KAAK,SAAS,WAAW,UAAU;AACtD,MAAI,YAAY;AAGd,QAAI,SAAS;AACX,YAAM,aAAa,qBAAqB,KAAK,UAAU,OAAO,KAAK,qBAAqB,WAAW,OAAO;AAC1G,UAAI,YAAY;AACd,YAAI,sBAAsB,KAAK,UAAU,WAAW,OAAO,GAAG;AAC5D,iBAAO;AAAA,YACL,KAAK,KAAK;AAAA,YACV,SAAS,CAAC;AAAA,UACZ;AAAA,QACF;AAAA,MACF,OAAO;AAEL,YAAI,CAAC,sBAAsB,KAAK,UAAU,SAAS,GAAG;AACpD,iBAAO;AAAA,YACL,KAAK,KAAK;AAAA,YACV,SAAS,CAAC;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AAAA,IACF,WAAW,CAAC,sBAAsB,KAAK,UAAU,SAAS,GAAG;AAC3D,aAAO;AAAA,QACL,KAAK,KAAK;AAAA,QACV,SAAS,CAAC;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,CAAC,SAA2B;AACxC,QAAI,CAAC,QAAS,QAAO;AACrB,UAAM,IAAI,YAAY,MAAM,OAAO;AACnC,WAAO,MAAM,SAAY,IAAI;AAAA,EAC/B;AAEA,QAAM,UAAU,oBAAI,IAA2B;AAC/C,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,UAAM,MAAM,MAAM,KAAK,SAAS,CAAC,CAAC;AAClC,UAAM,OAAO,QAAQ,IAAI,GAAG,KAAK,CAAC;AAClC,SAAK,KAAK,KAAK,IAAI,CAAC,CAAE;AACtB,YAAQ,IAAI,KAAK,IAAI;AAAA,EACvB;AAEA,QAAM,MAAoB,CAAC;AAC3B,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,MAAM,MAAM,UAAU,CAAC,CAAC;AAC9B,UAAM,OAAO,QAAQ,IAAI,GAAG;AAC5B,QAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,UAAI,KAAK,KAAK,MAAM,CAAE;AAAA,IACxB,OAAO;AACL,UAAI,KAAK,UAAU,CAAC;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,UAAwB,CAAC;AAC/B,aAAW,QAAQ,QAAQ,OAAO,GAAG;AACnC,YAAQ,KAAK,GAAG,IAAI;AAAA,EACtB;AAEA,SAAO,EAAE,KAAK,QAAQ;AACxB;AAEA,IAAM,iBAAiB,CAAC,QAA0D;AAChF,QAAM,MAAM,oBAAI,IAAmB;AACnC,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAI,IAAI,IAAI,CAAC,GAAI,CAAC;AAAA,EACpB;AACA,SAAO;AACT;AAEO,IAAM,aAAN,MAAiB;AAAA,EAStB,YAA6B,YAAqB;AAArB;AAR7B,SAAiB,QAAQ,oBAAI,IAAuB;AACpD,SAAiB,mBAAmB,oBAAI,IAAsC;AAC9E,SAAiB,aAAa,oBAAI,IAGhC;AACF,SAAQ,aAAa;AAIrB,SAAQ,UAAU,CAAC,UAAkB,gBACnC,cAAc,GAAG,QAAQ,KAAK,WAAW,KAAK;AAEhD,SAAQ,YAAY,MAAa;AAC/B,WAAK,cAAc;AACnB,aAAO,KAAK,aAAa,GAAG,KAAK,UAAU,MAAM,KAAK,UAAU,KAAK,IAAI,KAAK,UAAU;AAAA,IAC1F;AAAA,EARmD;AAAA,EAU3C,cAAc,UAAkB,OAAoB;AAC1D,UAAM,YAAY,KAAK,iBAAiB,IAAI,QAAQ;AACpD,QAAI,CAAC,aAAa,UAAU,SAAS,EAAG;AACxC,eAAW,MAAM,WAAW;AAC1B,UAAI;AACF,WAAG,KAAK;AAAA,MACV,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,kBAAkB,aAA0B;AAClD,UAAM,OAAsB,CAAC;AAC7B,eAAW,CAAC,GAAG,EAAE,KAAK,KAAK,MAAM,QAAQ,GAAG;AAC1C,UAAI,GAAG,gBAAgB,YAAa,MAAK,KAAK,CAAC;AAAA,IACjD;AAEA,eAAW,OAAO,MAAM;AACtB,YAAM,KAAK,KAAK,MAAM,IAAI,GAAG;AAC7B,UAAI,CAAC,GAAI;AACT,WAAK,MAAM,OAAO,GAAG;AACrB,eAAS,IAAI,GAAG,IAAI,GAAG,IAAI,QAAQ,KAAK;AACtC,cAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,aAAK,WAAW,OAAO,KAAK;AAC5B,aAAK,cAAc,GAAG,UAAU,KAAK;AACrC,aAAK,kBAAkB,KAAK;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU,UAAkB,UAA2C;AACrE,UAAM,MAAM,KAAK,iBAAiB,IAAI,QAAQ,KAAK,oBAAI,IAAyB;AAChF,QAAI,IAAI,QAAQ;AAChB,SAAK,iBAAiB,IAAI,UAAU,GAAG;AACvC,WAAO,MAAM;AACX,YAAM,UAAU,KAAK,iBAAiB,IAAI,QAAQ;AAClD,UAAI,CAAC,QAAS;AACd,cAAQ,OAAO,QAAQ;AACvB,UAAI,QAAQ,SAAS,EAAG,MAAK,iBAAiB,OAAO,QAAQ;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,SAAS,UAAkB,OAAe,aAAwC;AAChF,UAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,QAAQ,UAAU,WAAW,CAAC;AAChE,WAAO,QAAQ,MAAM,IAAI,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,SAAS,UAAkB,OAAkC;AAC3D,UAAM,OAAO,KAAK,WAAW,IAAI,KAAK;AACtC,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI,KAAK,aAAa,SAAU,QAAO;AACvC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WACE,UACA,OACA,SACA,aACsB;AACtB,UAAM,MAAM,KAAK,QAAQ,UAAU,WAAW;AAC9C,UAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,UAAM,EAAE,KAAK,QAAQ,IAAI,aAAa,MAAM,OAAO,WAAW,MAAM,SAAS,KAAK,SAAS;AAE3F,UAAM,OAAkB;AAAA,MACtB;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,WAAW,eAAe,GAAG;AAAA,MAC7B,SAAS,WAAW,MAAM;AAAA,IAC5B;AACA,SAAK,MAAM,IAAI,KAAK,IAAI;AAExB,QAAI,QAAQ,SAAS,GAAG;AACtB,iBAAW,SAAS,SAAS;AAC3B,aAAK,WAAW,OAAO,KAAK;AAC5B,aAAK,cAAc,UAAU,KAAK;AAClC,aAAK,kBAAkB,KAAK;AAAA,MAC9B;AAAA,IACF;AAGA,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAM,QAAQ,IAAI,CAAC;AACnB,WAAK,WAAW,IAAI,OAAO,EAAE,KAAK,UAAU,OAAO,EAAE,CAAC;AAAA,IACxD;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,OAAgB,SAA0C;AAClE,UAAM,YAAY,oBAAI,IAAwB;AAC9C,UAAM,QAAuB,CAAC;AAC9B,eAAW,OAAO,SAAS;AACzB,UAAI,CAAC,OAAO,OAAO,IAAI,SAAS,SAAU;AAC1C,YAAM,IAAI,IAAI,KAAK,KAAK;AACxB,UAAI,CAAC,EAAG;AACR,gBAAU,IAAI,GAAG,GAAG;AACpB,YAAM,KAAK,CAAC;AAAA,IACd;AAEA,UAAM,UAAU,IAAI,IAAI,KAAK;AAE7B,UAAM,WAAW,CAAC,SAAqC;AACrD,YAAM,WAAW,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAC/C,UAAI;AACJ,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,cAAM,SAAS,SAAS,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAC5C,YAAI,QAAQ,IAAI,MAAM,EAAG,QAAO;AAAA,MAClC;AACA,aAAO;AAAA,IACT;AAEA,UAAM,eAAe,oBAAI,IAAgC;AACzD,UAAM,eAAe,oBAAI,IAAoB;AAC7C,UAAM,mBAAmB,oBAAI,IAAuC;AAEpE,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAS,SAAS,IAAI;AAC5B,mBAAa,IAAI,MAAM,MAAM;AAC7B,YAAM,SAAS,SAAS,KAAK,MAAM,OAAO,SAAS,CAAC,IAAI;AACxD,mBAAa,IAAI,MAAM,MAAM;AAC7B,YAAM,OAAO,iBAAiB,IAAI,MAAM,KAAK,CAAC;AAC9C,WAAK,KAAK,IAAI;AACd,uBAAiB,IAAI,QAAQ,IAAI;AAAA,IACnC;AAGA,UAAM,SAAS,iBAAiB,IAAI,MAAS,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAE/F,UAAM,QAAQ,CAAC,UAAkB,aAAgC,cAA6B;AAC5F,YAAM,MAAM,UAAU,IAAI,QAAQ;AAClC,YAAM,QAAQ,MAAM,QAAQ,SAAS,IAAK,YAAuC,CAAC;AAClF,YAAM,MAAM,KAAK,WAAW,UAAU,OAAO,KAAK,SAAS,WAAW;AAEtE,YAAM,YAAY,iBAAiB,IAAI,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AACjG,UAAI,SAAS,WAAW,EAAG;AAE3B,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,MAAM,MAAM,CAAC;AACnB,cAAM,QAAQ,IAAI,CAAC;AACnB,YAAI,CAAC,MAAO;AACZ,mBAAW,aAAa,UAAU;AAChC,gBAAM,SAAS,aAAa,IAAI,SAAS,KAAK;AAC9C,gBAAM,aAAa,SAAS,UAAU,KAAY,MAAM,IAAI;AAC5D,gBAAM,WAAW,OAAO,UAAU;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,eAAW,QAAQ,OAAO;AACxB,YAAM,QAAQ,UAAU,OAAc,IAAI;AAC1C,YAAM,MAAM,QAAW,KAAK;AAAA,IAC9B;AAAA,EACF;AACF;AAEO,IAAM,qBAAqB,CAAC,SAA6D;AAC9F,QAAM,UAA6B,CAAC;AACpC,aAAW,OAAO,MAAM;AACtB,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,GAAG,EAAG;AACtD,UAAM,MAAM,KAAK,GAAG;AACpB,QAAI,CAAC,OAAO,OAAO,QAAQ,SAAU;AACrC,UAAM,MAAO,IAAY;AACzB,QAAI,QAAQ,iBAAkB;AAC9B,UAAM,UAAW,IAAY,cAAc;AAC3C,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,SAAS,OAAO,YAAY,WAAW,UAAU;AAAA,IACnD,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;ACxeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,SAAS,QAAQ,aAAa;AA+ChC,IAAM,YAAN,cAAwB,QAAQ,IAAI,yBAAyB,EAA+B,EAAE;AAAC;AAE/F,IAAM,OAAO,CAAC,YAA8D;AACjF,QAAM,SAAgC,UAAU,MAAM,KAAK,OAAO,IAAI,CAAC;AACvE,MAAI,SAAS;AAEb,QAAM,cAAc,CAAC,cACnB,OAAO,KAAK,MAAM;AAChB,aAAS,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK;AAC3C,YAAM,QAAQ,OAAO,CAAC;AACtB,UAAI,CAAC,UAAU,KAAK,EAAG;AACvB,eAAS,IAAI;AACb,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AAEH,QAAMA,+BAA8B,CAAC,WAMnC,YAAY,CAAC,UAA0C;AACrD,QAAI,MAAM,SAAS,mBAAoB,QAAO;AAC9C,QAAI,MAAM,eAAe,OAAO,WAAY,QAAO;AACnD,QAAI,MAAM,cAAc,OAAO,UAAW,QAAO;AACjD,QAAI,OAAO,YAAY,UAAa,MAAM,YAAY,OAAO,SAAS;AACpE,aAAO;AAAA,IACT;AACA,QAAI,OAAO,UAAU,UAAa,MAAM,UAAU,OAAO,OAAO;AAC9D,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,UAAU,KAA0C,CAAC;AAE3E,SAAO;AAAA,IACL,QAAQ,CAAC,UAAU,OAAO,KAAK,MAAM,OAAO,KAAK,KAAK,CAAC;AAAA,IACvD,UAAU,OAAO,KAAK,MAAM,OAAO,MAAM,CAAC;AAAA,IAC1C,aAAa,OAAO,KAAK,MAAM;AAC7B,eAAS;AAAA,IACX,CAAC;AAAA,IACD;AAAA,IACA,6BAAAA;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,CAAC,YACpB,MAAM,QAAQ,WAAW,KAAK,OAAO,CAAC;AAEjC,IAAM,SAAS,CAAC,UACrB,OAAO,IAAI,aAAa;AACtB,QAAM,MAAM,OAAO;AACnB,SAAO,IAAI,OAAO,KAAK;AACzB,CAAC;AAEI,IAAM,WAA2E,OAAO,IAAI,aAAa;AAC9G,QAAM,MAAM,OAAO;AACnB,SAAO,OAAO,IAAI;AACpB,CAAC;AAEM,IAAM,cAAqD,OAAO,IAAI,aAAa;AACxF,QAAM,MAAM,OAAO;AACnB,SAAO,IAAI;AACb,CAAC;AAEM,IAAM,8BAA8B,CAAC,WAM1C,OAAO,IAAI,aAAa;AACtB,QAAM,MAAM,OAAO;AACnB,SAAO,OAAO,IAAI,4BAA4B,MAAM;AACtD,CAAC;","names":["consumeNextResourceSnapshot"]}
|