@milaboratories/pl-middle-layer 1.42.2 → 1.42.3

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 (410) hide show
  1. package/dist/block_registry/index.d.ts +0 -1
  2. package/dist/block_registry/registry-v2-provider.cjs +22 -0
  3. package/dist/block_registry/registry-v2-provider.cjs.map +1 -0
  4. package/dist/block_registry/registry-v2-provider.d.ts +0 -1
  5. package/dist/block_registry/registry-v2-provider.js +20 -0
  6. package/dist/block_registry/registry-v2-provider.js.map +1 -0
  7. package/dist/block_registry/registry.cjs +231 -0
  8. package/dist/block_registry/registry.cjs.map +1 -0
  9. package/dist/block_registry/registry.d.ts +0 -1
  10. package/dist/block_registry/registry.js +227 -0
  11. package/dist/block_registry/registry.js.map +1 -0
  12. package/dist/block_registry/registry.test.d.ts +0 -1
  13. package/dist/block_registry/watcher.cjs +174 -0
  14. package/dist/block_registry/watcher.cjs.map +1 -0
  15. package/dist/block_registry/watcher.d.ts +0 -1
  16. package/dist/block_registry/watcher.js +171 -0
  17. package/dist/block_registry/watcher.js.map +1 -0
  18. package/dist/block_registry/well_known_registries.cjs +19 -0
  19. package/dist/block_registry/well_known_registries.cjs.map +1 -0
  20. package/dist/block_registry/well_known_registries.d.ts +0 -1
  21. package/dist/block_registry/well_known_registries.js +15 -0
  22. package/dist/block_registry/well_known_registries.js.map +1 -0
  23. package/dist/cfg_render/executor.cjs +159 -0
  24. package/dist/cfg_render/executor.cjs.map +1 -0
  25. package/dist/cfg_render/executor.d.ts +0 -1
  26. package/dist/cfg_render/executor.js +156 -0
  27. package/dist/cfg_render/executor.js.map +1 -0
  28. package/dist/cfg_render/executor.test.d.ts +0 -1
  29. package/dist/cfg_render/operation.d.ts +0 -1
  30. package/dist/cfg_render/renderer.cjs +528 -0
  31. package/dist/cfg_render/renderer.cjs.map +1 -0
  32. package/dist/cfg_render/renderer.d.ts +0 -1
  33. package/dist/cfg_render/renderer.js +525 -0
  34. package/dist/cfg_render/renderer.js.map +1 -0
  35. package/dist/cfg_render/traverse.cjs +65 -0
  36. package/dist/cfg_render/traverse.cjs.map +1 -0
  37. package/dist/cfg_render/traverse.d.ts +0 -1
  38. package/dist/cfg_render/traverse.js +63 -0
  39. package/dist/cfg_render/traverse.js.map +1 -0
  40. package/dist/cfg_render/util.cjs +32 -0
  41. package/dist/cfg_render/util.cjs.map +1 -0
  42. package/dist/cfg_render/util.d.ts +0 -1
  43. package/dist/cfg_render/util.js +28 -0
  44. package/dist/cfg_render/util.js.map +1 -0
  45. package/dist/debug/index.cjs +21 -0
  46. package/dist/debug/index.cjs.map +1 -0
  47. package/dist/debug/index.d.ts +0 -1
  48. package/dist/debug/index.js +19 -0
  49. package/dist/debug/index.js.map +1 -0
  50. package/dist/dev_env/index.cjs +59 -0
  51. package/dist/dev_env/index.cjs.map +1 -0
  52. package/dist/dev_env/index.d.ts +0 -1
  53. package/dist/dev_env/index.js +48 -0
  54. package/dist/dev_env/index.js.map +1 -0
  55. package/dist/dev_env/util.cjs +37 -0
  56. package/dist/dev_env/util.cjs.map +1 -0
  57. package/dist/dev_env/util.d.ts +0 -1
  58. package/dist/dev_env/util.js +16 -0
  59. package/dist/dev_env/util.js.map +1 -0
  60. package/dist/index.cjs +74 -0
  61. package/dist/index.cjs.map +1 -0
  62. package/dist/index.d.ts +0 -1
  63. package/dist/index.js +15 -75
  64. package/dist/index.js.map +1 -1
  65. package/dist/js_render/computable_context.cjs +525 -0
  66. package/dist/js_render/computable_context.cjs.map +1 -0
  67. package/dist/js_render/computable_context.d.ts +0 -1
  68. package/dist/js_render/computable_context.js +523 -0
  69. package/dist/js_render/computable_context.js.map +1 -0
  70. package/dist/js_render/context.cjs +229 -0
  71. package/dist/js_render/context.cjs.map +1 -0
  72. package/dist/js_render/context.d.ts +0 -1
  73. package/dist/js_render/context.js +226 -0
  74. package/dist/js_render/context.js.map +1 -0
  75. package/dist/js_render/index.cjs +163 -0
  76. package/dist/js_render/index.cjs.map +1 -0
  77. package/dist/js_render/index.d.ts +0 -1
  78. package/dist/js_render/index.js +160 -0
  79. package/dist/js_render/index.js.map +1 -0
  80. package/dist/middle_layer/active_cfg.cjs +37 -0
  81. package/dist/middle_layer/active_cfg.cjs.map +1 -0
  82. package/dist/middle_layer/active_cfg.d.ts +0 -1
  83. package/dist/middle_layer/active_cfg.js +35 -0
  84. package/dist/middle_layer/active_cfg.js.map +1 -0
  85. package/dist/middle_layer/block.cjs +51 -0
  86. package/dist/middle_layer/block.cjs.map +1 -0
  87. package/dist/middle_layer/block.d.ts +0 -1
  88. package/dist/middle_layer/block.js +48 -0
  89. package/dist/middle_layer/block.js.map +1 -0
  90. package/dist/middle_layer/block_ctx.cjs +87 -0
  91. package/dist/middle_layer/block_ctx.cjs.map +1 -0
  92. package/dist/middle_layer/block_ctx.d.ts +0 -1
  93. package/dist/middle_layer/block_ctx.js +84 -0
  94. package/dist/middle_layer/block_ctx.js.map +1 -0
  95. package/dist/middle_layer/block_ctx_unsafe.cjs +19 -0
  96. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -0
  97. package/dist/middle_layer/block_ctx_unsafe.d.ts +0 -1
  98. package/dist/middle_layer/block_ctx_unsafe.js +16 -0
  99. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -0
  100. package/dist/middle_layer/driver_kit.cjs +42 -0
  101. package/dist/middle_layer/driver_kit.cjs.map +1 -0
  102. package/dist/middle_layer/driver_kit.d.ts +0 -1
  103. package/dist/middle_layer/driver_kit.js +40 -0
  104. package/dist/middle_layer/driver_kit.js.map +1 -0
  105. package/dist/middle_layer/frontend_path.cjs +64 -0
  106. package/dist/middle_layer/frontend_path.cjs.map +1 -0
  107. package/dist/middle_layer/frontend_path.d.ts +0 -1
  108. package/dist/middle_layer/frontend_path.js +62 -0
  109. package/dist/middle_layer/frontend_path.js.map +1 -0
  110. package/dist/middle_layer/index.d.ts +0 -1
  111. package/dist/middle_layer/middle_layer.cjs +226 -0
  112. package/dist/middle_layer/middle_layer.cjs.map +1 -0
  113. package/dist/middle_layer/middle_layer.d.ts +0 -1
  114. package/dist/middle_layer/middle_layer.js +224 -0
  115. package/dist/middle_layer/middle_layer.js.map +1 -0
  116. package/dist/middle_layer/navigation_states.cjs +41 -0
  117. package/dist/middle_layer/navigation_states.cjs.map +1 -0
  118. package/dist/middle_layer/navigation_states.d.ts +0 -1
  119. package/dist/middle_layer/navigation_states.js +39 -0
  120. package/dist/middle_layer/navigation_states.js.map +1 -0
  121. package/dist/middle_layer/ops.cjs +75 -0
  122. package/dist/middle_layer/ops.cjs.map +1 -0
  123. package/dist/middle_layer/ops.d.ts +0 -1
  124. package/dist/middle_layer/ops.js +70 -0
  125. package/dist/middle_layer/ops.js.map +1 -0
  126. package/dist/middle_layer/project.cjs +446 -0
  127. package/dist/middle_layer/project.cjs.map +1 -0
  128. package/dist/middle_layer/project.d.ts +0 -1
  129. package/dist/middle_layer/project.js +444 -0
  130. package/dist/middle_layer/project.js.map +1 -0
  131. package/dist/middle_layer/project_list.cjs +53 -0
  132. package/dist/middle_layer/project_list.cjs.map +1 -0
  133. package/dist/middle_layer/project_list.d.ts +0 -1
  134. package/dist/middle_layer/project_list.js +48 -0
  135. package/dist/middle_layer/project_list.js.map +1 -0
  136. package/dist/middle_layer/project_overview.cjs +225 -0
  137. package/dist/middle_layer/project_overview.cjs.map +1 -0
  138. package/dist/middle_layer/project_overview.d.ts +0 -1
  139. package/dist/middle_layer/project_overview.js +204 -0
  140. package/dist/middle_layer/project_overview.js.map +1 -0
  141. package/dist/middle_layer/project_overview_light.cjs +20 -0
  142. package/dist/middle_layer/project_overview_light.cjs.map +1 -0
  143. package/dist/middle_layer/project_overview_light.d.ts +0 -1
  144. package/dist/middle_layer/project_overview_light.js +18 -0
  145. package/dist/middle_layer/project_overview_light.js.map +1 -0
  146. package/dist/middle_layer/render.cjs +26 -0
  147. package/dist/middle_layer/render.cjs.map +1 -0
  148. package/dist/middle_layer/render.d.ts +0 -1
  149. package/dist/middle_layer/render.js +23 -0
  150. package/dist/middle_layer/render.js.map +1 -0
  151. package/dist/middle_layer/render.test.d.ts +0 -1
  152. package/dist/middle_layer/types.d.ts +0 -1
  153. package/dist/middle_layer/util.cjs +22 -0
  154. package/dist/middle_layer/util.cjs.map +1 -0
  155. package/dist/middle_layer/util.d.ts +0 -1
  156. package/dist/middle_layer/util.js +20 -0
  157. package/dist/middle_layer/util.js.map +1 -0
  158. package/dist/model/args.cjs +62 -0
  159. package/dist/model/args.cjs.map +1 -0
  160. package/dist/model/args.d.ts +0 -1
  161. package/dist/model/args.js +58 -0
  162. package/dist/model/args.js.map +1 -0
  163. package/dist/model/block_pack.d.ts +0 -1
  164. package/dist/model/block_pack_spec.cjs +11 -0
  165. package/dist/model/block_pack_spec.cjs.map +1 -0
  166. package/dist/model/block_pack_spec.d.ts +0 -1
  167. package/dist/model/block_pack_spec.js +8 -0
  168. package/dist/model/block_pack_spec.js.map +1 -0
  169. package/dist/model/frontend.d.ts +0 -1
  170. package/dist/model/index.d.ts +0 -1
  171. package/dist/model/project_helper.cjs +36 -0
  172. package/dist/model/project_helper.cjs.map +1 -0
  173. package/dist/model/project_helper.d.ts +0 -1
  174. package/dist/model/project_helper.js +34 -0
  175. package/dist/model/project_helper.js.map +1 -0
  176. package/dist/model/project_model.cjs +74 -0
  177. package/dist/model/project_model.cjs.map +1 -0
  178. package/dist/model/project_model.d.ts +0 -1
  179. package/dist/model/project_model.js +54 -0
  180. package/dist/model/project_model.js.map +1 -0
  181. package/dist/model/project_model.test.d.ts +0 -1
  182. package/dist/model/project_model_util.cjs +176 -0
  183. package/dist/model/project_model_util.cjs.map +1 -0
  184. package/dist/model/project_model_util.d.ts +0 -1
  185. package/dist/model/project_model_util.js +170 -0
  186. package/dist/model/project_model_util.js.map +1 -0
  187. package/dist/model/project_model_util.test.d.ts +0 -1
  188. package/dist/model/project_model_v1.cjs +9 -0
  189. package/dist/model/project_model_v1.cjs.map +1 -0
  190. package/dist/model/project_model_v1.d.ts +0 -1
  191. package/dist/model/project_model_v1.js +6 -0
  192. package/dist/model/project_model_v1.js.map +1 -0
  193. package/dist/model/template_spec.d.ts +0 -1
  194. package/dist/mutator/block-pack/block_pack.cjs +233 -0
  195. package/dist/mutator/block-pack/block_pack.cjs.map +1 -0
  196. package/dist/mutator/block-pack/block_pack.d.ts +0 -1
  197. package/dist/mutator/block-pack/block_pack.js +227 -0
  198. package/dist/mutator/block-pack/block_pack.js.map +1 -0
  199. package/dist/mutator/block-pack/block_pack.test.d.ts +0 -1
  200. package/dist/mutator/block-pack/frontend.cjs +21 -0
  201. package/dist/mutator/block-pack/frontend.cjs.map +1 -0
  202. package/dist/mutator/block-pack/frontend.d.ts +0 -1
  203. package/dist/mutator/block-pack/frontend.js +19 -0
  204. package/dist/mutator/block-pack/frontend.js.map +1 -0
  205. package/dist/mutator/context_export.cjs +26 -0
  206. package/dist/mutator/context_export.cjs.map +1 -0
  207. package/dist/mutator/context_export.d.ts +2 -3
  208. package/dist/mutator/context_export.js +23 -0
  209. package/dist/mutator/context_export.js.map +1 -0
  210. package/dist/mutator/migration.cjs +57 -0
  211. package/dist/mutator/migration.cjs.map +1 -0
  212. package/dist/mutator/migration.d.ts +0 -1
  213. package/dist/mutator/migration.js +55 -0
  214. package/dist/mutator/migration.js.map +1 -0
  215. package/dist/mutator/project.cjs +997 -0
  216. package/dist/mutator/project.cjs.map +1 -0
  217. package/dist/mutator/project.d.ts +0 -1
  218. package/dist/mutator/project.js +992 -0
  219. package/dist/mutator/project.js.map +1 -0
  220. package/dist/mutator/project.test.d.ts +0 -1
  221. package/dist/mutator/template/direct_template_loader.cjs +146 -0
  222. package/dist/mutator/template/direct_template_loader.cjs.map +1 -0
  223. package/dist/mutator/template/direct_template_loader.d.ts +0 -1
  224. package/dist/mutator/template/direct_template_loader.js +143 -0
  225. package/dist/mutator/template/direct_template_loader.js.map +1 -0
  226. package/dist/mutator/template/direct_template_loader_v3.cjs +139 -0
  227. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -0
  228. package/dist/mutator/template/direct_template_loader_v3.d.ts +0 -1
  229. package/dist/mutator/template/direct_template_loader_v3.js +137 -0
  230. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -0
  231. package/dist/mutator/template/render_block.cjs +43 -0
  232. package/dist/mutator/template/render_block.cjs.map +1 -0
  233. package/dist/mutator/template/render_block.d.ts +0 -1
  234. package/dist/mutator/template/render_block.js +34 -0
  235. package/dist/mutator/template/render_block.js.map +1 -0
  236. package/dist/mutator/template/render_template.cjs +35 -0
  237. package/dist/mutator/template/render_template.cjs.map +1 -0
  238. package/dist/mutator/template/render_template.d.ts +0 -1
  239. package/dist/mutator/template/render_template.js +33 -0
  240. package/dist/mutator/template/render_template.js.map +1 -0
  241. package/dist/mutator/template/template_loading.cjs +71 -0
  242. package/dist/mutator/template/template_loading.cjs.map +1 -0
  243. package/dist/mutator/template/template_loading.d.ts +0 -1
  244. package/dist/mutator/template/template_loading.js +60 -0
  245. package/dist/mutator/template/template_loading.js.map +1 -0
  246. package/dist/mutator/template/template_render.test.d.ts +0 -1
  247. package/dist/network_check/network_check.cjs +267 -0
  248. package/dist/network_check/network_check.cjs.map +1 -0
  249. package/dist/network_check/network_check.d.ts +0 -1
  250. package/dist/network_check/network_check.js +264 -0
  251. package/dist/network_check/network_check.js.map +1 -0
  252. package/dist/network_check/network_check.test.d.ts +0 -1
  253. package/dist/network_check/pings.cjs +107 -0
  254. package/dist/network_check/pings.cjs.map +1 -0
  255. package/dist/network_check/pings.d.ts +0 -1
  256. package/dist/network_check/pings.js +96 -0
  257. package/dist/network_check/pings.js.map +1 -0
  258. package/dist/network_check/template.cjs +318 -0
  259. package/dist/network_check/template.cjs.map +1 -0
  260. package/dist/network_check/template.d.ts +0 -1
  261. package/dist/network_check/template.js +302 -0
  262. package/dist/network_check/template.js.map +1 -0
  263. package/dist/network_check/template.test.d.ts +0 -1
  264. package/dist/network_check/test_utils.d.ts +0 -1
  265. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs +77 -0
  266. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs.map +1 -0
  267. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js +74 -0
  268. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js.map +1 -0
  269. package/dist/pool/data.cjs +298 -0
  270. package/dist/pool/data.cjs.map +1 -0
  271. package/dist/pool/data.d.ts +7 -9
  272. package/dist/pool/data.js +282 -0
  273. package/dist/pool/data.js.map +1 -0
  274. package/dist/pool/driver.cjs +620 -0
  275. package/dist/pool/driver.cjs.map +1 -0
  276. package/dist/pool/driver.d.ts +0 -1
  277. package/dist/pool/driver.js +598 -0
  278. package/dist/pool/driver.js.map +1 -0
  279. package/dist/pool/index.d.ts +0 -1
  280. package/dist/pool/p_object_collection.cjs +87 -0
  281. package/dist/pool/p_object_collection.cjs.map +1 -0
  282. package/dist/pool/p_object_collection.d.ts +0 -1
  283. package/dist/pool/p_object_collection.js +84 -0
  284. package/dist/pool/p_object_collection.js.map +1 -0
  285. package/dist/pool/ref_count_pool.cjs +58 -0
  286. package/dist/pool/ref_count_pool.cjs.map +1 -0
  287. package/dist/pool/ref_count_pool.d.ts +0 -1
  288. package/dist/pool/ref_count_pool.js +56 -0
  289. package/dist/pool/ref_count_pool.js.map +1 -0
  290. package/dist/pool/result_pool.cjs +265 -0
  291. package/dist/pool/result_pool.cjs.map +1 -0
  292. package/dist/pool/result_pool.d.ts +0 -1
  293. package/dist/pool/result_pool.js +263 -0
  294. package/dist/pool/result_pool.js.map +1 -0
  295. package/dist/test/block_packs.d.ts +0 -1
  296. package/dist/test/explicit_templates.d.ts +0 -1
  297. package/dist/test/known_templates.d.ts +0 -1
  298. package/dist/test_env.d.ts +0 -1
  299. package/dist/worker/WorkerManager.cjs +53 -0
  300. package/dist/worker/WorkerManager.cjs.map +1 -0
  301. package/dist/worker/WorkerManager.d.ts +0 -1
  302. package/dist/worker/WorkerManager.js +51 -0
  303. package/dist/worker/WorkerManager.js.map +1 -0
  304. package/dist/worker/worker.cjs +16 -0
  305. package/dist/worker/worker.cjs.map +1 -0
  306. package/dist/worker/worker.d.ts +0 -1
  307. package/dist/worker/worker.js +14 -0
  308. package/dist/worker/worker.js.map +1 -0
  309. package/dist/worker/workerApi.cjs +20 -0
  310. package/dist/worker/workerApi.cjs.map +1 -0
  311. package/dist/worker/workerApi.d.ts +1 -3
  312. package/dist/worker/workerApi.js +18 -0
  313. package/dist/worker/workerApi.js.map +1 -0
  314. package/package.json +26 -34
  315. package/src/cfg_render/executor.test.ts +5 -4
  316. package/src/model/project_model.test.ts +3 -3
  317. package/src/model/project_model_util.test.ts +3 -2
  318. package/src/mutator/block-pack/block_pack.test.ts +5 -4
  319. package/src/mutator/project.test.ts +4 -4
  320. package/src/mutator/template/template_render.test.ts +7 -6
  321. package/src/network_check/network_check.test.ts +1 -0
  322. package/src/network_check/test_utils.ts +2 -0
  323. package/src/worker/WorkerManager.ts +6 -8
  324. package/dist/block_registry/index.d.ts.map +0 -1
  325. package/dist/block_registry/registry-v2-provider.d.ts.map +0 -1
  326. package/dist/block_registry/registry.d.ts.map +0 -1
  327. package/dist/block_registry/registry.test.d.ts.map +0 -1
  328. package/dist/block_registry/watcher.d.ts.map +0 -1
  329. package/dist/block_registry/well_known_registries.d.ts.map +0 -1
  330. package/dist/cfg_render/executor.d.ts.map +0 -1
  331. package/dist/cfg_render/executor.test.d.ts.map +0 -1
  332. package/dist/cfg_render/operation.d.ts.map +0 -1
  333. package/dist/cfg_render/renderer.d.ts.map +0 -1
  334. package/dist/cfg_render/traverse.d.ts.map +0 -1
  335. package/dist/cfg_render/util.d.ts.map +0 -1
  336. package/dist/debug/index.d.ts.map +0 -1
  337. package/dist/dev_env/index.d.ts.map +0 -1
  338. package/dist/dev_env/util.d.ts.map +0 -1
  339. package/dist/index.d.ts.map +0 -1
  340. package/dist/index.mjs +0 -6742
  341. package/dist/index.mjs.map +0 -1
  342. package/dist/js_render/computable_context.d.ts.map +0 -1
  343. package/dist/js_render/context.d.ts.map +0 -1
  344. package/dist/js_render/index.d.ts.map +0 -1
  345. package/dist/middle_layer/active_cfg.d.ts.map +0 -1
  346. package/dist/middle_layer/block.d.ts.map +0 -1
  347. package/dist/middle_layer/block_ctx.d.ts.map +0 -1
  348. package/dist/middle_layer/block_ctx_unsafe.d.ts.map +0 -1
  349. package/dist/middle_layer/driver_kit.d.ts.map +0 -1
  350. package/dist/middle_layer/frontend_path.d.ts.map +0 -1
  351. package/dist/middle_layer/index.d.ts.map +0 -1
  352. package/dist/middle_layer/middle_layer.d.ts.map +0 -1
  353. package/dist/middle_layer/navigation_states.d.ts.map +0 -1
  354. package/dist/middle_layer/ops.d.ts.map +0 -1
  355. package/dist/middle_layer/project.d.ts.map +0 -1
  356. package/dist/middle_layer/project_list.d.ts.map +0 -1
  357. package/dist/middle_layer/project_overview.d.ts.map +0 -1
  358. package/dist/middle_layer/project_overview_light.d.ts.map +0 -1
  359. package/dist/middle_layer/render.d.ts.map +0 -1
  360. package/dist/middle_layer/render.test.d.ts.map +0 -1
  361. package/dist/middle_layer/types.d.ts.map +0 -1
  362. package/dist/middle_layer/util.d.ts.map +0 -1
  363. package/dist/model/args.d.ts.map +0 -1
  364. package/dist/model/block_pack.d.ts.map +0 -1
  365. package/dist/model/block_pack_spec.d.ts.map +0 -1
  366. package/dist/model/frontend.d.ts.map +0 -1
  367. package/dist/model/index.d.ts.map +0 -1
  368. package/dist/model/project_helper.d.ts.map +0 -1
  369. package/dist/model/project_model.d.ts.map +0 -1
  370. package/dist/model/project_model.test.d.ts.map +0 -1
  371. package/dist/model/project_model_util.d.ts.map +0 -1
  372. package/dist/model/project_model_util.test.d.ts.map +0 -1
  373. package/dist/model/project_model_v1.d.ts.map +0 -1
  374. package/dist/model/template_spec.d.ts.map +0 -1
  375. package/dist/mutator/block-pack/block_pack.d.ts.map +0 -1
  376. package/dist/mutator/block-pack/block_pack.test.d.ts.map +0 -1
  377. package/dist/mutator/block-pack/frontend.d.ts.map +0 -1
  378. package/dist/mutator/context_export.d.ts.map +0 -1
  379. package/dist/mutator/migration.d.ts.map +0 -1
  380. package/dist/mutator/project.d.ts.map +0 -1
  381. package/dist/mutator/project.test.d.ts.map +0 -1
  382. package/dist/mutator/template/direct_template_loader.d.ts.map +0 -1
  383. package/dist/mutator/template/direct_template_loader_v3.d.ts.map +0 -1
  384. package/dist/mutator/template/render_block.d.ts.map +0 -1
  385. package/dist/mutator/template/render_template.d.ts.map +0 -1
  386. package/dist/mutator/template/template_loading.d.ts.map +0 -1
  387. package/dist/mutator/template/template_render.test.d.ts.map +0 -1
  388. package/dist/network_check/network_check.d.ts.map +0 -1
  389. package/dist/network_check/network_check.test.d.ts.map +0 -1
  390. package/dist/network_check/pings.d.ts.map +0 -1
  391. package/dist/network_check/template.d.ts.map +0 -1
  392. package/dist/network_check/template.test.d.ts.map +0 -1
  393. package/dist/network_check/test_utils.d.ts.map +0 -1
  394. package/dist/pool/data.d.ts.map +0 -1
  395. package/dist/pool/driver.d.ts.map +0 -1
  396. package/dist/pool/index.d.ts.map +0 -1
  397. package/dist/pool/p_object_collection.d.ts.map +0 -1
  398. package/dist/pool/ref_count_pool.d.ts.map +0 -1
  399. package/dist/pool/result_pool.d.ts.map +0 -1
  400. package/dist/test/block_packs.d.ts.map +0 -1
  401. package/dist/test/explicit_templates.d.ts.map +0 -1
  402. package/dist/test/known_templates.d.ts.map +0 -1
  403. package/dist/test_env.d.ts.map +0 -1
  404. package/dist/worker/WorkerManager.d.ts.map +0 -1
  405. package/dist/worker/worker.d.ts.map +0 -1
  406. package/dist/worker/workerApi.d.ts.map +0 -1
  407. package/dist/worker.js +0 -2
  408. package/dist/worker.js.map +0 -1
  409. package/dist/worker.mjs +0 -20
  410. package/dist/worker.mjs.map +0 -1
@@ -0,0 +1,163 @@
1
+ 'use strict';
2
+
3
+ var computable = require('@milaboratories/computable');
4
+ var quickjsEmscripten = require('quickjs-emscripten');
5
+ var context = require('./context.cjs');
6
+ var index = require('../debug/index.cjs');
7
+
8
+ function logOutputStatus(handle, renderedResult, stable, recalculationCounter, unstableMarker) {
9
+ if (index.getDebugFlags().logOutputStatus && (index.getDebugFlags().logOutputStatus === 'any' || !stable)) {
10
+ if (stable)
11
+ console.log(`Stable output ${handle} calculated ${renderedResult !== undefined ? 'defined' : 'undefined'}; (#${recalculationCounter})`);
12
+ else
13
+ console.log(`Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? 'defined' : 'undefined'} (#${recalculationCounter})`);
14
+ }
15
+ }
16
+ /**
17
+ * Creates a Computable that executes a render function (`fh`) from a block's code in a QuickJS virtual machine.
18
+ * This function handles both synchronous and asynchronous execution patterns of the sandboxed JS code.
19
+ *
20
+ * The overall data flow is as follows:
21
+ * 1. A QuickJS VM is initialized.
22
+ * 2. A `JsExecutionContext` is created to bridge the host (TypeScript) and guest (QuickJS) environments. It injects a
23
+ * context object (`cfgRenderCtx`) into the VM, providing helper methods for the sandboxed code to interact with the
24
+ * platform (e.g., to request data).
25
+ * 3. The block's Javascript bundle is evaluated in the VM.
26
+ * 4. The specified render function (`fh.handle`) is executed.
27
+ *
28
+ * Two execution paths are possible depending on the behavior of the render function:
29
+ *
30
+ * ### Synchronous Path
31
+ * If the render function computes its result without requesting any external data requiring asynchronous calculations,
32
+ * it executes synchronously.
33
+ * - The `computablesToResolve` map in `JsExecutionContext` remains empty.
34
+ * - The function returns an object with an `ir` field holding the result (`{ ir: importedResult }`).
35
+ * Since `postprocessValue` is not specified, `ir` is treated as the final resolved value of the Computable.
36
+ * - The QuickJS VM is disposed of immediately as it's no longer needed.
37
+ *
38
+ * ### Asynchronous Path (with `postprocessValue`)
39
+ * If the render function needs external data requiring asynchronous calculations (e.g., fetching a file), it calls
40
+ * one of the injected helper methods. These methods don't return data directly. Instead, they:
41
+ * a. Create a new `Computable` for the data request (e.g., to fetch a blob).
42
+ * b. Register this new `Computable` in the `computablesToResolve` map.
43
+ * c. Return a handle (string) to the sandboxed code.
44
+ *
45
+ * In this case:
46
+ * - The initial execution of the render function returns a scaffold of the final result, which depends on the pending
47
+ * computables.
48
+ * - The `computablesToResolve` map is passed as the `ir` (initial result) to `Computable.makeRaw`.
49
+ * - The `postprocessValue` function is provided to handle the results once the computables are resolved.
50
+ * - The QuickJS VM is kept alive (`keepVmAlive = true`) because its state is needed in `postprocessValue`.
51
+ * - Once the `computable` framework resolves all dependencies, it calls `postprocessValue` with the resolved data.
52
+ * - `postprocessValue` feeds the resolved data back into the VM, allowing the sandboxed code to compute the final
53
+ * result.
54
+ * - The VM is eventually disposed of when the host Computable is destroyed.
55
+ *
56
+ * @param env The middle layer environment.
57
+ * @param ctx The block context.
58
+ * @param fh The config render lambda to execute.
59
+ * @param codeWithInfo The block's code and feature flags.
60
+ * @param configKey A key for the configuration, used for cache busting.
61
+ * @param ops Options for the computable.
62
+ * @returns A `Computable` that will resolve to the result of the lambda execution.
63
+ */
64
+ function computableFromRF(env, ctx, fh, codeWithInfo, configKey, ops = {}) {
65
+ const { code, featureFlags } = codeWithInfo;
66
+ // adding configKey to reload all outputs on block-pack update
67
+ const key = `${ctx.blockId}#lambda#${configKey}#${fh.handle}`;
68
+ ops = { ...ops, key };
69
+ if (ops.mode === undefined && fh.retentive === true)
70
+ ops.mode = 'StableOnlyRetentive';
71
+ return computable.Computable.makeRaw((cCtx) => {
72
+ if (index.getDebugFlags().logOutputRecalculations)
73
+ console.log(`Block lambda recalculation : ${key} (${cCtx.changeSourceMarker}; ${cCtx.bodyInvocations} invocations)`);
74
+ const scope = new quickjsEmscripten.Scope();
75
+ let keepVmAlive = false;
76
+ cCtx.addOnDestroy(() => {
77
+ // If keepVmAlive is false, the scope will be disposed by the finally block,
78
+ // no need to dispose it here.
79
+ if (keepVmAlive)
80
+ scope.dispose();
81
+ });
82
+ try {
83
+ const runtime = scope.manage(env.quickJs.newRuntime());
84
+ runtime.setMemoryLimit(1024 * 1024 * 8);
85
+ runtime.setMaxStackSize(1024 * 320);
86
+ let deadlineSettings;
87
+ runtime.setInterruptHandler(() => {
88
+ if (deadlineSettings === undefined)
89
+ return false;
90
+ if (Date.now() > deadlineSettings.deadline)
91
+ return true;
92
+ return false;
93
+ });
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 });
96
+ rCtx.evaluateBundle(code.content);
97
+ const result = rCtx.runCallback(fh.handle);
98
+ rCtx.resetComputableCtx();
99
+ const toBeResolved = rCtx.computableHelper.computablesToResolve;
100
+ if (Object.keys(toBeResolved).length === 0) {
101
+ const importedResult = rCtx.importObjectUniversal(result);
102
+ logOutputStatus(fh.handle, importedResult, cCtx.unstableMarker === undefined, -1, cCtx.unstableMarker);
103
+ return { ir: importedResult };
104
+ }
105
+ let recalculationCounter = 0;
106
+ if (index.getDebugFlags().logOutputStatus)
107
+ console.log(`Output ${fh.handle} scaffold calculated (not all computables resolved yet).`);
108
+ keepVmAlive = true;
109
+ return {
110
+ ir: toBeResolved,
111
+ postprocessValue: (resolved, { unstableMarker, stable }) => {
112
+ // resolving futures
113
+ for (const [handle, value] of Object.entries(resolved))
114
+ rCtx.runCallback(handle, value);
115
+ // rendering result
116
+ const renderedResult = rCtx.importObjectUniversal(result);
117
+ // logging
118
+ recalculationCounter++;
119
+ logOutputStatus(fh.handle, renderedResult, stable, recalculationCounter, unstableMarker);
120
+ return renderedResult;
121
+ },
122
+ };
123
+ }
124
+ catch (e) {
125
+ keepVmAlive = false;
126
+ throw e;
127
+ }
128
+ finally {
129
+ if (!keepVmAlive)
130
+ scope.dispose();
131
+ }
132
+ }, ops);
133
+ }
134
+ function executeSingleLambda(quickJs, fh, codeWithInfo, ...args) {
135
+ const { code, featureFlags } = codeWithInfo;
136
+ const scope = new quickjsEmscripten.Scope();
137
+ try {
138
+ const runtime = scope.manage(quickJs.newRuntime());
139
+ runtime.setMemoryLimit(1024 * 1024 * 8);
140
+ runtime.setMaxStackSize(1024 * 320);
141
+ let deadlineSettings;
142
+ runtime.setInterruptHandler(() => {
143
+ if (deadlineSettings === undefined)
144
+ return false;
145
+ if (Date.now() > deadlineSettings.deadline)
146
+ return true;
147
+ return false;
148
+ });
149
+ const vm = scope.manage(runtime.newContext());
150
+ const rCtx = new context.JsExecutionContext(scope, vm, (s) => { deadlineSettings = s; }, featureFlags);
151
+ // Initializing the model
152
+ rCtx.evaluateBundle(code.content);
153
+ // Running the lambda
154
+ return rCtx.importObjectUniversal(rCtx.runCallback(fh.handle, ...args));
155
+ }
156
+ finally {
157
+ scope.dispose();
158
+ }
159
+ }
160
+
161
+ exports.computableFromRF = computableFromRF;
162
+ exports.executeSingleLambda = executeSingleLambda;
163
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +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 const { code, featureFlags } = codeWithInfo;\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 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\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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"}
@@ -53,4 +53,3 @@ import { BlockContextAny } from '../middle_layer/block_ctx';
53
53
  */
54
54
  export declare function computableFromRF(env: MiddleLayerEnvironment, ctx: BlockContextAny, fh: ConfigRenderLambda, codeWithInfo: BlockCodeWithInfo, configKey: string, ops?: Partial<ComputableRenderingOps>): Computable<unknown>;
55
55
  export declare function executeSingleLambda(quickJs: QuickJSWASMModule, fh: ConfigRenderLambda, codeWithInfo: BlockCodeWithInfo, ...args: unknown[]): unknown;
56
- //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,160 @@
1
+ import { Computable } from '@milaboratories/computable';
2
+ import { Scope } from 'quickjs-emscripten';
3
+ import { JsExecutionContext } from './context.js';
4
+ import { getDebugFlags } from '../debug/index.js';
5
+
6
+ function logOutputStatus(handle, renderedResult, stable, recalculationCounter, unstableMarker) {
7
+ if (getDebugFlags().logOutputStatus && (getDebugFlags().logOutputStatus === 'any' || !stable)) {
8
+ if (stable)
9
+ console.log(`Stable output ${handle} calculated ${renderedResult !== undefined ? 'defined' : 'undefined'}; (#${recalculationCounter})`);
10
+ else
11
+ console.log(`Unstable output ${handle}; marker = ${unstableMarker}; ${renderedResult !== undefined ? 'defined' : 'undefined'} (#${recalculationCounter})`);
12
+ }
13
+ }
14
+ /**
15
+ * Creates a Computable that executes a render function (`fh`) from a block's code in a QuickJS virtual machine.
16
+ * This function handles both synchronous and asynchronous execution patterns of the sandboxed JS code.
17
+ *
18
+ * The overall data flow is as follows:
19
+ * 1. A QuickJS VM is initialized.
20
+ * 2. A `JsExecutionContext` is created to bridge the host (TypeScript) and guest (QuickJS) environments. It injects a
21
+ * context object (`cfgRenderCtx`) into the VM, providing helper methods for the sandboxed code to interact with the
22
+ * platform (e.g., to request data).
23
+ * 3. The block's Javascript bundle is evaluated in the VM.
24
+ * 4. The specified render function (`fh.handle`) is executed.
25
+ *
26
+ * Two execution paths are possible depending on the behavior of the render function:
27
+ *
28
+ * ### Synchronous Path
29
+ * If the render function computes its result without requesting any external data requiring asynchronous calculations,
30
+ * it executes synchronously.
31
+ * - The `computablesToResolve` map in `JsExecutionContext` remains empty.
32
+ * - The function returns an object with an `ir` field holding the result (`{ ir: importedResult }`).
33
+ * Since `postprocessValue` is not specified, `ir` is treated as the final resolved value of the Computable.
34
+ * - The QuickJS VM is disposed of immediately as it's no longer needed.
35
+ *
36
+ * ### Asynchronous Path (with `postprocessValue`)
37
+ * If the render function needs external data requiring asynchronous calculations (e.g., fetching a file), it calls
38
+ * one of the injected helper methods. These methods don't return data directly. Instead, they:
39
+ * a. Create a new `Computable` for the data request (e.g., to fetch a blob).
40
+ * b. Register this new `Computable` in the `computablesToResolve` map.
41
+ * c. Return a handle (string) to the sandboxed code.
42
+ *
43
+ * In this case:
44
+ * - The initial execution of the render function returns a scaffold of the final result, which depends on the pending
45
+ * computables.
46
+ * - The `computablesToResolve` map is passed as the `ir` (initial result) to `Computable.makeRaw`.
47
+ * - The `postprocessValue` function is provided to handle the results once the computables are resolved.
48
+ * - The QuickJS VM is kept alive (`keepVmAlive = true`) because its state is needed in `postprocessValue`.
49
+ * - Once the `computable` framework resolves all dependencies, it calls `postprocessValue` with the resolved data.
50
+ * - `postprocessValue` feeds the resolved data back into the VM, allowing the sandboxed code to compute the final
51
+ * result.
52
+ * - The VM is eventually disposed of when the host Computable is destroyed.
53
+ *
54
+ * @param env The middle layer environment.
55
+ * @param ctx The block context.
56
+ * @param fh The config render lambda to execute.
57
+ * @param codeWithInfo The block's code and feature flags.
58
+ * @param configKey A key for the configuration, used for cache busting.
59
+ * @param ops Options for the computable.
60
+ * @returns A `Computable` that will resolve to the result of the lambda execution.
61
+ */
62
+ function computableFromRF(env, ctx, fh, codeWithInfo, configKey, ops = {}) {
63
+ const { code, featureFlags } = codeWithInfo;
64
+ // adding configKey to reload all outputs on block-pack update
65
+ const key = `${ctx.blockId}#lambda#${configKey}#${fh.handle}`;
66
+ ops = { ...ops, key };
67
+ if (ops.mode === undefined && fh.retentive === true)
68
+ ops.mode = 'StableOnlyRetentive';
69
+ return Computable.makeRaw((cCtx) => {
70
+ if (getDebugFlags().logOutputRecalculations)
71
+ console.log(`Block lambda recalculation : ${key} (${cCtx.changeSourceMarker}; ${cCtx.bodyInvocations} invocations)`);
72
+ const scope = new Scope();
73
+ let keepVmAlive = false;
74
+ cCtx.addOnDestroy(() => {
75
+ // If keepVmAlive is false, the scope will be disposed by the finally block,
76
+ // no need to dispose it here.
77
+ if (keepVmAlive)
78
+ scope.dispose();
79
+ });
80
+ try {
81
+ const runtime = scope.manage(env.quickJs.newRuntime());
82
+ runtime.setMemoryLimit(1024 * 1024 * 8);
83
+ runtime.setMaxStackSize(1024 * 320);
84
+ let deadlineSettings;
85
+ runtime.setInterruptHandler(() => {
86
+ if (deadlineSettings === undefined)
87
+ return false;
88
+ if (Date.now() > deadlineSettings.deadline)
89
+ return true;
90
+ return false;
91
+ });
92
+ const vm = scope.manage(runtime.newContext());
93
+ const rCtx = new JsExecutionContext(scope, vm, (s) => { deadlineSettings = s; }, featureFlags, { computableCtx: cCtx, blockCtx: ctx, mlEnv: env });
94
+ rCtx.evaluateBundle(code.content);
95
+ const result = rCtx.runCallback(fh.handle);
96
+ rCtx.resetComputableCtx();
97
+ const toBeResolved = rCtx.computableHelper.computablesToResolve;
98
+ if (Object.keys(toBeResolved).length === 0) {
99
+ const importedResult = rCtx.importObjectUniversal(result);
100
+ logOutputStatus(fh.handle, importedResult, cCtx.unstableMarker === undefined, -1, cCtx.unstableMarker);
101
+ return { ir: importedResult };
102
+ }
103
+ let recalculationCounter = 0;
104
+ if (getDebugFlags().logOutputStatus)
105
+ console.log(`Output ${fh.handle} scaffold calculated (not all computables resolved yet).`);
106
+ keepVmAlive = true;
107
+ return {
108
+ ir: toBeResolved,
109
+ postprocessValue: (resolved, { unstableMarker, stable }) => {
110
+ // resolving futures
111
+ for (const [handle, value] of Object.entries(resolved))
112
+ rCtx.runCallback(handle, value);
113
+ // rendering result
114
+ const renderedResult = rCtx.importObjectUniversal(result);
115
+ // logging
116
+ recalculationCounter++;
117
+ logOutputStatus(fh.handle, renderedResult, stable, recalculationCounter, unstableMarker);
118
+ return renderedResult;
119
+ },
120
+ };
121
+ }
122
+ catch (e) {
123
+ keepVmAlive = false;
124
+ throw e;
125
+ }
126
+ finally {
127
+ if (!keepVmAlive)
128
+ scope.dispose();
129
+ }
130
+ }, ops);
131
+ }
132
+ function executeSingleLambda(quickJs, fh, codeWithInfo, ...args) {
133
+ const { code, featureFlags } = codeWithInfo;
134
+ const scope = new Scope();
135
+ try {
136
+ const runtime = scope.manage(quickJs.newRuntime());
137
+ runtime.setMemoryLimit(1024 * 1024 * 8);
138
+ runtime.setMaxStackSize(1024 * 320);
139
+ let deadlineSettings;
140
+ runtime.setInterruptHandler(() => {
141
+ if (deadlineSettings === undefined)
142
+ return false;
143
+ if (Date.now() > deadlineSettings.deadline)
144
+ return true;
145
+ return false;
146
+ });
147
+ const vm = scope.manage(runtime.newContext());
148
+ const rCtx = new JsExecutionContext(scope, vm, (s) => { deadlineSettings = s; }, featureFlags);
149
+ // Initializing the model
150
+ rCtx.evaluateBundle(code.content);
151
+ // Running the lambda
152
+ return rCtx.importObjectUniversal(rCtx.runCallback(fh.handle, ...args));
153
+ }
154
+ finally {
155
+ scope.dispose();
156
+ }
157
+ }
158
+
159
+ export { computableFromRF, executeSingleLambda };
160
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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 const { code, featureFlags } = codeWithInfo;\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 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\n return rCtx.importObjectUniversal(rCtx.runCallback(fh.handle, ...args));\n } finally {\n scope.dispose();\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ var tsHelpers = require('@milaboratories/ts-helpers');
4
+ var computable = require('@milaboratories/computable');
5
+ var project_model = require('../model/project_model.cjs');
6
+ var project_model_util = require('../model/project_model_util.cjs');
7
+ var block_ctx = require('./block_ctx.cjs');
8
+ var render = require('./render.cjs');
9
+ var util = require('./util.cjs');
10
+ var model = require('@platforma-sdk/model');
11
+
12
+ /** Returns derived general project state form the project resource */
13
+ function activeConfigs(prjEntry, env) {
14
+ return computable.Computable.make((ctx) => {
15
+ const prj = ctx.accessor(prjEntry).node();
16
+ const structure = tsHelpers.notEmpty(prj.getKeyValueAsJson(project_model.ProjectStructureKey));
17
+ const ret = [];
18
+ for (const { id } of project_model_util.allBlocks(structure)) {
19
+ const bp = util.getBlockPackInfo(prj, id);
20
+ if (bp === undefined)
21
+ continue;
22
+ const activeOutputConfigs = Object.entries(bp.cfg.outputs)
23
+ .map(([, cfg]) => cfg)
24
+ .filter((cfg) => render.isActive(cfg))
25
+ .map((cfg) => cfg);
26
+ if (activeOutputConfigs.length === 0)
27
+ continue;
28
+ const blockCtx = block_ctx.constructBlockContext(prj.persist(), id);
29
+ for (const cfg of activeOutputConfigs)
30
+ ret.push(computable.Computable.wrapError(render.computableFromCfgOrRF(env, blockCtx, cfg, model.extractCodeWithInfo(bp.cfg), bp.bpId)));
31
+ }
32
+ return ret;
33
+ });
34
+ }
35
+
36
+ exports.activeConfigs = activeConfigs;
37
+ //# sourceMappingURL=active_cfg.cjs.map
@@ -0,0 +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 } 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 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, extractCodeWithInfo(bp.cfg), bp.bpId)),\n );\n }\n\n return ret;\n });\n}\n"],"names":["Computable","notEmpty","ProjectStructureKey","allBlocks","getBlockPackInfo","isActive","constructBlockContext","computableFromCfgOrRF","extractCodeWithInfo"],"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;YAEtB,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;YAEzD,KAAK,MAAM,GAAG,IAAI,mBAAmB;AACnC,gBAAA,GAAG,CAAC,IAAI,CACNN,qBAAU,CAAC,SAAS,CAACO,4BAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAEC,yBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CACtG;QACL;AAEA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,CAAC;AACJ;;;;"}
@@ -3,4 +3,3 @@ import { MiddleLayerEnvironment } from './middle_layer';
3
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
- //# sourceMappingURL=active_cfg.d.ts.map
@@ -0,0 +1,35 @@
1
+ import { notEmpty } from '@milaboratories/ts-helpers';
2
+ import { Computable } from '@milaboratories/computable';
3
+ import { ProjectStructureKey } from '../model/project_model.js';
4
+ import { allBlocks } from '../model/project_model_util.js';
5
+ import { constructBlockContext } from './block_ctx.js';
6
+ import { isActive, computableFromCfgOrRF } from './render.js';
7
+ import { getBlockPackInfo } from './util.js';
8
+ import { extractCodeWithInfo } from '@platforma-sdk/model';
9
+
10
+ /** Returns derived general project state form the project resource */
11
+ function activeConfigs(prjEntry, env) {
12
+ return Computable.make((ctx) => {
13
+ const prj = ctx.accessor(prjEntry).node();
14
+ const structure = notEmpty(prj.getKeyValueAsJson(ProjectStructureKey));
15
+ const ret = [];
16
+ for (const { id } of allBlocks(structure)) {
17
+ const bp = getBlockPackInfo(prj, id);
18
+ if (bp === undefined)
19
+ continue;
20
+ const activeOutputConfigs = Object.entries(bp.cfg.outputs)
21
+ .map(([, cfg]) => cfg)
22
+ .filter((cfg) => isActive(cfg))
23
+ .map((cfg) => cfg);
24
+ if (activeOutputConfigs.length === 0)
25
+ continue;
26
+ const blockCtx = constructBlockContext(prj.persist(), id);
27
+ for (const cfg of activeOutputConfigs)
28
+ ret.push(Computable.wrapError(computableFromCfgOrRF(env, blockCtx, cfg, extractCodeWithInfo(bp.cfg), bp.bpId)));
29
+ }
30
+ return ret;
31
+ });
32
+ }
33
+
34
+ export { activeConfigs };
35
+ //# sourceMappingURL=active_cfg.js.map
@@ -0,0 +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 } 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 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, extractCodeWithInfo(bp.cfg), bp.bpId)),\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;YAEtB,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;YAEzD,KAAK,MAAM,GAAG,IAAI,mBAAmB;AACnC,gBAAA,GAAG,CAAC,IAAI,CACN,UAAU,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,mBAAmB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CACtG;QACL;AAEA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,CAAC;AACJ;;;;"}
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var computable = require('@milaboratories/computable');
4
+ var block_ctx = require('./block_ctx.cjs');
5
+ var project_model = require('../model/project_model.cjs');
6
+ var util = require('../cfg_render/util.cjs');
7
+ var util$1 = require('./util.cjs');
8
+ var render = require('./render.cjs');
9
+ var plClient = require('@milaboratories/pl-client');
10
+ var tsHelpers = require('@milaboratories/ts-helpers');
11
+ var model = require('@platforma-sdk/model');
12
+ var index = require('../debug/index.cjs');
13
+
14
+ function blockArgsAndUiState(projectEntry, blockId, cCtx) {
15
+ if (cCtx === undefined)
16
+ return computable.Computable.make((c) => blockArgsAndUiState(projectEntry, blockId, c), {
17
+ key: `inputs#${plClient.resourceIdToString(projectEntry.rid)}#${blockId}`,
18
+ });
19
+ const prj = cCtx.accessor(projectEntry).node();
20
+ const ctx = block_ctx.constructBlockContextArgsOnly(projectEntry, blockId);
21
+ const uiState = ctx.uiState(cCtx);
22
+ return {
23
+ author: prj.getKeyValueAsJson(project_model.blockArgsAuthorKey(blockId)),
24
+ // @TODO add deserialization caching
25
+ args: tsHelpers.deepFreeze(JSON.parse(ctx.args(cCtx))),
26
+ // @TODO add deserialization caching
27
+ ui: uiState !== undefined ? tsHelpers.deepFreeze(JSON.parse(uiState)) : undefined,
28
+ };
29
+ }
30
+ function blockOutputs(projectEntry, blockId, env) {
31
+ const key = 'outputs#' + plClient.resourceIdToString(projectEntry.rid) + '#' + blockId;
32
+ return computable.Computable.make((c) => {
33
+ if (index.getDebugFlags().logOutputRecalculations) {
34
+ console.log(`blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`);
35
+ }
36
+ const prj = c.accessor(projectEntry).node();
37
+ const ctx = block_ctx.constructBlockContext(projectEntry, blockId);
38
+ return util.ifNotUndef(util$1.getBlockPackInfo(prj, blockId), ({ cfg, bpId }) => {
39
+ const outputs = {};
40
+ for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {
41
+ const computableOutput = render.computableFromCfgOrRF(env, ctx, cellCfg, model.extractCodeWithInfo(cfg), bpId);
42
+ outputs[cellId] = computable.Computable.wrapError(computableOutput, 1);
43
+ }
44
+ return outputs;
45
+ });
46
+ }, { key }).withStableType();
47
+ }
48
+
49
+ exports.blockArgsAndUiState = blockArgsAndUiState;
50
+ exports.blockOutputs = blockOutputs;
51
+ //# sourceMappingURL=block.cjs.map
@@ -0,0 +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, BlockStateInternal } 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 BlockArgsAndUiState = Omit<BlockStateInternal, 'outputs' | 'navigationState'>;\n\nexport function blockArgsAndUiState(\n projectEntry: PlTreeEntry,\n blockId: string\n): Computable<BlockArgsAndUiState>;\nexport function blockArgsAndUiState(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx\n): BlockArgsAndUiState;\nexport function blockArgsAndUiState(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockArgsAndUiState | Computable<BlockArgsAndUiState> {\n if (cCtx === undefined)\n return Computable.make((c) => blockArgsAndUiState(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 uiState = ctx.uiState(cCtx);\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n // @TODO add deserialization caching\n args: deepFreeze(JSON.parse(ctx.args(cCtx))),\n // @TODO add deserialization caching\n ui: uiState !== undefined ? deepFreeze(JSON.parse(uiState)) : undefined,\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","blockArgsAuthorKey","deepFreeze","getDebugFlags","constructBlockContext","ifNotUndef","getBlockPackInfo","computableFromCfgOrRF","extractCodeWithInfo"],"mappings":";;;;;;;;;;;;;SAgCgB,mBAAmB,CACjC,YAAyB,EACzB,OAAe,EACf,IAAoB,EAAA;IAEpB,IAAI,IAAI,KAAK,SAAS;AACpB,QAAA,OAAOA,qBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;YAC3E,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,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IACjC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,iBAAiB,CAAeC,gCAAkB,CAAC,OAAO,CAAC,CAAC;;AAExE,QAAA,IAAI,EAAEC,oBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;AAE5C,QAAA,EAAE,EAAE,OAAO,KAAK,SAAS,GAAGA,oBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS;KACxE;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;;;;;"}
@@ -6,4 +6,3 @@ export type BlockArgsAndUiState = Omit<BlockStateInternal, 'outputs' | 'navigati
6
6
  export declare function blockArgsAndUiState(projectEntry: PlTreeEntry, blockId: string): Computable<BlockArgsAndUiState>;
7
7
  export declare function blockArgsAndUiState(projectEntry: PlTreeEntry, blockId: string, cCtx: ComputableCtx): BlockArgsAndUiState;
8
8
  export declare function blockOutputs(projectEntry: PlTreeEntry, blockId: string, env: MiddleLayerEnvironment): ComputableStableDefined<Record<string, ComputableValueOrErrors<unknown>>>;
9
- //# sourceMappingURL=block.d.ts.map
@@ -0,0 +1,48 @@
1
+ import { Computable } from '@milaboratories/computable';
2
+ import { constructBlockContextArgsOnly, constructBlockContext } from './block_ctx.js';
3
+ import { blockArgsAuthorKey } from '../model/project_model.js';
4
+ import { ifNotUndef } from '../cfg_render/util.js';
5
+ import { getBlockPackInfo } from './util.js';
6
+ import { computableFromCfgOrRF } from './render.js';
7
+ import { resourceIdToString } from '@milaboratories/pl-client';
8
+ import { deepFreeze } from '@milaboratories/ts-helpers';
9
+ import { extractCodeWithInfo } from '@platforma-sdk/model';
10
+ import { getDebugFlags } from '../debug/index.js';
11
+
12
+ function blockArgsAndUiState(projectEntry, blockId, cCtx) {
13
+ if (cCtx === undefined)
14
+ return Computable.make((c) => blockArgsAndUiState(projectEntry, blockId, c), {
15
+ key: `inputs#${resourceIdToString(projectEntry.rid)}#${blockId}`,
16
+ });
17
+ const prj = cCtx.accessor(projectEntry).node();
18
+ const ctx = constructBlockContextArgsOnly(projectEntry, blockId);
19
+ const uiState = ctx.uiState(cCtx);
20
+ return {
21
+ author: prj.getKeyValueAsJson(blockArgsAuthorKey(blockId)),
22
+ // @TODO add deserialization caching
23
+ args: deepFreeze(JSON.parse(ctx.args(cCtx))),
24
+ // @TODO add deserialization caching
25
+ ui: uiState !== undefined ? deepFreeze(JSON.parse(uiState)) : undefined,
26
+ };
27
+ }
28
+ function blockOutputs(projectEntry, blockId, env) {
29
+ const key = 'outputs#' + resourceIdToString(projectEntry.rid) + '#' + blockId;
30
+ return Computable.make((c) => {
31
+ if (getDebugFlags().logOutputRecalculations) {
32
+ console.log(`blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`);
33
+ }
34
+ const prj = c.accessor(projectEntry).node();
35
+ const ctx = constructBlockContext(projectEntry, blockId);
36
+ return ifNotUndef(getBlockPackInfo(prj, blockId), ({ cfg, bpId }) => {
37
+ const outputs = {};
38
+ for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {
39
+ const computableOutput = computableFromCfgOrRF(env, ctx, cellCfg, extractCodeWithInfo(cfg), bpId);
40
+ outputs[cellId] = Computable.wrapError(computableOutput, 1);
41
+ }
42
+ return outputs;
43
+ });
44
+ }, { key }).withStableType();
45
+ }
46
+
47
+ export { blockArgsAndUiState, blockOutputs };
48
+ //# sourceMappingURL=block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.js","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, BlockStateInternal } 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 BlockArgsAndUiState = Omit<BlockStateInternal, 'outputs' | 'navigationState'>;\n\nexport function blockArgsAndUiState(\n projectEntry: PlTreeEntry,\n blockId: string\n): Computable<BlockArgsAndUiState>;\nexport function blockArgsAndUiState(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx\n): BlockArgsAndUiState;\nexport function blockArgsAndUiState(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockArgsAndUiState | Computable<BlockArgsAndUiState> {\n if (cCtx === undefined)\n return Computable.make((c) => blockArgsAndUiState(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 uiState = ctx.uiState(cCtx);\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n // @TODO add deserialization caching\n args: deepFreeze(JSON.parse(ctx.args(cCtx))),\n // @TODO add deserialization caching\n ui: uiState !== undefined ? deepFreeze(JSON.parse(uiState)) : undefined,\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":[],"mappings":";;;;;;;;;;;SAgCgB,mBAAmB,CACjC,YAAyB,EACzB,OAAe,EACf,IAAoB,EAAA;IAEpB,IAAI,IAAI,KAAK,SAAS;AACpB,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;YAC3E,GAAG,EAAE,CAAA,OAAA,EAAU,kBAAkB,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,GAAG,6BAA6B,CAAC,YAAY,EAAE,OAAO,CAAC;IAChE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IACjC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,iBAAiB,CAAe,kBAAkB,CAAC,OAAO,CAAC,CAAC;;AAExE,QAAA,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;AAE5C,QAAA,EAAE,EAAE,OAAO,KAAK,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS;KACxE;AACH;SAEgB,YAAY,CAC1B,YAAyB,EACzB,OAAe,EACf,GAA2B,EAAA;AAE3B,IAAA,MAAM,GAAG,GAAG,UAAU,GAAG,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO;AAC7E,IAAA,OAAO,UAAU,CAAC,IAAI,CACpB,CAAC,CAAC,KAAI;AACJ,QAAA,IAAI,aAAa,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,GAAG,qBAAqB,CAAC,YAAY,EAAE,OAAO,CAAC;AAExD,QAAA,OAAO,UAAU,CAAC,gBAAgB,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,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACjG,gBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,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;;;;"}