@milaboratories/pl-middle-layer 1.48.11 → 1.48.13

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 (589) hide show
  1. package/dist/_virtual/_@oxc-project_runtime@0.114.0/helpers/usingCtx.cjs +59 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.114.0/helpers/usingCtx.js +58 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  4. package/dist/block_registry/index.cjs +3 -0
  5. package/dist/block_registry/index.d.ts +3 -4
  6. package/dist/block_registry/index.js +3 -0
  7. package/dist/block_registry/registry-v2-provider.cjs +18 -19
  8. package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
  9. package/dist/block_registry/registry-v2-provider.d.ts +10 -6
  10. package/dist/block_registry/registry-v2-provider.js +17 -17
  11. package/dist/block_registry/registry-v2-provider.js.map +1 -1
  12. package/dist/block_registry/registry.cjs +188 -219
  13. package/dist/block_registry/registry.cjs.map +1 -1
  14. package/dist/block_registry/registry.d.ts +18 -14
  15. package/dist/block_registry/registry.js +184 -217
  16. package/dist/block_registry/registry.js.map +1 -1
  17. package/dist/block_registry/watcher.cjs +141 -170
  18. package/dist/block_registry/watcher.cjs.map +1 -1
  19. package/dist/block_registry/watcher.d.ts +26 -24
  20. package/dist/block_registry/watcher.js +139 -168
  21. package/dist/block_registry/watcher.js.map +1 -1
  22. package/dist/block_registry/well_known_registries.cjs +9 -8
  23. package/dist/block_registry/well_known_registries.cjs.map +1 -1
  24. package/dist/block_registry/well_known_registries.d.ts +8 -4
  25. package/dist/block_registry/well_known_registries.js +9 -7
  26. package/dist/block_registry/well_known_registries.js.map +1 -1
  27. package/dist/cfg_render/executor.cjs +136 -137
  28. package/dist/cfg_render/executor.cjs.map +1 -1
  29. package/dist/cfg_render/executor.js +133 -135
  30. package/dist/cfg_render/executor.js.map +1 -1
  31. package/dist/cfg_render/renderer.cjs +354 -462
  32. package/dist/cfg_render/renderer.cjs.map +1 -1
  33. package/dist/cfg_render/renderer.js +353 -460
  34. package/dist/cfg_render/renderer.js.map +1 -1
  35. package/dist/cfg_render/traverse.cjs +58 -60
  36. package/dist/cfg_render/traverse.cjs.map +1 -1
  37. package/dist/cfg_render/traverse.js +57 -58
  38. package/dist/cfg_render/traverse.js.map +1 -1
  39. package/dist/cfg_render/util.cjs +14 -19
  40. package/dist/cfg_render/util.cjs.map +1 -1
  41. package/dist/cfg_render/util.js +14 -17
  42. package/dist/cfg_render/util.js.map +1 -1
  43. package/dist/debug/index.cjs +13 -17
  44. package/dist/debug/index.cjs.map +1 -1
  45. package/dist/debug/index.js +13 -16
  46. package/dist/debug/index.js.map +1 -1
  47. package/dist/dev_env/index.cjs +60 -44
  48. package/dist/dev_env/index.cjs.map +1 -1
  49. package/dist/dev_env/index.js +57 -33
  50. package/dist/dev_env/index.js.map +1 -1
  51. package/dist/dev_env/util.cjs +12 -32
  52. package/dist/dev_env/util.cjs.map +1 -1
  53. package/dist/dev_env/util.js +10 -11
  54. package/dist/dev_env/util.js.map +1 -1
  55. package/dist/index.cjs +75 -74
  56. package/dist/index.d.ts +21 -13
  57. package/dist/index.js +25 -18
  58. package/dist/js_render/computable_context.cjs +432 -568
  59. package/dist/js_render/computable_context.cjs.map +1 -1
  60. package/dist/js_render/computable_context.js +431 -566
  61. package/dist/js_render/computable_context.js.map +1 -1
  62. package/dist/js_render/context.cjs +184 -237
  63. package/dist/js_render/context.cjs.map +1 -1
  64. package/dist/js_render/context.js +184 -235
  65. package/dist/js_render/context.js.map +1 -1
  66. package/dist/js_render/index.cjs +137 -156
  67. package/dist/js_render/index.cjs.map +1 -1
  68. package/dist/js_render/index.js +136 -154
  69. package/dist/js_render/index.js.map +1 -1
  70. package/dist/middle_layer/active_cfg.cjs +28 -35
  71. package/dist/middle_layer/active_cfg.cjs.map +1 -1
  72. package/dist/middle_layer/active_cfg.js +27 -33
  73. package/dist/middle_layer/active_cfg.js.map +1 -1
  74. package/dist/middle_layer/block.cjs +36 -42
  75. package/dist/middle_layer/block.cjs.map +1 -1
  76. package/dist/middle_layer/block.js +35 -40
  77. package/dist/middle_layer/block.js.map +1 -1
  78. package/dist/middle_layer/block_ctx.cjs +91 -133
  79. package/dist/middle_layer/block_ctx.cjs.map +1 -1
  80. package/dist/middle_layer/block_ctx.js +90 -131
  81. package/dist/middle_layer/block_ctx.js.map +1 -1
  82. package/dist/middle_layer/block_ctx_unsafe.cjs +20 -19
  83. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
  84. package/dist/middle_layer/block_ctx_unsafe.js +20 -18
  85. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -1
  86. package/dist/middle_layer/driver_kit.cjs +47 -51
  87. package/dist/middle_layer/driver_kit.cjs.map +1 -1
  88. package/dist/middle_layer/driver_kit.d.ts +31 -27
  89. package/dist/middle_layer/driver_kit.js +46 -49
  90. package/dist/middle_layer/driver_kit.js.map +1 -1
  91. package/dist/middle_layer/frontend_path.cjs +49 -55
  92. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  93. package/dist/middle_layer/frontend_path.js +48 -53
  94. package/dist/middle_layer/frontend_path.js.map +1 -1
  95. package/dist/middle_layer/index.cjs +4 -0
  96. package/dist/middle_layer/index.d.ts +4 -5
  97. package/dist/middle_layer/index.js +4 -0
  98. package/dist/middle_layer/middle_layer.cjs +216 -245
  99. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  100. package/dist/middle_layer/middle_layer.d.ts +95 -91
  101. package/dist/middle_layer/middle_layer.js +215 -243
  102. package/dist/middle_layer/middle_layer.js.map +1 -1
  103. package/dist/middle_layer/navigation_states.cjs +45 -38
  104. package/dist/middle_layer/navigation_states.cjs.map +1 -1
  105. package/dist/middle_layer/navigation_states.js +44 -36
  106. package/dist/middle_layer/navigation_states.js.map +1 -1
  107. package/dist/middle_layer/ops.cjs +56 -57
  108. package/dist/middle_layer/ops.cjs.map +1 -1
  109. package/dist/middle_layer/ops.d.ts +86 -96
  110. package/dist/middle_layer/ops.js +54 -55
  111. package/dist/middle_layer/ops.js.map +1 -1
  112. package/dist/middle_layer/project.cjs +497 -527
  113. package/dist/middle_layer/project.cjs.map +1 -1
  114. package/dist/middle_layer/project.d.ts +155 -152
  115. package/dist/middle_layer/project.js +494 -525
  116. package/dist/middle_layer/project.js.map +1 -1
  117. package/dist/middle_layer/project_list.cjs +45 -43
  118. package/dist/middle_layer/project_list.cjs.map +1 -1
  119. package/dist/middle_layer/project_list.js +45 -41
  120. package/dist/middle_layer/project_list.js.map +1 -1
  121. package/dist/middle_layer/project_overview.cjs +202 -240
  122. package/dist/middle_layer/project_overview.cjs.map +1 -1
  123. package/dist/middle_layer/project_overview.js +201 -238
  124. package/dist/middle_layer/project_overview.js.map +1 -1
  125. package/dist/middle_layer/project_overview_light.cjs +11 -14
  126. package/dist/middle_layer/project_overview_light.cjs.map +1 -1
  127. package/dist/middle_layer/project_overview_light.js +10 -12
  128. package/dist/middle_layer/project_overview_light.js.map +1 -1
  129. package/dist/middle_layer/render.cjs +14 -18
  130. package/dist/middle_layer/render.cjs.map +1 -1
  131. package/dist/middle_layer/render.js +13 -16
  132. package/dist/middle_layer/render.js.map +1 -1
  133. package/dist/middle_layer/types.d.ts +7 -10
  134. package/dist/middle_layer/util.cjs +26 -21
  135. package/dist/middle_layer/util.cjs.map +1 -1
  136. package/dist/middle_layer/util.js +25 -19
  137. package/dist/middle_layer/util.js.map +1 -1
  138. package/dist/model/args.cjs +44 -53
  139. package/dist/model/args.cjs.map +1 -1
  140. package/dist/model/args.js +44 -51
  141. package/dist/model/args.js.map +1 -1
  142. package/dist/model/block_pack_spec.cjs +9 -5
  143. package/dist/model/block_pack_spec.cjs.map +1 -1
  144. package/dist/model/block_pack_spec.d.ts +34 -30
  145. package/dist/model/block_pack_spec.js +9 -4
  146. package/dist/model/block_pack_spec.js.map +1 -1
  147. package/dist/model/frontend.d.ts +8 -5
  148. package/dist/model/index.d.ts +2 -3
  149. package/dist/model/project_helper.cjs +154 -193
  150. package/dist/model/project_helper.cjs.map +1 -1
  151. package/dist/model/project_helper.d.ts +96 -92
  152. package/dist/model/project_helper.js +153 -191
  153. package/dist/model/project_helper.js.map +1 -1
  154. package/dist/model/project_model.cjs +33 -32
  155. package/dist/model/project_model.cjs.map +1 -1
  156. package/dist/model/project_model.d.ts +13 -64
  157. package/dist/model/project_model.js +34 -30
  158. package/dist/model/project_model.js.map +1 -1
  159. package/dist/model/project_model_util.cjs +119 -158
  160. package/dist/model/project_model_util.cjs.map +1 -1
  161. package/dist/model/project_model_util.js +120 -156
  162. package/dist/model/project_model_util.js.map +1 -1
  163. package/dist/model/project_model_v1.cjs +3 -2
  164. package/dist/model/project_model_v1.cjs.map +1 -1
  165. package/dist/model/project_model_v1.js +3 -1
  166. package/dist/model/project_model_v1.js.map +1 -1
  167. package/dist/model/template_spec.d.ts +20 -16
  168. package/dist/mutator/block-pack/block_pack.cjs +200 -223
  169. package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
  170. package/dist/mutator/block-pack/block_pack.d.ts +20 -19
  171. package/dist/mutator/block-pack/block_pack.js +199 -221
  172. package/dist/mutator/block-pack/block_pack.js.map +1 -1
  173. package/dist/mutator/block-pack/frontend.cjs +14 -16
  174. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  175. package/dist/mutator/block-pack/frontend.js +13 -14
  176. package/dist/mutator/block-pack/frontend.js.map +1 -1
  177. package/dist/mutator/context_export.cjs +18 -17
  178. package/dist/mutator/context_export.cjs.map +1 -1
  179. package/dist/mutator/context_export.js +17 -15
  180. package/dist/mutator/context_export.js.map +1 -1
  181. package/dist/mutator/migration.cjs +86 -112
  182. package/dist/mutator/migration.cjs.map +1 -1
  183. package/dist/mutator/migration.js +85 -110
  184. package/dist/mutator/migration.js.map +1 -1
  185. package/dist/mutator/project.cjs +903 -1240
  186. package/dist/mutator/project.cjs.map +1 -1
  187. package/dist/mutator/project.js +901 -1237
  188. package/dist/mutator/project.js.map +1 -1
  189. package/dist/mutator/template/direct_template_loader.cjs +104 -130
  190. package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
  191. package/dist/mutator/template/direct_template_loader.js +103 -128
  192. package/dist/mutator/template/direct_template_loader.js.map +1 -1
  193. package/dist/mutator/template/direct_template_loader_v3.cjs +104 -124
  194. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
  195. package/dist/mutator/template/direct_template_loader_v3.js +103 -122
  196. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
  197. package/dist/mutator/template/render_block.cjs +26 -30
  198. package/dist/mutator/template/render_block.cjs.map +1 -1
  199. package/dist/mutator/template/render_block.js +26 -23
  200. package/dist/mutator/template/render_block.js.map +1 -1
  201. package/dist/mutator/template/render_template.cjs +25 -25
  202. package/dist/mutator/template/render_template.cjs.map +1 -1
  203. package/dist/mutator/template/render_template.d.ts +6 -3
  204. package/dist/mutator/template/render_template.js +24 -23
  205. package/dist/mutator/template/render_template.js.map +1 -1
  206. package/dist/mutator/template/template_loading.cjs +42 -46
  207. package/dist/mutator/template/template_loading.cjs.map +1 -1
  208. package/dist/mutator/template/template_loading.d.ts +16 -12
  209. package/dist/mutator/template/template_loading.js +40 -44
  210. package/dist/mutator/template/template_loading.js.map +1 -1
  211. package/dist/network_check/network_check.cjs +149 -194
  212. package/dist/network_check/network_check.cjs.map +1 -1
  213. package/dist/network_check/network_check.d.ts +50 -66
  214. package/dist/network_check/network_check.js +146 -190
  215. package/dist/network_check/network_check.js.map +1 -1
  216. package/dist/network_check/pings.cjs +71 -69
  217. package/dist/network_check/pings.cjs.map +1 -1
  218. package/dist/network_check/pings.js +71 -65
  219. package/dist/network_check/pings.js.map +1 -1
  220. package/dist/network_check/template.cjs +256 -273
  221. package/dist/network_check/template.cjs.map +1 -1
  222. package/dist/network_check/template.js +253 -265
  223. package/dist/network_check/template.js.map +1 -1
  224. package/dist/pool/data.cjs +205 -226
  225. package/dist/pool/data.cjs.map +1 -1
  226. package/dist/pool/data.d.ts +10 -27
  227. package/dist/pool/data.js +196 -209
  228. package/dist/pool/data.js.map +1 -1
  229. package/dist/pool/driver.cjs +180 -207
  230. package/dist/pool/driver.cjs.map +1 -1
  231. package/dist/pool/driver.d.ts +12 -17
  232. package/dist/pool/driver.js +178 -205
  233. package/dist/pool/driver.js.map +1 -1
  234. package/dist/pool/index.cjs +2 -0
  235. package/dist/pool/index.d.ts +2 -3
  236. package/dist/pool/index.js +2 -0
  237. package/dist/pool/p_object_collection.cjs +67 -79
  238. package/dist/pool/p_object_collection.cjs.map +1 -1
  239. package/dist/pool/p_object_collection.d.ts +7 -28
  240. package/dist/pool/p_object_collection.js +65 -77
  241. package/dist/pool/p_object_collection.js.map +1 -1
  242. package/dist/pool/result_pool.cjs +217 -262
  243. package/dist/pool/result_pool.cjs.map +1 -1
  244. package/dist/pool/result_pool.d.ts +4 -27
  245. package/dist/pool/result_pool.js +216 -260
  246. package/dist/pool/result_pool.js.map +1 -1
  247. package/dist/worker/WorkerManager.cjs +51 -49
  248. package/dist/worker/WorkerManager.cjs.map +1 -1
  249. package/dist/worker/WorkerManager.js +49 -47
  250. package/dist/worker/WorkerManager.js.map +1 -1
  251. package/dist/worker/worker.cjs +19 -15
  252. package/dist/worker/worker.cjs.map +1 -1
  253. package/dist/worker/worker.d.ts +1 -2
  254. package/dist/worker/worker.js +18 -13
  255. package/dist/worker/worker.js.map +1 -1
  256. package/dist/worker/workerApi.cjs +14 -18
  257. package/dist/worker/workerApi.cjs.map +1 -1
  258. package/dist/worker/workerApi.js +13 -16
  259. package/dist/worker/workerApi.js.map +1 -1
  260. package/package.json +24 -24
  261. package/src/mutator/template/template_render.test.ts +22 -18
  262. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs +0 -77
  263. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs.map +0 -1
  264. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js +0 -74
  265. package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js.map +0 -1
  266. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/comparator.cjs +0 -162
  267. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/comparator.cjs.map +0 -1
  268. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/comparator.js +0 -160
  269. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/comparator.js.map +0 -1
  270. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/range.cjs +0 -576
  271. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/range.cjs.map +0 -1
  272. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/range.js +0 -574
  273. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/range.js.map +0 -1
  274. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/semver.cjs +0 -337
  275. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/semver.cjs.map +0 -1
  276. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/semver.js +0 -335
  277. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/classes/semver.js.map +0 -1
  278. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/clean.cjs +0 -22
  279. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/clean.cjs.map +0 -1
  280. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/clean.js +0 -20
  281. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/clean.js.map +0 -1
  282. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/cmp.cjs +0 -73
  283. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/cmp.cjs.map +0 -1
  284. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/cmp.js +0 -71
  285. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/cmp.js.map +0 -1
  286. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/coerce.cjs +0 -78
  287. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/coerce.cjs.map +0 -1
  288. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/coerce.js +0 -76
  289. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/coerce.js.map +0 -1
  290. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-build.cjs +0 -23
  291. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-build.cjs.map +0 -1
  292. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-build.js +0 -21
  293. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-build.js.map +0 -1
  294. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-loose.cjs +0 -19
  295. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-loose.cjs.map +0 -1
  296. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-loose.js +0 -17
  297. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare-loose.js.map +0 -1
  298. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare.cjs +0 -21
  299. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare.cjs.map +0 -1
  300. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare.js +0 -19
  301. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/compare.js.map +0 -1
  302. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/diff.cjs +0 -74
  303. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/diff.cjs.map +0 -1
  304. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/diff.js +0 -72
  305. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/diff.js.map +0 -1
  306. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/eq.cjs +0 -19
  307. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/eq.cjs.map +0 -1
  308. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/eq.js +0 -17
  309. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/eq.js.map +0 -1
  310. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gt.cjs +0 -19
  311. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gt.cjs.map +0 -1
  312. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gt.js +0 -17
  313. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gt.js.map +0 -1
  314. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gte.cjs +0 -19
  315. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gte.cjs.map +0 -1
  316. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gte.js +0 -17
  317. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/gte.js.map +0 -1
  318. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/inc.cjs +0 -35
  319. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/inc.cjs.map +0 -1
  320. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/inc.js +0 -33
  321. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/inc.js.map +0 -1
  322. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lt.cjs +0 -19
  323. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lt.cjs.map +0 -1
  324. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lt.js +0 -17
  325. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lt.js.map +0 -1
  326. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lte.cjs +0 -19
  327. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lte.cjs.map +0 -1
  328. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lte.js +0 -17
  329. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/lte.js.map +0 -1
  330. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/major.cjs +0 -19
  331. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/major.cjs.map +0 -1
  332. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/major.js +0 -17
  333. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/major.js.map +0 -1
  334. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/minor.cjs +0 -19
  335. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/minor.cjs.map +0 -1
  336. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/minor.js +0 -17
  337. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/minor.js.map +0 -1
  338. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/neq.cjs +0 -19
  339. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/neq.cjs.map +0 -1
  340. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/neq.js +0 -17
  341. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/neq.js.map +0 -1
  342. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/parse.cjs +0 -32
  343. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/parse.cjs.map +0 -1
  344. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/parse.js +0 -30
  345. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/parse.js.map +0 -1
  346. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/patch.cjs +0 -19
  347. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/patch.cjs.map +0 -1
  348. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/patch.js +0 -17
  349. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/patch.js.map +0 -1
  350. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/prerelease.cjs +0 -22
  351. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/prerelease.cjs.map +0 -1
  352. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/prerelease.js +0 -20
  353. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/prerelease.js.map +0 -1
  354. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rcompare.cjs +0 -19
  355. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rcompare.cjs.map +0 -1
  356. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rcompare.js +0 -17
  357. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rcompare.js.map +0 -1
  358. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rsort.cjs +0 -19
  359. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rsort.cjs.map +0 -1
  360. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rsort.js +0 -17
  361. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/rsort.js.map +0 -1
  362. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/satisfies.cjs +0 -26
  363. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/satisfies.cjs.map +0 -1
  364. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/satisfies.js +0 -24
  365. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/satisfies.js.map +0 -1
  366. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/sort.cjs +0 -19
  367. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/sort.cjs.map +0 -1
  368. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/sort.js +0 -17
  369. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/sort.js.map +0 -1
  370. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/valid.cjs +0 -22
  371. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/valid.cjs.map +0 -1
  372. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/valid.js +0 -20
  373. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/functions/valid.js.map +0 -1
  374. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/index.cjs +0 -145
  375. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/index.cjs.map +0 -1
  376. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/index.js +0 -143
  377. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/index.js.map +0 -1
  378. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/constants.cjs +0 -49
  379. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/constants.cjs.map +0 -1
  380. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/constants.js +0 -47
  381. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/constants.js.map +0 -1
  382. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/debug.cjs +0 -23
  383. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/debug.cjs.map +0 -1
  384. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/debug.js +0 -21
  385. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/debug.js.map +0 -1
  386. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/identifiers.cjs +0 -37
  387. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/identifiers.cjs.map +0 -1
  388. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/identifiers.js +0 -35
  389. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/identifiers.js.map +0 -1
  390. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/lrucache.cjs +0 -54
  391. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/lrucache.cjs.map +0 -1
  392. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/lrucache.js +0 -52
  393. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/lrucache.js.map +0 -1
  394. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/parse-options.cjs +0 -29
  395. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/parse-options.cjs.map +0 -1
  396. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/parse-options.js +0 -27
  397. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/parse-options.js.map +0 -1
  398. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/re.cjs +0 -240
  399. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/re.cjs.map +0 -1
  400. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/re.js +0 -238
  401. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/internal/re.js.map +0 -1
  402. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/gtr.cjs +0 -20
  403. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/gtr.cjs.map +0 -1
  404. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/gtr.js +0 -18
  405. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/gtr.js.map +0 -1
  406. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/intersects.cjs +0 -23
  407. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/intersects.cjs.map +0 -1
  408. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/intersects.js +0 -21
  409. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/intersects.js.map +0 -1
  410. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/ltr.cjs +0 -20
  411. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/ltr.cjs.map +0 -1
  412. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/ltr.js +0 -18
  413. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/ltr.js.map +0 -1
  414. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/max-satisfying.cjs +0 -42
  415. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/max-satisfying.cjs.map +0 -1
  416. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/max-satisfying.js +0 -40
  417. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/max-satisfying.js.map +0 -1
  418. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-satisfying.cjs +0 -41
  419. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-satisfying.cjs.map +0 -1
  420. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-satisfying.js +0 -39
  421. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-satisfying.js.map +0 -1
  422. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-version.cjs +0 -79
  423. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-version.cjs.map +0 -1
  424. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-version.js +0 -77
  425. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/min-version.js.map +0 -1
  426. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/outside.cjs +0 -103
  427. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/outside.cjs.map +0 -1
  428. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/outside.js +0 -101
  429. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/outside.js.map +0 -1
  430. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/simplify.cjs +0 -64
  431. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/simplify.cjs.map +0 -1
  432. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/simplify.js +0 -62
  433. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/simplify.js.map +0 -1
  434. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/subset.cjs +0 -266
  435. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/subset.cjs.map +0 -1
  436. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/subset.js +0 -264
  437. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/subset.js.map +0 -1
  438. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/to-comparators.cjs +0 -24
  439. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/to-comparators.cjs.map +0 -1
  440. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/to-comparators.js +0 -22
  441. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/to-comparators.js.map +0 -1
  442. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/valid.cjs +0 -27
  443. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/valid.cjs.map +0 -1
  444. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/valid.js +0 -25
  445. package/dist/__external/.pnpm/semver@7.7.2/__external/semver/ranges/valid.js.map +0 -1
  446. package/dist/_virtual/index.cjs +0 -8
  447. package/dist/_virtual/index.cjs.map +0 -1
  448. package/dist/_virtual/index.js +0 -6
  449. package/dist/_virtual/index.js.map +0 -1
  450. package/dist/_virtual/re.cjs +0 -6
  451. package/dist/_virtual/re.cjs.map +0 -1
  452. package/dist/_virtual/re.js +0 -4
  453. package/dist/_virtual/re.js.map +0 -1
  454. package/dist/block_registry/index.d.ts.map +0 -1
  455. package/dist/block_registry/registry-v2-provider.d.ts.map +0 -1
  456. package/dist/block_registry/registry.d.ts.map +0 -1
  457. package/dist/block_registry/registry.test.d.ts +0 -2
  458. package/dist/block_registry/registry.test.d.ts.map +0 -1
  459. package/dist/block_registry/watcher.d.ts.map +0 -1
  460. package/dist/block_registry/well_known_registries.d.ts.map +0 -1
  461. package/dist/cfg_render/executor.d.ts +0 -9
  462. package/dist/cfg_render/executor.d.ts.map +0 -1
  463. package/dist/cfg_render/executor.test.d.ts +0 -2
  464. package/dist/cfg_render/executor.test.d.ts.map +0 -1
  465. package/dist/cfg_render/operation.d.ts +0 -29
  466. package/dist/cfg_render/operation.d.ts.map +0 -1
  467. package/dist/cfg_render/renderer.d.ts +0 -6
  468. package/dist/cfg_render/renderer.d.ts.map +0 -1
  469. package/dist/cfg_render/traverse.d.ts +0 -3
  470. package/dist/cfg_render/traverse.d.ts.map +0 -1
  471. package/dist/cfg_render/util.d.ts +0 -5
  472. package/dist/cfg_render/util.d.ts.map +0 -1
  473. package/dist/debug/index.d.ts +0 -9
  474. package/dist/debug/index.d.ts.map +0 -1
  475. package/dist/dev_env/index.d.ts +0 -21
  476. package/dist/dev_env/index.d.ts.map +0 -1
  477. package/dist/dev_env/util.d.ts +0 -3
  478. package/dist/dev_env/util.d.ts.map +0 -1
  479. package/dist/index.cjs.map +0 -1
  480. package/dist/index.d.ts.map +0 -1
  481. package/dist/index.js.map +0 -1
  482. package/dist/js_render/computable_context.d.ts +0 -74
  483. package/dist/js_render/computable_context.d.ts.map +0 -1
  484. package/dist/js_render/context.d.ts +0 -73
  485. package/dist/js_render/context.d.ts.map +0 -1
  486. package/dist/js_render/index.d.ts +0 -57
  487. package/dist/js_render/index.d.ts.map +0 -1
  488. package/dist/middle_layer/active_cfg.d.ts +0 -6
  489. package/dist/middle_layer/active_cfg.d.ts.map +0 -1
  490. package/dist/middle_layer/block.d.ts +0 -10
  491. package/dist/middle_layer/block.d.ts.map +0 -1
  492. package/dist/middle_layer/block_ctx.d.ts +0 -23
  493. package/dist/middle_layer/block_ctx.d.ts.map +0 -1
  494. package/dist/middle_layer/block_ctx_unsafe.d.ts +0 -16
  495. package/dist/middle_layer/block_ctx_unsafe.d.ts.map +0 -1
  496. package/dist/middle_layer/driver_kit.d.ts.map +0 -1
  497. package/dist/middle_layer/frontend_path.d.ts +0 -6
  498. package/dist/middle_layer/frontend_path.d.ts.map +0 -1
  499. package/dist/middle_layer/index.d.ts.map +0 -1
  500. package/dist/middle_layer/middle_layer.d.ts.map +0 -1
  501. package/dist/middle_layer/navigation_states.d.ts +0 -10
  502. package/dist/middle_layer/navigation_states.d.ts.map +0 -1
  503. package/dist/middle_layer/ops.d.ts.map +0 -1
  504. package/dist/middle_layer/project.d.ts.map +0 -1
  505. package/dist/middle_layer/project_list.d.ts +0 -11
  506. package/dist/middle_layer/project_list.d.ts.map +0 -1
  507. package/dist/middle_layer/project_overview.d.ts +0 -8
  508. package/dist/middle_layer/project_overview.d.ts.map +0 -1
  509. package/dist/middle_layer/project_overview_light.d.ts +0 -8
  510. package/dist/middle_layer/project_overview_light.d.ts.map +0 -1
  511. package/dist/middle_layer/render.d.ts +0 -7
  512. package/dist/middle_layer/render.d.ts.map +0 -1
  513. package/dist/middle_layer/render.test.d.ts +0 -5
  514. package/dist/middle_layer/render.test.d.ts.map +0 -1
  515. package/dist/middle_layer/types.d.ts.map +0 -1
  516. package/dist/middle_layer/util.d.ts +0 -16
  517. package/dist/middle_layer/util.d.ts.map +0 -1
  518. package/dist/model/args.d.ts +0 -14
  519. package/dist/model/args.d.ts.map +0 -1
  520. package/dist/model/block_pack.d.ts +0 -8
  521. package/dist/model/block_pack.d.ts.map +0 -1
  522. package/dist/model/block_pack_spec.d.ts.map +0 -1
  523. package/dist/model/frontend.d.ts.map +0 -1
  524. package/dist/model/index.d.ts.map +0 -1
  525. package/dist/model/project_helper.d.ts.map +0 -1
  526. package/dist/model/project_model.d.ts.map +0 -1
  527. package/dist/model/project_model.test.d.ts +0 -2
  528. package/dist/model/project_model.test.d.ts.map +0 -1
  529. package/dist/model/project_model_util.d.ts +0 -43
  530. package/dist/model/project_model_util.d.ts.map +0 -1
  531. package/dist/model/project_model_util.test.d.ts +0 -2
  532. package/dist/model/project_model_util.test.d.ts.map +0 -1
  533. package/dist/model/project_model_v1.d.ts +0 -8
  534. package/dist/model/project_model_v1.d.ts.map +0 -1
  535. package/dist/model/template_spec.d.ts.map +0 -1
  536. package/dist/mutator/block-pack/block_pack.d.ts.map +0 -1
  537. package/dist/mutator/block-pack/block_pack.test.d.ts +0 -2
  538. package/dist/mutator/block-pack/block_pack.test.d.ts.map +0 -1
  539. package/dist/mutator/block-pack/frontend.d.ts +0 -4
  540. package/dist/mutator/block-pack/frontend.d.ts.map +0 -1
  541. package/dist/mutator/context_export.d.ts +0 -9
  542. package/dist/mutator/context_export.d.ts.map +0 -1
  543. package/dist/mutator/migration.d.ts +0 -9
  544. package/dist/mutator/migration.d.ts.map +0 -1
  545. package/dist/mutator/project-v3.test.d.ts +0 -2
  546. package/dist/mutator/project-v3.test.d.ts.map +0 -1
  547. package/dist/mutator/project.d.ts +0 -211
  548. package/dist/mutator/project.d.ts.map +0 -1
  549. package/dist/mutator/project.test.d.ts +0 -2
  550. package/dist/mutator/project.test.d.ts.map +0 -1
  551. package/dist/mutator/template/direct_template_loader.d.ts +0 -5
  552. package/dist/mutator/template/direct_template_loader.d.ts.map +0 -1
  553. package/dist/mutator/template/direct_template_loader_v3.d.ts +0 -15
  554. package/dist/mutator/template/direct_template_loader_v3.d.ts.map +0 -1
  555. package/dist/mutator/template/render_block.d.ts +0 -32
  556. package/dist/mutator/template/render_block.d.ts.map +0 -1
  557. package/dist/mutator/template/render_template.d.ts.map +0 -1
  558. package/dist/mutator/template/template_loading.d.ts.map +0 -1
  559. package/dist/mutator/template/template_render.test.d.ts +0 -2
  560. package/dist/mutator/template/template_render.test.d.ts.map +0 -1
  561. package/dist/network_check/network_check.d.ts.map +0 -1
  562. package/dist/network_check/network_check.test.d.ts +0 -2
  563. package/dist/network_check/network_check.test.d.ts.map +0 -1
  564. package/dist/network_check/pings.d.ts +0 -32
  565. package/dist/network_check/pings.d.ts.map +0 -1
  566. package/dist/network_check/template.d.ts +0 -57
  567. package/dist/network_check/template.d.ts.map +0 -1
  568. package/dist/network_check/template.test.d.ts +0 -2
  569. package/dist/network_check/template.test.d.ts.map +0 -1
  570. package/dist/network_check/test_utils.d.ts +0 -6
  571. package/dist/network_check/test_utils.d.ts.map +0 -1
  572. package/dist/pool/data.d.ts.map +0 -1
  573. package/dist/pool/driver.d.ts.map +0 -1
  574. package/dist/pool/index.d.ts.map +0 -1
  575. package/dist/pool/p_object_collection.d.ts.map +0 -1
  576. package/dist/pool/result_pool.d.ts.map +0 -1
  577. package/dist/test/block_packs.d.ts +0 -6
  578. package/dist/test/block_packs.d.ts.map +0 -1
  579. package/dist/test/explicit_templates.d.ts +0 -3
  580. package/dist/test/explicit_templates.d.ts.map +0 -1
  581. package/dist/test/known_templates.d.ts +0 -6
  582. package/dist/test/known_templates.d.ts.map +0 -1
  583. package/dist/test_env.d.ts +0 -6
  584. package/dist/test_env.d.ts.map +0 -1
  585. package/dist/worker/WorkerManager.d.ts +0 -12
  586. package/dist/worker/WorkerManager.d.ts.map +0 -1
  587. package/dist/worker/worker.d.ts.map +0 -1
  588. package/dist/worker/workerApi.d.ts +0 -15
  589. package/dist/worker/workerApi.d.ts.map +0 -1
@@ -1,542 +1,511 @@
1
- import { isNotFoundError, isTimeoutOrCancelError, DefaultRetryOptions, ensureResourceIdNotNull, field, Pl, resourceIdToString } from '@milaboratories/pl-client';
2
- import { Computable } from '@milaboratories/computable';
3
- import { projectOverview } from './project_overview.js';
4
- import { randomUUID } from 'node:crypto';
5
- import { withProject, withProjectAuthored } from '../mutator/project.js';
6
- import { SynchronizedTreeState, treeDumpStats } from '@milaboratories/pl-tree';
7
- import { setTimeout } from 'node:timers/promises';
8
- import { frontendData } from './frontend_path.js';
9
- import { blockOutputs, getBlockParameters } from './block.js';
10
- import { projectFieldName } from '../model/project_model.js';
11
- import { cachedDeserialize, notEmpty } from '@milaboratories/ts-helpers';
12
- import { activeConfigs } from './active_cfg.js';
13
- import { NavigationStates } from './navigation_states.js';
14
- import { extractConfig, BLOCK_STORAGE_FACADE_VERSION } from '@platforma-sdk/model';
15
- import fs__default from 'node:fs/promises';
16
- import canonicalize from 'canonicalize';
17
- import { projectOverviewLight } from './project_overview_light.js';
18
- import { applyProjectMigrations } from '../mutator/migration.js';
1
+ import { projectFieldName } from "../model/project_model.js";
2
+ import { withProject, withProjectAuthored } from "../mutator/project.js";
3
+ import { projectOverview } from "./project_overview.js";
4
+ import { frontendData } from "./frontend_path.js";
5
+ import { blockOutputs, getBlockParameters } from "./block.js";
6
+ import { activeConfigs } from "./active_cfg.js";
7
+ import { NavigationStates } from "./navigation_states.js";
8
+ import { projectOverviewLight } from "./project_overview_light.js";
9
+ import { applyProjectMigrations } from "../mutator/migration.js";
10
+ import { BLOCK_STORAGE_FACADE_VERSION, extractConfig } from "@platforma-sdk/model";
11
+ import { cachedDeserialize, notEmpty } from "@milaboratories/ts-helpers";
12
+ import fs from "node:fs/promises";
13
+ import { DefaultRetryOptions, Pl, ensureResourceIdNotNull, field, isNotFoundError, isTimeoutOrCancelError, resourceIdToString } from "@milaboratories/pl-client";
14
+ import { SynchronizedTreeState, treeDumpStats } from "@milaboratories/pl-tree";
15
+ import { Computable } from "@milaboratories/computable";
16
+ import { randomUUID } from "node:crypto";
17
+ import canonicalize from "canonicalize";
18
+ import { setTimeout } from "node:timers/promises";
19
19
 
20
+ //#region src/middle_layer/project.ts
20
21
  function stringifyForDump(object) {
21
- return JSON.stringify(object, (key, value) => {
22
- if (typeof value === "bigint")
23
- return resourceIdToString(value);
24
- else if (ArrayBuffer.isView(value) ||
25
- value instanceof Int8Array ||
26
- value instanceof Uint8Array ||
27
- value instanceof Uint8ClampedArray ||
28
- value instanceof Int16Array ||
29
- value instanceof Uint16Array ||
30
- value instanceof Int32Array ||
31
- value instanceof Uint32Array ||
32
- value instanceof Float32Array ||
33
- value instanceof Float64Array ||
34
- value instanceof BigInt64Array ||
35
- value instanceof BigUint64Array)
36
- return Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString("base64");
37
- else if (Buffer.isBuffer(value))
38
- return value.toString("base64");
39
- return value;
40
- });
22
+ return JSON.stringify(object, (key, value) => {
23
+ if (typeof value === "bigint") return resourceIdToString(value);
24
+ else if (ArrayBuffer.isView(value) || value instanceof Int8Array || value instanceof Uint8Array || value instanceof Uint8ClampedArray || value instanceof Int16Array || value instanceof Uint16Array || value instanceof Int32Array || value instanceof Uint32Array || value instanceof Float32Array || value instanceof Float64Array || value instanceof BigInt64Array || value instanceof BigUint64Array) return Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString("base64");
25
+ else if (Buffer.isBuffer(value)) return value.toString("base64");
26
+ return value;
27
+ });
41
28
  }
42
29
  /** Data access object, to manipulate and read single opened (!) project data. */
43
- class Project {
44
- env;
45
- projectTree;
46
- /** Underlying pl resource id */
47
- rid;
48
- /** Data for the left panel, contain basic information about block status. */
49
- overview;
50
- overviewLight;
51
- navigationStates = new NavigationStates();
52
- // null is set for deleted blocks
53
- blockComputables = new Map();
54
- blockFrontends = new Map();
55
- activeConfigs;
56
- refreshLoopResult;
57
- abortController = new AbortController();
58
- get destroyed() {
59
- return this.abortController.signal.aborted;
60
- }
61
- constructor(env, rid, projectTree) {
62
- this.env = env;
63
- this.projectTree = projectTree;
64
- this.overview = projectOverview(projectTree.entry(), this.navigationStates, env).withPreCalculatedValueTree();
65
- this.overviewLight = projectOverviewLight(projectTree.entry()).withPreCalculatedValueTree();
66
- this.rid = rid;
67
- this.refreshLoopResult = this.refreshLoop();
68
- this.refreshLoopResult.catch((err) => {
69
- env.logger.warn(new Error("Error during refresh loop", { cause: err })); // TODO (safe voiding for now)
70
- });
71
- this.activeConfigs = activeConfigs(projectTree.entry(), env);
72
- }
73
- get projectLockId() {
74
- return "project:" + this.rid.toString();
75
- }
76
- async refreshLoop() {
77
- while (!this.destroyed) {
78
- try {
79
- await withProject(this.env.projectHelper, this.env.pl, this.rid, (prj) => {
80
- prj.doRefresh(this.env.ops.stagingRenderingRate);
81
- }, { name: "doRefresh", lockId: this.projectLockId });
82
- await this.activeConfigs.getValue();
83
- await setTimeout(this.env.ops.projectRefreshInterval, this.abortController.signal);
84
- // Block computables housekeeping
85
- const overviewLight = await this.overviewLight.getValue();
86
- const existingBlocks = new Set(overviewLight.listOfBlocks);
87
- // Doing cleanup for deleted blocks
88
- for (const blockId of this.blockComputables.keys()) {
89
- if (!existingBlocks.has(blockId)) {
90
- const computable = this.blockComputables.get(blockId);
91
- if (computable !== undefined && computable !== null)
92
- computable.fullState.resetState();
93
- this.blockComputables.set(blockId, null);
94
- }
95
- }
96
- }
97
- catch (e) {
98
- // If we're destroyed, exit gracefully regardless of error type
99
- if (this.destroyed) {
100
- // Log just in case, to help with debugging if something unexpected happens during shutdown
101
- this.env.logger.warn(new Error("Error during refresh loop shutdown", { cause: e }));
102
- break;
103
- }
104
- if (isNotFoundError(e)) {
105
- console.warn("project refresh routine terminated, because project was externally deleted");
106
- break;
107
- }
108
- else if (isTimeoutOrCancelError(e)) ;
109
- else {
110
- // TODO: This stops the refresh loop permanently, leaving the project broken.
111
- // Need to decide how to handle this case.
112
- throw new Error("Unexpected exception", { cause: e });
113
- }
114
- }
115
- }
116
- }
117
- /**
118
- * Adds new block to the project.
119
- *
120
- * @param blockLabel block label / title visible to the user
121
- * @param blockPackSpec object describing the "block type", read more in the type docs
122
- * @param before id of the block to insert new block before
123
- * @param blockId internal id to be assigned for the block, this arg can be omitted
124
- * then, randomly generated UUID will be assigned automatically
125
- *
126
- * @return returns newly created block id
127
- * */
128
- async addBlock(blockLabel, blockPackSpec, before, author = undefined, blockId = randomUUID()) {
129
- const preparedBp = await this.env.bpPreparer.prepare(blockPackSpec);
130
- const blockCfgContainer = await this.env.bpPreparer.getBlockConfigContainer(blockPackSpec);
131
- const blockCfg = extractConfig(blockCfgContainer); // full content of this var should never be persisted
132
- this.env.runtimeCapabilities.throwIfIncompatible(blockCfg.featureFlags);
133
- // Build NewBlockSpec based on model API version
134
- const newBlockSpec = blockCfg.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION
135
- ? { storageMode: "fromModel", blockPack: preparedBp }
136
- : {
137
- storageMode: "legacy",
138
- blockPack: preparedBp,
139
- legacyState: canonicalize({
140
- args: blockCfg.initialArgs,
141
- uiState: blockCfg.initialUiState,
142
- }),
143
- };
144
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
145
- return mut.addBlock({
146
- id: blockId,
147
- label: blockLabel,
148
- renderingMode: blockCfg.renderingMode,
149
- }, newBlockSpec, before);
150
- }, {
151
- retryOptions: {
152
- ...DefaultRetryOptions,
153
- backoffMultiplier: DefaultRetryOptions.backoffMultiplier * 1.1,
154
- },
155
- name: "addBlock",
156
- lockId: this.projectLockId,
157
- });
158
- await this.projectTree.refreshState();
159
- return blockId;
160
- }
161
- /**
162
- * Duplicates an existing block by copying all its fields and state.
163
- * This method works at the mutator level for efficient block copying.
164
- *
165
- * @param originalBlockId id of the block to duplicate
166
- * @param before id of the block to insert new block before
167
- * @param author author marker for the duplication operation
168
- * @param newBlockId internal id to be assigned for the duplicated block,
169
- * if omitted, a randomly generated UUID will be assigned
170
- *
171
- * @return returns newly created block id
172
- * */
173
- async duplicateBlock(originalBlockId, before, author = undefined, newBlockId = randomUUID()) {
174
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.duplicateBlock(originalBlockId, newBlockId, before), { name: "duplicateBlock", lockId: this.projectLockId });
175
- await this.projectTree.refreshState();
176
- return newBlockId;
177
- }
178
- /**
179
- * Update block to new block pack, optionally resetting args and ui state to
180
- * initial values
181
- * */
182
- async updateBlockPack(blockId, blockPackSpec, resetArgs = false, author) {
183
- const preparedBp = await this.env.bpPreparer.prepare(blockPackSpec);
184
- const blockCfg = extractConfig(await this.env.bpPreparer.getBlockConfigContainer(blockPackSpec));
185
- this.env.runtimeCapabilities.throwIfIncompatible(blockCfg.featureFlags);
186
- // resetState signals to mutator to reset storage
187
- // For v2+ blocks: mutator gets initial storage directly via getInitialStorageInVM
188
- // For v1 blocks: we pass the legacy state format
189
- const resetState = resetArgs
190
- ? {
191
- state: blockCfg.modelAPIVersion === 1
192
- ? { args: blockCfg.initialArgs, uiState: blockCfg.initialUiState }
193
- : {},
194
- }
195
- : undefined;
196
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.migrateBlockPack(blockId, preparedBp, resetState), { name: "updateBlockPack", lockId: this.projectLockId });
197
- await this.projectTree.refreshState();
198
- }
199
- /** Deletes a block with all associated data. */
200
- async deleteBlock(blockId, author) {
201
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.deleteBlock(blockId), { name: "deleteBlock", lockId: this.projectLockId });
202
- this.navigationStates.deleteBlock(blockId);
203
- await this.projectTree.refreshState();
204
- }
205
- /**
206
- * Updates block order according to the given array of block ids.
207
- *
208
- * Provided array must contain exactly the same set of ids current project cosists of,
209
- * an error will be thrown instead.
210
- */
211
- async reorderBlocks(blocks, author) {
212
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
213
- const currentStructure = mut.structure;
214
- if (currentStructure.groups.length !== 1)
215
- throw new Error("Unexpected project structure, non-singular block group");
216
- const currentGroup = currentStructure.groups[0];
217
- if (currentGroup.blocks.length !== blocks.length)
218
- throw new Error(`Length mismatch: ${currentGroup.blocks.length} !== ${blocks.length}`);
219
- if (new Set(blocks).size !== blocks.length)
220
- throw new Error(`Repeated block ids`);
221
- const newStructure = {
222
- groups: [
223
- {
224
- id: currentGroup.id,
225
- label: currentGroup.label,
226
- blocks: blocks.map((blockId) => {
227
- const block = currentGroup.blocks.find((b) => b.id === blockId);
228
- if (block === undefined)
229
- throw new Error(`Can't find block: ${blockId}`);
230
- return block;
231
- }),
232
- },
233
- ],
234
- };
235
- mut.updateStructure(newStructure);
236
- }, { name: "reorderBlocks", lockId: this.projectLockId });
237
- await this.projectTree.refreshState();
238
- }
239
- /**
240
- * Renders production part of the block starting all connected heavy computations.
241
- * Upstream blocks of the specified block will be started automatically if in
242
- * stale state.
243
- * */
244
- async runBlock(blockId) {
245
- await withProject(this.env.projectHelper, this.env.pl, this.rid, (mut) => mut.renderProduction([blockId], true), { name: "runBlock", lockId: this.projectLockId });
246
- await this.projectTree.refreshState();
247
- }
248
- /**
249
- * Stops the block if it is running by destroying its production state. All
250
- * its downstreams will also be destroyed or moved to limbo if already
251
- * calculated.
252
- * */
253
- async stopBlock(blockId) {
254
- await withProject(this.env.projectHelper, this.env.pl, this.rid, (mut) => mut.stopProduction(blockId), { name: "stopBlock", lockId: this.projectLockId });
255
- await this.projectTree.refreshState();
256
- }
257
- /**
258
- * @deprecated Use mutateBlockStorage() for V3 blocks.
259
- * Sets block args, and changes whole project state accordingly.
260
- * Along with setting arguments one can specify author marker, that will be
261
- * transactionally associated with the block, to facilitate conflict resolution
262
- * in collaborative editing scenario.
263
- * */
264
- async setBlockArgs(blockId, args, author) {
265
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
266
- const state = mut.mergeBlockState(blockId, { args });
267
- mut.setStates([{ modelAPIVersion: 1, blockId, state }]);
268
- }, { name: "setBlockArgs", lockId: this.projectLockId });
269
- await this.projectTree.refreshState();
270
- }
271
- /**
272
- * @deprecated Use mutateBlockStorage() for V3 blocks.
273
- * Sets ui block state associated with the block.
274
- * Along with setting arguments one can specify author marker, that will be
275
- * transactionally associated with the block, to facilitate conflict resolution
276
- * in collaborative editing scenario.
277
- * */
278
- async setUiState(blockId, uiState, author) {
279
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
280
- const state = mut.mergeBlockState(blockId, { uiState });
281
- mut.setStates([{ modelAPIVersion: 1, blockId, state }]);
282
- }, { name: "setUiState", lockId: this.projectLockId });
283
- await this.projectTree.refreshState();
284
- }
285
- /**
286
- * @deprecated Use mutateBlockStorage() for V3 blocks.
287
- * Sets block args and ui state, and changes the whole project state accordingly.
288
- * Along with setting arguments one can specify author marker, that will be
289
- * transactionally associated with the block, to facilitate conflict resolution
290
- * in collaborative editing scenario.
291
- * */
292
- async setBlockArgsAndUiState(blockId, args, // keep for v1/v2 compatibility
293
- uiState, // keep for v1/v2 compatibility
294
- author) {
295
- // Normalize to unified state format { args, uiState } for v1/v2 blocks
296
- const state = { args, uiState };
297
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
298
- mut.setStates([{ modelAPIVersion: 1, blockId, state }]);
299
- }, { name: "setBlockArgsAndUiState", lockId: this.projectLockId });
300
- await this.projectTree.refreshState();
301
- }
302
- /**
303
- * Sets navigation state.
304
- * */
305
- //
306
- async setNavigationState(blockId, state) {
307
- this.navigationStates.setState(blockId, state);
308
- }
309
- /**
310
- * Mutates block storage for Model API v3 blocks.
311
- * Applies a storage operation (e.g., 'update-data') which triggers
312
- * args derivation (args(data) and prerunArgs(data)).
313
- * The derived args are stored atomically with the data.
314
- *
315
- * @param blockId - The block ID
316
- * @param payload - Storage mutation payload with operation and value
317
- * @param author - Optional author marker for collaborative editing
318
- */
319
- async mutateBlockStorage(blockId, payload, author) {
320
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.setStates([{ modelAPIVersion: 2, blockId, payload }]), { name: "mutateBlockStorage", lockId: this.projectLockId });
321
- await this.projectTree.refreshState();
322
- }
323
- /** Update block settings */
324
- async setBlockSettings(blockId, newValue) {
325
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, undefined, (mut) => {
326
- mut.setBlockSettings(blockId, newValue);
327
- }, { name: "setBlockSettings" });
328
- await this.projectTree.refreshState();
329
- }
330
- /**
331
- * Sets raw block storage content directly.
332
- * This bypasses all normalization and VM transformations.
333
- *
334
- * @param blockId The block to set storage for
335
- * @param rawStorageJson Raw storage as JSON string
336
- */
337
- async setBlockStorageRaw(blockId, rawStorageJson) {
338
- await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, undefined, (mut) => {
339
- mut.setBlockStorageRaw(blockId, rawStorageJson);
340
- }, { name: "setBlockStorageRaw" });
341
- await this.projectTree.refreshState();
342
- }
343
- /** Resets arguments and ui state of the block to initial state */
344
- async resetBlockArgsAndUiState(blockId, author) {
345
- await this.env.pl.withWriteTx("BlockInputsReset", async (tx) => {
346
- // reading default arg values from block pack
347
- const bpHolderRid = ensureResourceIdNotNull((await tx.getField(field(this.rid, projectFieldName(blockId, "blockPack")))).value);
348
- const bpRid = ensureResourceIdNotNull((await tx.getField(field(bpHolderRid, Pl.HolderRefField))).value);
349
- const bpData = await tx.getResourceData(bpRid, false);
350
- const config = extractConfig(cachedDeserialize(notEmpty(bpData.data)).config);
351
- await withProjectAuthored(this.env.projectHelper, tx, this.rid, author, (prj) => {
352
- if (config.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION) {
353
- // V2+: Reset to initial storage via VM
354
- prj.resetToInitialStorage(blockId);
355
- }
356
- else {
357
- // V1: Use legacy state format
358
- const initialState = { args: config.initialArgs, uiState: config.initialUiState };
359
- prj.setStates([{ modelAPIVersion: 1, blockId, state: initialState }]);
360
- }
361
- }, { name: "resetBlockArgsAndUiState", lockId: this.projectLockId });
362
- await tx.commit();
363
- });
364
- await this.projectTree.refreshState();
365
- }
366
- getBlockComputables(blockId) {
367
- const cached = this.blockComputables.get(blockId);
368
- if (cached === null)
369
- throw new Error(`Block ${blockId} is deleted`);
370
- if (cached === undefined) {
371
- // state consists of inputs (args + ui state) and outputs
372
- const outputs = blockOutputs(this.projectTree.entry(), blockId, this.env);
373
- const fullState = Computable.make((ctx) => {
374
- return {
375
- parameters: getBlockParameters(this.projectTree.entry(), blockId, ctx),
376
- outputs,
377
- navigationState: this.navigationStates.getState(blockId),
378
- overview: this.overview,
379
- };
380
- }, {
381
- postprocessValue: (v) => {
382
- const blockOverview = v.overview?.blocks?.find((b) => b.id == blockId);
383
- const sdkVersion = blockOverview?.sdkVersion;
384
- const storageDebugView = blockOverview?.storageDebugView;
385
- const toString = sdkVersion && shouldStillUseStringErrors(sdkVersion);
386
- const newOutputs = toString && v.outputs !== undefined ? convertErrorsToStrings(v.outputs) : v.outputs;
387
- return {
388
- ...v.parameters,
389
- outputs: newOutputs,
390
- navigationState: v.navigationState,
391
- storageDebugView,
392
- };
393
- },
394
- });
395
- const computables = {
396
- fullState: fullState.withPreCalculatedValueTree(),
397
- };
398
- this.blockComputables.set(blockId, computables);
399
- return computables;
400
- }
401
- return cached;
402
- }
403
- /**
404
- * Returns a computable, that can be used to retrieve and watch full block state,
405
- * including outputs, arguments, ui state.
406
- * */
407
- getBlockState(blockId) {
408
- return this.getBlockComputables(blockId).fullState;
409
- }
410
- /**
411
- * Returns a computable, that can be used to retrieve and watch path of the
412
- * folder containing frontend code.
413
- * */
414
- getBlockFrontend(blockId) {
415
- const cached = this.blockFrontends.get(blockId);
416
- if (cached === undefined) {
417
- const fd = frontendData(this.projectTree.entry(), blockId, this.env).withPreCalculatedValueTree();
418
- this.blockFrontends.set(blockId, fd);
419
- return fd;
420
- }
421
- return cached;
422
- }
423
- /** Called by middle layer on close */
424
- async destroy() {
425
- // terminating the project service loop
426
- this.abortController.abort();
427
- try {
428
- await this.refreshLoopResult;
429
- }
430
- catch (e) {
431
- // Error was already logged in the constructor's catch handler, but log again for context
432
- this.env.logger.warn(new Error("Refresh loop had terminated with error before destroy", { cause: e }));
433
- }
434
- // terminating the synchronized project tree
435
- try {
436
- await this.projectTree.terminate();
437
- }
438
- catch (e) {
439
- // TODO: SynchronizedTreeState.terminate() can throw if mainLoop had an error before termination
440
- // Log error but continue cleanup - we must clean up remaining resources
441
- this.env.logger.warn(new Error("Project tree termination failed", { cause: e }));
442
- }
443
- // the following will deregister all external resource holders, like
444
- // downloaded files, running uploads and alike
445
- this.overview.resetState();
446
- this.blockFrontends.forEach((c) => c.resetState());
447
- this.blockComputables.forEach((c) => {
448
- if (c !== null)
449
- c.fullState.resetState();
450
- });
451
- this.activeConfigs.resetState();
452
- }
453
- /** @deprecated */
454
- async destroyAndAwaitTermination() {
455
- await this.destroy();
456
- }
457
- dumpState() {
458
- return this.projectTree.dumpState();
459
- }
460
- static async init(env, rid) {
461
- // Applying migrations to the project resource, if needed
462
- await applyProjectMigrations(env.pl, rid);
463
- // Doing a no-op mutation to apply all migration and schema fixes
464
- await withProject(env.projectHelper, env.pl, rid, (_) => { }, { name: "init" });
465
- // Loading project tree
466
- const projectTree = await SynchronizedTreeState.init(env.pl, rid, {
467
- ...env.ops.defaultTreeOptions,
468
- pruning: projectTreePruning(env.logger),
469
- }, env.logger);
470
- if (env.ops.debugOps.dumpInitialTreeState) {
471
- const state = projectTree.dumpState();
472
- state.sort((a, b) => (b.data?.byteLength ?? 0) - (a.data?.byteLength ?? 0));
473
- const stats = treeDumpStats(state);
474
- await fs__default.writeFile(`${resourceIdToString(rid)}.json`, stringifyForDump(state));
475
- await fs__default.writeFile(`${resourceIdToString(rid)}.stats.json`, stringifyForDump(stats));
476
- }
477
- return new Project(env, rid, projectTree);
478
- }
479
- }
30
+ var Project = class Project {
31
+ /** Underlying pl resource id */
32
+ rid;
33
+ /** Data for the left panel, contain basic information about block status. */
34
+ overview;
35
+ overviewLight;
36
+ navigationStates = new NavigationStates();
37
+ blockComputables = /* @__PURE__ */ new Map();
38
+ blockFrontends = /* @__PURE__ */ new Map();
39
+ activeConfigs;
40
+ refreshLoopResult;
41
+ abortController = new AbortController();
42
+ get destroyed() {
43
+ return this.abortController.signal.aborted;
44
+ }
45
+ constructor(env, rid, projectTree) {
46
+ this.env = env;
47
+ this.projectTree = projectTree;
48
+ this.overview = projectOverview(projectTree.entry(), this.navigationStates, env).withPreCalculatedValueTree();
49
+ this.overviewLight = projectOverviewLight(projectTree.entry()).withPreCalculatedValueTree();
50
+ this.rid = rid;
51
+ this.refreshLoopResult = this.refreshLoop();
52
+ this.refreshLoopResult.catch((err) => {
53
+ env.logger.warn(new Error("Error during refresh loop", { cause: err }));
54
+ });
55
+ this.activeConfigs = activeConfigs(projectTree.entry(), env);
56
+ }
57
+ get projectLockId() {
58
+ return "project:" + this.rid.toString();
59
+ }
60
+ async refreshLoop() {
61
+ while (!this.destroyed) try {
62
+ await withProject(this.env.projectHelper, this.env.pl, this.rid, (prj) => {
63
+ prj.doRefresh(this.env.ops.stagingRenderingRate);
64
+ }, {
65
+ name: "doRefresh",
66
+ lockId: this.projectLockId
67
+ });
68
+ await this.activeConfigs.getValue();
69
+ await setTimeout(this.env.ops.projectRefreshInterval, this.abortController.signal);
70
+ const overviewLight = await this.overviewLight.getValue();
71
+ const existingBlocks = new Set(overviewLight.listOfBlocks);
72
+ for (const blockId of this.blockComputables.keys()) if (!existingBlocks.has(blockId)) {
73
+ const computable = this.blockComputables.get(blockId);
74
+ if (computable !== void 0 && computable !== null) computable.fullState.resetState();
75
+ this.blockComputables.set(blockId, null);
76
+ }
77
+ } catch (e) {
78
+ if (this.destroyed) {
79
+ this.env.logger.warn(new Error("Error during refresh loop shutdown", { cause: e }));
80
+ break;
81
+ }
82
+ if (isNotFoundError(e)) {
83
+ console.warn("project refresh routine terminated, because project was externally deleted");
84
+ break;
85
+ } else if (isTimeoutOrCancelError(e)) {} else throw new Error("Unexpected exception", { cause: e });
86
+ }
87
+ }
88
+ /**
89
+ * Adds new block to the project.
90
+ *
91
+ * @param blockLabel block label / title visible to the user
92
+ * @param blockPackSpec object describing the "block type", read more in the type docs
93
+ * @param before id of the block to insert new block before
94
+ * @param blockId internal id to be assigned for the block, this arg can be omitted
95
+ * then, randomly generated UUID will be assigned automatically
96
+ *
97
+ * @return returns newly created block id
98
+ * */
99
+ async addBlock(blockLabel, blockPackSpec, before, author = void 0, blockId = randomUUID()) {
100
+ const preparedBp = await this.env.bpPreparer.prepare(blockPackSpec);
101
+ const blockCfg = extractConfig(await this.env.bpPreparer.getBlockConfigContainer(blockPackSpec));
102
+ this.env.runtimeCapabilities.throwIfIncompatible(blockCfg.featureFlags);
103
+ const newBlockSpec = blockCfg.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION ? {
104
+ storageMode: "fromModel",
105
+ blockPack: preparedBp
106
+ } : {
107
+ storageMode: "legacy",
108
+ blockPack: preparedBp,
109
+ legacyState: canonicalize({
110
+ args: blockCfg.initialArgs,
111
+ uiState: blockCfg.initialUiState
112
+ })
113
+ };
114
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
115
+ return mut.addBlock({
116
+ id: blockId,
117
+ label: blockLabel,
118
+ renderingMode: blockCfg.renderingMode
119
+ }, newBlockSpec, before);
120
+ }, {
121
+ retryOptions: {
122
+ ...DefaultRetryOptions,
123
+ backoffMultiplier: DefaultRetryOptions.backoffMultiplier * 1.1
124
+ },
125
+ name: "addBlock",
126
+ lockId: this.projectLockId
127
+ });
128
+ await this.projectTree.refreshState();
129
+ return blockId;
130
+ }
131
+ /**
132
+ * Duplicates an existing block by copying all its fields and state.
133
+ * This method works at the mutator level for efficient block copying.
134
+ *
135
+ * @param originalBlockId id of the block to duplicate
136
+ * @param before id of the block to insert new block before
137
+ * @param author author marker for the duplication operation
138
+ * @param newBlockId internal id to be assigned for the duplicated block,
139
+ * if omitted, a randomly generated UUID will be assigned
140
+ *
141
+ * @return returns newly created block id
142
+ * */
143
+ async duplicateBlock(originalBlockId, before, author = void 0, newBlockId = randomUUID()) {
144
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.duplicateBlock(originalBlockId, newBlockId, before), {
145
+ name: "duplicateBlock",
146
+ lockId: this.projectLockId
147
+ });
148
+ await this.projectTree.refreshState();
149
+ return newBlockId;
150
+ }
151
+ /**
152
+ * Update block to new block pack, optionally resetting args and ui state to
153
+ * initial values
154
+ * */
155
+ async updateBlockPack(blockId, blockPackSpec, resetArgs = false, author) {
156
+ const preparedBp = await this.env.bpPreparer.prepare(blockPackSpec);
157
+ const blockCfg = extractConfig(await this.env.bpPreparer.getBlockConfigContainer(blockPackSpec));
158
+ this.env.runtimeCapabilities.throwIfIncompatible(blockCfg.featureFlags);
159
+ const resetState = resetArgs ? { state: blockCfg.modelAPIVersion === 1 ? {
160
+ args: blockCfg.initialArgs,
161
+ uiState: blockCfg.initialUiState
162
+ } : {} } : void 0;
163
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.migrateBlockPack(blockId, preparedBp, resetState), {
164
+ name: "updateBlockPack",
165
+ lockId: this.projectLockId
166
+ });
167
+ await this.projectTree.refreshState();
168
+ }
169
+ /** Deletes a block with all associated data. */
170
+ async deleteBlock(blockId, author) {
171
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.deleteBlock(blockId), {
172
+ name: "deleteBlock",
173
+ lockId: this.projectLockId
174
+ });
175
+ this.navigationStates.deleteBlock(blockId);
176
+ await this.projectTree.refreshState();
177
+ }
178
+ /**
179
+ * Updates block order according to the given array of block ids.
180
+ *
181
+ * Provided array must contain exactly the same set of ids current project cosists of,
182
+ * an error will be thrown instead.
183
+ */
184
+ async reorderBlocks(blocks, author) {
185
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
186
+ const currentStructure = mut.structure;
187
+ if (currentStructure.groups.length !== 1) throw new Error("Unexpected project structure, non-singular block group");
188
+ const currentGroup = currentStructure.groups[0];
189
+ if (currentGroup.blocks.length !== blocks.length) throw new Error(`Length mismatch: ${currentGroup.blocks.length} !== ${blocks.length}`);
190
+ if (new Set(blocks).size !== blocks.length) throw new Error(`Repeated block ids`);
191
+ const newStructure = { groups: [{
192
+ id: currentGroup.id,
193
+ label: currentGroup.label,
194
+ blocks: blocks.map((blockId) => {
195
+ const block = currentGroup.blocks.find((b) => b.id === blockId);
196
+ if (block === void 0) throw new Error(`Can't find block: ${blockId}`);
197
+ return block;
198
+ })
199
+ }] };
200
+ mut.updateStructure(newStructure);
201
+ }, {
202
+ name: "reorderBlocks",
203
+ lockId: this.projectLockId
204
+ });
205
+ await this.projectTree.refreshState();
206
+ }
207
+ /**
208
+ * Renders production part of the block starting all connected heavy computations.
209
+ * Upstream blocks of the specified block will be started automatically if in
210
+ * stale state.
211
+ * */
212
+ async runBlock(blockId) {
213
+ await withProject(this.env.projectHelper, this.env.pl, this.rid, (mut) => mut.renderProduction([blockId], true), {
214
+ name: "runBlock",
215
+ lockId: this.projectLockId
216
+ });
217
+ await this.projectTree.refreshState();
218
+ }
219
+ /**
220
+ * Stops the block if it is running by destroying its production state. All
221
+ * its downstreams will also be destroyed or moved to limbo if already
222
+ * calculated.
223
+ * */
224
+ async stopBlock(blockId) {
225
+ await withProject(this.env.projectHelper, this.env.pl, this.rid, (mut) => mut.stopProduction(blockId), {
226
+ name: "stopBlock",
227
+ lockId: this.projectLockId
228
+ });
229
+ await this.projectTree.refreshState();
230
+ }
231
+ /**
232
+ * @deprecated Use mutateBlockStorage() for V3 blocks.
233
+ * Sets block args, and changes whole project state accordingly.
234
+ * Along with setting arguments one can specify author marker, that will be
235
+ * transactionally associated with the block, to facilitate conflict resolution
236
+ * in collaborative editing scenario.
237
+ * */
238
+ async setBlockArgs(blockId, args, author) {
239
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
240
+ const state = mut.mergeBlockState(blockId, { args });
241
+ mut.setStates([{
242
+ modelAPIVersion: 1,
243
+ blockId,
244
+ state
245
+ }]);
246
+ }, {
247
+ name: "setBlockArgs",
248
+ lockId: this.projectLockId
249
+ });
250
+ await this.projectTree.refreshState();
251
+ }
252
+ /**
253
+ * @deprecated Use mutateBlockStorage() for V3 blocks.
254
+ * Sets ui block state associated with the block.
255
+ * Along with setting arguments one can specify author marker, that will be
256
+ * transactionally associated with the block, to facilitate conflict resolution
257
+ * in collaborative editing scenario.
258
+ * */
259
+ async setUiState(blockId, uiState, author) {
260
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
261
+ const state = mut.mergeBlockState(blockId, { uiState });
262
+ mut.setStates([{
263
+ modelAPIVersion: 1,
264
+ blockId,
265
+ state
266
+ }]);
267
+ }, {
268
+ name: "setUiState",
269
+ lockId: this.projectLockId
270
+ });
271
+ await this.projectTree.refreshState();
272
+ }
273
+ /**
274
+ * @deprecated Use mutateBlockStorage() for V3 blocks.
275
+ * Sets block args and ui state, and changes the whole project state accordingly.
276
+ * Along with setting arguments one can specify author marker, that will be
277
+ * transactionally associated with the block, to facilitate conflict resolution
278
+ * in collaborative editing scenario.
279
+ * */
280
+ async setBlockArgsAndUiState(blockId, args, uiState, author) {
281
+ const state = {
282
+ args,
283
+ uiState
284
+ };
285
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
286
+ mut.setStates([{
287
+ modelAPIVersion: 1,
288
+ blockId,
289
+ state
290
+ }]);
291
+ }, {
292
+ name: "setBlockArgsAndUiState",
293
+ lockId: this.projectLockId
294
+ });
295
+ await this.projectTree.refreshState();
296
+ }
297
+ /**
298
+ * Sets navigation state.
299
+ * */
300
+ async setNavigationState(blockId, state) {
301
+ this.navigationStates.setState(blockId, state);
302
+ }
303
+ /**
304
+ * Mutates block storage for Model API v3 blocks.
305
+ * Applies a storage operation (e.g., 'update-data') which triggers
306
+ * args derivation (args(data) and prerunArgs(data)).
307
+ * The derived args are stored atomically with the data.
308
+ *
309
+ * @param blockId - The block ID
310
+ * @param payload - Storage mutation payload with operation and value
311
+ * @param author - Optional author marker for collaborative editing
312
+ */
313
+ async mutateBlockStorage(blockId, payload, author) {
314
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.setStates([{
315
+ modelAPIVersion: 2,
316
+ blockId,
317
+ payload
318
+ }]), {
319
+ name: "mutateBlockStorage",
320
+ lockId: this.projectLockId
321
+ });
322
+ await this.projectTree.refreshState();
323
+ }
324
+ /** Update block settings */
325
+ async setBlockSettings(blockId, newValue) {
326
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, void 0, (mut) => {
327
+ mut.setBlockSettings(blockId, newValue);
328
+ }, { name: "setBlockSettings" });
329
+ await this.projectTree.refreshState();
330
+ }
331
+ /**
332
+ * Sets raw block storage content directly.
333
+ * This bypasses all normalization and VM transformations.
334
+ *
335
+ * @param blockId The block to set storage for
336
+ * @param rawStorageJson Raw storage as JSON string
337
+ */
338
+ async setBlockStorageRaw(blockId, rawStorageJson) {
339
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, void 0, (mut) => {
340
+ mut.setBlockStorageRaw(blockId, rawStorageJson);
341
+ }, { name: "setBlockStorageRaw" });
342
+ await this.projectTree.refreshState();
343
+ }
344
+ /** Resets arguments and ui state of the block to initial state */
345
+ async resetBlockArgsAndUiState(blockId, author) {
346
+ await this.env.pl.withWriteTx("BlockInputsReset", async (tx) => {
347
+ const bpHolderRid = ensureResourceIdNotNull((await tx.getField(field(this.rid, projectFieldName(blockId, "blockPack")))).value);
348
+ const bpRid = ensureResourceIdNotNull((await tx.getField(field(bpHolderRid, Pl.HolderRefField))).value);
349
+ const config = extractConfig(cachedDeserialize(notEmpty((await tx.getResourceData(bpRid, false)).data)).config);
350
+ await withProjectAuthored(this.env.projectHelper, tx, this.rid, author, (prj) => {
351
+ if (config.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION) prj.resetToInitialStorage(blockId);
352
+ else {
353
+ const initialState = {
354
+ args: config.initialArgs,
355
+ uiState: config.initialUiState
356
+ };
357
+ prj.setStates([{
358
+ modelAPIVersion: 1,
359
+ blockId,
360
+ state: initialState
361
+ }]);
362
+ }
363
+ }, {
364
+ name: "resetBlockArgsAndUiState",
365
+ lockId: this.projectLockId
366
+ });
367
+ await tx.commit();
368
+ });
369
+ await this.projectTree.refreshState();
370
+ }
371
+ getBlockComputables(blockId) {
372
+ const cached = this.blockComputables.get(blockId);
373
+ if (cached === null) throw new Error(`Block ${blockId} is deleted`);
374
+ if (cached === void 0) {
375
+ const outputs = blockOutputs(this.projectTree.entry(), blockId, this.env);
376
+ const computables = { fullState: Computable.make((ctx) => {
377
+ return {
378
+ parameters: getBlockParameters(this.projectTree.entry(), blockId, ctx),
379
+ outputs,
380
+ navigationState: this.navigationStates.getState(blockId),
381
+ overview: this.overview
382
+ };
383
+ }, { postprocessValue: (v) => {
384
+ const blockOverview = v.overview?.blocks?.find((b) => b.id == blockId);
385
+ const sdkVersion = blockOverview?.sdkVersion;
386
+ const storageDebugView = blockOverview?.storageDebugView;
387
+ const newOutputs = sdkVersion && shouldStillUseStringErrors(sdkVersion) && v.outputs !== void 0 ? convertErrorsToStrings(v.outputs) : v.outputs;
388
+ return {
389
+ ...v.parameters,
390
+ outputs: newOutputs,
391
+ navigationState: v.navigationState,
392
+ storageDebugView
393
+ };
394
+ } }).withPreCalculatedValueTree() };
395
+ this.blockComputables.set(blockId, computables);
396
+ return computables;
397
+ }
398
+ return cached;
399
+ }
400
+ /**
401
+ * Returns a computable, that can be used to retrieve and watch full block state,
402
+ * including outputs, arguments, ui state.
403
+ * */
404
+ getBlockState(blockId) {
405
+ return this.getBlockComputables(blockId).fullState;
406
+ }
407
+ /**
408
+ * Returns a computable, that can be used to retrieve and watch path of the
409
+ * folder containing frontend code.
410
+ * */
411
+ getBlockFrontend(blockId) {
412
+ const cached = this.blockFrontends.get(blockId);
413
+ if (cached === void 0) {
414
+ const fd = frontendData(this.projectTree.entry(), blockId, this.env).withPreCalculatedValueTree();
415
+ this.blockFrontends.set(blockId, fd);
416
+ return fd;
417
+ }
418
+ return cached;
419
+ }
420
+ /** Called by middle layer on close */
421
+ async destroy() {
422
+ this.abortController.abort();
423
+ try {
424
+ await this.refreshLoopResult;
425
+ } catch (e) {
426
+ this.env.logger.warn(new Error("Refresh loop had terminated with error before destroy", { cause: e }));
427
+ }
428
+ try {
429
+ await this.projectTree.terminate();
430
+ } catch (e) {
431
+ this.env.logger.warn(new Error("Project tree termination failed", { cause: e }));
432
+ }
433
+ this.overview.resetState();
434
+ this.blockFrontends.forEach((c) => c.resetState());
435
+ this.blockComputables.forEach((c) => {
436
+ if (c !== null) c.fullState.resetState();
437
+ });
438
+ this.activeConfigs.resetState();
439
+ }
440
+ /** @deprecated */
441
+ async destroyAndAwaitTermination() {
442
+ await this.destroy();
443
+ }
444
+ dumpState() {
445
+ return this.projectTree.dumpState();
446
+ }
447
+ static async init(env, rid) {
448
+ await applyProjectMigrations(env.pl, rid);
449
+ await withProject(env.projectHelper, env.pl, rid, (_) => {}, { name: "init" });
450
+ const projectTree = await SynchronizedTreeState.init(env.pl, rid, {
451
+ ...env.ops.defaultTreeOptions,
452
+ pruning: projectTreePruning(env.logger)
453
+ }, env.logger);
454
+ if (env.ops.debugOps.dumpInitialTreeState) {
455
+ const state = projectTree.dumpState();
456
+ state.sort((a, b) => (b.data?.byteLength ?? 0) - (a.data?.byteLength ?? 0));
457
+ const stats = treeDumpStats(state);
458
+ await fs.writeFile(`${resourceIdToString(rid)}.json`, stringifyForDump(state));
459
+ await fs.writeFile(`${resourceIdToString(rid)}.stats.json`, stringifyForDump(stats));
460
+ }
461
+ return new Project(env, rid, projectTree);
462
+ }
463
+ };
480
464
  function projectTreePruning(logger) {
481
- return (r) => {
482
- if (r.fields.length > 1000)
483
- logger.warn(`resource with excessive field count: type=${r.type.name} id=${r.id} fields=${r.fields.length}` +
484
- ` names=[${r.fields
485
- .slice(0, 10)
486
- .map((f) => f.name)
487
- .join(", ")}, ...]`);
488
- if (r.type.name.startsWith("StreamWorkdir/"))
489
- return [];
490
- switch (r.type.name) {
491
- case "BlockPackCustom":
492
- return r.fields.filter((f) => f.name !== "template");
493
- case "UserProject":
494
- return r.fields.filter((f) => !f.name.startsWith("__serviceTemplate"));
495
- case "Blob":
496
- return [];
497
- default:
498
- return r.fields;
499
- }
500
- };
465
+ return (r) => {
466
+ if (r.fields.length > 1e3) logger.warn(`resource with excessive field count: type=${r.type.name} id=${r.id} fields=${r.fields.length} names=[${r.fields.slice(0, 10).map((f) => f.name).join(", ")}, ...]`);
467
+ if (r.type.name.startsWith("StreamWorkdir/")) return [];
468
+ switch (r.type.name) {
469
+ case "BlockPackCustom": return r.fields.filter((f) => f.name !== "template");
470
+ case "UserProject": return r.fields.filter((f) => !f.name.startsWith("__serviceTemplate"));
471
+ case "Blob": return [];
472
+ default: return r.fields;
473
+ }
474
+ };
501
475
  }
502
476
  /** Returns true if sdk version of the block is old and we need to convert
503
- * ErrorLike errors to strings like it was.
504
- * We need it for keeping old blocks and new UI compatibility. */
477
+ * ErrorLike errors to strings like it was.
478
+ * We need it for keeping old blocks and new UI compatibility. */
505
479
  function shouldStillUseStringErrors(sdkVersion) {
506
- return !isVersionGreater(sdkVersion, "1.26.0");
480
+ return !isVersionGreater(sdkVersion, "1.26.0");
507
481
  }
508
482
  /** Checks if sdk version is greater that a target version. */
509
483
  function isVersionGreater(sdkVersion, targetVersion) {
510
- const version = sdkVersion.split(".").map(Number);
511
- const target = targetVersion.split(".").map(Number);
512
- return (version[0] > target[0] ||
513
- (version[0] === target[0] && version[1] > target[1]) ||
514
- (version[0] === target[0] && version[1] === target[1] && version[2] > target[2]));
484
+ const version = sdkVersion.split(".").map(Number);
485
+ const target = targetVersion.split(".").map(Number);
486
+ return version[0] > target[0] || version[0] === target[0] && version[1] > target[1] || version[0] === target[0] && version[1] === target[1] && version[2] > target[2];
515
487
  }
516
488
  /** Converts ErrorLike errors to strings in the outputs like it was in old ML versions. */
517
489
  function convertErrorsToStrings(outputs) {
518
- const result = {};
519
- for (const [key, val] of Object.entries(outputs)) {
520
- if (val.ok) {
521
- result[key] = val;
522
- continue;
523
- }
524
- result[key] = {
525
- ok: false,
526
- errors: val.errors.map((e) => {
527
- if (typeof e === "string") {
528
- return e;
529
- }
530
- else if (e.type == "PlError" && e.fullMessage !== undefined) {
531
- return e.fullMessage;
532
- }
533
- return e.message;
534
- }),
535
- moreErrors: val.moreErrors,
536
- };
537
- }
538
- return result;
490
+ const result = {};
491
+ for (const [key, val] of Object.entries(outputs)) {
492
+ if (val.ok) {
493
+ result[key] = val;
494
+ continue;
495
+ }
496
+ result[key] = {
497
+ ok: false,
498
+ errors: val.errors.map((e) => {
499
+ if (typeof e === "string") return e;
500
+ else if (e.type == "PlError" && e.fullMessage !== void 0) return e.fullMessage;
501
+ return e.message;
502
+ }),
503
+ moreErrors: val.moreErrors
504
+ };
505
+ }
506
+ return result;
539
507
  }
540
508
 
509
+ //#endregion
541
510
  export { Project };
542
- //# sourceMappingURL=project.js.map
511
+ //# sourceMappingURL=project.js.map