@milaboratories/pl-middle-layer 1.46.20 → 1.46.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/dist/block_registry/index.d.ts +3 -3
  2. package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
  3. package/dist/block_registry/registry-v2-provider.d.ts +2 -2
  4. package/dist/block_registry/registry-v2-provider.js.map +1 -1
  5. package/dist/block_registry/registry.cjs +54 -53
  6. package/dist/block_registry/registry.cjs.map +1 -1
  7. package/dist/block_registry/registry.d.ts +4 -4
  8. package/dist/block_registry/registry.d.ts.map +1 -1
  9. package/dist/block_registry/registry.js +54 -53
  10. package/dist/block_registry/registry.js.map +1 -1
  11. package/dist/block_registry/watcher.cjs +12 -12
  12. package/dist/block_registry/watcher.cjs.map +1 -1
  13. package/dist/block_registry/watcher.d.ts +6 -6
  14. package/dist/block_registry/watcher.d.ts.map +1 -1
  15. package/dist/block_registry/watcher.js +12 -12
  16. package/dist/block_registry/watcher.js.map +1 -1
  17. package/dist/block_registry/well_known_registries.cjs +6 -6
  18. package/dist/block_registry/well_known_registries.cjs.map +1 -1
  19. package/dist/block_registry/well_known_registries.d.ts +1 -1
  20. package/dist/block_registry/well_known_registries.js +6 -6
  21. package/dist/block_registry/well_known_registries.js.map +1 -1
  22. package/dist/cfg_render/executor.cjs +11 -11
  23. package/dist/cfg_render/executor.cjs.map +1 -1
  24. package/dist/cfg_render/executor.d.ts +5 -5
  25. package/dist/cfg_render/executor.js +11 -11
  26. package/dist/cfg_render/executor.js.map +1 -1
  27. package/dist/cfg_render/operation.d.ts +5 -5
  28. package/dist/cfg_render/renderer.cjs +74 -75
  29. package/dist/cfg_render/renderer.cjs.map +1 -1
  30. package/dist/cfg_render/renderer.d.ts +2 -2
  31. package/dist/cfg_render/renderer.d.ts.map +1 -1
  32. package/dist/cfg_render/renderer.js +74 -75
  33. package/dist/cfg_render/renderer.js.map +1 -1
  34. package/dist/cfg_render/traverse.cjs +27 -27
  35. package/dist/cfg_render/traverse.cjs.map +1 -1
  36. package/dist/cfg_render/traverse.d.ts +1 -1
  37. package/dist/cfg_render/traverse.js +27 -27
  38. package/dist/cfg_render/traverse.js.map +1 -1
  39. package/dist/cfg_render/util.cjs +1 -1
  40. package/dist/cfg_render/util.cjs.map +1 -1
  41. package/dist/cfg_render/util.d.ts +1 -1
  42. package/dist/cfg_render/util.js +1 -1
  43. package/dist/cfg_render/util.js.map +1 -1
  44. package/dist/debug/index.cjs +4 -2
  45. package/dist/debug/index.cjs.map +1 -1
  46. package/dist/debug/index.d.ts +2 -2
  47. package/dist/debug/index.d.ts.map +1 -1
  48. package/dist/debug/index.js +4 -2
  49. package/dist/debug/index.js.map +1 -1
  50. package/dist/dev_env/index.cjs +8 -8
  51. package/dist/dev_env/index.cjs.map +1 -1
  52. package/dist/dev_env/index.js +8 -8
  53. package/dist/dev_env/index.js.map +1 -1
  54. package/dist/dev_env/util.cjs +1 -1
  55. package/dist/dev_env/util.cjs.map +1 -1
  56. package/dist/dev_env/util.d.ts +1 -1
  57. package/dist/dev_env/util.js +1 -1
  58. package/dist/dev_env/util.js.map +1 -1
  59. package/dist/index.d.ts +16 -16
  60. package/dist/js_render/computable_context.cjs +78 -78
  61. package/dist/js_render/computable_context.cjs.map +1 -1
  62. package/dist/js_render/computable_context.d.ts +9 -9
  63. package/dist/js_render/computable_context.d.ts.map +1 -1
  64. package/dist/js_render/computable_context.js +78 -78
  65. package/dist/js_render/computable_context.js.map +1 -1
  66. package/dist/js_render/context.cjs +33 -27
  67. package/dist/js_render/context.cjs.map +1 -1
  68. package/dist/js_render/context.d.ts +7 -7
  69. package/dist/js_render/context.d.ts.map +1 -1
  70. package/dist/js_render/context.js +33 -27
  71. package/dist/js_render/context.js.map +1 -1
  72. package/dist/js_render/index.cjs +10 -6
  73. package/dist/js_render/index.cjs.map +1 -1
  74. package/dist/js_render/index.d.ts +6 -6
  75. package/dist/js_render/index.d.ts.map +1 -1
  76. package/dist/js_render/index.js +10 -6
  77. package/dist/js_render/index.js.map +1 -1
  78. package/dist/middle_layer/active_cfg.cjs.map +1 -1
  79. package/dist/middle_layer/active_cfg.d.ts +3 -3
  80. package/dist/middle_layer/active_cfg.d.ts.map +1 -1
  81. package/dist/middle_layer/active_cfg.js.map +1 -1
  82. package/dist/middle_layer/block.cjs +1 -1
  83. package/dist/middle_layer/block.cjs.map +1 -1
  84. package/dist/middle_layer/block.d.ts +6 -6
  85. package/dist/middle_layer/block.d.ts.map +1 -1
  86. package/dist/middle_layer/block.js +1 -1
  87. package/dist/middle_layer/block.js.map +1 -1
  88. package/dist/middle_layer/block_ctx.cjs +9 -9
  89. package/dist/middle_layer/block_ctx.cjs.map +1 -1
  90. package/dist/middle_layer/block_ctx.d.ts +6 -6
  91. package/dist/middle_layer/block_ctx.d.ts.map +1 -1
  92. package/dist/middle_layer/block_ctx.js +9 -9
  93. package/dist/middle_layer/block_ctx.js.map +1 -1
  94. package/dist/middle_layer/block_ctx_unsafe.cjs +1 -1
  95. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
  96. package/dist/middle_layer/block_ctx_unsafe.d.ts +5 -5
  97. package/dist/middle_layer/block_ctx_unsafe.js +1 -1
  98. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -1
  99. package/dist/middle_layer/driver_kit.cjs +1 -2
  100. package/dist/middle_layer/driver_kit.cjs.map +1 -1
  101. package/dist/middle_layer/driver_kit.d.ts +7 -7
  102. package/dist/middle_layer/driver_kit.d.ts.map +1 -1
  103. package/dist/middle_layer/driver_kit.js +1 -2
  104. package/dist/middle_layer/driver_kit.js.map +1 -1
  105. package/dist/middle_layer/frontend_path.cjs +5 -5
  106. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  107. package/dist/middle_layer/frontend_path.d.ts +4 -4
  108. package/dist/middle_layer/frontend_path.d.ts.map +1 -1
  109. package/dist/middle_layer/frontend_path.js +5 -5
  110. package/dist/middle_layer/frontend_path.js.map +1 -1
  111. package/dist/middle_layer/index.d.ts +4 -4
  112. package/dist/middle_layer/middle_layer.cjs +11 -11
  113. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  114. package/dist/middle_layer/middle_layer.d.ts +18 -18
  115. package/dist/middle_layer/middle_layer.d.ts.map +1 -1
  116. package/dist/middle_layer/middle_layer.js +11 -11
  117. package/dist/middle_layer/middle_layer.js.map +1 -1
  118. package/dist/middle_layer/navigation_states.cjs +2 -2
  119. package/dist/middle_layer/navigation_states.cjs.map +1 -1
  120. package/dist/middle_layer/navigation_states.d.ts +2 -2
  121. package/dist/middle_layer/navigation_states.js +2 -2
  122. package/dist/middle_layer/navigation_states.js.map +1 -1
  123. package/dist/middle_layer/ops.cjs +5 -5
  124. package/dist/middle_layer/ops.cjs.map +1 -1
  125. package/dist/middle_layer/ops.d.ts +11 -11
  126. package/dist/middle_layer/ops.d.ts.map +1 -1
  127. package/dist/middle_layer/ops.js +5 -5
  128. package/dist/middle_layer/ops.js.map +1 -1
  129. package/dist/middle_layer/project.cjs +71 -63
  130. package/dist/middle_layer/project.cjs.map +1 -1
  131. package/dist/middle_layer/project.d.ts +10 -10
  132. package/dist/middle_layer/project.d.ts.map +1 -1
  133. package/dist/middle_layer/project.js +71 -63
  134. package/dist/middle_layer/project.js.map +1 -1
  135. package/dist/middle_layer/project_list.cjs +2 -2
  136. package/dist/middle_layer/project_list.cjs.map +1 -1
  137. package/dist/middle_layer/project_list.d.ts +6 -6
  138. package/dist/middle_layer/project_list.d.ts.map +1 -1
  139. package/dist/middle_layer/project_list.js +2 -2
  140. package/dist/middle_layer/project_list.js.map +1 -1
  141. package/dist/middle_layer/project_overview.cjs +40 -40
  142. package/dist/middle_layer/project_overview.cjs.map +1 -1
  143. package/dist/middle_layer/project_overview.d.ts +5 -5
  144. package/dist/middle_layer/project_overview.d.ts.map +1 -1
  145. package/dist/middle_layer/project_overview.js +40 -40
  146. package/dist/middle_layer/project_overview.js.map +1 -1
  147. package/dist/middle_layer/project_overview_light.cjs.map +1 -1
  148. package/dist/middle_layer/project_overview_light.d.ts +2 -2
  149. package/dist/middle_layer/project_overview_light.d.ts.map +1 -1
  150. package/dist/middle_layer/project_overview_light.js.map +1 -1
  151. package/dist/middle_layer/render.cjs +1 -1
  152. package/dist/middle_layer/render.cjs.map +1 -1
  153. package/dist/middle_layer/render.d.ts +4 -4
  154. package/dist/middle_layer/render.js +1 -1
  155. package/dist/middle_layer/render.js.map +1 -1
  156. package/dist/middle_layer/render.test.d.ts +2 -2
  157. package/dist/middle_layer/types.d.ts +3 -3
  158. package/dist/middle_layer/util.cjs +9 -4
  159. package/dist/middle_layer/util.cjs.map +1 -1
  160. package/dist/middle_layer/util.d.ts +4 -4
  161. package/dist/middle_layer/util.d.ts.map +1 -1
  162. package/dist/middle_layer/util.js +9 -4
  163. package/dist/middle_layer/util.js.map +1 -1
  164. package/dist/model/args.cjs +19 -15
  165. package/dist/model/args.cjs.map +1 -1
  166. package/dist/model/args.d.ts +1 -1
  167. package/dist/model/args.d.ts.map +1 -1
  168. package/dist/model/args.js +19 -15
  169. package/dist/model/args.js.map +1 -1
  170. package/dist/model/block_pack.d.ts +2 -2
  171. package/dist/model/block_pack_spec.cjs +3 -3
  172. package/dist/model/block_pack_spec.cjs.map +1 -1
  173. package/dist/model/block_pack_spec.d.ts +8 -8
  174. package/dist/model/block_pack_spec.js +3 -3
  175. package/dist/model/block_pack_spec.js.map +1 -1
  176. package/dist/model/block_storage_helper.cjs +4 -4
  177. package/dist/model/block_storage_helper.cjs.map +1 -1
  178. package/dist/model/block_storage_helper.d.ts +2 -2
  179. package/dist/model/block_storage_helper.d.ts.map +1 -1
  180. package/dist/model/block_storage_helper.js +4 -4
  181. package/dist/model/block_storage_helper.js.map +1 -1
  182. package/dist/model/index.d.ts +3 -3
  183. package/dist/model/project_helper.cjs +30 -13
  184. package/dist/model/project_helper.cjs.map +1 -1
  185. package/dist/model/project_helper.d.ts +4 -4
  186. package/dist/model/project_helper.d.ts.map +1 -1
  187. package/dist/model/project_helper.js +30 -13
  188. package/dist/model/project_helper.js.map +1 -1
  189. package/dist/model/project_model.cjs +23 -23
  190. package/dist/model/project_model.cjs.map +1 -1
  191. package/dist/model/project_model.d.ts +6 -6
  192. package/dist/model/project_model.d.ts.map +1 -1
  193. package/dist/model/project_model.js +23 -23
  194. package/dist/model/project_model.js.map +1 -1
  195. package/dist/model/project_model_util.cjs +2 -2
  196. package/dist/model/project_model_util.cjs.map +1 -1
  197. package/dist/model/project_model_util.d.ts +3 -3
  198. package/dist/model/project_model_util.d.ts.map +1 -1
  199. package/dist/model/project_model_util.js +2 -2
  200. package/dist/model/project_model_util.js.map +1 -1
  201. package/dist/model/project_model_v1.cjs +2 -2
  202. package/dist/model/project_model_v1.cjs.map +1 -1
  203. package/dist/model/project_model_v1.js +2 -2
  204. package/dist/model/project_model_v1.js.map +1 -1
  205. package/dist/model/template_spec.d.ts +5 -5
  206. package/dist/mutator/block-pack/block_pack.cjs +43 -43
  207. package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
  208. package/dist/mutator/block-pack/block_pack.d.ts +6 -6
  209. package/dist/mutator/block-pack/block_pack.d.ts.map +1 -1
  210. package/dist/mutator/block-pack/block_pack.js +43 -43
  211. package/dist/mutator/block-pack/block_pack.js.map +1 -1
  212. package/dist/mutator/block-pack/frontend.cjs +2 -2
  213. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  214. package/dist/mutator/block-pack/frontend.d.ts +2 -2
  215. package/dist/mutator/block-pack/frontend.d.ts.map +1 -1
  216. package/dist/mutator/block-pack/frontend.js +2 -2
  217. package/dist/mutator/block-pack/frontend.js.map +1 -1
  218. package/dist/mutator/context_export.cjs +5 -5
  219. package/dist/mutator/context_export.cjs.map +1 -1
  220. package/dist/mutator/context_export.d.ts +2 -2
  221. package/dist/mutator/context_export.d.ts.map +1 -1
  222. package/dist/mutator/context_export.js +5 -5
  223. package/dist/mutator/context_export.js.map +1 -1
  224. package/dist/mutator/migration.cjs +7 -7
  225. package/dist/mutator/migration.cjs.map +1 -1
  226. package/dist/mutator/migration.d.ts +1 -1
  227. package/dist/mutator/migration.d.ts.map +1 -1
  228. package/dist/mutator/migration.js +7 -7
  229. package/dist/mutator/migration.js.map +1 -1
  230. package/dist/mutator/project.cjs +147 -148
  231. package/dist/mutator/project.cjs.map +1 -1
  232. package/dist/mutator/project.d.ts +13 -13
  233. package/dist/mutator/project.d.ts.map +1 -1
  234. package/dist/mutator/project.js +147 -148
  235. package/dist/mutator/project.js.map +1 -1
  236. package/dist/mutator/template/direct_template_loader.cjs +16 -16
  237. package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
  238. package/dist/mutator/template/direct_template_loader.d.ts +2 -2
  239. package/dist/mutator/template/direct_template_loader.d.ts.map +1 -1
  240. package/dist/mutator/template/direct_template_loader.js +16 -16
  241. package/dist/mutator/template/direct_template_loader.js.map +1 -1
  242. package/dist/mutator/template/direct_template_loader_v3.cjs +13 -13
  243. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
  244. package/dist/mutator/template/direct_template_loader_v3.d.ts +3 -3
  245. package/dist/mutator/template/direct_template_loader_v3.d.ts.map +1 -1
  246. package/dist/mutator/template/direct_template_loader_v3.js +13 -13
  247. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
  248. package/dist/mutator/template/render_block.cjs +7 -7
  249. package/dist/mutator/template/render_block.cjs.map +1 -1
  250. package/dist/mutator/template/render_block.d.ts +1 -1
  251. package/dist/mutator/template/render_block.d.ts.map +1 -1
  252. package/dist/mutator/template/render_block.js +7 -7
  253. package/dist/mutator/template/render_block.js.map +1 -1
  254. package/dist/mutator/template/render_template.cjs +10 -10
  255. package/dist/mutator/template/render_template.cjs.map +1 -1
  256. package/dist/mutator/template/render_template.d.ts +2 -2
  257. package/dist/mutator/template/render_template.js +10 -10
  258. package/dist/mutator/template/render_template.js.map +1 -1
  259. package/dist/mutator/template/template_loading.cjs +17 -17
  260. package/dist/mutator/template/template_loading.cjs.map +1 -1
  261. package/dist/mutator/template/template_loading.d.ts +2 -2
  262. package/dist/mutator/template/template_loading.js +17 -17
  263. package/dist/mutator/template/template_loading.js.map +1 -1
  264. package/dist/network_check/network_check.cjs +33 -32
  265. package/dist/network_check/network_check.cjs.map +1 -1
  266. package/dist/network_check/network_check.d.ts +6 -6
  267. package/dist/network_check/network_check.d.ts.map +1 -1
  268. package/dist/network_check/network_check.js +33 -32
  269. package/dist/network_check/network_check.js.map +1 -1
  270. package/dist/network_check/pings.cjs +3 -3
  271. package/dist/network_check/pings.cjs.map +1 -1
  272. package/dist/network_check/pings.d.ts +4 -4
  273. package/dist/network_check/pings.d.ts.map +1 -1
  274. package/dist/network_check/pings.js +3 -3
  275. package/dist/network_check/pings.js.map +1 -1
  276. package/dist/network_check/template.cjs +57 -44
  277. package/dist/network_check/template.cjs.map +1 -1
  278. package/dist/network_check/template.d.ts +8 -8
  279. package/dist/network_check/template.d.ts.map +1 -1
  280. package/dist/network_check/template.js +57 -44
  281. package/dist/network_check/template.js.map +1 -1
  282. package/dist/pool/data.cjs +45 -33
  283. package/dist/pool/data.cjs.map +1 -1
  284. package/dist/pool/data.d.ts +3 -3
  285. package/dist/pool/data.d.ts.map +1 -1
  286. package/dist/pool/data.js +45 -33
  287. package/dist/pool/data.js.map +1 -1
  288. package/dist/pool/driver.cjs +18 -16
  289. package/dist/pool/driver.cjs.map +1 -1
  290. package/dist/pool/driver.d.ts +5 -5
  291. package/dist/pool/driver.d.ts.map +1 -1
  292. package/dist/pool/driver.js +18 -16
  293. package/dist/pool/driver.js.map +1 -1
  294. package/dist/pool/index.d.ts +2 -2
  295. package/dist/pool/p_object_collection.cjs +5 -5
  296. package/dist/pool/p_object_collection.cjs.map +1 -1
  297. package/dist/pool/p_object_collection.d.ts +2 -2
  298. package/dist/pool/p_object_collection.d.ts.map +1 -1
  299. package/dist/pool/p_object_collection.js +5 -5
  300. package/dist/pool/p_object_collection.js.map +1 -1
  301. package/dist/pool/result_pool.cjs +6 -6
  302. package/dist/pool/result_pool.cjs.map +1 -1
  303. package/dist/pool/result_pool.d.ts +6 -6
  304. package/dist/pool/result_pool.d.ts.map +1 -1
  305. package/dist/pool/result_pool.js +6 -6
  306. package/dist/pool/result_pool.js.map +1 -1
  307. package/dist/test/block_packs.d.ts +2 -2
  308. package/dist/test/known_templates.d.ts +1 -1
  309. package/dist/worker/WorkerManager.cjs +7 -8
  310. package/dist/worker/WorkerManager.cjs.map +1 -1
  311. package/dist/worker/WorkerManager.d.ts +2 -2
  312. package/dist/worker/WorkerManager.d.ts.map +1 -1
  313. package/dist/worker/WorkerManager.js +7 -8
  314. package/dist/worker/WorkerManager.js.map +1 -1
  315. package/dist/worker/worker.cjs +6 -4
  316. package/dist/worker/worker.cjs.map +1 -1
  317. package/dist/worker/worker.js +6 -4
  318. package/dist/worker/worker.js.map +1 -1
  319. package/dist/worker/workerApi.cjs.map +1 -1
  320. package/dist/worker/workerApi.js.map +1 -1
  321. package/package.json +41 -41
  322. package/src/block_registry/index.ts +3 -3
  323. package/src/block_registry/registry-v2-provider.ts +2 -2
  324. package/src/block_registry/registry.test.ts +17 -17
  325. package/src/block_registry/registry.ts +55 -60
  326. package/src/block_registry/watcher.ts +24 -23
  327. package/src/block_registry/well_known_registries.ts +7 -7
  328. package/src/cfg_render/executor.test.ts +36 -36
  329. package/src/cfg_render/executor.ts +24 -24
  330. package/src/cfg_render/operation.ts +5 -5
  331. package/src/cfg_render/renderer.ts +96 -93
  332. package/src/cfg_render/traverse.ts +50 -50
  333. package/src/cfg_render/util.ts +3 -3
  334. package/src/debug/index.ts +6 -4
  335. package/src/dev_env/index.ts +16 -16
  336. package/src/dev_env/util.ts +3 -3
  337. package/src/index.ts +16 -16
  338. package/src/js_render/computable_context.ts +143 -126
  339. package/src/js_render/context.ts +72 -44
  340. package/src/js_render/index.ts +51 -24
  341. package/src/middle_layer/active_cfg.ts +14 -12
  342. package/src/middle_layer/block.ts +30 -23
  343. package/src/middle_layer/block_ctx.ts +27 -31
  344. package/src/middle_layer/block_ctx_unsafe.ts +9 -9
  345. package/src/middle_layer/driver_kit.ts +13 -19
  346. package/src/middle_layer/frontend_path.ts +18 -23
  347. package/src/middle_layer/index.ts +4 -4
  348. package/src/middle_layer/middle_layer.ts +57 -55
  349. package/src/middle_layer/navigation_states.ts +6 -6
  350. package/src/middle_layer/ops.ts +43 -42
  351. package/src/middle_layer/project.ts +274 -173
  352. package/src/middle_layer/project_list.ts +14 -15
  353. package/src/middle_layer/project_overview.ts +104 -113
  354. package/src/middle_layer/project_overview_light.ts +7 -9
  355. package/src/middle_layer/render.test.ts +49 -48
  356. package/src/middle_layer/render.ts +9 -9
  357. package/src/middle_layer/types.ts +3 -3
  358. package/src/middle_layer/util.ts +17 -12
  359. package/src/model/args.ts +22 -19
  360. package/src/model/block_pack.ts +2 -2
  361. package/src/model/block_pack_spec.ts +11 -11
  362. package/src/model/block_storage_helper.ts +11 -11
  363. package/src/model/index.ts +3 -3
  364. package/src/model/project_helper.ts +78 -32
  365. package/src/model/project_model.test.ts +5 -9
  366. package/src/model/project_model.ts +48 -49
  367. package/src/model/project_model_util.test.ts +86 -53
  368. package/src/model/project_model_util.ts +18 -14
  369. package/src/model/project_model_v1.ts +3 -3
  370. package/src/model/template_spec.ts +5 -5
  371. package/src/mutator/block-pack/block_pack.test.ts +25 -25
  372. package/src/mutator/block-pack/block_pack.ts +70 -68
  373. package/src/mutator/block-pack/frontend.ts +6 -13
  374. package/src/mutator/context_export.ts +12 -10
  375. package/src/mutator/migration.ts +20 -14
  376. package/src/mutator/project-v3.test.ts +123 -118
  377. package/src/mutator/project.test.ts +105 -94
  378. package/src/mutator/project.ts +357 -274
  379. package/src/mutator/template/direct_template_loader.ts +26 -32
  380. package/src/mutator/template/direct_template_loader_v3.ts +51 -25
  381. package/src/mutator/template/render_block.ts +14 -21
  382. package/src/mutator/template/render_template.ts +13 -13
  383. package/src/mutator/template/template_loading.ts +23 -23
  384. package/src/mutator/template/template_render.test.ts +87 -86
  385. package/src/network_check/network_check.test.ts +4 -4
  386. package/src/network_check/network_check.ts +102 -79
  387. package/src/network_check/pings.ts +35 -16
  388. package/src/network_check/template.test.ts +47 -44
  389. package/src/network_check/template.ts +151 -95
  390. package/src/network_check/test_utils.ts +1 -1
  391. package/src/pool/data.ts +81 -69
  392. package/src/pool/driver.ts +56 -51
  393. package/src/pool/index.ts +2 -2
  394. package/src/pool/p_object_collection.ts +16 -15
  395. package/src/pool/result_pool.ts +23 -34
  396. package/src/test/block_packs.ts +15 -15
  397. package/src/test/explicit_templates.ts +4 -4
  398. package/src/test/known_templates.ts +10 -10
  399. package/src/test_env.ts +1 -1
  400. package/src/worker/WorkerManager.ts +22 -18
  401. package/src/worker/worker.ts +11 -9
  402. package/src/worker/workerApi.ts +1 -1
@@ -10,7 +10,7 @@ var canonicalize = require('canonicalize');
10
10
  const DefaultBlockUpdateWatcherOps = {
11
11
  minDelay: 1500,
12
12
  };
13
- const NoUpdatesKey = '__no_updates__';
13
+ const NoUpdatesKey = "__no_updates__";
14
14
  class BlockUpdateWatcher extends computable.PollComputablePool {
15
15
  registryProvider;
16
16
  http;
@@ -23,11 +23,11 @@ class BlockUpdateWatcher extends computable.PollComputablePool {
23
23
  }
24
24
  getKey(req) {
25
25
  switch (req.currentSpec.type) {
26
- case 'dev-v1':
26
+ case "dev-v1":
27
27
  return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
28
- case 'dev-v2':
28
+ case "dev-v2":
29
29
  return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
30
- case 'from-registry-v2':
30
+ case "from-registry-v2":
31
31
  return `from_registry_v2_${canonicalize(req)}`;
32
32
  default:
33
33
  return NoUpdatesKey;
@@ -37,7 +37,7 @@ class BlockUpdateWatcher extends computable.PollComputablePool {
37
37
  try {
38
38
  const cSpec = req.currentSpec;
39
39
  switch (cSpec.type) {
40
- case 'dev-v1': {
40
+ case "dev-v1": {
41
41
  try {
42
42
  const mtime = await registry.getDevV1PacketMtime(cSpec.folder);
43
43
  if (mtime === cSpec.mtime)
@@ -50,7 +50,7 @@ class BlockUpdateWatcher extends computable.PollComputablePool {
50
50
  return { suggestions: [] };
51
51
  }
52
52
  }
53
- case 'dev-v2': {
53
+ case "dev-v2": {
54
54
  try {
55
55
  const description = await blockTools.tryLoadPackDescription(cSpec.folder, this.logger);
56
56
  if (description === undefined)
@@ -66,10 +66,10 @@ class BlockUpdateWatcher extends computable.PollComputablePool {
66
66
  return { suggestions: [] };
67
67
  }
68
68
  }
69
- case 'from-registry-v2': {
69
+ case "from-registry-v2": {
70
70
  try {
71
71
  const { versionLock, skipVersion } = req.settings;
72
- if (versionLock === 'patch')
72
+ if (versionLock === "patch")
73
73
  return { suggestions: [] };
74
74
  const registry = this.registryProvider.getRegistry(cSpec.registryUrl);
75
75
  let channel = this.preferredUpdateChannel;
@@ -101,11 +101,11 @@ class BlockUpdateWatcher extends computable.PollComputablePool {
101
101
  case undefined:
102
102
  vMainSuggestion = vSuggestions[0].update;
103
103
  break;
104
- case 'major':
105
- vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;
104
+ case "major":
105
+ vMainSuggestion = vSuggestions.find((v) => v.type !== "major")?.update;
106
106
  break;
107
- case 'minor':
108
- vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;
107
+ case "minor":
108
+ vMainSuggestion = vSuggestions.find((v) => v.type === "patch")?.update;
109
109
  break;
110
110
  }
111
111
  const suggestions = vSuggestions.map(({ type, update }) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.cjs","sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from '@milaboratories/computable';\nimport { PollComputablePool } from '@milaboratories/computable';\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions } from '@milaboratories/pl-model-middle-layer';\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from '@milaboratories/pl-model-middle-layer';\nimport type { Dispatcher } from 'undici';\nimport { getDevV1PacketMtime, getDevV2PacketMtime } from './registry';\nimport { tryLoadPackDescription } from '@platforma-sdk/block-tools';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport type { V2RegistryProvider } from './registry-v2-provider';\nimport * as semver from 'semver';\nimport canonicalize from 'canonicalize';\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = '__no_updates__';\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case 'dev-v1':\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case 'dev-v2':\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case 'from-registry-v2':\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case 'dev-v1': {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case 'dev-v2': {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case 'from-registry-v2': {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === 'patch') return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case 'major':\n vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;\n break;\n case 'minor':\n vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"names":["PollComputablePool","getDevV1PacketMtime","tryLoadPackDescription","getDevV2PacketMtime","StableChannel","AnyChannel","blockPackIdToString","semver.lte"],"mappings":"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"}
1
+ {"version":3,"file":"watcher.cjs","sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from \"@milaboratories/computable\";\nimport { PollComputablePool } from \"@milaboratories/computable\";\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { Dispatcher } from \"undici\";\nimport { getDevV1PacketMtime, getDevV2PacketMtime } from \"./registry\";\nimport { tryLoadPackDescription } from \"@platforma-sdk/block-tools\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { V2RegistryProvider } from \"./registry-v2-provider\";\nimport * as semver from \"semver\";\nimport canonicalize from \"canonicalize\";\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = \"__no_updates__\";\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case \"dev-v1\":\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"dev-v2\":\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"from-registry-v2\":\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case \"dev-v1\": {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"dev-v2\": {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-registry-v2\": {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === \"patch\") return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case \"major\":\n vMainSuggestion = vSuggestions.find((v) => v.type !== \"major\")?.update;\n break;\n case \"minor\":\n vMainSuggestion = vSuggestions.find((v) => v.type === \"patch\")?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"names":["PollComputablePool","getDevV1PacketMtime","tryLoadPackDescription","getDevV2PacketMtime","StableChannel","AnyChannel","blockPackIdToString","semver.lte"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import type { PollPoolOps } from '@milaboratories/computable';
2
- import { PollComputablePool } from '@milaboratories/computable';
3
- import type { BlockPackSpec, BlockSettings, UpdateSuggestions } from '@milaboratories/pl-model-middle-layer';
4
- import type { Dispatcher } from 'undici';
5
- import type { MiLogger } from '@milaboratories/ts-helpers';
6
- import type { V2RegistryProvider } from './registry-v2-provider';
1
+ import type { PollPoolOps } from "@milaboratories/computable";
2
+ import { PollComputablePool } from "@milaboratories/computable";
3
+ import type { BlockPackSpec, BlockSettings, UpdateSuggestions } from "@milaboratories/pl-model-middle-layer";
4
+ import type { Dispatcher } from "undici";
5
+ import type { MiLogger } from "@milaboratories/ts-helpers";
6
+ import type { V2RegistryProvider } from "./registry-v2-provider";
7
7
  export declare const DefaultBlockUpdateWatcherOps: PollPoolOps;
8
8
  export type BlockUpdateWatcherOps = Partial<PollPoolOps> & {
9
9
  readonly http?: Dispatcher;
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/block_registry/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAEV,aAAa,EACb,aAAa,EACb,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAMnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAIjE,eAAO,MAAM,4BAA4B,EAAE,WAE1C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAC1C,CAAC;AAIF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,aAAa,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,qBAAqB,EACrB,sBAAsB,CACvB;IAKG,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAJnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAS;gBAG9B,gBAAgB,EAAE,kBAAkB,EACrD,MAAM,EAAE,QAAQ,EAChB,GAAG,GAAE,qBAA0B;IAOjC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM;cAapC,SAAS,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA+GtF,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO;CAsB5F"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/block_registry/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAEV,aAAa,EACb,aAAa,EACb,iBAAiB,EAClB,MAAM,uCAAuC,CAAC;AAM/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAIjE,eAAO,MAAM,4BAA4B,EAAE,WAE1C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAC1C,CAAC;AAIF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,aAAa,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,kBAAkB,CACxD,qBAAqB,EACrB,sBAAsB,CACvB;IAKG,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAJnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAS;gBAG9B,gBAAgB,EAAE,kBAAkB,EACrD,MAAM,EAAE,QAAQ,EAChB,GAAG,GAAE,qBAA0B;IAOjC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM;cAapC,SAAS,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA+GtF,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO;CAsB5F"}
@@ -8,7 +8,7 @@ import canonicalize from 'canonicalize';
8
8
  const DefaultBlockUpdateWatcherOps = {
9
9
  minDelay: 1500,
10
10
  };
11
- const NoUpdatesKey = '__no_updates__';
11
+ const NoUpdatesKey = "__no_updates__";
12
12
  class BlockUpdateWatcher extends PollComputablePool {
13
13
  registryProvider;
14
14
  http;
@@ -21,11 +21,11 @@ class BlockUpdateWatcher extends PollComputablePool {
21
21
  }
22
22
  getKey(req) {
23
23
  switch (req.currentSpec.type) {
24
- case 'dev-v1':
24
+ case "dev-v1":
25
25
  return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
26
- case 'dev-v2':
26
+ case "dev-v2":
27
27
  return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
28
- case 'from-registry-v2':
28
+ case "from-registry-v2":
29
29
  return `from_registry_v2_${canonicalize(req)}`;
30
30
  default:
31
31
  return NoUpdatesKey;
@@ -35,7 +35,7 @@ class BlockUpdateWatcher extends PollComputablePool {
35
35
  try {
36
36
  const cSpec = req.currentSpec;
37
37
  switch (cSpec.type) {
38
- case 'dev-v1': {
38
+ case "dev-v1": {
39
39
  try {
40
40
  const mtime = await getDevV1PacketMtime(cSpec.folder);
41
41
  if (mtime === cSpec.mtime)
@@ -48,7 +48,7 @@ class BlockUpdateWatcher extends PollComputablePool {
48
48
  return { suggestions: [] };
49
49
  }
50
50
  }
51
- case 'dev-v2': {
51
+ case "dev-v2": {
52
52
  try {
53
53
  const description = await tryLoadPackDescription(cSpec.folder, this.logger);
54
54
  if (description === undefined)
@@ -64,10 +64,10 @@ class BlockUpdateWatcher extends PollComputablePool {
64
64
  return { suggestions: [] };
65
65
  }
66
66
  }
67
- case 'from-registry-v2': {
67
+ case "from-registry-v2": {
68
68
  try {
69
69
  const { versionLock, skipVersion } = req.settings;
70
- if (versionLock === 'patch')
70
+ if (versionLock === "patch")
71
71
  return { suggestions: [] };
72
72
  const registry = this.registryProvider.getRegistry(cSpec.registryUrl);
73
73
  let channel = this.preferredUpdateChannel;
@@ -99,11 +99,11 @@ class BlockUpdateWatcher extends PollComputablePool {
99
99
  case undefined:
100
100
  vMainSuggestion = vSuggestions[0].update;
101
101
  break;
102
- case 'major':
103
- vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;
102
+ case "major":
103
+ vMainSuggestion = vSuggestions.find((v) => v.type !== "major")?.update;
104
104
  break;
105
- case 'minor':
106
- vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;
105
+ case "minor":
106
+ vMainSuggestion = vSuggestions.find((v) => v.type === "patch")?.update;
107
107
  break;
108
108
  }
109
109
  const suggestions = vSuggestions.map(({ type, update }) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.js","sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from '@milaboratories/computable';\nimport { PollComputablePool } from '@milaboratories/computable';\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions } from '@milaboratories/pl-model-middle-layer';\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from '@milaboratories/pl-model-middle-layer';\nimport type { Dispatcher } from 'undici';\nimport { getDevV1PacketMtime, getDevV2PacketMtime } from './registry';\nimport { tryLoadPackDescription } from '@platforma-sdk/block-tools';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport type { V2RegistryProvider } from './registry-v2-provider';\nimport * as semver from 'semver';\nimport canonicalize from 'canonicalize';\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = '__no_updates__';\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case 'dev-v1':\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case 'dev-v2':\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case 'from-registry-v2':\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case 'dev-v1': {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case 'dev-v2': {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case 'from-registry-v2': {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === 'patch') return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case 'major':\n vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;\n break;\n case 'minor':\n vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"names":["semver.lte"],"mappings":"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"}
1
+ {"version":3,"file":"watcher.js","sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from \"@milaboratories/computable\";\nimport { PollComputablePool } from \"@milaboratories/computable\";\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { Dispatcher } from \"undici\";\nimport { getDevV1PacketMtime, getDevV2PacketMtime } from \"./registry\";\nimport { tryLoadPackDescription } from \"@platforma-sdk/block-tools\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { V2RegistryProvider } from \"./registry-v2-provider\";\nimport * as semver from \"semver\";\nimport canonicalize from \"canonicalize\";\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = \"__no_updates__\";\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case \"dev-v1\":\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"dev-v2\":\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"from-registry-v2\":\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case \"dev-v1\": {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"dev-v2\": {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-registry-v2\": {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === \"patch\") return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case \"major\":\n vMainSuggestion = vSuggestions.find((v) => v.type !== \"major\")?.update;\n break;\n case \"minor\":\n vMainSuggestion = vSuggestions.find((v) => v.type === \"patch\")?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"names":["semver.lte"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  'use strict';
2
2
 
3
3
  const CentralBlockRegistry = {
4
- type: 'remote-v2',
5
- url: 'https://blocks.pl-open.science/',
4
+ type: "remote-v2",
5
+ url: "https://blocks.pl-open.science/",
6
6
  };
7
7
  const V1CentralRegistry = {
8
- type: 'remote-v1',
9
- url: 'https://block.registry.platforma.bio/releases',
8
+ type: "remote-v1",
9
+ url: "https://block.registry.platforma.bio/releases",
10
10
  };
11
11
  const V1CentralDevSnapshotRegistry = {
12
- type: 'remote-v1',
13
- url: 'https://block.registry.platforma.bio/dev',
12
+ type: "remote-v1",
13
+ url: "https://block.registry.platforma.bio/dev",
14
14
  };
15
15
 
16
16
  exports.CentralBlockRegistry = CentralBlockRegistry;
@@ -1 +1 @@
1
- {"version":3,"file":"well_known_registries.cjs","sources":["../../src/block_registry/well_known_registries.ts"],"sourcesContent":["import type { RegistrySpec } from '@milaboratories/pl-model-middle-layer';\n\nexport const CentralBlockRegistry: RegistrySpec = {\n type: 'remote-v2',\n url: 'https://blocks.pl-open.science/',\n};\n\nexport const V1CentralRegistry: RegistrySpec = {\n type: 'remote-v1',\n url: 'https://block.registry.platforma.bio/releases',\n};\n\nexport const V1CentralDevSnapshotRegistry: RegistrySpec = {\n type: 'remote-v1',\n url: 'https://block.registry.platforma.bio/dev',\n};\n"],"names":[],"mappings":";;AAEO,MAAM,oBAAoB,GAAiB;AAChD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,iCAAiC;;AAGjC,MAAM,iBAAiB,GAAiB;AAC7C,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,+CAA+C;;AAG/C,MAAM,4BAA4B,GAAiB;AACxD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,0CAA0C;;;;;;;"}
1
+ {"version":3,"file":"well_known_registries.cjs","sources":["../../src/block_registry/well_known_registries.ts"],"sourcesContent":["import type { RegistrySpec } from \"@milaboratories/pl-model-middle-layer\";\n\nexport const CentralBlockRegistry: RegistrySpec = {\n type: \"remote-v2\",\n url: \"https://blocks.pl-open.science/\",\n};\n\nexport const V1CentralRegistry: RegistrySpec = {\n type: \"remote-v1\",\n url: \"https://block.registry.platforma.bio/releases\",\n};\n\nexport const V1CentralDevSnapshotRegistry: RegistrySpec = {\n type: \"remote-v1\",\n url: \"https://block.registry.platforma.bio/dev\",\n};\n"],"names":[],"mappings":";;AAEO,MAAM,oBAAoB,GAAiB;AAChD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,iCAAiC;;AAGjC,MAAM,iBAAiB,GAAiB;AAC7C,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,+CAA+C;;AAG/C,MAAM,4BAA4B,GAAiB;AACxD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,0CAA0C;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import type { RegistrySpec } from '@milaboratories/pl-model-middle-layer';
1
+ import type { RegistrySpec } from "@milaboratories/pl-model-middle-layer";
2
2
  export declare const CentralBlockRegistry: RegistrySpec;
3
3
  export declare const V1CentralRegistry: RegistrySpec;
4
4
  export declare const V1CentralDevSnapshotRegistry: RegistrySpec;
@@ -1,14 +1,14 @@
1
1
  const CentralBlockRegistry = {
2
- type: 'remote-v2',
3
- url: 'https://blocks.pl-open.science/',
2
+ type: "remote-v2",
3
+ url: "https://blocks.pl-open.science/",
4
4
  };
5
5
  const V1CentralRegistry = {
6
- type: 'remote-v1',
7
- url: 'https://block.registry.platforma.bio/releases',
6
+ type: "remote-v1",
7
+ url: "https://block.registry.platforma.bio/releases",
8
8
  };
9
9
  const V1CentralDevSnapshotRegistry = {
10
- type: 'remote-v1',
11
- url: 'https://block.registry.platforma.bio/dev',
10
+ type: "remote-v1",
11
+ url: "https://block.registry.platforma.bio/dev",
12
12
  };
13
13
 
14
14
  export { CentralBlockRegistry, V1CentralDevSnapshotRegistry, V1CentralRegistry };
@@ -1 +1 @@
1
- {"version":3,"file":"well_known_registries.js","sources":["../../src/block_registry/well_known_registries.ts"],"sourcesContent":["import type { RegistrySpec } from '@milaboratories/pl-model-middle-layer';\n\nexport const CentralBlockRegistry: RegistrySpec = {\n type: 'remote-v2',\n url: 'https://blocks.pl-open.science/',\n};\n\nexport const V1CentralRegistry: RegistrySpec = {\n type: 'remote-v1',\n url: 'https://block.registry.platforma.bio/releases',\n};\n\nexport const V1CentralDevSnapshotRegistry: RegistrySpec = {\n type: 'remote-v1',\n url: 'https://block.registry.platforma.bio/dev',\n};\n"],"names":[],"mappings":"AAEO,MAAM,oBAAoB,GAAiB;AAChD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,iCAAiC;;AAGjC,MAAM,iBAAiB,GAAiB;AAC7C,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,+CAA+C;;AAG/C,MAAM,4BAA4B,GAAiB;AACxD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,0CAA0C;;;;;"}
1
+ {"version":3,"file":"well_known_registries.js","sources":["../../src/block_registry/well_known_registries.ts"],"sourcesContent":["import type { RegistrySpec } from \"@milaboratories/pl-model-middle-layer\";\n\nexport const CentralBlockRegistry: RegistrySpec = {\n type: \"remote-v2\",\n url: \"https://blocks.pl-open.science/\",\n};\n\nexport const V1CentralRegistry: RegistrySpec = {\n type: \"remote-v1\",\n url: \"https://block.registry.platforma.bio/releases\",\n};\n\nexport const V1CentralDevSnapshotRegistry: RegistrySpec = {\n type: \"remote-v1\",\n url: \"https://block.registry.platforma.bio/dev\",\n};\n"],"names":[],"mappings":"AAEO,MAAM,oBAAoB,GAAiB;AAChD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,iCAAiC;;AAGjC,MAAM,iBAAiB,GAAiB;AAC7C,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,+CAA+C;;AAG/C,MAAM,4BAA4B,GAAiB;AACxD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,0CAA0C;;;;;"}
@@ -10,7 +10,7 @@ var block_ctx_unsafe = require('../middle_layer/block_ctx_unsafe.cjs');
10
10
  /** Special address of operation, see below. */
11
11
  const ReturnOpKey = Symbol();
12
12
  /** The same, but for the argument part of destination, see below. */
13
- const ReturnArgKey = 'return';
13
+ const ReturnArgKey = "return";
14
14
  /** Special destination, telling the executor that corresponding result should
15
15
  * be exposed as a final result, and execution terminate at this point. */
16
16
  const ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey };
@@ -38,7 +38,7 @@ function execute(env, stack, operations, allowComputables) {
38
38
  }
39
39
  const pending = tsHelpers.notEmpty(stack.pendingSubroutines.get(destination.op));
40
40
  if (destination.arg in pending.args)
41
- throw new Error('argument already set');
41
+ throw new Error("argument already set");
42
42
  pending.args[destination.arg] = result;
43
43
  pending.argCounter--;
44
44
  if (pending.argCounter === 0) {
@@ -58,11 +58,11 @@ function execute(env, stack, operations, allowComputables) {
58
58
  const op = operationQueue.shift();
59
59
  const action = op.operation(env);
60
60
  switch (action.type) {
61
- case 'ReturnResult':
61
+ case "ReturnResult":
62
62
  if (!deliverResult(op.destination, action.result))
63
63
  break mainLoop; // this terminates execution
64
64
  break; // switch
65
- case 'ScheduleSubroutine':
65
+ case "ScheduleSubroutine":
66
66
  {
67
67
  const newOpKey = Symbol();
68
68
  const argRequests = Object.entries(action.args);
@@ -88,9 +88,9 @@ function execute(env, stack, operations, allowComputables) {
88
88
  }
89
89
  }
90
90
  break;
91
- case 'ScheduleComputable':
91
+ case "ScheduleComputable":
92
92
  if (!allowComputables)
93
- throw new Error('asynchronous operations are forbidden in this context');
93
+ throw new Error("asynchronous operations are forbidden in this context");
94
94
  computables.push({
95
95
  destination: op.destination,
96
96
  computable: action.computable,
@@ -110,8 +110,8 @@ function computableFromCfg(drivers, bCtx, cfg, ops = {}) {
110
110
  return computableFromCfgUnsafe(drivers, block_ctx_unsafe.toCfgContext(bCtx), cfg, ops);
111
111
  }
112
112
  function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
113
- const key = `${ctx.blockId}#`
114
- + canonicalize({
113
+ const key = `${ctx.blockId}#` +
114
+ canonicalize({
115
115
  ctx: Object.fromEntries(Object.entries(ctx).filter(([k]) => block_ctx_unsafe.NonKeyCtxFields.indexOf(k) === -1)),
116
116
  cfg: cfg,
117
117
  });
@@ -133,7 +133,7 @@ function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
133
133
  const postEnv = {
134
134
  drivers,
135
135
  get cCtx() {
136
- throw new Error('asynchronous operations are forbidden in this context');
136
+ throw new Error("asynchronous operations are forbidden in this context");
137
137
  },
138
138
  };
139
139
  // Post process can be called several times, that's why it must be a side-effect-free function.
@@ -146,8 +146,8 @@ function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
146
146
  pendingSubroutines: copyOfPendingSubrotines,
147
147
  };
148
148
  execute(postEnv, copiedStack, resolvedOps, false);
149
- if (!('result' in copiedStack))
150
- throw new Error('illegal cfg rendering stack state, no result');
149
+ if (!("result" in copiedStack))
150
+ throw new Error("illegal cfg rendering stack state, no result");
151
151
  return copiedStack.result;
152
152
  },
153
153
  };
@@ -1 +1 @@
1
- {"version":3,"file":"executor.cjs","sources":["../../src/cfg_render/executor.ts"],"sourcesContent":["import type {\n ArgumentKey,\n ArgumentValues,\n ExecutionEnvironment,\n Operation,\n Subroutine,\n} from './operation';\nimport Denque from 'denque';\nimport { assertNever, notEmpty } from '@milaboratories/ts-helpers';\nimport type { ComputableCtx, ComputableRenderingOps } from '@milaboratories/computable';\nimport { Computable } from '@milaboratories/computable';\nimport type { Cfg } from '@platforma-sdk/model';\nimport { renderCfg, resOp } from './renderer';\nimport canonicalize from 'canonicalize';\nimport type { BlockContextAny } from '../middle_layer/block_ctx';\nimport type { MiddleLayerDriverKit } from '../middle_layer/driver_kit';\nimport { NonKeyCtxFields, toCfgContext } from '../middle_layer/block_ctx_unsafe';\n\n/** Addresses pending subroutines inside the stack */\ntype SubroutineKey = symbol;\n\n/** Represents destination of the result of an operation. I.e. when sequence of\n * subroutine invocations, and computables terminates with result, this object\n * determines to which argument of which pending subroutine it should be delivered.\n * See special value for delivery of the final \"return\" result. */\ntype Destination = {\n op: SubroutineKey;\n arg: ArgumentKey;\n};\n\n/** Special address of operation, see below. */\nconst ReturnOpKey: unique symbol = Symbol();\n/** The same, but for the argument part of destination, see below. */\nconst ReturnArgKey = 'return';\n\n/** Special destination, telling the executor that corresponding result should\n * be exposed as a final result, and execution terminate at this point. */\nconst ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey } as Destination;\n\nfunction isReturnDestination(destination: Destination): boolean {\n return destination.op == ReturnOpKey && destination.arg == ReturnArgKey;\n}\n\n/** Queued operation, used inside the executor */\ntype QueuedOperation = {\n operation: Operation;\n destination: Destination;\n};\n\n/** Queued computation, returned by the first round of config execution. Such\n * computables should be returned in the intermediate representation of the\n * enclosing computable, and after they are resolved and passed to the\n * postprocessing routine, should be injected into the execution stack to\n * finalize the computation. */\ntype ScheduledComputable = {\n destination: Destination;\n computable: Computable<unknown>;\n};\n\n/** This is what ScheduledComputable transforms from intermediate\n * representation to post-processing. */\ntype MaterializedComputable = {\n destination: Destination;\n computable: unknown;\n};\n\n/** Main entry inside the execution stack. */\ntype PendingSubroutine = {\n subroutine: Subroutine;\n destination: Destination;\n argCounter: number;\n args: ArgumentValues;\n};\n\n/** Execution stack. The closest concept that this object along with enclosed\n * {@link PendingSubroutine}s represent is a Continuation.\n * https://en.wikipedia.org/wiki/Continuation */\ntype ExecutionStack = {\n result?: unknown;\n pendingSubroutines: Map<SubroutineKey, PendingSubroutine>;\n};\n\n/** Returns initial stack value. */\nfunction zeroStack(): ExecutionStack {\n return { pendingSubroutines: new Map<SubroutineKey, PendingSubroutine>() };\n}\n\n/** Implements main executor mechanism.\n * @param env to be passed to while executing operations\n * @param stack execution stack to continue execution from\n * @param operations operations to initiate the execution process\n * @param allowComputables if false, scheduling of async computables will result in error\n * */\nfunction execute(\n env: ExecutionEnvironment,\n stack: ExecutionStack,\n operations: QueuedOperation[],\n allowComputables: boolean,\n): ScheduledComputable[] {\n const operationQueue = new Denque<QueuedOperation>(operations);\n\n /** Returns false if final result is set as result of this operation,\n * true if we should continue processing. */\n const deliverResult = (destination: Destination, result: unknown): boolean => {\n if (isReturnDestination(destination)) {\n stack.result = result;\n return false;\n }\n\n const pending = notEmpty(stack.pendingSubroutines.get(destination.op));\n if (destination.arg in pending.args) throw new Error('argument already set');\n pending.args[destination.arg] = result;\n pending.argCounter--;\n if (pending.argCounter === 0) {\n stack.pendingSubroutines.delete(destination.op);\n operationQueue.push({\n destination: pending.destination,\n operation: pending.subroutine(pending.args),\n });\n }\n\n return true;\n };\n\n // computables, scheduled during computation, are aggregated in this array,\n // and returned from the function in the end\n const computables: ScheduledComputable[] = [];\n\n // each loop = execution of a single queued operation\n mainLoop: while (operationQueue.length > 0) {\n const op = operationQueue.shift()!;\n const action = op.operation(env);\n switch (action.type) {\n case 'ReturnResult':\n if (!deliverResult(op.destination, action.result)) break mainLoop; // this terminates execution\n break; // switch\n\n case 'ScheduleSubroutine':\n {\n const newOpKey = Symbol();\n\n const argRequests = Object.entries(action.args);\n const initialArgCounter = argRequests.length;\n\n if (initialArgCounter === 0)\n // if no pending arguments\n operationQueue.push({\n destination: op.destination,\n operation: action.subroutine({}),\n });\n else {\n for (const [arg, operation] of argRequests)\n operationQueue.push({\n destination: { op: newOpKey, arg },\n operation,\n });\n\n stack.pendingSubroutines.set(newOpKey, {\n argCounter: initialArgCounter,\n args: {},\n subroutine: action.subroutine,\n destination: op.destination,\n });\n }\n }\n break;\n\n case 'ScheduleComputable':\n if (!allowComputables)\n throw new Error('asynchronous operations are forbidden in this context');\n computables.push({\n destination: op.destination,\n computable: action.computable,\n });\n break;\n\n default:\n assertNever(action);\n }\n }\n\n return computables;\n}\n\n//\n// Computable\n//\n\n/** Main method to render configurations */\nexport function computableFromCfg(\n drivers: MiddleLayerDriverKit,\n bCtx: BlockContextAny,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n return computableFromCfgUnsafe(drivers, toCfgContext(bCtx), cfg, ops);\n}\n\nexport function computableFromCfgUnsafe(\n drivers: MiddleLayerDriverKit,\n ctx: Record<string, unknown>,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n const key\n = `${ctx.blockId}#`\n + canonicalize({\n ctx: Object.fromEntries(\n Object.entries(ctx).filter(([k]) => NonKeyCtxFields.indexOf(k) === -1),\n ),\n cfg: cfg,\n })!;\n return Computable.makeRaw(\n (c) => {\n const env: ExecutionEnvironment = { drivers, cCtx: c };\n const stack = zeroStack();\n const computables = execute(\n env,\n stack,\n [\n {\n destination: ReturnDestination,\n operation: renderCfg(ctx, cfg),\n },\n ],\n true,\n );\n return {\n ir: computables,\n postprocessValue(value: MaterializedComputable[]): unknown {\n const resolvedOps: QueuedOperation[] = [];\n for (const mc of value)\n resolvedOps.push({ destination: mc.destination, operation: resOp(mc.computable) });\n const postEnv: ExecutionEnvironment = {\n drivers,\n get cCtx(): ComputableCtx {\n throw new Error('asynchronous operations are forbidden in this context');\n },\n };\n\n // Post process can be called several times, that's why it must be a side-effect-free function.\n // But `execute` modifies a stack, so we have to defensively copy it here.\n const copyOfPendingSubrotines = new Map<SubroutineKey, PendingSubroutine>();\n for (const [key, value] of stack.pendingSubroutines)\n copyOfPendingSubrotines.set(key, { ...value, args: { ...value.args } });\n const copiedStack: ExecutionStack = {\n result: stack.result,\n pendingSubroutines: copyOfPendingSubrotines,\n };\n execute(postEnv, copiedStack, resolvedOps, false);\n if (!('result' in copiedStack))\n throw new Error('illegal cfg rendering stack state, no result');\n return copiedStack.result;\n },\n };\n },\n { ...ops, key },\n );\n}\n"],"names":["notEmpty","assertNever","toCfgContext","NonKeyCtxFields","Computable","renderCfg","resOp"],"mappings":"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"}
1
+ {"version":3,"file":"executor.cjs","sources":["../../src/cfg_render/executor.ts"],"sourcesContent":["import type {\n ArgumentKey,\n ArgumentValues,\n ExecutionEnvironment,\n Operation,\n Subroutine,\n} from \"./operation\";\nimport Denque from \"denque\";\nimport { assertNever, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { ComputableCtx, ComputableRenderingOps } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { Cfg } from \"@platforma-sdk/model\";\nimport { renderCfg, resOp } from \"./renderer\";\nimport canonicalize from \"canonicalize\";\nimport type { BlockContextAny } from \"../middle_layer/block_ctx\";\nimport type { MiddleLayerDriverKit } from \"../middle_layer/driver_kit\";\nimport { NonKeyCtxFields, toCfgContext } from \"../middle_layer/block_ctx_unsafe\";\n\n/** Addresses pending subroutines inside the stack */\ntype SubroutineKey = symbol;\n\n/** Represents destination of the result of an operation. I.e. when sequence of\n * subroutine invocations, and computables terminates with result, this object\n * determines to which argument of which pending subroutine it should be delivered.\n * See special value for delivery of the final \"return\" result. */\ntype Destination = {\n op: SubroutineKey;\n arg: ArgumentKey;\n};\n\n/** Special address of operation, see below. */\nconst ReturnOpKey: unique symbol = Symbol();\n/** The same, but for the argument part of destination, see below. */\nconst ReturnArgKey = \"return\";\n\n/** Special destination, telling the executor that corresponding result should\n * be exposed as a final result, and execution terminate at this point. */\nconst ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey } as Destination;\n\nfunction isReturnDestination(destination: Destination): boolean {\n return destination.op == ReturnOpKey && destination.arg == ReturnArgKey;\n}\n\n/** Queued operation, used inside the executor */\ntype QueuedOperation = {\n operation: Operation;\n destination: Destination;\n};\n\n/** Queued computation, returned by the first round of config execution. Such\n * computables should be returned in the intermediate representation of the\n * enclosing computable, and after they are resolved and passed to the\n * postprocessing routine, should be injected into the execution stack to\n * finalize the computation. */\ntype ScheduledComputable = {\n destination: Destination;\n computable: Computable<unknown>;\n};\n\n/** This is what ScheduledComputable transforms from intermediate\n * representation to post-processing. */\ntype MaterializedComputable = {\n destination: Destination;\n computable: unknown;\n};\n\n/** Main entry inside the execution stack. */\ntype PendingSubroutine = {\n subroutine: Subroutine;\n destination: Destination;\n argCounter: number;\n args: ArgumentValues;\n};\n\n/** Execution stack. The closest concept that this object along with enclosed\n * {@link PendingSubroutine}s represent is a Continuation.\n * https://en.wikipedia.org/wiki/Continuation */\ntype ExecutionStack = {\n result?: unknown;\n pendingSubroutines: Map<SubroutineKey, PendingSubroutine>;\n};\n\n/** Returns initial stack value. */\nfunction zeroStack(): ExecutionStack {\n return { pendingSubroutines: new Map<SubroutineKey, PendingSubroutine>() };\n}\n\n/** Implements main executor mechanism.\n * @param env to be passed to while executing operations\n * @param stack execution stack to continue execution from\n * @param operations operations to initiate the execution process\n * @param allowComputables if false, scheduling of async computables will result in error\n * */\nfunction execute(\n env: ExecutionEnvironment,\n stack: ExecutionStack,\n operations: QueuedOperation[],\n allowComputables: boolean,\n): ScheduledComputable[] {\n const operationQueue = new Denque<QueuedOperation>(operations);\n\n /** Returns false if final result is set as result of this operation,\n * true if we should continue processing. */\n const deliverResult = (destination: Destination, result: unknown): boolean => {\n if (isReturnDestination(destination)) {\n stack.result = result;\n return false;\n }\n\n const pending = notEmpty(stack.pendingSubroutines.get(destination.op));\n if (destination.arg in pending.args) throw new Error(\"argument already set\");\n pending.args[destination.arg] = result;\n pending.argCounter--;\n if (pending.argCounter === 0) {\n stack.pendingSubroutines.delete(destination.op);\n operationQueue.push({\n destination: pending.destination,\n operation: pending.subroutine(pending.args),\n });\n }\n\n return true;\n };\n\n // computables, scheduled during computation, are aggregated in this array,\n // and returned from the function in the end\n const computables: ScheduledComputable[] = [];\n\n // each loop = execution of a single queued operation\n mainLoop: while (operationQueue.length > 0) {\n const op = operationQueue.shift()!;\n const action = op.operation(env);\n switch (action.type) {\n case \"ReturnResult\":\n if (!deliverResult(op.destination, action.result)) break mainLoop; // this terminates execution\n break; // switch\n\n case \"ScheduleSubroutine\":\n {\n const newOpKey = Symbol();\n\n const argRequests = Object.entries(action.args);\n const initialArgCounter = argRequests.length;\n\n if (initialArgCounter === 0)\n // if no pending arguments\n operationQueue.push({\n destination: op.destination,\n operation: action.subroutine({}),\n });\n else {\n for (const [arg, operation] of argRequests)\n operationQueue.push({\n destination: { op: newOpKey, arg },\n operation,\n });\n\n stack.pendingSubroutines.set(newOpKey, {\n argCounter: initialArgCounter,\n args: {},\n subroutine: action.subroutine,\n destination: op.destination,\n });\n }\n }\n break;\n\n case \"ScheduleComputable\":\n if (!allowComputables)\n throw new Error(\"asynchronous operations are forbidden in this context\");\n computables.push({\n destination: op.destination,\n computable: action.computable,\n });\n break;\n\n default:\n assertNever(action);\n }\n }\n\n return computables;\n}\n\n//\n// Computable\n//\n\n/** Main method to render configurations */\nexport function computableFromCfg(\n drivers: MiddleLayerDriverKit,\n bCtx: BlockContextAny,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n return computableFromCfgUnsafe(drivers, toCfgContext(bCtx), cfg, ops);\n}\n\nexport function computableFromCfgUnsafe(\n drivers: MiddleLayerDriverKit,\n ctx: Record<string, unknown>,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n const key =\n `${ctx.blockId}#` +\n canonicalize({\n ctx: Object.fromEntries(\n Object.entries(ctx).filter(([k]) => NonKeyCtxFields.indexOf(k) === -1),\n ),\n cfg: cfg,\n })!;\n return Computable.makeRaw(\n (c) => {\n const env: ExecutionEnvironment = { drivers, cCtx: c };\n const stack = zeroStack();\n const computables = execute(\n env,\n stack,\n [\n {\n destination: ReturnDestination,\n operation: renderCfg(ctx, cfg),\n },\n ],\n true,\n );\n return {\n ir: computables,\n postprocessValue(value: MaterializedComputable[]): unknown {\n const resolvedOps: QueuedOperation[] = [];\n for (const mc of value)\n resolvedOps.push({ destination: mc.destination, operation: resOp(mc.computable) });\n const postEnv: ExecutionEnvironment = {\n drivers,\n get cCtx(): ComputableCtx {\n throw new Error(\"asynchronous operations are forbidden in this context\");\n },\n };\n\n // Post process can be called several times, that's why it must be a side-effect-free function.\n // But `execute` modifies a stack, so we have to defensively copy it here.\n const copyOfPendingSubrotines = new Map<SubroutineKey, PendingSubroutine>();\n for (const [key, value] of stack.pendingSubroutines)\n copyOfPendingSubrotines.set(key, { ...value, args: { ...value.args } });\n const copiedStack: ExecutionStack = {\n result: stack.result,\n pendingSubroutines: copyOfPendingSubrotines,\n };\n execute(postEnv, copiedStack, resolvedOps, false);\n if (!(\"result\" in copiedStack))\n throw new Error(\"illegal cfg rendering stack state, no result\");\n return copiedStack.result;\n },\n };\n },\n { ...ops, key },\n );\n}\n"],"names":["notEmpty","assertNever","toCfgContext","NonKeyCtxFields","Computable","renderCfg","resOp"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import type { ComputableRenderingOps } from '@milaboratories/computable';
2
- import { Computable } from '@milaboratories/computable';
3
- import type { Cfg } from '@platforma-sdk/model';
4
- import type { BlockContextAny } from '../middle_layer/block_ctx';
5
- import type { MiddleLayerDriverKit } from '../middle_layer/driver_kit';
1
+ import type { ComputableRenderingOps } from "@milaboratories/computable";
2
+ import { Computable } from "@milaboratories/computable";
3
+ import type { Cfg } from "@platforma-sdk/model";
4
+ import type { BlockContextAny } from "../middle_layer/block_ctx";
5
+ import type { MiddleLayerDriverKit } from "../middle_layer/driver_kit";
6
6
  /** Main method to render configurations */
7
7
  export declare function computableFromCfg(drivers: MiddleLayerDriverKit, bCtx: BlockContextAny, cfg: Cfg, ops?: Partial<ComputableRenderingOps>): Computable<unknown>;
8
8
  export declare function computableFromCfgUnsafe(drivers: MiddleLayerDriverKit, ctx: Record<string, unknown>, cfg: Cfg, ops?: Partial<ComputableRenderingOps>): Computable<unknown>;
@@ -8,7 +8,7 @@ import { toCfgContext, NonKeyCtxFields } from '../middle_layer/block_ctx_unsafe.
8
8
  /** Special address of operation, see below. */
9
9
  const ReturnOpKey = Symbol();
10
10
  /** The same, but for the argument part of destination, see below. */
11
- const ReturnArgKey = 'return';
11
+ const ReturnArgKey = "return";
12
12
  /** Special destination, telling the executor that corresponding result should
13
13
  * be exposed as a final result, and execution terminate at this point. */
14
14
  const ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey };
@@ -36,7 +36,7 @@ function execute(env, stack, operations, allowComputables) {
36
36
  }
37
37
  const pending = notEmpty(stack.pendingSubroutines.get(destination.op));
38
38
  if (destination.arg in pending.args)
39
- throw new Error('argument already set');
39
+ throw new Error("argument already set");
40
40
  pending.args[destination.arg] = result;
41
41
  pending.argCounter--;
42
42
  if (pending.argCounter === 0) {
@@ -56,11 +56,11 @@ function execute(env, stack, operations, allowComputables) {
56
56
  const op = operationQueue.shift();
57
57
  const action = op.operation(env);
58
58
  switch (action.type) {
59
- case 'ReturnResult':
59
+ case "ReturnResult":
60
60
  if (!deliverResult(op.destination, action.result))
61
61
  break mainLoop; // this terminates execution
62
62
  break; // switch
63
- case 'ScheduleSubroutine':
63
+ case "ScheduleSubroutine":
64
64
  {
65
65
  const newOpKey = Symbol();
66
66
  const argRequests = Object.entries(action.args);
@@ -86,9 +86,9 @@ function execute(env, stack, operations, allowComputables) {
86
86
  }
87
87
  }
88
88
  break;
89
- case 'ScheduleComputable':
89
+ case "ScheduleComputable":
90
90
  if (!allowComputables)
91
- throw new Error('asynchronous operations are forbidden in this context');
91
+ throw new Error("asynchronous operations are forbidden in this context");
92
92
  computables.push({
93
93
  destination: op.destination,
94
94
  computable: action.computable,
@@ -108,8 +108,8 @@ function computableFromCfg(drivers, bCtx, cfg, ops = {}) {
108
108
  return computableFromCfgUnsafe(drivers, toCfgContext(bCtx), cfg, ops);
109
109
  }
110
110
  function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
111
- const key = `${ctx.blockId}#`
112
- + canonicalize({
111
+ const key = `${ctx.blockId}#` +
112
+ canonicalize({
113
113
  ctx: Object.fromEntries(Object.entries(ctx).filter(([k]) => NonKeyCtxFields.indexOf(k) === -1)),
114
114
  cfg: cfg,
115
115
  });
@@ -131,7 +131,7 @@ function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
131
131
  const postEnv = {
132
132
  drivers,
133
133
  get cCtx() {
134
- throw new Error('asynchronous operations are forbidden in this context');
134
+ throw new Error("asynchronous operations are forbidden in this context");
135
135
  },
136
136
  };
137
137
  // Post process can be called several times, that's why it must be a side-effect-free function.
@@ -144,8 +144,8 @@ function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
144
144
  pendingSubroutines: copyOfPendingSubrotines,
145
145
  };
146
146
  execute(postEnv, copiedStack, resolvedOps, false);
147
- if (!('result' in copiedStack))
148
- throw new Error('illegal cfg rendering stack state, no result');
147
+ if (!("result" in copiedStack))
148
+ throw new Error("illegal cfg rendering stack state, no result");
149
149
  return copiedStack.result;
150
150
  },
151
151
  };