@logixjs/core 0.0.1 → 0.0.2
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/LICENSE +201 -0
- package/dist/{Bound-BN1DQ_lM.d.ts → Bound-CEa1ihvH.d.ts} +2 -2
- package/dist/{Bound-BPIfH9SS.d.cts → Bound-CNLNkC7c.d.cts} +2 -2
- package/dist/Bound.cjs +620 -163
- package/dist/Bound.cjs.map +1 -1
- package/dist/Bound.d.cts +3 -3
- package/dist/Bound.d.ts +3 -3
- package/dist/Bound.js +14 -14
- package/dist/{Debug-Bq8Sqjcr.d.cts → Debug-BhMYr-1i.d.cts} +3 -3
- package/dist/{Debug-B5q5Bkzx.d.ts → Debug-ByM7m4Ft.d.ts} +3 -3
- package/dist/Debug.cjs +553 -32
- package/dist/Debug.cjs.map +1 -1
- package/dist/Debug.d.cts +10 -8
- package/dist/Debug.d.ts +10 -8
- package/dist/Debug.js +12 -10
- package/dist/EffectOp.cjs.map +1 -1
- package/dist/EffectOp.js +2 -3
- package/dist/EffectOp.js.map +1 -1
- package/dist/Env.cjs +664 -6
- package/dist/Env.cjs.map +1 -1
- package/dist/Env.js +5 -2
- package/dist/ExternalStore-BAz83PVq.d.cts +60 -0
- package/dist/ExternalStore-BYWPbYs8.d.ts +60 -0
- package/dist/ExternalStore.cjs +746 -0
- package/dist/ExternalStore.cjs.map +1 -0
- package/dist/ExternalStore.d.cts +4 -0
- package/dist/ExternalStore.d.ts +4 -0
- package/dist/ExternalStore.js +19 -0
- package/dist/ExternalStore.js.map +1 -0
- package/dist/{Flow-1fZT8MpX.d.cts → Flow-BlSoMmhV.d.cts} +2 -2
- package/dist/{Flow-BhpjE22E.d.ts → Flow-CQSGve5c.d.ts} +2 -2
- package/dist/Flow.cjs +2 -2
- package/dist/Flow.cjs.map +1 -1
- package/dist/Flow.d.cts +4 -4
- package/dist/Flow.d.ts +4 -4
- package/dist/Flow.js +7 -8
- package/dist/{Handle-D_cLW1Z3.d.ts → Handle-B7PSmsrY.d.ts} +1 -1
- package/dist/{Handle-D8D1zPb_.d.cts → Handle-ByovhL-c.d.cts} +1 -1
- package/dist/Handle.d.cts +3 -3
- package/dist/Handle.d.ts +3 -3
- package/dist/{Kernel-CnGE1Fyk.d.ts → Kernel-DGSpS4GM.d.ts} +2 -2
- package/dist/{Kernel-8kC-jOda.d.cts → Kernel-DZAk-Mrn.d.cts} +2 -2
- package/dist/Kernel.cjs +680 -22
- package/dist/Kernel.cjs.map +1 -1
- package/dist/Kernel.d.cts +10 -8
- package/dist/Kernel.d.ts +10 -8
- package/dist/Kernel.js +7 -4
- package/dist/{Link-Db7975nU.d.ts → Link-Cm4eR9n0.d.ts} +10 -3
- package/dist/{Link-fX8x1eCK.d.cts → Link-DF8i8iWR.d.cts} +10 -3
- package/dist/Link.cjs +1128 -86
- package/dist/Link.cjs.map +1 -1
- package/dist/Link.d.cts +3 -3
- package/dist/Link.d.ts +3 -3
- package/dist/Link.js +30 -25
- package/dist/{Logic-DRh4sDZj.d.cts → Logic-BcQA0AvE.d.cts} +1 -1
- package/dist/{Logic-BRjEMr-W.d.ts → Logic-OotSE1xw.d.ts} +1 -1
- package/dist/Logic.d.cts +3 -3
- package/dist/Logic.d.ts +3 -3
- package/dist/{MatchBuilder-CJk5oCkR.d.cts → MatchBuilder-BNDJ8waF.d.ts} +1 -1
- package/dist/{MatchBuilder-0QOc-nlU.d.ts → MatchBuilder-CvZ5WY1B.d.cts} +1 -1
- package/dist/MatchBuilder.d.cts +4 -4
- package/dist/MatchBuilder.d.ts +4 -4
- package/dist/Middleware-D8tUDLv_.d.cts +100 -0
- package/dist/Middleware-DS7CbTTN.d.ts +100 -0
- package/dist/Middleware.cjs +461 -13
- package/dist/Middleware.cjs.map +1 -1
- package/dist/Middleware.d.cts +2 -86
- package/dist/Middleware.d.ts +2 -86
- package/dist/Middleware.js +13 -11
- package/dist/{Module-DnzluX2J.d.ts → Module-CFj0I2yE.d.ts} +45 -18
- package/dist/{Module-B_0xRDMR.d.cts → Module-DpXPW9EQ.d.cts} +45 -18
- package/dist/Module.cjs +8583 -5741
- package/dist/Module.cjs.map +1 -1
- package/dist/Module.d.cts +5 -4
- package/dist/Module.d.ts +5 -4
- package/dist/Module.js +32 -27
- package/dist/ModuleTag-BcVF6z7B.d.ts +113 -0
- package/dist/ModuleTag-DuZXo_NS.d.cts +113 -0
- package/dist/ModuleTag.cjs +2609 -1232
- package/dist/ModuleTag.cjs.map +1 -1
- package/dist/ModuleTag.d.cts +4 -4
- package/dist/ModuleTag.d.ts +4 -4
- package/dist/ModuleTag.js +28 -25
- package/dist/{Observability-cY4kLn0S.d.ts → Observability-D-ZWeEVb.d.ts} +22 -15
- package/dist/{Observability-COqEvp2C.d.cts → Observability-V7sRMYTh.d.cts} +22 -15
- package/dist/Observability.cjs +1938 -640
- package/dist/Observability.cjs.map +1 -1
- package/dist/Observability.d.cts +4 -4
- package/dist/Observability.d.ts +4 -4
- package/dist/Observability.js +21 -19
- package/dist/{Process-mL8fHDSB.d.cts → Process-B55aJMFk.d.cts} +29 -4
- package/dist/{Process-CM9xbMdP.d.ts → Process-DvhFEwUS.d.ts} +29 -4
- package/dist/Process.cjs +1122 -85
- package/dist/Process.cjs.map +1 -1
- package/dist/Process.d.cts +4 -3
- package/dist/Process.d.ts +4 -3
- package/dist/Process.js +27 -22
- package/dist/{ReadQuery-BlMwhe-F.d.ts → ReadQuery-C4vZ8Prc.d.ts} +2 -2
- package/dist/{ReadQuery-SinbStGF.d.ts → ReadQuery-CafjlJQo.d.cts} +1 -1
- package/dist/{ReadQuery-SinbStGF.d.cts → ReadQuery-CafjlJQo.d.ts} +1 -1
- package/dist/{ReadQuery-CL5XlXts.d.cts → ReadQuery-mc0NgrFV.d.cts} +2 -2
- package/dist/ReadQuery.cjs +3 -3
- package/dist/ReadQuery.cjs.map +1 -1
- package/dist/ReadQuery.d.cts +2 -2
- package/dist/ReadQuery.d.ts +2 -2
- package/dist/ReadQuery.js +3 -3
- package/dist/{Reflection-CQnKwPXj.d.ts → Reflection-C8xZ267q.d.ts} +88 -7
- package/dist/{Reflection-Kabo1mlU.d.cts → Reflection-DP7Vsv3f.d.cts} +88 -7
- package/dist/Reflection.cjs +2934 -1553
- package/dist/Reflection.cjs.map +1 -1
- package/dist/Reflection.d.cts +14 -11
- package/dist/Reflection.d.ts +14 -11
- package/dist/Reflection.js +26 -21
- package/dist/Resource.cjs +670 -12
- package/dist/Resource.cjs.map +1 -1
- package/dist/Resource.js +6 -3
- package/dist/Root.cjs +675 -17
- package/dist/Root.cjs.map +1 -1
- package/dist/Root.js +7 -3
- package/dist/{Runtime-CtyzZG4i.d.ts → Runtime-BWc9YfUB.d.ts} +37 -7
- package/dist/{Runtime-B-aL-f29.d.cts → Runtime-PShIC4DW.d.cts} +37 -7
- package/dist/Runtime.cjs +1899 -809
- package/dist/Runtime.cjs.map +1 -1
- package/dist/Runtime.d.cts +14 -11
- package/dist/Runtime.d.ts +14 -11
- package/dist/Runtime.js +33 -28
- package/dist/ScopeRegistry.cjs +668 -10
- package/dist/ScopeRegistry.cjs.map +1 -1
- package/dist/ScopeRegistry.js +6 -3
- package/dist/{StateTrait-OWhbj12c.d.cts → StateTrait-CQsDlXJm.d.cts} +23 -6
- package/dist/{StateTrait-BGsZghTz.d.ts → StateTrait-YvJzVDKl.d.ts} +23 -6
- package/dist/StateTrait.cjs +1475 -370
- package/dist/StateTrait.cjs.map +1 -1
- package/dist/StateTrait.d.cts +7 -5
- package/dist/StateTrait.d.ts +7 -5
- package/dist/StateTrait.js +17 -14
- package/dist/{TraitLifecycle-LdIWmKlg.d.ts → TraitLifecycle-CjIBICAA.d.ts} +2 -2
- package/dist/{TraitLifecycle-CwV5WPFX.d.cts → TraitLifecycle-NmqGiXPC.d.cts} +2 -2
- package/dist/TraitLifecycle.cjs +489 -32
- package/dist/TraitLifecycle.cjs.map +1 -1
- package/dist/TraitLifecycle.d.cts +4 -4
- package/dist/TraitLifecycle.d.ts +4 -4
- package/dist/TraitLifecycle.js +7 -7
- package/dist/Workflow-BlFG_20_.d.cts +414 -0
- package/dist/Workflow-CW9S_aAP.d.ts +414 -0
- package/dist/Workflow.cjs +2977 -0
- package/dist/Workflow.cjs.map +1 -0
- package/dist/Workflow.d.cts +7 -0
- package/dist/Workflow.d.ts +7 -0
- package/dist/Workflow.js +55 -0
- package/dist/Workflow.js.map +1 -0
- package/dist/{chunk-G5ZBFPNU.js → chunk-2A4UKO2D.js} +2 -2
- package/dist/chunk-2DE6D42I.js +248 -0
- package/dist/chunk-2DE6D42I.js.map +1 -0
- package/dist/{chunk-ANLBCBDC.js → chunk-2DVLMSOE.js} +6 -6
- package/dist/{chunk-BE3HW4FY.js → chunk-34CF6OGE.js} +14 -16
- package/dist/chunk-34CF6OGE.js.map +1 -0
- package/dist/{chunk-ZFY7U2FR.js → chunk-3LPIXG56.js} +43 -3
- package/dist/chunk-3LPIXG56.js.map +1 -0
- package/dist/chunk-3VZYDNXZ.js +10 -0
- package/dist/chunk-3VZYDNXZ.js.map +1 -0
- package/dist/{chunk-3TMODYZV.js → chunk-3XO4HR6V.js} +2 -2
- package/dist/chunk-46FGVWRF.js +817 -0
- package/dist/chunk-46FGVWRF.js.map +1 -0
- package/dist/chunk-4LODUXFI.js +288 -0
- package/dist/chunk-4LODUXFI.js.map +1 -0
- package/dist/{chunk-GMPEOUP2.js → chunk-4MZ7BT3R.js} +2 -2
- package/dist/chunk-4MZ7BT3R.js.map +1 -0
- package/dist/{chunk-TKZ7MEIA.js → chunk-53GVPGSM.js} +2 -2
- package/dist/{chunk-KP7MUZNX.js → chunk-5W2V2NVJ.js} +2 -2
- package/dist/chunk-5W2V2NVJ.js.map +1 -0
- package/dist/chunk-6DACKW3D.js +613 -0
- package/dist/chunk-6DACKW3D.js.map +1 -0
- package/dist/chunk-AQ7L2QZ5.js +1395 -0
- package/dist/chunk-AQ7L2QZ5.js.map +1 -0
- package/dist/{chunk-NZJKFF45.js → chunk-C2UZZQ76.js} +2 -2
- package/dist/chunk-CCKP5Z6F.js +701 -0
- package/dist/chunk-CCKP5Z6F.js.map +1 -0
- package/dist/chunk-CUKM2XUW.js +27 -0
- package/dist/{chunk-QCHIQWAJ.js.map → chunk-CUKM2XUW.js.map} +1 -1
- package/dist/{chunk-M2RGJPXX.js → chunk-DBD6Q6JH.js} +3 -3
- package/dist/{chunk-ZGDVUPTM.js → chunk-EB4RGQO3.js} +2 -2
- package/dist/{chunk-PAYXCY6A.js → chunk-G7ESIQTI.js} +12 -14
- package/dist/chunk-G7ESIQTI.js.map +1 -0
- package/dist/chunk-GPBAZQ23.js +348 -0
- package/dist/chunk-GPBAZQ23.js.map +1 -0
- package/dist/{chunk-OFADUJWJ.js → chunk-I4LCE5OY.js} +3 -5
- package/dist/{chunk-OFADUJWJ.js.map → chunk-I4LCE5OY.js.map} +1 -1
- package/dist/{chunk-DFNM3WX2.js → chunk-IMCC6TBN.js} +158 -39
- package/dist/chunk-IMCC6TBN.js.map +1 -0
- package/dist/{chunk-76WT3HOR.js → chunk-IROZNQAF.js} +22 -21
- package/dist/chunk-IROZNQAF.js.map +1 -0
- package/dist/{chunk-TAAPQVZN.js → chunk-ISKNULNH.js} +2 -2
- package/dist/chunk-J3CWXIPV.js +242 -0
- package/dist/chunk-J3CWXIPV.js.map +1 -0
- package/dist/{chunk-PYOE4VSI.js → chunk-JBKYRTCS.js} +224 -161
- package/dist/chunk-JBKYRTCS.js.map +1 -0
- package/dist/{chunk-66ALHVEX.js → chunk-KKIAYH4X.js} +3 -3
- package/dist/{chunk-3RMKLXHX.js → chunk-KLDVG3SY.js} +2 -2
- package/dist/{chunk-BABLDP24.js → chunk-KSZQYSEH.js} +3 -3
- package/dist/chunk-KSZQYSEH.js.map +1 -0
- package/dist/{chunk-CW6T36TN.js → chunk-M3M7JFAH.js} +4 -4
- package/dist/chunk-M3M7JFAH.js.map +1 -0
- package/dist/{chunk-THATMZXD.js → chunk-MLB253V2.js} +2 -2
- package/dist/{chunk-THATMZXD.js.map → chunk-MLB253V2.js.map} +1 -1
- package/dist/{chunk-JGIWG6SR.js → chunk-MS77U77X.js} +664 -550
- package/dist/chunk-MS77U77X.js.map +1 -0
- package/dist/chunk-MW4FA3MW.js +23 -0
- package/dist/chunk-MW4FA3MW.js.map +1 -0
- package/dist/chunk-MYKNINNN.js +228 -0
- package/dist/chunk-MYKNINNN.js.map +1 -0
- package/dist/{chunk-4CQAV7YB.js → chunk-O6TTQXTY.js} +2 -2
- package/dist/{chunk-NBD3KUOZ.js → chunk-OJDJ4VDQ.js} +35 -24
- package/dist/chunk-OJDJ4VDQ.js.map +1 -0
- package/dist/{chunk-NQZ2OSGR.js → chunk-PVZEMNJY.js} +9 -9
- package/dist/chunk-PVZEMNJY.js.map +1 -0
- package/dist/chunk-RN26DV2M.js +271 -0
- package/dist/chunk-RN26DV2M.js.map +1 -0
- package/dist/{chunk-JCXGZRMU.js → chunk-RQQW3IQC.js} +3 -3
- package/dist/chunk-RQQW3IQC.js.map +1 -0
- package/dist/{chunk-24VULZ7A.js → chunk-TKOGZDD6.js} +3 -3
- package/dist/{chunk-EGK3KN7B.js → chunk-TQYLVXGY.js} +70 -39
- package/dist/chunk-TQYLVXGY.js.map +1 -0
- package/dist/{chunk-QMM6O4CD.js → chunk-UACD2CL2.js} +15 -3
- package/dist/{chunk-QMM6O4CD.js.map → chunk-UACD2CL2.js.map} +1 -1
- package/dist/{chunk-M3WTHJHJ.js → chunk-VH575UTV.js} +30 -34
- package/dist/chunk-VH575UTV.js.map +1 -0
- package/dist/{chunk-AUIR5O6W.js → chunk-WWBMC24F.js} +9 -15
- package/dist/chunk-WWBMC24F.js.map +1 -0
- package/dist/{chunk-JWOYLO27.js → chunk-WYJUJV4L.js} +80 -7
- package/dist/chunk-WYJUJV4L.js.map +1 -0
- package/dist/{chunk-EY4NZKDR.js → chunk-XFMMPYNU.js} +2 -2
- package/dist/chunk-Y4VRBIS6.js +35 -0
- package/dist/chunk-Y4VRBIS6.js.map +1 -0
- package/dist/{chunk-DMBALCE2.js → chunk-ZC7MSQ5U.js} +77 -4
- package/dist/chunk-ZC7MSQ5U.js.map +1 -0
- package/dist/{chunk-OGWBVHB3.js → chunk-ZCK6SCOE.js} +67 -8
- package/dist/chunk-ZCK6SCOE.js.map +1 -0
- package/dist/{chunk-IHVBV5C2.js → chunk-ZTFTABXV.js} +2 -1
- package/dist/chunk-ZTFTABXV.js.map +1 -0
- package/dist/index.cjs +9532 -5017
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +163 -27
- package/dist/index.d.ts +163 -27
- package/dist/index.js +119 -56
- package/dist/index.js.map +1 -1
- package/dist/{ir-BMP7yxJJ.d.cts → ir-C-Zm_GlZ.d.cts} +1 -1
- package/dist/{ir-DUOz6H-5.d.ts → ir-DGyGiwVe.d.ts} +1 -1
- package/dist/{module-k7m3txak.d.ts → module-DqQ1U-Me.d.ts} +129 -100
- package/dist/{module-B8CBqIZ_.d.cts → module-doenaCsZ.d.cts} +129 -100
- package/package.json +12 -1
- package/dist/ModuleTag-C8FHY_sY.d.ts +0 -93
- package/dist/ModuleTag-EGbgBMpZ.d.cts +0 -93
- package/dist/chunk-3QMIVH35.js +0 -43
- package/dist/chunk-3QMIVH35.js.map +0 -1
- package/dist/chunk-76WT3HOR.js.map +0 -1
- package/dist/chunk-AUIR5O6W.js.map +0 -1
- package/dist/chunk-BABLDP24.js.map +0 -1
- package/dist/chunk-BE3HW4FY.js.map +0 -1
- package/dist/chunk-CW6T36TN.js.map +0 -1
- package/dist/chunk-DFNM3WX2.js.map +0 -1
- package/dist/chunk-DMBALCE2.js.map +0 -1
- package/dist/chunk-EGK3KN7B.js.map +0 -1
- package/dist/chunk-GMPEOUP2.js.map +0 -1
- package/dist/chunk-IHVBV5C2.js.map +0 -1
- package/dist/chunk-JCXGZRMU.js.map +0 -1
- package/dist/chunk-JGIWG6SR.js.map +0 -1
- package/dist/chunk-JWOYLO27.js.map +0 -1
- package/dist/chunk-KIXAU3GM.js +0 -137
- package/dist/chunk-KIXAU3GM.js.map +0 -1
- package/dist/chunk-KP7MUZNX.js.map +0 -1
- package/dist/chunk-M3WTHJHJ.js.map +0 -1
- package/dist/chunk-M7IYCTJV.js +0 -79
- package/dist/chunk-M7IYCTJV.js.map +0 -1
- package/dist/chunk-NBD3KUOZ.js.map +0 -1
- package/dist/chunk-NQZ2OSGR.js.map +0 -1
- package/dist/chunk-OGWBVHB3.js.map +0 -1
- package/dist/chunk-PAYXCY6A.js.map +0 -1
- package/dist/chunk-PYOE4VSI.js.map +0 -1
- package/dist/chunk-QCHIQWAJ.js +0 -21
- package/dist/chunk-VZB726PE.js +0 -93
- package/dist/chunk-VZB726PE.js.map +0 -1
- package/dist/chunk-W3TEWHLO.js +0 -568
- package/dist/chunk-W3TEWHLO.js.map +0 -1
- package/dist/chunk-ZFLHVFUC.js +0 -192
- package/dist/chunk-ZFLHVFUC.js.map +0 -1
- package/dist/chunk-ZFY7U2FR.js.map +0 -1
- /package/dist/{chunk-G5ZBFPNU.js.map → chunk-2A4UKO2D.js.map} +0 -0
- /package/dist/{chunk-ANLBCBDC.js.map → chunk-2DVLMSOE.js.map} +0 -0
- /package/dist/{chunk-3TMODYZV.js.map → chunk-3XO4HR6V.js.map} +0 -0
- /package/dist/{chunk-TKZ7MEIA.js.map → chunk-53GVPGSM.js.map} +0 -0
- /package/dist/{chunk-NZJKFF45.js.map → chunk-C2UZZQ76.js.map} +0 -0
- /package/dist/{chunk-M2RGJPXX.js.map → chunk-DBD6Q6JH.js.map} +0 -0
- /package/dist/{chunk-ZGDVUPTM.js.map → chunk-EB4RGQO3.js.map} +0 -0
- /package/dist/{chunk-TAAPQVZN.js.map → chunk-ISKNULNH.js.map} +0 -0
- /package/dist/{chunk-66ALHVEX.js.map → chunk-KKIAYH4X.js.map} +0 -0
- /package/dist/{chunk-3RMKLXHX.js.map → chunk-KLDVG3SY.js.map} +0 -0
- /package/dist/{chunk-4CQAV7YB.js.map → chunk-O6TTQXTY.js.map} +0 -0
- /package/dist/{chunk-24VULZ7A.js.map → chunk-TKOGZDD6.js.map} +0 -0
- /package/dist/{chunk-EY4NZKDR.js.map → chunk-XFMMPYNU.js.map} +0 -0
|
@@ -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 `docs/ssot/runtime/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 ModuleRuntimeOfShape,\n ModuleTag,\n ModuleHandle,\n ModuleHandleUnion,\n StateOf,\n ActionsFromMap,\n ReducersFromMap,\n BoundApi,\n ActionOf,\n LogicEffect,\n DispatchEffect,\n ActionForTag,\n BoundApiRootApi,\n BoundApiStateApi,\n BoundApiDispatchersApi,\n BoundApiDispatchApi,\n BoundApiLifecycleApi,\n BoundApiUseApi,\n BoundApiTraitsApi,\n BoundApiReducerApi,\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 ActionTokenMap<ADefs extends Action.ActionDefs> = Action.NormalizedActionTokens<ADefs>\n\nexport type ActionUnionOf<ADefs extends Action.ActionDefs> = ActionsFromMap<ActionTokenMap<ADefs>>\n\nexport type ActionSchemaOf<ADefs extends Action.ActionDefs> = Schema.Schema<ActionUnionOf<ADefs>>\n\nexport type Shape<SSchema extends AnySchema, ADefs extends Action.ActionDefs> = ModuleShape<\n SSchema,\n ActionSchemaOf<ADefs>,\n ActionTokenMap<ADefs>\n>\n\nexport type ShapeFromActionTokenMap<\n SSchema extends AnySchema,\n AMap extends Record<string, Action.AnyActionToken>,\n> = ModuleShape<SSchema, Schema.Schema<ActionsFromMap<AMap>>, AMap>\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, ShapeFromActionTokenMap<SSchema, AMap>> =>\n ModuleFactory.Module(id, def) as ModuleTag<Id, ShapeFromActionTokenMap<SSchema, 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<Id, Shape<SSchema, ADefs>> => {\n const actions = Action.normalizeActions(def.actions)\n const moduleTag: ModuleTag<Id, Shape<SSchema, ADefs>> = makeImpl(id, {\n state: def.state,\n actions,\n reducers: def.reducers as any,\n })\n\n type Sh = Shape<SSchema, ADefs>\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 compareString = (a: string, b: string): number => (a < b ? -1 : a > b ? 1 : 0)\n\nconst compareProvenance = (a: TraitProvenance, b: TraitProvenance): number => {\n const type = compareString(a.originType, b.originType)\n if (type !== 0) return type\n const id = compareString(a.originId, b.originId)\n if (id !== 0) return id\n const kind = compareString(a.originIdKind, b.originIdKind)\n if (kind !== 0) return kind\n const label = compareString(a.originLabel, b.originLabel)\n if (label !== 0) return label\n return compareString(String(a.path ?? ''), 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 = compareString(a.provenance.originId, b.provenance.originId)\n if (oa !== 0) return oa\n return compareString(a.traitId, 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()) {\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()) {\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(),\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(),\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 compareString(a.traitId, 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"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getNodeEnv,
|
|
3
3
|
isDevEnv
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AQ7L2QZ5.js";
|
|
5
5
|
import {
|
|
6
6
|
__export
|
|
7
7
|
} from "./chunk-PZ5AY32C.js";
|
|
@@ -20,4 +20,4 @@ export {
|
|
|
20
20
|
isDevEnv2 as isDevEnv,
|
|
21
21
|
Env_exports
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
23
|
+
//# sourceMappingURL=chunk-ISKNULNH.js.map
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
// src/internal/state-trait/meta.ts
|
|
2
|
+
var uniqSortedStrings = (input) => {
|
|
3
|
+
const set = /* @__PURE__ */ new Set();
|
|
4
|
+
for (const item of input) {
|
|
5
|
+
const v = item.trim();
|
|
6
|
+
if (!v) continue;
|
|
7
|
+
set.add(v);
|
|
8
|
+
}
|
|
9
|
+
return Array.from(set).sort();
|
|
10
|
+
};
|
|
11
|
+
var isPlainRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
12
|
+
var sanitizeJsonValue = (input, depth, stats) => {
|
|
13
|
+
if (input === null) return null;
|
|
14
|
+
if (typeof input === "string") return input;
|
|
15
|
+
if (typeof input === "boolean") return input;
|
|
16
|
+
if (typeof input === "number") {
|
|
17
|
+
if (!Number.isFinite(input)) {
|
|
18
|
+
stats.dropped += 1;
|
|
19
|
+
stats.nonSerializable += 1;
|
|
20
|
+
stats.nonFiniteNumber += 1;
|
|
21
|
+
return void 0;
|
|
22
|
+
}
|
|
23
|
+
return input;
|
|
24
|
+
}
|
|
25
|
+
if (depth >= 6) {
|
|
26
|
+
stats.dropped += 1;
|
|
27
|
+
stats.depthExceeded += 1;
|
|
28
|
+
return void 0;
|
|
29
|
+
}
|
|
30
|
+
if (Array.isArray(input)) {
|
|
31
|
+
const out = [];
|
|
32
|
+
for (const item of input) {
|
|
33
|
+
const v = sanitizeJsonValue(item, depth + 1, stats);
|
|
34
|
+
if (v !== void 0) out.push(v);
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
if (isPlainRecord(input)) {
|
|
39
|
+
const keys = Object.keys(input).sort();
|
|
40
|
+
const out = {};
|
|
41
|
+
for (const key of keys) {
|
|
42
|
+
const v = sanitizeJsonValue(input[key], depth + 1, stats);
|
|
43
|
+
if (v !== void 0) out[key] = v;
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
stats.dropped += 1;
|
|
48
|
+
stats.nonSerializable += 1;
|
|
49
|
+
return void 0;
|
|
50
|
+
};
|
|
51
|
+
var pushSample = (target, value, limit) => {
|
|
52
|
+
if (target.length >= limit) return;
|
|
53
|
+
target.push(value);
|
|
54
|
+
};
|
|
55
|
+
var sanitizeWithReport = (input) => {
|
|
56
|
+
if (input === null || input === void 0) return {};
|
|
57
|
+
if (typeof input !== "object" || Array.isArray(input)) {
|
|
58
|
+
return { report: { invalidInput: true } };
|
|
59
|
+
}
|
|
60
|
+
const record = input;
|
|
61
|
+
const out = {};
|
|
62
|
+
const reportUnknownKeys = [];
|
|
63
|
+
let unknownKeyCount = 0;
|
|
64
|
+
const reportDroppedKeys = [];
|
|
65
|
+
let droppedTagItems = 0;
|
|
66
|
+
const reportIgnoredAnnotationKeys = [];
|
|
67
|
+
let ignoredAnnotationKeyCount = 0;
|
|
68
|
+
const reportDroppedAnnotationKeys = [];
|
|
69
|
+
let droppedAnnotationKeyCount = 0;
|
|
70
|
+
const stats = { dropped: 0, nonSerializable: 0, depthExceeded: 0, nonFiniteNumber: 0 };
|
|
71
|
+
const allowed = /* @__PURE__ */ new Set([
|
|
72
|
+
"label",
|
|
73
|
+
"description",
|
|
74
|
+
"group",
|
|
75
|
+
"docsUrl",
|
|
76
|
+
"cacheGroup",
|
|
77
|
+
"canonical",
|
|
78
|
+
"tags",
|
|
79
|
+
"annotations"
|
|
80
|
+
]);
|
|
81
|
+
for (const key of Object.keys(record)) {
|
|
82
|
+
if (allowed.has(key) || key.startsWith("x-")) continue;
|
|
83
|
+
unknownKeyCount += 1;
|
|
84
|
+
pushSample(reportUnknownKeys, key, 8);
|
|
85
|
+
}
|
|
86
|
+
const pickString = (key) => {
|
|
87
|
+
const value = record[key];
|
|
88
|
+
if (typeof value !== "string") return;
|
|
89
|
+
const trimmed = value.trim();
|
|
90
|
+
if (!trimmed) return;
|
|
91
|
+
out[key] = trimmed;
|
|
92
|
+
};
|
|
93
|
+
pickString("label");
|
|
94
|
+
pickString("description");
|
|
95
|
+
pickString("group");
|
|
96
|
+
pickString("docsUrl");
|
|
97
|
+
pickString("cacheGroup");
|
|
98
|
+
const canonical = record.canonical;
|
|
99
|
+
if (canonical !== void 0 && canonical !== null && typeof canonical !== "boolean") {
|
|
100
|
+
pushSample(reportDroppedKeys, "canonical", 8);
|
|
101
|
+
} else if (typeof canonical === "boolean") {
|
|
102
|
+
out.canonical = canonical;
|
|
103
|
+
}
|
|
104
|
+
const tagsRaw = record.tags;
|
|
105
|
+
if (typeof tagsRaw === "string") {
|
|
106
|
+
const tags = uniqSortedStrings([tagsRaw]);
|
|
107
|
+
if (tags.length > 0) out.tags = tags;
|
|
108
|
+
} else if (Array.isArray(tagsRaw)) {
|
|
109
|
+
const raw = tagsRaw.filter((x) => typeof x === "string");
|
|
110
|
+
droppedTagItems += tagsRaw.length - raw.length;
|
|
111
|
+
const tags = uniqSortedStrings(raw);
|
|
112
|
+
if (tags.length > 0) out.tags = tags;
|
|
113
|
+
droppedTagItems += raw.length - tags.length;
|
|
114
|
+
} else if (tagsRaw !== void 0 && tagsRaw !== null) {
|
|
115
|
+
pushSample(reportDroppedKeys, "tags", 8);
|
|
116
|
+
}
|
|
117
|
+
const annotations = {};
|
|
118
|
+
const annotationKeys = Object.keys(record).filter((k) => k.startsWith("x-")).sort();
|
|
119
|
+
for (const key of annotationKeys) {
|
|
120
|
+
const v = sanitizeJsonValue(record[key], 0, stats);
|
|
121
|
+
if (v !== void 0) {
|
|
122
|
+
annotations[key] = v;
|
|
123
|
+
} else {
|
|
124
|
+
droppedAnnotationKeyCount += 1;
|
|
125
|
+
pushSample(reportDroppedAnnotationKeys, key, 8);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const annotationsRaw = record.annotations;
|
|
129
|
+
if (annotationsRaw !== void 0 && annotationsRaw !== null && !isPlainRecord(annotationsRaw)) {
|
|
130
|
+
pushSample(reportDroppedKeys, "annotations", 8);
|
|
131
|
+
} else if (isPlainRecord(annotationsRaw)) {
|
|
132
|
+
const keys = Object.keys(annotationsRaw).sort();
|
|
133
|
+
for (const key of keys) {
|
|
134
|
+
if (!key.startsWith("x-")) {
|
|
135
|
+
ignoredAnnotationKeyCount += 1;
|
|
136
|
+
pushSample(reportIgnoredAnnotationKeys, key, 8);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const v = sanitizeJsonValue(annotationsRaw[key], 0, stats);
|
|
140
|
+
if (v !== void 0) {
|
|
141
|
+
annotations[key] = v;
|
|
142
|
+
} else {
|
|
143
|
+
droppedAnnotationKeyCount += 1;
|
|
144
|
+
pushSample(reportDroppedAnnotationKeys, key, 8);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (Object.keys(annotations).length > 0) out.annotations = annotations;
|
|
149
|
+
for (const key of ["label", "description", "group", "docsUrl", "cacheGroup"]) {
|
|
150
|
+
const value = record[key];
|
|
151
|
+
if (value !== void 0 && value !== null && typeof value !== "string") {
|
|
152
|
+
pushSample(reportDroppedKeys, key, 8);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const meta = Object.keys(out).length > 0 ? out : void 0;
|
|
156
|
+
const report = (() => {
|
|
157
|
+
const hasUnknownKeys = unknownKeyCount > 0;
|
|
158
|
+
const hasDroppedKeys = reportDroppedKeys.length > 0;
|
|
159
|
+
const hasDroppedTagItems = droppedTagItems > 0;
|
|
160
|
+
const hasIgnoredAnnotationKeys = ignoredAnnotationKeyCount > 0;
|
|
161
|
+
const hasDroppedAnnotations = droppedAnnotationKeyCount > 0 || stats.dropped > 0;
|
|
162
|
+
if (!hasUnknownKeys && !hasDroppedKeys && !hasDroppedTagItems && !hasIgnoredAnnotationKeys && !hasDroppedAnnotations) {
|
|
163
|
+
return void 0;
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
...hasUnknownKeys ? { unknownKeys: reportUnknownKeys, unknownKeyCount } : {},
|
|
167
|
+
...hasDroppedKeys ? { droppedKeys: uniqSortedStrings(reportDroppedKeys) } : {},
|
|
168
|
+
...hasDroppedTagItems ? { droppedTagItems } : {},
|
|
169
|
+
...hasIgnoredAnnotationKeys ? { ignoredAnnotationKeys: uniqSortedStrings(reportIgnoredAnnotationKeys), ignoredAnnotationKeyCount } : {},
|
|
170
|
+
...hasDroppedAnnotations ? {
|
|
171
|
+
droppedAnnotationKeys: uniqSortedStrings(reportDroppedAnnotationKeys),
|
|
172
|
+
droppedAnnotationKeyCount,
|
|
173
|
+
droppedAnnotationValues: stats.dropped,
|
|
174
|
+
droppedAnnotationNonSerializable: stats.nonSerializable,
|
|
175
|
+
droppedAnnotationDepthExceeded: stats.depthExceeded,
|
|
176
|
+
droppedAnnotationNonFiniteNumber: stats.nonFiniteNumber
|
|
177
|
+
} : {}
|
|
178
|
+
};
|
|
179
|
+
})();
|
|
180
|
+
return report ? { meta, report } : { meta };
|
|
181
|
+
};
|
|
182
|
+
var sanitize = (input) => sanitizeWithReport(input).meta;
|
|
183
|
+
var stableStringify = (meta) => {
|
|
184
|
+
const out = {};
|
|
185
|
+
const keys = Object.keys(meta).sort();
|
|
186
|
+
for (const k of keys) {
|
|
187
|
+
out[k] = meta[k];
|
|
188
|
+
}
|
|
189
|
+
return JSON.stringify(out);
|
|
190
|
+
};
|
|
191
|
+
var equals = (a, b) => {
|
|
192
|
+
if (a === b) return true;
|
|
193
|
+
if (!a || !b) return false;
|
|
194
|
+
return stableStringify(a) === stableStringify(b);
|
|
195
|
+
};
|
|
196
|
+
var mergeCanonical = (current, incoming) => {
|
|
197
|
+
const existing = current.meta;
|
|
198
|
+
if (!existing) {
|
|
199
|
+
return {
|
|
200
|
+
meta: incoming.meta,
|
|
201
|
+
origin: incoming.origin,
|
|
202
|
+
conflicts: current.conflicts
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (equals(existing, incoming.meta)) {
|
|
206
|
+
return current;
|
|
207
|
+
}
|
|
208
|
+
const conflicts = [...current.conflicts ?? []];
|
|
209
|
+
const push = (conflict) => {
|
|
210
|
+
const exists = conflicts.some((c) => c.origin === conflict.origin && equals(c.meta, conflict.meta));
|
|
211
|
+
if (!exists) conflicts.push(conflict);
|
|
212
|
+
};
|
|
213
|
+
const existingCanonical = existing.canonical === true;
|
|
214
|
+
const incomingCanonical = incoming.meta.canonical === true;
|
|
215
|
+
if (!existingCanonical && incomingCanonical) {
|
|
216
|
+
push({
|
|
217
|
+
origin: current.origin ?? "unknown",
|
|
218
|
+
meta: existing
|
|
219
|
+
});
|
|
220
|
+
return {
|
|
221
|
+
meta: incoming.meta,
|
|
222
|
+
origin: incoming.origin,
|
|
223
|
+
conflicts
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
push({
|
|
227
|
+
origin: incoming.origin,
|
|
228
|
+
meta: incoming.meta
|
|
229
|
+
});
|
|
230
|
+
return {
|
|
231
|
+
meta: existing,
|
|
232
|
+
origin: current.origin ?? incoming.origin,
|
|
233
|
+
conflicts
|
|
234
|
+
};
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
export {
|
|
238
|
+
sanitizeWithReport,
|
|
239
|
+
sanitize,
|
|
240
|
+
mergeCanonical
|
|
241
|
+
};
|
|
242
|
+
//# sourceMappingURL=chunk-J3CWXIPV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/state-trait/meta.ts"],"sourcesContent":["import type { JsonValue } from '../observability/jsonValue.js'\n\nexport type TraitMeta = Readonly<{\n readonly label?: string\n readonly description?: string\n readonly tags?: ReadonlyArray<string>\n readonly group?: string\n readonly docsUrl?: string\n readonly cacheGroup?: string\n /**\n * Extension annotations: only accepts `x-*` keys (anchors for capabilities like Phantom Source / Drift Detection).\n *\n * Constraints:\n * - Must be serializable (JSON values).\n * - Must be slim (keep only a few key hints; don't stuff large objects).\n */\n readonly annotations?: Readonly<Record<string, JsonValue>>\n /**\n * Semantic hint: when the same entity (e.g. the same resourceId) has multiple inconsistent meta declarations,\n * the one with canonical=true becomes the \"display canonical\", and others are recorded as conflicts.\n */\n readonly canonical?: boolean\n}>\n\nexport type TraitMetaSanitizeReport = Readonly<{\n /**\n * invalidInput:\n * - Input was not a plain object (e.g. string/array/function/etc).\n */\n readonly invalidInput?: boolean\n /**\n * unknownKeys:\n * - Top-level keys that are ignored (not part of TraitMeta, and not `x-*` legacy annotations).\n */\n readonly unknownKeys?: ReadonlyArray<string>\n readonly unknownKeyCount?: number\n /**\n * droppedKeys:\n * - Known keys that exist but are dropped due to invalid value type (e.g. tags is not string/array).\n */\n readonly droppedKeys?: ReadonlyArray<string>\n /**\n * droppedTagItems:\n * - Number of non-string/empty tag items dropped during normalization.\n */\n readonly droppedTagItems?: number\n /**\n * annotations:\n * - Only accepts `x-*` keys; invalid keys/values are dropped.\n */\n readonly ignoredAnnotationKeys?: ReadonlyArray<string>\n readonly ignoredAnnotationKeyCount?: number\n readonly droppedAnnotationKeys?: ReadonlyArray<string>\n readonly droppedAnnotationKeyCount?: number\n readonly droppedAnnotationValues?: number\n readonly droppedAnnotationNonSerializable?: number\n readonly droppedAnnotationDepthExceeded?: number\n readonly droppedAnnotationNonFiniteNumber?: number\n}>\n\nexport type TraitMetaConflict = Readonly<{\n readonly origin: string\n readonly meta: TraitMeta\n}>\n\nconst uniqSortedStrings = (input: ReadonlyArray<string>): ReadonlyArray<string> => {\n const set = new Set<string>()\n for (const item of input) {\n const v = item.trim()\n if (!v) continue\n set.add(v)\n }\n return Array.from(set).sort()\n}\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\ntype SanitizeJsonValueStats = {\n dropped: number\n nonSerializable: number\n depthExceeded: number\n nonFiniteNumber: number\n}\n\nconst sanitizeJsonValue = (input: unknown, depth: number, stats: SanitizeJsonValueStats): JsonValue | undefined => {\n if (input === null) return null\n\n if (typeof input === 'string') return input\n if (typeof input === 'boolean') return input\n if (typeof input === 'number') {\n if (!Number.isFinite(input)) {\n stats.dropped += 1\n stats.nonSerializable += 1\n stats.nonFiniteNumber += 1\n return undefined\n }\n return input\n }\n\n if (depth >= 6) {\n stats.dropped += 1\n stats.depthExceeded += 1\n return undefined\n }\n\n if (Array.isArray(input)) {\n const out: Array<JsonValue> = []\n for (const item of input) {\n const v = sanitizeJsonValue(item, depth + 1, stats)\n if (v !== undefined) out.push(v)\n }\n return out\n }\n\n if (isPlainRecord(input)) {\n const keys = Object.keys(input).sort()\n const out: Record<string, JsonValue> = {}\n for (const key of keys) {\n const v = sanitizeJsonValue(input[key], depth + 1, stats)\n if (v !== undefined) out[key] = v\n }\n return out\n }\n\n stats.dropped += 1\n stats.nonSerializable += 1\n return undefined\n}\n\nconst pushSample = (target: Array<string>, value: string, limit: number): void => {\n if (target.length >= limit) return\n target.push(value)\n}\n\nexport const sanitizeWithReport = (input: unknown): Readonly<{\n readonly meta?: TraitMeta\n readonly report?: TraitMetaSanitizeReport\n}> => {\n if (input === null || input === undefined) return {}\n if (typeof input !== 'object' || Array.isArray(input)) {\n return { report: { invalidInput: true } }\n }\n\n const record = input as Record<string, unknown>\n const out: Record<string, unknown> = {}\n\n const reportUnknownKeys: Array<string> = []\n let unknownKeyCount = 0\n const reportDroppedKeys: Array<string> = []\n let droppedTagItems = 0\n\n const reportIgnoredAnnotationKeys: Array<string> = []\n let ignoredAnnotationKeyCount = 0\n const reportDroppedAnnotationKeys: Array<string> = []\n let droppedAnnotationKeyCount = 0\n const stats: SanitizeJsonValueStats = { dropped: 0, nonSerializable: 0, depthExceeded: 0, nonFiniteNumber: 0 }\n\n const allowed = new Set([\n 'label',\n 'description',\n 'group',\n 'docsUrl',\n 'cacheGroup',\n 'canonical',\n 'tags',\n 'annotations',\n ])\n\n for (const key of Object.keys(record)) {\n if (allowed.has(key) || key.startsWith('x-')) continue\n unknownKeyCount += 1\n pushSample(reportUnknownKeys, key, 8)\n }\n\n const pickString = (key: keyof TraitMeta): void => {\n const value = record[key as string]\n if (typeof value !== 'string') return\n const trimmed = value.trim()\n if (!trimmed) return\n out[key] = trimmed\n }\n\n pickString('label')\n pickString('description')\n pickString('group')\n pickString('docsUrl')\n pickString('cacheGroup')\n\n const canonical = record.canonical\n if (canonical !== undefined && canonical !== null && typeof canonical !== 'boolean') {\n pushSample(reportDroppedKeys, 'canonical', 8)\n } else if (typeof canonical === 'boolean') {\n out.canonical = canonical\n }\n\n const tagsRaw = record.tags\n if (typeof tagsRaw === 'string') {\n const tags = uniqSortedStrings([tagsRaw])\n if (tags.length > 0) out.tags = tags\n } else if (Array.isArray(tagsRaw)) {\n const raw = tagsRaw.filter((x): x is string => typeof x === 'string')\n droppedTagItems += tagsRaw.length - raw.length\n const tags = uniqSortedStrings(raw)\n if (tags.length > 0) out.tags = tags\n // count empty/whitespace tags dropped by uniqSortedStrings\n droppedTagItems += raw.length - tags.length\n } else if (tagsRaw !== undefined && tagsRaw !== null) {\n pushSample(reportDroppedKeys, 'tags', 8)\n }\n\n const annotations: Record<string, JsonValue> = {}\n\n // legacy: allow passing `x-*` keys at the top-level (untyped input), then normalize into `annotations`.\n const annotationKeys = Object.keys(record)\n .filter((k) => k.startsWith('x-'))\n .sort()\n for (const key of annotationKeys) {\n const v = sanitizeJsonValue(record[key], 0, stats)\n if (v !== undefined) {\n annotations[key] = v\n } else {\n droppedAnnotationKeyCount += 1\n pushSample(reportDroppedAnnotationKeys, key, 8)\n }\n }\n\n // preferred: typed `annotations` field (only accepts `x-*` keys).\n const annotationsRaw = record.annotations\n if (annotationsRaw !== undefined && annotationsRaw !== null && !isPlainRecord(annotationsRaw)) {\n pushSample(reportDroppedKeys, 'annotations', 8)\n } else if (isPlainRecord(annotationsRaw)) {\n const keys = Object.keys(annotationsRaw)\n .sort()\n for (const key of keys) {\n if (!key.startsWith('x-')) {\n ignoredAnnotationKeyCount += 1\n pushSample(reportIgnoredAnnotationKeys, key, 8)\n continue\n }\n\n const v = sanitizeJsonValue(annotationsRaw[key], 0, stats)\n if (v !== undefined) {\n annotations[key] = v\n } else {\n droppedAnnotationKeyCount += 1\n pushSample(reportDroppedAnnotationKeys, key, 8)\n }\n }\n }\n\n if (Object.keys(annotations).length > 0) out.annotations = annotations\n\n // Dropped keys for invalid string fields (only track invalid types; empty string is ignored as low-signal).\n for (const key of ['label', 'description', 'group', 'docsUrl', 'cacheGroup'] as const) {\n const value = record[key]\n if (value !== undefined && value !== null && typeof value !== 'string') {\n pushSample(reportDroppedKeys, key, 8)\n }\n }\n\n const meta = Object.keys(out).length > 0 ? (out as TraitMeta) : undefined\n\n const report: TraitMetaSanitizeReport | undefined = (() => {\n const hasUnknownKeys = unknownKeyCount > 0\n const hasDroppedKeys = reportDroppedKeys.length > 0\n const hasDroppedTagItems = droppedTagItems > 0\n const hasIgnoredAnnotationKeys = ignoredAnnotationKeyCount > 0\n const hasDroppedAnnotations = droppedAnnotationKeyCount > 0 || stats.dropped > 0\n\n if (\n !hasUnknownKeys &&\n !hasDroppedKeys &&\n !hasDroppedTagItems &&\n !hasIgnoredAnnotationKeys &&\n !hasDroppedAnnotations\n ) {\n return undefined\n }\n\n return {\n ...(hasUnknownKeys ? { unknownKeys: reportUnknownKeys, unknownKeyCount } : {}),\n ...(hasDroppedKeys ? { droppedKeys: uniqSortedStrings(reportDroppedKeys) } : {}),\n ...(hasDroppedTagItems ? { droppedTagItems } : {}),\n ...(hasIgnoredAnnotationKeys\n ? { ignoredAnnotationKeys: uniqSortedStrings(reportIgnoredAnnotationKeys), ignoredAnnotationKeyCount }\n : {}),\n ...(hasDroppedAnnotations\n ? {\n droppedAnnotationKeys: uniqSortedStrings(reportDroppedAnnotationKeys),\n droppedAnnotationKeyCount,\n droppedAnnotationValues: stats.dropped,\n droppedAnnotationNonSerializable: stats.nonSerializable,\n droppedAnnotationDepthExceeded: stats.depthExceeded,\n droppedAnnotationNonFiniteNumber: stats.nonFiniteNumber,\n }\n : {}),\n } satisfies TraitMetaSanitizeReport\n })()\n\n return report ? { meta, report } : { meta }\n}\n\nexport const sanitize = (input: unknown): TraitMeta | undefined => sanitizeWithReport(input).meta\n\nconst stableStringify = (meta: TraitMeta): string => {\n const out: Record<string, unknown> = {}\n const keys = Object.keys(meta).sort()\n for (const k of keys) {\n out[k] = (meta as any)[k]\n }\n return JSON.stringify(out)\n}\n\nexport const equals = (a: TraitMeta | undefined, b: TraitMeta | undefined): boolean => {\n if (a === b) return true\n if (!a || !b) return false\n return stableStringify(a) === stableStringify(b)\n}\n\nexport type CanonicalMergeInput = Readonly<{\n readonly meta?: TraitMeta\n readonly origin?: string\n readonly conflicts?: ReadonlyArray<TraitMetaConflict>\n}>\n\nexport type CanonicalMergeResult = Readonly<{\n readonly meta?: TraitMeta\n readonly origin?: string\n readonly conflicts?: ReadonlyArray<TraitMetaConflict>\n}>\n\nexport const mergeCanonical = (\n current: CanonicalMergeInput,\n incoming: Readonly<{ readonly origin: string; readonly meta: TraitMeta }>,\n): CanonicalMergeResult => {\n const existing = current.meta\n if (!existing) {\n return {\n meta: incoming.meta,\n origin: incoming.origin,\n conflicts: current.conflicts,\n }\n }\n\n if (equals(existing, incoming.meta)) {\n return current\n }\n\n const conflicts: Array<TraitMetaConflict> = [...((current.conflicts ?? []) as ReadonlyArray<TraitMetaConflict>)]\n\n const push = (conflict: TraitMetaConflict): void => {\n const exists = conflicts.some((c) => c.origin === conflict.origin && equals(c.meta, conflict.meta))\n if (!exists) conflicts.push(conflict)\n }\n\n const existingCanonical = existing.canonical === true\n const incomingCanonical = incoming.meta.canonical === true\n\n if (!existingCanonical && incomingCanonical) {\n push({\n origin: current.origin ?? 'unknown',\n meta: existing,\n })\n return {\n meta: incoming.meta,\n origin: incoming.origin,\n conflicts,\n }\n }\n\n push({\n origin: incoming.origin,\n meta: incoming.meta,\n })\n\n return {\n meta: existing,\n origin: current.origin ?? incoming.origin,\n conflicts,\n }\n}\n"],"mappings":"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","names":[]}
|