@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
@@ -1,4 +1,4 @@
1
- export * from './registry';
2
- export * from './registry-v2-provider';
3
- export * from './well_known_registries';
1
+ export * from "./registry";
2
+ export * from "./registry-v2-provider";
3
+ export * from "./well_known_registries";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-v2-provider.cjs","sources":["../../src/block_registry/registry-v2-provider.ts"],"sourcesContent":["import { folderReaderByUrl, RegistryV2Reader } from '@platforma-sdk/block-tools';\nimport type { Dispatcher } from 'undici';\n\nexport class V2RegistryProvider {\n private readonly registries = new Map<string, RegistryV2Reader>();\n\n constructor(private readonly http: Dispatcher) {}\n\n public getRegistry(url: string): RegistryV2Reader {\n const fromCache = this.registries.get(url);\n if (fromCache) return fromCache;\n const newRegistry = new RegistryV2Reader(folderReaderByUrl(url, this.http));\n this.registries.set(url, newRegistry);\n return newRegistry;\n }\n}\n"],"names":["RegistryV2Reader","folderReaderByUrl"],"mappings":";;;;MAGa,kBAAkB,CAAA;AAGA,IAAA,IAAA;AAFZ,IAAA,UAAU,GAAG,IAAI,GAAG,EAA4B;AAEjE,IAAA,WAAA,CAA6B,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAe;AAEzC,IAAA,WAAW,CAAC,GAAW,EAAA;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,MAAM,WAAW,GAAG,IAAIA,2BAAgB,CAACC,4BAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC;AACrC,QAAA,OAAO,WAAW;IACpB;AACD;;;;"}
1
+ {"version":3,"file":"registry-v2-provider.cjs","sources":["../../src/block_registry/registry-v2-provider.ts"],"sourcesContent":["import { folderReaderByUrl, RegistryV2Reader } from \"@platforma-sdk/block-tools\";\nimport type { Dispatcher } from \"undici\";\n\nexport class V2RegistryProvider {\n private readonly registries = new Map<string, RegistryV2Reader>();\n\n constructor(private readonly http: Dispatcher) {}\n\n public getRegistry(url: string): RegistryV2Reader {\n const fromCache = this.registries.get(url);\n if (fromCache) return fromCache;\n const newRegistry = new RegistryV2Reader(folderReaderByUrl(url, this.http));\n this.registries.set(url, newRegistry);\n return newRegistry;\n }\n}\n"],"names":["RegistryV2Reader","folderReaderByUrl"],"mappings":";;;;MAGa,kBAAkB,CAAA;AAGA,IAAA,IAAA;AAFZ,IAAA,UAAU,GAAG,IAAI,GAAG,EAA4B;AAEjE,IAAA,WAAA,CAA6B,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAe;AAEzC,IAAA,WAAW,CAAC,GAAW,EAAA;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,MAAM,WAAW,GAAG,IAAIA,2BAAgB,CAACC,4BAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC;AACrC,QAAA,OAAO,WAAW;IACpB;AACD;;;;"}
@@ -1,5 +1,5 @@
1
- import { RegistryV2Reader } from '@platforma-sdk/block-tools';
2
- import type { Dispatcher } from 'undici';
1
+ import { RegistryV2Reader } from "@platforma-sdk/block-tools";
2
+ import type { Dispatcher } from "undici";
3
3
  export declare class V2RegistryProvider {
4
4
  private readonly http;
5
5
  private readonly registries;
@@ -1 +1 @@
1
- {"version":3,"file":"registry-v2-provider.js","sources":["../../src/block_registry/registry-v2-provider.ts"],"sourcesContent":["import { folderReaderByUrl, RegistryV2Reader } from '@platforma-sdk/block-tools';\nimport type { Dispatcher } from 'undici';\n\nexport class V2RegistryProvider {\n private readonly registries = new Map<string, RegistryV2Reader>();\n\n constructor(private readonly http: Dispatcher) {}\n\n public getRegistry(url: string): RegistryV2Reader {\n const fromCache = this.registries.get(url);\n if (fromCache) return fromCache;\n const newRegistry = new RegistryV2Reader(folderReaderByUrl(url, this.http));\n this.registries.set(url, newRegistry);\n return newRegistry;\n }\n}\n"],"names":[],"mappings":";;MAGa,kBAAkB,CAAA;AAGA,IAAA,IAAA;AAFZ,IAAA,UAAU,GAAG,IAAI,GAAG,EAA4B;AAEjE,IAAA,WAAA,CAA6B,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAe;AAEzC,IAAA,WAAW,CAAC,GAAW,EAAA;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC;AACrC,QAAA,OAAO,WAAW;IACpB;AACD;;;;"}
1
+ {"version":3,"file":"registry-v2-provider.js","sources":["../../src/block_registry/registry-v2-provider.ts"],"sourcesContent":["import { folderReaderByUrl, RegistryV2Reader } from \"@platforma-sdk/block-tools\";\nimport type { Dispatcher } from \"undici\";\n\nexport class V2RegistryProvider {\n private readonly registries = new Map<string, RegistryV2Reader>();\n\n constructor(private readonly http: Dispatcher) {}\n\n public getRegistry(url: string): RegistryV2Reader {\n const fromCache = this.registries.get(url);\n if (fromCache) return fromCache;\n const newRegistry = new RegistryV2Reader(folderReaderByUrl(url, this.http));\n this.registries.set(url, newRegistry);\n return newRegistry;\n }\n}\n"],"names":[],"mappings":";;MAGa,kBAAkB,CAAA;AAGA,IAAA,IAAA;AAFZ,IAAA,UAAU,GAAG,IAAI,GAAG,EAA4B;AAEjE,IAAA,WAAA,CAA6B,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAe;AAEzC,IAAA,WAAW,CAAC,GAAW,EAAA;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC;AACrC,QAAA,OAAO,WAAW;IACpB;AACD;;;;"}
@@ -11,10 +11,10 @@ var plModelMiddleLayer = require('@milaboratories/pl-model-middle-layer');
11
11
 
12
12
  async function getFileContent(path) {
13
13
  try {
14
- return await fs.promises.readFile(path, 'utf8');
14
+ return await fs.promises.readFile(path, "utf8");
15
15
  }
16
16
  catch (error) {
17
- if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
17
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
18
18
  return undefined;
19
19
  }
20
20
  throw error;
@@ -25,7 +25,7 @@ async function getFileStat(path) {
25
25
  return await fs.promises.stat(path, { bigint: true });
26
26
  }
27
27
  catch (error) {
28
- if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
28
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
29
29
  return undefined;
30
30
  }
31
31
  throw error;
@@ -63,49 +63,50 @@ class BlockPackRegistry {
63
63
  const result = [];
64
64
  const regSpec = regEntry.spec;
65
65
  switch (regSpec.type) {
66
- case 'remote-v1':
67
- {
68
- const httpOptions = this.http !== undefined ? { dispatcher: this.http } : {};
69
- const overviewResponse = await undici.request(`${regSpec.url}/${blockTools.RegistryV1.GlobalOverviewPath}`, httpOptions);
70
- const overview = (await overviewResponse.body.json());
71
- for (const overviewEntry of overview) {
72
- const { organization, package: pkg, latestMeta, latestVersion } = overviewEntry;
73
- const id = {
74
- organization,
75
- name: pkg,
76
- version: latestVersion,
77
- };
78
- const latestOverview = {
79
- id,
80
- meta: {
81
- title: latestMeta['title'] ?? 'No title',
82
- description: latestMeta['description'] ?? 'No Description',
83
- organization: {
84
- name: organization,
85
- url: 'https://unknown.com',
86
- },
66
+ case "remote-v1": {
67
+ const httpOptions = this.http !== undefined ? { dispatcher: this.http } : {};
68
+ const overviewResponse = await undici.request(`${regSpec.url}/${blockTools.RegistryV1.GlobalOverviewPath}`, httpOptions);
69
+ const overview = (await overviewResponse.body.json());
70
+ for (const overviewEntry of overview) {
71
+ const { organization, package: pkg, latestMeta, latestVersion } = overviewEntry;
72
+ const id = {
73
+ organization,
74
+ name: pkg,
75
+ version: latestVersion,
76
+ };
77
+ const latestOverview = {
78
+ id,
79
+ meta: {
80
+ title: latestMeta["title"] ?? "No title",
81
+ description: latestMeta["description"] ?? "No Description",
82
+ organization: {
83
+ name: organization,
84
+ url: "https://unknown.com",
87
85
  },
88
- spec: {
89
- type: 'from-registry-v1',
90
- id,
91
- registryUrl: regSpec.url,
92
- },
93
- };
94
- result.push({
95
- registryId: regEntry.id,
86
+ },
87
+ spec: {
88
+ type: "from-registry-v1",
96
89
  id,
97
- latestByChannel: {
98
- [plModelMiddleLayer.AnyChannel]: latestOverview,
99
- [plModelMiddleLayer.StableChannel]: latestOverview,
100
- },
101
- allVersions: overviewEntry.allVersions.map((v) => ({ version: v, channels: [] })),
102
- });
103
- }
104
- return result;
90
+ registryUrl: regSpec.url,
91
+ },
92
+ };
93
+ result.push({
94
+ registryId: regEntry.id,
95
+ id,
96
+ latestByChannel: {
97
+ [plModelMiddleLayer.AnyChannel]: latestOverview,
98
+ [plModelMiddleLayer.StableChannel]: latestOverview,
99
+ },
100
+ allVersions: overviewEntry.allVersions.map((v) => ({ version: v, channels: [] })),
101
+ });
105
102
  }
106
- case 'remote-v2':
107
- return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks())
108
- .map((e) => ({ ...e, registryId: regEntry.id }));
103
+ return result;
104
+ }
105
+ case "remote-v2":
106
+ return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks()).map((e) => ({
107
+ ...e,
108
+ registryId: regEntry.id,
109
+ }));
109
110
  // e.latestByChannel[StableChannel]
110
111
  // ? {
111
112
  // ...e,
@@ -124,7 +125,7 @@ class BlockPackRegistry {
124
125
  // },
125
126
  // registryId: regEntry.id,
126
127
  // },
127
- case 'local-dev':
128
+ case "local-dev":
128
129
  for (const entry of await fs.promises.readdir(regSpec.path, { withFileTypes: true })) {
129
130
  if (!entry.isDirectory())
130
131
  continue;
@@ -136,20 +137,20 @@ class BlockPackRegistry {
136
137
  const id = {
137
138
  organization: config.organization,
138
139
  name: config.package,
139
- version: 'DEV',
140
+ version: "DEV",
140
141
  };
141
142
  const latestOverview = {
142
143
  id,
143
144
  meta: {
144
- title: config.meta['title'] ?? 'No title',
145
- description: config.meta['description'] ?? 'No Description',
145
+ title: config.meta["title"] ?? "No title",
146
+ description: config.meta["description"] ?? "No Description",
146
147
  organization: {
147
148
  name: config.organization,
148
- url: 'https://unknown.com',
149
+ url: "https://unknown.com",
149
150
  },
150
151
  },
151
152
  spec: {
152
- type: 'dev-v2',
153
+ type: "dev-v2",
153
154
  folder: devPath,
154
155
  mtime,
155
156
  },
@@ -169,7 +170,7 @@ class BlockPackRegistry {
169
170
  let v2Description = await blockTools.tryLoadPackDescription(actualDevPath);
170
171
  if (v2Description === undefined)
171
172
  // iterating over expected subfolder names where block developer may put root block-pack package
172
- for (const bpSubfolder of ['block', 'meta']) {
173
+ for (const bpSubfolder of ["block", "meta"]) {
173
174
  actualDevPath = path.join(devPath, bpSubfolder);
174
175
  v2Description = await blockTools.tryLoadPackDescription(actualDevPath);
175
176
  if (v2Description !== undefined)
@@ -182,7 +183,7 @@ class BlockPackRegistry {
182
183
  meta: await blockTools.BlockPackMetaEmbedAbsoluteBytes.parseAsync(v2Description.meta),
183
184
  featureFlags: v2Description.featureFlags,
184
185
  spec: {
185
- type: 'dev-v2',
186
+ type: "dev-v2",
186
187
  folder: actualDevPath,
187
188
  mtime,
188
189
  },
@@ -209,7 +210,7 @@ class BlockPackRegistry {
209
210
  const blockPacks = [];
210
211
  const registries = [];
211
212
  for (const regSpecs of this.registries) {
212
- registries.push({ ...regSpecs, status: 'online' });
213
+ registries.push({ ...regSpecs, status: "online" });
213
214
  blockPacks.push(...(await this.getPackagesForRoot(regSpecs)));
214
215
  }
215
216
  return { registries, blockPacks };
@@ -218,7 +219,7 @@ class BlockPackRegistry {
218
219
  const regSpec = this.registries.find((reg) => reg.id === registryId)?.spec;
219
220
  if (!regSpec)
220
221
  throw new Error(`Registry with id "${registryId}" not found`);
221
- if (regSpec.type !== 'remote-v2')
222
+ if (regSpec.type !== "remote-v2")
222
223
  throw new Error(`Only "remote-v2" registries support specific package version overview retrieval.`);
223
224
  const reg = this.v2Provider.getRegistry(regSpec.url);
224
225
  return await reg.getSpecificOverview(blockId, channel);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.cjs","sources":["../../src/block_registry/registry.ts"],"sourcesContent":["import type { Dispatcher } from 'undici';\nimport { request } from 'undici';\nimport type {\n BlockPackDescriptionAbsolute } from '@platforma-sdk/block-tools';\nimport {\n BlockPackMetaEmbedAbsoluteBytes,\n RegistryV1,\n} from '@platforma-sdk/block-tools';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { assertNever } from '@milaboratories/ts-helpers';\nimport { LegacyDevBlockPackFiles } from '../dev_env';\nimport { tryLoadPackDescription } from '@platforma-sdk/block-tools';\nimport type { V2RegistryProvider } from './registry-v2-provider';\nimport type {\n BlockPackId,\n BlockPackListing,\n BlockPackOverview,\n RegistryEntry,\n RegistryStatus,\n SingleBlockPackOverview } from '@milaboratories/pl-model-middle-layer';\nimport {\n AnyChannel,\n StableChannel,\n} from '@milaboratories/pl-model-middle-layer';\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, 'utf8');\n } catch (error: unknown) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n\nasync function getFileStat(path: string) {\n try {\n return await fs.promises.stat(path, { bigint: true });\n } catch (error: unknown) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function getDevV1PacketMtime(devPath: string): Promise<string> {\n let mtime = 0n;\n for (const f of LegacyDevBlockPackFiles) {\n const fullPath = path.join(devPath, ...f);\n const stat = await getFileStat(fullPath);\n if (stat === undefined) continue;\n if (mtime < stat.mtimeNs) mtime = stat.mtimeNs;\n }\n return mtime.toString();\n}\n\nexport async function getDevV2PacketMtime(\n description: BlockPackDescriptionAbsolute,\n): Promise<string> {\n const wfStats = await fs.promises.stat(description.components.workflow.main.file, {\n bigint: true,\n });\n const modelStats = await fs.promises.stat(description.components.model.file, { bigint: true });\n return (wfStats.mtimeNs > modelStats.mtimeNs ? wfStats.mtimeNs : modelStats.mtimeNs).toString();\n}\n\nexport class BlockPackRegistry {\n constructor(\n private readonly v2Provider: V2RegistryProvider,\n private readonly registries: RegistryEntry[],\n private readonly http?: Dispatcher,\n ) {}\n\n private async getPackagesForRoot(regEntry: RegistryEntry): Promise<BlockPackOverview[]> {\n const result: BlockPackOverview[] = [];\n const regSpec = regEntry.spec;\n switch (regSpec.type) {\n case 'remote-v1':\n {\n const httpOptions = this.http !== undefined ? { dispatcher: this.http } : {};\n\n const overviewResponse = await request(\n `${regSpec.url}/${RegistryV1.GlobalOverviewPath}`,\n httpOptions,\n );\n const overview = (await overviewResponse.body.json()) as RegistryV1.GlobalOverview;\n for (const overviewEntry of overview) {\n const { organization, package: pkg, latestMeta, latestVersion } = overviewEntry;\n const id = {\n organization,\n name: pkg,\n version: latestVersion,\n };\n const latestOverview: SingleBlockPackOverview = {\n id,\n meta: {\n title: (latestMeta['title'] as string | undefined) ?? 'No title',\n description: (latestMeta['description'] as string | undefined) ?? 'No Description',\n organization: {\n name: organization,\n url: 'https://unknown.com',\n },\n },\n spec: {\n type: 'from-registry-v1',\n id,\n registryUrl: regSpec.url,\n },\n };\n result.push({\n registryId: regEntry.id,\n id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: overviewEntry.allVersions.map((v) => ({ version: v, channels: [] })),\n });\n }\n return result;\n }\n\n case 'remote-v2':\n return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks())\n .map((e) => ({ ...e, registryId: regEntry.id }));\n // e.latestByChannel[StableChannel]\n // ? {\n // ...e,\n // registryId: regEntry.id,\n // }\n // : {\n // ...e,\n // latestByChannel: {\n // ...e.latestByChannel,\n // [StableChannel]: ((s: SingleBlockPackOverview) => {\n // if (s.spec.type === 'from-registry-v2') {\n // return { ...s, spec: { ...s.spec, channel: StableChannel } };\n // }\n\n // return s;\n // })(e.latestByChannel[AnyChannel]),\n // },\n // registryId: regEntry.id,\n // },\n\n case 'local-dev':\n for (const entry of await fs.promises.readdir(regSpec.path, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const devPath = path.join(regSpec.path, entry.name);\n\n const legacyYamlContent = await getFileContent(\n path.join(devPath, RegistryV1.PlPackageYamlConfigFile),\n );\n if (legacyYamlContent !== undefined) {\n const config = RegistryV1.PlPackageConfigData.parse(YAML.parse(legacyYamlContent));\n\n const mtime = await getDevV1PacketMtime(devPath);\n\n const id = {\n organization: config.organization,\n name: config.package,\n version: 'DEV',\n };\n\n const latestOverview: SingleBlockPackOverview = {\n id,\n meta: {\n title: (config.meta['title'] as string) ?? 'No title',\n description: (config.meta['description'] as string) ?? 'No Description',\n organization: {\n name: config.organization,\n url: 'https://unknown.com',\n },\n },\n spec: {\n type: 'dev-v2',\n folder: devPath,\n mtime,\n },\n };\n\n result.push({\n registryId: regEntry.id,\n id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: [],\n });\n } else {\n let actualDevPath = devPath;\n let v2Description = await tryLoadPackDescription(actualDevPath);\n\n if (v2Description === undefined)\n // iterating over expected subfolder names where block developer may put root block-pack package\n for (const bpSubfolder of ['block', 'meta']) {\n actualDevPath = path.join(devPath, bpSubfolder);\n v2Description = await tryLoadPackDescription(actualDevPath);\n if (v2Description !== undefined) break;\n }\n\n if (v2Description !== undefined) {\n const mtime = await getDevV2PacketMtime(v2Description);\n\n const latestOverview: SingleBlockPackOverview = {\n id: v2Description.id,\n meta: await BlockPackMetaEmbedAbsoluteBytes.parseAsync(v2Description.meta),\n featureFlags: v2Description.featureFlags,\n spec: {\n type: 'dev-v2',\n folder: actualDevPath,\n mtime,\n },\n };\n\n result.push({\n registryId: regEntry.id,\n id: v2Description.id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: [],\n });\n }\n }\n\n continue;\n }\n return result;\n default:\n return assertNever(regSpec);\n }\n }\n\n public async listBlockPacks(): Promise<BlockPackListing> {\n const blockPacks: BlockPackOverview[] = [];\n const registries: RegistryStatus[] = [];\n for (const regSpecs of this.registries) {\n registries.push({ ...regSpecs, status: 'online' });\n blockPacks.push(...(await this.getPackagesForRoot(regSpecs)));\n }\n return { registries, blockPacks };\n }\n\n public async getOverview(\n registryId: string,\n blockId: BlockPackId,\n channel: string,\n ): Promise<SingleBlockPackOverview> {\n const regSpec = this.registries.find((reg) => reg.id === registryId)?.spec;\n if (!regSpec) throw new Error(`Registry with id \"${registryId}\" not found`);\n if (regSpec.type !== 'remote-v2')\n throw new Error(\n `Only \"remote-v2\" registries support specific package version overview retrieval.`,\n );\n const reg = this.v2Provider.getRegistry(regSpec.url);\n return await reg.getSpecificOverview(blockId, channel);\n }\n}\n"],"names":["LegacyDevBlockPackFiles","request","RegistryV1","AnyChannel","StableChannel","tryLoadPackDescription","BlockPackMetaEmbedAbsoluteBytes","assertNever"],"mappings":"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"}
1
+ {"version":3,"file":"registry.cjs","sources":["../../src/block_registry/registry.ts"],"sourcesContent":["import type { Dispatcher } from \"undici\";\nimport { request } from \"undici\";\nimport type { BlockPackDescriptionAbsolute } from \"@platforma-sdk/block-tools\";\nimport { BlockPackMetaEmbedAbsoluteBytes, RegistryV1 } from \"@platforma-sdk/block-tools\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport YAML from \"yaml\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport { LegacyDevBlockPackFiles } from \"../dev_env\";\nimport { tryLoadPackDescription } from \"@platforma-sdk/block-tools\";\nimport type { V2RegistryProvider } from \"./registry-v2-provider\";\nimport type {\n BlockPackId,\n BlockPackListing,\n BlockPackOverview,\n RegistryEntry,\n RegistryStatus,\n SingleBlockPackOverview,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { AnyChannel, StableChannel } from \"@milaboratories/pl-model-middle-layer\";\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, \"utf8\");\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\nasync function getFileStat(path: string) {\n try {\n return await fs.promises.stat(path, { bigint: true });\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function getDevV1PacketMtime(devPath: string): Promise<string> {\n let mtime = 0n;\n for (const f of LegacyDevBlockPackFiles) {\n const fullPath = path.join(devPath, ...f);\n const stat = await getFileStat(fullPath);\n if (stat === undefined) continue;\n if (mtime < stat.mtimeNs) mtime = stat.mtimeNs;\n }\n return mtime.toString();\n}\n\nexport async function getDevV2PacketMtime(\n description: BlockPackDescriptionAbsolute,\n): Promise<string> {\n const wfStats = await fs.promises.stat(description.components.workflow.main.file, {\n bigint: true,\n });\n const modelStats = await fs.promises.stat(description.components.model.file, { bigint: true });\n return (wfStats.mtimeNs > modelStats.mtimeNs ? wfStats.mtimeNs : modelStats.mtimeNs).toString();\n}\n\nexport class BlockPackRegistry {\n constructor(\n private readonly v2Provider: V2RegistryProvider,\n private readonly registries: RegistryEntry[],\n private readonly http?: Dispatcher,\n ) {}\n\n private async getPackagesForRoot(regEntry: RegistryEntry): Promise<BlockPackOverview[]> {\n const result: BlockPackOverview[] = [];\n const regSpec = regEntry.spec;\n switch (regSpec.type) {\n case \"remote-v1\": {\n const httpOptions = this.http !== undefined ? { dispatcher: this.http } : {};\n\n const overviewResponse = await request(\n `${regSpec.url}/${RegistryV1.GlobalOverviewPath}`,\n httpOptions,\n );\n const overview = (await overviewResponse.body.json()) as RegistryV1.GlobalOverview;\n for (const overviewEntry of overview) {\n const { organization, package: pkg, latestMeta, latestVersion } = overviewEntry;\n const id = {\n organization,\n name: pkg,\n version: latestVersion,\n };\n const latestOverview: SingleBlockPackOverview = {\n id,\n meta: {\n title: (latestMeta[\"title\"] as string | undefined) ?? \"No title\",\n description: (latestMeta[\"description\"] as string | undefined) ?? \"No Description\",\n organization: {\n name: organization,\n url: \"https://unknown.com\",\n },\n },\n spec: {\n type: \"from-registry-v1\",\n id,\n registryUrl: regSpec.url,\n },\n };\n result.push({\n registryId: regEntry.id,\n id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: overviewEntry.allVersions.map((v) => ({ version: v, channels: [] })),\n });\n }\n return result;\n }\n\n case \"remote-v2\":\n return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks()).map((e) => ({\n ...e,\n registryId: regEntry.id,\n }));\n // e.latestByChannel[StableChannel]\n // ? {\n // ...e,\n // registryId: regEntry.id,\n // }\n // : {\n // ...e,\n // latestByChannel: {\n // ...e.latestByChannel,\n // [StableChannel]: ((s: SingleBlockPackOverview) => {\n // if (s.spec.type === 'from-registry-v2') {\n // return { ...s, spec: { ...s.spec, channel: StableChannel } };\n // }\n\n // return s;\n // })(e.latestByChannel[AnyChannel]),\n // },\n // registryId: regEntry.id,\n // },\n\n case \"local-dev\":\n for (const entry of await fs.promises.readdir(regSpec.path, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const devPath = path.join(regSpec.path, entry.name);\n\n const legacyYamlContent = await getFileContent(\n path.join(devPath, RegistryV1.PlPackageYamlConfigFile),\n );\n if (legacyYamlContent !== undefined) {\n const config = RegistryV1.PlPackageConfigData.parse(YAML.parse(legacyYamlContent));\n\n const mtime = await getDevV1PacketMtime(devPath);\n\n const id = {\n organization: config.organization,\n name: config.package,\n version: \"DEV\",\n };\n\n const latestOverview: SingleBlockPackOverview = {\n id,\n meta: {\n title: (config.meta[\"title\"] as string) ?? \"No title\",\n description: (config.meta[\"description\"] as string) ?? \"No Description\",\n organization: {\n name: config.organization,\n url: \"https://unknown.com\",\n },\n },\n spec: {\n type: \"dev-v2\",\n folder: devPath,\n mtime,\n },\n };\n\n result.push({\n registryId: regEntry.id,\n id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: [],\n });\n } else {\n let actualDevPath = devPath;\n let v2Description = await tryLoadPackDescription(actualDevPath);\n\n if (v2Description === undefined)\n // iterating over expected subfolder names where block developer may put root block-pack package\n for (const bpSubfolder of [\"block\", \"meta\"]) {\n actualDevPath = path.join(devPath, bpSubfolder);\n v2Description = await tryLoadPackDescription(actualDevPath);\n if (v2Description !== undefined) break;\n }\n\n if (v2Description !== undefined) {\n const mtime = await getDevV2PacketMtime(v2Description);\n\n const latestOverview: SingleBlockPackOverview = {\n id: v2Description.id,\n meta: await BlockPackMetaEmbedAbsoluteBytes.parseAsync(v2Description.meta),\n featureFlags: v2Description.featureFlags,\n spec: {\n type: \"dev-v2\",\n folder: actualDevPath,\n mtime,\n },\n };\n\n result.push({\n registryId: regEntry.id,\n id: v2Description.id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: [],\n });\n }\n }\n\n continue;\n }\n return result;\n default:\n return assertNever(regSpec);\n }\n }\n\n public async listBlockPacks(): Promise<BlockPackListing> {\n const blockPacks: BlockPackOverview[] = [];\n const registries: RegistryStatus[] = [];\n for (const regSpecs of this.registries) {\n registries.push({ ...regSpecs, status: \"online\" });\n blockPacks.push(...(await this.getPackagesForRoot(regSpecs)));\n }\n return { registries, blockPacks };\n }\n\n public async getOverview(\n registryId: string,\n blockId: BlockPackId,\n channel: string,\n ): Promise<SingleBlockPackOverview> {\n const regSpec = this.registries.find((reg) => reg.id === registryId)?.spec;\n if (!regSpec) throw new Error(`Registry with id \"${registryId}\" not found`);\n if (regSpec.type !== \"remote-v2\")\n throw new Error(\n `Only \"remote-v2\" registries support specific package version overview retrieval.`,\n );\n const reg = this.v2Provider.getRegistry(regSpec.url);\n return await reg.getSpecificOverview(blockId, channel);\n }\n}\n"],"names":["LegacyDevBlockPackFiles","request","RegistryV1","AnyChannel","StableChannel","tryLoadPackDescription","BlockPackMetaEmbedAbsoluteBytes","assertNever"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import type { Dispatcher } from 'undici';
2
- import type { BlockPackDescriptionAbsolute } from '@platforma-sdk/block-tools';
3
- import type { V2RegistryProvider } from './registry-v2-provider';
4
- import type { BlockPackId, BlockPackListing, RegistryEntry, SingleBlockPackOverview } from '@milaboratories/pl-model-middle-layer';
1
+ import type { Dispatcher } from "undici";
2
+ import type { BlockPackDescriptionAbsolute } from "@platforma-sdk/block-tools";
3
+ import type { V2RegistryProvider } from "./registry-v2-provider";
4
+ import type { BlockPackId, BlockPackListing, RegistryEntry, SingleBlockPackOverview } from "@milaboratories/pl-model-middle-layer";
5
5
  export declare function getDevV1PacketMtime(devPath: string): Promise<string>;
6
6
  export declare function getDevV2PacketMtime(description: BlockPackDescriptionAbsolute): Promise<string>;
7
7
  export declare class BlockPackRegistry {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/block_registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,KAAK,EACV,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAWnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAEhB,aAAa,EAEb,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AA4BzE,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1E;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,4BAA4B,GACxC,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAFL,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,aAAa,EAAE,EAC3B,IAAI,CAAC,EAAE,UAAU,YAAA;YAGtB,kBAAkB;IAmKnB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAU3C,WAAW,CACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC;CAUpC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/block_registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAQ/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAEhB,aAAa,EAEb,uBAAuB,EACxB,MAAM,uCAAuC,CAAC;AAyB/C,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1E;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,4BAA4B,GACxC,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAFL,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,aAAa,EAAE,EAC3B,IAAI,CAAC,EAAE,UAAU,YAAA;YAGtB,kBAAkB;IAoKnB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAU3C,WAAW,CACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC;CAUpC"}
@@ -9,10 +9,10 @@ import { StableChannel, AnyChannel } from '@milaboratories/pl-model-middle-layer
9
9
 
10
10
  async function getFileContent(path) {
11
11
  try {
12
- return await fs.promises.readFile(path, 'utf8');
12
+ return await fs.promises.readFile(path, "utf8");
13
13
  }
14
14
  catch (error) {
15
- if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
15
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
16
16
  return undefined;
17
17
  }
18
18
  throw error;
@@ -23,7 +23,7 @@ async function getFileStat(path) {
23
23
  return await fs.promises.stat(path, { bigint: true });
24
24
  }
25
25
  catch (error) {
26
- if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
26
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
27
27
  return undefined;
28
28
  }
29
29
  throw error;
@@ -61,49 +61,50 @@ class BlockPackRegistry {
61
61
  const result = [];
62
62
  const regSpec = regEntry.spec;
63
63
  switch (regSpec.type) {
64
- case 'remote-v1':
65
- {
66
- const httpOptions = this.http !== undefined ? { dispatcher: this.http } : {};
67
- const overviewResponse = await request(`${regSpec.url}/${RegistryV1.GlobalOverviewPath}`, httpOptions);
68
- const overview = (await overviewResponse.body.json());
69
- for (const overviewEntry of overview) {
70
- const { organization, package: pkg, latestMeta, latestVersion } = overviewEntry;
71
- const id = {
72
- organization,
73
- name: pkg,
74
- version: latestVersion,
75
- };
76
- const latestOverview = {
77
- id,
78
- meta: {
79
- title: latestMeta['title'] ?? 'No title',
80
- description: latestMeta['description'] ?? 'No Description',
81
- organization: {
82
- name: organization,
83
- url: 'https://unknown.com',
84
- },
64
+ case "remote-v1": {
65
+ const httpOptions = this.http !== undefined ? { dispatcher: this.http } : {};
66
+ const overviewResponse = await request(`${regSpec.url}/${RegistryV1.GlobalOverviewPath}`, httpOptions);
67
+ const overview = (await overviewResponse.body.json());
68
+ for (const overviewEntry of overview) {
69
+ const { organization, package: pkg, latestMeta, latestVersion } = overviewEntry;
70
+ const id = {
71
+ organization,
72
+ name: pkg,
73
+ version: latestVersion,
74
+ };
75
+ const latestOverview = {
76
+ id,
77
+ meta: {
78
+ title: latestMeta["title"] ?? "No title",
79
+ description: latestMeta["description"] ?? "No Description",
80
+ organization: {
81
+ name: organization,
82
+ url: "https://unknown.com",
85
83
  },
86
- spec: {
87
- type: 'from-registry-v1',
88
- id,
89
- registryUrl: regSpec.url,
90
- },
91
- };
92
- result.push({
93
- registryId: regEntry.id,
84
+ },
85
+ spec: {
86
+ type: "from-registry-v1",
94
87
  id,
95
- latestByChannel: {
96
- [AnyChannel]: latestOverview,
97
- [StableChannel]: latestOverview,
98
- },
99
- allVersions: overviewEntry.allVersions.map((v) => ({ version: v, channels: [] })),
100
- });
101
- }
102
- return result;
88
+ registryUrl: regSpec.url,
89
+ },
90
+ };
91
+ result.push({
92
+ registryId: regEntry.id,
93
+ id,
94
+ latestByChannel: {
95
+ [AnyChannel]: latestOverview,
96
+ [StableChannel]: latestOverview,
97
+ },
98
+ allVersions: overviewEntry.allVersions.map((v) => ({ version: v, channels: [] })),
99
+ });
103
100
  }
104
- case 'remote-v2':
105
- return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks())
106
- .map((e) => ({ ...e, registryId: regEntry.id }));
101
+ return result;
102
+ }
103
+ case "remote-v2":
104
+ return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks()).map((e) => ({
105
+ ...e,
106
+ registryId: regEntry.id,
107
+ }));
107
108
  // e.latestByChannel[StableChannel]
108
109
  // ? {
109
110
  // ...e,
@@ -122,7 +123,7 @@ class BlockPackRegistry {
122
123
  // },
123
124
  // registryId: regEntry.id,
124
125
  // },
125
- case 'local-dev':
126
+ case "local-dev":
126
127
  for (const entry of await fs.promises.readdir(regSpec.path, { withFileTypes: true })) {
127
128
  if (!entry.isDirectory())
128
129
  continue;
@@ -134,20 +135,20 @@ class BlockPackRegistry {
134
135
  const id = {
135
136
  organization: config.organization,
136
137
  name: config.package,
137
- version: 'DEV',
138
+ version: "DEV",
138
139
  };
139
140
  const latestOverview = {
140
141
  id,
141
142
  meta: {
142
- title: config.meta['title'] ?? 'No title',
143
- description: config.meta['description'] ?? 'No Description',
143
+ title: config.meta["title"] ?? "No title",
144
+ description: config.meta["description"] ?? "No Description",
144
145
  organization: {
145
146
  name: config.organization,
146
- url: 'https://unknown.com',
147
+ url: "https://unknown.com",
147
148
  },
148
149
  },
149
150
  spec: {
150
- type: 'dev-v2',
151
+ type: "dev-v2",
151
152
  folder: devPath,
152
153
  mtime,
153
154
  },
@@ -167,7 +168,7 @@ class BlockPackRegistry {
167
168
  let v2Description = await tryLoadPackDescription(actualDevPath);
168
169
  if (v2Description === undefined)
169
170
  // iterating over expected subfolder names where block developer may put root block-pack package
170
- for (const bpSubfolder of ['block', 'meta']) {
171
+ for (const bpSubfolder of ["block", "meta"]) {
171
172
  actualDevPath = path.join(devPath, bpSubfolder);
172
173
  v2Description = await tryLoadPackDescription(actualDevPath);
173
174
  if (v2Description !== undefined)
@@ -180,7 +181,7 @@ class BlockPackRegistry {
180
181
  meta: await BlockPackMetaEmbedAbsoluteBytes.parseAsync(v2Description.meta),
181
182
  featureFlags: v2Description.featureFlags,
182
183
  spec: {
183
- type: 'dev-v2',
184
+ type: "dev-v2",
184
185
  folder: actualDevPath,
185
186
  mtime,
186
187
  },
@@ -207,7 +208,7 @@ class BlockPackRegistry {
207
208
  const blockPacks = [];
208
209
  const registries = [];
209
210
  for (const regSpecs of this.registries) {
210
- registries.push({ ...regSpecs, status: 'online' });
211
+ registries.push({ ...regSpecs, status: "online" });
211
212
  blockPacks.push(...(await this.getPackagesForRoot(regSpecs)));
212
213
  }
213
214
  return { registries, blockPacks };
@@ -216,7 +217,7 @@ class BlockPackRegistry {
216
217
  const regSpec = this.registries.find((reg) => reg.id === registryId)?.spec;
217
218
  if (!regSpec)
218
219
  throw new Error(`Registry with id "${registryId}" not found`);
219
- if (regSpec.type !== 'remote-v2')
220
+ if (regSpec.type !== "remote-v2")
220
221
  throw new Error(`Only "remote-v2" registries support specific package version overview retrieval.`);
221
222
  const reg = this.v2Provider.getRegistry(regSpec.url);
222
223
  return await reg.getSpecificOverview(blockId, channel);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sources":["../../src/block_registry/registry.ts"],"sourcesContent":["import type { Dispatcher } from 'undici';\nimport { request } from 'undici';\nimport type {\n BlockPackDescriptionAbsolute } from '@platforma-sdk/block-tools';\nimport {\n BlockPackMetaEmbedAbsoluteBytes,\n RegistryV1,\n} from '@platforma-sdk/block-tools';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { assertNever } from '@milaboratories/ts-helpers';\nimport { LegacyDevBlockPackFiles } from '../dev_env';\nimport { tryLoadPackDescription } from '@platforma-sdk/block-tools';\nimport type { V2RegistryProvider } from './registry-v2-provider';\nimport type {\n BlockPackId,\n BlockPackListing,\n BlockPackOverview,\n RegistryEntry,\n RegistryStatus,\n SingleBlockPackOverview } from '@milaboratories/pl-model-middle-layer';\nimport {\n AnyChannel,\n StableChannel,\n} from '@milaboratories/pl-model-middle-layer';\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, 'utf8');\n } catch (error: unknown) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n\nasync function getFileStat(path: string) {\n try {\n return await fs.promises.stat(path, { bigint: true });\n } catch (error: unknown) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function getDevV1PacketMtime(devPath: string): Promise<string> {\n let mtime = 0n;\n for (const f of LegacyDevBlockPackFiles) {\n const fullPath = path.join(devPath, ...f);\n const stat = await getFileStat(fullPath);\n if (stat === undefined) continue;\n if (mtime < stat.mtimeNs) mtime = stat.mtimeNs;\n }\n return mtime.toString();\n}\n\nexport async function getDevV2PacketMtime(\n description: BlockPackDescriptionAbsolute,\n): Promise<string> {\n const wfStats = await fs.promises.stat(description.components.workflow.main.file, {\n bigint: true,\n });\n const modelStats = await fs.promises.stat(description.components.model.file, { bigint: true });\n return (wfStats.mtimeNs > modelStats.mtimeNs ? wfStats.mtimeNs : modelStats.mtimeNs).toString();\n}\n\nexport class BlockPackRegistry {\n constructor(\n private readonly v2Provider: V2RegistryProvider,\n private readonly registries: RegistryEntry[],\n private readonly http?: Dispatcher,\n ) {}\n\n private async getPackagesForRoot(regEntry: RegistryEntry): Promise<BlockPackOverview[]> {\n const result: BlockPackOverview[] = [];\n const regSpec = regEntry.spec;\n switch (regSpec.type) {\n case 'remote-v1':\n {\n const httpOptions = this.http !== undefined ? { dispatcher: this.http } : {};\n\n const overviewResponse = await request(\n `${regSpec.url}/${RegistryV1.GlobalOverviewPath}`,\n httpOptions,\n );\n const overview = (await overviewResponse.body.json()) as RegistryV1.GlobalOverview;\n for (const overviewEntry of overview) {\n const { organization, package: pkg, latestMeta, latestVersion } = overviewEntry;\n const id = {\n organization,\n name: pkg,\n version: latestVersion,\n };\n const latestOverview: SingleBlockPackOverview = {\n id,\n meta: {\n title: (latestMeta['title'] as string | undefined) ?? 'No title',\n description: (latestMeta['description'] as string | undefined) ?? 'No Description',\n organization: {\n name: organization,\n url: 'https://unknown.com',\n },\n },\n spec: {\n type: 'from-registry-v1',\n id,\n registryUrl: regSpec.url,\n },\n };\n result.push({\n registryId: regEntry.id,\n id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: overviewEntry.allVersions.map((v) => ({ version: v, channels: [] })),\n });\n }\n return result;\n }\n\n case 'remote-v2':\n return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks())\n .map((e) => ({ ...e, registryId: regEntry.id }));\n // e.latestByChannel[StableChannel]\n // ? {\n // ...e,\n // registryId: regEntry.id,\n // }\n // : {\n // ...e,\n // latestByChannel: {\n // ...e.latestByChannel,\n // [StableChannel]: ((s: SingleBlockPackOverview) => {\n // if (s.spec.type === 'from-registry-v2') {\n // return { ...s, spec: { ...s.spec, channel: StableChannel } };\n // }\n\n // return s;\n // })(e.latestByChannel[AnyChannel]),\n // },\n // registryId: regEntry.id,\n // },\n\n case 'local-dev':\n for (const entry of await fs.promises.readdir(regSpec.path, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const devPath = path.join(regSpec.path, entry.name);\n\n const legacyYamlContent = await getFileContent(\n path.join(devPath, RegistryV1.PlPackageYamlConfigFile),\n );\n if (legacyYamlContent !== undefined) {\n const config = RegistryV1.PlPackageConfigData.parse(YAML.parse(legacyYamlContent));\n\n const mtime = await getDevV1PacketMtime(devPath);\n\n const id = {\n organization: config.organization,\n name: config.package,\n version: 'DEV',\n };\n\n const latestOverview: SingleBlockPackOverview = {\n id,\n meta: {\n title: (config.meta['title'] as string) ?? 'No title',\n description: (config.meta['description'] as string) ?? 'No Description',\n organization: {\n name: config.organization,\n url: 'https://unknown.com',\n },\n },\n spec: {\n type: 'dev-v2',\n folder: devPath,\n mtime,\n },\n };\n\n result.push({\n registryId: regEntry.id,\n id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: [],\n });\n } else {\n let actualDevPath = devPath;\n let v2Description = await tryLoadPackDescription(actualDevPath);\n\n if (v2Description === undefined)\n // iterating over expected subfolder names where block developer may put root block-pack package\n for (const bpSubfolder of ['block', 'meta']) {\n actualDevPath = path.join(devPath, bpSubfolder);\n v2Description = await tryLoadPackDescription(actualDevPath);\n if (v2Description !== undefined) break;\n }\n\n if (v2Description !== undefined) {\n const mtime = await getDevV2PacketMtime(v2Description);\n\n const latestOverview: SingleBlockPackOverview = {\n id: v2Description.id,\n meta: await BlockPackMetaEmbedAbsoluteBytes.parseAsync(v2Description.meta),\n featureFlags: v2Description.featureFlags,\n spec: {\n type: 'dev-v2',\n folder: actualDevPath,\n mtime,\n },\n };\n\n result.push({\n registryId: regEntry.id,\n id: v2Description.id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: [],\n });\n }\n }\n\n continue;\n }\n return result;\n default:\n return assertNever(regSpec);\n }\n }\n\n public async listBlockPacks(): Promise<BlockPackListing> {\n const blockPacks: BlockPackOverview[] = [];\n const registries: RegistryStatus[] = [];\n for (const regSpecs of this.registries) {\n registries.push({ ...regSpecs, status: 'online' });\n blockPacks.push(...(await this.getPackagesForRoot(regSpecs)));\n }\n return { registries, blockPacks };\n }\n\n public async getOverview(\n registryId: string,\n blockId: BlockPackId,\n channel: string,\n ): Promise<SingleBlockPackOverview> {\n const regSpec = this.registries.find((reg) => reg.id === registryId)?.spec;\n if (!regSpec) throw new Error(`Registry with id \"${registryId}\" not found`);\n if (regSpec.type !== 'remote-v2')\n throw new Error(\n `Only \"remote-v2\" registries support specific package version overview retrieval.`,\n );\n const reg = this.v2Provider.getRegistry(regSpec.url);\n return await reg.getSpecificOverview(blockId, channel);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sources":["../../src/block_registry/registry.ts"],"sourcesContent":["import type { Dispatcher } from \"undici\";\nimport { request } from \"undici\";\nimport type { BlockPackDescriptionAbsolute } from \"@platforma-sdk/block-tools\";\nimport { BlockPackMetaEmbedAbsoluteBytes, RegistryV1 } from \"@platforma-sdk/block-tools\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport YAML from \"yaml\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport { LegacyDevBlockPackFiles } from \"../dev_env\";\nimport { tryLoadPackDescription } from \"@platforma-sdk/block-tools\";\nimport type { V2RegistryProvider } from \"./registry-v2-provider\";\nimport type {\n BlockPackId,\n BlockPackListing,\n BlockPackOverview,\n RegistryEntry,\n RegistryStatus,\n SingleBlockPackOverview,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { AnyChannel, StableChannel } from \"@milaboratories/pl-model-middle-layer\";\n\nasync function getFileContent(path: string) {\n try {\n return await fs.promises.readFile(path, \"utf8\");\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\nasync function getFileStat(path: string) {\n try {\n return await fs.promises.stat(path, { bigint: true });\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function getDevV1PacketMtime(devPath: string): Promise<string> {\n let mtime = 0n;\n for (const f of LegacyDevBlockPackFiles) {\n const fullPath = path.join(devPath, ...f);\n const stat = await getFileStat(fullPath);\n if (stat === undefined) continue;\n if (mtime < stat.mtimeNs) mtime = stat.mtimeNs;\n }\n return mtime.toString();\n}\n\nexport async function getDevV2PacketMtime(\n description: BlockPackDescriptionAbsolute,\n): Promise<string> {\n const wfStats = await fs.promises.stat(description.components.workflow.main.file, {\n bigint: true,\n });\n const modelStats = await fs.promises.stat(description.components.model.file, { bigint: true });\n return (wfStats.mtimeNs > modelStats.mtimeNs ? wfStats.mtimeNs : modelStats.mtimeNs).toString();\n}\n\nexport class BlockPackRegistry {\n constructor(\n private readonly v2Provider: V2RegistryProvider,\n private readonly registries: RegistryEntry[],\n private readonly http?: Dispatcher,\n ) {}\n\n private async getPackagesForRoot(regEntry: RegistryEntry): Promise<BlockPackOverview[]> {\n const result: BlockPackOverview[] = [];\n const regSpec = regEntry.spec;\n switch (regSpec.type) {\n case \"remote-v1\": {\n const httpOptions = this.http !== undefined ? { dispatcher: this.http } : {};\n\n const overviewResponse = await request(\n `${regSpec.url}/${RegistryV1.GlobalOverviewPath}`,\n httpOptions,\n );\n const overview = (await overviewResponse.body.json()) as RegistryV1.GlobalOverview;\n for (const overviewEntry of overview) {\n const { organization, package: pkg, latestMeta, latestVersion } = overviewEntry;\n const id = {\n organization,\n name: pkg,\n version: latestVersion,\n };\n const latestOverview: SingleBlockPackOverview = {\n id,\n meta: {\n title: (latestMeta[\"title\"] as string | undefined) ?? \"No title\",\n description: (latestMeta[\"description\"] as string | undefined) ?? \"No Description\",\n organization: {\n name: organization,\n url: \"https://unknown.com\",\n },\n },\n spec: {\n type: \"from-registry-v1\",\n id,\n registryUrl: regSpec.url,\n },\n };\n result.push({\n registryId: regEntry.id,\n id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: overviewEntry.allVersions.map((v) => ({ version: v, channels: [] })),\n });\n }\n return result;\n }\n\n case \"remote-v2\":\n return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks()).map((e) => ({\n ...e,\n registryId: regEntry.id,\n }));\n // e.latestByChannel[StableChannel]\n // ? {\n // ...e,\n // registryId: regEntry.id,\n // }\n // : {\n // ...e,\n // latestByChannel: {\n // ...e.latestByChannel,\n // [StableChannel]: ((s: SingleBlockPackOverview) => {\n // if (s.spec.type === 'from-registry-v2') {\n // return { ...s, spec: { ...s.spec, channel: StableChannel } };\n // }\n\n // return s;\n // })(e.latestByChannel[AnyChannel]),\n // },\n // registryId: regEntry.id,\n // },\n\n case \"local-dev\":\n for (const entry of await fs.promises.readdir(regSpec.path, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const devPath = path.join(regSpec.path, entry.name);\n\n const legacyYamlContent = await getFileContent(\n path.join(devPath, RegistryV1.PlPackageYamlConfigFile),\n );\n if (legacyYamlContent !== undefined) {\n const config = RegistryV1.PlPackageConfigData.parse(YAML.parse(legacyYamlContent));\n\n const mtime = await getDevV1PacketMtime(devPath);\n\n const id = {\n organization: config.organization,\n name: config.package,\n version: \"DEV\",\n };\n\n const latestOverview: SingleBlockPackOverview = {\n id,\n meta: {\n title: (config.meta[\"title\"] as string) ?? \"No title\",\n description: (config.meta[\"description\"] as string) ?? \"No Description\",\n organization: {\n name: config.organization,\n url: \"https://unknown.com\",\n },\n },\n spec: {\n type: \"dev-v2\",\n folder: devPath,\n mtime,\n },\n };\n\n result.push({\n registryId: regEntry.id,\n id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: [],\n });\n } else {\n let actualDevPath = devPath;\n let v2Description = await tryLoadPackDescription(actualDevPath);\n\n if (v2Description === undefined)\n // iterating over expected subfolder names where block developer may put root block-pack package\n for (const bpSubfolder of [\"block\", \"meta\"]) {\n actualDevPath = path.join(devPath, bpSubfolder);\n v2Description = await tryLoadPackDescription(actualDevPath);\n if (v2Description !== undefined) break;\n }\n\n if (v2Description !== undefined) {\n const mtime = await getDevV2PacketMtime(v2Description);\n\n const latestOverview: SingleBlockPackOverview = {\n id: v2Description.id,\n meta: await BlockPackMetaEmbedAbsoluteBytes.parseAsync(v2Description.meta),\n featureFlags: v2Description.featureFlags,\n spec: {\n type: \"dev-v2\",\n folder: actualDevPath,\n mtime,\n },\n };\n\n result.push({\n registryId: regEntry.id,\n id: v2Description.id,\n latestByChannel: {\n [AnyChannel]: latestOverview,\n [StableChannel]: latestOverview,\n },\n allVersions: [],\n });\n }\n }\n\n continue;\n }\n return result;\n default:\n return assertNever(regSpec);\n }\n }\n\n public async listBlockPacks(): Promise<BlockPackListing> {\n const blockPacks: BlockPackOverview[] = [];\n const registries: RegistryStatus[] = [];\n for (const regSpecs of this.registries) {\n registries.push({ ...regSpecs, status: \"online\" });\n blockPacks.push(...(await this.getPackagesForRoot(regSpecs)));\n }\n return { registries, blockPacks };\n }\n\n public async getOverview(\n registryId: string,\n blockId: BlockPackId,\n channel: string,\n ): Promise<SingleBlockPackOverview> {\n const regSpec = this.registries.find((reg) => reg.id === registryId)?.spec;\n if (!regSpec) throw new Error(`Registry with id \"${registryId}\" not found`);\n if (regSpec.type !== \"remote-v2\")\n throw new Error(\n `Only \"remote-v2\" registries support specific package version overview retrieval.`,\n );\n const reg = this.v2Provider.getRegistry(regSpec.url);\n return await reg.getSpecificOverview(blockId, channel);\n }\n}\n"],"names":[],"mappings":"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"}