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