@milaboratories/pl-middle-layer 1.42.2 → 1.42.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/dist/block_registry/index.d.ts +0 -1
  2. package/dist/block_registry/registry-v2-provider.cjs +22 -0
  3. package/dist/block_registry/registry-v2-provider.cjs.map +1 -0
  4. package/dist/block_registry/registry-v2-provider.d.ts +0 -1
  5. package/dist/block_registry/registry-v2-provider.js +20 -0
  6. package/dist/block_registry/registry-v2-provider.js.map +1 -0
  7. package/dist/block_registry/registry.cjs +231 -0
  8. package/dist/block_registry/registry.cjs.map +1 -0
  9. package/dist/block_registry/registry.d.ts +0 -1
  10. package/dist/block_registry/registry.js +227 -0
  11. package/dist/block_registry/registry.js.map +1 -0
  12. package/dist/block_registry/registry.test.d.ts +0 -1
  13. package/dist/block_registry/watcher.cjs +174 -0
  14. package/dist/block_registry/watcher.cjs.map +1 -0
  15. package/dist/block_registry/watcher.d.ts +0 -1
  16. package/dist/block_registry/watcher.js +171 -0
  17. package/dist/block_registry/watcher.js.map +1 -0
  18. package/dist/block_registry/well_known_registries.cjs +19 -0
  19. package/dist/block_registry/well_known_registries.cjs.map +1 -0
  20. package/dist/block_registry/well_known_registries.d.ts +0 -1
  21. package/dist/block_registry/well_known_registries.js +15 -0
  22. package/dist/block_registry/well_known_registries.js.map +1 -0
  23. package/dist/cfg_render/executor.cjs +159 -0
  24. package/dist/cfg_render/executor.cjs.map +1 -0
  25. package/dist/cfg_render/executor.d.ts +0 -1
  26. package/dist/cfg_render/executor.js +156 -0
  27. package/dist/cfg_render/executor.js.map +1 -0
  28. package/dist/cfg_render/executor.test.d.ts +0 -1
  29. package/dist/cfg_render/operation.d.ts +0 -1
  30. package/dist/cfg_render/renderer.cjs +528 -0
  31. package/dist/cfg_render/renderer.cjs.map +1 -0
  32. package/dist/cfg_render/renderer.d.ts +0 -1
  33. package/dist/cfg_render/renderer.js +525 -0
  34. package/dist/cfg_render/renderer.js.map +1 -0
  35. package/dist/cfg_render/traverse.cjs +65 -0
  36. package/dist/cfg_render/traverse.cjs.map +1 -0
  37. package/dist/cfg_render/traverse.d.ts +0 -1
  38. package/dist/cfg_render/traverse.js +63 -0
  39. package/dist/cfg_render/traverse.js.map +1 -0
  40. package/dist/cfg_render/util.cjs +32 -0
  41. package/dist/cfg_render/util.cjs.map +1 -0
  42. package/dist/cfg_render/util.d.ts +0 -1
  43. package/dist/cfg_render/util.js +28 -0
  44. package/dist/cfg_render/util.js.map +1 -0
  45. package/dist/debug/index.cjs +21 -0
  46. package/dist/debug/index.cjs.map +1 -0
  47. package/dist/debug/index.d.ts +0 -1
  48. package/dist/debug/index.js +19 -0
  49. package/dist/debug/index.js.map +1 -0
  50. package/dist/dev_env/index.cjs +59 -0
  51. package/dist/dev_env/index.cjs.map +1 -0
  52. package/dist/dev_env/index.d.ts +0 -1
  53. package/dist/dev_env/index.js +48 -0
  54. package/dist/dev_env/index.js.map +1 -0
  55. package/dist/dev_env/util.cjs +37 -0
  56. package/dist/dev_env/util.cjs.map +1 -0
  57. package/dist/dev_env/util.d.ts +0 -1
  58. package/dist/dev_env/util.js +16 -0
  59. package/dist/dev_env/util.js.map +1 -0
  60. package/dist/index.cjs +74 -0
  61. package/dist/index.cjs.map +1 -0
  62. package/dist/index.d.ts +0 -1
  63. package/dist/index.js +15 -75
  64. package/dist/index.js.map +1 -1
  65. package/dist/js_render/computable_context.cjs +525 -0
  66. package/dist/js_render/computable_context.cjs.map +1 -0
  67. package/dist/js_render/computable_context.d.ts +0 -1
  68. package/dist/js_render/computable_context.js +523 -0
  69. package/dist/js_render/computable_context.js.map +1 -0
  70. package/dist/js_render/context.cjs +229 -0
  71. package/dist/js_render/context.cjs.map +1 -0
  72. package/dist/js_render/context.d.ts +0 -1
  73. package/dist/js_render/context.js +226 -0
  74. package/dist/js_render/context.js.map +1 -0
  75. package/dist/js_render/index.cjs +163 -0
  76. package/dist/js_render/index.cjs.map +1 -0
  77. package/dist/js_render/index.d.ts +0 -1
  78. package/dist/js_render/index.js +160 -0
  79. package/dist/js_render/index.js.map +1 -0
  80. package/dist/middle_layer/active_cfg.cjs +37 -0
  81. package/dist/middle_layer/active_cfg.cjs.map +1 -0
  82. package/dist/middle_layer/active_cfg.d.ts +0 -1
  83. package/dist/middle_layer/active_cfg.js +35 -0
  84. package/dist/middle_layer/active_cfg.js.map +1 -0
  85. package/dist/middle_layer/block.cjs +51 -0
  86. package/dist/middle_layer/block.cjs.map +1 -0
  87. package/dist/middle_layer/block.d.ts +0 -1
  88. package/dist/middle_layer/block.js +48 -0
  89. package/dist/middle_layer/block.js.map +1 -0
  90. package/dist/middle_layer/block_ctx.cjs +87 -0
  91. package/dist/middle_layer/block_ctx.cjs.map +1 -0
  92. package/dist/middle_layer/block_ctx.d.ts +0 -1
  93. package/dist/middle_layer/block_ctx.js +84 -0
  94. package/dist/middle_layer/block_ctx.js.map +1 -0
  95. package/dist/middle_layer/block_ctx_unsafe.cjs +19 -0
  96. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -0
  97. package/dist/middle_layer/block_ctx_unsafe.d.ts +0 -1
  98. package/dist/middle_layer/block_ctx_unsafe.js +16 -0
  99. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -0
  100. package/dist/middle_layer/driver_kit.cjs +42 -0
  101. package/dist/middle_layer/driver_kit.cjs.map +1 -0
  102. package/dist/middle_layer/driver_kit.d.ts +0 -1
  103. package/dist/middle_layer/driver_kit.js +40 -0
  104. package/dist/middle_layer/driver_kit.js.map +1 -0
  105. package/dist/middle_layer/frontend_path.cjs +64 -0
  106. package/dist/middle_layer/frontend_path.cjs.map +1 -0
  107. package/dist/middle_layer/frontend_path.d.ts +0 -1
  108. package/dist/middle_layer/frontend_path.js +62 -0
  109. package/dist/middle_layer/frontend_path.js.map +1 -0
  110. package/dist/middle_layer/index.d.ts +0 -1
  111. package/dist/middle_layer/middle_layer.cjs +226 -0
  112. package/dist/middle_layer/middle_layer.cjs.map +1 -0
  113. package/dist/middle_layer/middle_layer.d.ts +0 -1
  114. package/dist/middle_layer/middle_layer.js +224 -0
  115. package/dist/middle_layer/middle_layer.js.map +1 -0
  116. package/dist/middle_layer/navigation_states.cjs +41 -0
  117. package/dist/middle_layer/navigation_states.cjs.map +1 -0
  118. package/dist/middle_layer/navigation_states.d.ts +0 -1
  119. package/dist/middle_layer/navigation_states.js +39 -0
  120. package/dist/middle_layer/navigation_states.js.map +1 -0
  121. package/dist/middle_layer/ops.cjs +75 -0
  122. package/dist/middle_layer/ops.cjs.map +1 -0
  123. package/dist/middle_layer/ops.d.ts +0 -1
  124. package/dist/middle_layer/ops.js +70 -0
  125. package/dist/middle_layer/ops.js.map +1 -0
  126. package/dist/middle_layer/project.cjs +446 -0
  127. package/dist/middle_layer/project.cjs.map +1 -0
  128. package/dist/middle_layer/project.d.ts +0 -1
  129. package/dist/middle_layer/project.js +444 -0
  130. package/dist/middle_layer/project.js.map +1 -0
  131. package/dist/middle_layer/project_list.cjs +53 -0
  132. package/dist/middle_layer/project_list.cjs.map +1 -0
  133. package/dist/middle_layer/project_list.d.ts +0 -1
  134. package/dist/middle_layer/project_list.js +48 -0
  135. package/dist/middle_layer/project_list.js.map +1 -0
  136. package/dist/middle_layer/project_overview.cjs +225 -0
  137. package/dist/middle_layer/project_overview.cjs.map +1 -0
  138. package/dist/middle_layer/project_overview.d.ts +0 -1
  139. package/dist/middle_layer/project_overview.js +204 -0
  140. package/dist/middle_layer/project_overview.js.map +1 -0
  141. package/dist/middle_layer/project_overview_light.cjs +20 -0
  142. package/dist/middle_layer/project_overview_light.cjs.map +1 -0
  143. package/dist/middle_layer/project_overview_light.d.ts +0 -1
  144. package/dist/middle_layer/project_overview_light.js +18 -0
  145. package/dist/middle_layer/project_overview_light.js.map +1 -0
  146. package/dist/middle_layer/render.cjs +26 -0
  147. package/dist/middle_layer/render.cjs.map +1 -0
  148. package/dist/middle_layer/render.d.ts +0 -1
  149. package/dist/middle_layer/render.js +23 -0
  150. package/dist/middle_layer/render.js.map +1 -0
  151. package/dist/middle_layer/render.test.d.ts +0 -1
  152. package/dist/middle_layer/types.d.ts +0 -1
  153. package/dist/middle_layer/util.cjs +22 -0
  154. package/dist/middle_layer/util.cjs.map +1 -0
  155. package/dist/middle_layer/util.d.ts +0 -1
  156. package/dist/middle_layer/util.js +20 -0
  157. package/dist/middle_layer/util.js.map +1 -0
  158. package/dist/model/args.cjs +62 -0
  159. package/dist/model/args.cjs.map +1 -0
  160. package/dist/model/args.d.ts +0 -1
  161. package/dist/model/args.js +58 -0
  162. package/dist/model/args.js.map +1 -0
  163. package/dist/model/block_pack.d.ts +0 -1
  164. package/dist/model/block_pack_spec.cjs +11 -0
  165. package/dist/model/block_pack_spec.cjs.map +1 -0
  166. package/dist/model/block_pack_spec.d.ts +0 -1
  167. package/dist/model/block_pack_spec.js +8 -0
  168. package/dist/model/block_pack_spec.js.map +1 -0
  169. package/dist/model/frontend.d.ts +0 -1
  170. package/dist/model/index.d.ts +0 -1
  171. package/dist/model/project_helper.cjs +36 -0
  172. package/dist/model/project_helper.cjs.map +1 -0
  173. package/dist/model/project_helper.d.ts +0 -1
  174. package/dist/model/project_helper.js +34 -0
  175. package/dist/model/project_helper.js.map +1 -0
  176. package/dist/model/project_model.cjs +74 -0
  177. package/dist/model/project_model.cjs.map +1 -0
  178. package/dist/model/project_model.d.ts +0 -1
  179. package/dist/model/project_model.js +54 -0
  180. package/dist/model/project_model.js.map +1 -0
  181. package/dist/model/project_model.test.d.ts +0 -1
  182. package/dist/model/project_model_util.cjs +176 -0
  183. package/dist/model/project_model_util.cjs.map +1 -0
  184. package/dist/model/project_model_util.d.ts +0 -1
  185. package/dist/model/project_model_util.js +170 -0
  186. package/dist/model/project_model_util.js.map +1 -0
  187. package/dist/model/project_model_util.test.d.ts +0 -1
  188. package/dist/model/project_model_v1.cjs +9 -0
  189. package/dist/model/project_model_v1.cjs.map +1 -0
  190. package/dist/model/project_model_v1.d.ts +0 -1
  191. package/dist/model/project_model_v1.js +6 -0
  192. package/dist/model/project_model_v1.js.map +1 -0
  193. package/dist/model/template_spec.d.ts +0 -1
  194. package/dist/mutator/block-pack/block_pack.cjs +233 -0
  195. package/dist/mutator/block-pack/block_pack.cjs.map +1 -0
  196. package/dist/mutator/block-pack/block_pack.d.ts +0 -1
  197. package/dist/mutator/block-pack/block_pack.js +227 -0
  198. package/dist/mutator/block-pack/block_pack.js.map +1 -0
  199. package/dist/mutator/block-pack/block_pack.test.d.ts +0 -1
  200. package/dist/mutator/block-pack/frontend.cjs +21 -0
  201. package/dist/mutator/block-pack/frontend.cjs.map +1 -0
  202. package/dist/mutator/block-pack/frontend.d.ts +0 -1
  203. package/dist/mutator/block-pack/frontend.js +19 -0
  204. package/dist/mutator/block-pack/frontend.js.map +1 -0
  205. package/dist/mutator/context_export.cjs +26 -0
  206. package/dist/mutator/context_export.cjs.map +1 -0
  207. package/dist/mutator/context_export.d.ts +2 -3
  208. package/dist/mutator/context_export.js +23 -0
  209. package/dist/mutator/context_export.js.map +1 -0
  210. package/dist/mutator/migration.cjs +57 -0
  211. package/dist/mutator/migration.cjs.map +1 -0
  212. package/dist/mutator/migration.d.ts +0 -1
  213. package/dist/mutator/migration.js +55 -0
  214. package/dist/mutator/migration.js.map +1 -0
  215. package/dist/mutator/project.cjs +997 -0
  216. package/dist/mutator/project.cjs.map +1 -0
  217. package/dist/mutator/project.d.ts +0 -1
  218. package/dist/mutator/project.js +992 -0
  219. package/dist/mutator/project.js.map +1 -0
  220. package/dist/mutator/project.test.d.ts +0 -1
  221. package/dist/mutator/template/direct_template_loader.cjs +146 -0
  222. package/dist/mutator/template/direct_template_loader.cjs.map +1 -0
  223. package/dist/mutator/template/direct_template_loader.d.ts +0 -1
  224. package/dist/mutator/template/direct_template_loader.js +143 -0
  225. package/dist/mutator/template/direct_template_loader.js.map +1 -0
  226. package/dist/mutator/template/direct_template_loader_v3.cjs +139 -0
  227. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -0
  228. package/dist/mutator/template/direct_template_loader_v3.d.ts +0 -1
  229. package/dist/mutator/template/direct_template_loader_v3.js +137 -0
  230. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -0
  231. package/dist/mutator/template/render_block.cjs +43 -0
  232. package/dist/mutator/template/render_block.cjs.map +1 -0
  233. package/dist/mutator/template/render_block.d.ts +0 -1
  234. package/dist/mutator/template/render_block.js +34 -0
  235. package/dist/mutator/template/render_block.js.map +1 -0
  236. package/dist/mutator/template/render_template.cjs +35 -0
  237. package/dist/mutator/template/render_template.cjs.map +1 -0
  238. package/dist/mutator/template/render_template.d.ts +0 -1
  239. package/dist/mutator/template/render_template.js +33 -0
  240. package/dist/mutator/template/render_template.js.map +1 -0
  241. package/dist/mutator/template/template_loading.cjs +71 -0
  242. package/dist/mutator/template/template_loading.cjs.map +1 -0
  243. package/dist/mutator/template/template_loading.d.ts +0 -1
  244. package/dist/mutator/template/template_loading.js +60 -0
  245. package/dist/mutator/template/template_loading.js.map +1 -0
  246. package/dist/mutator/template/template_render.test.d.ts +0 -1
  247. package/dist/network_check/network_check.cjs +267 -0
  248. package/dist/network_check/network_check.cjs.map +1 -0
  249. package/dist/network_check/network_check.d.ts +0 -1
  250. package/dist/network_check/network_check.js +264 -0
  251. package/dist/network_check/network_check.js.map +1 -0
  252. package/dist/network_check/network_check.test.d.ts +0 -1
  253. package/dist/network_check/pings.cjs +107 -0
  254. package/dist/network_check/pings.cjs.map +1 -0
  255. package/dist/network_check/pings.d.ts +0 -1
  256. package/dist/network_check/pings.js +96 -0
  257. package/dist/network_check/pings.js.map +1 -0
  258. package/dist/network_check/template.cjs +318 -0
  259. package/dist/network_check/template.cjs.map +1 -0
  260. package/dist/network_check/template.d.ts +0 -1
  261. package/dist/network_check/template.js +302 -0
  262. package/dist/network_check/template.js.map +1 -0
  263. package/dist/network_check/template.test.d.ts +0 -1
  264. package/dist/network_check/test_utils.d.ts +0 -1
  265. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs +77 -0
  266. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs.map +1 -0
  267. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js +74 -0
  268. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js.map +1 -0
  269. package/dist/pool/data.cjs +298 -0
  270. package/dist/pool/data.cjs.map +1 -0
  271. package/dist/pool/data.d.ts +7 -9
  272. package/dist/pool/data.js +282 -0
  273. package/dist/pool/data.js.map +1 -0
  274. package/dist/pool/driver.cjs +620 -0
  275. package/dist/pool/driver.cjs.map +1 -0
  276. package/dist/pool/driver.d.ts +0 -1
  277. package/dist/pool/driver.js +598 -0
  278. package/dist/pool/driver.js.map +1 -0
  279. package/dist/pool/index.d.ts +0 -1
  280. package/dist/pool/p_object_collection.cjs +87 -0
  281. package/dist/pool/p_object_collection.cjs.map +1 -0
  282. package/dist/pool/p_object_collection.d.ts +0 -1
  283. package/dist/pool/p_object_collection.js +84 -0
  284. package/dist/pool/p_object_collection.js.map +1 -0
  285. package/dist/pool/ref_count_pool.cjs +58 -0
  286. package/dist/pool/ref_count_pool.cjs.map +1 -0
  287. package/dist/pool/ref_count_pool.d.ts +0 -1
  288. package/dist/pool/ref_count_pool.js +56 -0
  289. package/dist/pool/ref_count_pool.js.map +1 -0
  290. package/dist/pool/result_pool.cjs +265 -0
  291. package/dist/pool/result_pool.cjs.map +1 -0
  292. package/dist/pool/result_pool.d.ts +0 -1
  293. package/dist/pool/result_pool.js +263 -0
  294. package/dist/pool/result_pool.js.map +1 -0
  295. package/dist/test/block_packs.d.ts +0 -1
  296. package/dist/test/explicit_templates.d.ts +0 -1
  297. package/dist/test/known_templates.d.ts +0 -1
  298. package/dist/test_env.d.ts +0 -1
  299. package/dist/worker/WorkerManager.cjs +53 -0
  300. package/dist/worker/WorkerManager.cjs.map +1 -0
  301. package/dist/worker/WorkerManager.d.ts +0 -1
  302. package/dist/worker/WorkerManager.js +51 -0
  303. package/dist/worker/WorkerManager.js.map +1 -0
  304. package/dist/worker/worker.cjs +16 -0
  305. package/dist/worker/worker.cjs.map +1 -0
  306. package/dist/worker/worker.d.ts +0 -1
  307. package/dist/worker/worker.js +14 -0
  308. package/dist/worker/worker.js.map +1 -0
  309. package/dist/worker/workerApi.cjs +20 -0
  310. package/dist/worker/workerApi.cjs.map +1 -0
  311. package/dist/worker/workerApi.d.ts +1 -3
  312. package/dist/worker/workerApi.js +18 -0
  313. package/dist/worker/workerApi.js.map +1 -0
  314. package/package.json +26 -34
  315. package/src/cfg_render/executor.test.ts +5 -4
  316. package/src/model/project_model.test.ts +3 -3
  317. package/src/model/project_model_util.test.ts +3 -2
  318. package/src/mutator/block-pack/block_pack.test.ts +5 -4
  319. package/src/mutator/project.test.ts +4 -4
  320. package/src/mutator/template/template_render.test.ts +7 -6
  321. package/src/network_check/network_check.test.ts +1 -0
  322. package/src/network_check/test_utils.ts +2 -0
  323. package/src/worker/WorkerManager.ts +6 -8
  324. package/dist/block_registry/index.d.ts.map +0 -1
  325. package/dist/block_registry/registry-v2-provider.d.ts.map +0 -1
  326. package/dist/block_registry/registry.d.ts.map +0 -1
  327. package/dist/block_registry/registry.test.d.ts.map +0 -1
  328. package/dist/block_registry/watcher.d.ts.map +0 -1
  329. package/dist/block_registry/well_known_registries.d.ts.map +0 -1
  330. package/dist/cfg_render/executor.d.ts.map +0 -1
  331. package/dist/cfg_render/executor.test.d.ts.map +0 -1
  332. package/dist/cfg_render/operation.d.ts.map +0 -1
  333. package/dist/cfg_render/renderer.d.ts.map +0 -1
  334. package/dist/cfg_render/traverse.d.ts.map +0 -1
  335. package/dist/cfg_render/util.d.ts.map +0 -1
  336. package/dist/debug/index.d.ts.map +0 -1
  337. package/dist/dev_env/index.d.ts.map +0 -1
  338. package/dist/dev_env/util.d.ts.map +0 -1
  339. package/dist/index.d.ts.map +0 -1
  340. package/dist/index.mjs +0 -6742
  341. package/dist/index.mjs.map +0 -1
  342. package/dist/js_render/computable_context.d.ts.map +0 -1
  343. package/dist/js_render/context.d.ts.map +0 -1
  344. package/dist/js_render/index.d.ts.map +0 -1
  345. package/dist/middle_layer/active_cfg.d.ts.map +0 -1
  346. package/dist/middle_layer/block.d.ts.map +0 -1
  347. package/dist/middle_layer/block_ctx.d.ts.map +0 -1
  348. package/dist/middle_layer/block_ctx_unsafe.d.ts.map +0 -1
  349. package/dist/middle_layer/driver_kit.d.ts.map +0 -1
  350. package/dist/middle_layer/frontend_path.d.ts.map +0 -1
  351. package/dist/middle_layer/index.d.ts.map +0 -1
  352. package/dist/middle_layer/middle_layer.d.ts.map +0 -1
  353. package/dist/middle_layer/navigation_states.d.ts.map +0 -1
  354. package/dist/middle_layer/ops.d.ts.map +0 -1
  355. package/dist/middle_layer/project.d.ts.map +0 -1
  356. package/dist/middle_layer/project_list.d.ts.map +0 -1
  357. package/dist/middle_layer/project_overview.d.ts.map +0 -1
  358. package/dist/middle_layer/project_overview_light.d.ts.map +0 -1
  359. package/dist/middle_layer/render.d.ts.map +0 -1
  360. package/dist/middle_layer/render.test.d.ts.map +0 -1
  361. package/dist/middle_layer/types.d.ts.map +0 -1
  362. package/dist/middle_layer/util.d.ts.map +0 -1
  363. package/dist/model/args.d.ts.map +0 -1
  364. package/dist/model/block_pack.d.ts.map +0 -1
  365. package/dist/model/block_pack_spec.d.ts.map +0 -1
  366. package/dist/model/frontend.d.ts.map +0 -1
  367. package/dist/model/index.d.ts.map +0 -1
  368. package/dist/model/project_helper.d.ts.map +0 -1
  369. package/dist/model/project_model.d.ts.map +0 -1
  370. package/dist/model/project_model.test.d.ts.map +0 -1
  371. package/dist/model/project_model_util.d.ts.map +0 -1
  372. package/dist/model/project_model_util.test.d.ts.map +0 -1
  373. package/dist/model/project_model_v1.d.ts.map +0 -1
  374. package/dist/model/template_spec.d.ts.map +0 -1
  375. package/dist/mutator/block-pack/block_pack.d.ts.map +0 -1
  376. package/dist/mutator/block-pack/block_pack.test.d.ts.map +0 -1
  377. package/dist/mutator/block-pack/frontend.d.ts.map +0 -1
  378. package/dist/mutator/context_export.d.ts.map +0 -1
  379. package/dist/mutator/migration.d.ts.map +0 -1
  380. package/dist/mutator/project.d.ts.map +0 -1
  381. package/dist/mutator/project.test.d.ts.map +0 -1
  382. package/dist/mutator/template/direct_template_loader.d.ts.map +0 -1
  383. package/dist/mutator/template/direct_template_loader_v3.d.ts.map +0 -1
  384. package/dist/mutator/template/render_block.d.ts.map +0 -1
  385. package/dist/mutator/template/render_template.d.ts.map +0 -1
  386. package/dist/mutator/template/template_loading.d.ts.map +0 -1
  387. package/dist/mutator/template/template_render.test.d.ts.map +0 -1
  388. package/dist/network_check/network_check.d.ts.map +0 -1
  389. package/dist/network_check/network_check.test.d.ts.map +0 -1
  390. package/dist/network_check/pings.d.ts.map +0 -1
  391. package/dist/network_check/template.d.ts.map +0 -1
  392. package/dist/network_check/template.test.d.ts.map +0 -1
  393. package/dist/network_check/test_utils.d.ts.map +0 -1
  394. package/dist/pool/data.d.ts.map +0 -1
  395. package/dist/pool/driver.d.ts.map +0 -1
  396. package/dist/pool/index.d.ts.map +0 -1
  397. package/dist/pool/p_object_collection.d.ts.map +0 -1
  398. package/dist/pool/ref_count_pool.d.ts.map +0 -1
  399. package/dist/pool/result_pool.d.ts.map +0 -1
  400. package/dist/test/block_packs.d.ts.map +0 -1
  401. package/dist/test/explicit_templates.d.ts.map +0 -1
  402. package/dist/test/known_templates.d.ts.map +0 -1
  403. package/dist/test_env.d.ts.map +0 -1
  404. package/dist/worker/WorkerManager.d.ts.map +0 -1
  405. package/dist/worker/worker.d.ts.map +0 -1
  406. package/dist/worker/workerApi.d.ts.map +0 -1
  407. package/dist/worker.js +0 -2
  408. package/dist/worker.js.map +0 -1
  409. package/dist/worker.mjs +0 -20
  410. package/dist/worker.mjs.map +0 -1
@@ -0,0 +1,174 @@
1
+ 'use strict';
2
+
3
+ var computable = require('@milaboratories/computable');
4
+ var plModelMiddleLayer = require('@milaboratories/pl-model-middle-layer');
5
+ var registry = require('./registry.cjs');
6
+ var blockTools = require('@platforma-sdk/block-tools');
7
+ var semver = require('semver');
8
+ var canonicalize = require('canonicalize');
9
+
10
+ const DefaultBlockUpdateWatcherOps = {
11
+ minDelay: 1500,
12
+ };
13
+ const NoUpdatesKey = '__no_updates__';
14
+ class BlockUpdateWatcher extends computable.PollComputablePool {
15
+ registryProvider;
16
+ http;
17
+ preferredUpdateChannel;
18
+ constructor(registryProvider, logger, ops = {}) {
19
+ super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);
20
+ this.registryProvider = registryProvider;
21
+ this.http = ops.http;
22
+ this.preferredUpdateChannel = ops.preferredUpdateChannel;
23
+ }
24
+ getKey(req) {
25
+ switch (req.currentSpec.type) {
26
+ case 'dev-v1':
27
+ return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
28
+ case 'dev-v2':
29
+ return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
30
+ case 'from-registry-v2':
31
+ return `from_registry_v2_${canonicalize(req)}`;
32
+ default:
33
+ return NoUpdatesKey;
34
+ }
35
+ }
36
+ async readValue(req) {
37
+ try {
38
+ const cSpec = req.currentSpec;
39
+ switch (cSpec.type) {
40
+ case 'dev-v1': {
41
+ try {
42
+ const mtime = await registry.getDevV1PacketMtime(cSpec.folder);
43
+ if (mtime === cSpec.mtime)
44
+ return { suggestions: [] };
45
+ else
46
+ return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };
47
+ }
48
+ catch (err) {
49
+ this.logger.warn(err);
50
+ return { suggestions: [] };
51
+ }
52
+ }
53
+ case 'dev-v2': {
54
+ try {
55
+ const description = await blockTools.tryLoadPackDescription(cSpec.folder, this.logger);
56
+ if (description === undefined)
57
+ return { suggestions: [] };
58
+ const mtime = await registry.getDevV2PacketMtime(description);
59
+ if (mtime === cSpec.mtime)
60
+ return { suggestions: [] };
61
+ else
62
+ return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };
63
+ }
64
+ catch (err) {
65
+ this.logger.warn(err);
66
+ return { suggestions: [] };
67
+ }
68
+ }
69
+ case 'from-registry-v2': {
70
+ try {
71
+ const { versionLock, skipVersion } = req.settings;
72
+ if (versionLock === 'patch')
73
+ return { suggestions: [] };
74
+ const registry = this.registryProvider.getRegistry(cSpec.registryUrl);
75
+ let channel = this.preferredUpdateChannel;
76
+ if (channel === undefined) {
77
+ if (cSpec.channel === undefined) {
78
+ const a1 = await registry.getLatestOverview(cSpec.id, plModelMiddleLayer.StableChannel);
79
+ if (a1)
80
+ channel = plModelMiddleLayer.StableChannel;
81
+ else {
82
+ // forcing update from non-existent channel to stable
83
+ const a2 = await registry.getLatestOverview(cSpec.id, plModelMiddleLayer.AnyChannel);
84
+ if (a2 === undefined) {
85
+ this.logger.error(`No "any" channel record for ${plModelMiddleLayer.blockPackIdToString(cSpec.id)}`);
86
+ return { suggestions: [] };
87
+ }
88
+ channel = plModelMiddleLayer.AnyChannel;
89
+ }
90
+ }
91
+ else
92
+ channel = cSpec.channel;
93
+ }
94
+ const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);
95
+ if (vSuggestions === undefined || vSuggestions.length === 0)
96
+ return { suggestions: [] };
97
+ // from major to patch
98
+ vSuggestions.reverse();
99
+ let vMainSuggestion = undefined;
100
+ switch (versionLock) {
101
+ case undefined:
102
+ vMainSuggestion = vSuggestions[0].update;
103
+ break;
104
+ case 'major':
105
+ vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;
106
+ break;
107
+ case 'minor':
108
+ vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;
109
+ break;
110
+ }
111
+ const suggestions = vSuggestions.map(({ type, update }) => ({
112
+ type,
113
+ update: { ...cSpec, id: { ...cSpec.id, version: update } },
114
+ }));
115
+ if (vMainSuggestion === undefined)
116
+ return { suggestions };
117
+ if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))
118
+ return { suggestions };
119
+ const mainSuggestion = {
120
+ ...cSpec,
121
+ id: { ...cSpec.id, version: vMainSuggestion },
122
+ };
123
+ // warming cache
124
+ void (async () => {
125
+ try {
126
+ await registry.getComponents(mainSuggestion.id);
127
+ }
128
+ catch (e) {
129
+ this.logger.warn(e);
130
+ }
131
+ })();
132
+ return { suggestions, mainSuggestion };
133
+ }
134
+ catch (err) {
135
+ this.logger.warn(err);
136
+ return { suggestions: [] };
137
+ }
138
+ }
139
+ default:
140
+ return { suggestions: [] };
141
+ }
142
+ }
143
+ catch (e) {
144
+ this.logger.warn(e);
145
+ return { suggestions: [] };
146
+ }
147
+ }
148
+ resultsEqual(res1, res2) {
149
+ return canonicalize(res1) === canonicalize(res2);
150
+ // if (res1 === undefined && res2 === undefined) return true;
151
+ // if (res1 === undefined || res2 === undefined) return false;
152
+ // if (res1.type !== res2.type) return false;
153
+ // switch (res1.type) {
154
+ // case 'from-registry-v1':
155
+ // if (res2.type !== 'from-registry-v1') return false;
156
+ // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);
157
+ // case 'from-registry-v2':
158
+ // if (res2.type !== 'from-registry-v2') return false;
159
+ // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);
160
+ // case 'dev-v1':
161
+ // if (res2.type !== 'dev-v1') return false;
162
+ // return res1.folder === res2.folder && res1.mtime === res2.mtime;
163
+ // case 'dev-v2':
164
+ // if (res2.type !== 'dev-v2') return false;
165
+ // return res1.folder === res2.folder && res1.mtime === res2.mtime;
166
+ // default:
167
+ // assertNever(res1);
168
+ // }
169
+ }
170
+ }
171
+
172
+ exports.BlockUpdateWatcher = BlockUpdateWatcher;
173
+ exports.DefaultBlockUpdateWatcherOps = DefaultBlockUpdateWatcherOps;
174
+ //# sourceMappingURL=watcher.cjs.map
@@ -0,0 +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 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"],"mappings":"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"}
@@ -25,4 +25,3 @@ export declare class BlockUpdateWatcher extends PollComputablePool<CheckForUpdat
25
25
  protected readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse>;
26
26
  protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean;
27
27
  }
28
- //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1,171 @@
1
+ import { PollComputablePool } from '@milaboratories/computable';
2
+ import { StableChannel, AnyChannel, blockPackIdToString } from '@milaboratories/pl-model-middle-layer';
3
+ import { getDevV2PacketMtime, getDevV1PacketMtime } from './registry.js';
4
+ import { tryLoadPackDescription } from '@platforma-sdk/block-tools';
5
+ import semver from 'semver';
6
+ import canonicalize from 'canonicalize';
7
+
8
+ const DefaultBlockUpdateWatcherOps = {
9
+ minDelay: 1500,
10
+ };
11
+ const NoUpdatesKey = '__no_updates__';
12
+ class BlockUpdateWatcher extends PollComputablePool {
13
+ registryProvider;
14
+ http;
15
+ preferredUpdateChannel;
16
+ constructor(registryProvider, logger, ops = {}) {
17
+ super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);
18
+ this.registryProvider = registryProvider;
19
+ this.http = ops.http;
20
+ this.preferredUpdateChannel = ops.preferredUpdateChannel;
21
+ }
22
+ getKey(req) {
23
+ switch (req.currentSpec.type) {
24
+ case 'dev-v1':
25
+ return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
26
+ case 'dev-v2':
27
+ return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
28
+ case 'from-registry-v2':
29
+ return `from_registry_v2_${canonicalize(req)}`;
30
+ default:
31
+ return NoUpdatesKey;
32
+ }
33
+ }
34
+ async readValue(req) {
35
+ try {
36
+ const cSpec = req.currentSpec;
37
+ switch (cSpec.type) {
38
+ case 'dev-v1': {
39
+ try {
40
+ const mtime = await getDevV1PacketMtime(cSpec.folder);
41
+ if (mtime === cSpec.mtime)
42
+ return { suggestions: [] };
43
+ else
44
+ return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };
45
+ }
46
+ catch (err) {
47
+ this.logger.warn(err);
48
+ return { suggestions: [] };
49
+ }
50
+ }
51
+ case 'dev-v2': {
52
+ try {
53
+ const description = await tryLoadPackDescription(cSpec.folder, this.logger);
54
+ if (description === undefined)
55
+ return { suggestions: [] };
56
+ const mtime = await getDevV2PacketMtime(description);
57
+ if (mtime === cSpec.mtime)
58
+ return { suggestions: [] };
59
+ else
60
+ return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };
61
+ }
62
+ catch (err) {
63
+ this.logger.warn(err);
64
+ return { suggestions: [] };
65
+ }
66
+ }
67
+ case 'from-registry-v2': {
68
+ try {
69
+ const { versionLock, skipVersion } = req.settings;
70
+ if (versionLock === 'patch')
71
+ return { suggestions: [] };
72
+ const registry = this.registryProvider.getRegistry(cSpec.registryUrl);
73
+ let channel = this.preferredUpdateChannel;
74
+ if (channel === undefined) {
75
+ if (cSpec.channel === undefined) {
76
+ const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);
77
+ if (a1)
78
+ channel = StableChannel;
79
+ else {
80
+ // forcing update from non-existent channel to stable
81
+ const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);
82
+ if (a2 === undefined) {
83
+ this.logger.error(`No "any" channel record for ${blockPackIdToString(cSpec.id)}`);
84
+ return { suggestions: [] };
85
+ }
86
+ channel = AnyChannel;
87
+ }
88
+ }
89
+ else
90
+ channel = cSpec.channel;
91
+ }
92
+ const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);
93
+ if (vSuggestions === undefined || vSuggestions.length === 0)
94
+ return { suggestions: [] };
95
+ // from major to patch
96
+ vSuggestions.reverse();
97
+ let vMainSuggestion = undefined;
98
+ switch (versionLock) {
99
+ case undefined:
100
+ vMainSuggestion = vSuggestions[0].update;
101
+ break;
102
+ case 'major':
103
+ vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;
104
+ break;
105
+ case 'minor':
106
+ vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;
107
+ break;
108
+ }
109
+ const suggestions = vSuggestions.map(({ type, update }) => ({
110
+ type,
111
+ update: { ...cSpec, id: { ...cSpec.id, version: update } },
112
+ }));
113
+ if (vMainSuggestion === undefined)
114
+ return { suggestions };
115
+ if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))
116
+ return { suggestions };
117
+ const mainSuggestion = {
118
+ ...cSpec,
119
+ id: { ...cSpec.id, version: vMainSuggestion },
120
+ };
121
+ // warming cache
122
+ void (async () => {
123
+ try {
124
+ await registry.getComponents(mainSuggestion.id);
125
+ }
126
+ catch (e) {
127
+ this.logger.warn(e);
128
+ }
129
+ })();
130
+ return { suggestions, mainSuggestion };
131
+ }
132
+ catch (err) {
133
+ this.logger.warn(err);
134
+ return { suggestions: [] };
135
+ }
136
+ }
137
+ default:
138
+ return { suggestions: [] };
139
+ }
140
+ }
141
+ catch (e) {
142
+ this.logger.warn(e);
143
+ return { suggestions: [] };
144
+ }
145
+ }
146
+ resultsEqual(res1, res2) {
147
+ return canonicalize(res1) === canonicalize(res2);
148
+ // if (res1 === undefined && res2 === undefined) return true;
149
+ // if (res1 === undefined || res2 === undefined) return false;
150
+ // if (res1.type !== res2.type) return false;
151
+ // switch (res1.type) {
152
+ // case 'from-registry-v1':
153
+ // if (res2.type !== 'from-registry-v1') return false;
154
+ // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);
155
+ // case 'from-registry-v2':
156
+ // if (res2.type !== 'from-registry-v2') return false;
157
+ // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);
158
+ // case 'dev-v1':
159
+ // if (res2.type !== 'dev-v1') return false;
160
+ // return res1.folder === res2.folder && res1.mtime === res2.mtime;
161
+ // case 'dev-v2':
162
+ // if (res2.type !== 'dev-v2') return false;
163
+ // return res1.folder === res2.folder && res1.mtime === res2.mtime;
164
+ // default:
165
+ // assertNever(res1);
166
+ // }
167
+ }
168
+ }
169
+
170
+ export { BlockUpdateWatcher, DefaultBlockUpdateWatcherOps };
171
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +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 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":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ const CentralBlockRegistry = {
4
+ type: 'remote-v2',
5
+ url: 'https://blocks.pl-open.science/',
6
+ };
7
+ const V1CentralRegistry = {
8
+ type: 'remote-v1',
9
+ url: 'https://block.registry.platforma.bio/releases',
10
+ };
11
+ const V1CentralDevSnapshotRegistry = {
12
+ type: 'remote-v1',
13
+ url: 'https://block.registry.platforma.bio/dev',
14
+ };
15
+
16
+ exports.CentralBlockRegistry = CentralBlockRegistry;
17
+ exports.V1CentralDevSnapshotRegistry = V1CentralDevSnapshotRegistry;
18
+ exports.V1CentralRegistry = V1CentralRegistry;
19
+ //# sourceMappingURL=well_known_registries.cjs.map
@@ -0,0 +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;;;;;;;"}
@@ -2,4 +2,3 @@ import { 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;
5
- //# sourceMappingURL=well_known_registries.d.ts.map
@@ -0,0 +1,15 @@
1
+ const CentralBlockRegistry = {
2
+ type: 'remote-v2',
3
+ url: 'https://blocks.pl-open.science/',
4
+ };
5
+ const V1CentralRegistry = {
6
+ type: 'remote-v1',
7
+ url: 'https://block.registry.platforma.bio/releases',
8
+ };
9
+ const V1CentralDevSnapshotRegistry = {
10
+ type: 'remote-v1',
11
+ url: 'https://block.registry.platforma.bio/dev',
12
+ };
13
+
14
+ export { CentralBlockRegistry, V1CentralDevSnapshotRegistry, V1CentralRegistry };
15
+ //# sourceMappingURL=well_known_registries.js.map
@@ -0,0 +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;;;;;"}
@@ -0,0 +1,159 @@
1
+ 'use strict';
2
+
3
+ var Denque = require('denque');
4
+ var tsHelpers = require('@milaboratories/ts-helpers');
5
+ var computable = require('@milaboratories/computable');
6
+ var renderer = require('./renderer.cjs');
7
+ var canonicalize = require('canonicalize');
8
+ var block_ctx_unsafe = require('../middle_layer/block_ctx_unsafe.cjs');
9
+
10
+ /** Special address of operation, see below. */
11
+ const ReturnOpKey = Symbol();
12
+ /** The same, but for the argument part of destination, see below. */
13
+ const ReturnArgKey = 'return';
14
+ /** Special destination, telling the executor that corresponding result should
15
+ * be exposed as a final result, and execution terminate at this point. */
16
+ const ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey };
17
+ function isReturnDestination(destination) {
18
+ return destination.op == ReturnOpKey && destination.arg == ReturnArgKey;
19
+ }
20
+ /** Returns initial stack value. */
21
+ function zeroStack() {
22
+ return { pendingSubroutines: new Map() };
23
+ }
24
+ /** Implements main executor mechanism.
25
+ * @param env to be passed to while executing operations
26
+ * @param stack execution stack to continue execution from
27
+ * @param operations operations to initiate the execution process
28
+ * @param allowComputables if false, scheduling of async computables will result in error
29
+ * */
30
+ function execute(env, stack, operations, allowComputables) {
31
+ const operationQueue = new Denque(operations);
32
+ /** Returns false if final result is set as result of this operation,
33
+ * true if we should continue processing. */
34
+ const deliverResult = (destination, result) => {
35
+ if (isReturnDestination(destination)) {
36
+ stack.result = result;
37
+ return false;
38
+ }
39
+ const pending = tsHelpers.notEmpty(stack.pendingSubroutines.get(destination.op));
40
+ if (destination.arg in pending.args)
41
+ throw new Error('argument already set');
42
+ pending.args[destination.arg] = result;
43
+ pending.argCounter--;
44
+ if (pending.argCounter === 0) {
45
+ stack.pendingSubroutines.delete(destination.op);
46
+ operationQueue.push({
47
+ destination: pending.destination,
48
+ operation: pending.subroutine(pending.args),
49
+ });
50
+ }
51
+ return true;
52
+ };
53
+ // computables, scheduled during computation, are aggregated in this array,
54
+ // and returned from the function in the end
55
+ const computables = [];
56
+ // each loop = execution of a single queued operation
57
+ mainLoop: while (operationQueue.length > 0) {
58
+ const op = operationQueue.shift();
59
+ const action = op.operation(env);
60
+ switch (action.type) {
61
+ case 'ReturnResult':
62
+ if (!deliverResult(op.destination, action.result))
63
+ break mainLoop; // this terminates execution
64
+ break; // switch
65
+ case 'ScheduleSubroutine':
66
+ {
67
+ const newOpKey = Symbol();
68
+ const argRequests = Object.entries(action.args);
69
+ const initialArgCounter = argRequests.length;
70
+ if (initialArgCounter === 0)
71
+ // if no pending arguments
72
+ operationQueue.push({
73
+ destination: op.destination,
74
+ operation: action.subroutine({}),
75
+ });
76
+ else {
77
+ for (const [arg, operation] of argRequests)
78
+ operationQueue.push({
79
+ destination: { op: newOpKey, arg },
80
+ operation,
81
+ });
82
+ stack.pendingSubroutines.set(newOpKey, {
83
+ argCounter: initialArgCounter,
84
+ args: {},
85
+ subroutine: action.subroutine,
86
+ destination: op.destination,
87
+ });
88
+ }
89
+ }
90
+ break;
91
+ case 'ScheduleComputable':
92
+ if (!allowComputables)
93
+ throw new Error('asynchronous operations are forbidden in this context');
94
+ computables.push({
95
+ destination: op.destination,
96
+ computable: action.computable,
97
+ });
98
+ break;
99
+ default:
100
+ tsHelpers.assertNever(action);
101
+ }
102
+ }
103
+ return computables;
104
+ }
105
+ //
106
+ // Computable
107
+ //
108
+ /** Main method to render configurations */
109
+ function computableFromCfg(drivers, bCtx, cfg, ops = {}) {
110
+ return computableFromCfgUnsafe(drivers, block_ctx_unsafe.toCfgContext(bCtx), cfg, ops);
111
+ }
112
+ function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
113
+ const key = `${ctx.blockId}#`
114
+ + canonicalize({
115
+ ctx: Object.fromEntries(Object.entries(ctx).filter(([k]) => block_ctx_unsafe.NonKeyCtxFields.indexOf(k) === -1)),
116
+ cfg: cfg,
117
+ });
118
+ return computable.Computable.makeRaw((c) => {
119
+ const env = { drivers, cCtx: c };
120
+ const stack = zeroStack();
121
+ const computables = execute(env, stack, [
122
+ {
123
+ destination: ReturnDestination,
124
+ operation: renderer.renderCfg(ctx, cfg),
125
+ },
126
+ ], true);
127
+ return {
128
+ ir: computables,
129
+ postprocessValue(value) {
130
+ const resolvedOps = [];
131
+ for (const mc of value)
132
+ resolvedOps.push({ destination: mc.destination, operation: renderer.resOp(mc.computable) });
133
+ const postEnv = {
134
+ drivers,
135
+ get cCtx() {
136
+ throw new Error('asynchronous operations are forbidden in this context');
137
+ },
138
+ };
139
+ // Post process can be called several times, that's why it must be a side-effect-free function.
140
+ // But `execute` modifies a stack, so we have to defensively copy it here.
141
+ const copyOfPendingSubrotines = new Map();
142
+ for (const [key, value] of stack.pendingSubroutines)
143
+ copyOfPendingSubrotines.set(key, { ...value, args: { ...value.args } });
144
+ const copiedStack = {
145
+ result: stack.result,
146
+ pendingSubroutines: copyOfPendingSubrotines,
147
+ };
148
+ execute(postEnv, copiedStack, resolvedOps, false);
149
+ if (!('result' in copiedStack))
150
+ throw new Error('illegal cfg rendering stack state, no result');
151
+ return copiedStack.result;
152
+ },
153
+ };
154
+ }, { ...ops, key });
155
+ }
156
+
157
+ exports.computableFromCfg = computableFromCfg;
158
+ exports.computableFromCfgUnsafe = computableFromCfgUnsafe;
159
+ //# sourceMappingURL=executor.cjs.map