@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
@@ -0,0 +1,203 @@
1
+ // @logix/core subpath bundles for @logix/sandbox
2
+
3
+ import {
4
+ isDevEnv
5
+ } from "./chunk-GP37MEGJ.js";
6
+ import {
7
+ record
8
+ } from "./chunk-CVZPRIDB.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 resolve = (eff, payload) => typeof eff === "function" ? eff(payload) : eff;
14
+ var defaultOrigins = (triggerName) => ({
15
+ pending: {
16
+ kind: "task:pending",
17
+ name: triggerName
18
+ },
19
+ success: {
20
+ kind: "service-callback",
21
+ name: "task:success"
22
+ },
23
+ failure: {
24
+ kind: "service-callback",
25
+ name: "task:failure"
26
+ }
27
+ });
28
+ var emitInvalidUsageDiagnostic = (moduleId, instanceId) => record({
29
+ type: "diagnostic",
30
+ moduleId,
31
+ instanceId,
32
+ code: "logic::invalid_usage",
33
+ severity: "error",
34
+ message: "run*Task is not allowed inside a synchronous StateTransaction body (it may deadlock the txnQueue).",
35
+ hint: "\u8BF7\u5C06 run*Task \u653E\u5230 $.onAction/$.onState/$.on \u7B49 watcher \u7684 run \u6BB5\uFF1B\u4E0D\u8981\u5728 reducer / trait.run / \u5355\u7B14\u4E8B\u52A1\u7684\u540C\u6B65 body \u5185\u76F4\u63A5\u8C03\u7528\u3002\u82E5\u9700\u8981\u957F\u94FE\u8DEF\uFF0C\u8BF7\u7528\u591A\u5165\u53E3\uFF08pending\u2192IO\u2192writeback\uFF09\u6A21\u5F0F\u3002",
36
+ kind: "run_task_in_transaction"
37
+ });
38
+ var shouldNoopDueToSyncTxn = (runtime) => Effect.gen(function* () {
39
+ const inTxn = yield* FiberRef.get(inSyncTransactionFiber);
40
+ if (!inTxn) {
41
+ return false;
42
+ }
43
+ if (isDevEnv()) {
44
+ yield* emitInvalidUsageDiagnostic(runtime.moduleId, runtime.instanceId);
45
+ }
46
+ return true;
47
+ });
48
+ var resolveConcurrencyLimit = (runtime) => runtime.resolveConcurrencyPolicy ? runtime.resolveConcurrencyPolicy().pipe(
49
+ Effect.map((p) => p.concurrencyLimit)
50
+ ) : Effect.succeed(16);
51
+ var runTaskLifecycle = (payload, runtime, config, getCanWriteBack) => Effect.gen(function* () {
52
+ const noop = yield* shouldNoopDueToSyncTxn(runtime);
53
+ if (noop) {
54
+ return;
55
+ }
56
+ const defaults = defaultOrigins(config.triggerName);
57
+ const origins = {
58
+ pending: config.origin?.pending ?? defaults.pending,
59
+ success: config.origin?.success ?? defaults.success,
60
+ failure: config.origin?.failure ?? defaults.failure
61
+ };
62
+ const pending = config.pending;
63
+ if (pending) {
64
+ yield* Effect.uninterruptible(
65
+ runtime.runWithStateTransaction(
66
+ origins.pending,
67
+ () => Effect.asVoid(resolve(pending, payload))
68
+ )
69
+ );
70
+ }
71
+ const io = resolve(config.effect, payload);
72
+ const exit = yield* Effect.exit(io);
73
+ if (getCanWriteBack) {
74
+ const ok = yield* getCanWriteBack;
75
+ if (!ok) {
76
+ return;
77
+ }
78
+ }
79
+ if (exit._tag === "Success") {
80
+ const success = config.success;
81
+ if (success) {
82
+ yield* runtime.runWithStateTransaction(
83
+ origins.success,
84
+ () => Effect.asVoid(success(exit.value, payload))
85
+ );
86
+ }
87
+ return;
88
+ }
89
+ const cause = exit.cause;
90
+ if (Cause.isInterrupted(cause)) {
91
+ return;
92
+ }
93
+ const failure = config.failure;
94
+ if (failure) {
95
+ yield* runtime.runWithStateTransaction(
96
+ origins.failure,
97
+ () => Effect.asVoid(failure(cause, payload))
98
+ );
99
+ }
100
+ }).pipe(
101
+ // watcher 不应因单次 task 出错而整体崩溃:吞掉错误,但必须可定位(诊断事件)。
102
+ Effect.catchAllCause(
103
+ (cause) => record({
104
+ type: "diagnostic",
105
+ moduleId: runtime.moduleId,
106
+ instanceId: runtime.instanceId,
107
+ code: "task_runner::unhandled_failure",
108
+ severity: "error",
109
+ message: "TaskRunner encountered an unhandled failure (pending/IO/writeback).",
110
+ hint: "\u4E3A\u8BE5 task \u8865\u5145 failure \u5199\u56DE\u6216\u5728\u4E0A\u5C42\u663E\u5F0F\u5904\u7406\u9519\u8BEF\uFF1B\u907F\u514D fire-and-forget \u5BFC\u81F4\u9519\u8BEF\u88AB\u541E\u6389\u3002",
111
+ actionTag: config.triggerName,
112
+ kind: "task_runner_unhandled_failure",
113
+ trigger: {
114
+ kind: "task",
115
+ name: config.triggerName
116
+ }
117
+ }).pipe(Effect.zipRight(Effect.logError("TaskRunner error", cause)))
118
+ )
119
+ );
120
+ var makeTaskRunner = (stream, mode, runtime, config) => {
121
+ if (mode === "latest") {
122
+ return Effect.gen(function* () {
123
+ const taskIdRef = yield* Ref.make(0);
124
+ const currentFiberRef = yield* Ref.make(
125
+ void 0
126
+ );
127
+ const start = (payload) => Effect.gen(function* () {
128
+ const taskId = yield* Ref.updateAndGet(taskIdRef, (n) => n + 1);
129
+ const prev = yield* Ref.get(currentFiberRef);
130
+ if (prev) {
131
+ yield* Fiber.interruptFork(prev);
132
+ }
133
+ const canWriteBack = Ref.get(taskIdRef).pipe(
134
+ Effect.map((current) => current === taskId)
135
+ );
136
+ const fiber = yield* Effect.fork(
137
+ runTaskLifecycle(
138
+ payload,
139
+ runtime,
140
+ config,
141
+ canWriteBack
142
+ )
143
+ );
144
+ yield* Ref.set(currentFiberRef, fiber);
145
+ });
146
+ return yield* Stream.runForEach(stream, start);
147
+ });
148
+ }
149
+ if (mode === "exhaust") {
150
+ return Effect.gen(function* () {
151
+ const concurrency = yield* resolveConcurrencyLimit(runtime);
152
+ const busyRef = yield* Ref.make(false);
153
+ const mapper = (payload) => Effect.gen(function* () {
154
+ const acquired = yield* Ref.modify(
155
+ busyRef,
156
+ (busy) => busy ? [false, busy] : [true, true]
157
+ );
158
+ if (!acquired) {
159
+ return;
160
+ }
161
+ try {
162
+ yield* runTaskLifecycle(
163
+ payload,
164
+ runtime,
165
+ config
166
+ );
167
+ } finally {
168
+ yield* Ref.set(busyRef, false);
169
+ }
170
+ });
171
+ return yield* Stream.runDrain(
172
+ stream.pipe(Stream.mapEffect(mapper, { concurrency }))
173
+ );
174
+ });
175
+ }
176
+ if (mode === "parallel") {
177
+ return Effect.gen(function* () {
178
+ const concurrency = yield* resolveConcurrencyLimit(runtime);
179
+ return yield* Stream.runDrain(
180
+ stream.pipe(
181
+ Stream.mapEffect(
182
+ (payload) => runTaskLifecycle(
183
+ payload,
184
+ runtime,
185
+ config
186
+ ),
187
+ { concurrency }
188
+ )
189
+ )
190
+ );
191
+ });
192
+ }
193
+ return Stream.runForEach(
194
+ stream,
195
+ (payload) => runTaskLifecycle(payload, runtime, config)
196
+ );
197
+ };
198
+
199
+ export {
200
+ inSyncTransactionFiber,
201
+ makeTaskRunner
202
+ };
203
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvcnVudGltZS9jb3JlL1Rhc2tSdW5uZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IENhdXNlLCBFZmZlY3QsIEZpYmVyLCBGaWJlclJlZiwgUmVmLCBTdHJlYW0gfSBmcm9tIFwiZWZmZWN0XCJcbmltcG9ydCAqIGFzIERlYnVnIGZyb20gXCIuL0RlYnVnU2luay5qc1wiXG5pbXBvcnQgeyBpc0RldkVudiB9IGZyb20gXCIuL2Vudi5qc1wiXG5pbXBvcnQgdHlwZSAqIGFzIExvZ2ljIGZyb20gXCIuL0xvZ2ljTWlkZGxld2FyZS5qc1wiXG5pbXBvcnQgdHlwZSB7IEFueU1vZHVsZVNoYXBlIH0gZnJvbSBcIi4vbW9kdWxlLmpzXCJcbmltcG9ydCB0eXBlIHsgUnVudGltZUludGVybmFsc1Jlc29sdmVkQ29uY3VycmVuY3lQb2xpY3kgfSBmcm9tIFwiLi9SdW50aW1lSW50ZXJuYWxzLmpzXCJcbmltcG9ydCB0eXBlIHsgU3RhdGVUeG5PcmlnaW4gfSBmcm9tIFwiLi9TdGF0ZVRyYW5zYWN0aW9uLmpzXCJcblxuLyoqXG4gKiBcdTc1MjhcdTRFOEVcdTk2MzJcdTZCNjJcdTU3MjhcdTMwMENcdTU0MENcdTZCNjVcdTRFOEJcdTUyQTFcdTYyNjdcdTg4NEMgZmliZXJcdTMwMERcdTUxODVcdThDMDNcdTc1MjggcnVuKlRhc2tcdUZGMDhcdTRGMUFcdTVCRkNcdTgxRjRcdTRFOEJcdTUyQTFcdTk2MUZcdTUyMTdcdTdCNDlcdTVGODVcdTgxRUFcdThFQUJcdTgwMENcdTZCN0JcdTk1MDFcdUZGMDlcdTMwMDJcbiAqXG4gKiAtIE1vZHVsZVJ1bnRpbWUgXHU1NzI4XHU2MjY3XHU4ODRDXHU2QkNGXHU0RTJBXHU0RThCXHU1MkExXHVGRjA4ZGlzcGF0Y2gvc291cmNlLXJlZnJlc2gvZGV2dG9vbHMvLi4uXHVGRjA5XHU2NUY2XHVGRjBDXHU0RjFBIGxvY2FsbHkgXHU2ODA3XHU4QkIwXHU0RTNBIHRydWVcdTMwMDJcbiAqIC0gcnVuKlRhc2sgXHU1NzI4XHU1NDJGXHU1MkE4XHU2NUY2XHU2OEMwXHU2N0U1XHU4QkU1XHU2ODA3XHU4QkIwXHVGRjFBXHU4MkU1XHU0RTNBIHRydWVcdUZGMENcdTUyMTlcdTRFQzVcdTU3MjggZGV2L3Rlc3QgXHU0RTBCXHU1M0QxXHU1MUZBIGRpYWdub3N0aWMgXHU1RTc2XHU3NkY0XHU2M0E1IG5vLW9wXHUzMDAyXG4gKi9cbmV4cG9ydCBjb25zdCBpblN5bmNUcmFuc2FjdGlvbkZpYmVyID0gRmliZXJSZWYudW5zYWZlTWFrZShmYWxzZSlcblxuZXhwb3J0IHR5cGUgVGFza1J1bm5lck1vZGUgPVxuICB8IFwidGFza1wiIC8vIHNlcXVlbnRpYWxcbiAgfCBcInBhcmFsbGVsXCJcbiAgfCBcImxhdGVzdFwiXG4gIHwgXCJleGhhdXN0XCJcblxuZXhwb3J0IHR5cGUgVGFza1N0YXR1cyA9XG4gIHwgXCJpZGxlXCJcbiAgfCBcInBlbmRpbmdcIlxuICB8IFwicnVubmluZ1wiXG4gIHwgXCJzdWNjZXNzXCJcbiAgfCBcImZhaWx1cmVcIlxuICB8IFwiaW50ZXJydXB0ZWRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tFeGVjdXRpb24ge1xuICByZWFkb25seSB0YXNrSWQ6IG51bWJlclxuICByZWFkb25seSBzdGF0dXM6IFRhc2tTdGF0dXNcbiAgcmVhZG9ubHkgYWNjZXB0ZWRBdDogbnVtYmVyXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdD86IG51bWJlclxuICByZWFkb25seSBlbmRlZEF0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFza1J1bm5lck9yaWdpbnMge1xuICByZWFkb25seSBwZW5kaW5nPzogU3RhdGVUeG5PcmlnaW5cbiAgcmVhZG9ubHkgc3VjY2Vzcz86IFN0YXRlVHhuT3JpZ2luXG4gIHJlYWRvbmx5IGZhaWx1cmU/OiBTdGF0ZVR4bk9yaWdpblxufVxuXG50eXBlIFRhc2tIYW5kbGVyPFBheWxvYWQsIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsIFI+ID1cbiAgfCBMb2dpYy5PZjxTaCwgUiwgdm9pZCwgbmV2ZXI+XG4gIHwgKChwYXlsb2FkOiBQYXlsb2FkKSA9PiBMb2dpYy5PZjxTaCwgUiwgdm9pZCwgbmV2ZXI+KVxuXG50eXBlIFRhc2tFZmZlY3Q8UGF5bG9hZCwgU2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZSwgUiwgQSwgRT4gPVxuICB8IExvZ2ljLk9mPFNoLCBSLCBBLCBFPlxuICB8ICgocGF5bG9hZDogUGF5bG9hZCkgPT4gTG9naWMuT2Y8U2gsIFIsIEEsIEU+KVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tSdW5uZXJDb25maWc8XG4gIFBheWxvYWQsXG4gIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsXG4gIFIsXG4gIEEgPSB2b2lkLFxuICBFID0gbmV2ZXIsXG4+IHtcbiAgLyoqXG4gICAqIFx1NTNFRlx1OTAwOVx1RkYxQVx1ODlFNlx1NTNEMVx1NkU5MFx1NTQwRFx1NzlGMFx1RkYwOFx1NEY4Qlx1NTk4MiBhY3Rpb25UYWcgLyBmaWVsZFBhdGhcdUZGMDlcdUZGMENcdTc1MjhcdTRFOEVcdTlFRDhcdThCQTQgcGVuZGluZyBvcmlnaW4ubmFtZVx1MzAwMlxuICAgKiAtIEJvdW5kQXBpUnVudGltZSBcdTU3Mjggb25BY3Rpb24oXCJ4eHhcIikgLyB0cmFpdHMuc291cmNlLnJlZnJlc2goXCJmaWVsZFwiKSBcdTdCNDlcdTU3M0FcdTY2NkZcdTUzRUZcdTU4NkJcdTUxNDVcdUZGMUJcbiAgICogLSBcdTUxNzZcdTRFRDZcdTU3M0FcdTY2NkZcdTRFMERcdTVGM0FcdTZDNDJcdTMwMDJcbiAgICovXG4gIHJlYWRvbmx5IHRyaWdnZXJOYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIHBlbmRpbmdcdUZGMUFcdTU0MENcdTZCNjVcdTcyQjZcdTYwMDFcdTUxOTlcdTUxNjVcdUZGMDhsb2FkaW5nPXRydWUgLyBcdTZFMDVcdTc0MDZcdTk1MTlcdThCRUZcdTdCNDlcdUZGMDlcdUZGMENcdTU5Q0JcdTdFQzhcdTRGNUNcdTRFM0FcdTcyRUNcdTdBQ0JcdTRFOEJcdTUyQTFcdTUxNjVcdTUzRTNcdTMwMDJcbiAgICogLSBcdTRFQzVcdTVCRjlcdTIwMUNcdTg4QUJcdTYzQTVcdTUzRDdcdTVFNzZcdTVCOUVcdTk2NDVcdTU0MkZcdTUyQThcdTc2ODQgdGFza1x1MjAxRFx1NjI2N1x1ODg0Q1x1RkYwOHJ1bkV4aGF1c3RUYXNrIFx1NUZGRFx1NzU2NVx1NzY4NFx1ODlFNlx1NTNEMVx1NEUwRFx1NjI2N1x1ODg0Q1x1RkYwOVx1MzAwMlxuICAgKi9cbiAgcmVhZG9ubHkgcGVuZGluZz86IFRhc2tIYW5kbGVyPFBheWxvYWQsIFNoLCBSPlxuXG4gIC8qKlxuICAgKiBlZmZlY3RcdUZGMUFcdTc3MUZcdTVCOUUgSU8gLyBcdTVGMDJcdTZCNjVcdTRFRkJcdTUyQTFcdUZGMDhcdTVGQzVcdTk4N0JcdThGRDBcdTg4NENcdTU3MjhcdTRFOEJcdTUyQTFcdTdBOTdcdTUzRTNcdTRFNEJcdTU5MTZcdUZGMDlcdTMwMDJcbiAgICovXG4gIHJlYWRvbmx5IGVmZmVjdDogVGFza0VmZmVjdDxQYXlsb2FkLCBTaCwgUiwgQSwgRT5cblxuICAvKipcbiAgICogc3VjY2Vzc1x1RkYxQVx1NjIxMFx1NTI5Rlx1NTE5OVx1NTZERVx1RkYwOFx1NzJFQ1x1N0FDQlx1NEU4Qlx1NTJBMVx1NTE2NVx1NTNFM1x1RkYwOVx1MzAwMlxuICAgKi9cbiAgcmVhZG9ubHkgc3VjY2Vzcz86IChyZXN1bHQ6IEEsIHBheWxvYWQ6IFBheWxvYWQpID0+IExvZ2ljLk9mPFNoLCBSLCB2b2lkLCBuZXZlcj5cblxuICAvKipcbiAgICogZmFpbHVyZVx1RkYxQVx1NTkzMVx1OEQyNVx1NTE5OVx1NTZERVx1RkYwOFx1NzJFQ1x1N0FDQlx1NEU4Qlx1NTJBMVx1NTE2NVx1NTNFM1x1RkYwOVx1MzAwMlxuICAgKlxuICAgKiBcdThCRjRcdTY2MEVcdUZGMUFcdTRGMjBcdTUxNjUgQ2F1c2UgXHU0RUU1XHU0RkREXHU3NTU5IGRlZmVjdC9pbnRlcnJ1cHQgXHU3QjQ5XHU4QkVEXHU0RTQ5XHVGRjFCXHU0RTJEXHU2NUFEXHVGRjA4aW50ZXJydXB0XHVGRjA5XHU5RUQ4XHU4QkE0XHU0RTBEXHU4OUU2XHU1M0QxIGZhaWx1cmUgXHU1MTk5XHU1NkRFXHUzMDAyXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlPzogKGNhdXNlOiBDYXVzZS5DYXVzZTxFPiwgcGF5bG9hZDogUGF5bG9hZCkgPT4gTG9naWMuT2Y8U2gsIFIsIHZvaWQsIG5ldmVyPlxuXG4gIC8qKlxuICAgKiBvcmlnaW5cdUZGMUFcdTUzRUZcdTkwMDlcdTg5ODZcdTUxOTlcdTRFMDlcdTdCMTRcdTRFOEJcdTUyQTFcdTc2ODQgb3JpZ2luXHUzMDAyXG4gICAqIC0gXHU5RUQ4XHU4QkE0XHVGRjFBcGVuZGluZy5raW5kPVwidGFzazpwZW5kaW5nXCJcdUZGMUJzdWNjZXNzL2ZhaWx1cmUua2luZD1cInNlcnZpY2UtY2FsbGJhY2tcIlx1MzAwMlxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luPzogVGFza1J1bm5lck9yaWdpbnNcblxuICAvKipcbiAgICogcHJpb3JpdHlcdUZGMUFcdTk4ODRcdTc1NTlcdTVCNTdcdTZCQjVcdUZGMENcdTRFQzVcdTc1MjhcdTRFOEVcdTY3MkFcdTY3NjVcdThDMDNcdThCRDUvXHU2MzkyXHU1RThGXHVGRjBDXHU0RTBEXHU2NTM5XHU1M0Q4XHU0RThCXHU1MkExXHU4RkI5XHU3NTRDXHU0RTBFXHU1RTc2XHU1M0QxXHU4QkVEXHU0RTQ5XHUzMDAyXG4gICAqL1xuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tSdW5uZXJSdW50aW1lIHtcbiAgcmVhZG9ubHkgbW9kdWxlSWQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkgaW5zdGFuY2VJZD86IHN0cmluZ1xuICByZWFkb25seSBydW5XaXRoU3RhdGVUcmFuc2FjdGlvbjogKFxuICAgIG9yaWdpbjogU3RhdGVUeG5PcmlnaW4sXG4gICAgYm9keTogKCkgPT4gRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlciwgYW55PixcbiAgKSA9PiBFZmZlY3QuRWZmZWN0PHZvaWQsIG5ldmVyLCBhbnk+XG4gIHJlYWRvbmx5IHJlc29sdmVDb25jdXJyZW5jeVBvbGljeT86ICgpID0+IEVmZmVjdC5FZmZlY3Q8XG4gICAgUnVudGltZUludGVybmFsc1Jlc29sdmVkQ29uY3VycmVuY3lQb2xpY3ksXG4gICAgbmV2ZXIsXG4gICAgYW55XG4gID5cbn1cblxuY29uc3QgcmVzb2x2ZSA9IDxQYXlsb2FkLCBTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlLCBSLCBBLCBFPihcbiAgZWZmOiBUYXNrRWZmZWN0PFBheWxvYWQsIFNoLCBSLCBBLCBFPiB8IFRhc2tIYW5kbGVyPFBheWxvYWQsIFNoLCBSPixcbiAgcGF5bG9hZDogUGF5bG9hZCxcbik6IGFueSA9PiAodHlwZW9mIGVmZiA9PT0gXCJmdW5jdGlvblwiID8gKGVmZiBhcyBhbnkpKHBheWxvYWQpIDogZWZmKVxuXG5jb25zdCBkZWZhdWx0T3JpZ2lucyA9IChcbiAgdHJpZ2dlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IFJlcXVpcmVkPFRhc2tSdW5uZXJPcmlnaW5zPiA9PiAoe1xuICBwZW5kaW5nOiB7XG4gICAga2luZDogXCJ0YXNrOnBlbmRpbmdcIixcbiAgICBuYW1lOiB0cmlnZ2VyTmFtZSxcbiAgfSxcbiAgc3VjY2Vzczoge1xuICAgIGtpbmQ6IFwic2VydmljZS1jYWxsYmFja1wiLFxuICAgIG5hbWU6IFwidGFzazpzdWNjZXNzXCIsXG4gIH0sXG4gIGZhaWx1cmU6IHtcbiAgICBraW5kOiBcInNlcnZpY2UtY2FsbGJhY2tcIixcbiAgICBuYW1lOiBcInRhc2s6ZmFpbHVyZVwiLFxuICB9LFxufSlcblxuY29uc3QgZW1pdEludmFsaWRVc2FnZURpYWdub3N0aWMgPSAoXG4gIG1vZHVsZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGluc3RhbmNlSWQ/OiBzdHJpbmcsXG4pOiBFZmZlY3QuRWZmZWN0PHZvaWQ+ID0+XG4gIERlYnVnLnJlY29yZCh7XG4gICAgdHlwZTogXCJkaWFnbm9zdGljXCIsXG4gICAgbW9kdWxlSWQsXG4gICAgaW5zdGFuY2VJZCxcbiAgICBjb2RlOiBcImxvZ2ljOjppbnZhbGlkX3VzYWdlXCIsXG4gICAgc2V2ZXJpdHk6IFwiZXJyb3JcIixcbiAgICBtZXNzYWdlOlxuICAgICAgXCJydW4qVGFzayBpcyBub3QgYWxsb3dlZCBpbnNpZGUgYSBzeW5jaHJvbm91cyBTdGF0ZVRyYW5zYWN0aW9uIGJvZHkgKGl0IG1heSBkZWFkbG9jayB0aGUgdHhuUXVldWUpLlwiLFxuICAgIGhpbnQ6XG4gICAgICBcIlx1OEJGN1x1NUMwNiBydW4qVGFzayBcdTY1M0VcdTUyMzAgJC5vbkFjdGlvbi8kLm9uU3RhdGUvJC5vbiBcdTdCNDkgd2F0Y2hlciBcdTc2ODQgcnVuIFx1NkJCNVx1RkYxQlwiICtcbiAgICAgIFwiXHU0RTBEXHU4OTgxXHU1NzI4IHJlZHVjZXIgLyB0cmFpdC5ydW4gLyBcdTUzNTVcdTdCMTRcdTRFOEJcdTUyQTFcdTc2ODRcdTU0MENcdTZCNjUgYm9keSBcdTUxODVcdTc2RjRcdTYzQTVcdThDMDNcdTc1MjhcdTMwMDJcdTgyRTVcdTk3MDBcdTg5ODFcdTk1N0ZcdTk0RkVcdThERUZcdUZGMENcdThCRjdcdTc1MjhcdTU5MUFcdTUxNjVcdTUzRTNcdUZGMDhwZW5kaW5nXHUyMTkySU9cdTIxOTJ3cml0ZWJhY2tcdUZGMDlcdTZBMjFcdTVGMEZcdTMwMDJcIixcbiAgICBraW5kOiBcInJ1bl90YXNrX2luX3RyYW5zYWN0aW9uXCIsXG4gIH0pXG5cbmNvbnN0IHNob3VsZE5vb3BEdWVUb1N5bmNUeG4gPSAoXG4gIHJ1bnRpbWU6IFRhc2tSdW5uZXJSdW50aW1lLFxuKTogRWZmZWN0LkVmZmVjdDxib29sZWFuPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgaW5UeG4gPSB5aWVsZCogRmliZXJSZWYuZ2V0KGluU3luY1RyYW5zYWN0aW9uRmliZXIpXG4gICAgaWYgKCFpblR4bikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIC8vIFx1NjVFMFx1OEJCQVx1NzNBRlx1NTg4M1x1NTk4Mlx1NEY1NVx1RkYwQ1x1OTBGRFx1NUZDNVx1OTg3QiBuby1vcFx1RkYwOFx1NTQyNlx1NTIxOVx1NTNFRlx1ODBGRFx1NkI3Qlx1OTUwMVx1RkYwOVx1RkYxQmRpYWdub3N0aWMgXHU0RUM1XHU1NzI4IGRldi90ZXN0IFx1NEUwQlx1NTNEMVx1NTFGQVx1MzAwMlxuICAgIGlmIChpc0RldkVudigpKSB7XG4gICAgICB5aWVsZCogZW1pdEludmFsaWRVc2FnZURpYWdub3N0aWMocnVudGltZS5tb2R1bGVJZCwgcnVudGltZS5pbnN0YW5jZUlkKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9KVxuXG5jb25zdCByZXNvbHZlQ29uY3VycmVuY3lMaW1pdCA9IChcbiAgcnVudGltZTogVGFza1J1bm5lclJ1bnRpbWUsXG4pOiBFZmZlY3QuRWZmZWN0PG51bWJlciB8IFwidW5ib3VuZGVkXCIsIG5ldmVyLCBhbnk+ID0+XG4gIHJ1bnRpbWUucmVzb2x2ZUNvbmN1cnJlbmN5UG9saWN5XG4gICAgPyBydW50aW1lLnJlc29sdmVDb25jdXJyZW5jeVBvbGljeSgpLnBpcGUoXG4gICAgICAgIEVmZmVjdC5tYXAoKHApID0+IHAuY29uY3VycmVuY3lMaW1pdCksXG4gICAgICApXG4gICAgOiBFZmZlY3Quc3VjY2VlZCgxNilcblxuY29uc3QgcnVuVGFza0xpZmVjeWNsZSA9IDxQYXlsb2FkLCBTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlLCBSLCBBLCBFPihcbiAgcGF5bG9hZDogUGF5bG9hZCxcbiAgcnVudGltZTogVGFza1J1bm5lclJ1bnRpbWUsXG4gIGNvbmZpZzogVGFza1J1bm5lckNvbmZpZzxQYXlsb2FkLCBTaCwgUiwgQSwgRT4sXG4gIGdldENhbldyaXRlQmFjaz86IEVmZmVjdC5FZmZlY3Q8Ym9vbGVhbj4sXG4pOiBFZmZlY3QuRWZmZWN0PHZvaWQsIG5ldmVyLCBMb2dpYy5FbnY8U2gsIFI+PiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3Qgbm9vcCA9IHlpZWxkKiBzaG91bGROb29wRHVlVG9TeW5jVHhuKHJ1bnRpbWUpXG4gICAgaWYgKG5vb3ApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRzID0gZGVmYXVsdE9yaWdpbnMoY29uZmlnLnRyaWdnZXJOYW1lKVxuICAgIGNvbnN0IG9yaWdpbnM6IFJlcXVpcmVkPFRhc2tSdW5uZXJPcmlnaW5zPiA9IHtcbiAgICAgIHBlbmRpbmc6IGNvbmZpZy5vcmlnaW4/LnBlbmRpbmcgPz8gZGVmYXVsdHMucGVuZGluZyxcbiAgICAgIHN1Y2Nlc3M6IGNvbmZpZy5vcmlnaW4/LnN1Y2Nlc3MgPz8gZGVmYXVsdHMuc3VjY2VzcyxcbiAgICAgIGZhaWx1cmU6IGNvbmZpZy5vcmlnaW4/LmZhaWx1cmUgPz8gZGVmYXVsdHMuZmFpbHVyZSxcbiAgICB9XG5cbiAgICAvLyAxKSBwZW5kaW5nXHVGRjFBXHU0RjVDXHU0RTNBXHU3MkVDXHU3QUNCXHU0RThCXHU1MkExXHU1MTY1XHU1M0UzXHVGRjBDXHU0RTE0XHU0RTAwXHU2NUU2XHU1RjAwXHU1OUNCXHU1QzMxXHU0RTBEXHU1RTk0XHU4OEFCIHJ1bkxhdGVzdCBcdTc2ODQgaW50ZXJydXB0IFx1NjI1M1x1NjVBRFxuICAgIGNvbnN0IHBlbmRpbmcgPSBjb25maWcucGVuZGluZ1xuICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICB5aWVsZCogRWZmZWN0LnVuaW50ZXJydXB0aWJsZShcbiAgICAgICAgcnVudGltZS5ydW5XaXRoU3RhdGVUcmFuc2FjdGlvbihvcmlnaW5zLnBlbmRpbmcsICgpID0+XG4gICAgICAgICAgRWZmZWN0LmFzVm9pZChyZXNvbHZlKHBlbmRpbmcsIHBheWxvYWQpKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAyKSBJT1x1RkYxQVx1NTcyOFx1NEU4Qlx1NTJBMVx1N0E5N1x1NTNFM1x1NEU0Qlx1NTkxNlx1OEZEMFx1ODg0Q1xuICAgIGNvbnN0IGlvID0gcmVzb2x2ZShjb25maWcuZWZmZWN0LCBwYXlsb2FkKSBhcyBFZmZlY3QuRWZmZWN0PEEsIEUsIExvZ2ljLkVudjxTaCwgUj4+XG4gICAgY29uc3QgZXhpdCA9IHlpZWxkKiBFZmZlY3QuZXhpdChpbylcblxuICAgIC8vIDMpIFx1NTE5OVx1NTZERVx1RkYxQVx1OTcwMFx1ODk4MVx1OTAxQVx1OEZDNyBndWFyZCBcdTc4NkVcdThCQTRcdTRFQ0RcdTRFM0FcdTVGNTNcdTUyNEQgdGFza1x1RkYwOHJ1bkxhdGVzdFRhc2tcdUZGMDlcbiAgICBpZiAoZ2V0Q2FuV3JpdGVCYWNrKSB7XG4gICAgICBjb25zdCBvayA9IHlpZWxkKiBnZXRDYW5Xcml0ZUJhY2tcbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4aXQuX3RhZyA9PT0gXCJTdWNjZXNzXCIpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBjb25maWcuc3VjY2Vzc1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgeWllbGQqIHJ1bnRpbWUucnVuV2l0aFN0YXRlVHJhbnNhY3Rpb24ob3JpZ2lucy5zdWNjZXNzLCAoKSA9PlxuICAgICAgICAgIEVmZmVjdC5hc1ZvaWQoc3VjY2VzcyhleGl0LnZhbHVlLCBwYXlsb2FkKSksXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEZhaWx1cmVcdUZGMUFcdTRFMkRcdTY1QURcdTRFMERcdTg5RTZcdTUzRDEgZmFpbHVyZSBcdTUxOTlcdTU2REVcdUZGMDhcdTRGOEJcdTU5ODIgcnVuTGF0ZXN0VGFzayBcdTc2ODRcdTUzRDZcdTZEODhcdTMwMDFTY29wZSBcdTdFRDNcdTY3NUZcdUZGMDlcdTMwMDJcbiAgICBjb25zdCBjYXVzZSA9IGV4aXQuY2F1c2UgYXMgQ2F1c2UuQ2F1c2U8RT5cbiAgICBpZiAoQ2F1c2UuaXNJbnRlcnJ1cHRlZChjYXVzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGZhaWx1cmUgPSBjb25maWcuZmFpbHVyZVxuICAgIGlmIChmYWlsdXJlKSB7XG4gICAgICB5aWVsZCogcnVudGltZS5ydW5XaXRoU3RhdGVUcmFuc2FjdGlvbihvcmlnaW5zLmZhaWx1cmUsICgpID0+XG4gICAgICAgIEVmZmVjdC5hc1ZvaWQoZmFpbHVyZShjYXVzZSwgcGF5bG9hZCkpLFxuICAgICAgKVxuICAgIH1cbiAgfSkucGlwZShcbiAgICAvLyB3YXRjaGVyIFx1NEUwRFx1NUU5NFx1NTZFMFx1NTM1NVx1NkIyMSB0YXNrIFx1NTFGQVx1OTUxOVx1ODAwQ1x1NjU3NFx1NEY1M1x1NUQyOVx1NkU4M1x1RkYxQVx1NTQxRVx1NjM4OVx1OTUxOVx1OEJFRlx1RkYwQ1x1NEY0Nlx1NUZDNVx1OTg3Qlx1NTNFRlx1NUI5QVx1NEY0RFx1RkYwOFx1OEJDQVx1NjVBRFx1NEU4Qlx1NEVGNlx1RkYwOVx1MzAwMlxuICAgIEVmZmVjdC5jYXRjaEFsbENhdXNlKChjYXVzZSkgPT5cbiAgICAgIERlYnVnLnJlY29yZCh7XG4gICAgICAgIHR5cGU6IFwiZGlhZ25vc3RpY1wiLFxuICAgICAgICBtb2R1bGVJZDogcnVudGltZS5tb2R1bGVJZCxcbiAgICAgICAgaW5zdGFuY2VJZDogcnVudGltZS5pbnN0YW5jZUlkLFxuICAgICAgICBjb2RlOiBcInRhc2tfcnVubmVyOjp1bmhhbmRsZWRfZmFpbHVyZVwiLFxuICAgICAgICBzZXZlcml0eTogXCJlcnJvclwiLFxuICAgICAgICBtZXNzYWdlOiBcIlRhc2tSdW5uZXIgZW5jb3VudGVyZWQgYW4gdW5oYW5kbGVkIGZhaWx1cmUgKHBlbmRpbmcvSU8vd3JpdGViYWNrKS5cIixcbiAgICAgICAgaGludDpcbiAgICAgICAgICBcIlx1NEUzQVx1OEJFNSB0YXNrIFx1ODg2NVx1NTE0NSBmYWlsdXJlIFx1NTE5OVx1NTZERVx1NjIxNlx1NTcyOFx1NEUwQVx1NUM0Mlx1NjYzRVx1NUYwRlx1NTkwNFx1NzQwNlx1OTUxOVx1OEJFRlx1RkYxQlx1OTA3Rlx1NTE0RCBmaXJlLWFuZC1mb3JnZXQgXHU1QkZDXHU4MUY0XHU5NTE5XHU4QkVGXHU4OEFCXHU1NDFFXHU2Mzg5XHUzMDAyXCIsXG4gICAgICAgIGFjdGlvblRhZzogY29uZmlnLnRyaWdnZXJOYW1lLFxuICAgICAgICBraW5kOiBcInRhc2tfcnVubmVyX3VuaGFuZGxlZF9mYWlsdXJlXCIsXG4gICAgICAgIHRyaWdnZXI6IHtcbiAgICAgICAgICBraW5kOiBcInRhc2tcIixcbiAgICAgICAgICBuYW1lOiBjb25maWcudHJpZ2dlck5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9KS5waXBlKEVmZmVjdC56aXBSaWdodChFZmZlY3QubG9nRXJyb3IoXCJUYXNrUnVubmVyIGVycm9yXCIsIGNhdXNlKSkpLFxuICAgICksXG4gICkgYXMgRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlciwgTG9naWMuRW52PFNoLCBSPj5cblxuLyoqXG4gKiBtYWtlVGFza1J1bm5lclx1RkYxQVxuICogLSBcdTU5MERcdTc1MjggRmxvd1J1bnRpbWUgXHU3Njg0XHU1RTc2XHU1M0QxXHU4QkVEXHU0RTQ5XHVGRjA4c2VxdWVudGlhbC9wYXJhbGxlbC9sYXRlc3QvZXhoYXVzdFx1RkYwOVx1RkYxQlxuICogLSBcdTVDMDZcdTUzNTVcdTZCMjFcdTg5RTZcdTUzRDFcdTYyQzZcdTUyMDZcdTRFM0FcdUZGMUFwZW5kaW5nKFx1NzJFQ1x1N0FDQlx1NEU4Qlx1NTJBMSkgXHUyMTkyIElPIFx1MjE5MiBzdWNjZXNzL2ZhaWx1cmUoXHU3MkVDXHU3QUNCXHU0RThCXHU1MkExKVx1MzAwMlxuICovXG5leHBvcnQgY29uc3QgbWFrZVRhc2tSdW5uZXIgPSA8XG4gIFBheWxvYWQsXG4gIFNoIGV4dGVuZHMgQW55TW9kdWxlU2hhcGUsXG4gIFIsXG4gIEEgPSB2b2lkLFxuICBFID0gbmV2ZXIsXG4+KFxuICBzdHJlYW06IFN0cmVhbS5TdHJlYW08UGF5bG9hZD4sXG4gIG1vZGU6IFRhc2tSdW5uZXJNb2RlLFxuICBydW50aW1lOiBUYXNrUnVubmVyUnVudGltZSxcbiAgY29uZmlnOiBUYXNrUnVubmVyQ29uZmlnPFBheWxvYWQsIFNoLCBSLCBBLCBFPixcbik6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXIsIExvZ2ljLkVudjxTaCwgUj4+ID0+IHtcbiAgaWYgKG1vZGUgPT09IFwibGF0ZXN0XCIpIHtcbiAgICByZXR1cm4gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgY29uc3QgdGFza0lkUmVmID0geWllbGQqIFJlZi5tYWtlKDApXG4gICAgICBjb25zdCBjdXJyZW50RmliZXJSZWYgPSB5aWVsZCogUmVmLm1ha2U8RmliZXIuUnVudGltZUZpYmVyPHZvaWQsIG5ldmVyPiB8IHVuZGVmaW5lZD4oXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgIClcblxuICAgICAgY29uc3Qgc3RhcnQgPSAocGF5bG9hZDogUGF5bG9hZCkgPT5cbiAgICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAgIGNvbnN0IHRhc2tJZCA9IHlpZWxkKiBSZWYudXBkYXRlQW5kR2V0KHRhc2tJZFJlZiwgKG4pID0+IG4gKyAxKVxuXG4gICAgICAgICAgY29uc3QgcHJldiA9IHlpZWxkKiBSZWYuZ2V0KGN1cnJlbnRGaWJlclJlZilcbiAgICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgLy8gXHU0RTBEXHU3QjQ5XHU1Rjg1XHU2NUU3IGZpYmVyIFx1NzcxRlx1NkI2M1x1N0VEM1x1Njc1Rlx1RkYwQ1x1OTA3Rlx1NTE0RFx1OTYzQlx1NTg1RVx1NjVCMFx1ODlFNlx1NTNEMVx1RkYxQlx1NTE5OVx1NTZERVx1OTYzNlx1NkJCNVx1OTc2MCB0YXNrSWQgZ3VhcmQgXHU1MTVDXHU1RTk1XHUzMDAyXG4gICAgICAgICAgICB5aWVsZCogRmliZXIuaW50ZXJydXB0Rm9yayhwcmV2KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNhbldyaXRlQmFjayA9IFJlZi5nZXQodGFza0lkUmVmKS5waXBlKFxuICAgICAgICAgICAgRWZmZWN0Lm1hcCgoY3VycmVudCkgPT4gY3VycmVudCA9PT0gdGFza0lkKSxcbiAgICAgICAgICApXG5cbiAgICAgICAgICBjb25zdCBmaWJlciA9IHlpZWxkKiBFZmZlY3QuZm9yayhcbiAgICAgICAgICAgIHJ1blRhc2tMaWZlY3ljbGU8UGF5bG9hZCwgU2gsIFIsIEEsIEU+KFxuICAgICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgICBydW50aW1lLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIGNhbldyaXRlQmFjayxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgeWllbGQqIFJlZi5zZXQoY3VycmVudEZpYmVyUmVmLCBmaWJlcilcbiAgICAgICAgfSlcblxuICAgICAgcmV0dXJuIHlpZWxkKiBTdHJlYW0ucnVuRm9yRWFjaChzdHJlYW0sIHN0YXJ0KVxuICAgIH0pXG4gIH1cblxuICBpZiAobW9kZSA9PT0gXCJleGhhdXN0XCIpIHtcbiAgICByZXR1cm4gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgY29uc3QgY29uY3VycmVuY3kgPSB5aWVsZCogcmVzb2x2ZUNvbmN1cnJlbmN5TGltaXQocnVudGltZSlcbiAgICAgIGNvbnN0IGJ1c3lSZWYgPSB5aWVsZCogUmVmLm1ha2UoZmFsc2UpXG5cbiAgICAgIGNvbnN0IG1hcHBlciA9IChwYXlsb2FkOiBQYXlsb2FkKSA9PlxuICAgICAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgY29uc3QgYWNxdWlyZWQgPSB5aWVsZCogUmVmLm1vZGlmeShidXN5UmVmLCAoYnVzeSkgPT5cbiAgICAgICAgICAgIGJ1c3kgPyAoW2ZhbHNlLCBidXN5XSBhcyBjb25zdCkgOiAoW3RydWUsIHRydWVdIGFzIGNvbnN0KSxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKCFhY3F1aXJlZCkge1xuICAgICAgICAgICAgLy8gXHU1RkZEXHU3NTY1XHU4OUU2XHU1M0QxXHVGRjFBXHU0RTBEXHU0RUE3XHU3NTFGIHBlbmRpbmcgXHU0RThCXHU1MkExXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkKiBydW5UYXNrTGlmZWN5Y2xlPFBheWxvYWQsIFNoLCBSLCBBLCBFPihcbiAgICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgICAgcnVudGltZSxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB5aWVsZCogUmVmLnNldChidXN5UmVmLCBmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgIHJldHVybiB5aWVsZCogU3RyZWFtLnJ1bkRyYWluKFxuICAgICAgICBzdHJlYW0ucGlwZShTdHJlYW0ubWFwRWZmZWN0KG1hcHBlciwgeyBjb25jdXJyZW5jeSB9KSksXG4gICAgICApXG4gICAgfSkgYXMgRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlciwgTG9naWMuRW52PFNoLCBSPj5cbiAgfVxuXG4gIGlmIChtb2RlID09PSBcInBhcmFsbGVsXCIpIHtcbiAgICByZXR1cm4gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgY29uc3QgY29uY3VycmVuY3kgPSB5aWVsZCogcmVzb2x2ZUNvbmN1cnJlbmN5TGltaXQocnVudGltZSlcblxuICAgICAgcmV0dXJuIHlpZWxkKiBTdHJlYW0ucnVuRHJhaW4oXG4gICAgICAgIHN0cmVhbS5waXBlKFxuICAgICAgICAgIFN0cmVhbS5tYXBFZmZlY3QoXG4gICAgICAgICAgICAocGF5bG9hZCkgPT5cbiAgICAgICAgICAgICAgcnVuVGFza0xpZmVjeWNsZTxQYXlsb2FkLCBTaCwgUiwgQSwgRT4oXG4gICAgICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgICAgICBydW50aW1lLFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHsgY29uY3VycmVuY3kgfSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKVxuICAgIH0pIGFzIEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXIsIExvZ2ljLkVudjxTaCwgUj4+XG4gIH1cblxuICAvLyBtb2RlID09PSBcInRhc2tcIlx1RkYwOHNlcXVlbnRpYWxcdUZGMDlcbiAgcmV0dXJuIFN0cmVhbS5ydW5Gb3JFYWNoKHN0cmVhbSwgKHBheWxvYWQpID0+XG4gICAgcnVuVGFza0xpZmVjeWNsZTxQYXlsb2FkLCBTaCwgUiwgQSwgRT4ocGF5bG9hZCwgcnVudGltZSwgY29uZmlnKSxcbiAgKSBhcyBFZmZlY3QuRWZmZWN0PHZvaWQsIG5ldmVyLCBMb2dpYy5FbnY8U2gsIFI+PlxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7OztBQUFBLFNBQVMsT0FBTyxRQUFRLE9BQU8sVUFBVSxLQUFLLGNBQWM7QUFjckQsSUFBTSx5QkFBeUIsU0FBUyxXQUFXLEtBQUs7QUFxRy9ELElBQU0sVUFBVSxDQUNkLEtBQ0EsWUFDUyxPQUFPLFFBQVEsYUFBYyxJQUFZLE9BQU8sSUFBSTtBQUUvRCxJQUFNLGlCQUFpQixDQUNyQixpQkFDaUM7QUFBQSxFQUNqQyxTQUFTO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsRUFDUjtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLEVBQ1I7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxFQUNSO0FBQ0Y7QUFFQSxJQUFNLDZCQUE2QixDQUNqQyxVQUNBLGVBRU0sT0FBTztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ047QUFBQSxFQUNBO0FBQUEsRUFDQSxN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
@@ -0,0 +1,83 @@
1
+ // @logix/core subpath bundles for @logix/sandbox
2
+
3
+ import {
4
+ Link
5
+ } from "./chunk-FNLXHWIU.js";
6
+ import {
7
+ attachMeta,
8
+ getDefinition,
9
+ getMeta
10
+ } from "./chunk-ZAKUP6QG.js";
11
+
12
+ // ../logix-core/src/Process.ts
13
+ var DEFAULT_TRIGGERS = [
14
+ { kind: "platformEvent", platformEvent: "runtime:boot" }
15
+ ];
16
+ var normalizeDefinition = (input) => {
17
+ const base = typeof input === "string" ? { processId: input } : input;
18
+ const processId = base.processId;
19
+ if (typeof processId !== "string" || processId.length === 0) {
20
+ throw new Error("[Process.make] processId must be a non-empty string");
21
+ }
22
+ const triggers = Array.isArray(base.triggers) && base.triggers.length > 0 ? base.triggers : DEFAULT_TRIGGERS;
23
+ const concurrency = base.concurrency ?? { mode: "latest" };
24
+ const errorPolicy = base.errorPolicy ?? { mode: "failStop" };
25
+ const diagnosticsLevel = base.diagnosticsLevel ?? "off";
26
+ return {
27
+ processId,
28
+ name: base.name,
29
+ description: base.description,
30
+ requires: base.requires,
31
+ triggers,
32
+ concurrency,
33
+ errorPolicy,
34
+ diagnosticsLevel
35
+ };
36
+ };
37
+ var make = (definition, effect) => attachMeta(effect, {
38
+ definition: normalizeDefinition(definition),
39
+ kind: "process"
40
+ });
41
+ var getDefinition2 = (effect) => getDefinition(effect);
42
+ var getMeta2 = (effect) => getMeta(effect);
43
+ var attachMeta2 = (effect, meta) => attachMeta(effect, meta);
44
+ var isModuleLike = (value) => Boolean(value) && typeof value === "object" && ((value._kind === "ModuleDef" || value._kind === "Module") && "tag" in value);
45
+ var unwrapModuleTag = (module) => isModuleLike(module) ? module.tag : module;
46
+ function link(config, logic) {
47
+ const linkId = config.id ?? [...config.modules].map((m) => m.id).sort().join("~");
48
+ const modulesRecord = /* @__PURE__ */ Object.create(null);
49
+ const requires = /* @__PURE__ */ new Set();
50
+ for (const module of config.modules) {
51
+ const tag = unwrapModuleTag(module);
52
+ requires.add(String(tag.id));
53
+ modulesRecord[tag.id] = tag;
54
+ }
55
+ const effect = Link(
56
+ modulesRecord,
57
+ logic
58
+ );
59
+ const definition = {
60
+ processId: linkId,
61
+ requires: Array.from(requires),
62
+ triggers: [
63
+ ...DEFAULT_TRIGGERS,
64
+ { kind: "platformEvent", platformEvent: `link:${linkId}` }
65
+ ],
66
+ concurrency: { mode: "latest" },
67
+ errorPolicy: { mode: "failStop" },
68
+ diagnosticsLevel: "off"
69
+ };
70
+ return attachMeta(effect, {
71
+ definition,
72
+ kind: "link"
73
+ });
74
+ }
75
+
76
+ export {
77
+ make,
78
+ getDefinition2 as getDefinition,
79
+ getMeta2 as getMeta,
80
+ attachMeta2 as attachMeta,
81
+ link
82
+ };
83
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvUHJvY2Vzcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSBcImVmZmVjdFwiXG5pbXBvcnQgKiBhcyBNb2R1bGVGYWN0b3J5IGZyb20gXCIuL2ludGVybmFsL3J1bnRpbWUvTW9kdWxlRmFjdG9yeS5qc1wiXG5pbXBvcnQgdHlwZSAqIGFzIFByb3RvY29sIGZyb20gXCIuL2ludGVybmFsL3J1bnRpbWUvY29yZS9wcm9jZXNzL3Byb3RvY29sLmpzXCJcbmltcG9ydCAqIGFzIE1ldGEgZnJvbSBcIi4vaW50ZXJuYWwvcnVudGltZS9jb3JlL3Byb2Nlc3MvbWV0YS5qc1wiXG5pbXBvcnQgdHlwZSB7XG4gIEFueU1vZHVsZVNoYXBlLFxuICBNb2R1bGVIYW5kbGUsXG4gIE1vZHVsZUxpa2UsXG4gIE1vZHVsZVRhZyxcbn0gZnJvbSBcIi4vaW50ZXJuYWwvbW9kdWxlLmpzXCJcblxuZXhwb3J0IHR5cGUgRGlhZ25vc3RpY3NMZXZlbCA9IFByb3RvY29sLkRpYWdub3N0aWNzTGV2ZWxcbmV4cG9ydCB0eXBlIFByb2Nlc3NTY29wZSA9IFByb3RvY29sLlByb2Nlc3NTY29wZVxuZXhwb3J0IHR5cGUgUHJvY2Vzc0lkZW50aXR5ID0gUHJvdG9jb2wuUHJvY2Vzc0lkZW50aXR5XG5leHBvcnQgdHlwZSBQcm9jZXNzSW5zdGFuY2VJZGVudGl0eSA9IFByb3RvY29sLlByb2Nlc3NJbnN0YW5jZUlkZW50aXR5XG5leHBvcnQgdHlwZSBQcm9jZXNzVHJpZ2dlclNwZWMgPSBQcm90b2NvbC5Qcm9jZXNzVHJpZ2dlclNwZWNcbmV4cG9ydCB0eXBlIFByb2Nlc3NUcmlnZ2VyID0gUHJvdG9jb2wuUHJvY2Vzc1RyaWdnZXJcbmV4cG9ydCB0eXBlIFByb2Nlc3NDb25jdXJyZW5jeVBvbGljeSA9IFByb3RvY29sLlByb2Nlc3NDb25jdXJyZW5jeVBvbGljeVxuZXhwb3J0IHR5cGUgUHJvY2Vzc0Vycm9yUG9saWN5ID0gUHJvdG9jb2wuUHJvY2Vzc0Vycm9yUG9saWN5XG5leHBvcnQgdHlwZSBQcm9jZXNzRGVmaW5pdGlvbiA9IFByb3RvY29sLlByb2Nlc3NEZWZpbml0aW9uXG5leHBvcnQgdHlwZSBQcm9jZXNzSW5zdGFsbGF0aW9uID0gUHJvdG9jb2wuUHJvY2Vzc0luc3RhbGxhdGlvblxuZXhwb3J0IHR5cGUgU2VyaWFsaXphYmxlRXJyb3JTdW1tYXJ5ID0gUHJvdG9jb2wuU2VyaWFsaXphYmxlRXJyb3JTdW1tYXJ5XG5leHBvcnQgdHlwZSBQcm9jZXNzSW5zdGFuY2VTdGF0dXMgPSBQcm90b2NvbC5Qcm9jZXNzSW5zdGFuY2VTdGF0dXNcbmV4cG9ydCB0eXBlIFByb2Nlc3NFdmVudCA9IFByb3RvY29sLlByb2Nlc3NFdmVudFxuZXhwb3J0IHR5cGUgUHJvY2Vzc0NvbnRyb2xSZXF1ZXN0ID0gUHJvdG9jb2wuUHJvY2Vzc0NvbnRyb2xSZXF1ZXN0XG5leHBvcnQgdHlwZSBQcm9jZXNzUGxhdGZvcm1FdmVudCA9IFByb3RvY29sLlByb2Nlc3NQbGF0Zm9ybUV2ZW50XG5cbmV4cG9ydCB0eXBlIFByb2Nlc3NFZmZlY3Q8RSA9IG5ldmVyLCBSID0gbmV2ZXI+ID0gTWV0YS5Qcm9jZXNzRWZmZWN0PEUsIFI+XG5cbmV4cG9ydCB0eXBlIFByb2Nlc3NNYWtlRGVmaW5pdGlvbiA9XG4gIHwgc3RyaW5nXG4gIHwge1xuICAgICAgcmVhZG9ubHkgcHJvY2Vzc0lkOiBzdHJpbmdcbiAgICAgIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmdcbiAgICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gICAgICByZWFkb25seSByZXF1aXJlcz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuICAgICAgcmVhZG9ubHkgdHJpZ2dlcnM/OiBSZWFkb25seUFycmF5PFByb2Nlc3NUcmlnZ2VyU3BlYz5cbiAgICAgIHJlYWRvbmx5IGNvbmN1cnJlbmN5PzogUHJvY2Vzc0NvbmN1cnJlbmN5UG9saWN5XG4gICAgICByZWFkb25seSBlcnJvclBvbGljeT86IFByb2Nlc3NFcnJvclBvbGljeVxuICAgICAgcmVhZG9ubHkgZGlhZ25vc3RpY3NMZXZlbD86IERpYWdub3N0aWNzTGV2ZWxcbiAgICB9XG5cbmNvbnN0IERFRkFVTFRfVFJJR0dFUlM6IFJlYWRvbmx5QXJyYXk8UHJvY2Vzc1RyaWdnZXJTcGVjPiA9IFtcbiAgeyBraW5kOiBcInBsYXRmb3JtRXZlbnRcIiwgcGxhdGZvcm1FdmVudDogXCJydW50aW1lOmJvb3RcIiB9LFxuXVxuXG5jb25zdCBub3JtYWxpemVEZWZpbml0aW9uID0gKGlucHV0OiBQcm9jZXNzTWFrZURlZmluaXRpb24pOiBQcm9jZXNzRGVmaW5pdGlvbiA9PiB7XG4gIGNvbnN0IGJhc2UgPVxuICAgIHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyAoeyBwcm9jZXNzSWQ6IGlucHV0IH0gc2F0aXNmaWVzIHsgcmVhZG9ubHkgcHJvY2Vzc0lkOiBzdHJpbmcgfSlcbiAgICAgIDogaW5wdXRcblxuICBjb25zdCBwcm9jZXNzSWQgPSBiYXNlLnByb2Nlc3NJZFxuICBpZiAodHlwZW9mIHByb2Nlc3NJZCAhPT0gXCJzdHJpbmdcIiB8fCBwcm9jZXNzSWQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW1Byb2Nlc3MubWFrZV0gcHJvY2Vzc0lkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpXG4gIH1cblxuICBjb25zdCB0cmlnZ2VycyA9XG4gICAgQXJyYXkuaXNBcnJheShiYXNlLnRyaWdnZXJzKSAmJiBiYXNlLnRyaWdnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYmFzZS50cmlnZ2Vyc1xuICAgICAgOiBERUZBVUxUX1RSSUdHRVJTXG5cbiAgY29uc3QgY29uY3VycmVuY3kgPSBiYXNlLmNvbmN1cnJlbmN5ID8/ICh7IG1vZGU6IFwibGF0ZXN0XCIgfSBzYXRpc2ZpZXMgUHJvY2Vzc0NvbmN1cnJlbmN5UG9saWN5KVxuICBjb25zdCBlcnJvclBvbGljeSA9IGJhc2UuZXJyb3JQb2xpY3kgPz8gKHsgbW9kZTogXCJmYWlsU3RvcFwiIH0gc2F0aXNmaWVzIFByb2Nlc3NFcnJvclBvbGljeSlcbiAgY29uc3QgZGlhZ25vc3RpY3NMZXZlbCA9IGJhc2UuZGlhZ25vc3RpY3NMZXZlbCA/PyBcIm9mZlwiXG5cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzSWQsXG4gICAgbmFtZTogYmFzZS5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBiYXNlLmRlc2NyaXB0aW9uLFxuICAgIHJlcXVpcmVzOiBiYXNlLnJlcXVpcmVzLFxuICAgIHRyaWdnZXJzLFxuICAgIGNvbmN1cnJlbmN5LFxuICAgIGVycm9yUG9saWN5LFxuICAgIGRpYWdub3N0aWNzTGV2ZWwsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IG1ha2UgPSA8RSwgUj4oXG4gIGRlZmluaXRpb246IFByb2Nlc3NNYWtlRGVmaW5pdGlvbixcbiAgZWZmZWN0OiBFZmZlY3QuRWZmZWN0PHZvaWQsIEUsIFI+LFxuKTogUHJvY2Vzc0VmZmVjdDxFLCBSPiA9PlxuICBNZXRhLmF0dGFjaE1ldGEoZWZmZWN0LCB7XG4gICAgZGVmaW5pdGlvbjogbm9ybWFsaXplRGVmaW5pdGlvbihkZWZpbml0aW9uKSxcbiAgICBraW5kOiBcInByb2Nlc3NcIixcbiAgfSlcblxuZXhwb3J0IGNvbnN0IGdldERlZmluaXRpb24gPSAoXG4gIGVmZmVjdDogRWZmZWN0LkVmZmVjdDx2b2lkLCBhbnksIGFueT4sXG4pOiBQcm9jZXNzRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9PiBNZXRhLmdldERlZmluaXRpb24oZWZmZWN0KVxuXG5leHBvcnQgY29uc3QgZ2V0TWV0YSA9IChlZmZlY3Q6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgYW55LCBhbnk+KTogTWV0YS5Qcm9jZXNzTWV0YSB8IHVuZGVmaW5lZCA9PlxuICBNZXRhLmdldE1ldGEoZWZmZWN0KVxuXG5leHBvcnQgY29uc3QgYXR0YWNoTWV0YSA9IDxFLCBSPihcbiAgZWZmZWN0OiBFZmZlY3QuRWZmZWN0PHZvaWQsIEUsIFI+LFxuICBtZXRhOiBNZXRhLlByb2Nlc3NNZXRhLFxuKTogUHJvY2Vzc0VmZmVjdDxFLCBSPiA9PiBNZXRhLmF0dGFjaE1ldGEoZWZmZWN0LCBtZXRhKVxuXG50eXBlIExpbmtNb2R1bGVUb2tlbjxJZCBleHRlbmRzIHN0cmluZywgU2ggZXh0ZW5kcyBBbnlNb2R1bGVTaGFwZT4gPVxuICB8IE1vZHVsZVRhZzxJZCwgU2g+XG4gIHwgTW9kdWxlTGlrZTxJZCwgU2gsIG9iamVjdD5cblxudHlwZSBMaW5rTW9kdWxlSWRPZjxNPiA9IE0gZXh0ZW5kcyB7IHJlYWRvbmx5IGlkOiBpbmZlciBJZCB9ID8gSWQgOiBuZXZlclxudHlwZSBMaW5rTW9kdWxlU2hhcGVPZjxNPiA9IE0gZXh0ZW5kcyBNb2R1bGVMaWtlPHN0cmluZywgaW5mZXIgU2gsIG9iamVjdD5cbiAgPyBTaFxuICA6IE0gZXh0ZW5kcyBNb2R1bGVUYWc8c3RyaW5nLCBpbmZlciBTaD5cbiAgICA/IFNoXG4gICAgOiBuZXZlclxudHlwZSBMaW5rTW9kdWxlVGFnT2Y8TT4gPSBNIGV4dGVuZHMgTW9kdWxlTGlrZTxzdHJpbmcsIGluZmVyIFNoLCBvYmplY3Q+XG4gID8gTW9kdWxlVGFnPHN0cmluZywgU2g+XG4gIDogTSBleHRlbmRzIE1vZHVsZVRhZzxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPlxuICAgID8gTVxuICAgIDogbmV2ZXJcblxuY29uc3QgaXNNb2R1bGVMaWtlID0gKFxuICB2YWx1ZTogdW5rbm93bixcbik6IHZhbHVlIGlzIE1vZHVsZUxpa2U8c3RyaW5nLCBBbnlNb2R1bGVTaGFwZSwgb2JqZWN0PiA9PlxuICBCb29sZWFuKHZhbHVlKSAmJlxuICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgKCgodmFsdWUgYXMgeyByZWFkb25seSBfa2luZD86IHVua25vd24gfSkuX2tpbmQgPT09IFwiTW9kdWxlRGVmXCIgfHxcbiAgICAodmFsdWUgYXMgeyByZWFkb25seSBfa2luZD86IHVua25vd24gfSkuX2tpbmQgPT09IFwiTW9kdWxlXCIpICYmXG4gICAgXCJ0YWdcIiBpbiAodmFsdWUgYXMgb2JqZWN0KSlcblxuY29uc3QgdW53cmFwTW9kdWxlVGFnID0gPElkIGV4dGVuZHMgc3RyaW5nLCBTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlPihcbiAgbW9kdWxlOiBMaW5rTW9kdWxlVG9rZW48SWQsIFNoPixcbik6IE1vZHVsZVRhZzxJZCwgU2g+ID0+XG4gIGlzTW9kdWxlTGlrZShtb2R1bGUpID8gbW9kdWxlLnRhZyA6IG1vZHVsZVxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtDb25maWc8TXMgZXh0ZW5kcyByZWFkb25seSBMaW5rTW9kdWxlVG9rZW48c3RyaW5nLCBBbnlNb2R1bGVTaGFwZT5bXT4ge1xuICByZWFkb25seSBpZD86IHN0cmluZ1xuICByZWFkb25seSBtb2R1bGVzOiBNc1xufVxuXG5leHBvcnQgdHlwZSBMaW5rSGFuZGxlczxNcyBleHRlbmRzIHJlYWRvbmx5IExpbmtNb2R1bGVUb2tlbjxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPltdPiA9IHtcbiAgW00gaW4gTXNbbnVtYmVyXSBhcyBMaW5rTW9kdWxlSWRPZjxNPl06IE1vZHVsZUhhbmRsZTxMaW5rTW9kdWxlU2hhcGVPZjxNPj5cbn1cblxudHlwZSBNb2R1bGVzUmVjb3JkPE1zIGV4dGVuZHMgcmVhZG9ubHkgTGlua01vZHVsZVRva2VuPHN0cmluZywgQW55TW9kdWxlU2hhcGU+W10+ID0ge1xuICBbTSBpbiBNc1tudW1iZXJdIGFzIExpbmtNb2R1bGVJZE9mPE0+XTogTGlua01vZHVsZVRhZ09mPE0+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rPFxuICBNcyBleHRlbmRzIHJlYWRvbmx5IExpbmtNb2R1bGVUb2tlbjxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPltdLFxuICBFID0gbmV2ZXIsXG4gIFIgPSBuZXZlclxuPihcbiAgY29uZmlnOiBMaW5rQ29uZmlnPE1zPixcbiAgbG9naWM6ICgkOiBMaW5rSGFuZGxlczxNcz4pID0+IEVmZmVjdC5FZmZlY3Q8dm9pZCwgRSwgUj4sXG4pOiBQcm9jZXNzRWZmZWN0PEUsIFI+IHtcbiAgY29uc3QgbGlua0lkID1cbiAgICBjb25maWcuaWQgPz9cbiAgICBbLi4uY29uZmlnLm1vZHVsZXNdXG4gICAgICAubWFwKChtKSA9PiBtLmlkKVxuICAgICAgLnNvcnQoKVxuICAgICAgLmpvaW4oXCJ+XCIpXG5cbiAgY29uc3QgbW9kdWxlc1JlY29yZCA9IE9iamVjdC5jcmVhdGUobnVsbCkgYXMgTW9kdWxlc1JlY29yZDxNcz5cbiAgY29uc3QgcmVxdWlyZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG4gIGZvciAoY29uc3QgbW9kdWxlIG9mIGNvbmZpZy5tb2R1bGVzKSB7XG4gICAgY29uc3QgdGFnID0gdW53cmFwTW9kdWxlVGFnKG1vZHVsZSlcbiAgICByZXF1aXJlcy5hZGQoU3RyaW5nKHRhZy5pZCkpXG4gICAgOyhtb2R1bGVzUmVjb3JkIGFzIFJlY29yZDxzdHJpbmcsIE1vZHVsZVRhZzxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPj4pW3RhZy5pZF0gPVxuICAgICAgdGFnIGFzIHVua25vd24gYXMgTW9kdWxlVGFnPHN0cmluZywgQW55TW9kdWxlU2hhcGU+XG4gIH1cblxuICBjb25zdCBlZmZlY3QgPSBNb2R1bGVGYWN0b3J5LkxpbmsoXG4gICAgbW9kdWxlc1JlY29yZCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIE1vZHVsZVRhZzxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPj4sXG4gICAgbG9naWMgYXMgdW5rbm93biBhcyAoXG4gICAgICAkOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVIYW5kbGU8QW55TW9kdWxlU2hhcGU+PixcbiAgICApID0+IEVmZmVjdC5FZmZlY3Q8dm9pZCwgRSwgUj4sXG4gIClcblxuICBjb25zdCBkZWZpbml0aW9uOiBQcm9jZXNzRGVmaW5pdGlvbiA9IHtcbiAgICBwcm9jZXNzSWQ6IGxpbmtJZCxcbiAgICByZXF1aXJlczogQXJyYXkuZnJvbShyZXF1aXJlcyksXG4gICAgdHJpZ2dlcnM6IFtcbiAgICAgIC4uLkRFRkFVTFRfVFJJR0dFUlMsXG4gICAgICB7IGtpbmQ6IFwicGxhdGZvcm1FdmVudFwiLCBwbGF0Zm9ybUV2ZW50OiBgbGluazoke2xpbmtJZH1gIH0sXG4gICAgXSxcbiAgICBjb25jdXJyZW5jeTogeyBtb2RlOiBcImxhdGVzdFwiIH0sXG4gICAgZXJyb3JQb2xpY3k6IHsgbW9kZTogXCJmYWlsU3RvcFwiIH0sXG4gICAgZGlhZ25vc3RpY3NMZXZlbDogXCJvZmZcIixcbiAgfVxuXG4gIHJldHVybiBNZXRhLmF0dGFjaE1ldGEoZWZmZWN0LCB7XG4gICAgZGVmaW5pdGlvbixcbiAgICBraW5kOiBcImxpbmtcIixcbiAgfSkgYXMgUHJvY2Vzc0VmZmVjdDxFLCBSPlxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7O0FBMENBLElBQU0sbUJBQXNEO0FBQUEsRUFDMUQsRUFBRSxNQUFNLGlCQUFpQixlQUFlLGVBQWU7QUFDekQ7QUFFQSxJQUFNLHNCQUFzQixDQUFDLFVBQW9EO0FBQy9FLFFBQU0sT0FDSixPQUFPLFVBQVUsV0FDWixFQUFFLFdBQVcsTUFBTSxJQUNwQjtBQUVOLFFBQU0sWUFBWSxLQUFLO0FBQ3ZCLE1BQUksT0FBTyxjQUFjLFlBQVksVUFBVSxXQUFXLEdBQUc7QUFDM0QsVUFBTSxJQUFJLE1BQU0scURBQXFEO0FBQUEsRUFDdkU7QUFFQSxRQUFNLFdBQ0osTUFBTSxRQUFRLEtBQUssUUFBUSxLQUFLLEtBQUssU0FBUyxTQUFTLElBQ25ELEtBQUssV0FDTDtBQUVOLFFBQU0sY0FBYyxLQUFLLGVBQWdCLEVBQUUsTUFBTSxTQUFTO0FBQzFELFFBQU0sY0FBYyxLQUFLLGVBQWdCLEVBQUUsTUFBTSxXQUFXO0FBQzVELFFBQU0sbUJBQW1CLEtBQUssb0JBQW9CO0FBRWxELFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxNQUFNLEtBQUs7QUFBQSxJQUNYLGFBQWEsS0FBSztBQUFBLElBQ2xCLFVBQVUsS0FBSztBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFFTyxJQUFNLE9BQU8sQ0FDbEIsWUFDQSxXQUVLLFdBQVcsUUFBUTtBQUFBLEVBQ3RCLFlBQVksb0JBQW9CLFVBQVU7QUFBQSxFQUMxQyxNQUFNO0FBQ1IsQ0FBQztBQUVJLElBQU1BLGlCQUFnQixDQUMzQixXQUN1QyxjQUFjLE1BQU07QUFFdEQsSUFBTUMsV0FBVSxDQUFDLFdBQ2pCLFFBQVEsTUFBTTtBQUVkLElBQU1DLGNBQWEsQ0FDeEIsUUFDQSxTQUM2QixXQUFXLFFBQVEsSUFBSTtBQWtCdEQsSUFBTSxlQUFlLENBQ25CLFVBRUEsUUFBUSxLQUFLLEtBQ2IsT0FBTyxVQUFVLGNBQ2QsTUFBdUMsVUFBVSxlQUNqRCxNQUF1QyxVQUFVLGFBQ2xELFNBQVU7QUFFZCxJQUFNLGtCQUFrQixDQUN0QixXQUVBLGFBQWEsTUFBTSxJQUFJLE9BQU8sTUFBTTtBQWUvQixTQUFTLEtBS2QsUUFDQSxPQUNxQjtBQUNyQixRQUFNLFNBQ0osT0FBTyxNQUNQLENBQUMsR0FBRyxPQUFPLE9BQU8sRUFDZixJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFDZixLQUFLLEVBQ0wsS0FBSyxHQUFHO0FBRWIsUUFBTSxnQkFBZ0IsdUJBQU8sT0FBTyxJQUFJO0FBQ3hDLFFBQU0sV0FBVyxvQkFBSSxJQUFZO0FBRWpDLGFBQVcsVUFBVSxPQUFPLFNBQVM7QUFDbkMsVUFBTSxNQUFNLGdCQUFnQixNQUFNO0FBQ2xDLGFBQVMsSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzFCLElBQUMsY0FBb0UsSUFBSSxFQUFFLElBQzFFO0FBQUEsRUFDSjtBQUVBLFFBQU0sU0FBdUI7QUFBQSxJQUMzQjtBQUFBLElBQ0E7QUFBQSxFQUdGO0FBRUEsUUFBTSxhQUFnQztBQUFBLElBQ3BDLFdBQVc7QUFBQSxJQUNYLFVBQVUsTUFBTSxLQUFLLFFBQVE7QUFBQSxJQUM3QixVQUFVO0FBQUEsTUFDUixHQUFHO0FBQUEsTUFDSCxFQUFFLE1BQU0saUJBQWlCLGVBQWUsUUFBUSxNQUFNLEdBQUc7QUFBQSxJQUMzRDtBQUFBLElBQ0EsYUFBYSxFQUFFLE1BQU0sU0FBUztBQUFBLElBQzlCLGFBQWEsRUFBRSxNQUFNLFdBQVc7QUFBQSxJQUNoQyxrQkFBa0I7QUFBQSxFQUNwQjtBQUVBLFNBQVksV0FBVyxRQUFRO0FBQUEsSUFDN0I7QUFBQSxJQUNBLE1BQU07QUFBQSxFQUNSLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsiZ2V0RGVmaW5pdGlvbiIsICJnZXRNZXRhIiwgImF0dGFjaE1ldGEiXQp9Cg==
@@ -0,0 +1,75 @@
1
+ // @logix/core subpath bundles for @logix/sandbox
2
+
3
+ import {
4
+ isDevEnv
5
+ } from "./chunk-GP37MEGJ.js";
6
+
7
+ // ../logix-core/src/Root.ts
8
+ import { Context as Context2, Effect } from "../effect.js";
9
+
10
+ // ../logix-core/src/internal/runtime/core/RootContext.ts
11
+ import { Context } from "../effect.js";
12
+ var RootContextTagImpl = class extends Context.Tag(
13
+ "@logix/core/RootContext"
14
+ )() {
15
+ };
16
+ var RootContextTag = RootContextTagImpl;
17
+
18
+ // ../logix-core/src/Root.ts
19
+ var tagIdOf = (tag) => typeof tag?.id === "string" ? String(tag.id) : typeof tag?.key === "string" ? String(tag.key) : "<unknown tag>";
20
+ var makeMissingRootProviderError = (tag, entrypoint, extra) => {
21
+ const dev = isDevEnv();
22
+ const tokenId = tagIdOf(tag);
23
+ const fix = dev ? [
24
+ "- Provide it when creating the runtime tree (Logix.Runtime.make(...,{ layer }) / ManagedRuntime.make(Layer.mergeAll(...))).",
25
+ "- If you're in React and want the current runtime environment singleton, use useModule(ModuleTag).",
26
+ "- Do not rely on nested RuntimeProvider.layer to mock Root.resolve."
27
+ ] : [];
28
+ const message = dev ? [
29
+ "[MissingRootProviderError] Cannot resolve Tag from root provider.",
30
+ extra ? `
31
+ ${extra}` : "",
32
+ `tokenId: ${tokenId}`,
33
+ `entrypoint: ${entrypoint}`,
34
+ "mode: global",
35
+ "startScope: root",
36
+ "",
37
+ "fix:",
38
+ ...fix
39
+ ].filter((s) => s.length > 0).join("\n") : "[MissingRootProviderError] tag not found in root provider";
40
+ const err = new Error(message);
41
+ err.name = "MissingRootProviderError";
42
+ err.tokenId = tokenId;
43
+ err.entrypoint = entrypoint;
44
+ err.mode = "global";
45
+ err.startScope = { kind: "root" };
46
+ err.fix = fix;
47
+ return err;
48
+ };
49
+ var resolve = (tag, options) => Effect.gen(function* () {
50
+ const entrypoint = options?.entrypoint ?? "logic.root.resolve";
51
+ const root = yield* RootContextTag;
52
+ const rootContext = root.context ?? (options?.waitForReady ? yield* root.ready : void 0);
53
+ if (!rootContext) {
54
+ return yield* Effect.die(
55
+ makeMissingRootProviderError(
56
+ tag,
57
+ entrypoint,
58
+ "reason: rootContextNotReady"
59
+ )
60
+ );
61
+ }
62
+ try {
63
+ return Context2.get(rootContext, tag);
64
+ } catch {
65
+ return yield* Effect.die(
66
+ makeMissingRootProviderError(tag, entrypoint)
67
+ );
68
+ }
69
+ });
70
+
71
+ export {
72
+ RootContextTag,
73
+ resolve
74
+ };
75
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvUm9vdC50cyIsICIuLi8uLi8uLi8uLi9sb2dpeC1jb3JlL3NyYy9pbnRlcm5hbC9ydW50aW1lL2NvcmUvUm9vdENvbnRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IENvbnRleHQsIEVmZmVjdCB9IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHsgaXNEZXZFbnYgfSBmcm9tIFwiLi9pbnRlcm5hbC9ydW50aW1lL2NvcmUvZW52LmpzXCJcbmltcG9ydCB7IFJvb3RDb250ZXh0VGFnIH0gZnJvbSBcIi4vaW50ZXJuYWwvcnVudGltZS9jb3JlL1Jvb3RDb250ZXh0LmpzXCJcblxuZXhwb3J0IHR5cGUgUm9vdFJlc29sdmVFbnRyeXBvaW50ID0gXCJsb2dpYy5yb290LnJlc29sdmVcIiB8IFwibG9naWMuJC5yb290LnJlc29sdmVcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RSZXNvbHZlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGVudHJ5cG9pbnQ/OiBSb290UmVzb2x2ZUVudHJ5cG9pbnRcbiAgLyoqXG4gICAqIFx1NjYyRlx1NTQyNlx1NTE0MVx1OEJCOFx1NTcyOCBSb290Q29udGV4dCBcdTVDMUFcdTY3MkFcdTVDMzFcdTdFRUFcdTY1RjZcdTdCNDlcdTVGODVcdUZGMUFcbiAgICogLSBcdTlFRDhcdThCQTQgZmFsc2VcdUZGMUFcdTkwN0ZcdTUxNERcdTU3MjggbGF5ZXIvc2V0dXAgXHU5NjM2XHU2QkI1XHU4QkVGXHU3NTI4XHU1QkZDXHU4MUY0XHU2QjdCXHU5NTAxXHVGRjFCXG4gICAqIC0gYCQucm9vdC5yZXNvbHZlYCBcdTRGMUFcdTU3MjggcnVuIFx1OTYzNlx1NkJCNVx1NEYyMCB0cnVlXHVGRjA4cnVuLW9ubHlcdUZGMDlcdUZGMENcdTUxNDFcdThCQjhcdTdCNDlcdTVGODUgRW52IFx1N0VDNFx1ODhDNVx1NUI4Q1x1NjIxMFx1MzAwMlxuICAgKi9cbiAgcmVhZG9ubHkgd2FpdEZvclJlYWR5PzogYm9vbGVhblxufVxuXG5jb25zdCB0YWdJZE9mID0gKHRhZzogQ29udGV4dC5UYWc8YW55LCBhbnk+KTogc3RyaW5nID0+XG4gIHR5cGVvZiAodGFnIGFzIGFueSk/LmlkID09PSBcInN0cmluZ1wiXG4gICAgPyBTdHJpbmcoKHRhZyBhcyBhbnkpLmlkKVxuICAgIDogdHlwZW9mICh0YWcgYXMgYW55KT8ua2V5ID09PSBcInN0cmluZ1wiXG4gICAgICA/IFN0cmluZygodGFnIGFzIGFueSkua2V5KVxuICAgICAgOiBcIjx1bmtub3duIHRhZz5cIlxuXG5jb25zdCBtYWtlTWlzc2luZ1Jvb3RQcm92aWRlckVycm9yID0gKFxuICB0YWc6IENvbnRleHQuVGFnPGFueSwgYW55PixcbiAgZW50cnlwb2ludDogUm9vdFJlc29sdmVFbnRyeXBvaW50LFxuICBleHRyYT86IHN0cmluZyxcbik6IEVycm9yID0+IHtcbiAgY29uc3QgZGV2ID0gaXNEZXZFbnYoKVxuICBjb25zdCB0b2tlbklkID0gdGFnSWRPZih0YWcpXG4gIGNvbnN0IGZpeDogc3RyaW5nW10gPSBkZXZcbiAgICA/IFtcbiAgICAgICAgXCItIFByb3ZpZGUgaXQgd2hlbiBjcmVhdGluZyB0aGUgcnVudGltZSB0cmVlIChMb2dpeC5SdW50aW1lLm1ha2UoLi4uLHsgbGF5ZXIgfSkgLyBNYW5hZ2VkUnVudGltZS5tYWtlKExheWVyLm1lcmdlQWxsKC4uLikpKS5cIixcbiAgICAgICAgXCItIElmIHlvdSdyZSBpbiBSZWFjdCBhbmQgd2FudCB0aGUgY3VycmVudCBydW50aW1lIGVudmlyb25tZW50IHNpbmdsZXRvbiwgdXNlIHVzZU1vZHVsZShNb2R1bGVUYWcpLlwiLFxuICAgICAgICBcIi0gRG8gbm90IHJlbHkgb24gbmVzdGVkIFJ1bnRpbWVQcm92aWRlci5sYXllciB0byBtb2NrIFJvb3QucmVzb2x2ZS5cIixcbiAgICAgIF1cbiAgICA6IFtdXG5cbiAgY29uc3QgbWVzc2FnZSA9IGRldlxuICAgID8gW1xuICAgICAgICBcIltNaXNzaW5nUm9vdFByb3ZpZGVyRXJyb3JdIENhbm5vdCByZXNvbHZlIFRhZyBmcm9tIHJvb3QgcHJvdmlkZXIuXCIsXG4gICAgICAgIGV4dHJhID8gYFxcbiR7ZXh0cmF9YCA6IFwiXCIsXG4gICAgICAgIGB0b2tlbklkOiAke3Rva2VuSWR9YCxcbiAgICAgICAgYGVudHJ5cG9pbnQ6ICR7ZW50cnlwb2ludH1gLFxuICAgICAgICBcIm1vZGU6IGdsb2JhbFwiLFxuICAgICAgICBcInN0YXJ0U2NvcGU6IHJvb3RcIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCJmaXg6XCIsXG4gICAgICAgIC4uLmZpeCxcbiAgICAgIF1cbiAgICAgICAgLmZpbHRlcigocykgPT4gcy5sZW5ndGggPiAwKVxuICAgICAgICAuam9pbihcIlxcblwiKVxuICAgIDogXCJbTWlzc2luZ1Jvb3RQcm92aWRlckVycm9yXSB0YWcgbm90IGZvdW5kIGluIHJvb3QgcHJvdmlkZXJcIlxuXG4gIGNvbnN0IGVyciA9IG5ldyBFcnJvcihtZXNzYWdlKVxuICBlcnIubmFtZSA9IFwiTWlzc2luZ1Jvb3RQcm92aWRlckVycm9yXCJcbiAgOyhlcnIgYXMgYW55KS50b2tlbklkID0gdG9rZW5JZFxuICA7KGVyciBhcyBhbnkpLmVudHJ5cG9pbnQgPSBlbnRyeXBvaW50XG4gIDsoZXJyIGFzIGFueSkubW9kZSA9IFwiZ2xvYmFsXCJcbiAgOyhlcnIgYXMgYW55KS5zdGFydFNjb3BlID0geyBraW5kOiBcInJvb3RcIiB9XG4gIDsoZXJyIGFzIGFueSkuZml4ID0gZml4XG4gIHJldHVybiBlcnJcbn1cblxuLyoqXG4gKiBSb290LnJlc29sdmVcbiAqXG4gKiBcdTY2M0VcdTVGMEZcdTRFQ0VcdTIwMUNcdTVGNTNcdTUyNEQgUnVudGltZSBUcmVlIFx1NzY4NFx1NjgzOVx1RkYwOHJvb3QgcHJvdmlkZXJcdUZGMDlcdTIwMURcdTg5RTNcdTY3OTBcdTY3RDBcdTRFMkEgVGFnXHVGRjA4U2VydmljZVRhZyAvIE1vZHVsZVRhZ1x1RkYwOVx1MzAwMlxuICpcbiAqIFx1OEJFRFx1NEU0OVx1RkYxQVxuICogLSBcdTU2RkFcdTVCOUFcdThCRkJcdTUzRDYgcm9vdENvbnRleHRcdUZGMENcdTRFMERcdTUzRDdcdTY2RjRcdThGRDEgc2NvcGUgXHU3Njg0IExheWVyL0NvbnRleHQgXHU4OTg2XHU3NkQ2XHU1RjcxXHU1NENEXHVGRjFCXG4gKiAtIFx1NUJGOSBNb2R1bGVUYWdcdUZGMUFcdTUzRUFcdTg4NjhcdThGQkUgcm9vdCBcdTUzNTVcdTRGOEJcdThCRURcdTRFNDlcdUZGMDhcdTRFMERcdTc1MjhcdTRFOEVcdTU5MUFcdTVCOUVcdTRGOEJcdTkwMDlcdTYyRTlcdUZGMDlcdTMwMDJcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmUgPSA8SWQsIFN2Yz4oXG4gIHRhZzogQ29udGV4dC5UYWc8SWQsIFN2Yz4sXG4gIG9wdGlvbnM/OiBSb290UmVzb2x2ZU9wdGlvbnMsXG4pOiBFZmZlY3QuRWZmZWN0PFN2YywgbmV2ZXIsIGFueT4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IGVudHJ5cG9pbnQ6IFJvb3RSZXNvbHZlRW50cnlwb2ludCA9XG4gICAgICBvcHRpb25zPy5lbnRyeXBvaW50ID8/IFwibG9naWMucm9vdC5yZXNvbHZlXCJcblxuICAgIGNvbnN0IHJvb3QgPSB5aWVsZCogUm9vdENvbnRleHRUYWdcblxuICAgIGNvbnN0IHJvb3RDb250ZXh0ID1cbiAgICAgIHJvb3QuY29udGV4dCA/PyAob3B0aW9ucz8ud2FpdEZvclJlYWR5ID8geWllbGQqIHJvb3QucmVhZHkgOiB1bmRlZmluZWQpXG5cbiAgICBpZiAoIXJvb3RDb250ZXh0KSB7XG4gICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5kaWUoXG4gICAgICAgIG1ha2VNaXNzaW5nUm9vdFByb3ZpZGVyRXJyb3IoXG4gICAgICAgICAgdGFnIGFzIENvbnRleHQuVGFnPGFueSwgYW55PixcbiAgICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICAgIFwicmVhc29uOiByb290Q29udGV4dE5vdFJlYWR5XCIsXG4gICAgICAgICksXG4gICAgICApXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBDb250ZXh0LmdldChyb290Q29udGV4dCwgdGFnIGFzIENvbnRleHQuVGFnPGFueSwgYW55PikgYXMgU3ZjXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5kaWUoXG4gICAgICAgIG1ha2VNaXNzaW5nUm9vdFByb3ZpZGVyRXJyb3IodGFnIGFzIENvbnRleHQuVGFnPGFueSwgYW55PiwgZW50cnlwb2ludCksXG4gICAgICApXG4gICAgfVxuICB9KVxuIiwgImltcG9ydCB7IENvbnRleHQsIERlZmVycmVkIH0gZnJvbSBcImVmZmVjdFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9vdENvbnRleHQge1xuICBjb250ZXh0OiBDb250ZXh0LkNvbnRleHQ8YW55PiB8IHVuZGVmaW5lZFxuICByZWFkb25seSByZWFkeTogRGVmZXJyZWQuRGVmZXJyZWQ8Q29udGV4dC5Db250ZXh0PGFueT4sIG5ldmVyPlxufVxuXG5jbGFzcyBSb290Q29udGV4dFRhZ0ltcGwgZXh0ZW5kcyBDb250ZXh0LlRhZyhcbiAgXCJAbG9naXgvY29yZS9Sb290Q29udGV4dFwiLFxuKTxSb290Q29udGV4dFRhZ0ltcGwsIFJvb3RDb250ZXh0PigpIHt9XG5cbmV4cG9ydCBjb25zdCBSb290Q29udGV4dFRhZyA9IFJvb3RDb250ZXh0VGFnSW1wbFxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQUFBLFNBQVMsV0FBQUEsVUFBUyxjQUFjOzs7QUNBaEMsU0FBUyxlQUF5QjtBQU9sQyxJQUFNLHFCQUFOLGNBQWlDLFFBQVE7QUFBQSxFQUN2QztBQUNGLEVBQW1DLEVBQUU7QUFBQztBQUUvQixJQUFNLGlCQUFpQjs7O0FESzlCLElBQU0sVUFBVSxDQUFDLFFBQ2YsT0FBUSxLQUFhLE9BQU8sV0FDeEIsT0FBUSxJQUFZLEVBQUUsSUFDdEIsT0FBUSxLQUFhLFFBQVEsV0FDM0IsT0FBUSxJQUFZLEdBQUcsSUFDdkI7QUFFUixJQUFNLCtCQUErQixDQUNuQyxLQUNBLFlBQ0EsVUFDVTtBQUNWLFFBQU0sTUFBTSxTQUFTO0FBQ3JCLFFBQU0sVUFBVSxRQUFRLEdBQUc7QUFDM0IsUUFBTSxNQUFnQixNQUNsQjtBQUFBLElBQ0U7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFDQSxDQUFDO0FBRUwsUUFBTSxVQUFVLE1BQ1o7QUFBQSxJQUNFO0FBQUEsSUFDQSxRQUFRO0FBQUEsRUFBSyxLQUFLLEtBQUs7QUFBQSxJQUN2QixZQUFZLE9BQU87QUFBQSxJQUNuQixlQUFlLFVBQVU7QUFBQSxJQUN6QjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBRztBQUFBLEVBQ0wsRUFDRyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUMxQixLQUFLLElBQUksSUFDWjtBQUVKLFFBQU0sTUFBTSxJQUFJLE1BQU0sT0FBTztBQUM3QixNQUFJLE9BQU87QUFDVixFQUFDLElBQVksVUFBVTtBQUN2QixFQUFDLElBQVksYUFBYTtBQUMxQixFQUFDLElBQVksT0FBTztBQUNwQixFQUFDLElBQVksYUFBYSxFQUFFLE1BQU0sT0FBTztBQUN6QyxFQUFDLElBQVksTUFBTTtBQUNwQixTQUFPO0FBQ1Q7QUFXTyxJQUFNLFVBQVUsQ0FDckIsS0FDQSxZQUVBLE9BQU8sSUFBSSxhQUFhO0FBQ3RCLFFBQU0sYUFDSixTQUFTLGNBQWM7QUFFekIsUUFBTSxPQUFPLE9BQU87QUFFcEIsUUFBTSxjQUNKLEtBQUssWUFBWSxTQUFTLGVBQWUsT0FBTyxLQUFLLFFBQVE7QUFFL0QsTUFBSSxDQUFDLGFBQWE7QUFDaEIsV0FBTyxPQUFPLE9BQU87QUFBQSxNQUNuQjtBQUFBLFFBQ0U7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLE1BQUk7QUFDRixXQUFPQyxTQUFRLElBQUksYUFBYSxHQUE0QjtBQUFBLEVBQzlELFFBQVE7QUFDTixXQUFPLE9BQU8sT0FBTztBQUFBLE1BQ25CLDZCQUE2QixLQUE4QixVQUFVO0FBQUEsSUFDdkU7QUFBQSxFQUNGO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFsiQ29udGV4dCIsICJDb250ZXh0Il0KfQo=
@@ -0,0 +1,85 @@
1
+ // @logix/core subpath bundles for @logix/sandbox
2
+
3
+ import {
4
+ isDevEnv
5
+ } from "./chunk-XE7ULSGQ.js";
6
+
7
+ // ../logix-core/src/internal/runtime/core/runtimeInternalsAccessor.ts
8
+ var RUNTIME_INTERNALS = /* @__PURE__ */ Symbol.for("@logix/core/runtimeInternals");
9
+ var BOUND_INTERNALS = /* @__PURE__ */ Symbol.for("@logix/core/boundInternals");
10
+ var MODULE_TRAITS_PROGRAM = /* @__PURE__ */ Symbol.for("@logix/core/moduleTraitsProgram");
11
+ var defineHidden = (target, key, value) => {
12
+ Object.defineProperty(target, key, {
13
+ value,
14
+ enumerable: false,
15
+ configurable: true,
16
+ writable: false
17
+ });
18
+ };
19
+ var setRuntimeInternals = (runtime, internals) => {
20
+ defineHidden(runtime, RUNTIME_INTERNALS, internals);
21
+ };
22
+ var setBoundInternals = (bound, internals) => {
23
+ defineHidden(bound, BOUND_INTERNALS, internals);
24
+ };
25
+ var setModuleTraitsProgram = (module, program) => {
26
+ defineHidden(module, MODULE_TRAITS_PROGRAM, program);
27
+ };
28
+ var getModuleTraitsProgram = (module) => {
29
+ if (!module) return void 0;
30
+ if (typeof module !== "object" && typeof module !== "function") return void 0;
31
+ return module[MODULE_TRAITS_PROGRAM];
32
+ };
33
+ var formatScope = (moduleId, instanceId) => {
34
+ const m = typeof moduleId === "string" && moduleId.length > 0 ? moduleId : "unknown";
35
+ const i = typeof instanceId === "string" && instanceId.length > 0 ? instanceId : "unknown";
36
+ return `moduleId=${m}, instanceId=${i}`;
37
+ };
38
+ var getRuntimeInternals = (runtime) => {
39
+ const scope = runtime;
40
+ const internals = runtime[RUNTIME_INTERNALS];
41
+ if (!internals) {
42
+ const msg = isDevEnv() ? [
43
+ "[MissingRuntimeInternals] Runtime internals not installed on ModuleRuntime instance.",
44
+ `scope: ${formatScope(scope.moduleId, scope.instanceId)}`,
45
+ "fix:",
46
+ "- Ensure ModuleRuntime.make calls internalHooks.installInternalHooks (020 foundation).",
47
+ "- If you created a mock runtime for tests, attach internals or avoid calling internal-only APIs."
48
+ ].join("\n") : "Runtime internals not installed";
49
+ throw new Error(msg);
50
+ }
51
+ const runtimeInstanceId = scope.instanceId;
52
+ if (typeof runtimeInstanceId === "string" && runtimeInstanceId.length > 0 && runtimeInstanceId !== internals.instanceId) {
53
+ throw new Error(
54
+ isDevEnv() ? [
55
+ "[InconsistentRuntimeInternals] Runtime internals instanceId mismatch.",
56
+ `runtime: ${formatScope(scope.moduleId, runtimeInstanceId)}`,
57
+ `internals: ${formatScope(internals.moduleId, internals.instanceId)}`
58
+ ].join("\n") : "Runtime internals mismatch"
59
+ );
60
+ }
61
+ return internals;
62
+ };
63
+ var getBoundInternals = (bound) => {
64
+ const internals = bound[BOUND_INTERNALS];
65
+ if (!internals) {
66
+ const msg = isDevEnv() ? [
67
+ "[MissingBoundInternals] Bound internals not installed on Bound API instance.",
68
+ "fix:",
69
+ "- Ensure BoundApiRuntime attaches internals (020 foundation).",
70
+ "- If you created a mock bound for tests, attach internals or avoid calling internal-only APIs."
71
+ ].join("\n") : "Bound internals not installed";
72
+ throw new Error(msg);
73
+ }
74
+ return internals;
75
+ };
76
+
77
+ export {
78
+ setRuntimeInternals,
79
+ setBoundInternals,
80
+ setModuleTraitsProgram,
81
+ getModuleTraitsProgram,
82
+ getRuntimeInternals,
83
+ getBoundInternals
84
+ };
85
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvcnVudGltZS9jb3JlL3J1bnRpbWVJbnRlcm5hbHNBY2Nlc3Nvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgaXNEZXZFbnYgfSBmcm9tICcuL2Vudi5qcydcbmltcG9ydCB0eXBlIHsgUnVudGltZUludGVybmFscyB9IGZyb20gJy4vUnVudGltZUludGVybmFscy5qcydcblxuY29uc3QgUlVOVElNRV9JTlRFUk5BTFMgPSBTeW1ib2wuZm9yKCdAbG9naXgvY29yZS9ydW50aW1lSW50ZXJuYWxzJylcbmNvbnN0IEJPVU5EX0lOVEVSTkFMUyA9IFN5bWJvbC5mb3IoJ0Bsb2dpeC9jb3JlL2JvdW5kSW50ZXJuYWxzJylcbmNvbnN0IE1PRFVMRV9UUkFJVFNfUFJPR1JBTSA9IFN5bWJvbC5mb3IoJ0Bsb2dpeC9jb3JlL21vZHVsZVRyYWl0c1Byb2dyYW0nKVxuXG5jb25zdCBkZWZpbmVIaWRkZW4gPSAodGFyZ2V0OiBvYmplY3QsIGtleTogc3ltYm9sLCB2YWx1ZTogdW5rbm93bik6IHZvaWQgPT4ge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICB2YWx1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9KVxufVxuXG5leHBvcnQgY29uc3Qgc2V0UnVudGltZUludGVybmFscyA9IChydW50aW1lOiBvYmplY3QsIGludGVybmFsczogUnVudGltZUludGVybmFscyk6IHZvaWQgPT4ge1xuICBkZWZpbmVIaWRkZW4ocnVudGltZSwgUlVOVElNRV9JTlRFUk5BTFMsIGludGVybmFscylcbn1cblxuZXhwb3J0IGNvbnN0IHNldEJvdW5kSW50ZXJuYWxzID0gKGJvdW5kOiBvYmplY3QsIGludGVybmFsczogUnVudGltZUludGVybmFscyk6IHZvaWQgPT4ge1xuICBkZWZpbmVIaWRkZW4oYm91bmQsIEJPVU5EX0lOVEVSTkFMUywgaW50ZXJuYWxzKVxufVxuXG4vKipcbiAqIE1vZHVsZVRyYWl0c1Byb2dyYW1cdUZGMDhTdGF0ZVRyYWl0UHJvZ3JhbVx1RkYwOVx1RkYxQVxuICogLSBcdTc1MjhcdTRFOEVcdTU3MjggTW9kdWxlIFx1NUI5QVx1NEU0OVx1NUJGOVx1OEM2MVx1NEUwQVx1NjMwMlx1OEY3RCB0cmFpdHMgUHJvZ3JhbVx1RkYwOFx1NEY5QiBUcmFpdExpZmVjeWNsZS9EZWJ1ZyBcdTRGN0ZcdTc1MjhcdUZGMDlcdUZGMUJcbiAqIC0gXHU0RjdGXHU3NTI4IFN5bWJvbCArIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XHVGRjBDXHU5MDdGXHU1MTREIGAuX18qYCBtYWdpYyBmaWVsZCBcdTYyNjlcdTY1NjNcdTMwMDJcbiAqXG4gKiBcdTZDRThcdTYxMEZcdUZGMUFcdThGRDlcdTY2MkZcdTIwMUNcdTZBMjFcdTU3NTdcdTVCOUFcdTRFNDlcdTRGQTdcdTIwMURcdTc2ODRcdTUxODVcdTkwRThcdTY5RkRcdTRGNERcdUZGMENcdTRFMERcdTVDNUVcdTRFOEUgUnVudGltZUludGVybmFsc1x1RkYwOFx1NUI5RVx1NEY4Qlx1N0VBN1x1RkYwOVx1RkYxQlx1NEUyNFx1ODAwNVx1OEJFRFx1NEU0OVx1NEUwRFx1NTQwQ1x1MzAwMlxuICovXG5leHBvcnQgY29uc3Qgc2V0TW9kdWxlVHJhaXRzUHJvZ3JhbSA9IChtb2R1bGU6IG9iamVjdCwgcHJvZ3JhbTogdW5rbm93bik6IHZvaWQgPT4ge1xuICBkZWZpbmVIaWRkZW4obW9kdWxlLCBNT0RVTEVfVFJBSVRTX1BST0dSQU0sIHByb2dyYW0pXG59XG5cbmV4cG9ydCBjb25zdCBnZXRNb2R1bGVUcmFpdHNQcm9ncmFtID0gKG1vZHVsZTogdW5rbm93bik6IHVua25vd24gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIW1vZHVsZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4gKG1vZHVsZSBhcyBhbnkpW01PRFVMRV9UUkFJVFNfUFJPR1JBTV0gYXMgdW5rbm93biB8IHVuZGVmaW5lZFxufVxuXG5jb25zdCBmb3JtYXRTY29wZSA9IChtb2R1bGVJZDogdW5rbm93biwgaW5zdGFuY2VJZDogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG0gPSB0eXBlb2YgbW9kdWxlSWQgPT09ICdzdHJpbmcnICYmIG1vZHVsZUlkLmxlbmd0aCA+IDAgPyBtb2R1bGVJZCA6ICd1bmtub3duJ1xuICBjb25zdCBpID0gdHlwZW9mIGluc3RhbmNlSWQgPT09ICdzdHJpbmcnICYmIGluc3RhbmNlSWQubGVuZ3RoID4gMCA/IGluc3RhbmNlSWQgOiAndW5rbm93bidcbiAgcmV0dXJuIGBtb2R1bGVJZD0ke219LCBpbnN0YW5jZUlkPSR7aX1gXG59XG5cbmV4cG9ydCBjb25zdCBnZXRSdW50aW1lSW50ZXJuYWxzID0gKHJ1bnRpbWU6IG9iamVjdCk6IFJ1bnRpbWVJbnRlcm5hbHMgPT4ge1xuICBjb25zdCBzY29wZSA9IHJ1bnRpbWUgYXMgeyByZWFkb25seSBtb2R1bGVJZD86IHVua25vd247IHJlYWRvbmx5IGluc3RhbmNlSWQ/OiB1bmtub3duIH1cbiAgY29uc3QgaW50ZXJuYWxzID0gKHJ1bnRpbWUgYXMgYW55KVtSVU5USU1FX0lOVEVSTkFMU10gYXMgUnVudGltZUludGVybmFscyB8IHVuZGVmaW5lZFxuICBpZiAoIWludGVybmFscykge1xuICAgIGNvbnN0IG1zZyA9IGlzRGV2RW52KClcbiAgICAgID8gW1xuICAgICAgICAgICdbTWlzc2luZ1J1bnRpbWVJbnRlcm5hbHNdIFJ1bnRpbWUgaW50ZXJuYWxzIG5vdCBpbnN0YWxsZWQgb24gTW9kdWxlUnVudGltZSBpbnN0YW5jZS4nLFxuICAgICAgICAgIGBzY29wZTogJHtmb3JtYXRTY29wZShzY29wZS5tb2R1bGVJZCwgc2NvcGUuaW5zdGFuY2VJZCl9YCxcbiAgICAgICAgICAnZml4OicsXG4gICAgICAgICAgJy0gRW5zdXJlIE1vZHVsZVJ1bnRpbWUubWFrZSBjYWxscyBpbnRlcm5hbEhvb2tzLmluc3RhbGxJbnRlcm5hbEhvb2tzICgwMjAgZm91bmRhdGlvbikuJyxcbiAgICAgICAgICAnLSBJZiB5b3UgY3JlYXRlZCBhIG1vY2sgcnVudGltZSBmb3IgdGVzdHMsIGF0dGFjaCBpbnRlcm5hbHMgb3IgYXZvaWQgY2FsbGluZyBpbnRlcm5hbC1vbmx5IEFQSXMuJyxcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgOiAnUnVudGltZSBpbnRlcm5hbHMgbm90IGluc3RhbGxlZCdcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKVxuICB9XG5cbiAgY29uc3QgcnVudGltZUluc3RhbmNlSWQgPSBzY29wZS5pbnN0YW5jZUlkXG4gIGlmIChcbiAgICB0eXBlb2YgcnVudGltZUluc3RhbmNlSWQgPT09ICdzdHJpbmcnICYmXG4gICAgcnVudGltZUluc3RhbmNlSWQubGVuZ3RoID4gMCAmJlxuICAgIHJ1bnRpbWVJbnN0YW5jZUlkICE9PSBpbnRlcm5hbHMuaW5zdGFuY2VJZFxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBpc0RldkVudigpXG4gICAgICAgID8gW1xuICAgICAgICAgICAgJ1tJbmNvbnNpc3RlbnRSdW50aW1lSW50ZXJuYWxzXSBSdW50aW1lIGludGVybmFscyBpbnN0YW5jZUlkIG1pc21hdGNoLicsXG4gICAgICAgICAgICBgcnVudGltZTogJHtmb3JtYXRTY29wZShzY29wZS5tb2R1bGVJZCwgcnVudGltZUluc3RhbmNlSWQpfWAsXG4gICAgICAgICAgICBgaW50ZXJuYWxzOiAke2Zvcm1hdFNjb3BlKGludGVybmFscy5tb2R1bGVJZCwgaW50ZXJuYWxzLmluc3RhbmNlSWQpfWAsXG4gICAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgICA6ICdSdW50aW1lIGludGVybmFscyBtaXNtYXRjaCcsXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGludGVybmFsc1xufVxuXG5leHBvcnQgY29uc3QgZ2V0Qm91bmRJbnRlcm5hbHMgPSAoYm91bmQ6IG9iamVjdCk6IFJ1bnRpbWVJbnRlcm5hbHMgPT4ge1xuICBjb25zdCBpbnRlcm5hbHMgPSAoYm91bmQgYXMgYW55KVtCT1VORF9JTlRFUk5BTFNdIGFzIFJ1bnRpbWVJbnRlcm5hbHMgfCB1bmRlZmluZWRcbiAgaWYgKCFpbnRlcm5hbHMpIHtcbiAgICBjb25zdCBtc2cgPSBpc0RldkVudigpXG4gICAgICA/IFtcbiAgICAgICAgICAnW01pc3NpbmdCb3VuZEludGVybmFsc10gQm91bmQgaW50ZXJuYWxzIG5vdCBpbnN0YWxsZWQgb24gQm91bmQgQVBJIGluc3RhbmNlLicsXG4gICAgICAgICAgJ2ZpeDonLFxuICAgICAgICAgICctIEVuc3VyZSBCb3VuZEFwaVJ1bnRpbWUgYXR0YWNoZXMgaW50ZXJuYWxzICgwMjAgZm91bmRhdGlvbikuJyxcbiAgICAgICAgICAnLSBJZiB5b3UgY3JlYXRlZCBhIG1vY2sgYm91bmQgZm9yIHRlc3RzLCBhdHRhY2ggaW50ZXJuYWxzIG9yIGF2b2lkIGNhbGxpbmcgaW50ZXJuYWwtb25seSBBUElzLicsXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICAgIDogJ0JvdW5kIGludGVybmFscyBub3QgaW5zdGFsbGVkJ1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cpXG4gIH1cblxuICByZXR1cm4gaW50ZXJuYWxzXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBR0EsSUFBTSxvQkFBb0IsdUJBQU8sSUFBSSw4QkFBOEI7QUFDbkUsSUFBTSxrQkFBa0IsdUJBQU8sSUFBSSw0QkFBNEI7QUFDL0QsSUFBTSx3QkFBd0IsdUJBQU8sSUFBSSxpQ0FBaUM7QUFFMUUsSUFBTSxlQUFlLENBQUMsUUFBZ0IsS0FBYSxVQUF5QjtBQUMxRSxTQUFPLGVBQWUsUUFBUSxLQUFLO0FBQUEsSUFDakM7QUFBQSxJQUNBLFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLFVBQVU7QUFBQSxFQUNaLENBQUM7QUFDSDtBQUVPLElBQU0sc0JBQXNCLENBQUMsU0FBaUIsY0FBc0M7QUFDekYsZUFBYSxTQUFTLG1CQUFtQixTQUFTO0FBQ3BEO0FBRU8sSUFBTSxvQkFBb0IsQ0FBQyxPQUFlLGNBQXNDO0FBQ3JGLGVBQWEsT0FBTyxpQkFBaUIsU0FBUztBQUNoRDtBQVNPLElBQU0seUJBQXlCLENBQUMsUUFBZ0IsWUFBMkI7QUFDaEYsZUFBYSxRQUFRLHVCQUF1QixPQUFPO0FBQ3JEO0FBRU8sSUFBTSx5QkFBeUIsQ0FBQyxXQUF5QztBQUM5RSxNQUFJLENBQUMsT0FBUSxRQUFPO0FBQ3BCLE1BQUksT0FBTyxXQUFXLFlBQVksT0FBTyxXQUFXLFdBQVksUUFBTztBQUN2RSxTQUFRLE9BQWUscUJBQXFCO0FBQzlDO0FBRUEsSUFBTSxjQUFjLENBQUMsVUFBbUIsZUFBZ0M7QUFDdEUsUUFBTSxJQUFJLE9BQU8sYUFBYSxZQUFZLFNBQVMsU0FBUyxJQUFJLFdBQVc7QUFDM0UsUUFBTSxJQUFJLE9BQU8sZUFBZSxZQUFZLFdBQVcsU0FBUyxJQUFJLGFBQWE7QUFDakYsU0FBTyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7QUFDdkM7QUFFTyxJQUFNLHNCQUFzQixDQUFDLFlBQXNDO0FBQ3hFLFFBQU0sUUFBUTtBQUNkLFFBQU0sWUFBYSxRQUFnQixpQkFBaUI7QUFDcEQsTUFBSSxDQUFDLFdBQVc7QUFDZCxVQUFNLE1BQU0sU0FBUyxJQUNqQjtBQUFBLE1BQ0U7QUFBQSxNQUNBLFVBQVUsWUFBWSxNQUFNLFVBQVUsTUFBTSxVQUFVLENBQUM7QUFBQSxNQUN2RDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixFQUFFLEtBQUssSUFBSSxJQUNYO0FBQ0osVUFBTSxJQUFJLE1BQU0sR0FBRztBQUFBLEVBQ3JCO0FBRUEsUUFBTSxvQkFBb0IsTUFBTTtBQUNoQyxNQUNFLE9BQU8sc0JBQXNCLFlBQzdCLGtCQUFrQixTQUFTLEtBQzNCLHNCQUFzQixVQUFVLFlBQ2hDO0FBQ0EsVUFBTSxJQUFJO0FBQUEsTUFDUixTQUFTLElBQ0w7QUFBQSxRQUNFO0FBQUEsUUFDQSxZQUFZLFlBQVksTUFBTSxVQUFVLGlCQUFpQixDQUFDO0FBQUEsUUFDMUQsY0FBYyxZQUFZLFVBQVUsVUFBVSxVQUFVLFVBQVUsQ0FBQztBQUFBLE1BQ3JFLEVBQUUsS0FBSyxJQUFJLElBQ1g7QUFBQSxJQUNOO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQUVPLElBQU0sb0JBQW9CLENBQUMsVUFBb0M7QUFDcEUsUUFBTSxZQUFhLE1BQWMsZUFBZTtBQUNoRCxNQUFJLENBQUMsV0FBVztBQUNkLFVBQU0sTUFBTSxTQUFTLElBQ2pCO0FBQUEsTUFDRTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsRUFBRSxLQUFLLElBQUksSUFDWDtBQUNKLFVBQU0sSUFBSSxNQUFNLEdBQUc7QUFBQSxFQUNyQjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K