@logixjs/sandbox 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.
Files changed (248) hide show
  1. package/LICENSE +201 -0
  2. package/package.json +3 -1
  3. package/public/sandbox/chunks/chunk-2AUQRESB.js +1114 -0
  4. package/public/sandbox/chunks/chunk-2F72LQKW.js +194 -0
  5. package/public/sandbox/chunks/chunk-2PYDGDD3.js +4071 -0
  6. package/public/sandbox/chunks/chunk-2UGKSXDZ.js +16 -0
  7. package/public/sandbox/chunks/chunk-2XVE7F26.js +153 -0
  8. package/public/sandbox/chunks/chunk-3A7TFNZN.js +219 -0
  9. package/public/sandbox/chunks/chunk-3BHC6JAV.js +1070 -0
  10. package/public/sandbox/chunks/chunk-3U4CAKCX.js +61 -0
  11. package/public/sandbox/chunks/chunk-3VU3JLZO.js +272 -0
  12. package/public/sandbox/chunks/chunk-4CPONKWY.js +1170 -0
  13. package/public/sandbox/chunks/chunk-4GMUQTWH.js +850 -0
  14. package/public/sandbox/chunks/chunk-4KIYG5E4.js +749 -0
  15. package/public/sandbox/chunks/chunk-4MY35XR3.js +175 -0
  16. package/public/sandbox/chunks/chunk-5DNHJMHA.js +69 -0
  17. package/public/sandbox/chunks/chunk-5EC4S7X6.js +42 -0
  18. package/public/sandbox/chunks/chunk-5FB7QFSH.js +227 -0
  19. package/public/sandbox/chunks/chunk-5GEYCJW2.js +206 -0
  20. package/public/sandbox/chunks/chunk-5PT7Q5SS.js +373 -0
  21. package/public/sandbox/chunks/chunk-5WN5IGKA.js +166 -0
  22. package/public/sandbox/chunks/chunk-5XOBKSOT.js +213 -0
  23. package/public/sandbox/chunks/chunk-67RVISUC.js +313 -0
  24. package/public/sandbox/chunks/chunk-6ELJEKZS.js +12 -0
  25. package/public/sandbox/chunks/chunk-6FKWRVP4.js +85 -0
  26. package/public/sandbox/chunks/chunk-6JRP52YT.js +34 -0
  27. package/public/sandbox/chunks/chunk-6JYAC3G6.js +42 -0
  28. package/public/sandbox/chunks/chunk-6TUOP63Q.js +86 -0
  29. package/public/sandbox/chunks/{chunk-A6JFUNQQ.js → chunk-74C5VW7Z.js} +2 -2
  30. package/public/sandbox/chunks/chunk-75DQFC5M.js +16 -0
  31. package/public/sandbox/chunks/{chunk-UCFEP3BH.js → chunk-7GPAF2UK.js} +1 -1
  32. package/public/sandbox/chunks/chunk-7KQFTS2Y.js +135 -0
  33. package/public/sandbox/chunks/chunk-7POKWYE3.js +112 -0
  34. package/public/sandbox/chunks/chunk-7VUEF5F3.js +395 -0
  35. package/public/sandbox/chunks/chunk-7W5APZS2.js +77 -0
  36. package/public/sandbox/chunks/chunk-A6OFCXDQ.js +397 -0
  37. package/public/sandbox/chunks/chunk-A7HLOSO6.js +216 -0
  38. package/public/sandbox/chunks/chunk-AGF4RRCB.js +408 -0
  39. package/public/sandbox/chunks/chunk-ASJSJAAL.js +122 -0
  40. package/public/sandbox/chunks/chunk-ASVMK364.js +283 -0
  41. package/public/sandbox/chunks/chunk-AUDTI2BQ.js +895 -0
  42. package/public/sandbox/chunks/chunk-B2SZTA3M.js +16 -0
  43. package/public/sandbox/chunks/chunk-B6YS2UMV.js +372 -0
  44. package/public/sandbox/chunks/chunk-BCEO3MGD.js +244 -0
  45. package/public/sandbox/chunks/chunk-BCOO65D4.js +373 -0
  46. package/public/sandbox/chunks/chunk-BJOWSSEL.js +38 -0
  47. package/public/sandbox/chunks/chunk-BS2WBFW4.js +373 -0
  48. package/public/sandbox/chunks/chunk-BUVHG3NJ.js +439 -0
  49. package/public/sandbox/chunks/chunk-BVE33AN6.js +42 -0
  50. package/public/sandbox/chunks/chunk-BWTGJZVP.js +19 -0
  51. package/public/sandbox/chunks/chunk-BXD7GZC3.js +1025 -0
  52. package/public/sandbox/chunks/chunk-BZH4EUUD.js +164 -0
  53. package/public/sandbox/chunks/{chunk-HFV5GJPK.js → chunk-C2MYMMO4.js} +3 -3
  54. package/public/sandbox/chunks/chunk-CRE4NJJ6.js +271 -0
  55. package/public/sandbox/chunks/chunk-CVZPRIDB.js +706 -0
  56. package/public/sandbox/chunks/chunk-CWOXD5NG.js +991 -0
  57. package/public/sandbox/chunks/chunk-D6DOC3BJ.js +373 -0
  58. package/public/sandbox/chunks/chunk-DEPSGFSY.js +1698 -0
  59. package/public/sandbox/chunks/chunk-DM7C5NP5.js +819 -0
  60. package/public/sandbox/chunks/chunk-DN33LMOF.js +1112 -0
  61. package/public/sandbox/chunks/{chunk-S46P7MC6.js → chunk-DT7YIIWE.js} +2 -2
  62. package/public/sandbox/chunks/chunk-DVB5WRCI.js +260 -0
  63. package/public/sandbox/chunks/{chunk-TOHCFMQS.js → chunk-E3EVW7NR.js} +11 -18
  64. package/public/sandbox/chunks/chunk-E5BV567Q.js +417 -0
  65. package/public/sandbox/chunks/chunk-E7BIWMQQ.js +203 -0
  66. package/public/sandbox/chunks/chunk-EAKGPSOQ.js +83 -0
  67. package/public/sandbox/chunks/chunk-EGUYL2ER.js +75 -0
  68. package/public/sandbox/chunks/chunk-EP5GQYZ5.js +85 -0
  69. package/public/sandbox/chunks/chunk-ET6CJEHC.js +221 -0
  70. package/public/sandbox/chunks/chunk-EU67YZHZ.js +1070 -0
  71. package/public/sandbox/chunks/{chunk-PTSJJANP.js → chunk-EYNDQLSB.js} +1 -1
  72. package/public/sandbox/chunks/{chunk-CEGSWZ5S.js → chunk-EZTMVCJF.js} +1 -1
  73. package/public/sandbox/chunks/chunk-F5CLVIS6.js +907 -0
  74. package/public/sandbox/chunks/chunk-F743SKYD.js +85 -0
  75. package/public/sandbox/chunks/chunk-FEGFZ5OX.js +86 -0
  76. package/public/sandbox/chunks/chunk-FG5B7ZX3.js +373 -0
  77. package/public/sandbox/chunks/chunk-FKZPYMDG.js +373 -0
  78. package/public/sandbox/chunks/chunk-FNLXHWIU.js +220 -0
  79. package/public/sandbox/chunks/chunk-FQRUTYAD.js +1991 -0
  80. package/public/sandbox/chunks/{chunk-VLYP4WUS.js → chunk-FY5A73NK.js} +5 -5
  81. package/public/sandbox/chunks/chunk-G7FAOG3O.js +221 -0
  82. package/public/sandbox/chunks/chunk-GFXHUC7Y.js +73 -0
  83. package/public/sandbox/chunks/chunk-GIPXUIZQ.js +534 -0
  84. package/public/sandbox/chunks/chunk-GP37MEGJ.js +52 -0
  85. package/public/sandbox/chunks/chunk-GXL5QCMF.js +4511 -0
  86. package/public/sandbox/chunks/chunk-GZ2NSE6A.js +177 -0
  87. package/public/sandbox/chunks/chunk-GZATW4YD.js +69 -0
  88. package/public/sandbox/chunks/chunk-H4EBXROQ.js +166 -0
  89. package/public/sandbox/chunks/chunk-HETCPK6Z.js +153 -0
  90. package/public/sandbox/chunks/chunk-HGUFQ2QC.js +4431 -0
  91. package/public/sandbox/chunks/chunk-HGV3VNH3.js +255 -0
  92. package/public/sandbox/chunks/chunk-HIJ67QWR.js +5397 -0
  93. package/public/sandbox/chunks/chunk-IDHERBKW.js +1114 -0
  94. package/public/sandbox/chunks/chunk-IDTK4FIY.js +102 -0
  95. package/public/sandbox/chunks/chunk-ILFVY7H5.js +164 -0
  96. package/public/sandbox/chunks/chunk-ISGSRYGO.js +57 -0
  97. package/public/sandbox/chunks/chunk-J45VPU24.js +408 -0
  98. package/public/sandbox/chunks/chunk-JAUIM3O5.js +42 -0
  99. package/public/sandbox/chunks/chunk-JB7OQEM6.js +373 -0
  100. package/public/sandbox/chunks/chunk-JCKW6NHD.js +15 -0
  101. package/public/sandbox/chunks/chunk-JMA7GY7Z.js +221 -0
  102. package/public/sandbox/chunks/chunk-JY46J6IL.js +836 -0
  103. package/public/sandbox/chunks/{chunk-X72PZOFA.js → chunk-K2MQ66O7.js} +1 -1
  104. package/public/sandbox/chunks/chunk-KA7PZA6F.js +464 -0
  105. package/public/sandbox/chunks/chunk-KDEQTUID.js +102 -0
  106. package/public/sandbox/chunks/chunk-KDJR27JV.js +1696 -0
  107. package/public/sandbox/chunks/chunk-KFE3JO6N.js +77 -0
  108. package/public/sandbox/chunks/chunk-KLDSYWT5.js +536 -0
  109. package/public/sandbox/chunks/chunk-KQWWFYBF.js +203 -0
  110. package/public/sandbox/chunks/chunk-KTFZSXOW.js +6473 -0
  111. package/public/sandbox/chunks/chunk-KXVIC55U.js +108 -0
  112. package/public/sandbox/chunks/{chunk-HNEDTEGQ.js → chunk-L4PNO2H6.js} +1 -1
  113. package/public/sandbox/chunks/{chunk-WE4STGO2.js → chunk-L4ZNW5DI.js} +2 -2
  114. package/public/sandbox/chunks/chunk-LBUINGZ4.js +836 -0
  115. package/public/sandbox/chunks/chunk-LIYPPU6I.js +112 -0
  116. package/public/sandbox/chunks/chunk-LJHTOJXW.js +221 -0
  117. package/public/sandbox/chunks/{chunk-BWSNPKO5.js → chunk-LQL23SWJ.js} +2 -2
  118. package/public/sandbox/chunks/chunk-LTFCYZQ6.js +46 -0
  119. package/public/sandbox/chunks/chunk-LTWLVCKQ.js +166 -0
  120. package/public/sandbox/chunks/chunk-LWI7BXFN.js +395 -0
  121. package/public/sandbox/chunks/chunk-LYBBX6WM.js +225 -0
  122. package/public/sandbox/chunks/chunk-MXE7HIBM.js +474 -0
  123. package/public/sandbox/chunks/chunk-MYBDYNK4.js +6004 -0
  124. package/public/sandbox/chunks/chunk-NC2MIWZX.js +732 -0
  125. package/public/sandbox/chunks/chunk-NE447XAF.js +597 -0
  126. package/public/sandbox/chunks/chunk-NEAYV5C2.js +255 -0
  127. package/public/sandbox/chunks/chunk-NMGFJZ4I.js +26 -0
  128. package/public/sandbox/chunks/chunk-NWCJJZNQ.js +71 -0
  129. package/public/sandbox/chunks/chunk-O57OZBDR.js +214 -0
  130. package/public/sandbox/chunks/chunk-OJJT664Q.js +731 -0
  131. package/public/sandbox/chunks/chunk-OKTBUTCH.js +1175 -0
  132. package/public/sandbox/chunks/chunk-OQ4SYV5D.js +534 -0
  133. package/public/sandbox/chunks/chunk-OTVVIHJD.js +219 -0
  134. package/public/sandbox/chunks/chunk-OWTMSCF7.js +1052 -0
  135. package/public/sandbox/chunks/chunk-P5ZQNFC3.js +122 -0
  136. package/public/sandbox/chunks/chunk-PBPT2U2N.js +1698 -0
  137. package/public/sandbox/chunks/chunk-PHBJLCP3.js +836 -0
  138. package/public/sandbox/chunks/chunk-PHV4HYHB.js +397 -0
  139. package/public/sandbox/chunks/chunk-PIXQ6SOX.js +4071 -0
  140. package/public/sandbox/chunks/chunk-PKJL6YLK.js +73 -0
  141. package/public/sandbox/chunks/chunk-PKPOITIU.js +221 -0
  142. package/public/sandbox/chunks/{chunk-NQW73ACJ.js → chunk-PMXBOYQI.js} +1 -1
  143. package/public/sandbox/chunks/chunk-PQLZD7NR.js +836 -0
  144. package/public/sandbox/chunks/chunk-QEESVOZU.js +16 -0
  145. package/public/sandbox/chunks/chunk-QGIM3FQK.js +159 -0
  146. package/public/sandbox/chunks/chunk-QL5JNEDO.js +69 -0
  147. package/public/sandbox/chunks/chunk-QQOZ3RMH.js +867 -0
  148. package/public/sandbox/chunks/chunk-QUMEVT2F.js +194 -0
  149. package/public/sandbox/chunks/chunk-QVZBXYVY.js +102 -0
  150. package/public/sandbox/chunks/chunk-R5HQS6RB.js +135 -0
  151. package/public/sandbox/chunks/chunk-R75Q2CTT.js +900 -0
  152. package/public/sandbox/chunks/chunk-RBB6SHW2.js +253 -0
  153. package/public/sandbox/chunks/chunk-RDHNRWQP.js +383 -0
  154. package/public/sandbox/chunks/chunk-RIWOEI3T.js +1101 -0
  155. package/public/sandbox/chunks/chunk-RS5FFPUV.js +103 -0
  156. package/public/sandbox/chunks/chunk-RYSSJBGX.js +203 -0
  157. package/public/sandbox/chunks/chunk-S3KBAE5Z.js +1114 -0
  158. package/public/sandbox/chunks/chunk-S6ZZHV6G.js +244 -0
  159. package/public/sandbox/chunks/chunk-SFXJ24HY.js +499 -0
  160. package/public/sandbox/chunks/chunk-SH7TP5CJ.js +1109 -0
  161. package/public/sandbox/chunks/chunk-SI5OKFFY.js +317 -0
  162. package/public/sandbox/chunks/chunk-SIXNQNIR.js +86 -0
  163. package/public/sandbox/chunks/chunk-ST353BOX.js +42 -0
  164. package/public/sandbox/chunks/chunk-SYEHKMLP.js +1140 -0
  165. package/public/sandbox/chunks/chunk-SZ4KQUJU.js +69 -0
  166. package/public/sandbox/chunks/{chunk-5SOP6EKV.js → chunk-SZI65PSP.js} +5 -10
  167. package/public/sandbox/chunks/chunk-T7RLTSMX.js +78 -0
  168. package/public/sandbox/chunks/chunk-TJ2RLUTW.js +57 -0
  169. package/public/sandbox/chunks/chunk-TJB73XPN.js +4071 -0
  170. package/public/sandbox/chunks/chunk-TXJCYO56.js +4046 -0
  171. package/public/sandbox/chunks/chunk-U5J3LCYI.js +731 -0
  172. package/public/sandbox/chunks/chunk-UABFN3NH.js +208 -0
  173. package/public/sandbox/chunks/chunk-UBMUY7WO.js +13 -0
  174. package/public/sandbox/chunks/chunk-UC27CE32.js +69 -0
  175. package/public/sandbox/chunks/chunk-UJGVDFZN.js +147 -0
  176. package/public/sandbox/chunks/chunk-UNVLTK4N.js +122 -0
  177. package/public/sandbox/chunks/chunk-UQKQ6V3V.js +208 -0
  178. package/public/sandbox/chunks/chunk-UZZBHWIO.js +703 -0
  179. package/public/sandbox/chunks/chunk-VKZIJERL.js +1114 -0
  180. package/public/sandbox/chunks/chunk-VQQEAGID.js +372 -0
  181. package/public/sandbox/chunks/{chunk-3LX3KIQQ.js → chunk-W365QUZ5.js} +3 -5
  182. package/public/sandbox/chunks/chunk-WJY2LSWG.js +1052 -0
  183. package/public/sandbox/chunks/chunk-WNOBN3DX.js +391 -0
  184. package/public/sandbox/chunks/chunk-X2Z5VYG3.js +245 -0
  185. package/public/sandbox/chunks/chunk-X74KU74D.js +959 -0
  186. package/public/sandbox/chunks/chunk-XE7ULSGQ.js +46 -0
  187. package/public/sandbox/chunks/chunk-XRXUJZ3X.js +431 -0
  188. package/public/sandbox/chunks/chunk-XWHIN7CC.js +85 -0
  189. package/public/sandbox/chunks/chunk-Y2TVGGVL.js +527 -0
  190. package/public/sandbox/chunks/chunk-YMVMZA3U.js +1395 -0
  191. package/public/sandbox/chunks/chunk-YOBLFWDV.js +431 -0
  192. package/public/sandbox/chunks/chunk-YR2RFEZA.js +11 -0
  193. package/public/sandbox/chunks/chunk-YTD6A35P.js +836 -0
  194. package/public/sandbox/chunks/chunk-Z5L7EZXS.js +81 -0
  195. package/public/sandbox/chunks/chunk-Z65I5ET2.js +108 -0
  196. package/public/sandbox/chunks/chunk-Z6LV34RO.js +390 -0
  197. package/public/sandbox/chunks/chunk-ZAKUP6QG.js +1634 -0
  198. package/public/sandbox/chunks/chunk-ZHNYE2YH.js +731 -0
  199. package/public/sandbox/chunks/chunk-ZHQX3B3Y.js +867 -0
  200. package/public/sandbox/chunks/chunk-ZIXDFRHJ.js +731 -0
  201. package/public/sandbox/chunks/chunk-ZPZ2MZ4D.js +528 -0
  202. package/public/sandbox/chunks/chunk-ZQD6NZXB.js +373 -0
  203. package/public/sandbox/chunks/chunk-ZVVBP7ON.js +16 -0
  204. package/public/sandbox/chunks/chunk-ZWE3P6X2.js +11 -0
  205. package/public/sandbox/logix-core/Bound.js +14 -14
  206. package/public/sandbox/logix-core/Debug.js +12 -10
  207. package/public/sandbox/logix-core/EffectOp.js +3 -4
  208. package/public/sandbox/logix-core/Env.js +5 -2
  209. package/public/sandbox/logix-core/ExternalStore.js +239 -0
  210. package/public/sandbox/logix-core/Flow.js +7 -8
  211. package/public/sandbox/logix-core/Kernel.js +7 -4
  212. package/public/sandbox/logix-core/Link.js +33 -25
  213. package/public/sandbox/logix-core/Middleware.js +13 -11
  214. package/public/sandbox/logix-core/Module.js +93 -30
  215. package/public/sandbox/logix-core/ModuleTag.js +28 -25
  216. package/public/sandbox/logix-core/Observability.js +21 -19
  217. package/public/sandbox/logix-core/Process.js +27 -22
  218. package/public/sandbox/logix-core/ReadQuery.js +7 -11
  219. package/public/sandbox/logix-core/Reflection.js +173 -53
  220. package/public/sandbox/logix-core/Resource.js +6 -3
  221. package/public/sandbox/logix-core/Root.js +7 -3
  222. package/public/sandbox/logix-core/Runtime.js +54 -40
  223. package/public/sandbox/logix-core/ScopeRegistry.js +6 -3
  224. package/public/sandbox/logix-core/StateTrait.js +17 -14
  225. package/public/sandbox/logix-core/TraitLifecycle.js +8 -8
  226. package/public/sandbox/logix-core/Workflow.js +332 -0
  227. package/public/sandbox/logix-core.js +11133 -6622
  228. package/public/sandbox/logix-core.manifest.json +4 -2
  229. package/public/sandbox/worker.js +3 -3
  230. package/public/sandbox/chunks/chunk-4LRLOTMA.js +0 -1698
  231. package/public/sandbox/chunks/chunk-CDLXJHXY.js +0 -120
  232. package/public/sandbox/chunks/chunk-CZRI7MHA.js +0 -46
  233. package/public/sandbox/chunks/chunk-EJDFUZ4B.js +0 -408
  234. package/public/sandbox/chunks/chunk-IP63FME6.js +0 -282
  235. package/public/sandbox/chunks/chunk-JIXTOQXJ.js +0 -1103
  236. package/public/sandbox/chunks/chunk-MPUSOFJ3.js +0 -1928
  237. package/public/sandbox/chunks/chunk-ON2LY6HJ.js +0 -135
  238. package/public/sandbox/chunks/chunk-POIBXAH5.js +0 -995
  239. package/public/sandbox/chunks/chunk-PQ652ULI.js +0 -6359
  240. package/public/sandbox/chunks/chunk-RJQ4PG2F.js +0 -77
  241. package/public/sandbox/chunks/chunk-S4EXG3OS.js +0 -533
  242. package/public/sandbox/chunks/chunk-SUXDGXVE.js +0 -390
  243. package/public/sandbox/chunks/chunk-TOQ6SJ6O.js +0 -244
  244. package/public/sandbox/chunks/chunk-UKYAF3NL.js +0 -1036
  245. package/public/sandbox/chunks/chunk-UMVN3AWO.js +0 -395
  246. package/public/sandbox/chunks/chunk-WFV5PPWJ.js +0 -194
  247. package/public/sandbox/chunks/chunk-YF6IO732.js +0 -206
  248. package/public/sandbox/chunks/chunk-ZUBABAAO.js +0 -86
@@ -1,194 +0,0 @@
1
- // @logixjs/core subpath bundles for @logixjs/sandbox
2
-
3
- import {
4
- isDevEnv
5
- } from "./chunk-CZRI7MHA.js";
6
- import {
7
- record
8
- } from "./chunk-UKYAF3NL.js";
9
-
10
- // ../logix-core/src/internal/runtime/core/TaskRunner.ts
11
- import { Cause, Effect, Fiber, FiberRef, Ref, Stream } from "../effect.js";
12
- var inSyncTransactionFiber = FiberRef.unsafeMake(false);
13
- var forceSourceRefresh = FiberRef.unsafeMake(false);
14
- var inSyncTransactionGlobalDepth = 0;
15
- var enterSyncTransaction = () => {
16
- inSyncTransactionGlobalDepth += 1;
17
- };
18
- var exitSyncTransaction = () => {
19
- inSyncTransactionGlobalDepth = Math.max(0, inSyncTransactionGlobalDepth - 1);
20
- };
21
- var isInSyncTransaction = () => inSyncTransactionGlobalDepth > 0;
22
- var resolve = (eff, payload) => typeof eff === "function" ? eff(payload) : eff;
23
- var defaultOrigins = (triggerName) => ({
24
- pending: {
25
- kind: "task:pending",
26
- name: triggerName
27
- },
28
- success: {
29
- kind: "service-callback",
30
- name: "task:success"
31
- },
32
- failure: {
33
- kind: "service-callback",
34
- name: "task:failure"
35
- }
36
- });
37
- var shouldNoopInSyncTransactionFiber = (options) => Effect.gen(function* () {
38
- const inTxn = yield* FiberRef.get(inSyncTransactionFiber);
39
- if (!inTxn) {
40
- return false;
41
- }
42
- if (isDevEnv()) {
43
- yield* record({
44
- type: "diagnostic",
45
- moduleId: options.moduleId,
46
- instanceId: options.instanceId,
47
- code: options.code,
48
- severity: options.severity,
49
- message: options.message,
50
- hint: options.hint,
51
- actionTag: options.actionTag,
52
- kind: options.kind
53
- });
54
- }
55
- return true;
56
- });
57
- var resolveConcurrencyLimit = (runtime) => runtime.resolveConcurrencyPolicy ? runtime.resolveConcurrencyPolicy().pipe(Effect.map((p) => p.concurrencyLimit)) : Effect.succeed(16);
58
- var runTaskLifecycle = (payload, runtime, config, getCanWriteBack) => Effect.gen(function* () {
59
- const noop = yield* shouldNoopInSyncTransactionFiber({
60
- moduleId: runtime.moduleId,
61
- instanceId: runtime.instanceId,
62
- code: "logic::invalid_usage",
63
- severity: "error",
64
- message: "run*Task is not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).",
65
- hint: "Call run*Task from the run section of a watcher (e.g. $.onAction/$.onState/$.on); do not call it directly inside a reducer / trait.run / synchronous transaction body. For long-lived flows, use a multi-entry pattern (pending \u2192 IO \u2192 writeback).",
66
- kind: "run_task_in_transaction"
67
- });
68
- if (noop) {
69
- return;
70
- }
71
- const defaults = defaultOrigins(config.triggerName);
72
- const origins = {
73
- pending: config.origin?.pending ?? defaults.pending,
74
- success: config.origin?.success ?? defaults.success,
75
- failure: config.origin?.failure ?? defaults.failure
76
- };
77
- const pending = config.pending;
78
- if (pending) {
79
- yield* Effect.uninterruptible(
80
- runtime.runWithStateTransaction(origins.pending, () => Effect.asVoid(resolve(pending, payload)))
81
- );
82
- }
83
- const io = resolve(config.effect, payload);
84
- const exit = yield* Effect.exit(io);
85
- if (getCanWriteBack) {
86
- const ok = yield* getCanWriteBack;
87
- if (!ok) {
88
- return;
89
- }
90
- }
91
- if (exit._tag === "Success") {
92
- const success = config.success;
93
- if (success) {
94
- yield* runtime.runWithStateTransaction(origins.success, () => Effect.asVoid(success(exit.value, payload)));
95
- }
96
- return;
97
- }
98
- const cause = exit.cause;
99
- if (Cause.isInterrupted(cause)) {
100
- return;
101
- }
102
- const failure = config.failure;
103
- if (failure) {
104
- yield* runtime.runWithStateTransaction(origins.failure, () => Effect.asVoid(failure(cause, payload)));
105
- }
106
- }).pipe(
107
- // Watchers must not crash as a whole due to a single task failure: swallow errors, but keep them diagnosable.
108
- Effect.catchAllCause(
109
- (cause) => record({
110
- type: "diagnostic",
111
- moduleId: runtime.moduleId,
112
- instanceId: runtime.instanceId,
113
- code: "task_runner::unhandled_failure",
114
- severity: "error",
115
- message: "TaskRunner encountered an unhandled failure (pending/IO/writeback).",
116
- hint: "Add a failure writeback for this task or handle errors explicitly upstream; avoid fire-and-forget swallowing errors.",
117
- actionTag: config.triggerName,
118
- kind: "task_runner_unhandled_failure",
119
- trigger: {
120
- kind: "task",
121
- name: config.triggerName
122
- }
123
- }).pipe(Effect.zipRight(Effect.logError("TaskRunner error", cause)))
124
- )
125
- );
126
- var makeTaskRunner = (stream, mode, runtime, config) => {
127
- if (mode === "latest") {
128
- return Effect.gen(function* () {
129
- const taskIdRef = yield* Ref.make(0);
130
- const currentFiberRef = yield* Ref.make(void 0);
131
- const start = (payload) => Effect.gen(function* () {
132
- const taskId = yield* Ref.updateAndGet(taskIdRef, (n) => n + 1);
133
- const prev = yield* Ref.get(currentFiberRef);
134
- if (prev) {
135
- yield* Fiber.interruptFork(prev);
136
- }
137
- const canWriteBack = Ref.get(taskIdRef).pipe(Effect.map((current) => current === taskId));
138
- const fiber = yield* Effect.fork(
139
- runTaskLifecycle(payload, runtime, config, canWriteBack)
140
- );
141
- yield* Ref.set(currentFiberRef, fiber);
142
- });
143
- return yield* Stream.runForEach(stream, start);
144
- });
145
- }
146
- if (mode === "exhaust") {
147
- return Effect.gen(function* () {
148
- const concurrency = yield* resolveConcurrencyLimit(runtime);
149
- const busyRef = yield* Ref.make(false);
150
- const mapper = (payload) => Effect.gen(function* () {
151
- const acquired = yield* Ref.modify(
152
- busyRef,
153
- (busy) => busy ? [false, busy] : [true, true]
154
- );
155
- if (!acquired) {
156
- return;
157
- }
158
- try {
159
- yield* runTaskLifecycle(payload, runtime, config);
160
- } finally {
161
- yield* Ref.set(busyRef, false);
162
- }
163
- });
164
- return yield* Stream.runDrain(stream.pipe(Stream.mapEffect(mapper, { concurrency })));
165
- });
166
- }
167
- if (mode === "parallel") {
168
- return Effect.gen(function* () {
169
- const concurrency = yield* resolveConcurrencyLimit(runtime);
170
- return yield* Stream.runDrain(
171
- stream.pipe(
172
- Stream.mapEffect((payload) => runTaskLifecycle(payload, runtime, config), {
173
- concurrency
174
- })
175
- )
176
- );
177
- });
178
- }
179
- return Stream.runForEach(
180
- stream,
181
- (payload) => runTaskLifecycle(payload, runtime, config)
182
- );
183
- };
184
-
185
- export {
186
- inSyncTransactionFiber,
187
- forceSourceRefresh,
188
- enterSyncTransaction,
189
- exitSyncTransaction,
190
- isInSyncTransaction,
191
- shouldNoopInSyncTransactionFiber,
192
- makeTaskRunner
193
- };
194
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvcnVudGltZS9jb3JlL1Rhc2tSdW5uZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IENhdXNlLCBFZmZlY3QsIEZpYmVyLCBGaWJlclJlZiwgUmVmLCBTdHJlYW0gfSBmcm9tICdlZmZlY3QnXG5pbXBvcnQgKiBhcyBEZWJ1ZyBmcm9tICcuL0RlYnVnU2luay5qcydcbmltcG9ydCB7IGlzRGV2RW52IH0gZnJvbSAnLi9lbnYuanMnXG5pbXBvcnQgdHlwZSAqIGFzIExvZ2ljIGZyb20gJy4vTG9naWNNaWRkbGV3YXJlLmpzJ1xuaW1wb3J0IHR5cGUgeyBBbnlNb2R1bGVTaGFwZSB9IGZyb20gJy4vbW9kdWxlLmpzJ1xuaW1wb3J0IHR5cGUgeyBSdW50aW1lSW50ZXJuYWxzUmVzb2x2ZWRDb25jdXJyZW5jeVBvbGljeSB9IGZyb20gJy4vUnVudGltZUludGVybmFscy5qcydcbmltcG9ydCB0eXBlIHsgU3RhdGVUeG5PcmlnaW4gfSBmcm9tICcuL1N0YXRlVHJhbnNhY3Rpb24uanMnXG5cbi8qKlxuICogUHJldmVudHMgY2FsbGluZyBydW4qVGFzayBpbnNpZGUgYSBcInN5bmNocm9ub3VzIHRyYW5zYWN0aW9uIGV4ZWN1dGlvbiBmaWJlclwiIChpdCB3b3VsZCBkZWFkbG9jayB0aGUgdHhuUXVldWUpLlxuICpcbiAqIC0gTW9kdWxlUnVudGltZSBsb2NhbGx5IG1hcmtzIGl0IGFzIHRydWUgd2hpbGUgZXhlY3V0aW5nIGVhY2ggdHJhbnNhY3Rpb24gKGRpc3BhdGNoL3NvdXJjZS1yZWZyZXNoL2RldnRvb2xzLy4uLikuXG4gKiAtIHJ1bipUYXNrIGNoZWNrcyB0aGUgZmxhZyBvbiBzdGFydDogd2hlbiB0cnVlLCBpdCBlbWl0cyBkaWFnbm9zdGljcyBvbmx5IGluIGRldi90ZXN0IGFuZCB0aGVuIG5vLW9wcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGluU3luY1RyYW5zYWN0aW9uRmliZXIgPSBGaWJlclJlZi51bnNhZmVNYWtlKGZhbHNlKVxuXG4vKipcbiAqIEZvcmNlIHNvdXJjZS5yZWZyZXNoOlxuICogLSBEZWZhdWx0OiB3aGVuIHNuYXBzaG90IGtleUhhc2ggaXMgdW5jaGFuZ2VkIGFuZCBhIG5vbi1pZGxlIHNuYXBzaG90IGFscmVhZHkgZXhpc3RzLCByZWZyZXNoIFNIT1VMRCBiZSBhIG5vLW9wXG4gKiAgIChhdm9pZCByZWR1bmRhbnQgSU8vd3JpdGViYWNrKS5cbiAqIC0gRXhjZXB0aW9uOiBleHBsaWNpdCByZWZyZXNoIChtYW51YWwgcmVmcmVzaCkgLyBpbnZhbGlkYXRpb24tZHJpdmVuIHJlZnJlc2ggbmVlZHMgdG8gXCJyZS1mZXRjaCBldmVuIHdpdGggdGhlIHNhbWUga2V5SGFzaFwiLlxuICpcbiAqIE5vdGU6IHVzZSBhIEZpYmVyUmVmIHRvIGxvY2FsbHkgcGFzcyBcIndoZXRoZXIgdGhpcyByZWZyZXNoIGlzIGZvcmNlZFwiLCBhdm9pZGluZyBleHBhbmRpbmcgdGhlIHNvdXJjZSByZWZyZXNoIGhhbmRsZXIgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgY29uc3QgZm9yY2VTb3VyY2VSZWZyZXNoID0gRmliZXJSZWYudW5zYWZlTWFrZShmYWxzZSlcblxuLyoqXG4gKiBTeW5jaHJvbm91cyB0cmFuc2FjdGlvbiB3aW5kb3cgKHByb2Nlc3MtbGV2ZWwpIG1hcmtlcjpcbiAqIC0gVXNlZCBhcyBhIGhhcmQgZ3VhcmQgaW4gXCJub24tRWZmZWN0IEFQSVwiIGVudHJ5IHBvaW50cyAoZS5nLiBQcm9taXNlL2FzeW5jIGZ1bmN0aW9ucykuXG4gKiAtIEZpYmVyUmVmIGNhbm5vdCByZWxpYWJseSByZWFkIHRoZSBcImN1cnJlbnQgZmliZXJcIiBpbiBzdWNoIGVudHJ5IHBvaW50cywgc28gd2UgbmVlZCBhIHN5bmNocm9ub3VzIGNhbGxzdGFjay1sZXZlbCBtYXJrZXIuXG4gKlxuICogTm90ZTogaWYgYSB0cmFuc2FjdGlvbiBib2R5IGluY29ycmVjdGx5IGNyb3NzZXMgYXN5bmMgYm91bmRhcmllcywgdGhpcyBtYXJrZXIgd2lsbCBiZSBoZWxkIGxvbmdlcjsgdGhhdCBpcyBhIHNldmVyZSB2aW9sYXRpb24uXG4gKi9cbmxldCBpblN5bmNUcmFuc2FjdGlvbkdsb2JhbERlcHRoID0gMFxuXG5leHBvcnQgY29uc3QgZW50ZXJTeW5jVHJhbnNhY3Rpb24gPSAoKTogdm9pZCA9PiB7XG4gIGluU3luY1RyYW5zYWN0aW9uR2xvYmFsRGVwdGggKz0gMVxufVxuXG5leHBvcnQgY29uc3QgZXhpdFN5bmNUcmFuc2FjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgaW5TeW5jVHJhbnNhY3Rpb25HbG9iYWxEZXB0aCA9IE1hdGgubWF4KDAsIGluU3luY1RyYW5zYWN0aW9uR2xvYmFsRGVwdGggLSAxKVxufVxuXG5leHBvcnQgY29uc3QgaXNJblN5bmNUcmFuc2FjdGlvbiA9ICgpOiBib29sZWFuID0+IGluU3luY1RyYW5zYWN0aW9uR2xvYmFsRGVwdGggPiAwXG5cbmV4cG9ydCB0eXBlIFRhc2tSdW5uZXJNb2RlID1cbiAgfCAndGFzaycgLy8gc2VxdWVudGlhbFxuICB8ICdwYXJhbGxlbCdcbiAgfCAnbGF0ZXN0J1xuICB8ICdleGhhdXN0J1xuXG5leHBvcnQgdHlwZSBUYXNrU3RhdHVzID0gJ2lkbGUnIHwgJ3BlbmRpbmcnIHwgJ3J1bm5pbmcnIHwgJ3N1Y2Nlc3MnIHwgJ2ZhaWx1cmUnIHwgJ2ludGVycnVwdGVkJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tFeGVjdXRpb24ge1xuICByZWFkb25seSB0YXNrSWQ6IG51bWJlclxuICByZWFkb25seSBzdGF0dXM6IFRhc2tTdGF0dXNcbiAgcmVhZG9ubHkgYWNjZXB0ZWRBdDogbnVtYmVyXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdD86IG51bWJlclxuICByZWFkb25seSBlbmRlZEF0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFza1J1bm5lck9yaWdpbnMge1xuICByZWFkb25seSBwZW5kaW5nPzogU3RhdGVUeG5PcmlnaW5cbiAgcmVhZG9ubHkgc3VjY2Vzcz86IFN0YXRlVHhuT3JpZ2luXG4gIHJlYWRvbmx5IGZhaWx1cmU/OiBTdGF0ZVR4bk9yaWdpblxufVxuXG50eXBlIFRhc2tIYW5kbGVyPFBheWxvYWQsIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsIFI+ID1cbiAgfCBMb2dpYy5PZjxTaCwgUiwgdm9pZCwgbmV2ZXI+XG4gIHwgKChwYXlsb2FkOiBQYXlsb2FkKSA9PiBMb2dpYy5PZjxTaCwgUiwgdm9pZCwgbmV2ZXI+KVxuXG50eXBlIFRhc2tFZmZlY3Q8UGF5bG9hZCwgU2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZSwgUiwgQSwgRT4gPVxuICB8IExvZ2ljLk9mPFNoLCBSLCBBLCBFPlxuICB8ICgocGF5bG9hZDogUGF5bG9hZCkgPT4gTG9naWMuT2Y8U2gsIFIsIEEsIEU+KVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tSdW5uZXJDb25maWc8UGF5bG9hZCwgU2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZSwgUiwgQSA9IHZvaWQsIEUgPSBuZXZlcj4ge1xuICAvKipcbiAgICogT3B0aW9uYWw6IHRyaWdnZXIgc291cmNlIG5hbWUgKGUuZy4gYWN0aW9uVGFnIC8gZmllbGRQYXRoKSwgdXNlZCBhcyB0aGUgZGVmYXVsdCBwZW5kaW5nIG9yaWdpbi5uYW1lLlxuICAgKiAtIEJvdW5kQXBpUnVudGltZSBtYXkgZmlsbCB0aGlzIGluIGZvciBvbkFjdGlvbihcInh4eFwiKSAvIHRyYWl0cy5zb3VyY2UucmVmcmVzaChcImZpZWxkXCIpLCBldGMuXG4gICAqIC0gT3RoZXIgY2FsbGVycyBhcmUgbm90IHJlcXVpcmVkIHRvIHByb3ZpZGUgaXQuXG4gICAqL1xuICByZWFkb25seSB0cmlnZ2VyTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBwZW5kaW5nOiBzeW5jaHJvbm91cyBzdGF0ZSB3cml0ZXMgKGxvYWRpbmc9dHJ1ZSAvIGNsZWFyaW5nIGVycm9ycywgZXRjLiksIGFsd2F5cyBhIHNlcGFyYXRlIHRyYW5zYWN0aW9uIGVudHJ5LlxuICAgKiAtIE9ubHkgZXhlY3V0ZWQgZm9yIHRhc2tzIHRoYXQgYXJlIGFjY2VwdGVkIGFuZCBhY3R1YWxseSBzdGFydGVkIChpZ25vcmVkIHRyaWdnZXJzIGluIHJ1bkV4aGF1c3RUYXNrIGRvIG5vdCBydW4gcGVuZGluZykuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nPzogVGFza0hhbmRsZXI8UGF5bG9hZCwgU2gsIFI+XG5cbiAgLyoqXG4gICAqIGVmZmVjdDogcmVhbCBJTyAvIGFzeW5jIHdvcmsgKG11c3QgcnVuIG91dHNpZGUgdGhlIHRyYW5zYWN0aW9uIHdpbmRvdykuXG4gICAqL1xuICByZWFkb25seSBlZmZlY3Q6IFRhc2tFZmZlY3Q8UGF5bG9hZCwgU2gsIFIsIEEsIEU+XG5cbiAgLyoqXG4gICAqIHN1Y2Nlc3M6IHN1Y2Nlc3Mgd3JpdGViYWNrIChzZXBhcmF0ZSB0cmFuc2FjdGlvbiBlbnRyeSkuXG4gICAqL1xuICByZWFkb25seSBzdWNjZXNzPzogKHJlc3VsdDogQSwgcGF5bG9hZDogUGF5bG9hZCkgPT4gTG9naWMuT2Y8U2gsIFIsIHZvaWQsIG5ldmVyPlxuXG4gIC8qKlxuICAgKiBmYWlsdXJlOiBmYWlsdXJlIHdyaXRlYmFjayAoc2VwYXJhdGUgdHJhbnNhY3Rpb24gZW50cnkpLlxuICAgKlxuICAgKiBOb3RlOiB0YWtlcyBhIENhdXNlIHRvIHByZXNlcnZlIGRlZmVjdC9pbnRlcnJ1cHQgc2VtYW50aWNzOyBpbnRlcnJ1cHRzIGRvIG5vdCB0cmlnZ2VyIGZhaWx1cmUgd3JpdGViYWNrIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlPzogKGNhdXNlOiBDYXVzZS5DYXVzZTxFPiwgcGF5bG9hZDogUGF5bG9hZCkgPT4gTG9naWMuT2Y8U2gsIFIsIHZvaWQsIG5ldmVyPlxuXG4gIC8qKlxuICAgKiBvcmlnaW46IG9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgdGhyZWUgdHJhbnNhY3Rpb24gb3JpZ2lucy5cbiAgICogLSBEZWZhdWx0OiBwZW5kaW5nLmtpbmQ9XCJ0YXNrOnBlbmRpbmdcIjsgc3VjY2Vzcy9mYWlsdXJlLmtpbmQ9XCJzZXJ2aWNlLWNhbGxiYWNrXCIuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW4/OiBUYXNrUnVubmVyT3JpZ2luc1xuXG4gIC8qKlxuICAgKiBwcmlvcml0eTogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBkZWJ1Z2dpbmcvc29ydGluZzsgZG9lcyBub3QgY2hhbmdlIHRyYW5zYWN0aW9uIGJvdW5kYXJpZXMgb3IgY29uY3VycmVuY3kgc2VtYW50aWNzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHk/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXNrUnVubmVyUnVudGltZSB7XG4gIHJlYWRvbmx5IG1vZHVsZUlkPzogc3RyaW5nXG4gIHJlYWRvbmx5IGluc3RhbmNlSWQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkgcnVuV2l0aFN0YXRlVHJhbnNhY3Rpb246IChcbiAgICBvcmlnaW46IFN0YXRlVHhuT3JpZ2luLFxuICAgIGJvZHk6ICgpID0+IEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXIsIGFueT4sXG4gICkgPT4gRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlciwgYW55PlxuICByZWFkb25seSByZXNvbHZlQ29uY3VycmVuY3lQb2xpY3k/OiAoKSA9PiBFZmZlY3QuRWZmZWN0PFJ1bnRpbWVJbnRlcm5hbHNSZXNvbHZlZENvbmN1cnJlbmN5UG9saWN5LCBuZXZlciwgYW55PlxufVxuXG5jb25zdCByZXNvbHZlID0gPFBheWxvYWQsIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsIFIsIEEsIEU+KFxuICBlZmY6IFRhc2tFZmZlY3Q8UGF5bG9hZCwgU2gsIFIsIEEsIEU+IHwgVGFza0hhbmRsZXI8UGF5bG9hZCwgU2gsIFI+LFxuICBwYXlsb2FkOiBQYXlsb2FkLFxuKTogYW55ID0+ICh0eXBlb2YgZWZmID09PSAnZnVuY3Rpb24nID8gKGVmZiBhcyBhbnkpKHBheWxvYWQpIDogZWZmKVxuXG5jb25zdCBkZWZhdWx0T3JpZ2lucyA9ICh0cmlnZ2VyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUmVxdWlyZWQ8VGFza1J1bm5lck9yaWdpbnM+ID0+ICh7XG4gIHBlbmRpbmc6IHtcbiAgICBraW5kOiAndGFzazpwZW5kaW5nJyxcbiAgICBuYW1lOiB0cmlnZ2VyTmFtZSxcbiAgfSxcbiAgc3VjY2Vzczoge1xuICAgIGtpbmQ6ICdzZXJ2aWNlLWNhbGxiYWNrJyxcbiAgICBuYW1lOiAndGFzazpzdWNjZXNzJyxcbiAgfSxcbiAgZmFpbHVyZToge1xuICAgIGtpbmQ6ICdzZXJ2aWNlLWNhbGxiYWNrJyxcbiAgICBuYW1lOiAndGFzazpmYWlsdXJlJyxcbiAgfSxcbn0pXG5cbmV4cG9ydCBjb25zdCBzaG91bGROb29wSW5TeW5jVHJhbnNhY3Rpb25GaWJlciA9IChvcHRpb25zOiB7XG4gIHJlYWRvbmx5IG1vZHVsZUlkPzogc3RyaW5nXG4gIHJlYWRvbmx5IGluc3RhbmNlSWQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nXG4gIHJlYWRvbmx5IHNldmVyaXR5OiAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZ1xuICByZWFkb25seSBoaW50Pzogc3RyaW5nXG4gIHJlYWRvbmx5IGFjdGlvblRhZz86IHN0cmluZ1xuICByZWFkb25seSBraW5kPzogc3RyaW5nXG59KTogRWZmZWN0LkVmZmVjdDxib29sZWFuPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgaW5UeG4gPSB5aWVsZCogRmliZXJSZWYuZ2V0KGluU3luY1RyYW5zYWN0aW9uRmliZXIpXG4gICAgaWYgKCFpblR4bikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIC8vIEFsd2F5cyBuby1vcCByZWdhcmRsZXNzIG9mIGVudiAob3RoZXJ3aXNlIHdlIG1heSBkZWFkbG9jayk7IGRpYWdub3N0aWNzIGFyZSBlbWl0dGVkIG9ubHkgaW4gZGV2L3Rlc3QuXG4gICAgaWYgKGlzRGV2RW52KCkpIHtcbiAgICAgIHlpZWxkKiBEZWJ1Zy5yZWNvcmQoe1xuICAgICAgICB0eXBlOiAnZGlhZ25vc3RpYycsXG4gICAgICAgIG1vZHVsZUlkOiBvcHRpb25zLm1vZHVsZUlkLFxuICAgICAgICBpbnN0YW5jZUlkOiBvcHRpb25zLmluc3RhbmNlSWQsXG4gICAgICAgIGNvZGU6IG9wdGlvbnMuY29kZSxcbiAgICAgICAgc2V2ZXJpdHk6IG9wdGlvbnMuc2V2ZXJpdHksXG4gICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZSxcbiAgICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgICAgICBhY3Rpb25UYWc6IG9wdGlvbnMuYWN0aW9uVGFnLFxuICAgICAgICBraW5kOiBvcHRpb25zLmtpbmQsXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9KVxuXG5jb25zdCByZXNvbHZlQ29uY3VycmVuY3lMaW1pdCA9IChydW50aW1lOiBUYXNrUnVubmVyUnVudGltZSk6IEVmZmVjdC5FZmZlY3Q8bnVtYmVyIHwgJ3VuYm91bmRlZCcsIG5ldmVyLCBhbnk+ID0+XG4gIHJ1bnRpbWUucmVzb2x2ZUNvbmN1cnJlbmN5UG9saWN5XG4gICAgPyBydW50aW1lLnJlc29sdmVDb25jdXJyZW5jeVBvbGljeSgpLnBpcGUoRWZmZWN0Lm1hcCgocCkgPT4gcC5jb25jdXJyZW5jeUxpbWl0KSlcbiAgICA6IEVmZmVjdC5zdWNjZWVkKDE2KVxuXG5jb25zdCBydW5UYXNrTGlmZWN5Y2xlID0gPFBheWxvYWQsIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsIFIsIEEsIEU+KFxuICBwYXlsb2FkOiBQYXlsb2FkLFxuICBydW50aW1lOiBUYXNrUnVubmVyUnVudGltZSxcbiAgY29uZmlnOiBUYXNrUnVubmVyQ29uZmlnPFBheWxvYWQsIFNoLCBSLCBBLCBFPixcbiAgZ2V0Q2FuV3JpdGVCYWNrPzogRWZmZWN0LkVmZmVjdDxib29sZWFuPixcbik6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXIsIExvZ2ljLkVudjxTaCwgUj4+ID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBub29wID0geWllbGQqIHNob3VsZE5vb3BJblN5bmNUcmFuc2FjdGlvbkZpYmVyKHtcbiAgICAgIG1vZHVsZUlkOiBydW50aW1lLm1vZHVsZUlkLFxuICAgICAgaW5zdGFuY2VJZDogcnVudGltZS5pbnN0YW5jZUlkLFxuICAgICAgY29kZTogJ2xvZ2ljOjppbnZhbGlkX3VzYWdlJyxcbiAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ3J1bipUYXNrIGlzIG5vdCBhbGxvd2VkIGluc2lkZSBhIHN5bmNocm9ub3VzIFN0YXRlVHJhbnNhY3Rpb24gYm9keSAoaXQgbWF5IGRlYWRsb2NrIHRoZSB0eG5RdWV1ZSkuJyxcbiAgICAgIGhpbnQ6XG4gICAgICAgICdDYWxsIHJ1bipUYXNrIGZyb20gdGhlIHJ1biBzZWN0aW9uIG9mIGEgd2F0Y2hlciAoZS5nLiAkLm9uQWN0aW9uLyQub25TdGF0ZS8kLm9uKTsgJyArXG4gICAgICAgICdkbyBub3QgY2FsbCBpdCBkaXJlY3RseSBpbnNpZGUgYSByZWR1Y2VyIC8gdHJhaXQucnVuIC8gc3luY2hyb25vdXMgdHJhbnNhY3Rpb24gYm9keS4gRm9yIGxvbmctbGl2ZWQgZmxvd3MsIHVzZSBhIG11bHRpLWVudHJ5IHBhdHRlcm4gKHBlbmRpbmcgXHUyMTkyIElPIFx1MjE5MiB3cml0ZWJhY2spLicsXG4gICAgICBraW5kOiAncnVuX3Rhc2tfaW5fdHJhbnNhY3Rpb24nLFxuICAgIH0pXG4gICAgaWYgKG5vb3ApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRzID0gZGVmYXVsdE9yaWdpbnMoY29uZmlnLnRyaWdnZXJOYW1lKVxuICAgIGNvbnN0IG9yaWdpbnM6IFJlcXVpcmVkPFRhc2tSdW5uZXJPcmlnaW5zPiA9IHtcbiAgICAgIHBlbmRpbmc6IGNvbmZpZy5vcmlnaW4/LnBlbmRpbmcgPz8gZGVmYXVsdHMucGVuZGluZyxcbiAgICAgIHN1Y2Nlc3M6IGNvbmZpZy5vcmlnaW4/LnN1Y2Nlc3MgPz8gZGVmYXVsdHMuc3VjY2VzcyxcbiAgICAgIGZhaWx1cmU6IGNvbmZpZy5vcmlnaW4/LmZhaWx1cmUgPz8gZGVmYXVsdHMuZmFpbHVyZSxcbiAgICB9XG5cbiAgICAvLyAxKSBwZW5kaW5nOiBzZXBhcmF0ZSB0cmFuc2FjdGlvbiBlbnRyeTsgb25jZSBzdGFydGVkIGl0IHNob3VsZCBub3QgYmUgaW50ZXJydXB0ZWQgYnkgcnVuTGF0ZXN0LlxuICAgIGNvbnN0IHBlbmRpbmcgPSBjb25maWcucGVuZGluZ1xuICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICB5aWVsZCogRWZmZWN0LnVuaW50ZXJydXB0aWJsZShcbiAgICAgICAgcnVudGltZS5ydW5XaXRoU3RhdGVUcmFuc2FjdGlvbihvcmlnaW5zLnBlbmRpbmcsICgpID0+IEVmZmVjdC5hc1ZvaWQocmVzb2x2ZShwZW5kaW5nLCBwYXlsb2FkKSkpLFxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIpIElPOiBydW5zIG91dHNpZGUgdGhlIHRyYW5zYWN0aW9uIHdpbmRvdy5cbiAgICBjb25zdCBpbyA9IHJlc29sdmUoY29uZmlnLmVmZmVjdCwgcGF5bG9hZCkgYXMgRWZmZWN0LkVmZmVjdDxBLCBFLCBMb2dpYy5FbnY8U2gsIFI+PlxuICAgIGNvbnN0IGV4aXQgPSB5aWVsZCogRWZmZWN0LmV4aXQoaW8pXG5cbiAgICAvLyAzKSB3cml0ZWJhY2s6IHVzZSB0aGUgZ3VhcmQgdG8gY29uZmlybSBpdCdzIHN0aWxsIHRoZSBjdXJyZW50IHRhc2sgKHJ1bkxhdGVzdFRhc2spLlxuICAgIGlmIChnZXRDYW5Xcml0ZUJhY2spIHtcbiAgICAgIGNvbnN0IG9rID0geWllbGQqIGdldENhbldyaXRlQmFja1xuICAgICAgaWYgKCFvaykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXhpdC5fdGFnID09PSAnU3VjY2VzcycpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBjb25maWcuc3VjY2Vzc1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgeWllbGQqIHJ1bnRpbWUucnVuV2l0aFN0YXRlVHJhbnNhY3Rpb24ob3JpZ2lucy5zdWNjZXNzLCAoKSA9PiBFZmZlY3QuYXNWb2lkKHN1Y2Nlc3MoZXhpdC52YWx1ZSwgcGF5bG9hZCkpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gRmFpbHVyZTogaW50ZXJydXB0aW9ucyBkbyBub3QgdHJpZ2dlciBmYWlsdXJlIHdyaXRlYmFjayAoZS5nLiBydW5MYXRlc3RUYXNrIGNhbmNlbGxhdGlvbiwgU2NvcGUgZW5kaW5nKS5cbiAgICBjb25zdCBjYXVzZSA9IGV4aXQuY2F1c2UgYXMgQ2F1c2UuQ2F1c2U8RT5cbiAgICBpZiAoQ2F1c2UuaXNJbnRlcnJ1cHRlZChjYXVzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGZhaWx1cmUgPSBjb25maWcuZmFpbHVyZVxuICAgIGlmIChmYWlsdXJlKSB7XG4gICAgICB5aWVsZCogcnVudGltZS5ydW5XaXRoU3RhdGVUcmFuc2FjdGlvbihvcmlnaW5zLmZhaWx1cmUsICgpID0+IEVmZmVjdC5hc1ZvaWQoZmFpbHVyZShjYXVzZSwgcGF5bG9hZCkpKVxuICAgIH1cbiAgfSkucGlwZShcbiAgICAvLyBXYXRjaGVycyBtdXN0IG5vdCBjcmFzaCBhcyBhIHdob2xlIGR1ZSB0byBhIHNpbmdsZSB0YXNrIGZhaWx1cmU6IHN3YWxsb3cgZXJyb3JzLCBidXQga2VlcCB0aGVtIGRpYWdub3NhYmxlLlxuICAgIEVmZmVjdC5jYXRjaEFsbENhdXNlKChjYXVzZSkgPT5cbiAgICAgIERlYnVnLnJlY29yZCh7XG4gICAgICAgIHR5cGU6ICdkaWFnbm9zdGljJyxcbiAgICAgICAgbW9kdWxlSWQ6IHJ1bnRpbWUubW9kdWxlSWQsXG4gICAgICAgIGluc3RhbmNlSWQ6IHJ1bnRpbWUuaW5zdGFuY2VJZCxcbiAgICAgICAgY29kZTogJ3Rhc2tfcnVubmVyOjp1bmhhbmRsZWRfZmFpbHVyZScsXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnVGFza1J1bm5lciBlbmNvdW50ZXJlZCBhbiB1bmhhbmRsZWQgZmFpbHVyZSAocGVuZGluZy9JTy93cml0ZWJhY2spLicsXG4gICAgICAgIGhpbnQ6ICdBZGQgYSBmYWlsdXJlIHdyaXRlYmFjayBmb3IgdGhpcyB0YXNrIG9yIGhhbmRsZSBlcnJvcnMgZXhwbGljaXRseSB1cHN0cmVhbTsgYXZvaWQgZmlyZS1hbmQtZm9yZ2V0IHN3YWxsb3dpbmcgZXJyb3JzLicsXG4gICAgICAgIGFjdGlvblRhZzogY29uZmlnLnRyaWdnZXJOYW1lLFxuICAgICAgICBraW5kOiAndGFza19ydW5uZXJfdW5oYW5kbGVkX2ZhaWx1cmUnLFxuICAgICAgICB0cmlnZ2VyOiB7XG4gICAgICAgICAga2luZDogJ3Rhc2snLFxuICAgICAgICAgIG5hbWU6IGNvbmZpZy50cmlnZ2VyTmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH0pLnBpcGUoRWZmZWN0LnppcFJpZ2h0KEVmZmVjdC5sb2dFcnJvcignVGFza1J1bm5lciBlcnJvcicsIGNhdXNlKSkpLFxuICAgICksXG4gICkgYXMgRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlciwgTG9naWMuRW52PFNoLCBSPj5cblxuLyoqXG4gKiBtYWtlVGFza1J1bm5lclx1RkYxQVxuICogLSBSZXVzZXMgRmxvd1J1bnRpbWUgY29uY3VycmVuY3kgc2VtYW50aWNzIChzZXF1ZW50aWFsL3BhcmFsbGVsL2xhdGVzdC9leGhhdXN0KS5cbiAqIC0gU3BsaXRzIGEgc2luZ2xlIHRyaWdnZXIgaW50bzogcGVuZGluZyAoc2VwYXJhdGUgdHhuKSBcdTIxOTIgSU8gXHUyMTkyIHN1Y2Nlc3MvZmFpbHVyZSAoc2VwYXJhdGUgdHhuKS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1ha2VUYXNrUnVubmVyID0gPFBheWxvYWQsIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsIFIsIEEgPSB2b2lkLCBFID0gbmV2ZXI+KFxuICBzdHJlYW06IFN0cmVhbS5TdHJlYW08UGF5bG9hZD4sXG4gIG1vZGU6IFRhc2tSdW5uZXJNb2RlLFxuICBydW50aW1lOiBUYXNrUnVubmVyUnVudGltZSxcbiAgY29uZmlnOiBUYXNrUnVubmVyQ29uZmlnPFBheWxvYWQsIFNoLCBSLCBBLCBFPixcbik6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXIsIExvZ2ljLkVudjxTaCwgUj4+ID0+IHtcbiAgaWYgKG1vZGUgPT09ICdsYXRlc3QnKSB7XG4gICAgcmV0dXJuIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgIGNvbnN0IHRhc2tJZFJlZiA9IHlpZWxkKiBSZWYubWFrZSgwKVxuICAgICAgY29uc3QgY3VycmVudEZpYmVyUmVmID0geWllbGQqIFJlZi5tYWtlPEZpYmVyLlJ1bnRpbWVGaWJlcjx2b2lkLCBuZXZlcj4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICAgICAgY29uc3Qgc3RhcnQgPSAocGF5bG9hZDogUGF5bG9hZCkgPT5cbiAgICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAgIGNvbnN0IHRhc2tJZCA9IHlpZWxkKiBSZWYudXBkYXRlQW5kR2V0KHRhc2tJZFJlZiwgKG4pID0+IG4gKyAxKVxuXG4gICAgICAgICAgY29uc3QgcHJldiA9IHlpZWxkKiBSZWYuZ2V0KGN1cnJlbnRGaWJlclJlZilcbiAgICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgLy8gRG8gbm90IHdhaXQgZm9yIHRoZSBvbGQgZmliZXIgdG8gZnVsbHkgZW5kIChhdm9pZCBibG9ja2luZyBuZXcgdHJpZ2dlcnMpOyB3cml0ZWJhY2sgaXMgZ3VhcmRlZCBieSB0YXNrSWQuXG4gICAgICAgICAgICB5aWVsZCogRmliZXIuaW50ZXJydXB0Rm9yayhwcmV2KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNhbldyaXRlQmFjayA9IFJlZi5nZXQodGFza0lkUmVmKS5waXBlKEVmZmVjdC5tYXAoKGN1cnJlbnQpID0+IGN1cnJlbnQgPT09IHRhc2tJZCkpXG5cbiAgICAgICAgICBjb25zdCBmaWJlciA9IHlpZWxkKiBFZmZlY3QuZm9yayhcbiAgICAgICAgICAgIHJ1blRhc2tMaWZlY3ljbGU8UGF5bG9hZCwgU2gsIFIsIEEsIEU+KHBheWxvYWQsIHJ1bnRpbWUsIGNvbmZpZywgY2FuV3JpdGVCYWNrKSxcbiAgICAgICAgICApXG5cbiAgICAgICAgICB5aWVsZCogUmVmLnNldChjdXJyZW50RmliZXJSZWYsIGZpYmVyKVxuICAgICAgICB9KVxuXG4gICAgICByZXR1cm4geWllbGQqIFN0cmVhbS5ydW5Gb3JFYWNoKHN0cmVhbSwgc3RhcnQpXG4gICAgfSlcbiAgfVxuXG4gIGlmIChtb2RlID09PSAnZXhoYXVzdCcpIHtcbiAgICByZXR1cm4gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgY29uc3QgY29uY3VycmVuY3kgPSB5aWVsZCogcmVzb2x2ZUNvbmN1cnJlbmN5TGltaXQocnVudGltZSlcbiAgICAgIGNvbnN0IGJ1c3lSZWYgPSB5aWVsZCogUmVmLm1ha2UoZmFsc2UpXG5cbiAgICAgIGNvbnN0IG1hcHBlciA9IChwYXlsb2FkOiBQYXlsb2FkKSA9PlxuICAgICAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgY29uc3QgYWNxdWlyZWQgPSB5aWVsZCogUmVmLm1vZGlmeShidXN5UmVmLCAoYnVzeSkgPT5cbiAgICAgICAgICAgIGJ1c3kgPyAoW2ZhbHNlLCBidXN5XSBhcyBjb25zdCkgOiAoW3RydWUsIHRydWVdIGFzIGNvbnN0KSxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKCFhY3F1aXJlZCkge1xuICAgICAgICAgICAgLy8gSWdub3JlIHRyaWdnZXI6IG5vIHBlbmRpbmcgdHJhbnNhY3Rpb24gaXMgcHJvZHVjZWQuXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkKiBydW5UYXNrTGlmZWN5Y2xlPFBheWxvYWQsIFNoLCBSLCBBLCBFPihwYXlsb2FkLCBydW50aW1lLCBjb25maWcpXG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHlpZWxkKiBSZWYuc2V0KGJ1c3lSZWYsIGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgcmV0dXJuIHlpZWxkKiBTdHJlYW0ucnVuRHJhaW4oc3RyZWFtLnBpcGUoU3RyZWFtLm1hcEVmZmVjdChtYXBwZXIsIHsgY29uY3VycmVuY3kgfSkpKVxuICAgIH0pIGFzIEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXIsIExvZ2ljLkVudjxTaCwgUj4+XG4gIH1cblxuICBpZiAobW9kZSA9PT0gJ3BhcmFsbGVsJykge1xuICAgIHJldHVybiBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBjb25jdXJyZW5jeSA9IHlpZWxkKiByZXNvbHZlQ29uY3VycmVuY3lMaW1pdChydW50aW1lKVxuXG4gICAgICByZXR1cm4geWllbGQqIFN0cmVhbS5ydW5EcmFpbihcbiAgICAgICAgc3RyZWFtLnBpcGUoXG4gICAgICAgICAgU3RyZWFtLm1hcEVmZmVjdCgocGF5bG9hZCkgPT4gcnVuVGFza0xpZmVjeWNsZTxQYXlsb2FkLCBTaCwgUiwgQSwgRT4ocGF5bG9hZCwgcnVudGltZSwgY29uZmlnKSwge1xuICAgICAgICAgICAgY29uY3VycmVuY3ksXG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApXG4gICAgfSkgYXMgRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlciwgTG9naWMuRW52PFNoLCBSPj5cbiAgfVxuXG4gIC8vIG1vZGUgPT09IFwidGFza1wiXHVGRjA4c2VxdWVudGlhbFx1RkYwOVxuICByZXR1cm4gU3RyZWFtLnJ1bkZvckVhY2goc3RyZWFtLCAocGF5bG9hZCkgPT5cbiAgICBydW5UYXNrTGlmZWN5Y2xlPFBheWxvYWQsIFNoLCBSLCBBLCBFPihwYXlsb2FkLCBydW50aW1lLCBjb25maWcpLFxuICApIGFzIEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXIsIExvZ2ljLkVudjxTaCwgUj4+XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7O0FBQUEsU0FBUyxPQUFPLFFBQVEsT0FBTyxVQUFVLEtBQUssY0FBYztBQWNyRCxJQUFNLHlCQUF5QixTQUFTLFdBQVcsS0FBSztBQVV4RCxJQUFNLHFCQUFxQixTQUFTLFdBQVcsS0FBSztBQVMzRCxJQUFJLCtCQUErQjtBQUU1QixJQUFNLHVCQUF1QixNQUFZO0FBQzlDLGtDQUFnQztBQUNsQztBQUVPLElBQU0sc0JBQXNCLE1BQVk7QUFDN0MsaUNBQStCLEtBQUssSUFBSSxHQUFHLCtCQUErQixDQUFDO0FBQzdFO0FBRU8sSUFBTSxzQkFBc0IsTUFBZSwrQkFBK0I7QUFxRmpGLElBQU0sVUFBVSxDQUNkLEtBQ0EsWUFDUyxPQUFPLFFBQVEsYUFBYyxJQUFZLE9BQU8sSUFBSTtBQUUvRCxJQUFNLGlCQUFpQixDQUFDLGlCQUFrRTtBQUFBLEVBQ3hGLFNBQVM7QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxFQUNSO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsRUFDUjtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLEVBQ1I7QUFDRjtBQUVPLElBQU0sbUNBQW1DLENBQUMsWUFVL0MsT0FBTyxJQUFJLGFBQWE7QUFDdEIsUUFBTSxRQUFRLE9BQU8sU0FBUyxJQUFJLHNCQUFzQjtBQUN4RCxNQUFJLENBQUMsT0FBTztBQUNWLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxTQUFTLEdBQUc7QUFDZCxXQUFhLE9BQU87QUFBQSxNQUNsQixNQUFNO0FBQUEsTUFDTixVQUFVLFFBQVE7QUFBQSxN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
@@ -1,206 +0,0 @@
1
- // @logixjs/core subpath bundles for @logixjs/sandbox
2
-
3
- import {
4
- isLogicPlanEffect,
5
- make as make2,
6
- markAsLogicPlanEffect
7
- } from "./chunk-PQ652ULI.js";
8
- import {
9
- LogicPhaseServiceTag,
10
- LogicUnitServiceTag,
11
- make
12
- } from "./chunk-JIXTOQXJ.js";
13
-
14
- // ../logix-core/src/internal/runtime/ModuleFactory.ts
15
- import { Context, Effect, Layer, Option, Schema } from "../effect.js";
16
- function Link(modules, logic) {
17
- return Effect.gen(function* () {
18
- const handles = {};
19
- for (const [key, module] of Object.entries(modules)) {
20
- const runtime = yield* module;
21
- handles[key] = {
22
- read: (selector) => Effect.map(runtime.getState, selector),
23
- changes: runtime.changes,
24
- dispatch: runtime.dispatch,
25
- actions$: runtime.actions$,
26
- actions: new Proxy(
27
- {},
28
- {
29
- get: (_target, prop) => (payload) => runtime.dispatch({ _tag: prop, payload })
30
- }
31
- )
32
- };
33
- }
34
- return yield* logic(
35
- handles
36
- );
37
- });
38
- }
39
- function Module(id, def) {
40
- const shape = {
41
- stateSchema: def.state,
42
- actionSchema: Schema.Union(
43
- ...Object.entries(def.actions).map(([tag2, token]) => {
44
- const payload = token.schema;
45
- return Schema.Struct(
46
- payload === Schema.Void ? {
47
- _tag: Schema.Literal(tag2),
48
- payload: Schema.optional(payload)
49
- } : {
50
- _tag: Schema.Literal(tag2),
51
- payload
52
- }
53
- );
54
- })
55
- ),
56
- actionMap: def.actions
57
- };
58
- const reducers = def.reducers && Object.fromEntries(
59
- Object.entries(def.reducers).map(([tag2, reducer]) => [
60
- tag2,
61
- (state, action, sink) => (
62
- // Relies on the runtime `_tag` convention: only actions matching the current tag are routed to this reducer.
63
- reducer(
64
- state,
65
- action,
66
- sink
67
- )
68
- )
69
- ])
70
- );
71
- class ModuleTag extends Context.Tag(`@logixjs/Module/${id}`)() {
72
- }
73
- const tag = ModuleTag;
74
- const moduleTag = Object.assign(tag, {
75
- _kind: "ModuleTag",
76
- id,
77
- shape,
78
- stateSchema: shape.stateSchema,
79
- actionSchema: shape.actionSchema,
80
- actions: shape.actionMap,
81
- reducers: def.reducers,
82
- /**
83
- * Build a Logic program for the current Module:
84
- * - Read its ModuleRuntime from Context at runtime.
85
- * - Build a BoundApi from the runtime.
86
- * - Pass the BoundApi to the caller to build business logic.
87
- */
88
- logic: (build) => {
89
- const logicEffect = Effect.gen(function* () {
90
- const runtime = yield* tag;
91
- const logicUnit = yield* Effect.serviceOption(LogicUnitServiceTag).pipe(
92
- Effect.map(Option.getOrUndefined)
93
- );
94
- const phaseService = yield* Effect.serviceOption(LogicPhaseServiceTag).pipe(
95
- Effect.map(Option.getOrUndefined)
96
- );
97
- const api = make(shape, runtime, {
98
- getPhase: () => phaseService?.current ?? "run",
99
- phaseService,
100
- moduleId: id,
101
- logicUnit
102
- });
103
- let built;
104
- try {
105
- built = build(api);
106
- } catch (err) {
107
- if (err?._tag === "LogicPhaseError") {
108
- return yield* Effect.fail(err);
109
- }
110
- throw err;
111
- }
112
- if (isLogicPlanEffect(built)) {
113
- return yield* built;
114
- }
115
- const isLogicPlan = (value) => Boolean(value && typeof value === "object" && "setup" in value && "run" in value);
116
- const plan = isLogicPlan(built) ? built : {
117
- setup: Effect.void,
118
- run: built
119
- };
120
- return plan;
121
- });
122
- markAsLogicPlanEffect(logicEffect);
123
- return logicEffect;
124
- },
125
- /**
126
- * live: given an initial state and a set of logics, construct a scoped ModuleRuntime Layer.
127
- *
128
- * Env conventions:
129
- * - R represents extra environment required by the logics (services / platform, etc.).
130
- * - ModuleRuntime itself only depends on Scope.Scope and is managed by Layer.scoped.
131
- */
132
- live: (initial, ...logics) => Layer.scoped(
133
- tag,
134
- make2(initial, {
135
- tag,
136
- logics,
137
- moduleId: id,
138
- reducers
139
- })
140
- ),
141
- /**
142
- * implement: build a ModuleImpl blueprint from Module definition + initial state + a set of logics.
143
- *
144
- * - R represents the Env required by the logics.
145
- * - The returned ModuleImpl.layer carries R as its input environment.
146
- * - withLayer/withLayers can progressively narrow R to a more concrete Env (even never).
147
- */
148
- implement: (config) => {
149
- const importedModules = (config.imports ?? []).flatMap((item) => {
150
- if (item._tag === "ModuleImpl") {
151
- return [
152
- item.module
153
- ];
154
- }
155
- return [];
156
- });
157
- const baseLayer = Layer.scoped(
158
- tag,
159
- make2(config.initial, {
160
- tag,
161
- logics: config.logics || [],
162
- processes: config.processes || [],
163
- moduleId: id,
164
- imports: importedModules,
165
- reducers,
166
- stateTransaction: config.stateTransaction
167
- })
168
- );
169
- const processes = config.processes ?? [];
170
- const makeImplWithLayer = (layer) => ({
171
- _tag: "ModuleImpl",
172
- module: moduleTag,
173
- layer,
174
- processes,
175
- stateTransaction: config.stateTransaction,
176
- withLayer: (extra) => {
177
- const provided = layer.pipe(Layer.provide(extra));
178
- const merged = Layer.mergeAll(provided, extra);
179
- return makeImplWithLayer(merged);
180
- },
181
- withLayers: (...extras) => extras.reduce(
182
- (implAcc, extra) => implAcc.withLayer(extra),
183
- makeImplWithLayer(
184
- layer
185
- )
186
- )
187
- });
188
- const initialImpl = makeImplWithLayer(
189
- baseLayer
190
- );
191
- const imports = config.imports ?? [];
192
- const finalImpl = imports.reduce((implAcc, item) => {
193
- const layer = item._tag === "ModuleImpl" ? item.layer : item;
194
- return implAcc.withLayer(layer);
195
- }, initialImpl);
196
- return finalImpl;
197
- }
198
- });
199
- return moduleTag;
200
- }
201
-
202
- export {
203
- Link,
204
- Module
205
- };
206
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvcnVudGltZS9Nb2R1bGVGYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBDb250ZXh0LCBFZmZlY3QsIExheWVyLCBPcHRpb24sIFNjaGVtYSB9IGZyb20gJ2VmZmVjdCdcbmltcG9ydCAqIGFzIE1vZHVsZVJ1bnRpbWVJbXBsIGZyb20gJy4vTW9kdWxlUnVudGltZS5qcydcbmltcG9ydCAqIGFzIEJvdW5kQXBpUnVudGltZSBmcm9tICcuL0JvdW5kQXBpUnVudGltZS5qcydcbmltcG9ydCAqIGFzIExvZ2ljRGlhZ25vc3RpY3MgZnJvbSAnLi9jb3JlL0xvZ2ljRGlhZ25vc3RpY3MuanMnXG5pbXBvcnQgKiBhcyBMb2dpY1BsYW5NYXJrZXIgZnJvbSAnLi9jb3JlL0xvZ2ljUGxhbk1hcmtlci5qcydcbmltcG9ydCB0eXBlICogYXMgQWN0aW9uIGZyb20gJy4uL2FjdGlvbi5qcydcbmltcG9ydCB0eXBlIHsgRmllbGRQYXRoIH0gZnJvbSAnLi4vZmllbGQtcGF0aC5qcydcbmltcG9ydCB0eXBlIHtcbiAgQW55TW9kdWxlU2hhcGUsXG4gIEFueVNjaGVtYSxcbiAgQWN0aW9uc0Zyb21NYXAsXG4gIE1vZHVsZVRhZyBhcyBMb2dpeE1vZHVsZVRhZyxcbiAgTW9kdWxlU2hhcGUsXG4gIFJlZHVjZXJzRnJvbU1hcCxcbiAgU3RhdGVPZixcbiAgQWN0aW9uT2YsXG4gIE1vZHVsZUhhbmRsZSxcbiAgTW9kdWxlTG9naWMsXG4gIE1vZHVsZUltcGwsXG4gIE1vZHVsZUltcGxlbWVudFN0YXRlVHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICcuL2NvcmUvbW9kdWxlLmpzJ1xuXG4vKipcbiAqIHYzOiBMaW5rIChmb3JtZXJseSBPcmNoZXN0cmF0b3IpXG4gKiBBIGdsdWUgbGF5ZXIgZm9yIGNyb3NzLW1vZHVsZSBjb2xsYWJvcmF0aW9uLlxuICpcbiAqIC0gRG9lcyBub3Qgb3duIGl0cyBvd24gU3RhdGUuXG4gKiAtIENhbiBhY2Nlc3MgbXVsdGlwbGUgTW9kdWxlcycgcmVhZG9ubHkgaGFuZGxlcy5cbiAqIC0gQ2FuIGRlZmluZSBMb2dpYyBvbmx5OyBjYW5ub3QgZGVmaW5lIFN0YXRlL0FjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExpbms8TW9kdWxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIExvZ2l4TW9kdWxlVGFnPGFueSwgQW55TW9kdWxlU2hhcGU+PiwgRSA9IG5ldmVyLCBSID0gbmV2ZXI+KFxuICBtb2R1bGVzOiBNb2R1bGVzLFxuICBsb2dpYzogKCQ6IHsgW0sgaW4ga2V5b2YgTW9kdWxlc106IE1vZHVsZUhhbmRsZTxNb2R1bGVzW0tdWydzaGFwZSddPiB9KSA9PiBFZmZlY3QuRWZmZWN0PHZvaWQsIEUsIFI+LFxuKTogRWZmZWN0LkVmZmVjdDx2b2lkLCBFLCBSPiB7XG4gIHJldHVybiBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgaGFuZGxlczogUmVjb3JkPHN0cmluZywgTW9kdWxlSGFuZGxlPEFueU1vZHVsZVNoYXBlPj4gPSB7fVxuXG4gICAgZm9yIChjb25zdCBba2V5LCBtb2R1bGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMpKSB7XG4gICAgICBjb25zdCBydW50aW1lID0geWllbGQqIG1vZHVsZVxuXG4gICAgICBoYW5kbGVzW2tleV0gPSB7XG4gICAgICAgIHJlYWQ6IChzZWxlY3RvcjogYW55KSA9PiBFZmZlY3QubWFwKHJ1bnRpbWUuZ2V0U3RhdGUsIHNlbGVjdG9yKSxcbiAgICAgICAgY2hhbmdlczogcnVudGltZS5jaGFuZ2VzLFxuICAgICAgICBkaXNwYXRjaDogcnVudGltZS5kaXNwYXRjaCxcbiAgICAgICAgYWN0aW9ucyQ6IHJ1bnRpbWUuYWN0aW9ucyQsXG4gICAgICAgIGFjdGlvbnM6IG5ldyBQcm94eShcbiAgICAgICAgICB7fSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBnZXQ6IChfdGFyZ2V0LCBwcm9wKSA9PiAocGF5bG9hZDogYW55KSA9PiBydW50aW1lLmRpc3BhdGNoKHsgX3RhZzogcHJvcCBhcyBzdHJpbmcsIHBheWxvYWQgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geWllbGQqIGxvZ2ljKFxuICAgICAgaGFuZGxlcyBhcyB7XG4gICAgICAgIFtLIGluIGtleW9mIE1vZHVsZXNdOiBNb2R1bGVIYW5kbGU8TW9kdWxlc1tLXVsnc2hhcGUnXT5cbiAgICAgIH0sXG4gICAgKVxuICB9KVxufVxuXG4vKipcbiAqIE1vZHVsZSBmYWN0b3J5IGltcGxlbWVudGF0aW9uOiBjb25zdHJ1Y3QgYSBNb2R1bGVUYWcgZnJvbSBhbiBpZCBhbmQgU2NoZW1hIGRlZmluaXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gTW9kdWxlPElkIGV4dGVuZHMgc3RyaW5nLCBTU2NoZW1hIGV4dGVuZHMgQW55U2NoZW1hLCBBTWFwIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgQWN0aW9uLkFueUFjdGlvblRva2VuPj4oXG4gIGlkOiBJZCxcbiAgZGVmOiB7XG4gICAgcmVhZG9ubHkgc3RhdGU6IFNTY2hlbWFcbiAgICByZWFkb25seSBhY3Rpb25zOiBBTWFwXG4gICAgcmVhZG9ubHkgcmVkdWNlcnM/OiBSZWR1Y2Vyc0Zyb21NYXA8U1NjaGVtYSwgQU1hcD5cbiAgfSxcbik6IExvZ2l4TW9kdWxlVGFnPElkLCBNb2R1bGVTaGFwZTxTU2NoZW1hLCBTY2hlbWEuU2NoZW1hPEFjdGlvbnNGcm9tTWFwPEFNYXA+PiwgQU1hcD4+IHtcbiAgY29uc3Qgc2hhcGU6IE1vZHVsZVNoYXBlPFNTY2hlbWEsIFNjaGVtYS5TY2hlbWE8QWN0aW9uc0Zyb21NYXA8QU1hcD4+LCBBTWFwPiA9IHtcbiAgICBzdGF0ZVNjaGVtYTogZGVmLnN0YXRlLFxuICAgIGFjdGlvblNjaGVtYTogU2NoZW1hLlVuaW9uKFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMoZGVmLmFjdGlvbnMpLm1hcCgoW3RhZywgdG9rZW5dKSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSAodG9rZW4gYXMgQWN0aW9uLkFueUFjdGlvblRva2VuKS5zY2hlbWEgYXMgQW55U2NoZW1hXG4gICAgICAgIHJldHVybiBTY2hlbWEuU3RydWN0KFxuICAgICAgICAgIHBheWxvYWQgPT09IFNjaGVtYS5Wb2lkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBfdGFnOiBTY2hlbWEuTGl0ZXJhbCh0YWcpLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IFNjaGVtYS5vcHRpb25hbChwYXlsb2FkKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgX3RhZzogU2NoZW1hLkxpdGVyYWwodGFnKSxcbiAgICAgICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9KSxcbiAgICApIGFzIHVua25vd24gYXMgU2NoZW1hLlNjaGVtYTxBY3Rpb25zRnJvbU1hcDxBTWFwPj4sXG4gICAgYWN0aW9uTWFwOiBkZWYuYWN0aW9ucyxcbiAgfVxuXG4gIHR5cGUgU2hhcGVTdGF0ZSA9IFN0YXRlT2Y8dHlwZW9mIHNoYXBlPlxuICB0eXBlIFNoYXBlQWN0aW9uID0gQWN0aW9uT2Y8dHlwZW9mIHNoYXBlPlxuXG4gIC8vIE5vcm1hbGl6ZSB0YWcta2V5ZWQgcmVkdWNlcnMgaW50byBgX3RhZyAtPiAoc3RhdGUsIGFjdGlvbiwgc2luaz8pID0+IHN0YXRlYCBmb3IgdGhlIHJ1bnRpbWUuXG4gIGNvbnN0IHJlZHVjZXJzID1cbiAgICBkZWYucmVkdWNlcnMgJiZcbiAgICAoT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZGVmLnJlZHVjZXJzKS5tYXAoKFt0YWcsIHJlZHVjZXJdKSA9PiBbXG4gICAgICAgIHRhZyxcbiAgICAgICAgKHN0YXRlOiBTaGFwZVN0YXRlLCBhY3Rpb246IFNoYXBlQWN0aW9uLCBzaW5rPzogKHBhdGg6IHN0cmluZyB8IEZpZWxkUGF0aCkgPT4gdm9pZCkgPT5cbiAgICAgICAgICAvLyBSZWxpZXMgb24gdGhlIHJ1bnRpbWUgYF90YWdgIGNvbnZlbnRpb246IG9ubHkgYWN0aW9ucyBtYXRjaGluZyB0aGUgY3VycmVudCB0YWcgYXJlIHJvdXRlZCB0byB0aGlzIHJlZHVjZXIuXG4gICAgICAgICAgKHJlZHVjZXIgYXMgYW55KShcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgYWN0aW9uIGFzIHtcbiAgICAgICAgICAgICAgcmVhZG9ubHkgX3RhZzogc3RyaW5nXG4gICAgICAgICAgICAgIHJlYWRvbmx5IHBheWxvYWQ6IHVua25vd25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaW5rLFxuICAgICAgICAgICkgYXMgU2hhcGVTdGF0ZSxcbiAgICAgIF0pLFxuICAgICkgYXMgUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgKHN0YXRlOiBTaGFwZVN0YXRlLCBhY3Rpb246IFNoYXBlQWN0aW9uLCBzaW5rPzogKHBhdGg6IHN0cmluZyB8IEZpZWxkUGF0aCkgPT4gdm9pZCkgPT4gU2hhcGVTdGF0ZVxuICAgID4pXG5cbiAgY2xhc3MgTW9kdWxlVGFnIGV4dGVuZHMgQ29udGV4dC5UYWcoYEBsb2dpeGpzL01vZHVsZS8ke2lkfWApPFxuICAgIE1vZHVsZVRhZyxcbiAgICBpbXBvcnQoJy4vY29yZS9tb2R1bGUuanMnKS5Nb2R1bGVSdW50aW1lPFN0YXRlT2Y8dHlwZW9mIHNoYXBlPiwgQWN0aW9uT2Y8dHlwZW9mIHNoYXBlPj5cbiAgPigpIHt9XG5cbiAgY29uc3QgdGFnID0gTW9kdWxlVGFnXG5cbiAgY29uc3QgbW9kdWxlVGFnID0gT2JqZWN0LmFzc2lnbih0YWcsIHtcbiAgICBfa2luZDogJ01vZHVsZVRhZycgYXMgY29uc3QsXG4gICAgaWQsXG4gICAgc2hhcGUsXG4gICAgc3RhdGVTY2hlbWE6IHNoYXBlLnN0YXRlU2NoZW1hLFxuICAgIGFjdGlvblNjaGVtYTogc2hhcGUuYWN0aW9uU2NoZW1hLFxuICAgIGFjdGlvbnM6IHNoYXBlLmFjdGlvbk1hcCxcbiAgICByZWR1Y2VyczogZGVmLnJlZHVjZXJzLFxuICAgIC8qKlxuICAgICAqIEJ1aWxkIGEgTG9naWMgcHJvZ3JhbSBmb3IgdGhlIGN1cnJlbnQgTW9kdWxlOlxuICAgICAqIC0gUmVhZCBpdHMgTW9kdWxlUnVudGltZSBmcm9tIENvbnRleHQgYXQgcnVudGltZS5cbiAgICAgKiAtIEJ1aWxkIGEgQm91bmRBcGkgZnJvbSB0aGUgcnVudGltZS5cbiAgICAgKiAtIFBhc3MgdGhlIEJvdW5kQXBpIHRvIHRoZSBjYWxsZXIgdG8gYnVpbGQgYnVzaW5lc3MgbG9naWMuXG4gICAgICovXG4gICAgbG9naWM6IDxSID0gdW5rbm93biwgRSA9IG5ldmVyPihcbiAgICAgIGJ1aWxkOiAoYXBpOiBpbXBvcnQoJy4vY29yZS9tb2R1bGUuanMnKS5Cb3VuZEFwaTx0eXBlb2Ygc2hhcGUsIFI+KSA9PiBNb2R1bGVMb2dpYzx0eXBlb2Ygc2hhcGUsIFIsIEU+LFxuICAgICk6IE1vZHVsZUxvZ2ljPHR5cGVvZiBzaGFwZSwgUiwgRT4gPT4ge1xuICAgICAgY29uc3QgbG9naWNFZmZlY3QgPSBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHJ1bnRpbWUgPSB5aWVsZCogdGFnXG4gICAgICAgIGNvbnN0IGxvZ2ljVW5pdCA9IHlpZWxkKiBFZmZlY3Quc2VydmljZU9wdGlvbihMb2dpY0RpYWdub3N0aWNzLkxvZ2ljVW5pdFNlcnZpY2VUYWcpLnBpcGUoXG4gICAgICAgICAgRWZmZWN0Lm1hcChPcHRpb24uZ2V0T3JVbmRlZmluZWQpLFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHBoYXNlU2VydmljZSA9IHlpZWxkKiBFZmZlY3Quc2VydmljZU9wdGlvbihMb2dpY0RpYWdub3N0aWNzLkxvZ2ljUGhhc2VTZXJ2aWNlVGFnKS5waXBlKFxuICAgICAgICAgIEVmZmVjdC5tYXAoT3B0aW9uLmdldE9yVW5kZWZpbmVkKSxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBhcGkgPSBCb3VuZEFwaVJ1bnRpbWUubWFrZTx0eXBlb2Ygc2hhcGUsIFI+KHNoYXBlLCBydW50aW1lLCB7XG4gICAgICAgICAgZ2V0UGhhc2U6ICgpID0+IHBoYXNlU2VydmljZT8uY3VycmVudCA/PyAncnVuJyxcbiAgICAgICAgICBwaGFzZVNlcnZpY2UsXG4gICAgICAgICAgbW9kdWxlSWQ6IGlkLFxuICAgICAgICAgIGxvZ2ljVW5pdCxcbiAgICAgICAgfSlcblxuICAgICAgICBsZXQgYnVpbHQ6IHVua25vd25cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidWlsdCA9IGJ1aWxkKGFwaSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gQ29udmVydCBzeW5jaHJvbm91c2x5IHRocm93biBMb2dpY1BoYXNlRXJyb3IgaW50byBFZmZlY3QuZmFpbCBzbyBydW5TeW5jIHdvbid0IHRyZWF0IGl0IGFzIGFuIFwiYXN5bmMgcGVuZGluZyBmaWJlclwiLlxuICAgICAgICAgIGlmICgoZXJyIGFzIGFueSk/Ll90YWcgPT09ICdMb2dpY1BoYXNlRXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5mYWlsKGVyciBhcyBhbnkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVyclxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKExvZ2ljUGxhbk1hcmtlci5pc0xvZ2ljUGxhbkVmZmVjdChidWlsdCkpIHtcbiAgICAgICAgICByZXR1cm4geWllbGQqIGJ1aWx0IGFzIEVmZmVjdC5FZmZlY3Q8YW55LCBhbnksIGFueT5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTG9naWNQbGFuID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgaW1wb3J0KCcuL2NvcmUvbW9kdWxlLmpzJykuTG9naWNQbGFuPHR5cGVvZiBzaGFwZSwgUiwgRT4gPT5cbiAgICAgICAgICBCb29sZWFuKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3NldHVwJyBpbiAodmFsdWUgYXMgYW55KSAmJiAncnVuJyBpbiAodmFsdWUgYXMgYW55KSlcblxuICAgICAgICBjb25zdCBwbGFuID0gaXNMb2dpY1BsYW4oYnVpbHQpXG4gICAgICAgICAgPyBidWlsdFxuICAgICAgICAgIDogKHtcbiAgICAgICAgICAgICAgc2V0dXA6IEVmZmVjdC52b2lkLFxuICAgICAgICAgICAgICBydW46IGJ1aWx0IGFzIEVmZmVjdC5FZmZlY3Q8YW55LCBhbnksIGFueT4sXG4gICAgICAgICAgICB9IHNhdGlzZmllcyBpbXBvcnQoJy4vY29yZS9tb2R1bGUuanMnKS5Mb2dpY1BsYW48dHlwZW9mIHNoYXBlLCBSLCBFPilcblxuICAgICAgICByZXR1cm4gcGxhblxuICAgICAgfSlcblxuICAgICAgTG9naWNQbGFuTWFya2VyLm1hcmtBc0xvZ2ljUGxhbkVmZmVjdChsb2dpY0VmZmVjdClcbiAgICAgIHJldHVybiBsb2dpY0VmZmVjdFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBsaXZlOiBnaXZlbiBhbiBpbml0aWFsIHN0YXRlIGFuZCBhIHNldCBvZiBsb2dpY3MsIGNvbnN0cnVjdCBhIHNjb3BlZCBNb2R1bGVSdW50aW1lIExheWVyLlxuICAgICAqXG4gICAgICogRW52IGNvbnZlbnRpb25zOlxuICAgICAqIC0gUiByZXByZXNlbnRzIGV4dHJhIGVudmlyb25tZW50IHJlcXVpcmVkIGJ5IHRoZSBsb2dpY3MgKHNlcnZpY2VzIC8gcGxhdGZvcm0sIGV0Yy4pLlxuICAgICAqIC0gTW9kdWxlUnVudGltZSBpdHNlbGYgb25seSBkZXBlbmRzIG9uIFNjb3BlLlNjb3BlIGFuZCBpcyBtYW5hZ2VkIGJ5IExheWVyLnNjb3BlZC5cbiAgICAgKi9cbiAgICBsaXZlOiA8UiA9IG5ldmVyLCBFID0gbmV2ZXI+KFxuICAgICAgaW5pdGlhbDogU3RhdGVPZjx0eXBlb2Ygc2hhcGU+LFxuICAgICAgLi4ubG9naWNzOiBBcnJheTxNb2R1bGVMb2dpYzx0eXBlb2Ygc2hhcGUsIFIsIEU+PlxuICAgICk6IExheWVyLkxheWVyPGltcG9ydCgnLi9jb3JlL21vZHVsZS5qcycpLk1vZHVsZVJ1bnRpbWU8U3RhdGVPZjx0eXBlb2Ygc2hhcGU+LCBBY3Rpb25PZjx0eXBlb2Ygc2hhcGU+PiwgRSwgUj4gPT5cbiAgICAgIExheWVyLnNjb3BlZChcbiAgICAgICAgdGFnLFxuICAgICAgICBNb2R1bGVSdW50aW1lSW1wbC5tYWtlPFN0YXRlT2Y8dHlwZW9mIHNoYXBlPiwgQWN0aW9uT2Y8dHlwZW9mIHNoYXBlPiwgUj4oaW5pdGlhbCwge1xuICAgICAgICAgIHRhZyxcbiAgICAgICAgICBsb2dpY3M6IGxvZ2ljcyBhcyBSZWFkb25seUFycmF5PEVmZmVjdC5FZmZlY3Q8YW55LCBhbnksIGFueT4+LFxuICAgICAgICAgIG1vZHVsZUlkOiBpZCxcbiAgICAgICAgICByZWR1Y2VycyxcbiAgICAgICAgfSksXG4gICAgICApIGFzIHVua25vd24gYXMgTGF5ZXIuTGF5ZXI8XG4gICAgICAgIGltcG9ydCgnLi9jb3JlL21vZHVsZS5qcycpLk1vZHVsZVJ1bnRpbWU8U3RhdGVPZjx0eXBlb2Ygc2hhcGU+LCBBY3Rpb25PZjx0eXBlb2Ygc2hhcGU+PixcbiAgICAgICAgRSxcbiAgICAgICAgUlxuICAgICAgPixcblxuICAgIC8qKlxuICAgICAqIGltcGxlbWVudDogYnVpbGQgYSBNb2R1bGVJbXBsIGJsdWVwcmludCBmcm9tIE1vZHVsZSBkZWZpbml0aW9uICsgaW5pdGlhbCBzdGF0ZSArIGEgc2V0IG9mIGxvZ2ljcy5cbiAgICAgKlxuICAgICAqIC0gUiByZXByZXNlbnRzIHRoZSBFbnYgcmVxdWlyZWQgYnkgdGhlIGxvZ2ljcy5cbiAgICAgKiAtIFRoZSByZXR1cm5lZCBNb2R1bGVJbXBsLmxheWVyIGNhcnJpZXMgUiBhcyBpdHMgaW5wdXQgZW52aXJvbm1lbnQuXG4gICAgICogLSB3aXRoTGF5ZXIvd2l0aExheWVycyBjYW4gcHJvZ3Jlc3NpdmVseSBuYXJyb3cgUiB0byBhIG1vcmUgY29uY3JldGUgRW52IChldmVuIG5ldmVyKS5cbiAgICAgKi9cbiAgICBpbXBsZW1lbnQ6IDxSID0gbmV2ZXI+KGNvbmZpZzoge1xuICAgICAgaW5pdGlhbDogU3RhdGVPZjx0eXBlb2Ygc2hhcGU+XG4gICAgICBsb2dpY3M/OiBBcnJheTxNb2R1bGVMb2dpYzx0eXBlb2Ygc2hhcGUsIFIsIG5ldmVyPj5cbiAgICAgIGltcG9ydHM/OiBSZWFkb25seUFycmF5PExheWVyLkxheWVyPGFueSwgYW55LCBhbnk+IHwgTW9kdWxlSW1wbDxhbnksIEFueU1vZHVsZVNoYXBlLCBhbnk+PlxuICAgICAgLyoqXG4gICAgICAgKiBwcm9jZXNzZXM6IGEgc2V0IG9mIGxvbmctbGl2ZWQgZmxvd3MgYm91bmQgdG8gdGhpcyBNb2R1bGUgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyBMaW5rKS5cbiAgICAgICAqXG4gICAgICAgKiAtIFRoZXNlIEVmZmVjdHMgd2lsbCBiZSBmb3JrZWQgYnkgdGhlIHJ1bnRpbWUgY29udGFpbmVyIChlLmcuIFJ1bnRpbWUubWFrZSkuXG4gICAgICAgKiAtIFR5cGVzIHVzZSByZWxheGVkIEUvUiB0byBlbmFibGUgY29tcG9zaW5nIGNyb3NzLW1vZHVsZSBvcmNoZXN0cmF0aW9uIGxvZ2ljLlxuICAgICAgICogLSBCdXNpbmVzcyBjb2RlIHR5cGljYWxseSBidWlsZHMgdGhlc2UgZmxvd3MgdmlhIExpbmsubWFrZS5cbiAgICAgICAqL1xuICAgICAgcHJvY2Vzc2VzPzogUmVhZG9ubHlBcnJheTxFZmZlY3QuRWZmZWN0PHZvaWQsIGFueSwgYW55Pj5cbiAgICAgIC8qKlxuICAgICAgICogc3RhdGVUcmFuc2FjdGlvbjogbW9kdWxlLWxldmVsIFN0YXRlVHJhbnNhY3Rpb24gY29uZmlnLlxuICAgICAgICpcbiAgICAgICAqIC0gSWYgaW5zdHJ1bWVudGF0aW9uIGlzIG5vdCBwcm92aWRlZCwgZmFsbCBiYWNrIHRvIFJ1bnRpbWUtbGV2ZWwgY29uZmlnIChpZiBhbnkpIG9yIE5PREVfRU5WIGRlZmF1bHRzLlxuICAgICAgICogLSBJZiBpbnN0cnVtZW50YXRpb24gaXMgcHJvdmlkZWQsIGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBSdW50aW1lLWxldmVsIGNvbmZpZyBhbmQgZGVmYXVsdHMuXG4gICAgICAgKi9cbiAgICAgIHN0YXRlVHJhbnNhY3Rpb24/OiBNb2R1bGVJbXBsZW1lbnRTdGF0ZVRyYW5zYWN0aW9uT3B0aW9uc1xuICAgIH0pOiBNb2R1bGVJbXBsPElkLCBNb2R1bGVTaGFwZTxTU2NoZW1hLCBTY2hlbWEuU2NoZW1hPEFjdGlvbnNGcm9tTWFwPEFNYXA+PiwgQU1hcD4sIFI+ID0+IHtcbiAgICAgIGNvbnN0IGltcG9ydGVkTW9kdWxlcyA9IChjb25maWcuaW1wb3J0cyA/PyBbXSkuZmxhdE1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoKGl0ZW0gYXMgTW9kdWxlSW1wbDxhbnksIEFueU1vZHVsZVNoYXBlLCBhbnk+KS5fdGFnID09PSAnTW9kdWxlSW1wbCcpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgKGl0ZW0gYXMgTW9kdWxlSW1wbDxhbnksIEFueU1vZHVsZVNoYXBlLCBhbnk+KS5tb2R1bGUgYXMgdW5rbm93biBhcyBDb250ZXh0LlRhZzxcbiAgICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgICBpbXBvcnQoJy4vY29yZS9tb2R1bGUuanMnKS5Nb2R1bGVSdW50aW1lPGFueSwgYW55PlxuICAgICAgICAgICAgPixcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBiYXNlTGF5ZXIgPSBMYXllci5zY29wZWQoXG4gICAgICAgIHRhZyxcbiAgICAgICAgTW9kdWxlUnVudGltZUltcGwubWFrZTxTdGF0ZU9mPHR5cGVvZiBzaGFwZT4sIEFjdGlvbk9mPHR5cGVvZiBzaGFwZT4sIFI+KGNvbmZpZy5pbml0aWFsLCB7XG4gICAgICAgICAgdGFnLFxuICAgICAgICAgIGxvZ2ljczogKGNvbmZpZy5sb2dpY3MgfHwgW10pIGFzIFJlYWRvbmx5QXJyYXk8RWZmZWN0LkVmZmVjdDxhbnksIGFueSwgYW55Pj4sXG4gICAgICAgICAgcHJvY2Vzc2VzOiAoY29uZmlnLnByb2Nlc3NlcyB8fCBbXSkgYXMgUmVhZG9ubHlBcnJheTxFZmZlY3QuRWZmZWN0PHZvaWQsIGFueSwgYW55Pj4sXG4gICAgICAgICAgbW9kdWxlSWQ6IGlkLFxuICAgICAgICAgIGltcG9ydHM6IGltcG9ydGVkTW9kdWxlcyxcbiAgICAgICAgICByZWR1Y2VycyxcbiAgICAgICAgICBzdGF0ZVRyYW5zYWN0aW9uOiBjb25maWcuc3RhdGVUcmFuc2FjdGlvbixcbiAgICAgICAgfSksXG4gICAgICApIGFzIHVua25vd24gYXMgTGF5ZXIuTGF5ZXI8XG4gICAgICAgIGltcG9ydCgnLi9jb3JlL21vZHVsZS5qcycpLk1vZHVsZVJ1bnRpbWU8U3RhdGVPZjx0eXBlb2Ygc2hhcGU+LCBBY3Rpb25PZjx0eXBlb2Ygc2hhcGU+PixcbiAgICAgICAgbmV2ZXIsXG4gICAgICAgIGFueVxuICAgICAgPlxuXG4gICAgICBjb25zdCBwcm9jZXNzZXMgPSBjb25maWcucHJvY2Vzc2VzID8/IFtdXG5cbiAgICAgIGNvbnN0IG1ha2VJbXBsV2l0aExheWVyID0gKFxuICAgICAgICBsYXllcjogTGF5ZXIuTGF5ZXI8XG4gICAgICAgICAgaW1wb3J0KCcuL2NvcmUvbW9kdWxlLmpzJykuTW9kdWxlUnVudGltZTxTdGF0ZU9mPHR5cGVvZiBzaGFwZT4sIEFjdGlvbk9mPHR5cGVvZiBzaGFwZT4+LFxuICAgICAgICAgIG5ldmVyLFxuICAgICAgICAgIGFueVxuICAgICAgICA+LFxuICAgICAgKTogTW9kdWxlSW1wbDxJZCwgTW9kdWxlU2hhcGU8U1NjaGVtYSwgU2NoZW1hLlNjaGVtYTxBY3Rpb25zRnJvbU1hcDxBTWFwPj4sIEFNYXA+LCBhbnk+ID0+ICh7XG4gICAgICAgIF90YWc6ICdNb2R1bGVJbXBsJyxcbiAgICAgICAgbW9kdWxlOiBtb2R1bGVUYWcgYXMgdW5rbm93biBhcyBMb2dpeE1vZHVsZVRhZzxcbiAgICAgICAgICBJZCxcbiAgICAgICAgICBNb2R1bGVTaGFwZTxTU2NoZW1hLCBTY2hlbWEuU2NoZW1hPEFjdGlvbnNGcm9tTWFwPEFNYXA+PiwgQU1hcD5cbiAgICAgICAgPixcbiAgICAgICAgbGF5ZXIsXG4gICAgICAgIHByb2Nlc3NlcyxcbiAgICAgICAgc3RhdGVUcmFuc2FjdGlvbjogY29uZmlnLnN0YXRlVHJhbnNhY3Rpb24sXG4gICAgICAgIHdpdGhMYXllcjogKFxuICAgICAgICAgIGV4dHJhOiBMYXllci5MYXllcjxhbnksIG5ldmVyLCBhbnk+LFxuICAgICAgICApOiBNb2R1bGVJbXBsPElkLCBNb2R1bGVTaGFwZTxTU2NoZW1hLCBTY2hlbWEuU2NoZW1hPEFjdGlvbnNGcm9tTWFwPEFNYXA+PiwgQU1hcD4sIGFueT4gPT4ge1xuICAgICAgICAgIGNvbnN0IHByb3ZpZGVkID0gKFxuICAgICAgICAgICAgbGF5ZXIgYXMgTGF5ZXIuTGF5ZXI8XG4gICAgICAgICAgICAgIGltcG9ydCgnLi9jb3JlL21vZHVsZS5qcycpLk1vZHVsZVJ1bnRpbWU8U3RhdGVPZjx0eXBlb2Ygc2hhcGU+LCBBY3Rpb25PZjx0eXBlb2Ygc2hhcGU+PixcbiAgICAgICAgICAgICAgbmV2ZXIsXG4gICAgICAgICAgICAgIGFueVxuICAgICAgICAgICAgPlxuICAgICAgICAgICkucGlwZShMYXllci5wcm92aWRlKGV4dHJhIGFzIExheWVyLkxheWVyPGFueSwgbmV2ZXIsIGFueT4pKVxuXG4gICAgICAgICAgY29uc3QgbWVyZ2VkID0gTGF5ZXIubWVyZ2VBbGwocHJvdmlkZWQsIGV4dHJhIGFzIExheWVyLkxheWVyPGFueSwgbmV2ZXIsIGFueT4pIGFzIExheWVyLkxheWVyPFxuICAgICAgICAgICAgaW1wb3J0KCcuL2NvcmUvbW9kdWxlLmpzJykuTW9kdWxlUnVudGltZTxTdGF0ZU9mPHR5cGVvZiBzaGFwZT4sIEFjdGlvbk9mPHR5cGVvZiBzaGFwZT4+LFxuICAgICAgICAgICAgbmV2ZXIsXG4gICAgICAgICAgICBhbnlcbiAgICAgICAgICA+XG5cbiAgICAgICAgICByZXR1cm4gbWFrZUltcGxXaXRoTGF5ZXIobWVyZ2VkKVxuICAgICAgICB9LFxuICAgICAgICB3aXRoTGF5ZXJzOiAoXG4gICAgICAgICAgLi4uZXh0cmFzOiBSZWFkb25seUFycmF5PExheWVyLkxheWVyPGFueSwgbmV2ZXIsIGFueT4+XG4gICAgICAgICk6IE1vZHVsZUltcGw8SWQsIE1vZHVsZVNoYXBlPFNTY2hlbWEsIFNjaGVtYS5TY2hlbWE8QWN0aW9uc0Zyb21NYXA8QU1hcD4+LCBBTWFwPiwgYW55PiA9PlxuICAgICAgICAgIGV4dHJhcy5yZWR1Y2U8TW9kdWxlSW1wbDxJZCwgTW9kdWxlU2hhcGU8U1NjaGVtYSwgU2NoZW1hLlNjaGVtYTxBY3Rpb25zRnJvbU1hcDxBTWFwPj4sIEFNYXA+LCBhbnk+PihcbiAgICAgICAgICAgIChpbXBsQWNjLCBleHRyYSkgPT4gaW1wbEFjYy53aXRoTGF5ZXIoZXh0cmEpLFxuICAgICAgICAgICAgbWFrZUltcGxXaXRoTGF5ZXIoXG4gICAgICAgICAgICAgIGxheWVyIGFzIExheWVyLkxheWVyPFxuICAgICAgICAgICAgICAgIGltcG9ydCgnLi9jb3JlL21vZHVsZS5qcycpLk1vZHVsZVJ1bnRpbWU8U3RhdGVPZjx0eXBlb2Ygc2hhcGU+LCBBY3Rpb25PZjx0eXBlb2Ygc2hhcGU+PixcbiAgICAgICAgICAgICAgICBuZXZlcixcbiAgICAgICAgICAgICAgICBhbnlcbiAgICAgICAgICAgICAgPixcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIFN0YXJ0IGZyb20gYmFzZUxheWVyIGFuZCBsYXllci1pbiBpbXBvcnRzIChMYXllciBvciBvdGhlciBNb2R1bGVJbXBsLmxheWVyKSBzZXF1ZW50aWFsbHkuXG4gICAgICBjb25zdCBpbml0aWFsSW1wbCA9IG1ha2VJbXBsV2l0aExheWVyKFxuICAgICAgICBiYXNlTGF5ZXIgYXMgTGF5ZXIuTGF5ZXI8XG4gICAgICAgICAgaW1wb3J0KCcuL2NvcmUvbW9kdWxlLmpzJykuTW9kdWxlUnVudGltZTxTdGF0ZU9mPHR5cGVvZiBzaGFwZT4sIEFjdGlvbk9mPHR5cGVvZiBzaGFwZT4+LFxuICAgICAgICAgIG5ldmVyLFxuICAgICAgICAgIGFueVxuICAgICAgICA+LFxuICAgICAgKVxuXG4gICAgICBjb25zdCBpbXBvcnRzID0gY29uZmlnLmltcG9ydHMgPz8gW11cblxuICAgICAgY29uc3QgZmluYWxJbXBsID0gaW1wb3J0cy5yZWR1Y2U8XG4gICAgICAgIE1vZHVsZUltcGw8SWQsIE1vZHVsZVNoYXBlPFNTY2hlbWEsIFNjaGVtYS5TY2hlbWE8QWN0aW9uc0Zyb21NYXA8QU1hcD4+LCBBTWFwPiwgYW55PlxuICAgICAgPigoaW1wbEFjYywgaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBsYXllciA9XG4gICAgICAgICAgKGl0ZW0gYXMgTW9kdWxlSW1wbDxhbnksIEFueU1vZHVsZVNoYXBlLCBhbnk+KS5fdGFnID09PSAnTW9kdWxlSW1wbCdcbiAgICAgICAgICAgID8gKGl0ZW0gYXMgTW9kdWxlSW1wbDxhbnksIEFueU1vZHVsZVNoYXBlLCBhbnk+KS5sYXllclxuICAgICAgICAgICAgOiAoaXRlbSBhcyBMYXllci5MYXllcjxhbnksIGFueSwgYW55PilcblxuICAgICAgICByZXR1cm4gaW1wbEFjYy53aXRoTGF5ZXIobGF5ZXIgYXMgTGF5ZXIuTGF5ZXI8YW55LCBuZXZlciwgYW55PilcbiAgICAgIH0sIGluaXRpYWxJbXBsKVxuXG4gICAgICByZXR1cm4gZmluYWxJbXBsXG4gICAgfSxcbiAgfSlcblxuICByZXR1cm4gbW9kdWxlVGFnIGFzIExvZ2l4TW9kdWxlVGFnPElkLCBNb2R1bGVTaGFwZTxTU2NoZW1hLCBTY2hlbWEuU2NoZW1hPEFjdGlv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
@@ -1,86 +0,0 @@
1
- // @logixjs/core subpath bundles for @logixjs/sandbox
2
-
3
-
4
- // ../logix-core/src/internal/runtime/core/FullCutoverGate.ts
5
- var CutoverCoverageMatrix = {
6
- version: "v1",
7
- requiredServiceIds: ["txnQueue", "operationRunner", "transaction", "dispatch"]
8
- };
9
- var expectedImplIdForKernel = (kernelId) => kernelId === "core" ? "builtin" : kernelId;
10
- var parseFallbackServiceIds = (overridesApplied) => {
11
- const out = /* @__PURE__ */ new Set();
12
- for (const entry of overridesApplied) {
13
- if (!entry.includes("(fallback=")) continue;
14
- const colon = entry.indexOf(":");
15
- if (colon < 0) continue;
16
- const eq = entry.indexOf("=", colon + 1);
17
- if (eq < 0) continue;
18
- const serviceId = entry.slice(colon + 1, eq);
19
- if (serviceId.length > 0) out.add(serviceId);
20
- }
21
- return Array.from(out).sort((a, b) => a.localeCompare(b));
22
- };
23
- var collectMissingServiceIds = (args) => {
24
- const bindingByServiceId = /* @__PURE__ */ new Map();
25
- for (const b of args.bindings) {
26
- bindingByServiceId.set(b.serviceId, b);
27
- }
28
- const missing = [];
29
- for (const serviceId of args.requiredServiceIds) {
30
- const binding = bindingByServiceId.get(serviceId);
31
- const implId = binding?.implId;
32
- if (!implId || implId !== args.expectedImplId) {
33
- missing.push(serviceId);
34
- }
35
- }
36
- return missing;
37
- };
38
- var evaluateFullCutoverGate = (args) => {
39
- const expectedImplId = expectedImplIdForKernel(args.requestedKernelId);
40
- const matrix = args.coverageMatrix ?? CutoverCoverageMatrix;
41
- const fallbackServiceIds = parseFallbackServiceIds(args.runtimeServicesEvidence.overridesApplied);
42
- const missingServiceIds = collectMissingServiceIds({
43
- expectedImplId,
44
- requiredServiceIds: matrix.requiredServiceIds,
45
- bindings: args.runtimeServicesEvidence.bindings
46
- });
47
- const fullyActivated = missingServiceIds.length === 0 && fallbackServiceIds.length === 0;
48
- const verdict = args.mode === "fullCutover" ? fullyActivated ? "PASS" : "FAIL" : "PASS";
49
- const moduleIdRaw = args.runtimeServicesEvidence.moduleId;
50
- const moduleId = typeof moduleIdRaw === "string" && moduleIdRaw.length > 0 ? moduleIdRaw : "unknown";
51
- const anchor = {
52
- moduleId,
53
- instanceId: args.runtimeServicesEvidence.instanceId,
54
- txnSeq: 0
55
- };
56
- const level = args.diagnosticsLevel ?? "off";
57
- return {
58
- version: "v1",
59
- mode: args.mode,
60
- requestedKernelId: args.requestedKernelId,
61
- verdict,
62
- fullyActivated,
63
- missingServiceIds,
64
- fallbackServiceIds,
65
- anchor,
66
- ...level === "off" ? {} : {
67
- details: {
68
- expectedImplId,
69
- bindings: args.runtimeServicesEvidence.bindings,
70
- overridesApplied: args.runtimeServicesEvidence.overridesApplied
71
- }
72
- }
73
- };
74
- };
75
-
76
- // ../logix-core/src/internal/runtime/core/RuntimeServiceBuiltins.ts
77
- import { Context } from "../effect.js";
78
- var RuntimeServiceBuiltinsTag = class extends Context.Tag("@logixjs/core/RuntimeServiceBuiltins")() {
79
- };
80
-
81
- export {
82
- CutoverCoverageMatrix,
83
- evaluateFullCutoverGate,
84
- RuntimeServiceBuiltinsTag
85
- };
86
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvcnVudGltZS9jb3JlL0Z1bGxDdXRvdmVyR2F0ZS50cyIsICIuLi8uLi8uLi8uLi9sb2dpeC1jb3JlL3NyYy9pbnRlcm5hbC9ydW50aW1lL2NvcmUvUnVudGltZVNlcnZpY2VCdWlsdGlucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBLZXJuZWxJZCB9IGZyb20gJy4vS2VybmVsUmVmLmpzJ1xuaW1wb3J0IHR5cGUgeyBSdW50aW1lU2VydmljZUJpbmRpbmcsIFJ1bnRpbWVTZXJ2aWNlc0V2aWRlbmNlIH0gZnJvbSAnLi9SdW50aW1lS2VybmVsLmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1dG92ZXJDb3ZlcmFnZU1hdHJpeCB7XG4gIHJlYWRvbmx5IHZlcnNpb246ICd2MSdcbiAgcmVhZG9ubHkgcmVxdWlyZWRTZXJ2aWNlSWRzOiBSZWFkb25seUFycmF5PHN0cmluZz5cbn1cblxuZXhwb3J0IGNvbnN0IEN1dG92ZXJDb3ZlcmFnZU1hdHJpeCA9IHtcbiAgdmVyc2lvbjogJ3YxJyxcbiAgcmVxdWlyZWRTZXJ2aWNlSWRzOiBbJ3R4blF1ZXVlJywgJ29wZXJhdGlvblJ1bm5lcicsICd0cmFuc2FjdGlvbicsICdkaXNwYXRjaCddLFxufSBhcyBjb25zdCBzYXRpc2ZpZXMgQ3V0b3ZlckNvdmVyYWdlTWF0cml4XG5cbmV4cG9ydCB0eXBlIEZ1bGxDdXRvdmVyR2F0ZU1vZGUgPSAndHJpYWwnIHwgJ2Z1bGxDdXRvdmVyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bGxDdXRvdmVyR2F0ZUFuY2hvciB7XG4gIHJlYWRvbmx5IG1vZHVsZUlkOiBzdHJpbmdcbiAgcmVhZG9ubHkgaW5zdGFuY2VJZDogc3RyaW5nXG4gIC8qKlxuICAgKiBDb252ZW50aW9uOiB0eG5TZXE9MCBkZW5vdGVzIGFzc2VtYmx5IChhIHdpcmluZy10aW1lIGZhaWx1cmUgYW5jaG9yKS5cbiAgICogRnVsbCBDdXRvdmVyIEdhdGUgaXMgZXZhbHVhdGVkIGR1cmluZyBhc3NlbWJseSBieSBkZWZhdWx0LCBzbyBpdCBkb2VzIG5vdCBkZXBlbmQgb24gYSByZWFsIHR4bi5cbiAgICovXG4gIHJlYWRvbmx5IHR4blNlcTogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIEZ1bGxDdXRvdmVyR2F0ZVZlcmRpY3QgPSAnUEFTUycgfCAnRkFJTCdcblxuZXhwb3J0IGludGVyZmFjZSBGdWxsQ3V0b3ZlckdhdGVSZXN1bHQge1xuICByZWFkb25seSB2ZXJzaW9uOiAndjEnXG4gIHJlYWRvbmx5IG1vZGU6IEZ1bGxDdXRvdmVyR2F0ZU1vZGVcbiAgcmVhZG9ubHkgcmVxdWVzdGVkS2VybmVsSWQ6IEtlcm5lbElkXG4gIHJlYWRvbmx5IHZlcmRpY3Q6IEZ1bGxDdXRvdmVyR2F0ZVZlcmRpY3RcbiAgLyoqXG4gICAqIGZ1bGx5QWN0aXZhdGVkOiBhIHN0cmljdGVyIFwiZnVsbCBjdXRvdmVyXCIgdHJ1dGggdmFsdWUuXG4gICAqIC0gUmVxdWlyZXMgZXZlcnkgc2VydmljZUlkIGluIHRoZSBjb3ZlcmFnZSBtYXRyaXggdG8gYmUgYm91bmQgdG8gdGhlIGV4cGVjdGVkIGltcGxJZC5cbiAgICogLSBSZXF1aXJlcyBubyBmYWxsYmFjayAoYW55IGBmYWxsYmFjaz1gIGluIG92ZXJyaWRlc0FwcGxpZWQgbWVhbnMgbm90IGZ1bGx5IGFjdGl2YXRlZCkuXG4gICAqXG4gICAqIE5vdGU6IGluIHRyaWFsIG1vZGUgdGhlIHZlcmRpY3QgbWF5IGJlIFBBU1Mgd2hpbGUgZnVsbHlBY3RpdmF0ZWQgY2FuIHN0aWxsIGJlIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVsbHlBY3RpdmF0ZWQ6IGJvb2xlYW5cbiAgcmVhZG9ubHkgbWlzc2luZ1NlcnZpY2VJZHM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuICByZWFkb25seSBmYWxsYmFja1NlcnZpY2VJZHM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuICByZWFkb25seSBhbmNob3I6IEZ1bGxDdXRvdmVyR2F0ZUFuY2hvclxuICAvKipcbiAgICogV2hlbiBkaWFnbm9zdGljcz1vZmYsIGl0IG11c3Qgc3RheSBzbGltIChhdm9pZCBwZXJtYW5lbnQgb3ZlcmhlYWQpLlxuICAgKiBJbiBsaWdodC9mdWxsLCBhZGRpdGlvbmFsIGV4cGxhaW5hYmxlIGluZm8gaXMgYWxsb3dlZCAoc3RpbGwgbXVzdCBiZSBzZXJpYWxpemFibGUpLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV0YWlscz86IHtcbiAgICByZWFkb25seSBleHBlY3RlZEltcGxJZDogc3RyaW5nXG4gICAgcmVhZG9ubHkgYmluZGluZ3M6IFJlYWRvbmx5QXJyYXk8UnVudGltZVNlcnZpY2VCaW5kaW5nPlxuICAgIHJlYWRvbmx5IG92ZXJyaWRlc0FwcGxpZWQ6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuICB9XG59XG5cbmNvbnN0IGV4cGVjdGVkSW1wbElkRm9yS2VybmVsID0gKGtlcm5lbElkOiBLZXJuZWxJZCk6IHN0cmluZyA9PiAoa2VybmVsSWQgPT09ICdjb3JlJyA/ICdidWlsdGluJyA6IGtlcm5lbElkKVxuXG5jb25zdCBwYXJzZUZhbGxiYWNrU2VydmljZUlkcyA9IChvdmVycmlkZXNBcHBsaWVkOiBSZWFkb25seUFycmF5PHN0cmluZz4pOiBSZWFkb25seUFycmF5PHN0cmluZz4gPT4ge1xuICBjb25zdCBvdXQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIG92ZXJyaWRlc0FwcGxpZWQpIHtcbiAgICBpZiAoIWVudHJ5LmluY2x1ZGVzKCcoZmFsbGJhY2s9JykpIGNvbnRpbnVlXG4gICAgY29uc3QgY29sb24gPSBlbnRyeS5pbmRleE9mKCc6JylcbiAgICBpZiAoY29sb24gPCAwKSBjb250aW51ZVxuICAgIGNvbnN0IGVxID0gZW50cnkuaW5kZXhPZignPScsIGNvbG9uICsgMSlcbiAgICBpZiAoZXEgPCAwKSBjb250aW51ZVxuICAgIGNvbnN0IHNlcnZpY2VJZCA9IGVudHJ5LnNsaWNlKGNvbG9uICsgMSwgZXEpXG4gICAgaWYgKHNlcnZpY2VJZC5sZW5ndGggPiAwKSBvdXQuYWRkKHNlcnZpY2VJZClcbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShvdXQpLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbn1cblxuY29uc3QgY29sbGVjdE1pc3NpbmdTZXJ2aWNlSWRzID0gKGFyZ3M6IHtcbiAgcmVhZG9ubHkgZXhwZWN0ZWRJbXBsSWQ6IHN0cmluZ1xuICByZWFkb25seSByZXF1aXJlZFNlcnZpY2VJZHM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuICByZWFkb25seSBiaW5kaW5nczogUmVhZG9ubHlBcnJheTxSdW50aW1lU2VydmljZUJpbmRpbmc+XG59KTogUmVhZG9ubHlBcnJheTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYmluZGluZ0J5U2VydmljZUlkID0gbmV3IE1hcDxzdHJpbmcsIFJ1bnRpbWVTZXJ2aWNlQmluZGluZz4oKVxuICBmb3IgKGNvbnN0IGIgb2YgYXJncy5iaW5kaW5ncykge1xuICAgIGJpbmRpbmdCeVNlcnZpY2VJZC5zZXQoYi5zZXJ2aWNlSWQsIGIpXG4gIH1cblxuICBjb25zdCBtaXNzaW5nOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3Qgc2VydmljZUlkIG9mIGFyZ3MucmVxdWlyZWRTZXJ2aWNlSWRzKSB7XG4gICAgY29uc3QgYmluZGluZyA9IGJpbmRpbmdCeVNlcnZpY2VJZC5nZXQoc2VydmljZUlkKVxuICAgIGNvbnN0IGltcGxJZCA9IGJpbmRpbmc/LmltcGxJZFxuICAgIGlmICghaW1wbElkIHx8IGltcGxJZCAhPT0gYXJncy5leHBlY3RlZEltcGxJZCkge1xuICAgICAgbWlzc2luZy5wdXNoKHNlcnZpY2VJZClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWlzc2luZ1xufVxuXG5leHBvcnQgY29uc3QgZXZhbHVhdGVGdWxsQ3V0b3ZlckdhdGUgPSAoYXJnczoge1xuICByZWFkb25seSBtb2RlOiBGdWxsQ3V0b3ZlckdhdGVNb2RlXG4gIHJlYWRvbmx5IHJlcXVlc3RlZEtlcm5lbElkOiBLZXJuZWxJZFxuICByZWFkb25seSBydW50aW1lU2VydmljZXNFdmlkZW5jZTogUnVudGltZVNlcnZpY2VzRXZpZGVuY2VcbiAgcmVhZG9ubHkgY292ZXJhZ2VNYXRyaXg/OiBDdXRvdmVyQ292ZXJhZ2VNYXRyaXhcbiAgcmVhZG9ubHkgZGlhZ25vc3RpY3NMZXZlbD86ICdvZmYnIHwgJ2xpZ2h0JyB8ICdmdWxsJyB8ICdzYW1wbGVkJ1xufSk6IEZ1bGxDdXRvdmVyR2F0ZVJlc3VsdCA9PiB7XG4gIGNvbnN0IGV4cGVjdGVkSW1wbElkID0gZXhwZWN0ZWRJbXBsSWRGb3JLZXJuZWwoYXJncy5yZXF1ZXN0ZWRLZXJuZWxJZClcbiAgY29uc3QgbWF0cml4ID0gYXJncy5jb3ZlcmFnZU1hdHJpeCA/PyBDdXRvdmVyQ292ZXJhZ2VNYXRyaXhcblxuICBjb25zdCBmYWxsYmFja1NlcnZpY2VJZHMgPSBwYXJzZUZhbGxiYWNrU2VydmljZUlkcyhhcmdzLnJ1bnRpbWVTZXJ2aWNlc0V2aWRlbmNlLm92ZXJyaWRlc0FwcGxpZWQpXG4gIGNvbnN0IG1pc3NpbmdTZXJ2aWNlSWRzID0gY29sbGVjdE1pc3NpbmdTZXJ2aWNlSWRzKHtcbiAgICBleHBlY3RlZEltcGxJZCxcbiAgICByZXF1aXJlZFNlcnZpY2VJZHM6IG1hdHJpeC5yZXF1aXJlZFNlcnZpY2VJZHMsXG4gICAgYmluZGluZ3M6IGFyZ3MucnVudGltZVNlcnZpY2VzRXZpZGVuY2UuYmluZGluZ3MsXG4gIH0pXG5cbiAgY29uc3QgZnVsbHlBY3RpdmF0ZWQgPSBtaXNzaW5nU2VydmljZUlkcy5sZW5ndGggPT09IDAgJiYgZmFsbGJhY2tTZXJ2aWNlSWRzLmxlbmd0aCA9PT0gMFxuXG4gIGNvbnN0IHZlcmRpY3Q6IEZ1bGxDdXRvdmVyR2F0ZVZlcmRpY3QgPSBhcmdzLm1vZGUgPT09ICdmdWxsQ3V0b3ZlcicgPyAoZnVsbHlBY3RpdmF0ZWQgPyAnUEFTUycgOiAnRkFJTCcpIDogJ1BBU1MnXG5cbiAgY29uc3QgbW9kdWxlSWRSYXcgPSBhcmdzLnJ1bnRpbWVTZXJ2aWNlc0V2aWRlbmNlLm1vZHVsZUlkXG4gIGNvbnN0IG1vZHVsZUlkID0gdHlwZW9mIG1vZHVsZUlkUmF3ID09PSAnc3RyaW5nJyAmJiBtb2R1bGVJZFJhdy5sZW5ndGggPiAwID8gbW9kdWxlSWRSYXcgOiAndW5rbm93bidcblxuICBjb25zdCBhbmNob3I6IEZ1bGxDdXRvdmVyR2F0ZUFuY2hvciA9IHtcbiAgICBtb2R1bGVJZCxcbiAgICBpbnN0YW5jZUlkOiBhcmdzLnJ1bnRpbWVTZXJ2aWNlc0V2aWRlbmNlLmluc3RhbmNlSWQsXG4gICAgdHhuU2VxOiAwLFxuICB9XG5cbiAgY29uc3QgbGV2ZWwgPSBhcmdzLmRpYWdub3N0aWNzTGV2ZWwgPz8gJ29mZidcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246ICd2MScsXG4gICAgbW9kZTogYXJncy5tb2RlLFxuICAgIHJlcXVlc3RlZEtlcm5lbElkOiBhcmdzLnJlcXVlc3RlZEtlcm5lbElkLFxuICAgIHZlcmRpY3QsXG4gICAgZnVsbHlBY3RpdmF0ZWQsXG4gICAgbWlzc2luZ1NlcnZpY2VJZHMsXG4gICAgZmFsbGJhY2tTZXJ2aWNlSWRzLFxuICAgIGFuY2hvcixcbiAgICAuLi4obGV2ZWwgPT09ICdvZmYnXG4gICAgICA/IHt9XG4gICAgICA6IHtcbiAgICAgICAgICBkZXRhaWxzOiB7XG4gICAgICAgICAgICBleHBlY3RlZEltcGxJZCxcbiAgICAgICAgICAgIGJpbmRpbmdzOiBhcmdzLnJ1bnRpbWVTZXJ2aWNlc0V2aWRlbmNlLmJpbmRpbmdzLFxuICAgICAgICAgICAgb3ZlcnJpZGVzQXBwbGllZDogYXJncy5ydW50aW1lU2VydmljZXNFdmlkZW5jZS5vdmVycmlkZXNBcHBsaWVkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICB9XG59XG4iLCAiaW1wb3J0IHsgQ29udGV4dCwgRWZmZWN0IH0gZnJvbSAnZWZmZWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTZXJ2aWNlQnVpbHRpbnMge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgbWFrZSBFZmZlY3Qgb2YgYSBidWlsdGluIGltcGxlbWVudGF0aW9uIChwcm92aWRlZCBieSBNb2R1bGVSdW50aW1lIGR1cmluZyBhc3NlbWJseSwgYXZvaWRpbmcgZXh0ZXJuYWwgY29kZVxuICAgKiBjYXB0dXJpbmcgaW50ZXJuYWwgY2xvc3VyZXMvc3RhdGUpLlxuICAgKiAtIEZvciBrZXJuZWwgaW1wbGVtZW50b3JzIG9ubHkgKGUuZy4gY29yZS1uZykgdG8gaW1wbGVtZW50IGJlaGF2aW9yLWVxdWl2YWxlbnQgcmVwbGFjZW1lbnRzIG9yIHRoaW4gd3JhcHBlcnMuXG4gICAqIC0gTm90IGFuIGFwcC1mYWNpbmcgY29udHJhY3Q7IG11c3Qgbm90IGJlIGRlcGVuZGVkIG9uIGZyb20gYnVzaW5lc3MgRmxvdy9Mb2dpYy5cbiAgICovXG4gIHJlYWRvbmx5IGdldEJ1aWx0aW5NYWtlOiAoc2VydmljZUlkOiBzdHJpbmcpID0+IEVmZmVjdC5FZmZlY3Q8dW5rbm93biwgbmV2ZXIsIGFueT5cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVTZXJ2aWNlQnVpbHRpbnNUYWcgZXh0ZW5kcyBDb250ZXh0LlRhZygnQGxvZ2l4anMvY29yZS9SdW50aW1lU2VydmljZUJ1aWx0aW5zJyk8XG4gIFJ1bnRpbWVTZXJ2aWNlQnVpbHRpbnNUYWcsXG4gIFJ1bnRpbWVTZXJ2aWNlQnVpbHRpbnNcbj4oKSB7fVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7OztBQVFPLElBQU0sd0JBQXdCO0FBQUEsRUFDbkMsU0FBUztBQUFBLEVBQ1Qsb0JBQW9CLENBQUMsWUFBWSxtQkFBbUIsZUFBZSxVQUFVO0FBQy9FO0FBMkNBLElBQU0sMEJBQTBCLENBQUMsYUFBZ0MsYUFBYSxTQUFTLFlBQVk7QUFFbkcsSUFBTSwwQkFBMEIsQ0FBQyxxQkFBbUU7QUFDbEcsUUFBTSxNQUFNLG9CQUFJLElBQVk7QUFDNUIsYUFBVyxTQUFTLGtCQUFr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