@milaboratories/pl-middle-layer 1.46.20 → 1.46.22

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 (402) hide show
  1. package/dist/block_registry/index.d.ts +3 -3
  2. package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
  3. package/dist/block_registry/registry-v2-provider.d.ts +2 -2
  4. package/dist/block_registry/registry-v2-provider.js.map +1 -1
  5. package/dist/block_registry/registry.cjs +54 -53
  6. package/dist/block_registry/registry.cjs.map +1 -1
  7. package/dist/block_registry/registry.d.ts +4 -4
  8. package/dist/block_registry/registry.d.ts.map +1 -1
  9. package/dist/block_registry/registry.js +54 -53
  10. package/dist/block_registry/registry.js.map +1 -1
  11. package/dist/block_registry/watcher.cjs +12 -12
  12. package/dist/block_registry/watcher.cjs.map +1 -1
  13. package/dist/block_registry/watcher.d.ts +6 -6
  14. package/dist/block_registry/watcher.d.ts.map +1 -1
  15. package/dist/block_registry/watcher.js +12 -12
  16. package/dist/block_registry/watcher.js.map +1 -1
  17. package/dist/block_registry/well_known_registries.cjs +6 -6
  18. package/dist/block_registry/well_known_registries.cjs.map +1 -1
  19. package/dist/block_registry/well_known_registries.d.ts +1 -1
  20. package/dist/block_registry/well_known_registries.js +6 -6
  21. package/dist/block_registry/well_known_registries.js.map +1 -1
  22. package/dist/cfg_render/executor.cjs +11 -11
  23. package/dist/cfg_render/executor.cjs.map +1 -1
  24. package/dist/cfg_render/executor.d.ts +5 -5
  25. package/dist/cfg_render/executor.js +11 -11
  26. package/dist/cfg_render/executor.js.map +1 -1
  27. package/dist/cfg_render/operation.d.ts +5 -5
  28. package/dist/cfg_render/renderer.cjs +74 -75
  29. package/dist/cfg_render/renderer.cjs.map +1 -1
  30. package/dist/cfg_render/renderer.d.ts +2 -2
  31. package/dist/cfg_render/renderer.d.ts.map +1 -1
  32. package/dist/cfg_render/renderer.js +74 -75
  33. package/dist/cfg_render/renderer.js.map +1 -1
  34. package/dist/cfg_render/traverse.cjs +27 -27
  35. package/dist/cfg_render/traverse.cjs.map +1 -1
  36. package/dist/cfg_render/traverse.d.ts +1 -1
  37. package/dist/cfg_render/traverse.js +27 -27
  38. package/dist/cfg_render/traverse.js.map +1 -1
  39. package/dist/cfg_render/util.cjs +1 -1
  40. package/dist/cfg_render/util.cjs.map +1 -1
  41. package/dist/cfg_render/util.d.ts +1 -1
  42. package/dist/cfg_render/util.js +1 -1
  43. package/dist/cfg_render/util.js.map +1 -1
  44. package/dist/debug/index.cjs +4 -2
  45. package/dist/debug/index.cjs.map +1 -1
  46. package/dist/debug/index.d.ts +2 -2
  47. package/dist/debug/index.d.ts.map +1 -1
  48. package/dist/debug/index.js +4 -2
  49. package/dist/debug/index.js.map +1 -1
  50. package/dist/dev_env/index.cjs +8 -8
  51. package/dist/dev_env/index.cjs.map +1 -1
  52. package/dist/dev_env/index.js +8 -8
  53. package/dist/dev_env/index.js.map +1 -1
  54. package/dist/dev_env/util.cjs +1 -1
  55. package/dist/dev_env/util.cjs.map +1 -1
  56. package/dist/dev_env/util.d.ts +1 -1
  57. package/dist/dev_env/util.js +1 -1
  58. package/dist/dev_env/util.js.map +1 -1
  59. package/dist/index.d.ts +16 -16
  60. package/dist/js_render/computable_context.cjs +78 -78
  61. package/dist/js_render/computable_context.cjs.map +1 -1
  62. package/dist/js_render/computable_context.d.ts +9 -9
  63. package/dist/js_render/computable_context.d.ts.map +1 -1
  64. package/dist/js_render/computable_context.js +78 -78
  65. package/dist/js_render/computable_context.js.map +1 -1
  66. package/dist/js_render/context.cjs +33 -27
  67. package/dist/js_render/context.cjs.map +1 -1
  68. package/dist/js_render/context.d.ts +7 -7
  69. package/dist/js_render/context.d.ts.map +1 -1
  70. package/dist/js_render/context.js +33 -27
  71. package/dist/js_render/context.js.map +1 -1
  72. package/dist/js_render/index.cjs +10 -6
  73. package/dist/js_render/index.cjs.map +1 -1
  74. package/dist/js_render/index.d.ts +6 -6
  75. package/dist/js_render/index.d.ts.map +1 -1
  76. package/dist/js_render/index.js +10 -6
  77. package/dist/js_render/index.js.map +1 -1
  78. package/dist/middle_layer/active_cfg.cjs.map +1 -1
  79. package/dist/middle_layer/active_cfg.d.ts +3 -3
  80. package/dist/middle_layer/active_cfg.d.ts.map +1 -1
  81. package/dist/middle_layer/active_cfg.js.map +1 -1
  82. package/dist/middle_layer/block.cjs +1 -1
  83. package/dist/middle_layer/block.cjs.map +1 -1
  84. package/dist/middle_layer/block.d.ts +6 -6
  85. package/dist/middle_layer/block.d.ts.map +1 -1
  86. package/dist/middle_layer/block.js +1 -1
  87. package/dist/middle_layer/block.js.map +1 -1
  88. package/dist/middle_layer/block_ctx.cjs +9 -9
  89. package/dist/middle_layer/block_ctx.cjs.map +1 -1
  90. package/dist/middle_layer/block_ctx.d.ts +6 -6
  91. package/dist/middle_layer/block_ctx.d.ts.map +1 -1
  92. package/dist/middle_layer/block_ctx.js +9 -9
  93. package/dist/middle_layer/block_ctx.js.map +1 -1
  94. package/dist/middle_layer/block_ctx_unsafe.cjs +1 -1
  95. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
  96. package/dist/middle_layer/block_ctx_unsafe.d.ts +5 -5
  97. package/dist/middle_layer/block_ctx_unsafe.js +1 -1
  98. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -1
  99. package/dist/middle_layer/driver_kit.cjs +1 -2
  100. package/dist/middle_layer/driver_kit.cjs.map +1 -1
  101. package/dist/middle_layer/driver_kit.d.ts +7 -7
  102. package/dist/middle_layer/driver_kit.d.ts.map +1 -1
  103. package/dist/middle_layer/driver_kit.js +1 -2
  104. package/dist/middle_layer/driver_kit.js.map +1 -1
  105. package/dist/middle_layer/frontend_path.cjs +5 -5
  106. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  107. package/dist/middle_layer/frontend_path.d.ts +4 -4
  108. package/dist/middle_layer/frontend_path.d.ts.map +1 -1
  109. package/dist/middle_layer/frontend_path.js +5 -5
  110. package/dist/middle_layer/frontend_path.js.map +1 -1
  111. package/dist/middle_layer/index.d.ts +4 -4
  112. package/dist/middle_layer/middle_layer.cjs +11 -11
  113. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  114. package/dist/middle_layer/middle_layer.d.ts +18 -18
  115. package/dist/middle_layer/middle_layer.d.ts.map +1 -1
  116. package/dist/middle_layer/middle_layer.js +11 -11
  117. package/dist/middle_layer/middle_layer.js.map +1 -1
  118. package/dist/middle_layer/navigation_states.cjs +2 -2
  119. package/dist/middle_layer/navigation_states.cjs.map +1 -1
  120. package/dist/middle_layer/navigation_states.d.ts +2 -2
  121. package/dist/middle_layer/navigation_states.js +2 -2
  122. package/dist/middle_layer/navigation_states.js.map +1 -1
  123. package/dist/middle_layer/ops.cjs +5 -5
  124. package/dist/middle_layer/ops.cjs.map +1 -1
  125. package/dist/middle_layer/ops.d.ts +11 -11
  126. package/dist/middle_layer/ops.d.ts.map +1 -1
  127. package/dist/middle_layer/ops.js +5 -5
  128. package/dist/middle_layer/ops.js.map +1 -1
  129. package/dist/middle_layer/project.cjs +71 -63
  130. package/dist/middle_layer/project.cjs.map +1 -1
  131. package/dist/middle_layer/project.d.ts +10 -10
  132. package/dist/middle_layer/project.d.ts.map +1 -1
  133. package/dist/middle_layer/project.js +71 -63
  134. package/dist/middle_layer/project.js.map +1 -1
  135. package/dist/middle_layer/project_list.cjs +2 -2
  136. package/dist/middle_layer/project_list.cjs.map +1 -1
  137. package/dist/middle_layer/project_list.d.ts +6 -6
  138. package/dist/middle_layer/project_list.d.ts.map +1 -1
  139. package/dist/middle_layer/project_list.js +2 -2
  140. package/dist/middle_layer/project_list.js.map +1 -1
  141. package/dist/middle_layer/project_overview.cjs +40 -40
  142. package/dist/middle_layer/project_overview.cjs.map +1 -1
  143. package/dist/middle_layer/project_overview.d.ts +5 -5
  144. package/dist/middle_layer/project_overview.d.ts.map +1 -1
  145. package/dist/middle_layer/project_overview.js +40 -40
  146. package/dist/middle_layer/project_overview.js.map +1 -1
  147. package/dist/middle_layer/project_overview_light.cjs.map +1 -1
  148. package/dist/middle_layer/project_overview_light.d.ts +2 -2
  149. package/dist/middle_layer/project_overview_light.d.ts.map +1 -1
  150. package/dist/middle_layer/project_overview_light.js.map +1 -1
  151. package/dist/middle_layer/render.cjs +1 -1
  152. package/dist/middle_layer/render.cjs.map +1 -1
  153. package/dist/middle_layer/render.d.ts +4 -4
  154. package/dist/middle_layer/render.js +1 -1
  155. package/dist/middle_layer/render.js.map +1 -1
  156. package/dist/middle_layer/render.test.d.ts +2 -2
  157. package/dist/middle_layer/types.d.ts +3 -3
  158. package/dist/middle_layer/util.cjs +9 -4
  159. package/dist/middle_layer/util.cjs.map +1 -1
  160. package/dist/middle_layer/util.d.ts +4 -4
  161. package/dist/middle_layer/util.d.ts.map +1 -1
  162. package/dist/middle_layer/util.js +9 -4
  163. package/dist/middle_layer/util.js.map +1 -1
  164. package/dist/model/args.cjs +19 -15
  165. package/dist/model/args.cjs.map +1 -1
  166. package/dist/model/args.d.ts +1 -1
  167. package/dist/model/args.d.ts.map +1 -1
  168. package/dist/model/args.js +19 -15
  169. package/dist/model/args.js.map +1 -1
  170. package/dist/model/block_pack.d.ts +2 -2
  171. package/dist/model/block_pack_spec.cjs +3 -3
  172. package/dist/model/block_pack_spec.cjs.map +1 -1
  173. package/dist/model/block_pack_spec.d.ts +8 -8
  174. package/dist/model/block_pack_spec.js +3 -3
  175. package/dist/model/block_pack_spec.js.map +1 -1
  176. package/dist/model/block_storage_helper.cjs +4 -4
  177. package/dist/model/block_storage_helper.cjs.map +1 -1
  178. package/dist/model/block_storage_helper.d.ts +2 -2
  179. package/dist/model/block_storage_helper.d.ts.map +1 -1
  180. package/dist/model/block_storage_helper.js +4 -4
  181. package/dist/model/block_storage_helper.js.map +1 -1
  182. package/dist/model/index.d.ts +3 -3
  183. package/dist/model/project_helper.cjs +30 -13
  184. package/dist/model/project_helper.cjs.map +1 -1
  185. package/dist/model/project_helper.d.ts +4 -4
  186. package/dist/model/project_helper.d.ts.map +1 -1
  187. package/dist/model/project_helper.js +30 -13
  188. package/dist/model/project_helper.js.map +1 -1
  189. package/dist/model/project_model.cjs +23 -23
  190. package/dist/model/project_model.cjs.map +1 -1
  191. package/dist/model/project_model.d.ts +6 -6
  192. package/dist/model/project_model.d.ts.map +1 -1
  193. package/dist/model/project_model.js +23 -23
  194. package/dist/model/project_model.js.map +1 -1
  195. package/dist/model/project_model_util.cjs +2 -2
  196. package/dist/model/project_model_util.cjs.map +1 -1
  197. package/dist/model/project_model_util.d.ts +3 -3
  198. package/dist/model/project_model_util.d.ts.map +1 -1
  199. package/dist/model/project_model_util.js +2 -2
  200. package/dist/model/project_model_util.js.map +1 -1
  201. package/dist/model/project_model_v1.cjs +2 -2
  202. package/dist/model/project_model_v1.cjs.map +1 -1
  203. package/dist/model/project_model_v1.js +2 -2
  204. package/dist/model/project_model_v1.js.map +1 -1
  205. package/dist/model/template_spec.d.ts +5 -5
  206. package/dist/mutator/block-pack/block_pack.cjs +43 -43
  207. package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
  208. package/dist/mutator/block-pack/block_pack.d.ts +6 -6
  209. package/dist/mutator/block-pack/block_pack.d.ts.map +1 -1
  210. package/dist/mutator/block-pack/block_pack.js +43 -43
  211. package/dist/mutator/block-pack/block_pack.js.map +1 -1
  212. package/dist/mutator/block-pack/frontend.cjs +2 -2
  213. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  214. package/dist/mutator/block-pack/frontend.d.ts +2 -2
  215. package/dist/mutator/block-pack/frontend.d.ts.map +1 -1
  216. package/dist/mutator/block-pack/frontend.js +2 -2
  217. package/dist/mutator/block-pack/frontend.js.map +1 -1
  218. package/dist/mutator/context_export.cjs +5 -5
  219. package/dist/mutator/context_export.cjs.map +1 -1
  220. package/dist/mutator/context_export.d.ts +2 -2
  221. package/dist/mutator/context_export.d.ts.map +1 -1
  222. package/dist/mutator/context_export.js +5 -5
  223. package/dist/mutator/context_export.js.map +1 -1
  224. package/dist/mutator/migration.cjs +7 -7
  225. package/dist/mutator/migration.cjs.map +1 -1
  226. package/dist/mutator/migration.d.ts +1 -1
  227. package/dist/mutator/migration.d.ts.map +1 -1
  228. package/dist/mutator/migration.js +7 -7
  229. package/dist/mutator/migration.js.map +1 -1
  230. package/dist/mutator/project.cjs +147 -148
  231. package/dist/mutator/project.cjs.map +1 -1
  232. package/dist/mutator/project.d.ts +13 -13
  233. package/dist/mutator/project.d.ts.map +1 -1
  234. package/dist/mutator/project.js +147 -148
  235. package/dist/mutator/project.js.map +1 -1
  236. package/dist/mutator/template/direct_template_loader.cjs +16 -16
  237. package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
  238. package/dist/mutator/template/direct_template_loader.d.ts +2 -2
  239. package/dist/mutator/template/direct_template_loader.d.ts.map +1 -1
  240. package/dist/mutator/template/direct_template_loader.js +16 -16
  241. package/dist/mutator/template/direct_template_loader.js.map +1 -1
  242. package/dist/mutator/template/direct_template_loader_v3.cjs +13 -13
  243. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
  244. package/dist/mutator/template/direct_template_loader_v3.d.ts +3 -3
  245. package/dist/mutator/template/direct_template_loader_v3.d.ts.map +1 -1
  246. package/dist/mutator/template/direct_template_loader_v3.js +13 -13
  247. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
  248. package/dist/mutator/template/render_block.cjs +7 -7
  249. package/dist/mutator/template/render_block.cjs.map +1 -1
  250. package/dist/mutator/template/render_block.d.ts +1 -1
  251. package/dist/mutator/template/render_block.d.ts.map +1 -1
  252. package/dist/mutator/template/render_block.js +7 -7
  253. package/dist/mutator/template/render_block.js.map +1 -1
  254. package/dist/mutator/template/render_template.cjs +10 -10
  255. package/dist/mutator/template/render_template.cjs.map +1 -1
  256. package/dist/mutator/template/render_template.d.ts +2 -2
  257. package/dist/mutator/template/render_template.js +10 -10
  258. package/dist/mutator/template/render_template.js.map +1 -1
  259. package/dist/mutator/template/template_loading.cjs +17 -17
  260. package/dist/mutator/template/template_loading.cjs.map +1 -1
  261. package/dist/mutator/template/template_loading.d.ts +2 -2
  262. package/dist/mutator/template/template_loading.js +17 -17
  263. package/dist/mutator/template/template_loading.js.map +1 -1
  264. package/dist/network_check/network_check.cjs +33 -32
  265. package/dist/network_check/network_check.cjs.map +1 -1
  266. package/dist/network_check/network_check.d.ts +6 -6
  267. package/dist/network_check/network_check.d.ts.map +1 -1
  268. package/dist/network_check/network_check.js +33 -32
  269. package/dist/network_check/network_check.js.map +1 -1
  270. package/dist/network_check/pings.cjs +3 -3
  271. package/dist/network_check/pings.cjs.map +1 -1
  272. package/dist/network_check/pings.d.ts +4 -4
  273. package/dist/network_check/pings.d.ts.map +1 -1
  274. package/dist/network_check/pings.js +3 -3
  275. package/dist/network_check/pings.js.map +1 -1
  276. package/dist/network_check/template.cjs +57 -44
  277. package/dist/network_check/template.cjs.map +1 -1
  278. package/dist/network_check/template.d.ts +8 -8
  279. package/dist/network_check/template.d.ts.map +1 -1
  280. package/dist/network_check/template.js +57 -44
  281. package/dist/network_check/template.js.map +1 -1
  282. package/dist/pool/data.cjs +45 -33
  283. package/dist/pool/data.cjs.map +1 -1
  284. package/dist/pool/data.d.ts +3 -3
  285. package/dist/pool/data.d.ts.map +1 -1
  286. package/dist/pool/data.js +45 -33
  287. package/dist/pool/data.js.map +1 -1
  288. package/dist/pool/driver.cjs +18 -16
  289. package/dist/pool/driver.cjs.map +1 -1
  290. package/dist/pool/driver.d.ts +5 -5
  291. package/dist/pool/driver.d.ts.map +1 -1
  292. package/dist/pool/driver.js +18 -16
  293. package/dist/pool/driver.js.map +1 -1
  294. package/dist/pool/index.d.ts +2 -2
  295. package/dist/pool/p_object_collection.cjs +5 -5
  296. package/dist/pool/p_object_collection.cjs.map +1 -1
  297. package/dist/pool/p_object_collection.d.ts +2 -2
  298. package/dist/pool/p_object_collection.d.ts.map +1 -1
  299. package/dist/pool/p_object_collection.js +5 -5
  300. package/dist/pool/p_object_collection.js.map +1 -1
  301. package/dist/pool/result_pool.cjs +6 -6
  302. package/dist/pool/result_pool.cjs.map +1 -1
  303. package/dist/pool/result_pool.d.ts +6 -6
  304. package/dist/pool/result_pool.d.ts.map +1 -1
  305. package/dist/pool/result_pool.js +6 -6
  306. package/dist/pool/result_pool.js.map +1 -1
  307. package/dist/test/block_packs.d.ts +2 -2
  308. package/dist/test/known_templates.d.ts +1 -1
  309. package/dist/worker/WorkerManager.cjs +7 -8
  310. package/dist/worker/WorkerManager.cjs.map +1 -1
  311. package/dist/worker/WorkerManager.d.ts +2 -2
  312. package/dist/worker/WorkerManager.d.ts.map +1 -1
  313. package/dist/worker/WorkerManager.js +7 -8
  314. package/dist/worker/WorkerManager.js.map +1 -1
  315. package/dist/worker/worker.cjs +6 -4
  316. package/dist/worker/worker.cjs.map +1 -1
  317. package/dist/worker/worker.js +6 -4
  318. package/dist/worker/worker.js.map +1 -1
  319. package/dist/worker/workerApi.cjs.map +1 -1
  320. package/dist/worker/workerApi.js.map +1 -1
  321. package/package.json +41 -41
  322. package/src/block_registry/index.ts +3 -3
  323. package/src/block_registry/registry-v2-provider.ts +2 -2
  324. package/src/block_registry/registry.test.ts +17 -17
  325. package/src/block_registry/registry.ts +55 -60
  326. package/src/block_registry/watcher.ts +24 -23
  327. package/src/block_registry/well_known_registries.ts +7 -7
  328. package/src/cfg_render/executor.test.ts +36 -36
  329. package/src/cfg_render/executor.ts +24 -24
  330. package/src/cfg_render/operation.ts +5 -5
  331. package/src/cfg_render/renderer.ts +96 -93
  332. package/src/cfg_render/traverse.ts +50 -50
  333. package/src/cfg_render/util.ts +3 -3
  334. package/src/debug/index.ts +6 -4
  335. package/src/dev_env/index.ts +16 -16
  336. package/src/dev_env/util.ts +3 -3
  337. package/src/index.ts +16 -16
  338. package/src/js_render/computable_context.ts +143 -126
  339. package/src/js_render/context.ts +72 -44
  340. package/src/js_render/index.ts +51 -24
  341. package/src/middle_layer/active_cfg.ts +14 -12
  342. package/src/middle_layer/block.ts +30 -23
  343. package/src/middle_layer/block_ctx.ts +27 -31
  344. package/src/middle_layer/block_ctx_unsafe.ts +9 -9
  345. package/src/middle_layer/driver_kit.ts +13 -19
  346. package/src/middle_layer/frontend_path.ts +18 -23
  347. package/src/middle_layer/index.ts +4 -4
  348. package/src/middle_layer/middle_layer.ts +57 -55
  349. package/src/middle_layer/navigation_states.ts +6 -6
  350. package/src/middle_layer/ops.ts +43 -42
  351. package/src/middle_layer/project.ts +274 -173
  352. package/src/middle_layer/project_list.ts +14 -15
  353. package/src/middle_layer/project_overview.ts +104 -113
  354. package/src/middle_layer/project_overview_light.ts +7 -9
  355. package/src/middle_layer/render.test.ts +49 -48
  356. package/src/middle_layer/render.ts +9 -9
  357. package/src/middle_layer/types.ts +3 -3
  358. package/src/middle_layer/util.ts +17 -12
  359. package/src/model/args.ts +22 -19
  360. package/src/model/block_pack.ts +2 -2
  361. package/src/model/block_pack_spec.ts +11 -11
  362. package/src/model/block_storage_helper.ts +11 -11
  363. package/src/model/index.ts +3 -3
  364. package/src/model/project_helper.ts +78 -32
  365. package/src/model/project_model.test.ts +5 -9
  366. package/src/model/project_model.ts +48 -49
  367. package/src/model/project_model_util.test.ts +86 -53
  368. package/src/model/project_model_util.ts +18 -14
  369. package/src/model/project_model_v1.ts +3 -3
  370. package/src/model/template_spec.ts +5 -5
  371. package/src/mutator/block-pack/block_pack.test.ts +25 -25
  372. package/src/mutator/block-pack/block_pack.ts +70 -68
  373. package/src/mutator/block-pack/frontend.ts +6 -13
  374. package/src/mutator/context_export.ts +12 -10
  375. package/src/mutator/migration.ts +20 -14
  376. package/src/mutator/project-v3.test.ts +123 -118
  377. package/src/mutator/project.test.ts +105 -94
  378. package/src/mutator/project.ts +357 -274
  379. package/src/mutator/template/direct_template_loader.ts +26 -32
  380. package/src/mutator/template/direct_template_loader_v3.ts +51 -25
  381. package/src/mutator/template/render_block.ts +14 -21
  382. package/src/mutator/template/render_template.ts +13 -13
  383. package/src/mutator/template/template_loading.ts +23 -23
  384. package/src/mutator/template/template_render.test.ts +87 -86
  385. package/src/network_check/network_check.test.ts +4 -4
  386. package/src/network_check/network_check.ts +102 -79
  387. package/src/network_check/pings.ts +35 -16
  388. package/src/network_check/template.test.ts +47 -44
  389. package/src/network_check/template.ts +151 -95
  390. package/src/network_check/test_utils.ts +1 -1
  391. package/src/pool/data.ts +81 -69
  392. package/src/pool/driver.ts +56 -51
  393. package/src/pool/index.ts +2 -2
  394. package/src/pool/p_object_collection.ts +16 -15
  395. package/src/pool/result_pool.ts +23 -34
  396. package/src/test/block_packs.ts +15 -15
  397. package/src/test/explicit_templates.ts +4 -4
  398. package/src/test/known_templates.ts +10 -10
  399. package/src/test_env.ts +1 -1
  400. package/src/worker/WorkerManager.ts +22 -18
  401. package/src/worker/worker.ts +11 -9
  402. package/src/worker/workerApi.ts +1 -1
@@ -32,22 +32,22 @@ class JsExecutionContext {
32
32
  this.vm = vm;
33
33
  this.deadlineSetter = deadlineSetter;
34
34
  this.callbackRegistry = this.scope.manage(this.vm.newObject());
35
- this.fnJSONStringify = scope.manage(vm.getProp(vm.global, 'JSON').consume((json) => vm.getProp(json, 'stringify')));
36
- if (vm.typeof(this.fnJSONStringify) !== 'function')
35
+ this.fnJSONStringify = scope.manage(vm.getProp(vm.global, "JSON").consume((json) => vm.getProp(json, "stringify")));
36
+ if (vm.typeof(this.fnJSONStringify) !== "function")
37
37
  throw new Error(`JSON.stringify() not found.`);
38
- this.fnJSONParse = scope.manage(vm.getProp(vm.global, 'JSON').consume((json) => vm.getProp(json, 'parse')));
39
- if (vm.typeof(this.fnJSONParse) !== 'function')
38
+ this.fnJSONParse = scope.manage(vm.getProp(vm.global, "JSON").consume((json) => vm.getProp(json, "parse")));
39
+ if (vm.typeof(this.fnJSONParse) !== "function")
40
40
  throw new Error(`JSON.parse() not found.`);
41
41
  if (computableEnv !== undefined)
42
42
  this.computableHelper = new ComputableContextHelper(this, computableEnv.blockCtx, computableEnv.mlEnv, featureFlags, computableEnv.computableCtx);
43
43
  this.injectCtx();
44
44
  }
45
45
  resetComputableCtx() {
46
- notEmpty(this.computableHelper, 'Computable context helper is not initialized').resetComputableCtx();
46
+ notEmpty(this.computableHelper, "Computable context helper is not initialized").resetComputableCtx();
47
47
  }
48
48
  static cleanErrorContext(error) {
49
- if (typeof error === 'object' && error !== null && 'context' in error)
50
- delete error['context'];
49
+ if (typeof error === "object" && error !== null && "context" in error)
50
+ delete error["context"];
51
51
  }
52
52
  // private static cleanError(error: unknown): unknown {
53
53
  // if (error instanceof errors.QuickJSUnwrapError) {
@@ -60,8 +60,11 @@ class JsExecutionContext {
60
60
  // }
61
61
  evaluateBundle(code) {
62
62
  try {
63
- this.deadlineSetter({ currentExecutionTarget: 'evaluateBundle', deadline: Date.now() + 10000 });
64
- this.vm.unwrapResult(this.vm.evalCode(code, 'bundle.js', { type: 'global' })).dispose();
63
+ this.deadlineSetter({
64
+ currentExecutionTarget: "evaluateBundle",
65
+ deadline: Date.now() + 10000,
66
+ });
67
+ this.vm.unwrapResult(this.vm.evalCode(code, "bundle.js", { type: "global" })).dispose();
65
68
  }
66
69
  catch (err) {
67
70
  JsExecutionContext.cleanErrorContext(err);
@@ -76,7 +79,7 @@ class JsExecutionContext {
76
79
  this.deadlineSetter({ currentExecutionTarget: cbName, deadline: Date.now() + 10000 });
77
80
  return Scope.withScope((localScope) => {
78
81
  const targetCallback = localScope.manage(this.vm.getProp(this.callbackRegistry, cbName));
79
- if (this.vm.typeof(targetCallback) !== 'function')
82
+ if (this.vm.typeof(targetCallback) !== "function")
80
83
  throw new Error(`No such callback: ${cbName}`);
81
84
  return this.scope.manage(this.vm.unwrapResult(this.vm.callFunction(targetCallback, this.vm.undefined, ...args.map((arg) => this.exportObjectUniversal(arg, localScope)))));
82
85
  });
@@ -96,7 +99,7 @@ class JsExecutionContext {
96
99
  exportSingleValue(obj, scope) {
97
100
  const result = this.tryExportSingleValue(obj, scope);
98
101
  if (result === undefined) {
99
- throw new Error(`Can't export value: ${obj === undefined ? 'undefined' : JSON.stringify(obj)}`);
102
+ throw new Error(`Can't export value: ${obj === undefined ? "undefined" : JSON.stringify(obj)}`);
100
103
  }
101
104
  return result;
102
105
  }
@@ -104,18 +107,18 @@ class JsExecutionContext {
104
107
  let handle;
105
108
  let manage = false;
106
109
  switch (typeof obj) {
107
- case 'string':
110
+ case "string":
108
111
  handle = this.vm.newString(obj);
109
112
  manage = true;
110
113
  break;
111
- case 'number':
114
+ case "number":
112
115
  handle = this.vm.newNumber(obj);
113
116
  manage = true;
114
117
  break;
115
- case 'undefined':
118
+ case "undefined":
116
119
  handle = this.vm.undefined;
117
120
  break;
118
- case 'boolean':
121
+ case "boolean":
119
122
  handle = obj ? this.vm.true : this.vm.false;
120
123
  break;
121
124
  default:
@@ -148,11 +151,11 @@ class JsExecutionContext {
148
151
  if (handle === undefined)
149
152
  return undefined;
150
153
  switch (this.vm.typeof(handle)) {
151
- case 'undefined':
154
+ case "undefined":
152
155
  return undefined;
153
- case 'boolean':
154
- case 'number':
155
- case 'string':
156
+ case "boolean":
157
+ case "number":
158
+ case "string":
156
159
  return this.vm.dump(handle);
157
160
  default:
158
161
  return this.importObjectViaJson(handle);
@@ -162,7 +165,7 @@ class JsExecutionContext {
162
165
  const text = this.vm
163
166
  .unwrapResult(this.vm.callFunction(this.fnJSONStringify, this.vm.undefined, handle))
164
167
  .consume((strHandle) => this.vm.getString(strHandle));
165
- if (text === 'undefined')
168
+ if (text === "undefined")
166
169
  // special case with futures
167
170
  return undefined;
168
171
  return JSON.parse(text);
@@ -173,8 +176,8 @@ class JsExecutionContext {
173
176
  //
174
177
  // Core props
175
178
  //
176
- this.vm.setProp(configCtx, 'callbackRegistry', this.callbackRegistry);
177
- this.vm.setProp(configCtx, 'featureFlags', this.exportObjectUniversal(JsRenderInternal.GlobalCfgRenderCtxFeatureFlags, localScope));
179
+ this.vm.setProp(configCtx, "callbackRegistry", this.callbackRegistry);
180
+ this.vm.setProp(configCtx, "featureFlags", this.exportObjectUniversal(JsRenderInternal.GlobalCfgRenderCtxFeatureFlags, localScope));
178
181
  // Inject context values from computableHelper (reactive context for outputs, inputsValid, etc.)
179
182
  if (this.computableHelper !== undefined) {
180
183
  this.computableHelper.injectCtx(configCtx);
@@ -182,7 +185,7 @@ class JsExecutionContext {
182
185
  //
183
186
  // Creating global variable inside the vm
184
187
  //
185
- this.vm.setProp(this.vm.global, 'cfgRenderCtx', configCtx);
188
+ this.vm.setProp(this.vm.global, "cfgRenderCtx", configCtx);
186
189
  });
187
190
  }
188
191
  }
@@ -209,16 +212,19 @@ class ErrorRepository {
209
212
  /** Returns the original error that was stored by parsing uuid of mimicrated error. */
210
213
  getOriginal(quickJSError) {
211
214
  if (!(quickJSError instanceof errors.QuickJSUnwrapError)) {
212
- console.warn('ErrorRepo: quickJSError is not a QuickJSUnwrapError', stringifyWithResourceId(quickJSError));
215
+ console.warn("ErrorRepo: quickJSError is not a QuickJSUnwrapError", stringifyWithResourceId(quickJSError));
213
216
  return quickJSError;
214
217
  }
215
218
  const cause = quickJSError.cause;
216
- if (!(typeof cause === 'object' && cause !== null && ('name' in cause) && typeof cause.name === 'string')) {
217
- console.warn('ErrorRepo: quickJSError.cause is not an Error (can be stack limit exceeded)', stringifyWithResourceId(quickJSError));
219
+ if (!(typeof cause === "object" &&
220
+ cause !== null &&
221
+ "name" in cause &&
222
+ typeof cause.name === "string")) {
223
+ console.warn("ErrorRepo: quickJSError.cause is not an Error (can be stack limit exceeded)", stringifyWithResourceId(quickJSError));
218
224
  return quickJSError;
219
225
  }
220
226
  const causeName = cause.name;
221
- const errorId = causeName.slice(causeName.indexOf('/uuid:') + '/uuid:'.length);
227
+ const errorId = causeName.slice(causeName.indexOf("/uuid:") + "/uuid:".length);
222
228
  if (!errorId) {
223
229
  throw new Error(`ErrorRepo: quickJSError.cause.name does not contain errorId: ${causeName}, ${stringifyWithResourceId(quickJSError)}`);
224
230
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sources":["../../src/js_render/context.ts"],"sourcesContent":["import type { ComputableCtx } from '@milaboratories/computable';\nimport type {\n BlockCodeKnownFeatureFlags } from '@platforma-sdk/model';\nimport {\n JsRenderInternal,\n} from '@platforma-sdk/model';\nimport { notEmpty } from '@milaboratories/ts-helpers';\nimport { randomUUID } from 'node:crypto';\nimport type { QuickJSContext, QuickJSHandle } from 'quickjs-emscripten';\nimport { Scope, errors } from 'quickjs-emscripten';\nimport type { BlockContextAny } from '../middle_layer/block_ctx';\nimport type { MiddleLayerEnvironment } from '../middle_layer/middle_layer';\nimport { stringifyWithResourceId } from '@milaboratories/pl-client';\nimport { PlQuickJSError } from '@milaboratories/pl-errors';\nimport { ComputableContextHelper } from './computable_context';\n\nexport type DeadlineSettings = {\n currentExecutionTarget: string;\n deadline: number;\n};\n\n/**\n * Communicates a deadline to the quickjs runtime, that if passed, will interrupt the execution.\n * Undefined can be used to reset the deadline.\n * */\nexport type DeadlineSetter = (settings: DeadlineSettings | undefined) => void;\n\nfunction isArrayBufferOrView(obj: unknown): obj is ArrayBufferLike {\n return obj instanceof ArrayBuffer || ArrayBuffer.isView(obj);\n}\n\n/**\n * Contains references to objects needed to execute lambda within computable,\n * providing access to:\n * - block context\n * - computable context\n * - middle layer environment\n * */\nexport type ComputableEnv = {\n readonly blockCtx: BlockContextAny;\n readonly mlEnv: MiddleLayerEnvironment;\n computableCtx: ComputableCtx;\n};\n\nexport class JsExecutionContext {\n private readonly callbackRegistry: QuickJSHandle;\n private readonly fnJSONStringify: QuickJSHandle;\n private readonly fnJSONParse: QuickJSHandle;\n\n public readonly errorRepo = new ErrorRepository();\n\n public readonly computableHelper: ComputableContextHelper | undefined;\n\n /**\n * Creates a new JS execution context.\n *\n * @param scope - QuickJS scope for memory management\n * @param vm - QuickJS VM context\n * @param deadlineSetter - Function to set execution deadline\n * @param featureFlags - Block feature flags\n * @param computableEnv - Optional reactive computable environment (for outputs, inputsValid, etc.)\n */\n constructor(\n public readonly scope: Scope,\n public readonly vm: QuickJSContext,\n private readonly deadlineSetter: DeadlineSetter,\n featureFlags: BlockCodeKnownFeatureFlags | undefined,\n computableEnv?: ComputableEnv,\n ) {\n this.callbackRegistry = this.scope.manage(this.vm.newObject());\n\n this.fnJSONStringify = scope.manage(\n vm.getProp(vm.global, 'JSON').consume((json) => vm.getProp(json, 'stringify')),\n );\n if (vm.typeof(this.fnJSONStringify) !== 'function')\n throw new Error(`JSON.stringify() not found.`);\n\n this.fnJSONParse = scope.manage(\n vm.getProp(vm.global, 'JSON').consume((json) => vm.getProp(json, 'parse')),\n );\n if (vm.typeof(this.fnJSONParse) !== 'function') throw new Error(`JSON.parse() not found.`);\n\n if (computableEnv !== undefined)\n this.computableHelper = new ComputableContextHelper(this, computableEnv.blockCtx, computableEnv.mlEnv, featureFlags, computableEnv.computableCtx);\n\n this.injectCtx();\n }\n\n public resetComputableCtx() {\n notEmpty(this.computableHelper, 'Computable context helper is not initialized').resetComputableCtx();\n }\n\n private static cleanErrorContext(error: unknown): void {\n if (typeof error === 'object' && error !== null && 'context' in error) delete error['context'];\n }\n\n // private static cleanError(error: unknown): unknown {\n // if (error instanceof errors.QuickJSUnwrapError) {\n // const { cause, context: _, name, message, stack, ...rest } = error;\n // const clean = new errors.QuickJSUnwrapError(cause);\n // Object.assign(clean, { ...rest, name, message, stack });\n // return clean;\n // }\n // return error;\n // }\n\n public evaluateBundle(code: string) {\n try {\n this.deadlineSetter({ currentExecutionTarget: 'evaluateBundle', deadline: Date.now() + 10000 });\n this.vm.unwrapResult(this.vm.evalCode(code, 'bundle.js', { type: 'global' })).dispose();\n } catch (err: unknown) {\n JsExecutionContext.cleanErrorContext(err);\n throw err;\n } finally {\n this.deadlineSetter(undefined);\n }\n }\n\n public runCallback(cbName: string, ...args: unknown[]): QuickJSHandle {\n try {\n this.deadlineSetter({ currentExecutionTarget: cbName, deadline: Date.now() + 10000 });\n return Scope.withScope((localScope) => {\n const targetCallback = localScope.manage(this.vm.getProp(this.callbackRegistry, cbName));\n\n if (this.vm.typeof(targetCallback) !== 'function')\n throw new Error(`No such callback: ${cbName}`);\n\n return this.scope.manage(\n this.vm.unwrapResult(\n this.vm.callFunction(\n targetCallback,\n this.vm.undefined,\n ...args.map((arg) => this.exportObjectUniversal(arg, localScope)),\n ),\n ),\n );\n });\n } catch (err: unknown) {\n JsExecutionContext.cleanErrorContext(err);\n const original = this.errorRepo.getOriginal(err);\n throw original;\n } finally {\n this.deadlineSetter(undefined);\n }\n }\n\n //\n // QuickJS Helpers\n //\n\n public exportSingleValue(\n obj: boolean | number | string | null | ArrayBuffer | undefined,\n scope: Scope | undefined,\n ): QuickJSHandle {\n const result = this.tryExportSingleValue(obj, scope);\n if (result === undefined) {\n throw new Error(`Can't export value: ${obj === undefined ? 'undefined' : JSON.stringify(obj)}`);\n }\n return result;\n }\n\n public tryExportSingleValue(obj: unknown, scope: Scope | undefined): QuickJSHandle | undefined {\n let handle: QuickJSHandle;\n let manage = false;\n switch (typeof obj) {\n case 'string':\n handle = this.vm.newString(obj);\n manage = true;\n break;\n case 'number':\n handle = this.vm.newNumber(obj);\n manage = true;\n break;\n case 'undefined':\n handle = this.vm.undefined;\n break;\n case 'boolean':\n handle = obj ? this.vm.true : this.vm.false;\n break;\n default:\n if (obj === null) {\n handle = this.vm.null;\n break;\n }\n if (isArrayBufferOrView(obj)) {\n handle = this.vm.newArrayBuffer(obj);\n manage = true;\n break;\n }\n return undefined;\n }\n return manage && scope != undefined ? scope.manage(handle) : handle;\n }\n\n public exportObjectUniversal(obj: unknown, scope: Scope | undefined): QuickJSHandle {\n const simpleHandle = this.tryExportSingleValue(obj, scope);\n if (simpleHandle !== undefined) return simpleHandle;\n return this.exportObjectViaJson(obj, scope);\n }\n\n public exportObjectViaJson(obj: unknown, scope: Scope | undefined): QuickJSHandle {\n const result = this.vm\n .newString(JSON.stringify(obj))\n .consume((json) =>\n this.vm.unwrapResult(this.vm.callFunction(this.fnJSONParse, this.vm.undefined, json)),\n );\n return scope !== undefined ? scope.manage(result) : result;\n }\n\n public importObjectUniversal(handle: QuickJSHandle | undefined): unknown {\n if (handle === undefined) return undefined;\n switch (this.vm.typeof(handle)) {\n case 'undefined':\n return undefined;\n case 'boolean':\n case 'number':\n case 'string':\n return this.vm.dump(handle);\n default:\n return this.importObjectViaJson(handle);\n }\n }\n\n public importObjectViaJson(handle: QuickJSHandle): unknown {\n const text = this.vm\n .unwrapResult(this.vm.callFunction(this.fnJSONStringify, this.vm.undefined, handle))\n .consume((strHandle) => this.vm.getString(strHandle));\n if (text === 'undefined')\n // special case with futures\n return undefined;\n return JSON.parse(text);\n }\n\n private injectCtx() {\n Scope.withScope((localScope) => {\n const configCtx = localScope.manage(this.vm.newObject());\n\n //\n // Core props\n //\n\n this.vm.setProp(configCtx, 'callbackRegistry', this.callbackRegistry);\n this.vm.setProp(\n configCtx,\n 'featureFlags',\n this.exportObjectUniversal(JsRenderInternal.GlobalCfgRenderCtxFeatureFlags, localScope),\n );\n\n // Inject context values from computableHelper (reactive context for outputs, inputsValid, etc.)\n if (this.computableHelper !== undefined) {\n this.computableHelper.injectCtx(configCtx);\n }\n\n //\n // Creating global variable inside the vm\n //\n\n this.vm.setProp(this.vm.global, 'cfgRenderCtx', configCtx);\n });\n }\n}\n\n/** Holds errors that happened in the host code (like in middle-layer's drivers)\n * and then throws it where the error from quick JS is needed.\n * QuickJS couldn't throw custom errors, so we store them here, and rethrow them when we exit QuickJS side. */\nexport class ErrorRepository {\n private readonly errorIdToError = new Map<string, unknown>();\n\n /** Sets the error to the repository and returns a mimicrated error that also has uuid key of the original error. */\n public setAndRecreateForQuickJS(error: unknown): {\n name: string;\n message: string;\n } {\n const errorId = randomUUID();\n this.errorIdToError.set(errorId, error);\n\n if (error instanceof Error) {\n return {\n name: `${error.name}/uuid:${errorId}`,\n message: error.message,\n };\n }\n\n return {\n name: `UnknownErrorQuickJS/uuid:${errorId}`,\n message: `${error as any}`,\n };\n }\n\n /** Returns the original error that was stored by parsing uuid of mimicrated error. */\n public getOriginal(quickJSError: unknown): unknown {\n if (!(quickJSError instanceof errors.QuickJSUnwrapError)) {\n console.warn('ErrorRepo: quickJSError is not a QuickJSUnwrapError', stringifyWithResourceId(quickJSError));\n return quickJSError;\n }\n\n const cause = quickJSError.cause;\n if (!(typeof cause === 'object' && cause !== null && ('name' in cause) && typeof cause.name === 'string')) {\n console.warn('ErrorRepo: quickJSError.cause is not an Error (can be stack limit exceeded)', stringifyWithResourceId(quickJSError));\n return quickJSError;\n }\n\n const causeName = cause.name;\n const errorId = causeName.slice(causeName.indexOf('/uuid:') + '/uuid:'.length);\n if (!errorId) {\n throw new Error(`ErrorRepo: quickJSError.cause.name does not contain errorId: ${causeName}, ${stringifyWithResourceId(quickJSError)}`);\n }\n\n const error = this.errorIdToError.get(errorId);\n if (error === undefined) {\n throw new Error(`ErrorRepo: errorId not found: ${errorId}, ${stringifyWithResourceId(quickJSError)}`);\n }\n\n return new PlQuickJSError(quickJSError, error as Error);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sources":["../../src/js_render/context.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { BlockCodeKnownFeatureFlags } from \"@platforma-sdk/model\";\nimport { JsRenderInternal } from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { randomUUID } from \"node:crypto\";\nimport type { QuickJSContext, QuickJSHandle } from \"quickjs-emscripten\";\nimport { Scope, errors } from \"quickjs-emscripten\";\nimport type { BlockContextAny } from \"../middle_layer/block_ctx\";\nimport type { MiddleLayerEnvironment } from \"../middle_layer/middle_layer\";\nimport { stringifyWithResourceId } from \"@milaboratories/pl-client\";\nimport { PlQuickJSError } from \"@milaboratories/pl-errors\";\nimport { ComputableContextHelper } from \"./computable_context\";\n\nexport type DeadlineSettings = {\n currentExecutionTarget: string;\n deadline: number;\n};\n\n/**\n * Communicates a deadline to the quickjs runtime, that if passed, will interrupt the execution.\n * Undefined can be used to reset the deadline.\n * */\nexport type DeadlineSetter = (settings: DeadlineSettings | undefined) => void;\n\nfunction isArrayBufferOrView(obj: unknown): obj is ArrayBufferLike {\n return obj instanceof ArrayBuffer || ArrayBuffer.isView(obj);\n}\n\n/**\n * Contains references to objects needed to execute lambda within computable,\n * providing access to:\n * - block context\n * - computable context\n * - middle layer environment\n * */\nexport type ComputableEnv = {\n readonly blockCtx: BlockContextAny;\n readonly mlEnv: MiddleLayerEnvironment;\n computableCtx: ComputableCtx;\n};\n\nexport class JsExecutionContext {\n private readonly callbackRegistry: QuickJSHandle;\n private readonly fnJSONStringify: QuickJSHandle;\n private readonly fnJSONParse: QuickJSHandle;\n\n public readonly errorRepo = new ErrorRepository();\n\n public readonly computableHelper: ComputableContextHelper | undefined;\n\n /**\n * Creates a new JS execution context.\n *\n * @param scope - QuickJS scope for memory management\n * @param vm - QuickJS VM context\n * @param deadlineSetter - Function to set execution deadline\n * @param featureFlags - Block feature flags\n * @param computableEnv - Optional reactive computable environment (for outputs, inputsValid, etc.)\n */\n constructor(\n public readonly scope: Scope,\n public readonly vm: QuickJSContext,\n private readonly deadlineSetter: DeadlineSetter,\n featureFlags: BlockCodeKnownFeatureFlags | undefined,\n computableEnv?: ComputableEnv,\n ) {\n this.callbackRegistry = this.scope.manage(this.vm.newObject());\n\n this.fnJSONStringify = scope.manage(\n vm.getProp(vm.global, \"JSON\").consume((json) => vm.getProp(json, \"stringify\")),\n );\n if (vm.typeof(this.fnJSONStringify) !== \"function\")\n throw new Error(`JSON.stringify() not found.`);\n\n this.fnJSONParse = scope.manage(\n vm.getProp(vm.global, \"JSON\").consume((json) => vm.getProp(json, \"parse\")),\n );\n if (vm.typeof(this.fnJSONParse) !== \"function\") throw new Error(`JSON.parse() not found.`);\n\n if (computableEnv !== undefined)\n this.computableHelper = new ComputableContextHelper(\n this,\n computableEnv.blockCtx,\n computableEnv.mlEnv,\n featureFlags,\n computableEnv.computableCtx,\n );\n\n this.injectCtx();\n }\n\n public resetComputableCtx() {\n notEmpty(\n this.computableHelper,\n \"Computable context helper is not initialized\",\n ).resetComputableCtx();\n }\n\n private static cleanErrorContext(error: unknown): void {\n if (typeof error === \"object\" && error !== null && \"context\" in error) delete error[\"context\"];\n }\n\n // private static cleanError(error: unknown): unknown {\n // if (error instanceof errors.QuickJSUnwrapError) {\n // const { cause, context: _, name, message, stack, ...rest } = error;\n // const clean = new errors.QuickJSUnwrapError(cause);\n // Object.assign(clean, { ...rest, name, message, stack });\n // return clean;\n // }\n // return error;\n // }\n\n public evaluateBundle(code: string) {\n try {\n this.deadlineSetter({\n currentExecutionTarget: \"evaluateBundle\",\n deadline: Date.now() + 10000,\n });\n this.vm.unwrapResult(this.vm.evalCode(code, \"bundle.js\", { type: \"global\" })).dispose();\n } catch (err: unknown) {\n JsExecutionContext.cleanErrorContext(err);\n throw err;\n } finally {\n this.deadlineSetter(undefined);\n }\n }\n\n public runCallback(cbName: string, ...args: unknown[]): QuickJSHandle {\n try {\n this.deadlineSetter({ currentExecutionTarget: cbName, deadline: Date.now() + 10000 });\n return Scope.withScope((localScope) => {\n const targetCallback = localScope.manage(this.vm.getProp(this.callbackRegistry, cbName));\n\n if (this.vm.typeof(targetCallback) !== \"function\")\n throw new Error(`No such callback: ${cbName}`);\n\n return this.scope.manage(\n this.vm.unwrapResult(\n this.vm.callFunction(\n targetCallback,\n this.vm.undefined,\n ...args.map((arg) => this.exportObjectUniversal(arg, localScope)),\n ),\n ),\n );\n });\n } catch (err: unknown) {\n JsExecutionContext.cleanErrorContext(err);\n const original = this.errorRepo.getOriginal(err);\n throw original;\n } finally {\n this.deadlineSetter(undefined);\n }\n }\n\n //\n // QuickJS Helpers\n //\n\n public exportSingleValue(\n obj: boolean | number | string | null | ArrayBuffer | undefined,\n scope: Scope | undefined,\n ): QuickJSHandle {\n const result = this.tryExportSingleValue(obj, scope);\n if (result === undefined) {\n throw new Error(\n `Can't export value: ${obj === undefined ? \"undefined\" : JSON.stringify(obj)}`,\n );\n }\n return result;\n }\n\n public tryExportSingleValue(obj: unknown, scope: Scope | undefined): QuickJSHandle | undefined {\n let handle: QuickJSHandle;\n let manage = false;\n switch (typeof obj) {\n case \"string\":\n handle = this.vm.newString(obj);\n manage = true;\n break;\n case \"number\":\n handle = this.vm.newNumber(obj);\n manage = true;\n break;\n case \"undefined\":\n handle = this.vm.undefined;\n break;\n case \"boolean\":\n handle = obj ? this.vm.true : this.vm.false;\n break;\n default:\n if (obj === null) {\n handle = this.vm.null;\n break;\n }\n if (isArrayBufferOrView(obj)) {\n handle = this.vm.newArrayBuffer(obj);\n manage = true;\n break;\n }\n return undefined;\n }\n return manage && scope != undefined ? scope.manage(handle) : handle;\n }\n\n public exportObjectUniversal(obj: unknown, scope: Scope | undefined): QuickJSHandle {\n const simpleHandle = this.tryExportSingleValue(obj, scope);\n if (simpleHandle !== undefined) return simpleHandle;\n return this.exportObjectViaJson(obj, scope);\n }\n\n public exportObjectViaJson(obj: unknown, scope: Scope | undefined): QuickJSHandle {\n const result = this.vm\n .newString(JSON.stringify(obj))\n .consume((json) =>\n this.vm.unwrapResult(this.vm.callFunction(this.fnJSONParse, this.vm.undefined, json)),\n );\n return scope !== undefined ? scope.manage(result) : result;\n }\n\n public importObjectUniversal(handle: QuickJSHandle | undefined): unknown {\n if (handle === undefined) return undefined;\n switch (this.vm.typeof(handle)) {\n case \"undefined\":\n return undefined;\n case \"boolean\":\n case \"number\":\n case \"string\":\n return this.vm.dump(handle);\n default:\n return this.importObjectViaJson(handle);\n }\n }\n\n public importObjectViaJson(handle: QuickJSHandle): unknown {\n const text = this.vm\n .unwrapResult(this.vm.callFunction(this.fnJSONStringify, this.vm.undefined, handle))\n .consume((strHandle) => this.vm.getString(strHandle));\n if (text === \"undefined\")\n // special case with futures\n return undefined;\n return JSON.parse(text);\n }\n\n private injectCtx() {\n Scope.withScope((localScope) => {\n const configCtx = localScope.manage(this.vm.newObject());\n\n //\n // Core props\n //\n\n this.vm.setProp(configCtx, \"callbackRegistry\", this.callbackRegistry);\n this.vm.setProp(\n configCtx,\n \"featureFlags\",\n this.exportObjectUniversal(JsRenderInternal.GlobalCfgRenderCtxFeatureFlags, localScope),\n );\n\n // Inject context values from computableHelper (reactive context for outputs, inputsValid, etc.)\n if (this.computableHelper !== undefined) {\n this.computableHelper.injectCtx(configCtx);\n }\n\n //\n // Creating global variable inside the vm\n //\n\n this.vm.setProp(this.vm.global, \"cfgRenderCtx\", configCtx);\n });\n }\n}\n\n/** Holds errors that happened in the host code (like in middle-layer's drivers)\n * and then throws it where the error from quick JS is needed.\n * QuickJS couldn't throw custom errors, so we store them here, and rethrow them when we exit QuickJS side. */\nexport class ErrorRepository {\n private readonly errorIdToError = new Map<string, unknown>();\n\n /** Sets the error to the repository and returns a mimicrated error that also has uuid key of the original error. */\n public setAndRecreateForQuickJS(error: unknown): {\n name: string;\n message: string;\n } {\n const errorId = randomUUID();\n this.errorIdToError.set(errorId, error);\n\n if (error instanceof Error) {\n return {\n name: `${error.name}/uuid:${errorId}`,\n message: error.message,\n };\n }\n\n return {\n name: `UnknownErrorQuickJS/uuid:${errorId}`,\n message: `${error as any}`,\n };\n }\n\n /** Returns the original error that was stored by parsing uuid of mimicrated error. */\n public getOriginal(quickJSError: unknown): unknown {\n if (!(quickJSError instanceof errors.QuickJSUnwrapError)) {\n console.warn(\n \"ErrorRepo: quickJSError is not a QuickJSUnwrapError\",\n stringifyWithResourceId(quickJSError),\n );\n return quickJSError;\n }\n\n const cause = quickJSError.cause;\n if (\n !(\n typeof cause === \"object\" &&\n cause !== null &&\n \"name\" in cause &&\n typeof cause.name === \"string\"\n )\n ) {\n console.warn(\n \"ErrorRepo: quickJSError.cause is not an Error (can be stack limit exceeded)\",\n stringifyWithResourceId(quickJSError),\n );\n return quickJSError;\n }\n\n const causeName = cause.name;\n const errorId = causeName.slice(causeName.indexOf(\"/uuid:\") + \"/uuid:\".length);\n if (!errorId) {\n throw new Error(\n `ErrorRepo: quickJSError.cause.name does not contain errorId: ${causeName}, ${stringifyWithResourceId(quickJSError)}`,\n );\n }\n\n const error = this.errorIdToError.get(errorId);\n if (error === undefined) {\n throw new Error(\n `ErrorRepo: errorId not found: ${errorId}, ${stringifyWithResourceId(quickJSError)}`,\n );\n }\n\n return new PlQuickJSError(quickJSError, error as Error);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -6,11 +6,11 @@ var context = require('./context.cjs');
6
6
  var index = require('../debug/index.cjs');
7
7
 
8
8
  function logOutputStatus(handle, renderedResult, stable, recalculationCounter, unstableMarker) {
9
- if (index.getDebugFlags().logOutputStatus && (index.getDebugFlags().logOutputStatus === 'any' || !stable)) {
9
+ if (index.getDebugFlags().logOutputStatus && (index.getDebugFlags().logOutputStatus === "any" || !stable)) {
10
10
  if (stable)
11
- console.log(`Stable output ${handle} calculated ${renderedResult !== undefined ? 'defined' : 'undefined'}; (#${recalculationCounter})`);
11
+ console.log(`Stable output ${handle} calculated ${renderedResult !== undefined ? "defined" : "undefined"}; (#${recalculationCounter})`);
12
12
  else
13
- console.log(`Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? 'defined' : 'undefined'} (#${recalculationCounter})`);
13
+ console.log(`Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? "defined" : "undefined"} (#${recalculationCounter})`);
14
14
  }
15
15
  }
16
16
  /**
@@ -66,7 +66,7 @@ function computableFromRF(env, ctx, fh, codeWithInfo, configKey, ops = {}) {
66
66
  const key = `${ctx.blockId}#lambda#${configKey}#${fh.handle}`;
67
67
  ops = { ...ops, key };
68
68
  if (ops.mode === undefined && fh.retentive === true)
69
- ops.mode = 'StableOnlyRetentive';
69
+ ops.mode = "StableOnlyRetentive";
70
70
  return computable.Computable.makeRaw((cCtx) => {
71
71
  const { code, featureFlags } = codeWithInfo;
72
72
  if (index.getDebugFlags().logOutputRecalculations)
@@ -92,7 +92,9 @@ function computableFromRF(env, ctx, fh, codeWithInfo, configKey, ops = {}) {
92
92
  return false;
93
93
  });
94
94
  const vm = scope.manage(runtime.newContext());
95
- const rCtx = new context.JsExecutionContext(scope, vm, (s) => { deadlineSettings = s; }, featureFlags, { computableCtx: cCtx, blockCtx: ctx, mlEnv: env });
95
+ const rCtx = new context.JsExecutionContext(scope, vm, (s) => {
96
+ deadlineSettings = s;
97
+ }, featureFlags, { computableCtx: cCtx, blockCtx: ctx, mlEnv: env });
96
98
  rCtx.evaluateBundle(code.content);
97
99
  const result = rCtx.runCallback(fh.handle);
98
100
  rCtx.resetComputableCtx();
@@ -147,7 +149,9 @@ function executeSingleLambda(quickJs, fh, codeWithInfo, ...args) {
147
149
  return false;
148
150
  });
149
151
  const vm = scope.manage(runtime.newContext());
150
- const rCtx = new context.JsExecutionContext(scope, vm, (s) => { deadlineSettings = s; }, featureFlags);
152
+ const rCtx = new context.JsExecutionContext(scope, vm, (s) => {
153
+ deadlineSettings = s;
154
+ }, featureFlags);
151
155
  // Initializing the model
152
156
  rCtx.evaluateBundle(code.content);
153
157
  // Running the lambda with arguments (e.g., state for args(), args for enrichmentTargets())
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/js_render/index.ts"],"sourcesContent":["import type { MiddleLayerEnvironment } from '../middle_layer/middle_layer';\nimport type { BlockCodeWithInfo, ConfigRenderLambda } from '@platforma-sdk/model';\nimport type { ComputableRenderingOps } from '@milaboratories/computable';\nimport { Computable } from '@milaboratories/computable';\nimport type { QuickJSWASMModule } from 'quickjs-emscripten';\nimport { Scope } from 'quickjs-emscripten';\nimport type { DeadlineSettings } from './context';\nimport { JsExecutionContext } from './context';\nimport type { BlockContextAny } from '../middle_layer/block_ctx';\nimport { getDebugFlags } from '../debug';\n\nfunction logOutputStatus(handle: string, renderedResult: unknown, stable: boolean, recalculationCounter: number, unstableMarker?: string) {\n if (getDebugFlags().logOutputStatus && (getDebugFlags().logOutputStatus === 'any' || !stable)) {\n if (stable)\n console.log(`Stable output ${handle} calculated ${renderedResult !== undefined ? 'defined' : 'undefined'}; (#${recalculationCounter})`);\n else\n console.log(`Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? 'defined' : 'undefined'} (#${recalculationCounter})`);\n }\n}\n\n/**\n * Creates a Computable that executes a render function (`fh`) from a block's code in a QuickJS virtual machine.\n * This function handles both synchronous and asynchronous execution patterns of the sandboxed JS code.\n *\n * The overall data flow is as follows:\n * 1. A QuickJS VM is initialized.\n * 2. A `JsExecutionContext` is created to bridge the host (TypeScript) and guest (QuickJS) environments. It injects a\n * context object (`cfgRenderCtx`) into the VM, providing helper methods for the sandboxed code to interact with the\n * platform (e.g., to request data).\n * 3. The block's Javascript bundle is evaluated in the VM.\n * 4. The specified render function (`fh.handle`) is executed.\n *\n * Two execution paths are possible depending on the behavior of the render function:\n *\n * ### Synchronous Path\n * If the render function computes its result without requesting any external data requiring asynchronous calculations,\n * it executes synchronously.\n * - The `computablesToResolve` map in `JsExecutionContext` remains empty.\n * - The function returns an object with an `ir` field holding the result (`{ ir: importedResult }`).\n * Since `postprocessValue` is not specified, `ir` is treated as the final resolved value of the Computable.\n * - The QuickJS VM is disposed of immediately as it's no longer needed.\n *\n * ### Asynchronous Path (with `postprocessValue`)\n * If the render function needs external data requiring asynchronous calculations (e.g., fetching a file), it calls\n * one of the injected helper methods. These methods don't return data directly. Instead, they:\n * a. Create a new `Computable` for the data request (e.g., to fetch a blob).\n * b. Register this new `Computable` in the `computablesToResolve` map.\n * c. Return a handle (string) to the sandboxed code.\n *\n * In this case:\n * - The initial execution of the render function returns a scaffold of the final result, which depends on the pending\n * computables.\n * - The `computablesToResolve` map is passed as the `ir` (initial result) to `Computable.makeRaw`.\n * - The `postprocessValue` function is provided to handle the results once the computables are resolved.\n * - The QuickJS VM is kept alive (`keepVmAlive = true`) because its state is needed in `postprocessValue`.\n * - Once the `computable` framework resolves all dependencies, it calls `postprocessValue` with the resolved data.\n * - `postprocessValue` feeds the resolved data back into the VM, allowing the sandboxed code to compute the final\n * result.\n * - The VM is eventually disposed of when the host Computable is destroyed.\n *\n * @param env The middle layer environment.\n * @param ctx The block context.\n * @param fh The config render lambda to execute.\n * @param codeWithInfo The block's code and feature flags.\n * @param configKey A key for the configuration, used for cache busting.\n * @param ops Options for the computable.\n * @returns A `Computable` that will resolve to the result of the lambda execution.\n */\nexport function computableFromRF(\n env: MiddleLayerEnvironment,\n ctx: BlockContextAny,\n fh: ConfigRenderLambda,\n codeWithInfo: BlockCodeWithInfo,\n configKey: string,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n // adding configKey to reload all outputs on block-pack update\n const key = `${ctx.blockId}#lambda#${configKey}#${fh.handle}`;\n ops = { ...ops, key };\n if (ops.mode === undefined && fh.retentive === true) ops.mode = 'StableOnlyRetentive';\n return Computable.makeRaw((cCtx) => {\n const { code, featureFlags } = codeWithInfo;\n\n if (getDebugFlags().logOutputRecalculations)\n console.log(`Block lambda recalculation : ${key} (${cCtx.changeSourceMarker}; ${cCtx.bodyInvocations} invocations)`);\n\n const scope = new Scope();\n let keepVmAlive = false;\n cCtx.addOnDestroy(() => {\n // If keepVmAlive is false, the scope will be disposed by the finally block,\n // no need to dispose it here.\n if (keepVmAlive) scope.dispose();\n });\n\n try {\n const runtime = scope.manage(env.quickJs.newRuntime());\n runtime.setMemoryLimit(1024 * 1024 * 8);\n runtime.setMaxStackSize(1024 * 320);\n\n let deadlineSettings: DeadlineSettings | undefined;\n runtime.setInterruptHandler(() => {\n if (deadlineSettings === undefined) return false;\n if (Date.now() > deadlineSettings.deadline) return true;\n return false;\n });\n const vm = scope.manage(runtime.newContext());\n const rCtx = new JsExecutionContext(scope, vm,\n (s) => { deadlineSettings = s; },\n featureFlags,\n { computableCtx: cCtx, blockCtx: ctx, mlEnv: env });\n\n rCtx.evaluateBundle(code.content);\n const result = rCtx.runCallback(fh.handle);\n\n rCtx.resetComputableCtx();\n\n const toBeResolved = rCtx.computableHelper!.computablesToResolve;\n\n if (Object.keys(toBeResolved).length === 0) {\n const importedResult = rCtx.importObjectUniversal(result);\n logOutputStatus(fh.handle, importedResult, cCtx.unstableMarker === undefined, -1, cCtx.unstableMarker);\n return { ir: importedResult };\n }\n\n let recalculationCounter = 0;\n if (getDebugFlags().logOutputStatus)\n console.log(`Output ${fh.handle} scaffold calculated (not all computables resolved yet).`);\n keepVmAlive = true;\n\n return {\n ir: toBeResolved,\n postprocessValue: (resolved: Record<string, unknown>, { unstableMarker, stable }) => {\n // resolving futures\n for (const [handle, value] of Object.entries(resolved)) rCtx.runCallback(handle, value);\n\n // rendering result\n const renderedResult = rCtx.importObjectUniversal(result);\n\n // logging\n recalculationCounter++;\n logOutputStatus(fh.handle, renderedResult, stable, recalculationCounter, unstableMarker);\n\n return renderedResult;\n },\n };\n } catch (e) {\n keepVmAlive = false;\n throw e;\n } finally {\n if (!keepVmAlive) scope.dispose();\n }\n }, ops);\n}\n\nexport function executeSingleLambda(\n quickJs: QuickJSWASMModule,\n fh: ConfigRenderLambda,\n codeWithInfo: BlockCodeWithInfo,\n ...args: unknown[]\n): unknown {\n const { code, featureFlags } = codeWithInfo;\n const scope = new Scope();\n try {\n const runtime = scope.manage(quickJs.newRuntime());\n runtime.setMemoryLimit(1024 * 1024 * 8);\n runtime.setMaxStackSize(1024 * 320);\n\n let deadlineSettings: DeadlineSettings | undefined;\n runtime.setInterruptHandler(() => {\n if (deadlineSettings === undefined) return false;\n if (Date.now() > deadlineSettings.deadline) return true;\n return false;\n });\n const vm = scope.manage(runtime.newContext());\n const rCtx = new JsExecutionContext(scope, vm,\n (s) => { deadlineSettings = s; },\n featureFlags,\n );\n\n // Initializing the model\n rCtx.evaluateBundle(code.content);\n\n // Running the lambda with arguments (e.g., state for args(), args for enrichmentTargets())\n return rCtx.importObjectUniversal(rCtx.runCallback(fh.handle, ...args));\n } finally {\n scope.dispose();\n }\n}\n"],"names":["getDebugFlags","Computable","Scope","JsExecutionContext"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/js_render/index.ts"],"sourcesContent":["import type { MiddleLayerEnvironment } from \"../middle_layer/middle_layer\";\nimport type { BlockCodeWithInfo, ConfigRenderLambda } from \"@platforma-sdk/model\";\nimport type { ComputableRenderingOps } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { QuickJSWASMModule } from \"quickjs-emscripten\";\nimport { Scope } from \"quickjs-emscripten\";\nimport type { DeadlineSettings } from \"./context\";\nimport { JsExecutionContext } from \"./context\";\nimport type { BlockContextAny } from \"../middle_layer/block_ctx\";\nimport { getDebugFlags } from \"../debug\";\n\nfunction logOutputStatus(\n handle: string,\n renderedResult: unknown,\n stable: boolean,\n recalculationCounter: number,\n unstableMarker?: string,\n) {\n if (getDebugFlags().logOutputStatus && (getDebugFlags().logOutputStatus === \"any\" || !stable)) {\n if (stable)\n console.log(\n `Stable output ${handle} calculated ${renderedResult !== undefined ? \"defined\" : \"undefined\"}; (#${recalculationCounter})`,\n );\n else\n console.log(\n `Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? \"defined\" : \"undefined\"} (#${recalculationCounter})`,\n );\n }\n}\n\n/**\n * Creates a Computable that executes a render function (`fh`) from a block's code in a QuickJS virtual machine.\n * This function handles both synchronous and asynchronous execution patterns of the sandboxed JS code.\n *\n * The overall data flow is as follows:\n * 1. A QuickJS VM is initialized.\n * 2. A `JsExecutionContext` is created to bridge the host (TypeScript) and guest (QuickJS) environments. It injects a\n * context object (`cfgRenderCtx`) into the VM, providing helper methods for the sandboxed code to interact with the\n * platform (e.g., to request data).\n * 3. The block's Javascript bundle is evaluated in the VM.\n * 4. The specified render function (`fh.handle`) is executed.\n *\n * Two execution paths are possible depending on the behavior of the render function:\n *\n * ### Synchronous Path\n * If the render function computes its result without requesting any external data requiring asynchronous calculations,\n * it executes synchronously.\n * - The `computablesToResolve` map in `JsExecutionContext` remains empty.\n * - The function returns an object with an `ir` field holding the result (`{ ir: importedResult }`).\n * Since `postprocessValue` is not specified, `ir` is treated as the final resolved value of the Computable.\n * - The QuickJS VM is disposed of immediately as it's no longer needed.\n *\n * ### Asynchronous Path (with `postprocessValue`)\n * If the render function needs external data requiring asynchronous calculations (e.g., fetching a file), it calls\n * one of the injected helper methods. These methods don't return data directly. Instead, they:\n * a. Create a new `Computable` for the data request (e.g., to fetch a blob).\n * b. Register this new `Computable` in the `computablesToResolve` map.\n * c. Return a handle (string) to the sandboxed code.\n *\n * In this case:\n * - The initial execution of the render function returns a scaffold of the final result, which depends on the pending\n * computables.\n * - The `computablesToResolve` map is passed as the `ir` (initial result) to `Computable.makeRaw`.\n * - The `postprocessValue` function is provided to handle the results once the computables are resolved.\n * - The QuickJS VM is kept alive (`keepVmAlive = true`) because its state is needed in `postprocessValue`.\n * - Once the `computable` framework resolves all dependencies, it calls `postprocessValue` with the resolved data.\n * - `postprocessValue` feeds the resolved data back into the VM, allowing the sandboxed code to compute the final\n * result.\n * - The VM is eventually disposed of when the host Computable is destroyed.\n *\n * @param env The middle layer environment.\n * @param ctx The block context.\n * @param fh The config render lambda to execute.\n * @param codeWithInfo The block's code and feature flags.\n * @param configKey A key for the configuration, used for cache busting.\n * @param ops Options for the computable.\n * @returns A `Computable` that will resolve to the result of the lambda execution.\n */\nexport function computableFromRF(\n env: MiddleLayerEnvironment,\n ctx: BlockContextAny,\n fh: ConfigRenderLambda,\n codeWithInfo: BlockCodeWithInfo,\n configKey: string,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n // adding configKey to reload all outputs on block-pack update\n const key = `${ctx.blockId}#lambda#${configKey}#${fh.handle}`;\n ops = { ...ops, key };\n if (ops.mode === undefined && fh.retentive === true) ops.mode = \"StableOnlyRetentive\";\n return Computable.makeRaw((cCtx) => {\n const { code, featureFlags } = codeWithInfo;\n\n if (getDebugFlags().logOutputRecalculations)\n console.log(\n `Block lambda recalculation : ${key} (${cCtx.changeSourceMarker}; ${cCtx.bodyInvocations} invocations)`,\n );\n\n const scope = new Scope();\n let keepVmAlive = false;\n cCtx.addOnDestroy(() => {\n // If keepVmAlive is false, the scope will be disposed by the finally block,\n // no need to dispose it here.\n if (keepVmAlive) scope.dispose();\n });\n\n try {\n const runtime = scope.manage(env.quickJs.newRuntime());\n runtime.setMemoryLimit(1024 * 1024 * 8);\n runtime.setMaxStackSize(1024 * 320);\n\n let deadlineSettings: DeadlineSettings | undefined;\n runtime.setInterruptHandler(() => {\n if (deadlineSettings === undefined) return false;\n if (Date.now() > deadlineSettings.deadline) return true;\n return false;\n });\n const vm = scope.manage(runtime.newContext());\n const rCtx = new JsExecutionContext(\n scope,\n vm,\n (s) => {\n deadlineSettings = s;\n },\n featureFlags,\n { computableCtx: cCtx, blockCtx: ctx, mlEnv: env },\n );\n\n rCtx.evaluateBundle(code.content);\n const result = rCtx.runCallback(fh.handle);\n\n rCtx.resetComputableCtx();\n\n const toBeResolved = rCtx.computableHelper!.computablesToResolve;\n\n if (Object.keys(toBeResolved).length === 0) {\n const importedResult = rCtx.importObjectUniversal(result);\n logOutputStatus(\n fh.handle,\n importedResult,\n cCtx.unstableMarker === undefined,\n -1,\n cCtx.unstableMarker,\n );\n return { ir: importedResult };\n }\n\n let recalculationCounter = 0;\n if (getDebugFlags().logOutputStatus)\n console.log(`Output ${fh.handle} scaffold calculated (not all computables resolved yet).`);\n keepVmAlive = true;\n\n return {\n ir: toBeResolved,\n postprocessValue: (resolved: Record<string, unknown>, { unstableMarker, stable }) => {\n // resolving futures\n for (const [handle, value] of Object.entries(resolved)) rCtx.runCallback(handle, value);\n\n // rendering result\n const renderedResult = rCtx.importObjectUniversal(result);\n\n // logging\n recalculationCounter++;\n logOutputStatus(fh.handle, renderedResult, stable, recalculationCounter, unstableMarker);\n\n return renderedResult;\n },\n };\n } catch (e) {\n keepVmAlive = false;\n throw e;\n } finally {\n if (!keepVmAlive) scope.dispose();\n }\n }, ops);\n}\n\nexport function executeSingleLambda(\n quickJs: QuickJSWASMModule,\n fh: ConfigRenderLambda,\n codeWithInfo: BlockCodeWithInfo,\n ...args: unknown[]\n): unknown {\n const { code, featureFlags } = codeWithInfo;\n const scope = new Scope();\n try {\n const runtime = scope.manage(quickJs.newRuntime());\n runtime.setMemoryLimit(1024 * 1024 * 8);\n runtime.setMaxStackSize(1024 * 320);\n\n let deadlineSettings: DeadlineSettings | undefined;\n runtime.setInterruptHandler(() => {\n if (deadlineSettings === undefined) return false;\n if (Date.now() > deadlineSettings.deadline) return true;\n return false;\n });\n const vm = scope.manage(runtime.newContext());\n const rCtx = new JsExecutionContext(\n scope,\n vm,\n (s) => {\n deadlineSettings = s;\n },\n featureFlags,\n );\n\n // Initializing the model\n rCtx.evaluateBundle(code.content);\n\n // Running the lambda with arguments (e.g., state for args(), args for enrichmentTargets())\n return rCtx.importObjectUniversal(rCtx.runCallback(fh.handle, ...args));\n } finally {\n scope.dispose();\n }\n}\n"],"names":["getDebugFlags","Computable","Scope","JsExecutionContext"],"mappings":";;;;;;;AAWA,SAAS,eAAe,CACtB,MAAc,EACd,cAAuB,EACvB,MAAe,EACf,oBAA4B,EAC5B,cAAuB,EAAA;AAEvB,IAAA,IAAIA,mBAAa,EAAE,CAAC,eAAe,KAAKA,mBAAa,EAAE,CAAC,eAAe,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE;AAC7F,QAAA,IAAI,MAAM;YACR,OAAO,CAAC,GAAG,CACT,CAAA,cAAA,EAAiB,MAAM,CAAA,YAAA,EAAe,cAAc,KAAK,SAAS,GAAG,SAAS,GAAG,WAAW,CAAA,IAAA,EAAO,oBAAoB,CAAA,CAAA,CAAG,CAC3H;;YAED,OAAO,CAAC,GAAG,CACT,CAAA,gBAAA,EAAmB,MAAM,CAAA,WAAA,EAAc,cAAc,CAAA,EAAA,EAAK,cAAc,KAAK,SAAS,GAAG,SAAS,GAAG,WAAW,CAAA,GAAA,EAAM,oBAAoB,CAAA,CAAA,CAAG,CAC9I;IACL;AACF;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;AACG,SAAU,gBAAgB,CAC9B,GAA2B,EAC3B,GAAoB,EACpB,EAAsB,EACtB,YAA+B,EAC/B,SAAiB,EACjB,MAAuC,EAAE,EAAA;;AAGzC,IAAA,MAAM,GAAG,GAAG,CAAA,EAAG,GAAG,CAAC,OAAO,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,EAAI,EAAE,CAAC,MAAM,EAAE;AAC7D,IAAA,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE;IACrB,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI;AAAE,QAAA,GAAG,CAAC,IAAI,GAAG,qBAAqB;AACrF,IAAA,OAAOC,qBAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACjC,QAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY;QAE3C,IAAID,mBAAa,EAAE,CAAC,uBAAuB;AACzC,YAAA,OAAO,CAAC,GAAG,CACT,CAAA,6BAAA,EAAgC,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,eAAe,CAAA,aAAA,CAAe,CACxG;AAEH,QAAA,MAAM,KAAK,GAAG,IAAIE,uBAAK,EAAE;QACzB,IAAI,WAAW,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAK;;;AAGrB,YAAA,IAAI,WAAW;gBAAE,KAAK,CAAC,OAAO,EAAE;AAClC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACtD,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;AACvC,YAAA,OAAO,CAAC,eAAe,CAAC,IAAI,GAAG,GAAG,CAAC;AAEnC,YAAA,IAAI,gBAA8C;AAClD,YAAA,OAAO,CAAC,mBAAmB,CAAC,MAAK;gBAC/B,IAAI,gBAAgB,KAAK,SAAS;AAAE,oBAAA,OAAO,KAAK;AAChD,gBAAA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,QAAQ;AAAE,oBAAA,OAAO,IAAI;AACvD,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,CAAC;YACF,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7C,YAAA,MAAM,IAAI,GAAG,IAAIC,0BAAkB,CACjC,KAAK,EACL,EAAE,EACF,CAAC,CAAC,KAAI;gBACJ,gBAAgB,GAAG,CAAC;AACtB,YAAA,CAAC,EACD,YAAY,EACZ,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CACnD;AAED,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC;YAE1C,IAAI,CAAC,kBAAkB,EAAE;AAEzB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAiB,CAAC,oBAAoB;YAEhE,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;gBACzD,eAAe,CACb,EAAE,CAAC,MAAM,EACT,cAAc,EACd,IAAI,CAAC,cAAc,KAAK,SAAS,EACjC,CAAC,CAAC,EACF,IAAI,CAAC,cAAc,CACpB;AACD,gBAAA,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE;YAC/B;YAEA,IAAI,oBAAoB,GAAG,CAAC;YAC5B,IAAIH,mBAAa,EAAE,CAAC,eAAe;gBACjC,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,EAAE,CAAC,MAAM,CAAA,wDAAA,CAA0D,CAAC;YAC5F,WAAW,GAAG,IAAI;YAElB,OAAO;AACL,gBAAA,EAAE,EAAE,YAAY;gBAChB,gBAAgB,EAAE,CAAC,QAAiC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,KAAI;;AAElF,oBAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AAAE,wBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;;oBAGvF,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;;AAGzD,oBAAA,oBAAoB,EAAE;AACtB,oBAAA,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,cAAc,CAAC;AAExF,oBAAA,OAAO,cAAc;gBACvB,CAAC;aACF;QACH;QAAE,OAAO,CAAC,EAAE;YACV,WAAW,GAAG,KAAK;AACnB,YAAA,MAAM,CAAC;QACT;gBAAU;AACR,YAAA,IAAI,CAAC,WAAW;gBAAE,KAAK,CAAC,OAAO,EAAE;QACnC;IACF,CAAC,EAAE,GAAG,CAAC;AACT;AAEM,SAAU,mBAAmB,CACjC,OAA0B,EAC1B,EAAsB,EACtB,YAA+B,EAC/B,GAAG,IAAe,EAAA;AAElB,IAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY;AAC3C,IAAA,MAAM,KAAK,GAAG,IAAIE,uBAAK,EAAE;AACzB,IAAA,IAAI;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAClD,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;AACvC,QAAA,OAAO,CAAC,eAAe,CAAC,IAAI,GAAG,GAAG,CAAC;AAEnC,QAAA,IAAI,gBAA8C;AAClD,QAAA,OAAO,CAAC,mBAAmB,CAAC,MAAK;YAC/B,IAAI,gBAAgB,KAAK,SAAS;AAAE,gBAAA,OAAO,KAAK;AAChD,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,QAAQ;AAAE,gBAAA,OAAO,IAAI;AACvD,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;QACF,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAIC,0BAAkB,CACjC,KAAK,EACL,EAAE,EACF,CAAC,CAAC,KAAI;YACJ,gBAAgB,GAAG,CAAC;QACtB,CAAC,EACD,YAAY,CACb;;AAGD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGjC,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IACzE;YAAU;QACR,KAAK,CAAC,OAAO,EAAE;IACjB;AACF;;;;;"}
@@ -1,9 +1,9 @@
1
- import type { MiddleLayerEnvironment } from '../middle_layer/middle_layer';
2
- import type { BlockCodeWithInfo, ConfigRenderLambda } from '@platforma-sdk/model';
3
- import type { ComputableRenderingOps } from '@milaboratories/computable';
4
- import { Computable } from '@milaboratories/computable';
5
- import type { QuickJSWASMModule } from 'quickjs-emscripten';
6
- import type { BlockContextAny } from '../middle_layer/block_ctx';
1
+ import type { MiddleLayerEnvironment } from "../middle_layer/middle_layer";
2
+ import type { BlockCodeWithInfo, ConfigRenderLambda } from "@platforma-sdk/model";
3
+ import type { ComputableRenderingOps } from "@milaboratories/computable";
4
+ import { Computable } from "@milaboratories/computable";
5
+ import type { QuickJSWASMModule } from "quickjs-emscripten";
6
+ import type { BlockContextAny } from "../middle_layer/block_ctx";
7
7
  /**
8
8
  * Creates a Computable that executes a render function (`fh`) from a block's code in a QuickJS virtual machine.
9
9
  * This function handles both synchronous and asynchronous execution patterns of the sandboxed JS code.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/js_render/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAYjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,sBAAsB,EAC3B,GAAG,EAAE,eAAe,EACpB,EAAE,EAAE,kBAAkB,EACtB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,OAAO,CAAC,sBAAsB,CAAM,GACxC,UAAU,CAAC,OAAO,CAAC,CA6ErB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,EAAE,EAAE,kBAAkB,EACtB,YAAY,EAAE,iBAAiB,EAC/B,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CA4BT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/js_render/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAsBjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,sBAAsB,EAC3B,GAAG,EAAE,eAAe,EACpB,EAAE,EAAE,kBAAkB,EACtB,YAAY,EAAE,iBAAiB,EAC/B,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,OAAO,CAAC,sBAAsB,CAAM,GACxC,UAAU,CAAC,OAAO,CAAC,CA0FrB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,EAAE,EAAE,kBAAkB,EACtB,YAAY,EAAE,iBAAiB,EAC/B,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAgCT"}
@@ -4,11 +4,11 @@ import { JsExecutionContext } from './context.js';
4
4
  import { getDebugFlags } from '../debug/index.js';
5
5
 
6
6
  function logOutputStatus(handle, renderedResult, stable, recalculationCounter, unstableMarker) {
7
- if (getDebugFlags().logOutputStatus && (getDebugFlags().logOutputStatus === 'any' || !stable)) {
7
+ if (getDebugFlags().logOutputStatus && (getDebugFlags().logOutputStatus === "any" || !stable)) {
8
8
  if (stable)
9
- console.log(`Stable output ${handle} calculated ${renderedResult !== undefined ? 'defined' : 'undefined'}; (#${recalculationCounter})`);
9
+ console.log(`Stable output ${handle} calculated ${renderedResult !== undefined ? "defined" : "undefined"}; (#${recalculationCounter})`);
10
10
  else
11
- console.log(`Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? 'defined' : 'undefined'} (#${recalculationCounter})`);
11
+ console.log(`Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? "defined" : "undefined"} (#${recalculationCounter})`);
12
12
  }
13
13
  }
14
14
  /**
@@ -64,7 +64,7 @@ function computableFromRF(env, ctx, fh, codeWithInfo, configKey, ops = {}) {
64
64
  const key = `${ctx.blockId}#lambda#${configKey}#${fh.handle}`;
65
65
  ops = { ...ops, key };
66
66
  if (ops.mode === undefined && fh.retentive === true)
67
- ops.mode = 'StableOnlyRetentive';
67
+ ops.mode = "StableOnlyRetentive";
68
68
  return Computable.makeRaw((cCtx) => {
69
69
  const { code, featureFlags } = codeWithInfo;
70
70
  if (getDebugFlags().logOutputRecalculations)
@@ -90,7 +90,9 @@ function computableFromRF(env, ctx, fh, codeWithInfo, configKey, ops = {}) {
90
90
  return false;
91
91
  });
92
92
  const vm = scope.manage(runtime.newContext());
93
- const rCtx = new JsExecutionContext(scope, vm, (s) => { deadlineSettings = s; }, featureFlags, { computableCtx: cCtx, blockCtx: ctx, mlEnv: env });
93
+ const rCtx = new JsExecutionContext(scope, vm, (s) => {
94
+ deadlineSettings = s;
95
+ }, featureFlags, { computableCtx: cCtx, blockCtx: ctx, mlEnv: env });
94
96
  rCtx.evaluateBundle(code.content);
95
97
  const result = rCtx.runCallback(fh.handle);
96
98
  rCtx.resetComputableCtx();
@@ -145,7 +147,9 @@ function executeSingleLambda(quickJs, fh, codeWithInfo, ...args) {
145
147
  return false;
146
148
  });
147
149
  const vm = scope.manage(runtime.newContext());
148
- const rCtx = new JsExecutionContext(scope, vm, (s) => { deadlineSettings = s; }, featureFlags);
150
+ const rCtx = new JsExecutionContext(scope, vm, (s) => {
151
+ deadlineSettings = s;
152
+ }, featureFlags);
149
153
  // Initializing the model
150
154
  rCtx.evaluateBundle(code.content);
151
155
  // Running the lambda with arguments (e.g., state for args(), args for enrichmentTargets())
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/js_render/index.ts"],"sourcesContent":["import type { MiddleLayerEnvironment } from '../middle_layer/middle_layer';\nimport type { BlockCodeWithInfo, ConfigRenderLambda } from '@platforma-sdk/model';\nimport type { ComputableRenderingOps } from '@milaboratories/computable';\nimport { Computable } from '@milaboratories/computable';\nimport type { QuickJSWASMModule } from 'quickjs-emscripten';\nimport { Scope } from 'quickjs-emscripten';\nimport type { DeadlineSettings } from './context';\nimport { JsExecutionContext } from './context';\nimport type { BlockContextAny } from '../middle_layer/block_ctx';\nimport { getDebugFlags } from '../debug';\n\nfunction logOutputStatus(handle: string, renderedResult: unknown, stable: boolean, recalculationCounter: number, unstableMarker?: string) {\n if (getDebugFlags().logOutputStatus && (getDebugFlags().logOutputStatus === 'any' || !stable)) {\n if (stable)\n console.log(`Stable output ${handle} calculated ${renderedResult !== undefined ? 'defined' : 'undefined'}; (#${recalculationCounter})`);\n else\n console.log(`Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? 'defined' : 'undefined'} (#${recalculationCounter})`);\n }\n}\n\n/**\n * Creates a Computable that executes a render function (`fh`) from a block's code in a QuickJS virtual machine.\n * This function handles both synchronous and asynchronous execution patterns of the sandboxed JS code.\n *\n * The overall data flow is as follows:\n * 1. A QuickJS VM is initialized.\n * 2. A `JsExecutionContext` is created to bridge the host (TypeScript) and guest (QuickJS) environments. It injects a\n * context object (`cfgRenderCtx`) into the VM, providing helper methods for the sandboxed code to interact with the\n * platform (e.g., to request data).\n * 3. The block's Javascript bundle is evaluated in the VM.\n * 4. The specified render function (`fh.handle`) is executed.\n *\n * Two execution paths are possible depending on the behavior of the render function:\n *\n * ### Synchronous Path\n * If the render function computes its result without requesting any external data requiring asynchronous calculations,\n * it executes synchronously.\n * - The `computablesToResolve` map in `JsExecutionContext` remains empty.\n * - The function returns an object with an `ir` field holding the result (`{ ir: importedResult }`).\n * Since `postprocessValue` is not specified, `ir` is treated as the final resolved value of the Computable.\n * - The QuickJS VM is disposed of immediately as it's no longer needed.\n *\n * ### Asynchronous Path (with `postprocessValue`)\n * If the render function needs external data requiring asynchronous calculations (e.g., fetching a file), it calls\n * one of the injected helper methods. These methods don't return data directly. Instead, they:\n * a. Create a new `Computable` for the data request (e.g., to fetch a blob).\n * b. Register this new `Computable` in the `computablesToResolve` map.\n * c. Return a handle (string) to the sandboxed code.\n *\n * In this case:\n * - The initial execution of the render function returns a scaffold of the final result, which depends on the pending\n * computables.\n * - The `computablesToResolve` map is passed as the `ir` (initial result) to `Computable.makeRaw`.\n * - The `postprocessValue` function is provided to handle the results once the computables are resolved.\n * - The QuickJS VM is kept alive (`keepVmAlive = true`) because its state is needed in `postprocessValue`.\n * - Once the `computable` framework resolves all dependencies, it calls `postprocessValue` with the resolved data.\n * - `postprocessValue` feeds the resolved data back into the VM, allowing the sandboxed code to compute the final\n * result.\n * - The VM is eventually disposed of when the host Computable is destroyed.\n *\n * @param env The middle layer environment.\n * @param ctx The block context.\n * @param fh The config render lambda to execute.\n * @param codeWithInfo The block's code and feature flags.\n * @param configKey A key for the configuration, used for cache busting.\n * @param ops Options for the computable.\n * @returns A `Computable` that will resolve to the result of the lambda execution.\n */\nexport function computableFromRF(\n env: MiddleLayerEnvironment,\n ctx: BlockContextAny,\n fh: ConfigRenderLambda,\n codeWithInfo: BlockCodeWithInfo,\n configKey: string,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n // adding configKey to reload all outputs on block-pack update\n const key = `${ctx.blockId}#lambda#${configKey}#${fh.handle}`;\n ops = { ...ops, key };\n if (ops.mode === undefined && fh.retentive === true) ops.mode = 'StableOnlyRetentive';\n return Computable.makeRaw((cCtx) => {\n const { code, featureFlags } = codeWithInfo;\n\n if (getDebugFlags().logOutputRecalculations)\n console.log(`Block lambda recalculation : ${key} (${cCtx.changeSourceMarker}; ${cCtx.bodyInvocations} invocations)`);\n\n const scope = new Scope();\n let keepVmAlive = false;\n cCtx.addOnDestroy(() => {\n // If keepVmAlive is false, the scope will be disposed by the finally block,\n // no need to dispose it here.\n if (keepVmAlive) scope.dispose();\n });\n\n try {\n const runtime = scope.manage(env.quickJs.newRuntime());\n runtime.setMemoryLimit(1024 * 1024 * 8);\n runtime.setMaxStackSize(1024 * 320);\n\n let deadlineSettings: DeadlineSettings | undefined;\n runtime.setInterruptHandler(() => {\n if (deadlineSettings === undefined) return false;\n if (Date.now() > deadlineSettings.deadline) return true;\n return false;\n });\n const vm = scope.manage(runtime.newContext());\n const rCtx = new JsExecutionContext(scope, vm,\n (s) => { deadlineSettings = s; },\n featureFlags,\n { computableCtx: cCtx, blockCtx: ctx, mlEnv: env });\n\n rCtx.evaluateBundle(code.content);\n const result = rCtx.runCallback(fh.handle);\n\n rCtx.resetComputableCtx();\n\n const toBeResolved = rCtx.computableHelper!.computablesToResolve;\n\n if (Object.keys(toBeResolved).length === 0) {\n const importedResult = rCtx.importObjectUniversal(result);\n logOutputStatus(fh.handle, importedResult, cCtx.unstableMarker === undefined, -1, cCtx.unstableMarker);\n return { ir: importedResult };\n }\n\n let recalculationCounter = 0;\n if (getDebugFlags().logOutputStatus)\n console.log(`Output ${fh.handle} scaffold calculated (not all computables resolved yet).`);\n keepVmAlive = true;\n\n return {\n ir: toBeResolved,\n postprocessValue: (resolved: Record<string, unknown>, { unstableMarker, stable }) => {\n // resolving futures\n for (const [handle, value] of Object.entries(resolved)) rCtx.runCallback(handle, value);\n\n // rendering result\n const renderedResult = rCtx.importObjectUniversal(result);\n\n // logging\n recalculationCounter++;\n logOutputStatus(fh.handle, renderedResult, stable, recalculationCounter, unstableMarker);\n\n return renderedResult;\n },\n };\n } catch (e) {\n keepVmAlive = false;\n throw e;\n } finally {\n if (!keepVmAlive) scope.dispose();\n }\n }, ops);\n}\n\nexport function executeSingleLambda(\n quickJs: QuickJSWASMModule,\n fh: ConfigRenderLambda,\n codeWithInfo: BlockCodeWithInfo,\n ...args: unknown[]\n): unknown {\n const { code, featureFlags } = codeWithInfo;\n const scope = new Scope();\n try {\n const runtime = scope.manage(quickJs.newRuntime());\n runtime.setMemoryLimit(1024 * 1024 * 8);\n runtime.setMaxStackSize(1024 * 320);\n\n let deadlineSettings: DeadlineSettings | undefined;\n runtime.setInterruptHandler(() => {\n if (deadlineSettings === undefined) return false;\n if (Date.now() > deadlineSettings.deadline) return true;\n return false;\n });\n const vm = scope.manage(runtime.newContext());\n const rCtx = new JsExecutionContext(scope, vm,\n (s) => { deadlineSettings = s; },\n featureFlags,\n );\n\n // Initializing the model\n rCtx.evaluateBundle(code.content);\n\n // Running the lambda with arguments (e.g., state for args(), args for enrichmentTargets())\n return rCtx.importObjectUniversal(rCtx.runCallback(fh.handle, ...args));\n } finally {\n scope.dispose();\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/js_render/index.ts"],"sourcesContent":["import type { MiddleLayerEnvironment } from \"../middle_layer/middle_layer\";\nimport type { BlockCodeWithInfo, ConfigRenderLambda } from \"@platforma-sdk/model\";\nimport type { ComputableRenderingOps } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { QuickJSWASMModule } from \"quickjs-emscripten\";\nimport { Scope } from \"quickjs-emscripten\";\nimport type { DeadlineSettings } from \"./context\";\nimport { JsExecutionContext } from \"./context\";\nimport type { BlockContextAny } from \"../middle_layer/block_ctx\";\nimport { getDebugFlags } from \"../debug\";\n\nfunction logOutputStatus(\n handle: string,\n renderedResult: unknown,\n stable: boolean,\n recalculationCounter: number,\n unstableMarker?: string,\n) {\n if (getDebugFlags().logOutputStatus && (getDebugFlags().logOutputStatus === \"any\" || !stable)) {\n if (stable)\n console.log(\n `Stable output ${handle} calculated ${renderedResult !== undefined ? \"defined\" : \"undefined\"}; (#${recalculationCounter})`,\n );\n else\n console.log(\n `Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? \"defined\" : \"undefined\"} (#${recalculationCounter})`,\n );\n }\n}\n\n/**\n * Creates a Computable that executes a render function (`fh`) from a block's code in a QuickJS virtual machine.\n * This function handles both synchronous and asynchronous execution patterns of the sandboxed JS code.\n *\n * The overall data flow is as follows:\n * 1. A QuickJS VM is initialized.\n * 2. A `JsExecutionContext` is created to bridge the host (TypeScript) and guest (QuickJS) environments. It injects a\n * context object (`cfgRenderCtx`) into the VM, providing helper methods for the sandboxed code to interact with the\n * platform (e.g., to request data).\n * 3. The block's Javascript bundle is evaluated in the VM.\n * 4. The specified render function (`fh.handle`) is executed.\n *\n * Two execution paths are possible depending on the behavior of the render function:\n *\n * ### Synchronous Path\n * If the render function computes its result without requesting any external data requiring asynchronous calculations,\n * it executes synchronously.\n * - The `computablesToResolve` map in `JsExecutionContext` remains empty.\n * - The function returns an object with an `ir` field holding the result (`{ ir: importedResult }`).\n * Since `postprocessValue` is not specified, `ir` is treated as the final resolved value of the Computable.\n * - The QuickJS VM is disposed of immediately as it's no longer needed.\n *\n * ### Asynchronous Path (with `postprocessValue`)\n * If the render function needs external data requiring asynchronous calculations (e.g., fetching a file), it calls\n * one of the injected helper methods. These methods don't return data directly. Instead, they:\n * a. Create a new `Computable` for the data request (e.g., to fetch a blob).\n * b. Register this new `Computable` in the `computablesToResolve` map.\n * c. Return a handle (string) to the sandboxed code.\n *\n * In this case:\n * - The initial execution of the render function returns a scaffold of the final result, which depends on the pending\n * computables.\n * - The `computablesToResolve` map is passed as the `ir` (initial result) to `Computable.makeRaw`.\n * - The `postprocessValue` function is provided to handle the results once the computables are resolved.\n * - The QuickJS VM is kept alive (`keepVmAlive = true`) because its state is needed in `postprocessValue`.\n * - Once the `computable` framework resolves all dependencies, it calls `postprocessValue` with the resolved data.\n * - `postprocessValue` feeds the resolved data back into the VM, allowing the sandboxed code to compute the final\n * result.\n * - The VM is eventually disposed of when the host Computable is destroyed.\n *\n * @param env The middle layer environment.\n * @param ctx The block context.\n * @param fh The config render lambda to execute.\n * @param codeWithInfo The block's code and feature flags.\n * @param configKey A key for the configuration, used for cache busting.\n * @param ops Options for the computable.\n * @returns A `Computable` that will resolve to the result of the lambda execution.\n */\nexport function computableFromRF(\n env: MiddleLayerEnvironment,\n ctx: BlockContextAny,\n fh: ConfigRenderLambda,\n codeWithInfo: BlockCodeWithInfo,\n configKey: string,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n // adding configKey to reload all outputs on block-pack update\n const key = `${ctx.blockId}#lambda#${configKey}#${fh.handle}`;\n ops = { ...ops, key };\n if (ops.mode === undefined && fh.retentive === true) ops.mode = \"StableOnlyRetentive\";\n return Computable.makeRaw((cCtx) => {\n const { code, featureFlags } = codeWithInfo;\n\n if (getDebugFlags().logOutputRecalculations)\n console.log(\n `Block lambda recalculation : ${key} (${cCtx.changeSourceMarker}; ${cCtx.bodyInvocations} invocations)`,\n );\n\n const scope = new Scope();\n let keepVmAlive = false;\n cCtx.addOnDestroy(() => {\n // If keepVmAlive is false, the scope will be disposed by the finally block,\n // no need to dispose it here.\n if (keepVmAlive) scope.dispose();\n });\n\n try {\n const runtime = scope.manage(env.quickJs.newRuntime());\n runtime.setMemoryLimit(1024 * 1024 * 8);\n runtime.setMaxStackSize(1024 * 320);\n\n let deadlineSettings: DeadlineSettings | undefined;\n runtime.setInterruptHandler(() => {\n if (deadlineSettings === undefined) return false;\n if (Date.now() > deadlineSettings.deadline) return true;\n return false;\n });\n const vm = scope.manage(runtime.newContext());\n const rCtx = new JsExecutionContext(\n scope,\n vm,\n (s) => {\n deadlineSettings = s;\n },\n featureFlags,\n { computableCtx: cCtx, blockCtx: ctx, mlEnv: env },\n );\n\n rCtx.evaluateBundle(code.content);\n const result = rCtx.runCallback(fh.handle);\n\n rCtx.resetComputableCtx();\n\n const toBeResolved = rCtx.computableHelper!.computablesToResolve;\n\n if (Object.keys(toBeResolved).length === 0) {\n const importedResult = rCtx.importObjectUniversal(result);\n logOutputStatus(\n fh.handle,\n importedResult,\n cCtx.unstableMarker === undefined,\n -1,\n cCtx.unstableMarker,\n );\n return { ir: importedResult };\n }\n\n let recalculationCounter = 0;\n if (getDebugFlags().logOutputStatus)\n console.log(`Output ${fh.handle} scaffold calculated (not all computables resolved yet).`);\n keepVmAlive = true;\n\n return {\n ir: toBeResolved,\n postprocessValue: (resolved: Record<string, unknown>, { unstableMarker, stable }) => {\n // resolving futures\n for (const [handle, value] of Object.entries(resolved)) rCtx.runCallback(handle, value);\n\n // rendering result\n const renderedResult = rCtx.importObjectUniversal(result);\n\n // logging\n recalculationCounter++;\n logOutputStatus(fh.handle, renderedResult, stable, recalculationCounter, unstableMarker);\n\n return renderedResult;\n },\n };\n } catch (e) {\n keepVmAlive = false;\n throw e;\n } finally {\n if (!keepVmAlive) scope.dispose();\n }\n }, ops);\n}\n\nexport function executeSingleLambda(\n quickJs: QuickJSWASMModule,\n fh: ConfigRenderLambda,\n codeWithInfo: BlockCodeWithInfo,\n ...args: unknown[]\n): unknown {\n const { code, featureFlags } = codeWithInfo;\n const scope = new Scope();\n try {\n const runtime = scope.manage(quickJs.newRuntime());\n runtime.setMemoryLimit(1024 * 1024 * 8);\n runtime.setMaxStackSize(1024 * 320);\n\n let deadlineSettings: DeadlineSettings | undefined;\n runtime.setInterruptHandler(() => {\n if (deadlineSettings === undefined) return false;\n if (Date.now() > deadlineSettings.deadline) return true;\n return false;\n });\n const vm = scope.manage(runtime.newContext());\n const rCtx = new JsExecutionContext(\n scope,\n vm,\n (s) => {\n deadlineSettings = s;\n },\n featureFlags,\n );\n\n // Initializing the model\n rCtx.evaluateBundle(code.content);\n\n // Running the lambda with arguments (e.g., state for args(), args for enrichmentTargets())\n return rCtx.importObjectUniversal(rCtx.runCallback(fh.handle, ...args));\n } finally {\n scope.dispose();\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"active_cfg.cjs","sources":["../../src/middle_layer/active_cfg.ts"],"sourcesContent":["import { notEmpty } from '@milaboratories/ts-helpers';\nimport type { PlTreeEntry } from '@milaboratories/pl-tree';\nimport type { MiddleLayerEnvironment } from './middle_layer';\nimport { Computable } from '@milaboratories/computable';\nimport type { ProjectStructure } from '../model/project_model';\nimport { ProjectStructureKey } from '../model/project_model';\nimport { allBlocks } from '../model/project_model_util';\nimport { constructBlockContext } from './block_ctx';\nimport { computableFromCfgOrRF, isActive } from './render';\nimport { getBlockPackInfo } from './util';\nimport { extractCodeWithInfo, wrapCallback } from '@platforma-sdk/model';\n\n/** Returns derived general project state form the project resource */\nexport function activeConfigs(\n prjEntry: PlTreeEntry,\n env: MiddleLayerEnvironment,\n): Computable<unknown[]> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const ret: Computable<unknown>[] = [];\n for (const { id } of allBlocks(structure)) {\n const bp = getBlockPackInfo(prj, id);\n if (bp === undefined) continue;\n\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(bp.cfg));\n if (codeWithInfoOrError.error) continue;\n\n const activeOutputConfigs = Object.entries(bp.cfg.outputs)\n .map(([, cfg]) => cfg)\n .filter((cfg) => isActive(cfg))\n .map((cfg) => cfg);\n\n if (activeOutputConfigs.length === 0) continue;\n\n const blockCtx = constructBlockContext(prj.persist(), id);\n\n for (const cfg of activeOutputConfigs) {\n ret.push(\n Computable.wrapError(computableFromCfgOrRF(env, blockCtx, cfg, codeWithInfoOrError.value, bp.bpId)),\n );\n }\n }\n\n return ret;\n });\n}\n"],"names":["Computable","notEmpty","ProjectStructureKey","allBlocks","getBlockPackInfo","wrapCallback","extractCodeWithInfo","isActive","constructBlockContext","computableFromCfgOrRF"],"mappings":";;;;;;;;;;;AAYA;AACM,SAAU,aAAa,CAC3B,QAAqB,EACrB,GAA2B,EAAA;AAE3B,IAAA,OAAOA,qBAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QAEzC,MAAM,SAAS,GAAGC,kBAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAmBC,iCAAmB,CAAC,CAAC;QACxF,MAAM,GAAG,GAA0B,EAAE;QACrC,KAAK,MAAM,EAAE,EAAE,EAAE,IAAIC,4BAAS,CAAC,SAAS,CAAC,EAAE;YACzC,MAAM,EAAE,GAAGC,qBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC;YACpC,IAAI,EAAE,KAAK,SAAS;gBAAE;AAEtB,YAAA,MAAM,mBAAmB,GAAGC,kBAAY,CAAC,MAAMC,yBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC3E,IAAI,mBAAmB,CAAC,KAAK;gBAAE;YAE/B,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO;iBACtD,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG;iBACpB,MAAM,CAAC,CAAC,GAAG,KAAKC,eAAQ,CAAC,GAAG,CAAC;iBAC7B,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AAEpB,YAAA,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;gBAAE;YAEtC,MAAM,QAAQ,GAAGC,+BAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;AAEzD,YAAA,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE;gBACrC,GAAG,CAAC,IAAI,CACNR,qBAAU,CAAC,SAAS,CAACS,4BAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CACpG;YACH;QACF;AAEA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"active_cfg.cjs","sources":["../../src/middle_layer/active_cfg.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { constructBlockContext } from \"./block_ctx\";\nimport { computableFromCfgOrRF, isActive } from \"./render\";\nimport { getBlockPackInfo } from \"./util\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\n\n/** Returns derived general project state form the project resource */\nexport function activeConfigs(\n prjEntry: PlTreeEntry,\n env: MiddleLayerEnvironment,\n): Computable<unknown[]> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const ret: Computable<unknown>[] = [];\n for (const { id } of allBlocks(structure)) {\n const bp = getBlockPackInfo(prj, id);\n if (bp === undefined) continue;\n\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(bp.cfg));\n if (codeWithInfoOrError.error) continue;\n\n const activeOutputConfigs = Object.entries(bp.cfg.outputs)\n .map(([, cfg]) => cfg)\n .filter((cfg) => isActive(cfg))\n .map((cfg) => cfg);\n\n if (activeOutputConfigs.length === 0) continue;\n\n const blockCtx = constructBlockContext(prj.persist(), id);\n\n for (const cfg of activeOutputConfigs) {\n ret.push(\n Computable.wrapError(\n computableFromCfgOrRF(env, blockCtx, cfg, codeWithInfoOrError.value, bp.bpId),\n ),\n );\n }\n }\n\n return ret;\n });\n}\n"],"names":["Computable","notEmpty","ProjectStructureKey","allBlocks","getBlockPackInfo","wrapCallback","extractCodeWithInfo","isActive","constructBlockContext","computableFromCfgOrRF"],"mappings":";;;;;;;;;;;AAYA;AACM,SAAU,aAAa,CAC3B,QAAqB,EACrB,GAA2B,EAAA;AAE3B,IAAA,OAAOA,qBAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QAEzC,MAAM,SAAS,GAAGC,kBAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAmBC,iCAAmB,CAAC,CAAC;QACxF,MAAM,GAAG,GAA0B,EAAE;QACrC,KAAK,MAAM,EAAE,EAAE,EAAE,IAAIC,4BAAS,CAAC,SAAS,CAAC,EAAE;YACzC,MAAM,EAAE,GAAGC,qBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC;YACpC,IAAI,EAAE,KAAK,SAAS;gBAAE;AAEtB,YAAA,MAAM,mBAAmB,GAAGC,kBAAY,CAAC,MAAMC,yBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC3E,IAAI,mBAAmB,CAAC,KAAK;gBAAE;YAE/B,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO;iBACtD,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG;iBACpB,MAAM,CAAC,CAAC,GAAG,KAAKC,eAAQ,CAAC,GAAG,CAAC;iBAC7B,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AAEpB,YAAA,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;gBAAE;YAEtC,MAAM,QAAQ,GAAGC,+BAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;AAEzD,YAAA,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE;gBACrC,GAAG,CAAC,IAAI,CACNR,qBAAU,CAAC,SAAS,CAClBS,4BAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAC9E,CACF;YACH;QACF;AAEA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,CAAC;AACJ;;;;"}
@@ -1,6 +1,6 @@
1
- import type { PlTreeEntry } from '@milaboratories/pl-tree';
2
- import type { MiddleLayerEnvironment } from './middle_layer';
3
- import { Computable } from '@milaboratories/computable';
1
+ import type { PlTreeEntry } from "@milaboratories/pl-tree";
2
+ import type { MiddleLayerEnvironment } from "./middle_layer";
3
+ import { Computable } from "@milaboratories/computable";
4
4
  /** Returns derived general project state form the project resource */
5
5
  export declare function activeConfigs(prjEntry: PlTreeEntry, env: MiddleLayerEnvironment): Computable<unknown[]>;
6
6
  //# sourceMappingURL=active_cfg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"active_cfg.d.ts","sourceRoot":"","sources":["../../src/middle_layer/active_cfg.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AASxD,sEAAsE;AACtE,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,sBAAsB,GAC1B,UAAU,CAAC,OAAO,EAAE,CAAC,CA+BvB"}
1
+ {"version":3,"file":"active_cfg.d.ts","sourceRoot":"","sources":["../../src/middle_layer/active_cfg.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AASxD,sEAAsE;AACtE,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,sBAAsB,GAC1B,UAAU,CAAC,OAAO,EAAE,CAAC,CAiCvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"active_cfg.js","sources":["../../src/middle_layer/active_cfg.ts"],"sourcesContent":["import { notEmpty } from '@milaboratories/ts-helpers';\nimport type { PlTreeEntry } from '@milaboratories/pl-tree';\nimport type { MiddleLayerEnvironment } from './middle_layer';\nimport { Computable } from '@milaboratories/computable';\nimport type { ProjectStructure } from '../model/project_model';\nimport { ProjectStructureKey } from '../model/project_model';\nimport { allBlocks } from '../model/project_model_util';\nimport { constructBlockContext } from './block_ctx';\nimport { computableFromCfgOrRF, isActive } from './render';\nimport { getBlockPackInfo } from './util';\nimport { extractCodeWithInfo, wrapCallback } from '@platforma-sdk/model';\n\n/** Returns derived general project state form the project resource */\nexport function activeConfigs(\n prjEntry: PlTreeEntry,\n env: MiddleLayerEnvironment,\n): Computable<unknown[]> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const ret: Computable<unknown>[] = [];\n for (const { id } of allBlocks(structure)) {\n const bp = getBlockPackInfo(prj, id);\n if (bp === undefined) continue;\n\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(bp.cfg));\n if (codeWithInfoOrError.error) continue;\n\n const activeOutputConfigs = Object.entries(bp.cfg.outputs)\n .map(([, cfg]) => cfg)\n .filter((cfg) => isActive(cfg))\n .map((cfg) => cfg);\n\n if (activeOutputConfigs.length === 0) continue;\n\n const blockCtx = constructBlockContext(prj.persist(), id);\n\n for (const cfg of activeOutputConfigs) {\n ret.push(\n Computable.wrapError(computableFromCfgOrRF(env, blockCtx, cfg, codeWithInfoOrError.value, bp.bpId)),\n );\n }\n }\n\n return ret;\n });\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA;AACM,SAAU,aAAa,CAC3B,QAAqB,EACrB,GAA2B,EAAA;AAE3B,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QAEzC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAmB,mBAAmB,CAAC,CAAC;QACxF,MAAM,GAAG,GAA0B,EAAE;QACrC,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;YACzC,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC;YACpC,IAAI,EAAE,KAAK,SAAS;gBAAE;AAEtB,YAAA,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC3E,IAAI,mBAAmB,CAAC,KAAK;gBAAE;YAE/B,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO;iBACtD,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG;iBACpB,MAAM,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC;iBAC7B,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AAEpB,YAAA,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;gBAAE;YAEtC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;AAEzD,YAAA,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE;gBACrC,GAAG,CAAC,IAAI,CACN,UAAU,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CACpG;YACH;QACF;AAEA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"active_cfg.js","sources":["../../src/middle_layer/active_cfg.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { constructBlockContext } from \"./block_ctx\";\nimport { computableFromCfgOrRF, isActive } from \"./render\";\nimport { getBlockPackInfo } from \"./util\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\n\n/** Returns derived general project state form the project resource */\nexport function activeConfigs(\n prjEntry: PlTreeEntry,\n env: MiddleLayerEnvironment,\n): Computable<unknown[]> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const ret: Computable<unknown>[] = [];\n for (const { id } of allBlocks(structure)) {\n const bp = getBlockPackInfo(prj, id);\n if (bp === undefined) continue;\n\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(bp.cfg));\n if (codeWithInfoOrError.error) continue;\n\n const activeOutputConfigs = Object.entries(bp.cfg.outputs)\n .map(([, cfg]) => cfg)\n .filter((cfg) => isActive(cfg))\n .map((cfg) => cfg);\n\n if (activeOutputConfigs.length === 0) continue;\n\n const blockCtx = constructBlockContext(prj.persist(), id);\n\n for (const cfg of activeOutputConfigs) {\n ret.push(\n Computable.wrapError(\n computableFromCfgOrRF(env, blockCtx, cfg, codeWithInfoOrError.value, bp.bpId),\n ),\n );\n }\n }\n\n return ret;\n });\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA;AACM,SAAU,aAAa,CAC3B,QAAqB,EACrB,GAA2B,EAAA;AAE3B,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QAEzC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAmB,mBAAmB,CAAC,CAAC;QACxF,MAAM,GAAG,GAA0B,EAAE;QACrC,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;YACzC,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC;YACpC,IAAI,EAAE,KAAK,SAAS;gBAAE;AAEtB,YAAA,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC3E,IAAI,mBAAmB,CAAC,KAAK;gBAAE;YAE/B,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO;iBACtD,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG;iBACpB,MAAM,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC;iBAC7B,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AAEpB,YAAA,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;gBAAE;YAEtC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;AAEzD,YAAA,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE;gBACrC,GAAG,CAAC,IAAI,CACN,UAAU,CAAC,SAAS,CAClB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAC9E,CACF;YACH;QACF;AAEA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,CAAC;AACJ;;;;"}
@@ -27,7 +27,7 @@ function getBlockParameters(projectEntry, blockId, cCtx) {
27
27
  };
28
28
  }
29
29
  function blockOutputs(projectEntry, blockId, env) {
30
- const key = 'outputs#' + plClient.resourceIdToString(projectEntry.rid) + '#' + blockId;
30
+ const key = "outputs#" + plClient.resourceIdToString(projectEntry.rid) + "#" + blockId;
31
31
  return computable.Computable.make((c) => {
32
32
  if (index.getDebugFlags().logOutputRecalculations) {
33
33
  console.log(`blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`);
@@ -1 +1 @@
1
- {"version":3,"file":"block.cjs","sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from '@milaboratories/pl-tree';\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from '@milaboratories/computable';\nimport {\n Computable,\n} from '@milaboratories/computable';\nimport { constructBlockContext, constructBlockContextArgsOnly } from './block_ctx';\nimport { blockArgsAuthorKey } from '../model/project_model';\nimport { ifNotUndef } from '../cfg_render/util';\nimport type { MiddleLayerEnvironment } from './middle_layer';\nimport { getBlockPackInfo } from './util';\nimport type { AuthorMarker, BlockStateInternalV3 } from '@milaboratories/pl-model-middle-layer';\nimport { computableFromCfgOrRF } from './render';\nimport { resourceIdToString } from '@milaboratories/pl-client';\nimport { deepFreeze } from '@milaboratories/ts-helpers';\nimport { extractCodeWithInfo } from '@platforma-sdk/model';\nimport { getDebugFlags } from '../debug';\n\nexport type BlockParameters = Omit<BlockStateInternalV3, 'outputs' | 'navigationState'>;\n\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string\n): Computable<BlockParameters>;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx\n): BlockParameters;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockParameters | Computable<BlockParameters> {\n if (cCtx === undefined)\n return Computable.make((c) => getBlockParameters(projectEntry, blockId, c), {\n key: `inputs#${resourceIdToString(projectEntry.rid)}#${blockId}`,\n });\n\n const prj = cCtx.accessor(projectEntry).node();\n const ctx = constructBlockContextArgsOnly(projectEntry, blockId);\n const blockStorageJson = ctx.blockStorage(cCtx);\n // Parse raw storage JSON - UI will derive data using sdk/model\n const blockStorage = blockStorageJson !== undefined ? deepFreeze(JSON.parse(blockStorageJson)) : undefined;\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n blockStorage,\n };\n}\n\nexport function blockOutputs(\n projectEntry: PlTreeEntry,\n blockId: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<Record<string, ComputableValueOrErrors<unknown>>> {\n const key = 'outputs#' + resourceIdToString(projectEntry.rid) + '#' + blockId;\n return Computable.make(\n (c) => {\n if (getDebugFlags().logOutputRecalculations) {\n console.log(`blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`);\n }\n\n const prj = c.accessor(projectEntry).node();\n const ctx = constructBlockContext(projectEntry, blockId);\n\n return ifNotUndef(getBlockPackInfo(prj, blockId), ({ cfg, bpId }) => {\n const outputs: Record<string, Computable<any>> = {};\n for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {\n const computableOutput = computableFromCfgOrRF(env, ctx, cellCfg, extractCodeWithInfo(cfg), bpId);\n outputs[cellId] = Computable.wrapError(computableOutput, 1);\n }\n return outputs;\n });\n },\n { key },\n ).withStableType();\n}\n"],"names":["Computable","resourceIdToString","constructBlockContextArgsOnly","deepFreeze","blockArgsAuthorKey","getDebugFlags","constructBlockContext","ifNotUndef","getBlockPackInfo","computableFromCfgOrRF","extractCodeWithInfo"],"mappings":";;;;;;;;;;;;;SAgCgB,kBAAkB,CAChC,YAAyB,EACzB,OAAe,EACf,IAAoB,EAAA;IAEpB,IAAI,IAAI,KAAK,SAAS;AACpB,QAAA,OAAOA,qBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;YAC1E,GAAG,EAAE,CAAA,OAAA,EAAUC,2BAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;AACjE,SAAA,CAAC;IAEJ,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;IAC9C,MAAM,GAAG,GAAGC,uCAA6B,CAAC,YAAY,EAAE,OAAO,CAAC;IAChE,MAAM,gBAAgB,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;;IAE/C,MAAM,YAAY,GAAG,gBAAgB,KAAK,SAAS,GAAGC,oBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,SAAS;IAC1G,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,iBAAiB,CAAeC,gCAAkB,CAAC,OAAO,CAAC,CAAC;QACxE,YAAY;KACb;AACH;SAEgB,YAAY,CAC1B,YAAyB,EACzB,OAAe,EACf,GAA2B,EAAA;AAE3B,IAAA,MAAM,GAAG,GAAG,UAAU,GAAGH,2BAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO;AAC7E,IAAA,OAAOD,qBAAU,CAAC,IAAI,CACpB,CAAC,CAAC,KAAI;AACJ,QAAA,IAAIK,mBAAa,EAAE,CAAC,uBAAuB,EAAE;AAC3C,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,4BAAA,EAA+B,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,eAAe,CAAA,aAAA,CAAe,CAAC;QAC/G;QAEA,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;QAC3C,MAAM,GAAG,GAAGC,+BAAqB,CAAC,YAAY,EAAE,OAAO,CAAC;AAExD,QAAA,OAAOC,eAAU,CAACC,uBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAI;YAClE,MAAM,OAAO,GAAoC,EAAE;AACnD,YAAA,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC3D,gBAAA,MAAM,gBAAgB,GAAGC,4BAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAEC,yBAAmB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACjG,gBAAA,OAAO,CAAC,MAAM,CAAC,GAAGV,qBAAU,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC7D;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;IACJ,CAAC,EACD,EAAE,GAAG,EAAE,CACR,CAAC,cAAc,EAAE;AACpB;;;;;"}
1
+ {"version":3,"file":"block.cjs","sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { blockArgsAuthorKey } from \"../model/project_model\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { AuthorMarker, BlockStateInternalV3 } from \"@milaboratories/pl-model-middle-layer\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport { resourceIdToString } from \"@milaboratories/pl-client\";\nimport { deepFreeze } from \"@milaboratories/ts-helpers\";\nimport { extractCodeWithInfo } from \"@platforma-sdk/model\";\nimport { getDebugFlags } from \"../debug\";\n\nexport type BlockParameters = Omit<BlockStateInternalV3, \"outputs\" | \"navigationState\">;\n\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n): Computable<BlockParameters>;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx,\n): BlockParameters;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockParameters | Computable<BlockParameters> {\n if (cCtx === undefined)\n return Computable.make((c) => getBlockParameters(projectEntry, blockId, c), {\n key: `inputs#${resourceIdToString(projectEntry.rid)}#${blockId}`,\n });\n\n const prj = cCtx.accessor(projectEntry).node();\n const ctx = constructBlockContextArgsOnly(projectEntry, blockId);\n const blockStorageJson = ctx.blockStorage(cCtx);\n // Parse raw storage JSON - UI will derive data using sdk/model\n const blockStorage =\n blockStorageJson !== undefined ? deepFreeze(JSON.parse(blockStorageJson)) : undefined;\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n blockStorage,\n };\n}\n\nexport function blockOutputs(\n projectEntry: PlTreeEntry,\n blockId: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<Record<string, ComputableValueOrErrors<unknown>>> {\n const key = \"outputs#\" + resourceIdToString(projectEntry.rid) + \"#\" + blockId;\n return Computable.make(\n (c) => {\n if (getDebugFlags().logOutputRecalculations) {\n console.log(\n `blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`,\n );\n }\n\n const prj = c.accessor(projectEntry).node();\n const ctx = constructBlockContext(projectEntry, blockId);\n\n return ifNotUndef(getBlockPackInfo(prj, blockId), ({ cfg, bpId }) => {\n const outputs: Record<string, Computable<any>> = {};\n for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {\n const computableOutput = computableFromCfgOrRF(\n env,\n ctx,\n cellCfg,\n extractCodeWithInfo(cfg),\n bpId,\n );\n outputs[cellId] = Computable.wrapError(computableOutput, 1);\n }\n return outputs;\n });\n },\n { key },\n ).withStableType();\n}\n"],"names":["Computable","resourceIdToString","constructBlockContextArgsOnly","deepFreeze","blockArgsAuthorKey","getDebugFlags","constructBlockContext","ifNotUndef","getBlockPackInfo","computableFromCfgOrRF","extractCodeWithInfo"],"mappings":";;;;;;;;;;;;;SA8BgB,kBAAkB,CAChC,YAAyB,EACzB,OAAe,EACf,IAAoB,EAAA;IAEpB,IAAI,IAAI,KAAK,SAAS;AACpB,QAAA,OAAOA,qBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;YAC1E,GAAG,EAAE,CAAA,OAAA,EAAUC,2BAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;AACjE,SAAA,CAAC;IAEJ,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;IAC9C,MAAM,GAAG,GAAGC,uCAA6B,CAAC,YAAY,EAAE,OAAO,CAAC;IAChE,MAAM,gBAAgB,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;;IAE/C,MAAM,YAAY,GAChB,gBAAgB,KAAK,SAAS,GAAGC,oBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,SAAS;IACvF,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,iBAAiB,CAAeC,gCAAkB,CAAC,OAAO,CAAC,CAAC;QACxE,YAAY;KACb;AACH;SAEgB,YAAY,CAC1B,YAAyB,EACzB,OAAe,EACf,GAA2B,EAAA;AAE3B,IAAA,MAAM,GAAG,GAAG,UAAU,GAAGH,2BAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO;AAC7E,IAAA,OAAOD,qBAAU,CAAC,IAAI,CACpB,CAAC,CAAC,KAAI;AACJ,QAAA,IAAIK,mBAAa,EAAE,CAAC,uBAAuB,EAAE;AAC3C,YAAA,OAAO,CAAC,GAAG,CACT,CAAA,4BAAA,EAA+B,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,eAAe,CAAA,aAAA,CAAe,CACjG;QACH;QAEA,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;QAC3C,MAAM,GAAG,GAAGC,+BAAqB,CAAC,YAAY,EAAE,OAAO,CAAC;AAExD,QAAA,OAAOC,eAAU,CAACC,uBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAI;YAClE,MAAM,OAAO,GAAoC,EAAE;AACnD,YAAA,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC3D,gBAAA,MAAM,gBAAgB,GAAGC,4BAAqB,CAC5C,GAAG,EACH,GAAG,EACH,OAAO,EACPC,yBAAmB,CAAC,GAAG,CAAC,EACxB,IAAI,CACL;AACD,gBAAA,OAAO,CAAC,MAAM,CAAC,GAAGV,qBAAU,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC7D;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;IACJ,CAAC,EACD,EAAE,GAAG,EAAE,CACR,CAAC,cAAc,EAAE;AACpB;;;;;"}