@milaboratories/pl-middle-layer 1.42.1 → 1.42.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/dist/block_registry/index.d.ts +0 -1
  2. package/dist/block_registry/registry-v2-provider.cjs +22 -0
  3. package/dist/block_registry/registry-v2-provider.cjs.map +1 -0
  4. package/dist/block_registry/registry-v2-provider.d.ts +0 -1
  5. package/dist/block_registry/registry-v2-provider.js +20 -0
  6. package/dist/block_registry/registry-v2-provider.js.map +1 -0
  7. package/dist/block_registry/registry.cjs +231 -0
  8. package/dist/block_registry/registry.cjs.map +1 -0
  9. package/dist/block_registry/registry.d.ts +0 -1
  10. package/dist/block_registry/registry.js +227 -0
  11. package/dist/block_registry/registry.js.map +1 -0
  12. package/dist/block_registry/registry.test.d.ts +0 -1
  13. package/dist/block_registry/watcher.cjs +174 -0
  14. package/dist/block_registry/watcher.cjs.map +1 -0
  15. package/dist/block_registry/watcher.d.ts +0 -1
  16. package/dist/block_registry/watcher.js +171 -0
  17. package/dist/block_registry/watcher.js.map +1 -0
  18. package/dist/block_registry/well_known_registries.cjs +19 -0
  19. package/dist/block_registry/well_known_registries.cjs.map +1 -0
  20. package/dist/block_registry/well_known_registries.d.ts +0 -1
  21. package/dist/block_registry/well_known_registries.js +15 -0
  22. package/dist/block_registry/well_known_registries.js.map +1 -0
  23. package/dist/cfg_render/executor.cjs +159 -0
  24. package/dist/cfg_render/executor.cjs.map +1 -0
  25. package/dist/cfg_render/executor.d.ts +0 -1
  26. package/dist/cfg_render/executor.js +156 -0
  27. package/dist/cfg_render/executor.js.map +1 -0
  28. package/dist/cfg_render/executor.test.d.ts +0 -1
  29. package/dist/cfg_render/operation.d.ts +0 -1
  30. package/dist/cfg_render/renderer.cjs +528 -0
  31. package/dist/cfg_render/renderer.cjs.map +1 -0
  32. package/dist/cfg_render/renderer.d.ts +0 -1
  33. package/dist/cfg_render/renderer.js +525 -0
  34. package/dist/cfg_render/renderer.js.map +1 -0
  35. package/dist/cfg_render/traverse.cjs +65 -0
  36. package/dist/cfg_render/traverse.cjs.map +1 -0
  37. package/dist/cfg_render/traverse.d.ts +0 -1
  38. package/dist/cfg_render/traverse.js +63 -0
  39. package/dist/cfg_render/traverse.js.map +1 -0
  40. package/dist/cfg_render/util.cjs +32 -0
  41. package/dist/cfg_render/util.cjs.map +1 -0
  42. package/dist/cfg_render/util.d.ts +0 -1
  43. package/dist/cfg_render/util.js +28 -0
  44. package/dist/cfg_render/util.js.map +1 -0
  45. package/dist/debug/index.cjs +21 -0
  46. package/dist/debug/index.cjs.map +1 -0
  47. package/dist/debug/index.d.ts +0 -1
  48. package/dist/debug/index.js +19 -0
  49. package/dist/debug/index.js.map +1 -0
  50. package/dist/dev_env/index.cjs +59 -0
  51. package/dist/dev_env/index.cjs.map +1 -0
  52. package/dist/dev_env/index.d.ts +0 -1
  53. package/dist/dev_env/index.js +48 -0
  54. package/dist/dev_env/index.js.map +1 -0
  55. package/dist/dev_env/util.cjs +37 -0
  56. package/dist/dev_env/util.cjs.map +1 -0
  57. package/dist/dev_env/util.d.ts +0 -1
  58. package/dist/dev_env/util.js +16 -0
  59. package/dist/dev_env/util.js.map +1 -0
  60. package/dist/index.cjs +74 -0
  61. package/dist/index.cjs.map +1 -0
  62. package/dist/index.d.ts +0 -1
  63. package/dist/index.js +15 -75
  64. package/dist/index.js.map +1 -1
  65. package/dist/js_render/computable_context.cjs +525 -0
  66. package/dist/js_render/computable_context.cjs.map +1 -0
  67. package/dist/js_render/computable_context.d.ts +0 -1
  68. package/dist/js_render/computable_context.js +523 -0
  69. package/dist/js_render/computable_context.js.map +1 -0
  70. package/dist/js_render/context.cjs +229 -0
  71. package/dist/js_render/context.cjs.map +1 -0
  72. package/dist/js_render/context.d.ts +0 -1
  73. package/dist/js_render/context.js +226 -0
  74. package/dist/js_render/context.js.map +1 -0
  75. package/dist/js_render/index.cjs +163 -0
  76. package/dist/js_render/index.cjs.map +1 -0
  77. package/dist/js_render/index.d.ts +0 -1
  78. package/dist/js_render/index.js +160 -0
  79. package/dist/js_render/index.js.map +1 -0
  80. package/dist/middle_layer/active_cfg.cjs +37 -0
  81. package/dist/middle_layer/active_cfg.cjs.map +1 -0
  82. package/dist/middle_layer/active_cfg.d.ts +0 -1
  83. package/dist/middle_layer/active_cfg.js +35 -0
  84. package/dist/middle_layer/active_cfg.js.map +1 -0
  85. package/dist/middle_layer/block.cjs +51 -0
  86. package/dist/middle_layer/block.cjs.map +1 -0
  87. package/dist/middle_layer/block.d.ts +0 -1
  88. package/dist/middle_layer/block.js +48 -0
  89. package/dist/middle_layer/block.js.map +1 -0
  90. package/dist/middle_layer/block_ctx.cjs +87 -0
  91. package/dist/middle_layer/block_ctx.cjs.map +1 -0
  92. package/dist/middle_layer/block_ctx.d.ts +0 -1
  93. package/dist/middle_layer/block_ctx.js +84 -0
  94. package/dist/middle_layer/block_ctx.js.map +1 -0
  95. package/dist/middle_layer/block_ctx_unsafe.cjs +19 -0
  96. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -0
  97. package/dist/middle_layer/block_ctx_unsafe.d.ts +0 -1
  98. package/dist/middle_layer/block_ctx_unsafe.js +16 -0
  99. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -0
  100. package/dist/middle_layer/driver_kit.cjs +42 -0
  101. package/dist/middle_layer/driver_kit.cjs.map +1 -0
  102. package/dist/middle_layer/driver_kit.d.ts +0 -1
  103. package/dist/middle_layer/driver_kit.js +40 -0
  104. package/dist/middle_layer/driver_kit.js.map +1 -0
  105. package/dist/middle_layer/frontend_path.cjs +64 -0
  106. package/dist/middle_layer/frontend_path.cjs.map +1 -0
  107. package/dist/middle_layer/frontend_path.d.ts +0 -1
  108. package/dist/middle_layer/frontend_path.js +62 -0
  109. package/dist/middle_layer/frontend_path.js.map +1 -0
  110. package/dist/middle_layer/index.d.ts +0 -1
  111. package/dist/middle_layer/middle_layer.cjs +226 -0
  112. package/dist/middle_layer/middle_layer.cjs.map +1 -0
  113. package/dist/middle_layer/middle_layer.d.ts +0 -1
  114. package/dist/middle_layer/middle_layer.js +224 -0
  115. package/dist/middle_layer/middle_layer.js.map +1 -0
  116. package/dist/middle_layer/navigation_states.cjs +41 -0
  117. package/dist/middle_layer/navigation_states.cjs.map +1 -0
  118. package/dist/middle_layer/navigation_states.d.ts +0 -1
  119. package/dist/middle_layer/navigation_states.js +39 -0
  120. package/dist/middle_layer/navigation_states.js.map +1 -0
  121. package/dist/middle_layer/ops.cjs +75 -0
  122. package/dist/middle_layer/ops.cjs.map +1 -0
  123. package/dist/middle_layer/ops.d.ts +0 -1
  124. package/dist/middle_layer/ops.js +70 -0
  125. package/dist/middle_layer/ops.js.map +1 -0
  126. package/dist/middle_layer/project.cjs +446 -0
  127. package/dist/middle_layer/project.cjs.map +1 -0
  128. package/dist/middle_layer/project.d.ts +0 -1
  129. package/dist/middle_layer/project.js +444 -0
  130. package/dist/middle_layer/project.js.map +1 -0
  131. package/dist/middle_layer/project_list.cjs +53 -0
  132. package/dist/middle_layer/project_list.cjs.map +1 -0
  133. package/dist/middle_layer/project_list.d.ts +0 -1
  134. package/dist/middle_layer/project_list.js +48 -0
  135. package/dist/middle_layer/project_list.js.map +1 -0
  136. package/dist/middle_layer/project_overview.cjs +225 -0
  137. package/dist/middle_layer/project_overview.cjs.map +1 -0
  138. package/dist/middle_layer/project_overview.d.ts +0 -1
  139. package/dist/middle_layer/project_overview.js +204 -0
  140. package/dist/middle_layer/project_overview.js.map +1 -0
  141. package/dist/middle_layer/project_overview_light.cjs +20 -0
  142. package/dist/middle_layer/project_overview_light.cjs.map +1 -0
  143. package/dist/middle_layer/project_overview_light.d.ts +0 -1
  144. package/dist/middle_layer/project_overview_light.js +18 -0
  145. package/dist/middle_layer/project_overview_light.js.map +1 -0
  146. package/dist/middle_layer/render.cjs +26 -0
  147. package/dist/middle_layer/render.cjs.map +1 -0
  148. package/dist/middle_layer/render.d.ts +0 -1
  149. package/dist/middle_layer/render.js +23 -0
  150. package/dist/middle_layer/render.js.map +1 -0
  151. package/dist/middle_layer/render.test.d.ts +0 -1
  152. package/dist/middle_layer/types.d.ts +0 -1
  153. package/dist/middle_layer/util.cjs +22 -0
  154. package/dist/middle_layer/util.cjs.map +1 -0
  155. package/dist/middle_layer/util.d.ts +0 -1
  156. package/dist/middle_layer/util.js +20 -0
  157. package/dist/middle_layer/util.js.map +1 -0
  158. package/dist/model/args.cjs +62 -0
  159. package/dist/model/args.cjs.map +1 -0
  160. package/dist/model/args.d.ts +0 -1
  161. package/dist/model/args.js +58 -0
  162. package/dist/model/args.js.map +1 -0
  163. package/dist/model/block_pack.d.ts +0 -1
  164. package/dist/model/block_pack_spec.cjs +11 -0
  165. package/dist/model/block_pack_spec.cjs.map +1 -0
  166. package/dist/model/block_pack_spec.d.ts +0 -1
  167. package/dist/model/block_pack_spec.js +8 -0
  168. package/dist/model/block_pack_spec.js.map +1 -0
  169. package/dist/model/frontend.d.ts +0 -1
  170. package/dist/model/index.d.ts +0 -1
  171. package/dist/model/project_helper.cjs +36 -0
  172. package/dist/model/project_helper.cjs.map +1 -0
  173. package/dist/model/project_helper.d.ts +0 -1
  174. package/dist/model/project_helper.js +34 -0
  175. package/dist/model/project_helper.js.map +1 -0
  176. package/dist/model/project_model.cjs +74 -0
  177. package/dist/model/project_model.cjs.map +1 -0
  178. package/dist/model/project_model.d.ts +0 -1
  179. package/dist/model/project_model.js +54 -0
  180. package/dist/model/project_model.js.map +1 -0
  181. package/dist/model/project_model.test.d.ts +0 -1
  182. package/dist/model/project_model_util.cjs +176 -0
  183. package/dist/model/project_model_util.cjs.map +1 -0
  184. package/dist/model/project_model_util.d.ts +0 -1
  185. package/dist/model/project_model_util.js +170 -0
  186. package/dist/model/project_model_util.js.map +1 -0
  187. package/dist/model/project_model_util.test.d.ts +0 -1
  188. package/dist/model/project_model_v1.cjs +9 -0
  189. package/dist/model/project_model_v1.cjs.map +1 -0
  190. package/dist/model/project_model_v1.d.ts +0 -1
  191. package/dist/model/project_model_v1.js +6 -0
  192. package/dist/model/project_model_v1.js.map +1 -0
  193. package/dist/model/template_spec.d.ts +0 -1
  194. package/dist/mutator/block-pack/block_pack.cjs +233 -0
  195. package/dist/mutator/block-pack/block_pack.cjs.map +1 -0
  196. package/dist/mutator/block-pack/block_pack.d.ts +0 -1
  197. package/dist/mutator/block-pack/block_pack.js +227 -0
  198. package/dist/mutator/block-pack/block_pack.js.map +1 -0
  199. package/dist/mutator/block-pack/block_pack.test.d.ts +0 -1
  200. package/dist/mutator/block-pack/frontend.cjs +21 -0
  201. package/dist/mutator/block-pack/frontend.cjs.map +1 -0
  202. package/dist/mutator/block-pack/frontend.d.ts +0 -1
  203. package/dist/mutator/block-pack/frontend.js +19 -0
  204. package/dist/mutator/block-pack/frontend.js.map +1 -0
  205. package/dist/mutator/context_export.cjs +26 -0
  206. package/dist/mutator/context_export.cjs.map +1 -0
  207. package/dist/mutator/context_export.d.ts +2 -3
  208. package/dist/mutator/context_export.js +23 -0
  209. package/dist/mutator/context_export.js.map +1 -0
  210. package/dist/mutator/migration.cjs +57 -0
  211. package/dist/mutator/migration.cjs.map +1 -0
  212. package/dist/mutator/migration.d.ts +0 -1
  213. package/dist/mutator/migration.js +55 -0
  214. package/dist/mutator/migration.js.map +1 -0
  215. package/dist/mutator/project.cjs +997 -0
  216. package/dist/mutator/project.cjs.map +1 -0
  217. package/dist/mutator/project.d.ts +0 -1
  218. package/dist/mutator/project.js +992 -0
  219. package/dist/mutator/project.js.map +1 -0
  220. package/dist/mutator/project.test.d.ts +0 -1
  221. package/dist/mutator/template/direct_template_loader.cjs +146 -0
  222. package/dist/mutator/template/direct_template_loader.cjs.map +1 -0
  223. package/dist/mutator/template/direct_template_loader.d.ts +0 -1
  224. package/dist/mutator/template/direct_template_loader.js +143 -0
  225. package/dist/mutator/template/direct_template_loader.js.map +1 -0
  226. package/dist/mutator/template/direct_template_loader_v3.cjs +139 -0
  227. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -0
  228. package/dist/mutator/template/direct_template_loader_v3.d.ts +0 -1
  229. package/dist/mutator/template/direct_template_loader_v3.js +137 -0
  230. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -0
  231. package/dist/mutator/template/render_block.cjs +43 -0
  232. package/dist/mutator/template/render_block.cjs.map +1 -0
  233. package/dist/mutator/template/render_block.d.ts +0 -1
  234. package/dist/mutator/template/render_block.js +34 -0
  235. package/dist/mutator/template/render_block.js.map +1 -0
  236. package/dist/mutator/template/render_template.cjs +35 -0
  237. package/dist/mutator/template/render_template.cjs.map +1 -0
  238. package/dist/mutator/template/render_template.d.ts +0 -1
  239. package/dist/mutator/template/render_template.js +33 -0
  240. package/dist/mutator/template/render_template.js.map +1 -0
  241. package/dist/mutator/template/template_loading.cjs +71 -0
  242. package/dist/mutator/template/template_loading.cjs.map +1 -0
  243. package/dist/mutator/template/template_loading.d.ts +0 -1
  244. package/dist/mutator/template/template_loading.js +60 -0
  245. package/dist/mutator/template/template_loading.js.map +1 -0
  246. package/dist/mutator/template/template_render.test.d.ts +0 -1
  247. package/dist/network_check/network_check.cjs +267 -0
  248. package/dist/network_check/network_check.cjs.map +1 -0
  249. package/dist/network_check/network_check.d.ts +0 -1
  250. package/dist/network_check/network_check.js +264 -0
  251. package/dist/network_check/network_check.js.map +1 -0
  252. package/dist/network_check/network_check.test.d.ts +0 -1
  253. package/dist/network_check/pings.cjs +107 -0
  254. package/dist/network_check/pings.cjs.map +1 -0
  255. package/dist/network_check/pings.d.ts +0 -1
  256. package/dist/network_check/pings.js +96 -0
  257. package/dist/network_check/pings.js.map +1 -0
  258. package/dist/network_check/template.cjs +318 -0
  259. package/dist/network_check/template.cjs.map +1 -0
  260. package/dist/network_check/template.d.ts +0 -1
  261. package/dist/network_check/template.js +302 -0
  262. package/dist/network_check/template.js.map +1 -0
  263. package/dist/network_check/template.test.d.ts +0 -1
  264. package/dist/network_check/test_utils.d.ts +0 -1
  265. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs +77 -0
  266. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs.map +1 -0
  267. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js +74 -0
  268. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js.map +1 -0
  269. package/dist/pool/data.cjs +298 -0
  270. package/dist/pool/data.cjs.map +1 -0
  271. package/dist/pool/data.d.ts +7 -9
  272. package/dist/pool/data.js +282 -0
  273. package/dist/pool/data.js.map +1 -0
  274. package/dist/pool/driver.cjs +620 -0
  275. package/dist/pool/driver.cjs.map +1 -0
  276. package/dist/pool/driver.d.ts +0 -1
  277. package/dist/pool/driver.js +598 -0
  278. package/dist/pool/driver.js.map +1 -0
  279. package/dist/pool/index.d.ts +0 -1
  280. package/dist/pool/p_object_collection.cjs +87 -0
  281. package/dist/pool/p_object_collection.cjs.map +1 -0
  282. package/dist/pool/p_object_collection.d.ts +0 -1
  283. package/dist/pool/p_object_collection.js +84 -0
  284. package/dist/pool/p_object_collection.js.map +1 -0
  285. package/dist/pool/ref_count_pool.cjs +58 -0
  286. package/dist/pool/ref_count_pool.cjs.map +1 -0
  287. package/dist/pool/ref_count_pool.d.ts +0 -1
  288. package/dist/pool/ref_count_pool.js +56 -0
  289. package/dist/pool/ref_count_pool.js.map +1 -0
  290. package/dist/pool/result_pool.cjs +265 -0
  291. package/dist/pool/result_pool.cjs.map +1 -0
  292. package/dist/pool/result_pool.d.ts +0 -1
  293. package/dist/pool/result_pool.js +263 -0
  294. package/dist/pool/result_pool.js.map +1 -0
  295. package/dist/test/block_packs.d.ts +0 -1
  296. package/dist/test/explicit_templates.d.ts +0 -1
  297. package/dist/test/known_templates.d.ts +0 -1
  298. package/dist/test_env.d.ts +0 -1
  299. package/dist/worker/WorkerManager.cjs +53 -0
  300. package/dist/worker/WorkerManager.cjs.map +1 -0
  301. package/dist/worker/WorkerManager.d.ts +0 -1
  302. package/dist/worker/WorkerManager.js +51 -0
  303. package/dist/worker/WorkerManager.js.map +1 -0
  304. package/dist/worker/worker.cjs +16 -0
  305. package/dist/worker/worker.cjs.map +1 -0
  306. package/dist/worker/worker.d.ts +0 -1
  307. package/dist/worker/worker.js +14 -0
  308. package/dist/worker/worker.js.map +1 -0
  309. package/dist/worker/workerApi.cjs +20 -0
  310. package/dist/worker/workerApi.cjs.map +1 -0
  311. package/dist/worker/workerApi.d.ts +1 -3
  312. package/dist/worker/workerApi.js +18 -0
  313. package/dist/worker/workerApi.js.map +1 -0
  314. package/package.json +26 -34
  315. package/src/cfg_render/executor.test.ts +5 -4
  316. package/src/model/project_model.test.ts +3 -3
  317. package/src/model/project_model_util.test.ts +3 -2
  318. package/src/mutator/block-pack/block_pack.test.ts +5 -4
  319. package/src/mutator/project.test.ts +4 -4
  320. package/src/mutator/template/template_render.test.ts +7 -6
  321. package/src/network_check/network_check.test.ts +1 -0
  322. package/src/network_check/test_utils.ts +2 -0
  323. package/src/worker/WorkerManager.ts +6 -8
  324. package/dist/block_registry/index.d.ts.map +0 -1
  325. package/dist/block_registry/registry-v2-provider.d.ts.map +0 -1
  326. package/dist/block_registry/registry.d.ts.map +0 -1
  327. package/dist/block_registry/registry.test.d.ts.map +0 -1
  328. package/dist/block_registry/watcher.d.ts.map +0 -1
  329. package/dist/block_registry/well_known_registries.d.ts.map +0 -1
  330. package/dist/cfg_render/executor.d.ts.map +0 -1
  331. package/dist/cfg_render/executor.test.d.ts.map +0 -1
  332. package/dist/cfg_render/operation.d.ts.map +0 -1
  333. package/dist/cfg_render/renderer.d.ts.map +0 -1
  334. package/dist/cfg_render/traverse.d.ts.map +0 -1
  335. package/dist/cfg_render/util.d.ts.map +0 -1
  336. package/dist/debug/index.d.ts.map +0 -1
  337. package/dist/dev_env/index.d.ts.map +0 -1
  338. package/dist/dev_env/util.d.ts.map +0 -1
  339. package/dist/index.d.ts.map +0 -1
  340. package/dist/index.mjs +0 -6742
  341. package/dist/index.mjs.map +0 -1
  342. package/dist/js_render/computable_context.d.ts.map +0 -1
  343. package/dist/js_render/context.d.ts.map +0 -1
  344. package/dist/js_render/index.d.ts.map +0 -1
  345. package/dist/middle_layer/active_cfg.d.ts.map +0 -1
  346. package/dist/middle_layer/block.d.ts.map +0 -1
  347. package/dist/middle_layer/block_ctx.d.ts.map +0 -1
  348. package/dist/middle_layer/block_ctx_unsafe.d.ts.map +0 -1
  349. package/dist/middle_layer/driver_kit.d.ts.map +0 -1
  350. package/dist/middle_layer/frontend_path.d.ts.map +0 -1
  351. package/dist/middle_layer/index.d.ts.map +0 -1
  352. package/dist/middle_layer/middle_layer.d.ts.map +0 -1
  353. package/dist/middle_layer/navigation_states.d.ts.map +0 -1
  354. package/dist/middle_layer/ops.d.ts.map +0 -1
  355. package/dist/middle_layer/project.d.ts.map +0 -1
  356. package/dist/middle_layer/project_list.d.ts.map +0 -1
  357. package/dist/middle_layer/project_overview.d.ts.map +0 -1
  358. package/dist/middle_layer/project_overview_light.d.ts.map +0 -1
  359. package/dist/middle_layer/render.d.ts.map +0 -1
  360. package/dist/middle_layer/render.test.d.ts.map +0 -1
  361. package/dist/middle_layer/types.d.ts.map +0 -1
  362. package/dist/middle_layer/util.d.ts.map +0 -1
  363. package/dist/model/args.d.ts.map +0 -1
  364. package/dist/model/block_pack.d.ts.map +0 -1
  365. package/dist/model/block_pack_spec.d.ts.map +0 -1
  366. package/dist/model/frontend.d.ts.map +0 -1
  367. package/dist/model/index.d.ts.map +0 -1
  368. package/dist/model/project_helper.d.ts.map +0 -1
  369. package/dist/model/project_model.d.ts.map +0 -1
  370. package/dist/model/project_model.test.d.ts.map +0 -1
  371. package/dist/model/project_model_util.d.ts.map +0 -1
  372. package/dist/model/project_model_util.test.d.ts.map +0 -1
  373. package/dist/model/project_model_v1.d.ts.map +0 -1
  374. package/dist/model/template_spec.d.ts.map +0 -1
  375. package/dist/mutator/block-pack/block_pack.d.ts.map +0 -1
  376. package/dist/mutator/block-pack/block_pack.test.d.ts.map +0 -1
  377. package/dist/mutator/block-pack/frontend.d.ts.map +0 -1
  378. package/dist/mutator/context_export.d.ts.map +0 -1
  379. package/dist/mutator/migration.d.ts.map +0 -1
  380. package/dist/mutator/project.d.ts.map +0 -1
  381. package/dist/mutator/project.test.d.ts.map +0 -1
  382. package/dist/mutator/template/direct_template_loader.d.ts.map +0 -1
  383. package/dist/mutator/template/direct_template_loader_v3.d.ts.map +0 -1
  384. package/dist/mutator/template/render_block.d.ts.map +0 -1
  385. package/dist/mutator/template/render_template.d.ts.map +0 -1
  386. package/dist/mutator/template/template_loading.d.ts.map +0 -1
  387. package/dist/mutator/template/template_render.test.d.ts.map +0 -1
  388. package/dist/network_check/network_check.d.ts.map +0 -1
  389. package/dist/network_check/network_check.test.d.ts.map +0 -1
  390. package/dist/network_check/pings.d.ts.map +0 -1
  391. package/dist/network_check/template.d.ts.map +0 -1
  392. package/dist/network_check/template.test.d.ts.map +0 -1
  393. package/dist/network_check/test_utils.d.ts.map +0 -1
  394. package/dist/pool/data.d.ts.map +0 -1
  395. package/dist/pool/driver.d.ts.map +0 -1
  396. package/dist/pool/index.d.ts.map +0 -1
  397. package/dist/pool/p_object_collection.d.ts.map +0 -1
  398. package/dist/pool/ref_count_pool.d.ts.map +0 -1
  399. package/dist/pool/result_pool.d.ts.map +0 -1
  400. package/dist/test/block_packs.d.ts.map +0 -1
  401. package/dist/test/explicit_templates.d.ts.map +0 -1
  402. package/dist/test/known_templates.d.ts.map +0 -1
  403. package/dist/test_env.d.ts.map +0 -1
  404. package/dist/worker/WorkerManager.d.ts.map +0 -1
  405. package/dist/worker/worker.d.ts.map +0 -1
  406. package/dist/worker/workerApi.d.ts.map +0 -1
  407. package/dist/worker.js +0 -2
  408. package/dist/worker.js.map +0 -1
  409. package/dist/worker.mjs +0 -20
  410. package/dist/worker.mjs.map +0 -1
@@ -0,0 +1,75 @@
1
+ 'use strict';
2
+
3
+ var tsHelpers = require('@milaboratories/ts-helpers');
4
+ var path = require('node:path');
5
+
6
+ /** Some defaults fot MiddleLayerOps. */
7
+ const DefaultDriverKitOpsSettings = {
8
+ logger: new tsHelpers.ConsoleLoggerAdapter(),
9
+ blobDriverOps: {
10
+ cacheSoftSizeBytes: 8 * 1024 * 1024 * 1024, // 8 GB
11
+ rangesCacheMaxSizeBytes: 8 * 1024 * 1024 * 1024, // 8 GB
12
+ nConcurrentDownloads: 10,
13
+ },
14
+ frontendDownloadDriverOps: {
15
+ cacheSoftSizeBytes: 1 * 1024 * 1024 * 1024, // 1 GB
16
+ withGunzip: true,
17
+ nConcurrentDownloads: 50,
18
+ },
19
+ downloadBlobToURLDriverOps: {
20
+ cacheSoftSizeBytes: 1 * 1024 * 1024 * 1024, // 1 GB
21
+ nConcurrentDownloads: 10,
22
+ },
23
+ uploadDriverOps: {
24
+ nConcurrentPartUploads: 10,
25
+ nConcurrentGetProgresses: 10,
26
+ pollingInterval: 1000,
27
+ stopPollingDelay: 1000,
28
+ },
29
+ logStreamDriverOps: {
30
+ nConcurrentGetLogs: 10,
31
+ pollingInterval: 1000,
32
+ stopPollingDelay: 1000,
33
+ },
34
+ pFrameDriverOps: {
35
+ pFrameConcurrency: 1,
36
+ pTableConcurrency: 1,
37
+ pFrameCacheMaxCount: 18, // SHM trees create 3 PTables per graphic, we want to cache 6 graphics per PFrame
38
+ pFramesCacheMaxSize: 8 * 1024 * 1024 * 1024, // 8 GB
39
+ },
40
+ };
41
+ function DefaultDriverKitOpsPaths(workDir) {
42
+ return {
43
+ blobDownloadPath: path.join(workDir, 'download'),
44
+ blobDownloadRangesCachePath: path.join(workDir, 'downloadRangesCache'),
45
+ downloadBlobToURLPath: path.join(workDir, 'downloadToURL'),
46
+ pframesSpillPath: path.join(workDir, 'pframes'),
47
+ };
48
+ }
49
+ /** Some defaults fot MiddleLayerOps. */
50
+ const DefaultMiddleLayerOpsSettings = {
51
+ ...DefaultDriverKitOpsSettings,
52
+ defaultTreeOptions: {
53
+ pollingInterval: 350,
54
+ stopPollingDelay: 2500,
55
+ initialTreeLoadingTimeout: 100 * 60 * 60 * 1000, // disable timeout for loading project tree (100 hours)
56
+ },
57
+ debugOps: {
58
+ dumpInitialTreeState: false,
59
+ },
60
+ devBlockUpdateRecheckInterval: 1000,
61
+ projectRefreshInterval: 700,
62
+ stagingRenderingRate: 5,
63
+ };
64
+ function DefaultMiddleLayerOpsPaths(workDir) {
65
+ return {
66
+ ...DefaultDriverKitOpsPaths(workDir),
67
+ frontendDownloadPath: path.join(workDir, 'frontend'),
68
+ };
69
+ }
70
+
71
+ exports.DefaultDriverKitOpsPaths = DefaultDriverKitOpsPaths;
72
+ exports.DefaultDriverKitOpsSettings = DefaultDriverKitOpsSettings;
73
+ exports.DefaultMiddleLayerOpsPaths = DefaultMiddleLayerOpsPaths;
74
+ exports.DefaultMiddleLayerOpsSettings = DefaultMiddleLayerOpsSettings;
75
+ //# sourceMappingURL=ops.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.cjs","sources":["../../src/middle_layer/ops.ts"],"sourcesContent":["import type { TemporalSynchronizedTreeOps } from './types';\nimport type {\n DownloadBlobToURLDriverOps,\n DownloadDriverOps,\n DownloadUrlDriverOps,\n OpenFileDialogCallback,\n VirtualLocalStorageSpec,\n} from '@milaboratories/pl-drivers';\nimport type { UploadDriverOps } from '@milaboratories/pl-drivers';\nimport type { LogsStreamDriverOps } from '@milaboratories/pl-drivers';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport { ConsoleLoggerAdapter } from '@milaboratories/ts-helpers';\nimport type { LocalStorageProjection } from '@milaboratories/pl-drivers';\nimport path from 'node:path';\nimport type { PFrameDriverOps } from '../pool/driver';\n\n/** Paths part of {@link DriverKitOps}. */\nexport type DriverKitOpsPaths = {\n /** Common root where to put downloaded blobs / downloaded blob cache */\n readonly blobDownloadPath: string;\n\n /** Common root for a cache for range queries. */\n readonly blobDownloadRangesCachePath: string;\n\n /** Common root where to put downloaded blobs with */\n readonly downloadBlobToURLPath: string;\n\n /**\n * List of pl storages that have projections in local file system.\n *\n * This option affect two drivers:\n *\n * (1) LS driver generates \"index\" handles instead of \"upload\" for paths inside those locations\n *\n * (2) Download driver directly serves content retrieval requests for blobs from listed storages,\n * and don't apply any caching for such blobs (i.e. preventing duplication of files for Downloaded\n * type handles, making OnDemand and Downloaded handles equivalent)\n *\n * */\n readonly localProjections: LocalStorageProjection[];\n\n /**\n * List of virtual storages that will allow homogeneous access to local FSs through LS API.\n * If undefined, default list will be created.\n * */\n readonly virtualLocalStoragesOverride?: VirtualLocalStorageSpec[];\n\n /** Path to the directory where pframes will spill temporary files and store materialized views */\n readonly pframesSpillPath: string;\n};\n\n/** Options required to initialize full set of middle layer driver kit */\nexport type DriverKitOpsSettings = {\n //\n // Common\n //\n\n readonly logger: MiLogger;\n\n //\n // Signer\n //\n\n /**\n * Local secret, that is used to sign and verify different pieces of information\n * that can be used to access local data, like local paths for ongoing uploads.\n *\n * Use {@link MiddleLayer.generateLocalSecret} to generate sufficiently random string.\n * */\n readonly localSecret: string;\n\n //\n // Blob Driver\n //\n\n /**\n * Settings related to the download driver making operations with blobs. This driver is also used\n * to download logs when source process terminates and log terns into a blob\n */\n readonly blobDriverOps: DownloadDriverOps;\n\n //\n // Frontend Driver\n //\n\n /** Settings related to the frontend driver that downloads frontends. */\n readonly frontendDownloadDriverOps: DownloadUrlDriverOps;\n\n //\n // Blob To URL Driver\n //\n\n readonly downloadBlobToURLDriverOps: DownloadBlobToURLDriverOps;\n\n //\n // Upload Driver\n //\n\n /**\n * Settings related to the upload driver that actually performs upload and helps render upload\n * and indexing progresses from related pl resources.\n * */\n readonly uploadDriverOps: UploadDriverOps;\n\n //\n // Log streaming ops\n // (static logs are served via the blob driver)\n //\n\n /** Settings related to the streaming log driver */\n readonly logStreamDriverOps: LogsStreamDriverOps;\n\n //\n // LS Driver\n //\n\n /**\n * Callback to access system file open dialog, must be provided by the environment,\n * to allow for {@link showOpenSingleFileDialog} / {@link showOpenMultipleFilesDialog}\n * calls from the UI.\n */\n readonly openFileDialogCallback: OpenFileDialogCallback;\n\n //\n // PFrame Driver\n //\n\n /** Settings related to the PFrame driver */\n readonly pFrameDriverOps: PFrameDriverOps;\n};\n\nexport type DriverKitOps = DriverKitOpsPaths & DriverKitOpsSettings;\n\n/** Some defaults fot MiddleLayerOps. */\nexport const DefaultDriverKitOpsSettings: Pick<\n DriverKitOpsSettings,\n | 'logger'\n | 'blobDriverOps'\n | 'frontendDownloadDriverOps'\n | 'downloadBlobToURLDriverOps'\n | 'uploadDriverOps'\n | 'logStreamDriverOps'\n | 'pFrameDriverOps'\n> = {\n logger: new ConsoleLoggerAdapter(),\n blobDriverOps: {\n cacheSoftSizeBytes: 8 * 1024 * 1024 * 1024, // 8 GB\n rangesCacheMaxSizeBytes: 8 * 1024 * 1024 * 1024, // 8 GB\n nConcurrentDownloads: 10,\n },\n frontendDownloadDriverOps: {\n cacheSoftSizeBytes: 1 * 1024 * 1024 * 1024, // 1 GB\n withGunzip: true,\n nConcurrentDownloads: 50,\n },\n downloadBlobToURLDriverOps: {\n cacheSoftSizeBytes: 1 * 1024 * 1024 * 1024, // 1 GB\n nConcurrentDownloads: 10,\n },\n uploadDriverOps: {\n nConcurrentPartUploads: 10,\n nConcurrentGetProgresses: 10,\n pollingInterval: 1000,\n stopPollingDelay: 1000,\n },\n logStreamDriverOps: {\n nConcurrentGetLogs: 10,\n pollingInterval: 1000,\n stopPollingDelay: 1000,\n },\n pFrameDriverOps: {\n pFrameConcurrency: 1,\n pTableConcurrency: 1,\n pFrameCacheMaxCount: 18, // SHM trees create 3 PTables per graphic, we want to cache 6 graphics per PFrame\n pFramesCacheMaxSize: 8 * 1024 * 1024 * 1024, // 8 GB\n },\n};\n\nexport function DefaultDriverKitOpsPaths(\n workDir: string,\n): Pick<DriverKitOpsPaths,\n| 'blobDownloadPath'\n| 'blobDownloadRangesCachePath'\n| 'downloadBlobToURLPath'\n| 'pframesSpillPath'> {\n return {\n blobDownloadPath: path.join(workDir, 'download'),\n blobDownloadRangesCachePath: path.join(workDir, 'downloadRangesCache'),\n downloadBlobToURLPath: path.join(workDir, 'downloadToURL'),\n pframesSpillPath: path.join(workDir, 'pframes'),\n };\n}\n\n/** Fields with default values are marked as optional here. */\n// prettier-ignore\nexport type DriverKitOpsConstructor =\n Omit<DriverKitOpsSettings, keyof typeof DefaultDriverKitOpsSettings>\n & Partial<typeof DefaultDriverKitOpsSettings>\n & Omit<DriverKitOpsPaths, keyof ReturnType<typeof DefaultDriverKitOpsPaths>>\n & Partial<ReturnType<typeof DefaultDriverKitOpsPaths>>;\n\nexport type MiddleLayerOpsPaths = DriverKitOpsPaths & {\n /** Common root where to put frontend code. */\n readonly frontendDownloadPath: string;\n};\n\n/** Debug options for middle layer. */\nexport type MiddleLayerDebugOptions = {\n /** If true, will dump initial tree state to the file with root resource id as name. */\n dumpInitialTreeState: boolean;\n};\n\n/** Configuration controlling different aspects of middle layer behaviour. */\nexport type MiddleLayerOpsSettings = DriverKitOpsSettings & {\n /** Debug options. */\n readonly debugOps: MiddleLayerDebugOptions;\n\n /** Contain temporal options controlling how often should pl trees be\n * synchronized with the pl server. */\n readonly defaultTreeOptions: TemporalSynchronizedTreeOps;\n\n /** Defines interval in milliseconds for running periodic project maintenance job.\n * Project maintenance includes gradual staging rendering and cached outputs cleanup. */\n readonly projectRefreshInterval: number;\n\n /** This controls average number of block staging states that are rendered per\n * second during project maintenance job execution. */\n readonly stagingRenderingRate: number;\n\n /** How often to check for dev block updates */\n readonly devBlockUpdateRecheckInterval: number;\n\n /** Prioritize this channel if update is available in this block */\n readonly preferredUpdateChannel?: string;\n};\n\nexport type MiddleLayerOps = MiddleLayerOpsSettings & MiddleLayerOpsPaths;\n\n/** Some defaults fot MiddleLayerOps. */\nexport const DefaultMiddleLayerOpsSettings: Pick<\n MiddleLayerOps,\n | keyof typeof DefaultDriverKitOpsSettings\n | 'defaultTreeOptions'\n | 'projectRefreshInterval'\n | 'stagingRenderingRate'\n | 'devBlockUpdateRecheckInterval'\n | 'debugOps'\n> = {\n ...DefaultDriverKitOpsSettings,\n defaultTreeOptions: {\n pollingInterval: 350,\n stopPollingDelay: 2500,\n initialTreeLoadingTimeout: 100 * 60 * 60 * 1000, // disable timeout for loading project tree (100 hours)\n },\n debugOps: {\n dumpInitialTreeState: false,\n },\n devBlockUpdateRecheckInterval: 1000,\n projectRefreshInterval: 700,\n stagingRenderingRate: 5,\n};\n\nexport function DefaultMiddleLayerOpsPaths(\n workDir: string,\n): Pick<\n MiddleLayerOpsPaths,\n keyof ReturnType<typeof DefaultDriverKitOpsPaths> | 'frontendDownloadPath'\n > {\n return {\n ...DefaultDriverKitOpsPaths(workDir),\n frontendDownloadPath: path.join(workDir, 'frontend'),\n };\n}\n\nexport type MiddleLayerOpsConstructor = Omit<\n MiddleLayerOpsSettings,\n keyof typeof DefaultMiddleLayerOpsSettings\n> &\nPartial<typeof DefaultMiddleLayerOpsSettings> &\nOmit<MiddleLayerOpsPaths, keyof Awaited<ReturnType<typeof DefaultMiddleLayerOpsPaths>>> &\nPartial<Awaited<ReturnType<typeof DefaultMiddleLayerOpsPaths>>>;\n"],"names":["ConsoleLoggerAdapter"],"mappings":";;;;;AAqIA;AACO,MAAM,2BAA2B,GASpC;IACF,MAAM,EAAE,IAAIA,8BAAoB,EAAE;AAClC,IAAA,aAAa,EAAE;QACb,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;QAC1C,uBAAuB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAC/C,QAAA,oBAAoB,EAAE,EAAE;AACzB,KAAA;AACD,IAAA,yBAAyB,EAAE;QACzB,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1C,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,oBAAoB,EAAE,EAAE;AACzB,KAAA;AACD,IAAA,0BAA0B,EAAE;QAC1B,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1C,QAAA,oBAAoB,EAAE,EAAE;AACzB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,sBAAsB,EAAE,EAAE;AAC1B,QAAA,wBAAwB,EAAE,EAAE;AAC5B,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,gBAAgB,EAAE,IAAI;AACvB,KAAA;AACD,IAAA,kBAAkB,EAAE;AAClB,QAAA,kBAAkB,EAAE,EAAE;AACtB,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,gBAAgB,EAAE,IAAI;AACvB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,iBAAiB,EAAE,CAAC;AACpB,QAAA,iBAAiB,EAAE,CAAC;QACpB,mBAAmB,EAAE,EAAE;QACvB,mBAAmB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAC5C,KAAA;;AAGG,SAAU,wBAAwB,CACtC,OAAe,EAAA;IAMf,OAAO;QACL,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QAChD,2BAA2B,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACtE,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;QAC1D,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;KAChD;AACH;AA+CA;AACO,MAAM,6BAA6B,GAQtC;AACF,IAAA,GAAG,2BAA2B;AAC9B,IAAA,kBAAkB,EAAE;AAClB,QAAA,eAAe,EAAE,GAAG;AACpB,QAAA,gBAAgB,EAAE,IAAI;QACtB,yBAAyB,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAChD,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,oBAAoB,EAAE,KAAK;AAC5B,KAAA;AACD,IAAA,6BAA6B,EAAE,IAAI;AACnC,IAAA,sBAAsB,EAAE,GAAG;AAC3B,IAAA,oBAAoB,EAAE,CAAC;;AAGnB,SAAU,0BAA0B,CACxC,OAAe,EAAA;IAKf,OAAO;QACL,GAAG,wBAAwB,CAAC,OAAO,CAAC;QACpC,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;KACrD;AACH;;;;;;;"}
@@ -103,4 +103,3 @@ export type MiddleLayerOps = MiddleLayerOpsSettings & MiddleLayerOpsPaths;
103
103
  export declare const DefaultMiddleLayerOpsSettings: Pick<MiddleLayerOps, keyof typeof DefaultDriverKitOpsSettings | 'defaultTreeOptions' | 'projectRefreshInterval' | 'stagingRenderingRate' | 'devBlockUpdateRecheckInterval' | 'debugOps'>;
104
104
  export declare function DefaultMiddleLayerOpsPaths(workDir: string): Pick<MiddleLayerOpsPaths, keyof ReturnType<typeof DefaultDriverKitOpsPaths> | 'frontendDownloadPath'>;
105
105
  export type MiddleLayerOpsConstructor = Omit<MiddleLayerOpsSettings, keyof typeof DefaultMiddleLayerOpsSettings> & Partial<typeof DefaultMiddleLayerOpsSettings> & Omit<MiddleLayerOpsPaths, keyof Awaited<ReturnType<typeof DefaultMiddleLayerOpsPaths>>> & Partial<Awaited<ReturnType<typeof DefaultMiddleLayerOpsPaths>>>;
106
- //# sourceMappingURL=ops.d.ts.map
@@ -0,0 +1,70 @@
1
+ import { ConsoleLoggerAdapter } from '@milaboratories/ts-helpers';
2
+ import path__default from 'node:path';
3
+
4
+ /** Some defaults fot MiddleLayerOps. */
5
+ const DefaultDriverKitOpsSettings = {
6
+ logger: new ConsoleLoggerAdapter(),
7
+ blobDriverOps: {
8
+ cacheSoftSizeBytes: 8 * 1024 * 1024 * 1024, // 8 GB
9
+ rangesCacheMaxSizeBytes: 8 * 1024 * 1024 * 1024, // 8 GB
10
+ nConcurrentDownloads: 10,
11
+ },
12
+ frontendDownloadDriverOps: {
13
+ cacheSoftSizeBytes: 1 * 1024 * 1024 * 1024, // 1 GB
14
+ withGunzip: true,
15
+ nConcurrentDownloads: 50,
16
+ },
17
+ downloadBlobToURLDriverOps: {
18
+ cacheSoftSizeBytes: 1 * 1024 * 1024 * 1024, // 1 GB
19
+ nConcurrentDownloads: 10,
20
+ },
21
+ uploadDriverOps: {
22
+ nConcurrentPartUploads: 10,
23
+ nConcurrentGetProgresses: 10,
24
+ pollingInterval: 1000,
25
+ stopPollingDelay: 1000,
26
+ },
27
+ logStreamDriverOps: {
28
+ nConcurrentGetLogs: 10,
29
+ pollingInterval: 1000,
30
+ stopPollingDelay: 1000,
31
+ },
32
+ pFrameDriverOps: {
33
+ pFrameConcurrency: 1,
34
+ pTableConcurrency: 1,
35
+ pFrameCacheMaxCount: 18, // SHM trees create 3 PTables per graphic, we want to cache 6 graphics per PFrame
36
+ pFramesCacheMaxSize: 8 * 1024 * 1024 * 1024, // 8 GB
37
+ },
38
+ };
39
+ function DefaultDriverKitOpsPaths(workDir) {
40
+ return {
41
+ blobDownloadPath: path__default.join(workDir, 'download'),
42
+ blobDownloadRangesCachePath: path__default.join(workDir, 'downloadRangesCache'),
43
+ downloadBlobToURLPath: path__default.join(workDir, 'downloadToURL'),
44
+ pframesSpillPath: path__default.join(workDir, 'pframes'),
45
+ };
46
+ }
47
+ /** Some defaults fot MiddleLayerOps. */
48
+ const DefaultMiddleLayerOpsSettings = {
49
+ ...DefaultDriverKitOpsSettings,
50
+ defaultTreeOptions: {
51
+ pollingInterval: 350,
52
+ stopPollingDelay: 2500,
53
+ initialTreeLoadingTimeout: 100 * 60 * 60 * 1000, // disable timeout for loading project tree (100 hours)
54
+ },
55
+ debugOps: {
56
+ dumpInitialTreeState: false,
57
+ },
58
+ devBlockUpdateRecheckInterval: 1000,
59
+ projectRefreshInterval: 700,
60
+ stagingRenderingRate: 5,
61
+ };
62
+ function DefaultMiddleLayerOpsPaths(workDir) {
63
+ return {
64
+ ...DefaultDriverKitOpsPaths(workDir),
65
+ frontendDownloadPath: path__default.join(workDir, 'frontend'),
66
+ };
67
+ }
68
+
69
+ export { DefaultDriverKitOpsPaths, DefaultDriverKitOpsSettings, DefaultMiddleLayerOpsPaths, DefaultMiddleLayerOpsSettings };
70
+ //# sourceMappingURL=ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.js","sources":["../../src/middle_layer/ops.ts"],"sourcesContent":["import type { TemporalSynchronizedTreeOps } from './types';\nimport type {\n DownloadBlobToURLDriverOps,\n DownloadDriverOps,\n DownloadUrlDriverOps,\n OpenFileDialogCallback,\n VirtualLocalStorageSpec,\n} from '@milaboratories/pl-drivers';\nimport type { UploadDriverOps } from '@milaboratories/pl-drivers';\nimport type { LogsStreamDriverOps } from '@milaboratories/pl-drivers';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport { ConsoleLoggerAdapter } from '@milaboratories/ts-helpers';\nimport type { LocalStorageProjection } from '@milaboratories/pl-drivers';\nimport path from 'node:path';\nimport type { PFrameDriverOps } from '../pool/driver';\n\n/** Paths part of {@link DriverKitOps}. */\nexport type DriverKitOpsPaths = {\n /** Common root where to put downloaded blobs / downloaded blob cache */\n readonly blobDownloadPath: string;\n\n /** Common root for a cache for range queries. */\n readonly blobDownloadRangesCachePath: string;\n\n /** Common root where to put downloaded blobs with */\n readonly downloadBlobToURLPath: string;\n\n /**\n * List of pl storages that have projections in local file system.\n *\n * This option affect two drivers:\n *\n * (1) LS driver generates \"index\" handles instead of \"upload\" for paths inside those locations\n *\n * (2) Download driver directly serves content retrieval requests for blobs from listed storages,\n * and don't apply any caching for such blobs (i.e. preventing duplication of files for Downloaded\n * type handles, making OnDemand and Downloaded handles equivalent)\n *\n * */\n readonly localProjections: LocalStorageProjection[];\n\n /**\n * List of virtual storages that will allow homogeneous access to local FSs through LS API.\n * If undefined, default list will be created.\n * */\n readonly virtualLocalStoragesOverride?: VirtualLocalStorageSpec[];\n\n /** Path to the directory where pframes will spill temporary files and store materialized views */\n readonly pframesSpillPath: string;\n};\n\n/** Options required to initialize full set of middle layer driver kit */\nexport type DriverKitOpsSettings = {\n //\n // Common\n //\n\n readonly logger: MiLogger;\n\n //\n // Signer\n //\n\n /**\n * Local secret, that is used to sign and verify different pieces of information\n * that can be used to access local data, like local paths for ongoing uploads.\n *\n * Use {@link MiddleLayer.generateLocalSecret} to generate sufficiently random string.\n * */\n readonly localSecret: string;\n\n //\n // Blob Driver\n //\n\n /**\n * Settings related to the download driver making operations with blobs. This driver is also used\n * to download logs when source process terminates and log terns into a blob\n */\n readonly blobDriverOps: DownloadDriverOps;\n\n //\n // Frontend Driver\n //\n\n /** Settings related to the frontend driver that downloads frontends. */\n readonly frontendDownloadDriverOps: DownloadUrlDriverOps;\n\n //\n // Blob To URL Driver\n //\n\n readonly downloadBlobToURLDriverOps: DownloadBlobToURLDriverOps;\n\n //\n // Upload Driver\n //\n\n /**\n * Settings related to the upload driver that actually performs upload and helps render upload\n * and indexing progresses from related pl resources.\n * */\n readonly uploadDriverOps: UploadDriverOps;\n\n //\n // Log streaming ops\n // (static logs are served via the blob driver)\n //\n\n /** Settings related to the streaming log driver */\n readonly logStreamDriverOps: LogsStreamDriverOps;\n\n //\n // LS Driver\n //\n\n /**\n * Callback to access system file open dialog, must be provided by the environment,\n * to allow for {@link showOpenSingleFileDialog} / {@link showOpenMultipleFilesDialog}\n * calls from the UI.\n */\n readonly openFileDialogCallback: OpenFileDialogCallback;\n\n //\n // PFrame Driver\n //\n\n /** Settings related to the PFrame driver */\n readonly pFrameDriverOps: PFrameDriverOps;\n};\n\nexport type DriverKitOps = DriverKitOpsPaths & DriverKitOpsSettings;\n\n/** Some defaults fot MiddleLayerOps. */\nexport const DefaultDriverKitOpsSettings: Pick<\n DriverKitOpsSettings,\n | 'logger'\n | 'blobDriverOps'\n | 'frontendDownloadDriverOps'\n | 'downloadBlobToURLDriverOps'\n | 'uploadDriverOps'\n | 'logStreamDriverOps'\n | 'pFrameDriverOps'\n> = {\n logger: new ConsoleLoggerAdapter(),\n blobDriverOps: {\n cacheSoftSizeBytes: 8 * 1024 * 1024 * 1024, // 8 GB\n rangesCacheMaxSizeBytes: 8 * 1024 * 1024 * 1024, // 8 GB\n nConcurrentDownloads: 10,\n },\n frontendDownloadDriverOps: {\n cacheSoftSizeBytes: 1 * 1024 * 1024 * 1024, // 1 GB\n withGunzip: true,\n nConcurrentDownloads: 50,\n },\n downloadBlobToURLDriverOps: {\n cacheSoftSizeBytes: 1 * 1024 * 1024 * 1024, // 1 GB\n nConcurrentDownloads: 10,\n },\n uploadDriverOps: {\n nConcurrentPartUploads: 10,\n nConcurrentGetProgresses: 10,\n pollingInterval: 1000,\n stopPollingDelay: 1000,\n },\n logStreamDriverOps: {\n nConcurrentGetLogs: 10,\n pollingInterval: 1000,\n stopPollingDelay: 1000,\n },\n pFrameDriverOps: {\n pFrameConcurrency: 1,\n pTableConcurrency: 1,\n pFrameCacheMaxCount: 18, // SHM trees create 3 PTables per graphic, we want to cache 6 graphics per PFrame\n pFramesCacheMaxSize: 8 * 1024 * 1024 * 1024, // 8 GB\n },\n};\n\nexport function DefaultDriverKitOpsPaths(\n workDir: string,\n): Pick<DriverKitOpsPaths,\n| 'blobDownloadPath'\n| 'blobDownloadRangesCachePath'\n| 'downloadBlobToURLPath'\n| 'pframesSpillPath'> {\n return {\n blobDownloadPath: path.join(workDir, 'download'),\n blobDownloadRangesCachePath: path.join(workDir, 'downloadRangesCache'),\n downloadBlobToURLPath: path.join(workDir, 'downloadToURL'),\n pframesSpillPath: path.join(workDir, 'pframes'),\n };\n}\n\n/** Fields with default values are marked as optional here. */\n// prettier-ignore\nexport type DriverKitOpsConstructor =\n Omit<DriverKitOpsSettings, keyof typeof DefaultDriverKitOpsSettings>\n & Partial<typeof DefaultDriverKitOpsSettings>\n & Omit<DriverKitOpsPaths, keyof ReturnType<typeof DefaultDriverKitOpsPaths>>\n & Partial<ReturnType<typeof DefaultDriverKitOpsPaths>>;\n\nexport type MiddleLayerOpsPaths = DriverKitOpsPaths & {\n /** Common root where to put frontend code. */\n readonly frontendDownloadPath: string;\n};\n\n/** Debug options for middle layer. */\nexport type MiddleLayerDebugOptions = {\n /** If true, will dump initial tree state to the file with root resource id as name. */\n dumpInitialTreeState: boolean;\n};\n\n/** Configuration controlling different aspects of middle layer behaviour. */\nexport type MiddleLayerOpsSettings = DriverKitOpsSettings & {\n /** Debug options. */\n readonly debugOps: MiddleLayerDebugOptions;\n\n /** Contain temporal options controlling how often should pl trees be\n * synchronized with the pl server. */\n readonly defaultTreeOptions: TemporalSynchronizedTreeOps;\n\n /** Defines interval in milliseconds for running periodic project maintenance job.\n * Project maintenance includes gradual staging rendering and cached outputs cleanup. */\n readonly projectRefreshInterval: number;\n\n /** This controls average number of block staging states that are rendered per\n * second during project maintenance job execution. */\n readonly stagingRenderingRate: number;\n\n /** How often to check for dev block updates */\n readonly devBlockUpdateRecheckInterval: number;\n\n /** Prioritize this channel if update is available in this block */\n readonly preferredUpdateChannel?: string;\n};\n\nexport type MiddleLayerOps = MiddleLayerOpsSettings & MiddleLayerOpsPaths;\n\n/** Some defaults fot MiddleLayerOps. */\nexport const DefaultMiddleLayerOpsSettings: Pick<\n MiddleLayerOps,\n | keyof typeof DefaultDriverKitOpsSettings\n | 'defaultTreeOptions'\n | 'projectRefreshInterval'\n | 'stagingRenderingRate'\n | 'devBlockUpdateRecheckInterval'\n | 'debugOps'\n> = {\n ...DefaultDriverKitOpsSettings,\n defaultTreeOptions: {\n pollingInterval: 350,\n stopPollingDelay: 2500,\n initialTreeLoadingTimeout: 100 * 60 * 60 * 1000, // disable timeout for loading project tree (100 hours)\n },\n debugOps: {\n dumpInitialTreeState: false,\n },\n devBlockUpdateRecheckInterval: 1000,\n projectRefreshInterval: 700,\n stagingRenderingRate: 5,\n};\n\nexport function DefaultMiddleLayerOpsPaths(\n workDir: string,\n): Pick<\n MiddleLayerOpsPaths,\n keyof ReturnType<typeof DefaultDriverKitOpsPaths> | 'frontendDownloadPath'\n > {\n return {\n ...DefaultDriverKitOpsPaths(workDir),\n frontendDownloadPath: path.join(workDir, 'frontend'),\n };\n}\n\nexport type MiddleLayerOpsConstructor = Omit<\n MiddleLayerOpsSettings,\n keyof typeof DefaultMiddleLayerOpsSettings\n> &\nPartial<typeof DefaultMiddleLayerOpsSettings> &\nOmit<MiddleLayerOpsPaths, keyof Awaited<ReturnType<typeof DefaultMiddleLayerOpsPaths>>> &\nPartial<Awaited<ReturnType<typeof DefaultMiddleLayerOpsPaths>>>;\n"],"names":["path"],"mappings":";;;AAqIA;AACO,MAAM,2BAA2B,GASpC;IACF,MAAM,EAAE,IAAI,oBAAoB,EAAE;AAClC,IAAA,aAAa,EAAE;QACb,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;QAC1C,uBAAuB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAC/C,QAAA,oBAAoB,EAAE,EAAE;AACzB,KAAA;AACD,IAAA,yBAAyB,EAAE;QACzB,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1C,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,oBAAoB,EAAE,EAAE;AACzB,KAAA;AACD,IAAA,0BAA0B,EAAE;QAC1B,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1C,QAAA,oBAAoB,EAAE,EAAE;AACzB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,sBAAsB,EAAE,EAAE;AAC1B,QAAA,wBAAwB,EAAE,EAAE;AAC5B,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,gBAAgB,EAAE,IAAI;AACvB,KAAA;AACD,IAAA,kBAAkB,EAAE;AAClB,QAAA,kBAAkB,EAAE,EAAE;AACtB,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,gBAAgB,EAAE,IAAI;AACvB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,iBAAiB,EAAE,CAAC;AACpB,QAAA,iBAAiB,EAAE,CAAC;QACpB,mBAAmB,EAAE,EAAE;QACvB,mBAAmB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AAC5C,KAAA;;AAGG,SAAU,wBAAwB,CACtC,OAAe,EAAA;IAMf,OAAO;QACL,gBAAgB,EAAEA,aAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QAChD,2BAA2B,EAAEA,aAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACtE,qBAAqB,EAAEA,aAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;QAC1D,gBAAgB,EAAEA,aAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;KAChD;AACH;AA+CA;AACO,MAAM,6BAA6B,GAQtC;AACF,IAAA,GAAG,2BAA2B;AAC9B,IAAA,kBAAkB,EAAE;AAClB,QAAA,eAAe,EAAE,GAAG;AACpB,QAAA,gBAAgB,EAAE,IAAI;QACtB,yBAAyB,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAChD,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,oBAAoB,EAAE,KAAK;AAC5B,KAAA;AACD,IAAA,6BAA6B,EAAE,IAAI;AACnC,IAAA,sBAAsB,EAAE,GAAG;AAC3B,IAAA,oBAAoB,EAAE,CAAC;;AAGnB,SAAU,0BAA0B,CACxC,OAAe,EAAA;IAKf,OAAO;QACL,GAAG,wBAAwB,CAAC,OAAO,CAAC;QACpC,oBAAoB,EAAEA,aAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;KACrD;AACH;;;;"}
@@ -0,0 +1,446 @@
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');
21
+
22
+ 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
+ });
43
+ }
44
+ /** 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
+ destroyed = false;
61
+ constructor(env, rid, projectTree) {
62
+ this.env = env;
63
+ this.projectTree = projectTree;
64
+ this.overview = project_overview.projectOverview(projectTree.entry(), this.navigationStates, env).withPreCalculatedValueTree();
65
+ this.overviewLight = project_overview_light.projectOverviewLight(projectTree.entry())
66
+ .withPreCalculatedValueTree();
67
+ this.rid = rid;
68
+ this.refreshLoopResult = this.refreshLoop();
69
+ this.activeConfigs = active_cfg.activeConfigs(projectTree.entry(), env);
70
+ }
71
+ async refreshLoop() {
72
+ while (!this.destroyed) {
73
+ try {
74
+ await project.withProject(this.env.projectHelper, this.env.pl, this.rid, (prj) => {
75
+ prj.doRefresh(this.env.ops.stagingRenderingRate);
76
+ });
77
+ await this.activeConfigs.getValue();
78
+ await promises.setTimeout(this.env.ops.projectRefreshInterval, this.abortController.signal);
79
+ // Block computables houskeeping
80
+ const overviewLight = await this.overviewLight.getValue();
81
+ const existingBlocks = new Set(overviewLight.listOfBlocks);
82
+ // Doing cleanup for deleted blocks
83
+ for (const blockId of this.blockComputables.keys()) {
84
+ if (!existingBlocks.has(blockId)) {
85
+ const computable = this.blockComputables.get(blockId);
86
+ if (computable !== undefined && computable !== null)
87
+ computable.fullState.resetState();
88
+ this.blockComputables.set(blockId, null);
89
+ }
90
+ }
91
+ }
92
+ catch (e) {
93
+ if (plClient.isNotFoundError(e)) {
94
+ console.warn('project refresh routine terminated, because project was externally deleted');
95
+ break;
96
+ }
97
+ else if (!plClient.isTimeoutOrCancelError(e))
98
+ throw new Error('Unexpected exception', { cause: e });
99
+ }
100
+ }
101
+ }
102
+ /**
103
+ * Adds new block to the project.
104
+ *
105
+ * @param blockLabel block label / title visible to the user
106
+ * @param blockPackSpec object describing the "block type", read more in the type docs
107
+ * @param before id of the block to insert new block before
108
+ * @param blockId internal id to be assigned for the block, this arg can be omitted
109
+ * then, randomly generated UUID will be assigned automatically
110
+ *
111
+ * @return returns newly created block id
112
+ * */
113
+ async addBlock(blockLabel, blockPackSpec, before, author = undefined, blockId = node_crypto.randomUUID()) {
114
+ const preparedBp = await this.env.bpPreparer.prepare(blockPackSpec);
115
+ const blockCfgContainer = await this.env.bpPreparer.getBlockConfigContainer(blockPackSpec);
116
+ const blockCfg = model.extractConfig(blockCfgContainer); // full content of this var should never be persisted
117
+ await project.withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.addBlock({
118
+ id: blockId,
119
+ label: blockLabel,
120
+ renderingMode: blockCfg.renderingMode,
121
+ }, {
122
+ args: canonicalize(blockCfg.initialArgs),
123
+ uiState: canonicalize(blockCfg.initialUiState),
124
+ blockPack: preparedBp,
125
+ }, before), { retryOptions: {
126
+ ...plClient.DefaultRetryOptions,
127
+ backoffMultiplier: plClient.DefaultRetryOptions.backoffMultiplier * 1.1,
128
+ } });
129
+ await this.projectTree.refreshState();
130
+ return blockId;
131
+ }
132
+ /**
133
+ * Duplicates an existing block by copying all its fields and state.
134
+ * This method works at the mutator level for efficient block copying.
135
+ *
136
+ * @param originalBlockId id of the block to duplicate
137
+ * @param before id of the block to insert new block before
138
+ * @param author author marker for the duplication operation
139
+ * @param newBlockId internal id to be assigned for the duplicated block,
140
+ * if omitted, a randomly generated UUID will be assigned
141
+ *
142
+ * @return returns newly created block id
143
+ * */
144
+ async duplicateBlock(originalBlockId, before, author = undefined, newBlockId = node_crypto.randomUUID()) {
145
+ await project.withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.duplicateBlock(originalBlockId, newBlockId, before));
146
+ await this.projectTree.refreshState();
147
+ return newBlockId;
148
+ }
149
+ /**
150
+ * Update block to new block pack, optionally resetting args and ui state to
151
+ * initial values
152
+ * */
153
+ async updateBlockPack(blockId, blockPackSpec, resetArgs = false, author) {
154
+ const preparedBp = await this.env.bpPreparer.prepare(blockPackSpec);
155
+ const blockCfg = model.extractConfig(await this.env.bpPreparer.getBlockConfigContainer(blockPackSpec));
156
+ await project.withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.migrateBlockPack(blockId, preparedBp, resetArgs ? { args: blockCfg.initialArgs, uiState: blockCfg.initialUiState } : undefined));
157
+ await this.projectTree.refreshState();
158
+ }
159
+ /** Deletes a block with all associated data. */
160
+ async deleteBlock(blockId, author) {
161
+ await project.withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.deleteBlock(blockId));
162
+ this.navigationStates.deleteBlock(blockId);
163
+ await this.projectTree.refreshState();
164
+ }
165
+ /**
166
+ * Updates block order according to the given array of block ids.
167
+ *
168
+ * Provided array must contain exactly the same set of ids current project cosists of,
169
+ * an error will be thrown instead.
170
+ */
171
+ async reorderBlocks(blocks, author) {
172
+ await project.withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
173
+ const currentStructure = mut.structure;
174
+ if (currentStructure.groups.length !== 1)
175
+ throw new Error('Unexpected project structure, non-sinular block group');
176
+ const currentGroup = currentStructure.groups[0];
177
+ if (currentGroup.blocks.length !== blocks.length)
178
+ throw new Error(`Lengh mismatch: ${currentGroup.blocks.length} !== ${blocks.length}`);
179
+ if (new Set(blocks).size !== blocks.length)
180
+ throw new Error(`Repeated block ids`);
181
+ const newStructure = {
182
+ groups: [
183
+ {
184
+ id: currentGroup.id,
185
+ label: currentGroup.label,
186
+ blocks: blocks.map((blockId) => {
187
+ const block = currentGroup.blocks.find((b) => b.id === blockId);
188
+ if (block === undefined)
189
+ throw new Error(`Can't find block: ${blockId}`);
190
+ return block;
191
+ }),
192
+ },
193
+ ],
194
+ };
195
+ mut.updateStructure(newStructure);
196
+ });
197
+ await this.projectTree.refreshState();
198
+ }
199
+ /**
200
+ * Renders production part of the block starting all connected heavy computations.
201
+ * Upstream blocks of the specified block will be started automatically if in
202
+ * stale state.
203
+ * */
204
+ async runBlock(blockId) {
205
+ await project.withProject(this.env.projectHelper, this.env.pl, this.rid, (mut) => mut.renderProduction([blockId], true));
206
+ await this.projectTree.refreshState();
207
+ }
208
+ /**
209
+ * Stops the block if it is running by destroying its production state. All
210
+ * its downstreams will also be destroyed or moved to limbo if already
211
+ * calculated.
212
+ * */
213
+ async stopBlock(blockId) {
214
+ await project.withProject(this.env.projectHelper, this.env.pl, this.rid, (mut) => mut.stopProduction(blockId));
215
+ await this.projectTree.refreshState();
216
+ }
217
+ // /** Update block label. */
218
+ // public async setBlockLabel(blockId: string, label: string, author?: AuthorMarker) {
219
+ // await withProjectAuthored(this.env.pl, this.rid, author, (mut) => {
220
+ // mut.setBlockLabel(blockId, label);
221
+ // });
222
+ // await this.projectTree.refreshState();
223
+ // }
224
+ /**
225
+ * Sets block args, and changes whole project state accordingly.
226
+ * Along with setting arguments one can specify author marker, that will be
227
+ * transactionally associated with the block, to facilitate conflict resolution
228
+ * in collaborative editing scenario.
229
+ * */
230
+ async setBlockArgs(blockId, args, author) {
231
+ await project.withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.setStates([{ blockId, args }]));
232
+ await this.projectTree.refreshState();
233
+ }
234
+ /**
235
+ * Sets ui block state associated with the block.
236
+ * Along with setting arguments one can specify author marker, that will be
237
+ * transactionally associated with the block, to facilitate conflict resolution
238
+ * in collaborative editing scenario.
239
+ * */
240
+ async setUiState(blockId, uiState, author) {
241
+ await project.withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => mut.setStates([{ blockId, uiState }]));
242
+ await this.projectTree.refreshState();
243
+ }
244
+ /**
245
+ * Sets navigation state.
246
+ * */
247
+ // eslint-disable-next-line @typescript-eslint/require-await
248
+ async setNavigationState(blockId, state) {
249
+ this.navigationStates.setState(blockId, state);
250
+ }
251
+ /**
252
+ * Sets block args and ui state, and changes the whole project state accordingly.
253
+ * Along with setting arguments one can specify author marker, that will be
254
+ * transactionally associated with the block, to facilitate conflict resolution
255
+ * in collaborative editing scenario.
256
+ * */
257
+ async setBlockArgsAndUiState(blockId, args, uiState, author) {
258
+ await project.withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) => {
259
+ mut.setStates([{ blockId, args, uiState }]);
260
+ });
261
+ await this.projectTree.refreshState();
262
+ }
263
+ /** Update block settings */
264
+ async setBlockSettings(blockId, newValue) {
265
+ await project.withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, undefined, (mut) => {
266
+ mut.setBlockSettings(blockId, newValue);
267
+ });
268
+ await this.projectTree.refreshState();
269
+ }
270
+ /** Resets arguments and ui state of the block to initial state */
271
+ async resetBlockArgsAndUiState(blockId, author) {
272
+ await this.env.pl.withWriteTx('BlockInputsReset', async (tx) => {
273
+ // reading default arg values from block pack
274
+ const bpHolderRid = plClient.ensureResourceIdNotNull((await tx.getField(plClient.field(this.rid, project_model.projectFieldName(blockId, 'blockPack')))).value);
275
+ const bpRid = plClient.ensureResourceIdNotNull((await tx.getField(plClient.field(bpHolderRid, plClient.Pl.HolderRefField))).value);
276
+ const bpData = await tx.getResourceData(bpRid, false);
277
+ const config = model.extractConfig(tsHelpers.cachedDeserialize(tsHelpers.notEmpty(bpData.data)).config);
278
+ await project.withProjectAuthored(this.env.projectHelper, tx, this.rid, author, (prj) => {
279
+ prj.setStates([{ blockId, args: config.initialArgs, uiState: config.initialUiState }]);
280
+ });
281
+ await tx.commit();
282
+ });
283
+ await this.projectTree.refreshState();
284
+ }
285
+ getBlockComputables(blockId) {
286
+ const cached = this.blockComputables.get(blockId);
287
+ if (cached === null)
288
+ throw new Error(`Block ${blockId} is deleted`);
289
+ if (cached === undefined) {
290
+ // state consists of inputs (args + ui state) and outputs
291
+ const outputs = block.blockOutputs(this.projectTree.entry(), blockId, this.env);
292
+ const fullState = computable.Computable.make((ctx) => {
293
+ return {
294
+ argsAndUiState: block.blockArgsAndUiState(this.projectTree.entry(), blockId, ctx),
295
+ outputs,
296
+ navigationState: this.navigationStates.getState(blockId),
297
+ overview: this.overview,
298
+ };
299
+ }, {
300
+ postprocessValue: (v) => {
301
+ const sdkVersion = v.overview?.blocks?.find((b) => b.id == blockId)?.sdkVersion;
302
+ const toString = sdkVersion && shouldStillUseStringErrors(sdkVersion);
303
+ const newOutputs = toString && v.outputs !== undefined
304
+ ? convertErrorsToStrings(v.outputs)
305
+ : v.outputs;
306
+ return {
307
+ ...v.argsAndUiState,
308
+ outputs: newOutputs,
309
+ navigationState: v.navigationState,
310
+ };
311
+ },
312
+ });
313
+ const computables = {
314
+ fullState: fullState.withPreCalculatedValueTree(),
315
+ };
316
+ this.blockComputables.set(blockId, computables);
317
+ return computables;
318
+ }
319
+ return cached;
320
+ }
321
+ /**
322
+ * Returns a computable, that can be used to retrieve and watch full block state,
323
+ * including outputs, arguments, ui state.
324
+ * */
325
+ getBlockState(blockId) {
326
+ return this.getBlockComputables(blockId).fullState;
327
+ }
328
+ /**
329
+ * Returns a computable, that can be used to retrieve and watch path of the
330
+ * folder containing frontend code.
331
+ * */
332
+ getBlockFrontend(blockId) {
333
+ const cached = this.blockFrontends.get(blockId);
334
+ if (cached === undefined) {
335
+ const fd = frontend_path.frontendData(this.projectTree.entry(), blockId, this.env).withPreCalculatedValueTree();
336
+ this.blockFrontends.set(blockId, fd);
337
+ return fd;
338
+ }
339
+ return cached;
340
+ }
341
+ /** Called by middle layer on close */
342
+ async destroy() {
343
+ // terminating the project service loop
344
+ this.destroyed = true;
345
+ this.abortController.abort();
346
+ await this.refreshLoopResult;
347
+ // terminating the synchronized project tree
348
+ await this.projectTree.terminate();
349
+ // the following will deregister all external resource holders, like
350
+ // downloaded files, running uploads and alike
351
+ this.overview.resetState();
352
+ this.blockFrontends.forEach((c) => c.resetState());
353
+ this.blockComputables.forEach((c) => {
354
+ if (c !== null)
355
+ c.fullState.resetState();
356
+ });
357
+ this.activeConfigs.resetState();
358
+ }
359
+ /** @deprecated */
360
+ async destroyAndAwaitTermination() {
361
+ await this.destroy();
362
+ }
363
+ static async init(env, rid) {
364
+ // Applying migrations to the project resource, if needed
365
+ await migration.applyProjectMigrations(env.pl, rid);
366
+ // Doing a no-op mutation to apply all migration and schema fixes
367
+ await project.withProject(env.projectHelper, env.pl, rid, (_) => { });
368
+ // Loading project tree
369
+ const projectTree = await plTree.SynchronizedTreeState.init(env.pl, rid, {
370
+ ...env.ops.defaultTreeOptions,
371
+ pruning: projectTreePruning,
372
+ }, env.logger);
373
+ if (env.ops.debugOps.dumpInitialTreeState) {
374
+ const state = projectTree.dumpState();
375
+ state.sort((a, b) => (b.data?.byteLength ?? 0) - (a.data?.byteLength ?? 0));
376
+ const stats = plTree.treeDumpStats(state);
377
+ await fs.writeFile(`${plClient.resourceIdToString(rid)}.json`, stringifyForDump(state));
378
+ await fs.writeFile(`${plClient.resourceIdToString(rid)}.stats.json`, stringifyForDump(stats));
379
+ }
380
+ return new Project(env, rid, projectTree);
381
+ }
382
+ }
383
+ function projectTreePruning(r) {
384
+ // console.log(
385
+ // JSON.stringify(
386
+ // { ...r, kv: [], data: undefined } satisfies ExtendedResourceData,
387
+ // (_, v) => {
388
+ // if (typeof v === 'bigint') return v.toString();
389
+ // return v;
390
+ // }
391
+ // )
392
+ // );
393
+ if (r.type.name.startsWith('StreamWorkdir/'))
394
+ return [];
395
+ switch (r.type.name) {
396
+ case 'BlockPackCustom':
397
+ return r.fields.filter((f) => f.name !== 'template');
398
+ case 'UserProject':
399
+ return r.fields.filter((f) => !f.name.startsWith('__serviceTemplate'));
400
+ case 'Blob':
401
+ return [];
402
+ default:
403
+ return r.fields;
404
+ }
405
+ }
406
+ /** Returns true if sdk version of the block is old and we need to convert
407
+ * ErrorLike errors to strings like it was.
408
+ * We need it for keeping old blocks and new UI compatibility. */
409
+ function shouldStillUseStringErrors(sdkVersion) {
410
+ return !isVersionGreater(sdkVersion, '1.26.0');
411
+ }
412
+ /** Checks if sdk version is greater that a target version. */
413
+ function isVersionGreater(sdkVersion, targetVersion) {
414
+ const version = sdkVersion.split('.').map(Number);
415
+ const target = targetVersion.split('.').map(Number);
416
+ return (version[0] > target[0]
417
+ || (version[0] === target[0] && version[1] > target[1])
418
+ || (version[0] === target[0] && version[1] === target[1] && version[2] > target[2]));
419
+ }
420
+ /** Converts ErrorLike errors to strings in the outputs like it was in old ML versions. */
421
+ function convertErrorsToStrings(outputs) {
422
+ const result = {};
423
+ for (const [key, val] of Object.entries(outputs)) {
424
+ if (val.ok) {
425
+ result[key] = val;
426
+ continue;
427
+ }
428
+ result[key] = {
429
+ ok: false,
430
+ errors: val.errors.map((e) => {
431
+ if (typeof e === 'string') {
432
+ return e;
433
+ }
434
+ else if (e.type == 'PlError' && e.fullMessage !== undefined) {
435
+ return e.fullMessage;
436
+ }
437
+ return e.message;
438
+ }),
439
+ moreErrors: val.moreErrors,
440
+ };
441
+ }
442
+ return result;
443
+ }
444
+
445
+ exports.Project = Project;
446
+ //# sourceMappingURL=project.cjs.map