@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,397 @@
|
|
|
1
|
+
import {
|
|
2
|
+
build,
|
|
3
|
+
install
|
|
4
|
+
} from "./chunk-KIXAU3GM.js";
|
|
5
|
+
import {
|
|
6
|
+
Module
|
|
7
|
+
} from "./chunk-JCXGZRMU.js";
|
|
8
|
+
import {
|
|
9
|
+
attachLogicUnitMeta
|
|
10
|
+
} from "./chunk-JGIWG6SR.js";
|
|
11
|
+
import {
|
|
12
|
+
mutateWithPatchPaths,
|
|
13
|
+
mutateWithoutPatches
|
|
14
|
+
} from "./chunk-BE3HW4FY.js";
|
|
15
|
+
import {
|
|
16
|
+
normalizeActions
|
|
17
|
+
} from "./chunk-YS3AZQ2G.js";
|
|
18
|
+
import {
|
|
19
|
+
registerModuleProgram
|
|
20
|
+
} from "./chunk-66ALHVEX.js";
|
|
21
|
+
import {
|
|
22
|
+
getBoundInternals,
|
|
23
|
+
setModuleTraitsProgram
|
|
24
|
+
} from "./chunk-3RMKLXHX.js";
|
|
25
|
+
import {
|
|
26
|
+
currentDiagnosticsLevel,
|
|
27
|
+
record
|
|
28
|
+
} from "./chunk-DMBALCE2.js";
|
|
29
|
+
import {
|
|
30
|
+
fnv1a32,
|
|
31
|
+
stableStringify
|
|
32
|
+
} from "./chunk-GMPEOUP2.js";
|
|
33
|
+
import {
|
|
34
|
+
__export
|
|
35
|
+
} from "./chunk-PZ5AY32C.js";
|
|
36
|
+
|
|
37
|
+
// src/ModuleTag.ts
|
|
38
|
+
var ModuleTag_exports = {};
|
|
39
|
+
__export(ModuleTag_exports, {
|
|
40
|
+
Reducer: () => Reducer,
|
|
41
|
+
make: () => make
|
|
42
|
+
});
|
|
43
|
+
import { Effect, FiberRef } from "effect";
|
|
44
|
+
|
|
45
|
+
// src/internal/runtime/core/ModuleTraits.ts
|
|
46
|
+
var ModuleTraitsConflictError = class extends Error {
|
|
47
|
+
constructor(moduleId, conflicts) {
|
|
48
|
+
super(
|
|
49
|
+
[
|
|
50
|
+
`[ModuleTraitsConflictError] Conflicting traitIds found (moduleId=${moduleId}).`,
|
|
51
|
+
...conflicts.map(
|
|
52
|
+
(c) => c.kind === "duplicate_traitId" ? `- duplicate ${c.traitId}: ${c.sources.map((s) => `${s.originType}:${s.originId}`).join(", ")}` : c.kind === "missing_requires" ? `- missing requires for ${c.traitId}: ${(c.missing ?? []).join(", ")}; sources=${c.sources.map((s) => `${s.originType}:${s.originId}`).join(", ")}` : `- excludes violation for ${c.traitId}: present=${(c.present ?? []).join(", ")}; sources=${c.sources.map((s) => `${s.originType}:${s.originId}`).join(", ")}`
|
|
53
|
+
)
|
|
54
|
+
].join("\n")
|
|
55
|
+
);
|
|
56
|
+
this.moduleId = moduleId;
|
|
57
|
+
this.conflicts = conflicts;
|
|
58
|
+
this._tag = "ModuleTraitsConflictError";
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var toProvenanceKey = (p) => `${p.originType}:${p.originId}:${p.originIdKind}:${p.originLabel}:${p.path ?? ""}`;
|
|
62
|
+
var compareProvenance = (a, b) => {
|
|
63
|
+
const type = a.originType.localeCompare(b.originType);
|
|
64
|
+
if (type !== 0) return type;
|
|
65
|
+
const id = a.originId.localeCompare(b.originId);
|
|
66
|
+
if (id !== 0) return id;
|
|
67
|
+
const kind = a.originIdKind.localeCompare(b.originIdKind);
|
|
68
|
+
if (kind !== 0) return kind;
|
|
69
|
+
const label = a.originLabel.localeCompare(b.originLabel);
|
|
70
|
+
if (label !== 0) return label;
|
|
71
|
+
return String(a.path ?? "").localeCompare(String(b.path ?? ""));
|
|
72
|
+
};
|
|
73
|
+
var originTypeOrder = (t) => t === "module" ? 0 : 1;
|
|
74
|
+
var compareTraitIdByProvenance = (a, b) => {
|
|
75
|
+
const ta = originTypeOrder(a.provenance.originType) - originTypeOrder(b.provenance.originType);
|
|
76
|
+
if (ta !== 0) return ta;
|
|
77
|
+
const oa = a.provenance.originId.localeCompare(b.provenance.originId);
|
|
78
|
+
if (oa !== 0) return oa;
|
|
79
|
+
return a.traitId.localeCompare(b.traitId);
|
|
80
|
+
};
|
|
81
|
+
var extractStringArray = (value) => {
|
|
82
|
+
if (!Array.isArray(value)) return [];
|
|
83
|
+
const out = [];
|
|
84
|
+
for (const v of value) {
|
|
85
|
+
if (typeof v !== "string") continue;
|
|
86
|
+
const s = v.trim();
|
|
87
|
+
if (!s) continue;
|
|
88
|
+
out.push(s);
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
};
|
|
92
|
+
var getTraitRequires = (value) => {
|
|
93
|
+
if (!value || typeof value !== "object") return [];
|
|
94
|
+
const direct = extractStringArray(value.requires);
|
|
95
|
+
return direct;
|
|
96
|
+
};
|
|
97
|
+
var getTraitExcludes = (value) => {
|
|
98
|
+
if (!value || typeof value !== "object") return [];
|
|
99
|
+
const direct = extractStringArray(value.excludes);
|
|
100
|
+
return direct;
|
|
101
|
+
};
|
|
102
|
+
var getTraitName = (traitId, value) => {
|
|
103
|
+
if (value && typeof value === "object") {
|
|
104
|
+
const n = value.name;
|
|
105
|
+
if (typeof n === "string" && n.trim().length > 0) return n.trim();
|
|
106
|
+
}
|
|
107
|
+
return traitId;
|
|
108
|
+
};
|
|
109
|
+
var getTraitDescription = (value) => {
|
|
110
|
+
if (value && typeof value === "object") {
|
|
111
|
+
const d = value.description;
|
|
112
|
+
if (typeof d === "string" && d.trim().length > 0) return d.trim();
|
|
113
|
+
}
|
|
114
|
+
return void 0;
|
|
115
|
+
};
|
|
116
|
+
var finalizeTraitContributions = (args) => {
|
|
117
|
+
const traitById = /* @__PURE__ */ new Map();
|
|
118
|
+
const duplicateSources = /* @__PURE__ */ new Map();
|
|
119
|
+
const contributions = [...args.contributions].sort((a, b) => compareProvenance(a.provenance, b.provenance));
|
|
120
|
+
for (const c of contributions) {
|
|
121
|
+
const traits2 = c.traits;
|
|
122
|
+
if (!traits2 || typeof traits2 !== "object") continue;
|
|
123
|
+
for (const traitId of Object.keys(traits2).sort((a, b) => a.localeCompare(b))) {
|
|
124
|
+
const value = traits2[traitId];
|
|
125
|
+
if (value === void 0) continue;
|
|
126
|
+
const prev = traitById.get(traitId);
|
|
127
|
+
if (!prev) {
|
|
128
|
+
traitById.set(traitId, { value, provenance: c.provenance });
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const sources = duplicateSources.get(traitId) ?? [prev.provenance];
|
|
132
|
+
sources.push(c.provenance);
|
|
133
|
+
duplicateSources.set(traitId, sources);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const conflicts = [];
|
|
137
|
+
const registerConflict = (conflict) => {
|
|
138
|
+
const unique = /* @__PURE__ */ new Map();
|
|
139
|
+
for (const s of conflict.sources) {
|
|
140
|
+
unique.set(toProvenanceKey(s), s);
|
|
141
|
+
}
|
|
142
|
+
conflicts.push({
|
|
143
|
+
...conflict,
|
|
144
|
+
sources: Array.from(unique.values()).sort(compareProvenance)
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
for (const traitId of Array.from(duplicateSources.keys()).sort((a, b) => a.localeCompare(b))) {
|
|
148
|
+
registerConflict({
|
|
149
|
+
kind: "duplicate_traitId",
|
|
150
|
+
traitId,
|
|
151
|
+
sources: duplicateSources.get(traitId) ?? []
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
const merged = {};
|
|
155
|
+
const provenanceIndex = {};
|
|
156
|
+
const traits = [];
|
|
157
|
+
const entries = [];
|
|
158
|
+
for (const traitId of traitById.keys()) {
|
|
159
|
+
const entry = traitById.get(traitId);
|
|
160
|
+
if (!entry) continue;
|
|
161
|
+
entries.push({ traitId, value: entry.value, provenance: entry.provenance });
|
|
162
|
+
}
|
|
163
|
+
const ids = entries.slice().sort(compareTraitIdByProvenance).map((e) => e.traitId);
|
|
164
|
+
for (const traitId of ids) {
|
|
165
|
+
const entry = traitById.get(traitId);
|
|
166
|
+
if (!entry) continue;
|
|
167
|
+
merged[traitId] = entry.value;
|
|
168
|
+
provenanceIndex[traitId] = entry.provenance;
|
|
169
|
+
traits.push({
|
|
170
|
+
traitId,
|
|
171
|
+
name: getTraitName(traitId, entry.value),
|
|
172
|
+
description: getTraitDescription(entry.value)
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
const present = new Set(ids);
|
|
176
|
+
for (const traitId of ids) {
|
|
177
|
+
const entry = traitById.get(traitId);
|
|
178
|
+
if (!entry) continue;
|
|
179
|
+
const requires = getTraitRequires(entry.value);
|
|
180
|
+
if (requires.length > 0) {
|
|
181
|
+
const missing = requires.filter((r) => !present.has(r));
|
|
182
|
+
if (missing.length > 0) {
|
|
183
|
+
registerConflict({
|
|
184
|
+
kind: "missing_requires",
|
|
185
|
+
traitId,
|
|
186
|
+
missing: Array.from(new Set(missing)).sort((a, b) => a.localeCompare(b)),
|
|
187
|
+
sources: [entry.provenance]
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const excludes = getTraitExcludes(entry.value);
|
|
192
|
+
if (excludes.length > 0) {
|
|
193
|
+
const presentExcluded = excludes.filter((e) => present.has(e));
|
|
194
|
+
if (presentExcluded.length > 0) {
|
|
195
|
+
const otherSources = [];
|
|
196
|
+
for (const otherId of presentExcluded) {
|
|
197
|
+
const other = traitById.get(otherId);
|
|
198
|
+
if (other) otherSources.push(other.provenance);
|
|
199
|
+
}
|
|
200
|
+
registerConflict({
|
|
201
|
+
kind: "excludes_violation",
|
|
202
|
+
traitId,
|
|
203
|
+
present: Array.from(new Set(presentExcluded)).sort((a, b) => a.localeCompare(b)),
|
|
204
|
+
sources: [entry.provenance, ...otherSources]
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (conflicts.length > 0) {
|
|
210
|
+
const kindOrder = {
|
|
211
|
+
duplicate_traitId: 0,
|
|
212
|
+
missing_requires: 1,
|
|
213
|
+
excludes_violation: 2
|
|
214
|
+
};
|
|
215
|
+
conflicts.sort((a, b) => {
|
|
216
|
+
const k = kindOrder[a.kind] - kindOrder[b.kind];
|
|
217
|
+
if (k !== 0) return k;
|
|
218
|
+
return a.traitId.localeCompare(b.traitId);
|
|
219
|
+
});
|
|
220
|
+
throw new ModuleTraitsConflictError(args.moduleId, conflicts);
|
|
221
|
+
}
|
|
222
|
+
const digestBase = {
|
|
223
|
+
moduleId: args.moduleId,
|
|
224
|
+
traits,
|
|
225
|
+
provenanceIndex
|
|
226
|
+
};
|
|
227
|
+
const digest = `mtraits:023:${fnv1a32(stableStringify(digestBase))}`;
|
|
228
|
+
return {
|
|
229
|
+
merged,
|
|
230
|
+
snapshot: {
|
|
231
|
+
moduleId: args.moduleId,
|
|
232
|
+
digest,
|
|
233
|
+
traits,
|
|
234
|
+
provenanceIndex
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
// src/ModuleTag.ts
|
|
240
|
+
var Reducer = {
|
|
241
|
+
mutate: (mutator) => (state, action, sink) => {
|
|
242
|
+
const payload = action?.payload;
|
|
243
|
+
if (!sink) {
|
|
244
|
+
return mutateWithoutPatches(state, (draft) => {
|
|
245
|
+
mutator(draft, payload);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
const { nextState, patchPaths } = mutateWithPatchPaths(state, (draft) => {
|
|
249
|
+
mutator(draft, payload);
|
|
250
|
+
});
|
|
251
|
+
for (const path of patchPaths) {
|
|
252
|
+
sink(path);
|
|
253
|
+
}
|
|
254
|
+
return nextState;
|
|
255
|
+
},
|
|
256
|
+
mutateMap: (mutators) => {
|
|
257
|
+
const out = {};
|
|
258
|
+
for (const key of Object.keys(mutators)) {
|
|
259
|
+
const mutator = mutators[key];
|
|
260
|
+
if (typeof mutator !== "function") continue;
|
|
261
|
+
out[key] = Reducer.mutate(mutator);
|
|
262
|
+
}
|
|
263
|
+
return out;
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
var makeImpl = (id, def) => Module(id, def);
|
|
267
|
+
var make = (id, def) => {
|
|
268
|
+
const actions = normalizeActions(def.actions);
|
|
269
|
+
const moduleTag = makeImpl(id, {
|
|
270
|
+
state: def.state,
|
|
271
|
+
actions,
|
|
272
|
+
reducers: def.reducers
|
|
273
|
+
});
|
|
274
|
+
const stateSchema = def.state;
|
|
275
|
+
const moduleTraitsSpec = def.traits;
|
|
276
|
+
const baseProgram = moduleTraitsSpec ? build(stateSchema, moduleTraitsSpec) : void 0;
|
|
277
|
+
if (baseProgram) {
|
|
278
|
+
setModuleTraitsProgram(moduleTag, baseProgram);
|
|
279
|
+
registerModuleProgram(id, baseProgram);
|
|
280
|
+
}
|
|
281
|
+
const makeModuleTraitsContributionLogic = (traits) => {
|
|
282
|
+
const logic = moduleTag.logic(($) => ({
|
|
283
|
+
setup: Effect.sync(() => {
|
|
284
|
+
if (!traits || typeof traits !== "object") return;
|
|
285
|
+
const internals = getBoundInternals($);
|
|
286
|
+
internals.traits.registerModuleTraitsContribution({
|
|
287
|
+
traits,
|
|
288
|
+
provenance: {
|
|
289
|
+
originType: "module",
|
|
290
|
+
originId: id,
|
|
291
|
+
originIdKind: "explicit",
|
|
292
|
+
originLabel: `module:${id}`
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}),
|
|
296
|
+
run: Effect.void
|
|
297
|
+
}));
|
|
298
|
+
attachLogicUnitMeta(logic, {
|
|
299
|
+
id: "__logix_internal:traits:module_contrib",
|
|
300
|
+
kind: "internal",
|
|
301
|
+
name: "traits:module_contrib",
|
|
302
|
+
moduleId: id
|
|
303
|
+
});
|
|
304
|
+
return logic;
|
|
305
|
+
};
|
|
306
|
+
const makeFinalizeTraitsLogic = () => {
|
|
307
|
+
const logic = moduleTag.logic(($) => ({
|
|
308
|
+
setup: Effect.gen(function* () {
|
|
309
|
+
const internals = getBoundInternals($);
|
|
310
|
+
const diagnosticsLevel = yield* FiberRef.get(currentDiagnosticsLevel);
|
|
311
|
+
const contributions = internals.traits.getModuleTraitsContributions();
|
|
312
|
+
let merged;
|
|
313
|
+
let snapshot;
|
|
314
|
+
try {
|
|
315
|
+
;
|
|
316
|
+
({ merged, snapshot } = finalizeTraitContributions({
|
|
317
|
+
moduleId: id,
|
|
318
|
+
contributions
|
|
319
|
+
}));
|
|
320
|
+
} catch (cause) {
|
|
321
|
+
if (diagnosticsLevel !== "off" && cause && typeof cause === "object" && cause._tag === "ModuleTraitsConflictError") {
|
|
322
|
+
const conflicts = Array.isArray(cause.conflicts) ? cause.conflicts : [];
|
|
323
|
+
const traitIds = conflicts.map((c) => c && typeof c === "object" ? c.traitId : void 0).filter((t) => typeof t === "string" && t.length > 0).slice(0, 20);
|
|
324
|
+
const data = diagnosticsLevel === "full" ? {
|
|
325
|
+
conflictCount: conflicts.length,
|
|
326
|
+
conflicts
|
|
327
|
+
} : {
|
|
328
|
+
conflictCount: conflicts.length,
|
|
329
|
+
traitIds
|
|
330
|
+
};
|
|
331
|
+
yield* record({
|
|
332
|
+
type: "trace:module:traits:conflict",
|
|
333
|
+
moduleId: id,
|
|
334
|
+
instanceId: internals.instanceId,
|
|
335
|
+
data
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
throw cause;
|
|
339
|
+
}
|
|
340
|
+
internals.traits.setModuleTraitsSnapshot(snapshot);
|
|
341
|
+
internals.traits.freezeModuleTraits();
|
|
342
|
+
if (diagnosticsLevel !== "off") {
|
|
343
|
+
const data = diagnosticsLevel === "full" ? {
|
|
344
|
+
digest: snapshot.digest,
|
|
345
|
+
count: snapshot.traits.length,
|
|
346
|
+
traits: snapshot.traits,
|
|
347
|
+
provenanceIndex: snapshot.provenanceIndex
|
|
348
|
+
} : {
|
|
349
|
+
digest: snapshot.digest,
|
|
350
|
+
count: snapshot.traits.length
|
|
351
|
+
};
|
|
352
|
+
yield* record({
|
|
353
|
+
type: "trace:module:traits",
|
|
354
|
+
moduleId: id,
|
|
355
|
+
instanceId: internals.instanceId,
|
|
356
|
+
data
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
if (Object.keys(merged).length === 0) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
const onlyModuleLevel = contributions.length === 1 && contributions[0]?.provenance?.originType === "module";
|
|
363
|
+
const program = onlyModuleLevel && baseProgram ? baseProgram : build(stateSchema, merged);
|
|
364
|
+
setModuleTraitsProgram(moduleTag, program);
|
|
365
|
+
registerModuleProgram(id, program);
|
|
366
|
+
yield* install($, program);
|
|
367
|
+
}),
|
|
368
|
+
run: Effect.void
|
|
369
|
+
}));
|
|
370
|
+
attachLogicUnitMeta(logic, {
|
|
371
|
+
id: "__logix_internal:traits:finalize",
|
|
372
|
+
kind: "internal",
|
|
373
|
+
name: "traits:finalize",
|
|
374
|
+
moduleId: id
|
|
375
|
+
});
|
|
376
|
+
return logic;
|
|
377
|
+
};
|
|
378
|
+
const originalImplement = moduleTag.implement;
|
|
379
|
+
moduleTag.implement = ((config) => {
|
|
380
|
+
const userLogics = config.logics ?? [];
|
|
381
|
+
const moduleLevel = def.traits ? [makeModuleTraitsContributionLogic(def.traits)] : [];
|
|
382
|
+
const finalize = makeFinalizeTraitsLogic();
|
|
383
|
+
const mergedLogics = [...moduleLevel, ...userLogics, finalize];
|
|
384
|
+
return originalImplement({
|
|
385
|
+
...config,
|
|
386
|
+
logics: mergedLogics
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
return moduleTag;
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
export {
|
|
393
|
+
Reducer,
|
|
394
|
+
make,
|
|
395
|
+
ModuleTag_exports
|
|
396
|
+
};
|
|
397
|
+
//# sourceMappingURL=chunk-76WT3HOR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ModuleTag.ts","../src/internal/runtime/core/ModuleTraits.ts"],"sourcesContent":["import { Effect, FiberRef, Layer, Schema } from 'effect'\nimport * as Logic from './Logic.js'\nimport * as Action from './internal/action.js'\nimport * as ModuleFactory from './internal/runtime/ModuleFactory.js'\nimport type { FieldPath } from './internal/field-path.js'\nimport { mutateWithoutPatches, mutateWithPatchPaths } from './internal/runtime/core/mutativePatches.js'\nimport { getBoundInternals, setModuleTraitsProgram } from './internal/runtime/core/runtimeInternalsAccessor.js'\nimport * as Debug from './internal/runtime/core/DebugSink.js'\nimport * as LogicUnitMeta from './internal/runtime/core/LogicUnitMeta.js'\nimport type {\n ActionsFromMap,\n AnyModuleShape,\n AnySchema,\n BoundApi,\n ActionOf,\n ModuleImpl,\n ModuleLogic,\n ModuleShape,\n ModuleRuntime,\n ModuleTag,\n ModuleHandle,\n ModuleHandleUnion,\n StateChangeWithMeta,\n StateCommitMeta,\n StateCommitMode,\n StateCommitPriority,\n ReducersFromMap,\n StateOf,\n} from './internal/module.js'\nimport * as StateTrait from './StateTrait.js'\nimport type { StateTraitProgram } from './StateTrait.js'\nimport * as ModuleTraitsRegistry from './internal/debug/ModuleTraitsRegistry.js'\nimport * as ModuleTraits from './internal/runtime/core/ModuleTraits.js'\n\ntype NoInfer_<T> = [T][T extends any ? 0 : never]\n\n/**\n * Public exports for core type definitions such as ModuleTag / ModuleRuntime / ModuleImpl.\n *\n * Kept aligned with `.codex/skills/project-guide/references/runtime-logix/logix-core/api/02-module-and-logic-api.md`.\n * Concrete type definitions live in internal/module.ts; this module wires the factory implementation.\n */\nexport type {\n AnySchema,\n AnyModuleShape,\n ModuleShape,\n ModuleLogic,\n ModuleImpl,\n ModuleRuntime,\n ModuleTag,\n ModuleHandle,\n ModuleHandleUnion,\n StateOf,\n ActionsFromMap,\n ReducersFromMap,\n BoundApi,\n ActionOf,\n StateCommitMode,\n StateCommitPriority,\n StateCommitMeta,\n StateChangeWithMeta,\n} from './internal/module.js'\n\n/**\n * Reducer helper:\n * - `Reducer.mutate` provides the same mutative style as `$.state.mutate`.\n * - Internally uses mutative-based immutable updates to map \"in-place draft mutation\" into a pure `(state, action) => state`.\n *\n * @example\n *\n * const Counter = Logix.ModuleTag.make(\"Counter\", {\n * state: CounterState,\n * actions: CounterActions,\n * reducers: {\n * inc: Logix.ModuleTag.Reducer.mutate((draft, _payload) => {\n * draft.count += 1\n * }),\n * },\n * })\n *\n * yield* $.reducer(\n * \"setValue\",\n * Logix.ModuleTag.Reducer.mutate((draft, payload) => {\n * draft.value = payload\n * }),\n * )\n */\nexport const Reducer = {\n mutate:\n <S, A extends { readonly payload?: any }>(\n mutator: (draft: Logic.Draft<S>, payload: A['payload']) => void,\n ): ((state: S, action: A, sink?: (path: string | FieldPath) => void) => S) =>\n (state, action, sink) => {\n const payload = (action as any)?.payload as A['payload']\n if (!sink) {\n return mutateWithoutPatches(state as S, (draft) => {\n mutator(draft as Logic.Draft<S>, payload)\n })\n }\n\n const { nextState, patchPaths } = mutateWithPatchPaths(state as S, (draft) => {\n mutator(draft as Logic.Draft<S>, payload)\n })\n\n for (const path of patchPaths) {\n sink(path)\n }\n\n return nextState\n },\n\n mutateMap: <\n R extends Readonly<\n Record<string, ((state: any, action: any, sink?: (path: string | FieldPath) => void) => any) | undefined>\n >,\n >(mutators: {\n readonly [K in keyof NoInfer_<R>]?: (\n draft: Logic.Draft<Parameters<NonNullable<NoInfer_<R>[K]>>[0]>,\n payload: Parameters<NonNullable<NoInfer_<R>[K]>>[1] extends { readonly payload: infer P }\n ? P\n : Parameters<NonNullable<NoInfer_<R>[K]>>[1] extends { readonly payload?: infer P }\n ? P | undefined\n : never,\n ) => void\n }): R => {\n const out: Record<string, unknown> = {}\n for (const key of Object.keys(mutators)) {\n const mutator = (mutators as any)[key]\n if (typeof mutator !== 'function') continue\n out[key] = Reducer.mutate(mutator as any)\n }\n return out as any\n },\n}\n\n/**\n * A simplified Shape definition helper, designed for Action Maps.\n * @example type MyShape = Shape<typeof MyState, typeof MyActionMap>\n */\nexport type Shape<S extends AnySchema, M extends Record<string, AnySchema>> = ModuleShape<\n S,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<M & Action.ActionDefs>>>,\n Action.NormalizedActionTokens<M & Action.ActionDefs>\n>\n\nconst makeImpl = <Id extends string, SSchema extends AnySchema, AMap extends Record<string, Action.AnyActionToken>>(\n id: Id,\n def: {\n readonly state: SSchema\n readonly actions: AMap\n readonly reducers?: ReducersFromMap<SSchema, AMap>\n },\n): ModuleTag<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>> =>\n ModuleFactory.Module(id, def) as ModuleTag<Id, ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>>\n\n/**\n * ModuleTag.make:\n * - Defines a domain module Tag using the given id and state/actions/reducers.\n * - The returned ModuleTag is both a Context.Tag and a factory carrying its Shape.\n *\n * Note: since 022, the old `Module` (Tag identity) was renamed to `ModuleTag`; use `Logix.Module` for module definition objects.\n */\nexport const make = <Id extends string, SSchema extends AnySchema, ADefs extends Action.ActionDefs>(\n id: Id,\n def: {\n readonly state: SSchema\n readonly actions: ADefs\n readonly reducers?: ReducersFromMap<SSchema, ADefs>\n /**\n * traits:\n * - Used to attach a StateTraitSpec (see specs/000-module-traits-runtime).\n * - The current implementation builds a Program during ModuleTag.make, and injects a setup-only Logic in `ModuleTag.implement`\n * to call `StateTrait.install`.\n * (Note: if you use `ModuleTag.live` to export a Layer and want trait behavior, call `StateTrait.install` explicitly in logics,\n * or use `ModuleTag.implement` instead.)\n */\n readonly traits?: unknown\n },\n): ModuleTag<\n Id,\n ModuleShape<\n SSchema,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<ADefs>>>,\n Action.NormalizedActionTokens<ADefs>\n >\n> => {\n const actions = Action.normalizeActions(def.actions)\n const moduleTag = makeImpl(id, {\n state: def.state,\n actions,\n reducers: def.reducers as any,\n })\n\n type Sh = ModuleShape<\n SSchema,\n Schema.Schema<ActionsFromMap<Action.NormalizedActionTokens<ADefs>>>,\n Action.NormalizedActionTokens<ADefs>\n >\n\n const stateSchema = def.state as Schema.Schema<any, any>\n const moduleTraitsSpec = def.traits as StateTrait.StateTraitSpec<any> | undefined\n const baseProgram: StateTraitProgram<any> | undefined = moduleTraitsSpec\n ? StateTrait.build(stateSchema as any, moduleTraitsSpec as any)\n : undefined\n\n if (baseProgram) {\n // For TraitLifecycle/Debug/Devtools reads (definition-side hidden slot).\n setModuleTraitsProgram(moduleTag as any, baseProgram)\n ModuleTraitsRegistry.registerModuleProgram(id, baseProgram as StateTraitProgram<any>)\n }\n\n // 023: consolidate the trait \"declaration/merge entry points\" into the setup phase:\n // - module-level traits register as contributions first;\n // - logic-level declares via $.traits.declare;\n // - finally, finalize → freeze → build/install in one shot.\n\n const makeModuleTraitsContributionLogic = (traits: unknown): ModuleLogic<Sh, never, never> => {\n const logic = moduleTag.logic(($) => ({\n setup: Effect.sync(() => {\n if (!traits || typeof traits !== 'object') return\n // module-level provenance uses moduleId as the stable anchor\n // (aligned with 023 data-model: originType=module, originId=moduleId).\n // Note: traitsSpec still reuses StateTraitSpec; do not introduce a second IR.\n const internals = getBoundInternals($ as any)\n internals.traits.registerModuleTraitsContribution({\n traits,\n provenance: {\n originType: 'module',\n originId: id,\n originIdKind: 'explicit',\n originLabel: `module:${id}`,\n },\n })\n }),\n run: Effect.void,\n })) as ModuleLogic<Sh, never, never>\n\n LogicUnitMeta.attachLogicUnitMeta(logic as any, {\n id: '__logix_internal:traits:module_contrib',\n kind: 'internal',\n name: 'traits:module_contrib',\n moduleId: id,\n })\n return logic\n }\n\n const makeFinalizeTraitsLogic = (): ModuleLogic<Sh, never, never> => {\n const logic = moduleTag.logic(($) => ({\n setup: Effect.gen(function* () {\n const internals = getBoundInternals($ as any)\n const diagnosticsLevel = yield* FiberRef.get(Debug.currentDiagnosticsLevel)\n\n const contributions = internals.traits.getModuleTraitsContributions()\n let merged: ModuleTraits.TraitSpec\n let snapshot: ModuleTraits.ModuleTraitsSnapshot\n\n try {\n ;({ merged, snapshot } = ModuleTraits.finalizeTraitContributions({\n moduleId: id,\n contributions,\n }))\n } catch (cause) {\n if (\n diagnosticsLevel !== 'off' &&\n cause &&\n typeof cause === 'object' &&\n (cause as any)._tag === 'ModuleTraitsConflictError'\n ) {\n const conflicts = Array.isArray((cause as any).conflicts)\n ? ((cause as any).conflicts as ReadonlyArray<unknown>)\n : []\n const traitIds = conflicts\n .map((c: any) => (c && typeof c === 'object' ? (c as any).traitId : undefined))\n .filter((t): t is string => typeof t === 'string' && t.length > 0)\n .slice(0, 20)\n\n const data =\n diagnosticsLevel === 'full'\n ? {\n conflictCount: conflicts.length,\n conflicts,\n }\n : {\n conflictCount: conflicts.length,\n traitIds,\n }\n\n yield* Debug.record({\n type: 'trace:module:traits:conflict',\n moduleId: id,\n instanceId: internals.instanceId,\n data,\n } as any)\n }\n\n throw cause\n }\n\n internals.traits.setModuleTraitsSnapshot(snapshot)\n internals.traits.freezeModuleTraits()\n\n if (diagnosticsLevel !== 'off') {\n const data =\n diagnosticsLevel === 'full'\n ? {\n digest: snapshot.digest,\n count: snapshot.traits.length,\n traits: snapshot.traits,\n provenanceIndex: snapshot.provenanceIndex,\n }\n : {\n digest: snapshot.digest,\n count: snapshot.traits.length,\n }\n\n yield* Debug.record({\n type: 'trace:module:traits',\n moduleId: id,\n instanceId: internals.instanceId,\n data,\n } as any)\n }\n\n if (Object.keys(merged).length === 0) {\n return\n }\n\n const onlyModuleLevel = contributions.length === 1 && contributions[0]?.provenance?.originType === 'module'\n\n // Build a one-shot Program from the final merged Spec, and install it during initialization.\n // - If there is only a module-level contribution, reuse the program built in ModuleTag.make (useful for Debug/TraitLifecycle).\n const program =\n onlyModuleLevel && baseProgram ? baseProgram : StateTrait.build(stateSchema as any, merged as any)\n\n // For TraitLifecycle/Debug/Devtools reads (definition-side hidden slot).\n setModuleTraitsProgram(moduleTag as any, program)\n ModuleTraitsRegistry.registerModuleProgram(id, program as StateTraitProgram<any>)\n\n yield* StateTrait.install($ as unknown as BoundApi<any, any>, program)\n }),\n run: Effect.void,\n })) as ModuleLogic<Sh, never, never>\n\n LogicUnitMeta.attachLogicUnitMeta(logic as any, {\n id: '__logix_internal:traits:finalize',\n kind: 'internal',\n name: 'traits:finalize',\n moduleId: id,\n })\n\n return logic\n }\n\n // Wrap implement: inject (1) optional module-level contribution logic, and (2) required finalize+install logic.\n const originalImplement = moduleTag.implement\n ;(moduleTag as any).implement = (<R = never>(config: {\n initial: StateOf<typeof moduleTag.shape>\n logics?: Array<ModuleLogic<typeof moduleTag.shape, R, any>>\n imports?: ReadonlyArray<Layer.Layer<any, any, any> | ModuleImpl<any, AnyModuleShape, any>>\n processes?: ReadonlyArray<Effect.Effect<void, any, any>>\n }) => {\n const userLogics = (config.logics ?? []) as Array<ModuleLogic<typeof moduleTag.shape, R, any>>\n\n const moduleLevel = def.traits ? [makeModuleTraitsContributionLogic(def.traits) as any] : []\n\n const finalize = makeFinalizeTraitsLogic() as ModuleLogic<typeof moduleTag.shape, R, any>\n\n const mergedLogics = [...moduleLevel, ...userLogics, finalize]\n\n return originalImplement<R>({\n ...config,\n logics: mergedLogics,\n })\n }) as typeof moduleTag.implement\n\n return moduleTag\n}\n","import { fnv1a32, stableStringify } from '../../digest.js'\n\nexport type TraitId = string\n\nexport type TraitOriginType = 'module' | 'logicUnit'\nexport type TraitOriginIdKind = 'explicit' | 'derived'\n\nexport interface TraitProvenance {\n readonly originType: TraitOriginType\n readonly originId: string\n readonly originIdKind: TraitOriginIdKind\n /**\n * Human-readable label for Devtools/error messages (e.g. \"logicUnit:Profile#1\").\n */\n readonly originLabel: string\n /**\n * Optional location summary (e.g. file path / callsite); for navigation only and not used for semantic decisions.\n */\n readonly path?: string\n}\n\n/**\n * TraitSpec:\n * - Minimal representation of \"trait declarations\": a record keyed by traitId.\n * - The concrete value shape is defined by the specific trait system (e.g. StateTraitSpec).\n * - Value serializability is not constrained here (runtime install may depend on functions), but snapshots/evidence exports\n * must only include serializable subsets.\n */\nexport type TraitSpec = object\n\nexport interface TraitContribution {\n readonly traits: TraitSpec\n readonly provenance: TraitProvenance\n}\n\nexport interface ModuleTraitItem {\n readonly traitId: TraitId\n readonly name: string\n readonly description?: string\n}\n\nexport type TraitConflictKind = 'duplicate_traitId' | 'missing_requires' | 'excludes_violation'\n\nexport interface TraitConflict {\n readonly kind: TraitConflictKind\n readonly traitId: TraitId\n readonly sources: ReadonlyArray<TraitProvenance>\n readonly missing?: ReadonlyArray<TraitId>\n readonly present?: ReadonlyArray<TraitId>\n}\n\nexport class ModuleTraitsConflictError extends Error {\n readonly _tag = 'ModuleTraitsConflictError'\n\n constructor(\n readonly moduleId: string,\n readonly conflicts: ReadonlyArray<TraitConflict>,\n ) {\n super(\n [\n `[ModuleTraitsConflictError] Conflicting traitIds found (moduleId=${moduleId}).`,\n ...conflicts.map((c) =>\n c.kind === 'duplicate_traitId'\n ? `- duplicate ${c.traitId}: ${c.sources.map((s) => `${s.originType}:${s.originId}`).join(', ')}`\n : c.kind === 'missing_requires'\n ? `- missing requires for ${c.traitId}: ${(c.missing ?? []).join(', ')}; sources=${c.sources\n .map((s) => `${s.originType}:${s.originId}`)\n .join(', ')}`\n : `- excludes violation for ${c.traitId}: present=${(c.present ?? []).join(', ')}; sources=${c.sources\n .map((s) => `${s.originType}:${s.originId}`)\n .join(', ')}`,\n ),\n ].join('\\n'),\n )\n }\n}\n\nexport interface ModuleTraitsSnapshot {\n readonly moduleId: string\n readonly digest: string\n readonly traits: ReadonlyArray<ModuleTraitItem>\n readonly provenanceIndex: Record<TraitId, TraitProvenance>\n}\n\nconst toProvenanceKey = (p: TraitProvenance): string =>\n `${p.originType}:${p.originId}:${p.originIdKind}:${p.originLabel}:${p.path ?? ''}`\n\nconst compareProvenance = (a: TraitProvenance, b: TraitProvenance): number => {\n const type = a.originType.localeCompare(b.originType)\n if (type !== 0) return type\n const id = a.originId.localeCompare(b.originId)\n if (id !== 0) return id\n const kind = a.originIdKind.localeCompare(b.originIdKind)\n if (kind !== 0) return kind\n const label = a.originLabel.localeCompare(b.originLabel)\n if (label !== 0) return label\n return String(a.path ?? '').localeCompare(String(b.path ?? ''))\n}\n\nconst originTypeOrder = (t: TraitOriginType): number => (t === 'module' ? 0 : 1)\n\nconst compareTraitIdByProvenance = (\n a: { readonly traitId: TraitId; readonly provenance: TraitProvenance },\n b: { readonly traitId: TraitId; readonly provenance: TraitProvenance },\n): number => {\n const ta = originTypeOrder(a.provenance.originType) - originTypeOrder(b.provenance.originType)\n if (ta !== 0) return ta\n const oa = a.provenance.originId.localeCompare(b.provenance.originId)\n if (oa !== 0) return oa\n return a.traitId.localeCompare(b.traitId)\n}\n\nconst extractStringArray = (value: unknown): ReadonlyArray<string> => {\n if (!Array.isArray(value)) return []\n const out: Array<string> = []\n for (const v of value) {\n if (typeof v !== 'string') continue\n const s = v.trim()\n if (!s) continue\n out.push(s)\n }\n return out\n}\n\nconst getTraitRequires = (value: unknown): ReadonlyArray<TraitId> => {\n if (!value || typeof value !== 'object') return []\n const direct = extractStringArray((value as any).requires)\n return direct\n}\n\nconst getTraitExcludes = (value: unknown): ReadonlyArray<TraitId> => {\n if (!value || typeof value !== 'object') return []\n const direct = extractStringArray((value as any).excludes)\n return direct\n}\n\nconst getTraitName = (traitId: TraitId, value: unknown): string => {\n if (value && typeof value === 'object') {\n const n = (value as any).name\n if (typeof n === 'string' && n.trim().length > 0) return n.trim()\n }\n return traitId\n}\n\nconst getTraitDescription = (value: unknown): string | undefined => {\n if (value && typeof value === 'object') {\n const d = (value as any).description\n if (typeof d === 'string' && d.trim().length > 0) return d.trim()\n }\n return undefined\n}\n\nexport const finalizeTraitContributions = (args: {\n readonly moduleId: string\n readonly contributions: ReadonlyArray<TraitContribution>\n}): { readonly merged: TraitSpec; readonly snapshot: ModuleTraitsSnapshot } => {\n const traitById = new Map<TraitId, { readonly value: unknown; readonly provenance: TraitProvenance }>()\n\n const duplicateSources = new Map<TraitId, Array<TraitProvenance>>()\n\n const contributions = [...args.contributions].sort((a, b) => compareProvenance(a.provenance, b.provenance))\n\n for (const c of contributions) {\n const traits = c.traits\n if (!traits || typeof traits !== 'object') continue\n for (const traitId of Object.keys(traits).sort((a, b) => a.localeCompare(b))) {\n const value = (traits as Record<string, unknown>)[traitId]\n if (value === undefined) continue\n\n const prev = traitById.get(traitId)\n if (!prev) {\n traitById.set(traitId, { value, provenance: c.provenance })\n continue\n }\n\n const sources = duplicateSources.get(traitId) ?? [prev.provenance]\n sources.push(c.provenance)\n duplicateSources.set(traitId, sources)\n }\n }\n\n const conflicts: Array<TraitConflict> = []\n const registerConflict = (conflict: TraitConflict) => {\n const unique = new Map<string, TraitProvenance>()\n for (const s of conflict.sources) {\n unique.set(toProvenanceKey(s), s)\n }\n conflicts.push({\n ...conflict,\n sources: Array.from(unique.values()).sort(compareProvenance),\n })\n }\n\n // 1) duplicate traitId conflicts\n for (const traitId of Array.from(duplicateSources.keys()).sort((a, b) => a.localeCompare(b))) {\n registerConflict({\n kind: 'duplicate_traitId',\n traitId,\n sources: duplicateSources.get(traitId) ?? [],\n })\n }\n\n const merged: Record<string, unknown> = {}\n const provenanceIndex: Record<string, TraitProvenance> = {}\n const traits: Array<ModuleTraitItem> = []\n\n const entries: Array<{ readonly traitId: TraitId; readonly value: unknown; readonly provenance: TraitProvenance }> =\n []\n for (const traitId of traitById.keys()) {\n const entry = traitById.get(traitId)\n if (!entry) continue\n entries.push({ traitId, value: entry.value, provenance: entry.provenance })\n }\n\n const ids = entries\n .slice()\n .sort(compareTraitIdByProvenance)\n .map((e) => e.traitId)\n\n for (const traitId of ids) {\n const entry = traitById.get(traitId)\n if (!entry) continue\n merged[traitId] = entry.value\n provenanceIndex[traitId] = entry.provenance\n traits.push({\n traitId,\n name: getTraitName(traitId, entry.value),\n description: getTraitDescription(entry.value),\n })\n }\n\n // 2) consistency checks (FR-007): requires / excludes\n const present = new Set(ids)\n\n for (const traitId of ids) {\n const entry = traitById.get(traitId)\n if (!entry) continue\n\n const requires = getTraitRequires(entry.value)\n if (requires.length > 0) {\n const missing = requires.filter((r) => !present.has(r))\n if (missing.length > 0) {\n registerConflict({\n kind: 'missing_requires',\n traitId,\n missing: Array.from(new Set(missing)).sort((a, b) => a.localeCompare(b)),\n sources: [entry.provenance],\n })\n }\n }\n\n const excludes = getTraitExcludes(entry.value)\n if (excludes.length > 0) {\n const presentExcluded = excludes.filter((e) => present.has(e))\n if (presentExcluded.length > 0) {\n const otherSources: Array<TraitProvenance> = []\n for (const otherId of presentExcluded) {\n const other = traitById.get(otherId)\n if (other) otherSources.push(other.provenance)\n }\n registerConflict({\n kind: 'excludes_violation',\n traitId,\n present: Array.from(new Set(presentExcluded)).sort((a, b) => a.localeCompare(b)),\n sources: [entry.provenance, ...otherSources],\n })\n }\n }\n }\n\n if (conflicts.length > 0) {\n const kindOrder: Record<TraitConflictKind, number> = {\n duplicate_traitId: 0,\n missing_requires: 1,\n excludes_violation: 2,\n }\n conflicts.sort((a, b) => {\n const k = kindOrder[a.kind] - kindOrder[b.kind]\n if (k !== 0) return k\n return a.traitId.localeCompare(b.traitId)\n })\n throw new ModuleTraitsConflictError(args.moduleId, conflicts)\n }\n\n const digestBase = {\n moduleId: args.moduleId,\n traits,\n provenanceIndex,\n } as const\n\n const digest = `mtraits:023:${fnv1a32(stableStringify(digestBase))}`\n\n return {\n merged,\n snapshot: {\n moduleId: args.moduleId,\n digest,\n traits,\n provenanceIndex,\n },\n }\n}\n"],"mappings":"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","names":["traits"]}
|