@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,285 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ReplayLog,
|
|
3
|
+
unsetAtPathMutating
|
|
4
|
+
} from "./chunk-BABLDP24.js";
|
|
5
|
+
import {
|
|
6
|
+
inSyncTransactionFiber
|
|
7
|
+
} from "./chunk-ZFLHVFUC.js";
|
|
8
|
+
import {
|
|
9
|
+
getBoundInternals,
|
|
10
|
+
getModuleTraitsProgram
|
|
11
|
+
} from "./chunk-3RMKLXHX.js";
|
|
12
|
+
import {
|
|
13
|
+
__export
|
|
14
|
+
} from "./chunk-PZ5AY32C.js";
|
|
15
|
+
|
|
16
|
+
// src/TraitLifecycle.ts
|
|
17
|
+
var TraitLifecycle_exports = {};
|
|
18
|
+
__export(TraitLifecycle_exports, {
|
|
19
|
+
Ref: () => Ref2,
|
|
20
|
+
cleanup: () => cleanup2,
|
|
21
|
+
install: () => install2,
|
|
22
|
+
makeSourceWiring: () => makeSourceWiring2,
|
|
23
|
+
scopedExecute: () => scopedExecute2,
|
|
24
|
+
scopedValidate: () => scopedValidate2
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// src/internal/trait-lifecycle/index.ts
|
|
28
|
+
import { Effect, FiberRef, Option } from "effect";
|
|
29
|
+
var Ref = {
|
|
30
|
+
field: (path) => ({ kind: "field", path }),
|
|
31
|
+
list: (path, listIndexPath) => ({
|
|
32
|
+
kind: "list",
|
|
33
|
+
path,
|
|
34
|
+
listIndexPath
|
|
35
|
+
}),
|
|
36
|
+
item: (path, index, options) => ({
|
|
37
|
+
kind: "item",
|
|
38
|
+
path,
|
|
39
|
+
index,
|
|
40
|
+
listIndexPath: options?.listIndexPath,
|
|
41
|
+
field: options?.field
|
|
42
|
+
}),
|
|
43
|
+
/**
|
|
44
|
+
* fromValuePath:
|
|
45
|
+
* - Parse a valuePath (e.g. "items.0.warehouseId") into a FieldRef.
|
|
46
|
+
* - Supports a single index (required) and multi-level indices via listIndexPath (optional but recommended).
|
|
47
|
+
*
|
|
48
|
+
* Conventions:
|
|
49
|
+
* - If numeric segments are present, return an item ref (the last index becomes item.index; preceding indices go into listIndexPath).
|
|
50
|
+
* - If no numeric segments are present:
|
|
51
|
+
* - "items[]" (pattern list root) returns a list ref.
|
|
52
|
+
* - Otherwise return a field ref (including pattern fields like "items[].x").
|
|
53
|
+
* - "$root" / empty string returns the root ref.
|
|
54
|
+
*/
|
|
55
|
+
fromValuePath: (valuePath) => {
|
|
56
|
+
const raw = typeof valuePath === "string" ? valuePath.trim() : "";
|
|
57
|
+
if (!raw || raw === "$root") return Ref.root();
|
|
58
|
+
const segments = raw.split(".").filter(Boolean);
|
|
59
|
+
if (segments.length === 0) return Ref.root();
|
|
60
|
+
const isIndex = (seg) => /^[0-9]+$/.test(seg);
|
|
61
|
+
const stripPattern = (seg) => seg.endsWith("[]") ? seg.slice(0, -2) : seg;
|
|
62
|
+
const indexPositions = [];
|
|
63
|
+
for (let i = 0; i < segments.length; i++) {
|
|
64
|
+
const seg = segments[i];
|
|
65
|
+
if (!isIndex(seg)) continue;
|
|
66
|
+
const index = Number(seg);
|
|
67
|
+
if (!Number.isFinite(index) || index < 0) return Ref.field(raw);
|
|
68
|
+
indexPositions.push({ pos: i, index });
|
|
69
|
+
}
|
|
70
|
+
if (indexPositions.length > 0) {
|
|
71
|
+
const last = indexPositions[indexPositions.length - 1];
|
|
72
|
+
const listIndexPath = indexPositions.slice(0, -1).map((p) => p.index);
|
|
73
|
+
const listPath = segments.slice(0, last.pos).filter((seg) => !isIndex(seg)).map(stripPattern).join(".");
|
|
74
|
+
if (!listPath) return Ref.field(raw);
|
|
75
|
+
const fieldRest = segments.slice(last.pos + 1).map(stripPattern).join(".");
|
|
76
|
+
return Ref.item(listPath, last.index, {
|
|
77
|
+
listIndexPath: listIndexPath.length > 0 ? listIndexPath : void 0,
|
|
78
|
+
field: fieldRest ? fieldRest : void 0
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (segments.some((s) => s.includes("[]"))) {
|
|
82
|
+
const last = segments[segments.length - 1];
|
|
83
|
+
if (last.endsWith("[]")) {
|
|
84
|
+
return Ref.list(segments.map(stripPattern).join("."));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return Ref.field(raw);
|
|
88
|
+
},
|
|
89
|
+
root: () => ({ kind: "root" })
|
|
90
|
+
};
|
|
91
|
+
var scopedValidate = (bound, request) => Effect.gen(function* () {
|
|
92
|
+
let internals;
|
|
93
|
+
try {
|
|
94
|
+
internals = getBoundInternals(bound);
|
|
95
|
+
} catch {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const enqueue = internals.traits.enqueueStateTraitValidateRequest;
|
|
99
|
+
if (!enqueue) return;
|
|
100
|
+
const toTarget = (ref) => {
|
|
101
|
+
if (ref.kind === "root") return { kind: "root" };
|
|
102
|
+
if (ref.kind === "field") return { kind: "field", path: ref.path };
|
|
103
|
+
if (ref.kind === "list") {
|
|
104
|
+
return {
|
|
105
|
+
kind: "list",
|
|
106
|
+
path: ref.path,
|
|
107
|
+
...ref.listIndexPath ? { listIndexPath: ref.listIndexPath } : {}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
kind: "item",
|
|
112
|
+
path: ref.path,
|
|
113
|
+
index: ref.index,
|
|
114
|
+
...ref.listIndexPath ? { listIndexPath: ref.listIndexPath } : {},
|
|
115
|
+
field: ref.field
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
const internal = {
|
|
119
|
+
mode: request.mode,
|
|
120
|
+
target: toTarget(request.target)
|
|
121
|
+
};
|
|
122
|
+
const inTxn = yield* FiberRef.get(inSyncTransactionFiber);
|
|
123
|
+
if (inTxn) {
|
|
124
|
+
enqueue(internal);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
yield* internals.txn.runWithStateTransaction(
|
|
128
|
+
{ kind: "trait", name: "scopedValidate", details: request },
|
|
129
|
+
() => Effect.sync(() => {
|
|
130
|
+
enqueue(internal);
|
|
131
|
+
})
|
|
132
|
+
);
|
|
133
|
+
});
|
|
134
|
+
var scopedExecute = (bound, request) => Effect.gen(function* () {
|
|
135
|
+
if (request.kind === "source:refresh") {
|
|
136
|
+
const toFieldPath = (ref) => {
|
|
137
|
+
if (ref.kind === "root") return void 0;
|
|
138
|
+
if (ref.kind === "field" || ref.kind === "list") return ref.path;
|
|
139
|
+
const base = `${ref.path}[]`;
|
|
140
|
+
return ref.field ? `${base}.${ref.field}` : base;
|
|
141
|
+
};
|
|
142
|
+
const fieldPath = toFieldPath(request.target);
|
|
143
|
+
if (!fieldPath) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
yield* bound.traits.source.refresh(fieldPath);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (request.kind !== "query:invalidate") {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const replayLogOpt = yield* Effect.serviceOption(ReplayLog);
|
|
153
|
+
if (Option.isNone(replayLogOpt)) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
let moduleId;
|
|
157
|
+
let instanceId;
|
|
158
|
+
try {
|
|
159
|
+
const internals = getBoundInternals(bound);
|
|
160
|
+
moduleId = internals.moduleId;
|
|
161
|
+
instanceId = internals.instanceId;
|
|
162
|
+
} catch {
|
|
163
|
+
moduleId = void 0;
|
|
164
|
+
instanceId = void 0;
|
|
165
|
+
}
|
|
166
|
+
yield* replayLogOpt.value.record({
|
|
167
|
+
_tag: "InvalidateRequest",
|
|
168
|
+
timestamp: Date.now(),
|
|
169
|
+
moduleId,
|
|
170
|
+
instanceId,
|
|
171
|
+
kind: "query",
|
|
172
|
+
target: "query",
|
|
173
|
+
meta: request.request
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
var cleanup = (bound, request) => Effect.gen(function* () {
|
|
177
|
+
const apply = () => bound.state.mutate((draft) => {
|
|
178
|
+
const clearAt = (root, path) => {
|
|
179
|
+
if (!path) return;
|
|
180
|
+
unsetAtPathMutating(draft, `${root}.${path}`);
|
|
181
|
+
};
|
|
182
|
+
if (request.kind === "field:unregister") {
|
|
183
|
+
const target = request.target;
|
|
184
|
+
if (target.kind !== "field") return;
|
|
185
|
+
clearAt("errors", target.path);
|
|
186
|
+
clearAt("ui", target.path);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (request.kind === "list:item:remove") {
|
|
190
|
+
const target = request.target;
|
|
191
|
+
if (target.kind !== "item") return;
|
|
192
|
+
const base = `${target.path}.${target.index}`;
|
|
193
|
+
const path = target.field ? `${base}.${target.field}` : base;
|
|
194
|
+
clearAt("errors", path);
|
|
195
|
+
clearAt("ui", path);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (request.kind === "list:reorder") {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
const inTxn = yield* FiberRef.get(inSyncTransactionFiber);
|
|
203
|
+
if (inTxn) {
|
|
204
|
+
return yield* apply();
|
|
205
|
+
}
|
|
206
|
+
let runWithTxn;
|
|
207
|
+
try {
|
|
208
|
+
const internals = getBoundInternals(bound);
|
|
209
|
+
runWithTxn = (origin, body) => internals.txn.runWithStateTransaction(origin, body);
|
|
210
|
+
} catch {
|
|
211
|
+
runWithTxn = void 0;
|
|
212
|
+
}
|
|
213
|
+
if (!runWithTxn) {
|
|
214
|
+
return yield* apply();
|
|
215
|
+
}
|
|
216
|
+
return yield* runWithTxn({ kind: "trait", name: "cleanup", details: request }, apply);
|
|
217
|
+
});
|
|
218
|
+
var isAuxRootPath = (path) => path === "errors" || path === "ui" || path.startsWith("errors.") || path.startsWith("ui.");
|
|
219
|
+
var toPatternPath = (path) => {
|
|
220
|
+
if (!path) return path;
|
|
221
|
+
const segments = path.split(".").filter(Boolean);
|
|
222
|
+
return segments.map((seg) => /^[0-9]+$/.test(seg) ? "[]" : seg).join(".").replace(/\.\[\]/g, "[]");
|
|
223
|
+
};
|
|
224
|
+
var isDepAffectedByChange = (dep, changed) => {
|
|
225
|
+
if (!dep || !changed) return false;
|
|
226
|
+
if (dep === changed) return true;
|
|
227
|
+
if (changed.startsWith(`${dep}.`)) return true;
|
|
228
|
+
if (changed.startsWith(`${dep}[]`)) return true;
|
|
229
|
+
if (dep.startsWith(`${changed}[]`)) return true;
|
|
230
|
+
return false;
|
|
231
|
+
};
|
|
232
|
+
var makeSourceWiring = (bound, module) => {
|
|
233
|
+
const program = getModuleTraitsProgram(module);
|
|
234
|
+
const sources = program?.entries?.filter((e) => e && e.kind === "source") ?? [];
|
|
235
|
+
const sourceOnMount = sources.filter(
|
|
236
|
+
(e) => Array.isArray(e?.meta?.triggers) ? e.meta.triggers.includes("onMount") : false
|
|
237
|
+
);
|
|
238
|
+
const sourceOnKeyChange = sources.filter(
|
|
239
|
+
(e) => Array.isArray(e?.meta?.triggers) ? e.meta.triggers.includes("onKeyChange") : false
|
|
240
|
+
);
|
|
241
|
+
const setup = Effect.sync(() => {
|
|
242
|
+
if (sourceOnMount.length === 0) return;
|
|
243
|
+
bound.lifecycle.onStart(
|
|
244
|
+
Effect.forEach(sourceOnMount, (entry) => bound.traits.source.refresh(entry.fieldPath), {
|
|
245
|
+
concurrency: "unbounded"
|
|
246
|
+
}).pipe(Effect.asVoid)
|
|
247
|
+
);
|
|
248
|
+
});
|
|
249
|
+
const refreshOnKeyChange = (changedPath) => Effect.gen(function* () {
|
|
250
|
+
if (!changedPath || isAuxRootPath(changedPath)) return;
|
|
251
|
+
if (sourceOnKeyChange.length === 0) return;
|
|
252
|
+
const changedPattern = toPatternPath(changedPath);
|
|
253
|
+
yield* Effect.forEach(
|
|
254
|
+
sourceOnKeyChange,
|
|
255
|
+
(entry) => {
|
|
256
|
+
const deps = entry?.meta?.deps ?? [];
|
|
257
|
+
const affected = deps.some((dep) => isDepAffectedByChange(dep, changedPattern));
|
|
258
|
+
if (!affected) return Effect.void;
|
|
259
|
+
return bound.traits.source.refresh(entry.fieldPath);
|
|
260
|
+
},
|
|
261
|
+
{ concurrency: "unbounded" }
|
|
262
|
+
);
|
|
263
|
+
}).pipe(Effect.asVoid);
|
|
264
|
+
return { setup, refreshOnKeyChange };
|
|
265
|
+
};
|
|
266
|
+
var install = (_bound) => Effect.void;
|
|
267
|
+
|
|
268
|
+
// src/TraitLifecycle.ts
|
|
269
|
+
var Ref2 = Ref;
|
|
270
|
+
var scopedValidate2 = (bound, request) => scopedValidate(bound, request);
|
|
271
|
+
var scopedExecute2 = (bound, request) => scopedExecute(bound, request);
|
|
272
|
+
var cleanup2 = (bound, request) => cleanup(bound, request);
|
|
273
|
+
var makeSourceWiring2 = (bound, module) => makeSourceWiring(bound, module);
|
|
274
|
+
var install2 = (bound) => install(bound);
|
|
275
|
+
|
|
276
|
+
export {
|
|
277
|
+
Ref2 as Ref,
|
|
278
|
+
scopedValidate2 as scopedValidate,
|
|
279
|
+
scopedExecute2 as scopedExecute,
|
|
280
|
+
cleanup2 as cleanup,
|
|
281
|
+
makeSourceWiring2 as makeSourceWiring,
|
|
282
|
+
install2 as install,
|
|
283
|
+
TraitLifecycle_exports
|
|
284
|
+
};
|
|
285
|
+
//# sourceMappingURL=chunk-ANLBCBDC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/TraitLifecycle.ts","../src/internal/trait-lifecycle/index.ts"],"sourcesContent":["// TraitLifecycle: shared lower-level interface for Form/Query (@logixjs/core/TraitLifecycle, Phase 2 placeholder).\n//\n// - Exposes serializable FieldRef and unified request protocols.\n// - Concrete implementation lives in internal/trait-lifecycle/*; this module provides public API + type exports.\n\nimport type { BoundApi } from './Bound.js'\nimport { Effect } from 'effect'\nimport * as Internal from './internal/trait-lifecycle/index.js'\n\nexport type FieldRef = Internal.FieldRef\nexport type ValidateMode = Internal.ValidateRequest['mode']\nexport type ValidateRequest = Internal.ValidateRequest\nexport type ExecuteRequest = Internal.ExecuteRequest\nexport type CleanupRequest = Internal.CleanupRequest\nexport type SourceWiring = ReturnType<typeof Internal.makeSourceWiring>\n\nexport const Ref = Internal.Ref\n\nexport const scopedValidate = (bound: BoundApi<any, any>, request: ValidateRequest): Effect.Effect<void, never, any> =>\n Internal.scopedValidate(bound as any, request)\n\nexport const scopedExecute = (bound: BoundApi<any, any>, request: ExecuteRequest): Effect.Effect<void, never, any> =>\n Internal.scopedExecute(bound as any, request)\n\nexport const cleanup = (bound: BoundApi<any, any>, request: CleanupRequest): Effect.Effect<void, never, any> =>\n Internal.cleanup(bound as any, request)\n\nexport const makeSourceWiring = (bound: BoundApi<any, any>, module: unknown): SourceWiring =>\n Internal.makeSourceWiring(bound as any, module)\n\nexport const install = (bound: BoundApi<any, any>): Effect.Effect<void, never, any> => Internal.install(bound as any)\n","import { Effect, FiberRef, Option } from 'effect'\nimport type { BoundApi } from '../runtime/core/module.js'\nimport * as TaskRunner from '../runtime/core/TaskRunner.js'\nimport * as ReplayLog from '../runtime/core/ReplayLog.js'\nimport type { CleanupRequest, ExecuteRequest, FieldRef, ValidateRequest } from './model.js'\nimport type * as StateTraitValidate from '../state-trait/validate.js'\nimport * as RowId from '../state-trait/rowid.js'\nimport { getBoundInternals, getModuleTraitsProgram } from '../runtime/core/runtimeInternalsAccessor.js'\n\nexport type { CleanupRequest, ExecuteRequest, FieldRef, ValidateRequest }\n\n/**\n * Ref: builders for FieldRef (serializable and comparable).\n *\n * Notes:\n * - Phase 2 provides only minimal constructors.\n * - Array optimizations (RowID/trackBy) and richer ref semantics will land in later phases.\n */\nexport const Ref = {\n field: (path: string): FieldRef => ({ kind: 'field', path }),\n list: (path: string, listIndexPath?: ReadonlyArray<number>): FieldRef => ({\n kind: 'list',\n path,\n listIndexPath,\n }),\n item: (\n path: string,\n index: number,\n options?: { readonly listIndexPath?: ReadonlyArray<number>; readonly field?: string },\n ): FieldRef => ({\n kind: 'item',\n path,\n index,\n listIndexPath: options?.listIndexPath,\n field: options?.field,\n }),\n /**\n * fromValuePath:\n * - Parse a valuePath (e.g. \"items.0.warehouseId\") into a FieldRef.\n * - Supports a single index (required) and multi-level indices via listIndexPath (optional but recommended).\n *\n * Conventions:\n * - If numeric segments are present, return an item ref (the last index becomes item.index; preceding indices go into listIndexPath).\n * - If no numeric segments are present:\n * - \"items[]\" (pattern list root) returns a list ref.\n * - Otherwise return a field ref (including pattern fields like \"items[].x\").\n * - \"$root\" / empty string returns the root ref.\n */\n fromValuePath: (valuePath: string): FieldRef => {\n const raw = typeof valuePath === 'string' ? valuePath.trim() : ''\n if (!raw || raw === '$root') return Ref.root()\n\n const segments = raw.split('.').filter(Boolean)\n if (segments.length === 0) return Ref.root()\n\n const isIndex = (seg: string): boolean => /^[0-9]+$/.test(seg)\n const stripPattern = (seg: string): string => (seg.endsWith('[]') ? seg.slice(0, -2) : seg)\n\n const indexPositions: Array<{ readonly pos: number; readonly index: number }> = []\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i]!\n if (!isIndex(seg)) continue\n const index = Number(seg)\n if (!Number.isFinite(index) || index < 0) return Ref.field(raw)\n indexPositions.push({ pos: i, index })\n }\n\n // valuePath with indices => item ref\n if (indexPositions.length > 0) {\n const last = indexPositions[indexPositions.length - 1]!\n const listIndexPath = indexPositions.slice(0, -1).map((p) => p.index)\n\n const listPath = segments\n .slice(0, last.pos)\n .filter((seg) => !isIndex(seg))\n .map(stripPattern)\n .join('.')\n\n if (!listPath) return Ref.field(raw)\n\n const fieldRest = segments\n .slice(last.pos + 1)\n .map(stripPattern)\n .join('.')\n\n return Ref.item(listPath, last.index, {\n listIndexPath: listIndexPath.length > 0 ? listIndexPath : undefined,\n field: fieldRest ? fieldRest : undefined,\n })\n }\n\n // pattern list root => list ref\n if (segments.some((s) => s.includes('[]'))) {\n const last = segments[segments.length - 1]!\n if (last.endsWith('[]')) {\n return Ref.list(segments.map(stripPattern).join('.'))\n }\n }\n\n return Ref.field(raw)\n },\n root: (): FieldRef => ({ kind: 'root' }),\n} as const\n\n/**\n * scopedValidate (placeholder): in later phases this will compute the minimal set via ReverseClosure and write back into the error tree.\n */\nexport const scopedValidate = (bound: BoundApi<any, any>, request: ValidateRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n let internals: ReturnType<typeof getBoundInternals> | undefined\n try {\n internals = getBoundInternals(bound as any)\n } catch {\n return\n }\n\n const enqueue = internals.traits.enqueueStateTraitValidateRequest as unknown as\n | ((r: StateTraitValidate.ScopedValidateRequest) => void)\n | undefined\n\n if (!enqueue) return\n\n const toTarget = (ref: FieldRef): StateTraitValidate.ValidateTarget => {\n if (ref.kind === 'root') return { kind: 'root' }\n if (ref.kind === 'field') return { kind: 'field', path: ref.path }\n if (ref.kind === 'list') {\n return {\n kind: 'list',\n path: ref.path,\n ...(ref.listIndexPath ? { listIndexPath: ref.listIndexPath } : {}),\n }\n }\n return {\n kind: 'item',\n path: ref.path,\n index: ref.index,\n ...(ref.listIndexPath ? { listIndexPath: ref.listIndexPath } : {}),\n field: ref.field,\n }\n }\n\n const internal: StateTraitValidate.ScopedValidateRequest = {\n mode: request.mode as any,\n target: toTarget(request.target),\n }\n\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n enqueue(internal)\n return\n }\n\n yield* internals.txn.runWithStateTransaction({ kind: 'trait', name: 'scopedValidate', details: request }, () =>\n Effect.sync(() => {\n enqueue(internal)\n }),\n )\n })\n\n/**\n * scopedExecute (placeholder): a unified execution entrypoint for query/resource actions (refresh/invalidate, etc.).\n */\nexport const scopedExecute = (bound: BoundApi<any, any>, request: ExecuteRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n if (request.kind === 'source:refresh') {\n const toFieldPath = (ref: FieldRef): string | undefined => {\n if (ref.kind === 'root') return undefined\n if (ref.kind === 'field' || ref.kind === 'list') return ref.path\n const base = `${ref.path}[]`\n return ref.field ? `${base}.${ref.field}` : base\n }\n\n const fieldPath = toFieldPath(request.target)\n if (!fieldPath) {\n return\n }\n\n yield* bound.traits.source.refresh(fieldPath) as Effect.Effect<void, never, any>\n return\n }\n\n if (request.kind !== 'query:invalidate') {\n return\n }\n\n const replayLogOpt = yield* Effect.serviceOption(ReplayLog.ReplayLog)\n if (Option.isNone(replayLogOpt)) {\n return\n }\n\n let moduleId: string | undefined\n let instanceId: string | undefined\n try {\n const internals = getBoundInternals(bound as any)\n moduleId = internals.moduleId\n instanceId = internals.instanceId\n } catch {\n moduleId = undefined\n instanceId = undefined\n }\n\n yield* replayLogOpt.value.record({\n _tag: 'InvalidateRequest',\n timestamp: Date.now(),\n moduleId,\n instanceId,\n kind: 'query',\n target: 'query',\n meta: request.request,\n })\n })\n\n/**\n * cleanup (placeholder): deterministic cleanup under structural changes (errors/ui/resources).\n */\nexport const cleanup = (bound: BoundApi<any, any>, request: CleanupRequest): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n const apply = () =>\n bound.state.mutate((draft) => {\n const clearAt = (root: 'errors' | 'ui', path: string): void => {\n if (!path) return\n RowId.unsetAtPathMutating(draft, `${root}.${path}`)\n }\n\n if (request.kind === 'field:unregister') {\n const target = request.target\n if (target.kind !== 'field') return\n clearAt('errors', target.path)\n clearAt('ui', target.path)\n return\n }\n\n if (request.kind === 'list:item:remove') {\n const target = request.target\n if (target.kind !== 'item') return\n const base = `${target.path}.${target.index}`\n const path = target.field ? `${base}.${target.field}` : base\n clearAt('errors', path)\n clearAt('ui', path)\n return\n }\n\n if (request.kind === 'list:reorder') {\n // Reorder does not change the external index semantics by itself.\n // Alignment of errors/ui should be handled by domain reducers or higher-level logic; keep it a no-op here.\n return\n }\n })\n\n const inTxn = yield* FiberRef.get(TaskRunner.inSyncTransactionFiber)\n if (inTxn) {\n return yield* apply()\n }\n\n let runWithTxn:\n | ((\n origin: { readonly kind: string; readonly name?: string; readonly details?: unknown },\n body: () => Effect.Effect<void, never, any>,\n ) => Effect.Effect<void, never, any>)\n | undefined\n\n try {\n const internals = getBoundInternals(bound as any)\n runWithTxn = (origin, body) => internals.txn.runWithStateTransaction(origin as any, body)\n } catch {\n runWithTxn = undefined\n }\n\n if (!runWithTxn) {\n return yield* apply()\n }\n\n return yield* runWithTxn({ kind: 'trait', name: 'cleanup', details: request }, apply)\n })\n\ntype SourceWiring = {\n readonly setup: Effect.Effect<void, never, any>\n readonly refreshOnKeyChange: (changedPath: string) => Effect.Effect<void, never, any>\n}\n\nconst isAuxRootPath = (path: string): boolean =>\n path === 'errors' || path === 'ui' || path.startsWith('errors.') || path.startsWith('ui.')\n\nconst toPatternPath = (path: string): string => {\n if (!path) return path\n const segments = path.split('.').filter(Boolean)\n return segments\n .map((seg) => (/^[0-9]+$/.test(seg) ? '[]' : seg))\n .join('.')\n .replace(/\\.\\[\\]/g, '[]')\n}\n\nconst isDepAffectedByChange = (dep: string, changed: string): boolean => {\n if (!dep || !changed) return false\n if (dep === changed) return true\n if (changed.startsWith(`${dep}.`)) return true\n if (changed.startsWith(`${dep}[]`)) return true\n // list root structural change (e.g. changed=\"items\") should affect any list-item deps (e.g. dep=\"items[].x\").\n if (dep.startsWith(`${changed}[]`)) return true\n return false\n}\n\nexport const makeSourceWiring = (bound: BoundApi<any, any>, module: unknown): SourceWiring => {\n const program = getModuleTraitsProgram(module as any) as { readonly entries?: ReadonlyArray<any> } | undefined\n\n const sources = program?.entries?.filter((e) => e && e.kind === 'source') ?? []\n\n const sourceOnMount = sources.filter((e: any) =>\n Array.isArray(e?.meta?.triggers) ? e.meta.triggers.includes('onMount') : false,\n )\n\n const sourceOnKeyChange = sources.filter((e: any) =>\n Array.isArray(e?.meta?.triggers) ? e.meta.triggers.includes('onKeyChange') : false,\n )\n\n const setup = Effect.sync(() => {\n if (sourceOnMount.length === 0) return\n bound.lifecycle.onStart(\n Effect.forEach(sourceOnMount, (entry: any) => bound.traits.source.refresh(entry.fieldPath), {\n concurrency: 'unbounded',\n }).pipe(Effect.asVoid),\n )\n })\n\n const refreshOnKeyChange = (changedPath: string): Effect.Effect<void, never, any> =>\n Effect.gen(function* () {\n if (!changedPath || isAuxRootPath(changedPath)) return\n if (sourceOnKeyChange.length === 0) return\n\n const changedPattern = toPatternPath(changedPath)\n\n yield* Effect.forEach(\n sourceOnKeyChange,\n (entry: any) => {\n const deps = (entry?.meta?.deps ?? []) as ReadonlyArray<string>\n const affected = deps.some((dep) => isDepAffectedByChange(dep, changedPattern))\n if (!affected) return Effect.void\n return bound.traits.source.refresh(entry.fieldPath)\n },\n { concurrency: 'unbounded' },\n )\n }).pipe(Effect.asVoid)\n\n return { setup, refreshOnKeyChange }\n}\n\n/**\n * install (placeholder): the default wiring entrypoint for TraitLifecycle.\n *\n * Notes:\n * - Phase 2 only provides an entrypoint that feature packages can depend on.\n * - Concrete wiring for \"domain event → request → in-transaction execution\" will be composed by Form/Query default logics in later phases.\n */\nexport const install = (_bound: BoundApi<any, any>): Effect.Effect<void, never, any> => Effect.void\n"],"mappings":"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","names":["Ref","cleanup","install","makeSourceWiring","scopedExecute","scopedValidate","Ref","scopedValidate","scopedExecute","cleanup","makeSourceWiring","install"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isDevEnv
|
|
3
|
+
} from "./chunk-3QMIVH35.js";
|
|
4
|
+
|
|
5
|
+
// src/internal/root.ts
|
|
6
|
+
import { Context as Context2, Deferred as Deferred2, Effect, Layer } from "effect";
|
|
7
|
+
|
|
8
|
+
// src/internal/runtime/core/RootContext.ts
|
|
9
|
+
import { Context } from "effect";
|
|
10
|
+
var RootContextTagImpl = class extends Context.Tag("@logixjs/core/RootContext")() {
|
|
11
|
+
};
|
|
12
|
+
var RootContextTag = RootContextTagImpl;
|
|
13
|
+
|
|
14
|
+
// src/internal/root.ts
|
|
15
|
+
var tagIdOf = (tag) => typeof tag?.id === "string" ? String(tag.id) : typeof tag?.key === "string" ? String(tag.key) : "<unknown tag>";
|
|
16
|
+
var makeMissingRootProviderError = (tag, entrypoint, extra) => {
|
|
17
|
+
const dev = isDevEnv();
|
|
18
|
+
const tokenId = tagIdOf(tag);
|
|
19
|
+
const fix = dev ? [
|
|
20
|
+
"- Provide it when creating the runtime tree (Logix.Runtime.make(...,{ layer }) / ManagedRuntime.make(Layer.mergeAll(...))).",
|
|
21
|
+
"- If you're in React and want the current runtime environment singleton, use useModule(ModuleTag).",
|
|
22
|
+
"- Do not rely on nested RuntimeProvider.layer to mock Root.resolve."
|
|
23
|
+
] : [];
|
|
24
|
+
const message = dev ? [
|
|
25
|
+
"[MissingRootProviderError] Cannot resolve Tag from root provider.",
|
|
26
|
+
extra ? `
|
|
27
|
+
${extra}` : "",
|
|
28
|
+
`tokenId: ${tokenId}`,
|
|
29
|
+
`entrypoint: ${entrypoint}`,
|
|
30
|
+
"mode: global",
|
|
31
|
+
"startScope: root",
|
|
32
|
+
"",
|
|
33
|
+
"fix:",
|
|
34
|
+
...fix
|
|
35
|
+
].filter((s) => s.length > 0).join("\n") : "[MissingRootProviderError] tag not found in root provider";
|
|
36
|
+
const err = new Error(message);
|
|
37
|
+
err.name = "MissingRootProviderError";
|
|
38
|
+
err.tokenId = tokenId;
|
|
39
|
+
err.entrypoint = entrypoint;
|
|
40
|
+
err.mode = "global";
|
|
41
|
+
err.startScope = { kind: "root" };
|
|
42
|
+
err.fix = fix;
|
|
43
|
+
return err;
|
|
44
|
+
};
|
|
45
|
+
var resolve = (tag, options) => Effect.gen(function* () {
|
|
46
|
+
const entrypoint = options?.entrypoint ?? "logic.root.resolve";
|
|
47
|
+
const root = yield* RootContextTag;
|
|
48
|
+
const rootContext = root.context ?? (options?.waitForReady ? yield* root.ready : void 0);
|
|
49
|
+
if (!rootContext) {
|
|
50
|
+
return yield* Effect.die(
|
|
51
|
+
makeMissingRootProviderError(tag, entrypoint, "reason: rootContextNotReady")
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
return Context2.get(rootContext, tag);
|
|
56
|
+
} catch {
|
|
57
|
+
return yield* Effect.die(makeMissingRootProviderError(tag, entrypoint));
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
var layerFromContext = (context) => Layer.scoped(
|
|
61
|
+
RootContextTag,
|
|
62
|
+
Effect.gen(function* () {
|
|
63
|
+
const ready = yield* Deferred2.make();
|
|
64
|
+
yield* Deferred2.succeed(ready, context);
|
|
65
|
+
const root = { context, ready };
|
|
66
|
+
return root;
|
|
67
|
+
})
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
export {
|
|
71
|
+
RootContextTag,
|
|
72
|
+
resolve,
|
|
73
|
+
layerFromContext
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=chunk-AUIR5O6W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/root.ts","../src/internal/runtime/core/RootContext.ts"],"sourcesContent":["import { Context, Deferred, Effect, Layer } from 'effect'\nimport { isDevEnv } from './runtime/core/env.js'\nimport { RootContextTag, type RootContext } from './runtime/core/RootContext.js'\n\nexport type RootResolveEntrypoint = 'logic.root.resolve' | 'logic.$.root.resolve'\n\nexport interface RootResolveOptions {\n readonly entrypoint?: RootResolveEntrypoint\n /**\n * Whether to wait when RootContext is not ready yet:\n * - Default false: avoid misuse during layer/setup which can deadlock.\n * - `$.root.resolve` passes true in the run phase (run-only), allowing Env assembly to complete.\n */\n readonly waitForReady?: boolean\n}\n\nconst tagIdOf = (tag: Context.Tag<any, any>): string =>\n typeof (tag as any)?.id === 'string'\n ? String((tag as any).id)\n : typeof (tag as any)?.key === 'string'\n ? String((tag as any).key)\n : '<unknown tag>'\n\nconst makeMissingRootProviderError = (\n tag: Context.Tag<any, any>,\n entrypoint: RootResolveEntrypoint,\n extra?: string,\n): Error => {\n const dev = isDevEnv()\n const tokenId = tagIdOf(tag)\n const fix: string[] = dev\n ? [\n '- Provide it when creating the runtime tree (Logix.Runtime.make(...,{ layer }) / ManagedRuntime.make(Layer.mergeAll(...))).',\n \"- If you're in React and want the current runtime environment singleton, use useModule(ModuleTag).\",\n '- Do not rely on nested RuntimeProvider.layer to mock Root.resolve.',\n ]\n : []\n\n const message = dev\n ? [\n '[MissingRootProviderError] Cannot resolve Tag from root provider.',\n extra ? `\\n${extra}` : '',\n `tokenId: ${tokenId}`,\n `entrypoint: ${entrypoint}`,\n 'mode: global',\n 'startScope: root',\n '',\n 'fix:',\n ...fix,\n ]\n .filter((s) => s.length > 0)\n .join('\\n')\n : '[MissingRootProviderError] tag not found in root provider'\n\n const err = new Error(message)\n err.name = 'MissingRootProviderError'\n ;(err as any).tokenId = tokenId\n ;(err as any).entrypoint = entrypoint\n ;(err as any).mode = 'global'\n ;(err as any).startScope = { kind: 'root' }\n ;(err as any).fix = fix\n return err\n}\n\n/**\n * resolve\n *\n * Resolve a Tag explicitly from the root provider of the current Runtime tree (ServiceTag / ModuleTag).\n *\n * Semantics:\n * - Always reads rootContext; unaffected by nearer-scope Layer/Context overrides.\n * - For ModuleTag: expresses root singleton semantics only (not used for multi-instance selection).\n */\nexport const resolve = <Id, Svc>(\n tag: Context.Tag<Id, Svc>,\n options?: RootResolveOptions,\n): Effect.Effect<Svc, never, any> =>\n Effect.gen(function* () {\n const entrypoint: RootResolveEntrypoint = options?.entrypoint ?? 'logic.root.resolve'\n\n const root = yield* RootContextTag\n\n const rootContext = root.context ?? (options?.waitForReady ? yield* root.ready : undefined)\n\n if (!rootContext) {\n return yield* Effect.die(\n makeMissingRootProviderError(tag as Context.Tag<any, any>, entrypoint, 'reason: rootContextNotReady'),\n )\n }\n\n try {\n return Context.get(rootContext, tag as Context.Tag<any, any>) as Svc\n } catch {\n return yield* Effect.die(makeMissingRootProviderError(tag as Context.Tag<any, any>, entrypoint))\n }\n })\n\n/**\n * layerFromContext(tests/perf only)\n *\n * Provide a \"ready immediately\" RootContext for Root.resolve.\n * - `ready` is fulfilled immediately to avoid extra waits when waitForReady=true.\n */\nexport const layerFromContext = (context: Context.Context<any>): Layer.Layer<any, never, any> =>\n Layer.scoped(\n RootContextTag,\n Effect.gen(function* () {\n const ready = yield* Deferred.make<Context.Context<any>>()\n yield* Deferred.succeed(ready, context)\n const root: RootContext = { context, ready }\n return root\n }),\n )\n","import { Context, Deferred } from 'effect'\n\nexport interface RootContext {\n context: Context.Context<any> | undefined\n readonly ready: Deferred.Deferred<Context.Context<any>, never>\n readonly appId?: string\n readonly appModuleIds?: ReadonlyArray<string>\n}\n\nclass RootContextTagImpl extends Context.Tag('@logixjs/core/RootContext')<RootContextTagImpl, RootContext>() {}\n\nexport const RootContextTag = RootContextTagImpl\n"],"mappings":";;;;;AAAA,SAAS,WAAAA,UAAS,YAAAC,WAAU,QAAQ,aAAa;;;ACAjD,SAAS,eAAyB;AASlC,IAAM,qBAAN,cAAiC,QAAQ,IAAI,2BAA2B,EAAmC,EAAE;AAAC;AAEvG,IAAM,iBAAiB;;;ADK9B,IAAM,UAAU,CAAC,QACf,OAAQ,KAAa,OAAO,WACxB,OAAQ,IAAY,EAAE,IACtB,OAAQ,KAAa,QAAQ,WAC3B,OAAQ,IAAY,GAAG,IACvB;AAER,IAAM,+BAA+B,CACnC,KACA,YACA,UACU;AACV,QAAM,MAAM,SAAS;AACrB,QAAM,UAAU,QAAQ,GAAG;AAC3B,QAAM,MAAgB,MAClB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,IACA,CAAC;AAEL,QAAM,UAAU,MACZ;AAAA,IACE;AAAA,IACA,QAAQ;AAAA,EAAK,KAAK,KAAK;AAAA,IACvB,YAAY,OAAO;AAAA,IACnB,eAAe,UAAU;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,EACG,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1B,KAAK,IAAI,IACZ;AAEJ,QAAM,MAAM,IAAI,MAAM,OAAO;AAC7B,MAAI,OAAO;AACV,EAAC,IAAY,UAAU;AACvB,EAAC,IAAY,aAAa;AAC1B,EAAC,IAAY,OAAO;AACpB,EAAC,IAAY,aAAa,EAAE,MAAM,OAAO;AACzC,EAAC,IAAY,MAAM;AACpB,SAAO;AACT;AAWO,IAAM,UAAU,CACrB,KACA,YAEA,OAAO,IAAI,aAAa;AACtB,QAAM,aAAoC,SAAS,cAAc;AAEjE,QAAM,OAAO,OAAO;AAEpB,QAAM,cAAc,KAAK,YAAY,SAAS,eAAe,OAAO,KAAK,QAAQ;AAEjF,MAAI,CAAC,aAAa;AAChB,WAAO,OAAO,OAAO;AAAA,MACnB,6BAA6B,KAA8B,YAAY,6BAA6B;AAAA,IACtG;AAAA,EACF;AAEA,MAAI;AACF,WAAOC,SAAQ,IAAI,aAAa,GAA4B;AAAA,EAC9D,QAAQ;AACN,WAAO,OAAO,OAAO,IAAI,6BAA6B,KAA8B,UAAU,CAAC;AAAA,EACjG;AACF,CAAC;AAQI,IAAM,mBAAmB,CAAC,YAC/B,MAAM;AAAA,EACJ;AAAA,EACA,OAAO,IAAI,aAAa;AACtB,UAAM,QAAQ,OAAOC,UAAS,KAA2B;AACzD,WAAOA,UAAS,QAAQ,OAAO,OAAO;AACtC,UAAM,OAAoB,EAAE,SAAS,MAAM;AAC3C,WAAO;AAAA,EACT,CAAC;AACH;","names":["Context","Deferred","Context","Deferred"]}
|