@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.
- package/dist/block_registry/index.d.ts +0 -1
- package/dist/block_registry/registry-v2-provider.cjs +22 -0
- package/dist/block_registry/registry-v2-provider.cjs.map +1 -0
- package/dist/block_registry/registry-v2-provider.d.ts +0 -1
- package/dist/block_registry/registry-v2-provider.js +20 -0
- package/dist/block_registry/registry-v2-provider.js.map +1 -0
- package/dist/block_registry/registry.cjs +231 -0
- package/dist/block_registry/registry.cjs.map +1 -0
- package/dist/block_registry/registry.d.ts +0 -1
- package/dist/block_registry/registry.js +227 -0
- package/dist/block_registry/registry.js.map +1 -0
- package/dist/block_registry/registry.test.d.ts +0 -1
- package/dist/block_registry/watcher.cjs +174 -0
- package/dist/block_registry/watcher.cjs.map +1 -0
- package/dist/block_registry/watcher.d.ts +0 -1
- package/dist/block_registry/watcher.js +171 -0
- package/dist/block_registry/watcher.js.map +1 -0
- package/dist/block_registry/well_known_registries.cjs +19 -0
- package/dist/block_registry/well_known_registries.cjs.map +1 -0
- package/dist/block_registry/well_known_registries.d.ts +0 -1
- package/dist/block_registry/well_known_registries.js +15 -0
- package/dist/block_registry/well_known_registries.js.map +1 -0
- package/dist/cfg_render/executor.cjs +159 -0
- package/dist/cfg_render/executor.cjs.map +1 -0
- package/dist/cfg_render/executor.d.ts +0 -1
- package/dist/cfg_render/executor.js +156 -0
- package/dist/cfg_render/executor.js.map +1 -0
- package/dist/cfg_render/executor.test.d.ts +0 -1
- package/dist/cfg_render/operation.d.ts +0 -1
- package/dist/cfg_render/renderer.cjs +528 -0
- package/dist/cfg_render/renderer.cjs.map +1 -0
- package/dist/cfg_render/renderer.d.ts +0 -1
- package/dist/cfg_render/renderer.js +525 -0
- package/dist/cfg_render/renderer.js.map +1 -0
- package/dist/cfg_render/traverse.cjs +65 -0
- package/dist/cfg_render/traverse.cjs.map +1 -0
- package/dist/cfg_render/traverse.d.ts +0 -1
- package/dist/cfg_render/traverse.js +63 -0
- package/dist/cfg_render/traverse.js.map +1 -0
- package/dist/cfg_render/util.cjs +32 -0
- package/dist/cfg_render/util.cjs.map +1 -0
- package/dist/cfg_render/util.d.ts +0 -1
- package/dist/cfg_render/util.js +28 -0
- package/dist/cfg_render/util.js.map +1 -0
- package/dist/debug/index.cjs +21 -0
- package/dist/debug/index.cjs.map +1 -0
- package/dist/debug/index.d.ts +0 -1
- package/dist/debug/index.js +19 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/dev_env/index.cjs +59 -0
- package/dist/dev_env/index.cjs.map +1 -0
- package/dist/dev_env/index.d.ts +0 -1
- package/dist/dev_env/index.js +48 -0
- package/dist/dev_env/index.js.map +1 -0
- package/dist/dev_env/util.cjs +37 -0
- package/dist/dev_env/util.cjs.map +1 -0
- package/dist/dev_env/util.d.ts +0 -1
- package/dist/dev_env/util.js +16 -0
- package/dist/dev_env/util.js.map +1 -0
- package/dist/index.cjs +74 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +15 -75
- package/dist/index.js.map +1 -1
- package/dist/js_render/computable_context.cjs +525 -0
- package/dist/js_render/computable_context.cjs.map +1 -0
- package/dist/js_render/computable_context.d.ts +0 -1
- package/dist/js_render/computable_context.js +523 -0
- package/dist/js_render/computable_context.js.map +1 -0
- package/dist/js_render/context.cjs +229 -0
- package/dist/js_render/context.cjs.map +1 -0
- package/dist/js_render/context.d.ts +0 -1
- package/dist/js_render/context.js +226 -0
- package/dist/js_render/context.js.map +1 -0
- package/dist/js_render/index.cjs +163 -0
- package/dist/js_render/index.cjs.map +1 -0
- package/dist/js_render/index.d.ts +0 -1
- package/dist/js_render/index.js +160 -0
- package/dist/js_render/index.js.map +1 -0
- package/dist/middle_layer/active_cfg.cjs +37 -0
- package/dist/middle_layer/active_cfg.cjs.map +1 -0
- package/dist/middle_layer/active_cfg.d.ts +0 -1
- package/dist/middle_layer/active_cfg.js +35 -0
- package/dist/middle_layer/active_cfg.js.map +1 -0
- package/dist/middle_layer/block.cjs +51 -0
- package/dist/middle_layer/block.cjs.map +1 -0
- package/dist/middle_layer/block.d.ts +0 -1
- package/dist/middle_layer/block.js +48 -0
- package/dist/middle_layer/block.js.map +1 -0
- package/dist/middle_layer/block_ctx.cjs +87 -0
- package/dist/middle_layer/block_ctx.cjs.map +1 -0
- package/dist/middle_layer/block_ctx.d.ts +0 -1
- package/dist/middle_layer/block_ctx.js +84 -0
- package/dist/middle_layer/block_ctx.js.map +1 -0
- package/dist/middle_layer/block_ctx_unsafe.cjs +19 -0
- package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -0
- package/dist/middle_layer/block_ctx_unsafe.d.ts +0 -1
- package/dist/middle_layer/block_ctx_unsafe.js +16 -0
- package/dist/middle_layer/block_ctx_unsafe.js.map +1 -0
- package/dist/middle_layer/driver_kit.cjs +42 -0
- package/dist/middle_layer/driver_kit.cjs.map +1 -0
- package/dist/middle_layer/driver_kit.d.ts +0 -1
- package/dist/middle_layer/driver_kit.js +40 -0
- package/dist/middle_layer/driver_kit.js.map +1 -0
- package/dist/middle_layer/frontend_path.cjs +64 -0
- package/dist/middle_layer/frontend_path.cjs.map +1 -0
- package/dist/middle_layer/frontend_path.d.ts +0 -1
- package/dist/middle_layer/frontend_path.js +62 -0
- package/dist/middle_layer/frontend_path.js.map +1 -0
- package/dist/middle_layer/index.d.ts +0 -1
- package/dist/middle_layer/middle_layer.cjs +226 -0
- package/dist/middle_layer/middle_layer.cjs.map +1 -0
- package/dist/middle_layer/middle_layer.d.ts +0 -1
- package/dist/middle_layer/middle_layer.js +224 -0
- package/dist/middle_layer/middle_layer.js.map +1 -0
- package/dist/middle_layer/navigation_states.cjs +41 -0
- package/dist/middle_layer/navigation_states.cjs.map +1 -0
- package/dist/middle_layer/navigation_states.d.ts +0 -1
- package/dist/middle_layer/navigation_states.js +39 -0
- package/dist/middle_layer/navigation_states.js.map +1 -0
- package/dist/middle_layer/ops.cjs +75 -0
- package/dist/middle_layer/ops.cjs.map +1 -0
- package/dist/middle_layer/ops.d.ts +0 -1
- package/dist/middle_layer/ops.js +70 -0
- package/dist/middle_layer/ops.js.map +1 -0
- package/dist/middle_layer/project.cjs +446 -0
- package/dist/middle_layer/project.cjs.map +1 -0
- package/dist/middle_layer/project.d.ts +0 -1
- package/dist/middle_layer/project.js +444 -0
- package/dist/middle_layer/project.js.map +1 -0
- package/dist/middle_layer/project_list.cjs +53 -0
- package/dist/middle_layer/project_list.cjs.map +1 -0
- package/dist/middle_layer/project_list.d.ts +0 -1
- package/dist/middle_layer/project_list.js +48 -0
- package/dist/middle_layer/project_list.js.map +1 -0
- package/dist/middle_layer/project_overview.cjs +225 -0
- package/dist/middle_layer/project_overview.cjs.map +1 -0
- package/dist/middle_layer/project_overview.d.ts +0 -1
- package/dist/middle_layer/project_overview.js +204 -0
- package/dist/middle_layer/project_overview.js.map +1 -0
- package/dist/middle_layer/project_overview_light.cjs +20 -0
- package/dist/middle_layer/project_overview_light.cjs.map +1 -0
- package/dist/middle_layer/project_overview_light.d.ts +0 -1
- package/dist/middle_layer/project_overview_light.js +18 -0
- package/dist/middle_layer/project_overview_light.js.map +1 -0
- package/dist/middle_layer/render.cjs +26 -0
- package/dist/middle_layer/render.cjs.map +1 -0
- package/dist/middle_layer/render.d.ts +0 -1
- package/dist/middle_layer/render.js +23 -0
- package/dist/middle_layer/render.js.map +1 -0
- package/dist/middle_layer/render.test.d.ts +0 -1
- package/dist/middle_layer/types.d.ts +0 -1
- package/dist/middle_layer/util.cjs +22 -0
- package/dist/middle_layer/util.cjs.map +1 -0
- package/dist/middle_layer/util.d.ts +0 -1
- package/dist/middle_layer/util.js +20 -0
- package/dist/middle_layer/util.js.map +1 -0
- package/dist/model/args.cjs +62 -0
- package/dist/model/args.cjs.map +1 -0
- package/dist/model/args.d.ts +0 -1
- package/dist/model/args.js +58 -0
- package/dist/model/args.js.map +1 -0
- package/dist/model/block_pack.d.ts +0 -1
- package/dist/model/block_pack_spec.cjs +11 -0
- package/dist/model/block_pack_spec.cjs.map +1 -0
- package/dist/model/block_pack_spec.d.ts +0 -1
- package/dist/model/block_pack_spec.js +8 -0
- package/dist/model/block_pack_spec.js.map +1 -0
- package/dist/model/frontend.d.ts +0 -1
- package/dist/model/index.d.ts +0 -1
- package/dist/model/project_helper.cjs +36 -0
- package/dist/model/project_helper.cjs.map +1 -0
- package/dist/model/project_helper.d.ts +0 -1
- package/dist/model/project_helper.js +34 -0
- package/dist/model/project_helper.js.map +1 -0
- package/dist/model/project_model.cjs +74 -0
- package/dist/model/project_model.cjs.map +1 -0
- package/dist/model/project_model.d.ts +0 -1
- package/dist/model/project_model.js +54 -0
- package/dist/model/project_model.js.map +1 -0
- package/dist/model/project_model.test.d.ts +0 -1
- package/dist/model/project_model_util.cjs +176 -0
- package/dist/model/project_model_util.cjs.map +1 -0
- package/dist/model/project_model_util.d.ts +0 -1
- package/dist/model/project_model_util.js +170 -0
- package/dist/model/project_model_util.js.map +1 -0
- package/dist/model/project_model_util.test.d.ts +0 -1
- package/dist/model/project_model_v1.cjs +9 -0
- package/dist/model/project_model_v1.cjs.map +1 -0
- package/dist/model/project_model_v1.d.ts +0 -1
- package/dist/model/project_model_v1.js +6 -0
- package/dist/model/project_model_v1.js.map +1 -0
- package/dist/model/template_spec.d.ts +0 -1
- package/dist/mutator/block-pack/block_pack.cjs +233 -0
- package/dist/mutator/block-pack/block_pack.cjs.map +1 -0
- package/dist/mutator/block-pack/block_pack.d.ts +0 -1
- package/dist/mutator/block-pack/block_pack.js +227 -0
- package/dist/mutator/block-pack/block_pack.js.map +1 -0
- package/dist/mutator/block-pack/block_pack.test.d.ts +0 -1
- package/dist/mutator/block-pack/frontend.cjs +21 -0
- package/dist/mutator/block-pack/frontend.cjs.map +1 -0
- package/dist/mutator/block-pack/frontend.d.ts +0 -1
- package/dist/mutator/block-pack/frontend.js +19 -0
- package/dist/mutator/block-pack/frontend.js.map +1 -0
- package/dist/mutator/context_export.cjs +26 -0
- package/dist/mutator/context_export.cjs.map +1 -0
- package/dist/mutator/context_export.d.ts +2 -3
- package/dist/mutator/context_export.js +23 -0
- package/dist/mutator/context_export.js.map +1 -0
- package/dist/mutator/migration.cjs +57 -0
- package/dist/mutator/migration.cjs.map +1 -0
- package/dist/mutator/migration.d.ts +0 -1
- package/dist/mutator/migration.js +55 -0
- package/dist/mutator/migration.js.map +1 -0
- package/dist/mutator/project.cjs +997 -0
- package/dist/mutator/project.cjs.map +1 -0
- package/dist/mutator/project.d.ts +0 -1
- package/dist/mutator/project.js +992 -0
- package/dist/mutator/project.js.map +1 -0
- package/dist/mutator/project.test.d.ts +0 -1
- package/dist/mutator/template/direct_template_loader.cjs +146 -0
- package/dist/mutator/template/direct_template_loader.cjs.map +1 -0
- package/dist/mutator/template/direct_template_loader.d.ts +0 -1
- package/dist/mutator/template/direct_template_loader.js +143 -0
- package/dist/mutator/template/direct_template_loader.js.map +1 -0
- package/dist/mutator/template/direct_template_loader_v3.cjs +139 -0
- package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -0
- package/dist/mutator/template/direct_template_loader_v3.d.ts +0 -1
- package/dist/mutator/template/direct_template_loader_v3.js +137 -0
- package/dist/mutator/template/direct_template_loader_v3.js.map +1 -0
- package/dist/mutator/template/render_block.cjs +43 -0
- package/dist/mutator/template/render_block.cjs.map +1 -0
- package/dist/mutator/template/render_block.d.ts +0 -1
- package/dist/mutator/template/render_block.js +34 -0
- package/dist/mutator/template/render_block.js.map +1 -0
- package/dist/mutator/template/render_template.cjs +35 -0
- package/dist/mutator/template/render_template.cjs.map +1 -0
- package/dist/mutator/template/render_template.d.ts +0 -1
- package/dist/mutator/template/render_template.js +33 -0
- package/dist/mutator/template/render_template.js.map +1 -0
- package/dist/mutator/template/template_loading.cjs +71 -0
- package/dist/mutator/template/template_loading.cjs.map +1 -0
- package/dist/mutator/template/template_loading.d.ts +0 -1
- package/dist/mutator/template/template_loading.js +60 -0
- package/dist/mutator/template/template_loading.js.map +1 -0
- package/dist/mutator/template/template_render.test.d.ts +0 -1
- package/dist/network_check/network_check.cjs +267 -0
- package/dist/network_check/network_check.cjs.map +1 -0
- package/dist/network_check/network_check.d.ts +0 -1
- package/dist/network_check/network_check.js +264 -0
- package/dist/network_check/network_check.js.map +1 -0
- package/dist/network_check/network_check.test.d.ts +0 -1
- package/dist/network_check/pings.cjs +107 -0
- package/dist/network_check/pings.cjs.map +1 -0
- package/dist/network_check/pings.d.ts +0 -1
- package/dist/network_check/pings.js +96 -0
- package/dist/network_check/pings.js.map +1 -0
- package/dist/network_check/template.cjs +318 -0
- package/dist/network_check/template.cjs.map +1 -0
- package/dist/network_check/template.d.ts +0 -1
- package/dist/network_check/template.js +302 -0
- package/dist/network_check/template.js.map +1 -0
- package/dist/network_check/template.test.d.ts +0 -1
- package/dist/network_check/test_utils.d.ts +0 -1
- 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
- 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
- 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
- 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
- package/dist/pool/data.cjs +298 -0
- package/dist/pool/data.cjs.map +1 -0
- package/dist/pool/data.d.ts +7 -9
- package/dist/pool/data.js +282 -0
- package/dist/pool/data.js.map +1 -0
- package/dist/pool/driver.cjs +620 -0
- package/dist/pool/driver.cjs.map +1 -0
- package/dist/pool/driver.d.ts +0 -1
- package/dist/pool/driver.js +598 -0
- package/dist/pool/driver.js.map +1 -0
- package/dist/pool/index.d.ts +0 -1
- package/dist/pool/p_object_collection.cjs +87 -0
- package/dist/pool/p_object_collection.cjs.map +1 -0
- package/dist/pool/p_object_collection.d.ts +0 -1
- package/dist/pool/p_object_collection.js +84 -0
- package/dist/pool/p_object_collection.js.map +1 -0
- package/dist/pool/ref_count_pool.cjs +58 -0
- package/dist/pool/ref_count_pool.cjs.map +1 -0
- package/dist/pool/ref_count_pool.d.ts +0 -1
- package/dist/pool/ref_count_pool.js +56 -0
- package/dist/pool/ref_count_pool.js.map +1 -0
- package/dist/pool/result_pool.cjs +265 -0
- package/dist/pool/result_pool.cjs.map +1 -0
- package/dist/pool/result_pool.d.ts +0 -1
- package/dist/pool/result_pool.js +263 -0
- package/dist/pool/result_pool.js.map +1 -0
- package/dist/test/block_packs.d.ts +0 -1
- package/dist/test/explicit_templates.d.ts +0 -1
- package/dist/test/known_templates.d.ts +0 -1
- package/dist/test_env.d.ts +0 -1
- package/dist/worker/WorkerManager.cjs +53 -0
- package/dist/worker/WorkerManager.cjs.map +1 -0
- package/dist/worker/WorkerManager.d.ts +0 -1
- package/dist/worker/WorkerManager.js +51 -0
- package/dist/worker/WorkerManager.js.map +1 -0
- package/dist/worker/worker.cjs +16 -0
- package/dist/worker/worker.cjs.map +1 -0
- package/dist/worker/worker.d.ts +0 -1
- package/dist/worker/worker.js +14 -0
- package/dist/worker/worker.js.map +1 -0
- package/dist/worker/workerApi.cjs +20 -0
- package/dist/worker/workerApi.cjs.map +1 -0
- package/dist/worker/workerApi.d.ts +1 -3
- package/dist/worker/workerApi.js +18 -0
- package/dist/worker/workerApi.js.map +1 -0
- package/package.json +26 -34
- package/src/cfg_render/executor.test.ts +5 -4
- package/src/model/project_model.test.ts +3 -3
- package/src/model/project_model_util.test.ts +3 -2
- package/src/mutator/block-pack/block_pack.test.ts +5 -4
- package/src/mutator/project.test.ts +4 -4
- package/src/mutator/template/template_render.test.ts +7 -6
- package/src/network_check/network_check.test.ts +1 -0
- package/src/network_check/test_utils.ts +2 -0
- package/src/worker/WorkerManager.ts +6 -8
- package/dist/block_registry/index.d.ts.map +0 -1
- package/dist/block_registry/registry-v2-provider.d.ts.map +0 -1
- package/dist/block_registry/registry.d.ts.map +0 -1
- package/dist/block_registry/registry.test.d.ts.map +0 -1
- package/dist/block_registry/watcher.d.ts.map +0 -1
- package/dist/block_registry/well_known_registries.d.ts.map +0 -1
- package/dist/cfg_render/executor.d.ts.map +0 -1
- package/dist/cfg_render/executor.test.d.ts.map +0 -1
- package/dist/cfg_render/operation.d.ts.map +0 -1
- package/dist/cfg_render/renderer.d.ts.map +0 -1
- package/dist/cfg_render/traverse.d.ts.map +0 -1
- package/dist/cfg_render/util.d.ts.map +0 -1
- package/dist/debug/index.d.ts.map +0 -1
- package/dist/dev_env/index.d.ts.map +0 -1
- package/dist/dev_env/util.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.mjs +0 -6742
- package/dist/index.mjs.map +0 -1
- package/dist/js_render/computable_context.d.ts.map +0 -1
- package/dist/js_render/context.d.ts.map +0 -1
- package/dist/js_render/index.d.ts.map +0 -1
- package/dist/middle_layer/active_cfg.d.ts.map +0 -1
- package/dist/middle_layer/block.d.ts.map +0 -1
- package/dist/middle_layer/block_ctx.d.ts.map +0 -1
- package/dist/middle_layer/block_ctx_unsafe.d.ts.map +0 -1
- package/dist/middle_layer/driver_kit.d.ts.map +0 -1
- package/dist/middle_layer/frontend_path.d.ts.map +0 -1
- package/dist/middle_layer/index.d.ts.map +0 -1
- package/dist/middle_layer/middle_layer.d.ts.map +0 -1
- package/dist/middle_layer/navigation_states.d.ts.map +0 -1
- package/dist/middle_layer/ops.d.ts.map +0 -1
- package/dist/middle_layer/project.d.ts.map +0 -1
- package/dist/middle_layer/project_list.d.ts.map +0 -1
- package/dist/middle_layer/project_overview.d.ts.map +0 -1
- package/dist/middle_layer/project_overview_light.d.ts.map +0 -1
- package/dist/middle_layer/render.d.ts.map +0 -1
- package/dist/middle_layer/render.test.d.ts.map +0 -1
- package/dist/middle_layer/types.d.ts.map +0 -1
- package/dist/middle_layer/util.d.ts.map +0 -1
- package/dist/model/args.d.ts.map +0 -1
- package/dist/model/block_pack.d.ts.map +0 -1
- package/dist/model/block_pack_spec.d.ts.map +0 -1
- package/dist/model/frontend.d.ts.map +0 -1
- package/dist/model/index.d.ts.map +0 -1
- package/dist/model/project_helper.d.ts.map +0 -1
- package/dist/model/project_model.d.ts.map +0 -1
- package/dist/model/project_model.test.d.ts.map +0 -1
- package/dist/model/project_model_util.d.ts.map +0 -1
- package/dist/model/project_model_util.test.d.ts.map +0 -1
- package/dist/model/project_model_v1.d.ts.map +0 -1
- package/dist/model/template_spec.d.ts.map +0 -1
- package/dist/mutator/block-pack/block_pack.d.ts.map +0 -1
- package/dist/mutator/block-pack/block_pack.test.d.ts.map +0 -1
- package/dist/mutator/block-pack/frontend.d.ts.map +0 -1
- package/dist/mutator/context_export.d.ts.map +0 -1
- package/dist/mutator/migration.d.ts.map +0 -1
- package/dist/mutator/project.d.ts.map +0 -1
- package/dist/mutator/project.test.d.ts.map +0 -1
- package/dist/mutator/template/direct_template_loader.d.ts.map +0 -1
- package/dist/mutator/template/direct_template_loader_v3.d.ts.map +0 -1
- package/dist/mutator/template/render_block.d.ts.map +0 -1
- package/dist/mutator/template/render_template.d.ts.map +0 -1
- package/dist/mutator/template/template_loading.d.ts.map +0 -1
- package/dist/mutator/template/template_render.test.d.ts.map +0 -1
- package/dist/network_check/network_check.d.ts.map +0 -1
- package/dist/network_check/network_check.test.d.ts.map +0 -1
- package/dist/network_check/pings.d.ts.map +0 -1
- package/dist/network_check/template.d.ts.map +0 -1
- package/dist/network_check/template.test.d.ts.map +0 -1
- package/dist/network_check/test_utils.d.ts.map +0 -1
- package/dist/pool/data.d.ts.map +0 -1
- package/dist/pool/driver.d.ts.map +0 -1
- package/dist/pool/index.d.ts.map +0 -1
- package/dist/pool/p_object_collection.d.ts.map +0 -1
- package/dist/pool/ref_count_pool.d.ts.map +0 -1
- package/dist/pool/result_pool.d.ts.map +0 -1
- package/dist/test/block_packs.d.ts.map +0 -1
- package/dist/test/explicit_templates.d.ts.map +0 -1
- package/dist/test/known_templates.d.ts.map +0 -1
- package/dist/test_env.d.ts.map +0 -1
- package/dist/worker/WorkerManager.d.ts.map +0 -1
- package/dist/worker/worker.d.ts.map +0 -1
- package/dist/worker/workerApi.d.ts.map +0 -1
- package/dist/worker.js +0 -2
- package/dist/worker.js.map +0 -1
- package/dist/worker.mjs +0 -20
- package/dist/worker.mjs.map +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var blockTools = require('@platforma-sdk/block-tools');
|
|
4
|
+
|
|
5
|
+
class V2RegistryProvider {
|
|
6
|
+
http;
|
|
7
|
+
registries = new Map();
|
|
8
|
+
constructor(http) {
|
|
9
|
+
this.http = http;
|
|
10
|
+
}
|
|
11
|
+
getRegistry(url) {
|
|
12
|
+
const fromCache = this.registries.get(url);
|
|
13
|
+
if (fromCache)
|
|
14
|
+
return fromCache;
|
|
15
|
+
const newRegistry = new blockTools.RegistryV2Reader(blockTools.folderReaderByUrl(url, this.http));
|
|
16
|
+
this.registries.set(url, newRegistry);
|
|
17
|
+
return newRegistry;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
exports.V2RegistryProvider = V2RegistryProvider;
|
|
22
|
+
//# sourceMappingURL=registry-v2-provider.cjs.map
|
|
@@ -0,0 +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;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { RegistryV2Reader, folderReaderByUrl } from '@platforma-sdk/block-tools';
|
|
2
|
+
|
|
3
|
+
class V2RegistryProvider {
|
|
4
|
+
http;
|
|
5
|
+
registries = new Map();
|
|
6
|
+
constructor(http) {
|
|
7
|
+
this.http = http;
|
|
8
|
+
}
|
|
9
|
+
getRegistry(url) {
|
|
10
|
+
const fromCache = this.registries.get(url);
|
|
11
|
+
if (fromCache)
|
|
12
|
+
return fromCache;
|
|
13
|
+
const newRegistry = new RegistryV2Reader(folderReaderByUrl(url, this.http));
|
|
14
|
+
this.registries.set(url, newRegistry);
|
|
15
|
+
return newRegistry;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { V2RegistryProvider };
|
|
20
|
+
//# sourceMappingURL=registry-v2-provider.js.map
|
|
@@ -0,0 +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;;;;"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var undici = require('undici');
|
|
4
|
+
var blockTools = require('@platforma-sdk/block-tools');
|
|
5
|
+
var fs = require('node:fs');
|
|
6
|
+
var path = require('node:path');
|
|
7
|
+
var YAML = require('yaml');
|
|
8
|
+
var tsHelpers = require('@milaboratories/ts-helpers');
|
|
9
|
+
var index = require('../dev_env/index.cjs');
|
|
10
|
+
var plModelMiddleLayer = require('@milaboratories/pl-model-middle-layer');
|
|
11
|
+
|
|
12
|
+
async function getFileContent(path) {
|
|
13
|
+
try {
|
|
14
|
+
return await fs.promises.readFile(path, 'utf8');
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function getFileStat(path) {
|
|
24
|
+
try {
|
|
25
|
+
return await fs.promises.stat(path, { bigint: true });
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function getDevV1PacketMtime(devPath) {
|
|
35
|
+
let mtime = 0n;
|
|
36
|
+
for (const f of index.LegacyDevBlockPackFiles) {
|
|
37
|
+
const fullPath = path.join(devPath, ...f);
|
|
38
|
+
const stat = await getFileStat(fullPath);
|
|
39
|
+
if (stat === undefined)
|
|
40
|
+
continue;
|
|
41
|
+
if (mtime < stat.mtimeNs)
|
|
42
|
+
mtime = stat.mtimeNs;
|
|
43
|
+
}
|
|
44
|
+
return mtime.toString();
|
|
45
|
+
}
|
|
46
|
+
async function getDevV2PacketMtime(description) {
|
|
47
|
+
const wfStats = await fs.promises.stat(description.components.workflow.main.file, {
|
|
48
|
+
bigint: true,
|
|
49
|
+
});
|
|
50
|
+
const modelStats = await fs.promises.stat(description.components.model.file, { bigint: true });
|
|
51
|
+
return (wfStats.mtimeNs > modelStats.mtimeNs ? wfStats.mtimeNs : modelStats.mtimeNs).toString();
|
|
52
|
+
}
|
|
53
|
+
class BlockPackRegistry {
|
|
54
|
+
v2Provider;
|
|
55
|
+
registries;
|
|
56
|
+
http;
|
|
57
|
+
constructor(v2Provider, registries, http) {
|
|
58
|
+
this.v2Provider = v2Provider;
|
|
59
|
+
this.registries = registries;
|
|
60
|
+
this.http = http;
|
|
61
|
+
}
|
|
62
|
+
async getPackagesForRoot(regEntry) {
|
|
63
|
+
const result = [];
|
|
64
|
+
const regSpec = regEntry.spec;
|
|
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
|
+
},
|
|
87
|
+
},
|
|
88
|
+
spec: {
|
|
89
|
+
type: 'from-registry-v1',
|
|
90
|
+
id,
|
|
91
|
+
registryUrl: regSpec.url,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
result.push({
|
|
95
|
+
registryId: regEntry.id,
|
|
96
|
+
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;
|
|
105
|
+
}
|
|
106
|
+
case 'remote-v2':
|
|
107
|
+
return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks())
|
|
108
|
+
.map((e) => ({ ...e, registryId: regEntry.id }));
|
|
109
|
+
// e.latestByChannel[StableChannel]
|
|
110
|
+
// ? {
|
|
111
|
+
// ...e,
|
|
112
|
+
// registryId: regEntry.id,
|
|
113
|
+
// }
|
|
114
|
+
// : {
|
|
115
|
+
// ...e,
|
|
116
|
+
// latestByChannel: {
|
|
117
|
+
// ...e.latestByChannel,
|
|
118
|
+
// [StableChannel]: ((s: SingleBlockPackOverview) => {
|
|
119
|
+
// if (s.spec.type === 'from-registry-v2') {
|
|
120
|
+
// return { ...s, spec: { ...s.spec, channel: StableChannel } };
|
|
121
|
+
// }
|
|
122
|
+
// return s;
|
|
123
|
+
// })(e.latestByChannel[AnyChannel]),
|
|
124
|
+
// },
|
|
125
|
+
// registryId: regEntry.id,
|
|
126
|
+
// },
|
|
127
|
+
case 'local-dev':
|
|
128
|
+
for (const entry of await fs.promises.readdir(regSpec.path, { withFileTypes: true })) {
|
|
129
|
+
if (!entry.isDirectory())
|
|
130
|
+
continue;
|
|
131
|
+
const devPath = path.join(regSpec.path, entry.name);
|
|
132
|
+
const legacyYamlContent = await getFileContent(path.join(devPath, blockTools.RegistryV1.PlPackageYamlConfigFile));
|
|
133
|
+
if (legacyYamlContent !== undefined) {
|
|
134
|
+
const config = blockTools.RegistryV1.PlPackageConfigData.parse(YAML.parse(legacyYamlContent));
|
|
135
|
+
const mtime = await getDevV1PacketMtime(devPath);
|
|
136
|
+
const id = {
|
|
137
|
+
organization: config.organization,
|
|
138
|
+
name: config.package,
|
|
139
|
+
version: 'DEV',
|
|
140
|
+
};
|
|
141
|
+
const latestOverview = {
|
|
142
|
+
id,
|
|
143
|
+
meta: {
|
|
144
|
+
title: config.meta['title'] ?? 'No title',
|
|
145
|
+
description: config.meta['description'] ?? 'No Description',
|
|
146
|
+
organization: {
|
|
147
|
+
name: config.organization,
|
|
148
|
+
url: 'https://unknown.com',
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
spec: {
|
|
152
|
+
type: 'dev-v2',
|
|
153
|
+
folder: devPath,
|
|
154
|
+
mtime,
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
result.push({
|
|
158
|
+
registryId: regEntry.id,
|
|
159
|
+
id,
|
|
160
|
+
latestByChannel: {
|
|
161
|
+
[plModelMiddleLayer.AnyChannel]: latestOverview,
|
|
162
|
+
[plModelMiddleLayer.StableChannel]: latestOverview,
|
|
163
|
+
},
|
|
164
|
+
allVersions: [],
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
let actualDevPath = devPath;
|
|
169
|
+
let v2Description = await blockTools.tryLoadPackDescription(actualDevPath);
|
|
170
|
+
if (v2Description === undefined)
|
|
171
|
+
// iterating over expected subfolder names where block developer may put root block-pack package
|
|
172
|
+
for (const bpSubfolder of ['block', 'meta']) {
|
|
173
|
+
actualDevPath = path.join(devPath, bpSubfolder);
|
|
174
|
+
v2Description = await blockTools.tryLoadPackDescription(actualDevPath);
|
|
175
|
+
if (v2Description !== undefined)
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
if (v2Description !== undefined) {
|
|
179
|
+
const mtime = await getDevV2PacketMtime(v2Description);
|
|
180
|
+
const latestOverview = {
|
|
181
|
+
id: v2Description.id,
|
|
182
|
+
meta: await blockTools.BlockPackMetaEmbedAbsoluteBytes.parseAsync(v2Description.meta),
|
|
183
|
+
featureFlags: v2Description.featureFlags,
|
|
184
|
+
spec: {
|
|
185
|
+
type: 'dev-v2',
|
|
186
|
+
folder: actualDevPath,
|
|
187
|
+
mtime,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
result.push({
|
|
191
|
+
registryId: regEntry.id,
|
|
192
|
+
id: v2Description.id,
|
|
193
|
+
latestByChannel: {
|
|
194
|
+
[plModelMiddleLayer.AnyChannel]: latestOverview,
|
|
195
|
+
[plModelMiddleLayer.StableChannel]: latestOverview,
|
|
196
|
+
},
|
|
197
|
+
allVersions: [],
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
return result;
|
|
204
|
+
default:
|
|
205
|
+
return tsHelpers.assertNever(regSpec);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async listBlockPacks() {
|
|
209
|
+
const blockPacks = [];
|
|
210
|
+
const registries = [];
|
|
211
|
+
for (const regSpecs of this.registries) {
|
|
212
|
+
registries.push({ ...regSpecs, status: 'online' });
|
|
213
|
+
blockPacks.push(...(await this.getPackagesForRoot(regSpecs)));
|
|
214
|
+
}
|
|
215
|
+
return { registries, blockPacks };
|
|
216
|
+
}
|
|
217
|
+
async getOverview(registryId, blockId, channel) {
|
|
218
|
+
const regSpec = this.registries.find((reg) => reg.id === registryId)?.spec;
|
|
219
|
+
if (!regSpec)
|
|
220
|
+
throw new Error(`Registry with id "${registryId}" not found`);
|
|
221
|
+
if (regSpec.type !== 'remote-v2')
|
|
222
|
+
throw new Error(`Only "remote-v2" registries support specific package version overview retrieval.`);
|
|
223
|
+
const reg = this.v2Provider.getRegistry(regSpec.url);
|
|
224
|
+
return await reg.getSpecificOverview(blockId, channel);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
exports.BlockPackRegistry = BlockPackRegistry;
|
|
229
|
+
exports.getDevV1PacketMtime = getDevV1PacketMtime;
|
|
230
|
+
exports.getDevV2PacketMtime = getDevV2PacketMtime;
|
|
231
|
+
//# sourceMappingURL=registry.cjs.map
|
|
@@ -0,0 +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'] ?? 'No title',\n description: latestMeta['description'] ?? '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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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { request } from 'undici';
|
|
2
|
+
import { RegistryV1, tryLoadPackDescription, BlockPackMetaEmbedAbsoluteBytes } from '@platforma-sdk/block-tools';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path__default from 'node:path';
|
|
5
|
+
import YAML from 'yaml';
|
|
6
|
+
import { assertNever } from '@milaboratories/ts-helpers';
|
|
7
|
+
import { LegacyDevBlockPackFiles } from '../dev_env/index.js';
|
|
8
|
+
import { StableChannel, AnyChannel } from '@milaboratories/pl-model-middle-layer';
|
|
9
|
+
|
|
10
|
+
async function getFileContent(path) {
|
|
11
|
+
try {
|
|
12
|
+
return await fs.promises.readFile(path, 'utf8');
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function getFileStat(path) {
|
|
22
|
+
try {
|
|
23
|
+
return await fs.promises.stat(path, { bigint: true });
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function getDevV1PacketMtime(devPath) {
|
|
33
|
+
let mtime = 0n;
|
|
34
|
+
for (const f of LegacyDevBlockPackFiles) {
|
|
35
|
+
const fullPath = path__default.join(devPath, ...f);
|
|
36
|
+
const stat = await getFileStat(fullPath);
|
|
37
|
+
if (stat === undefined)
|
|
38
|
+
continue;
|
|
39
|
+
if (mtime < stat.mtimeNs)
|
|
40
|
+
mtime = stat.mtimeNs;
|
|
41
|
+
}
|
|
42
|
+
return mtime.toString();
|
|
43
|
+
}
|
|
44
|
+
async function getDevV2PacketMtime(description) {
|
|
45
|
+
const wfStats = await fs.promises.stat(description.components.workflow.main.file, {
|
|
46
|
+
bigint: true,
|
|
47
|
+
});
|
|
48
|
+
const modelStats = await fs.promises.stat(description.components.model.file, { bigint: true });
|
|
49
|
+
return (wfStats.mtimeNs > modelStats.mtimeNs ? wfStats.mtimeNs : modelStats.mtimeNs).toString();
|
|
50
|
+
}
|
|
51
|
+
class BlockPackRegistry {
|
|
52
|
+
v2Provider;
|
|
53
|
+
registries;
|
|
54
|
+
http;
|
|
55
|
+
constructor(v2Provider, registries, http) {
|
|
56
|
+
this.v2Provider = v2Provider;
|
|
57
|
+
this.registries = registries;
|
|
58
|
+
this.http = http;
|
|
59
|
+
}
|
|
60
|
+
async getPackagesForRoot(regEntry) {
|
|
61
|
+
const result = [];
|
|
62
|
+
const regSpec = regEntry.spec;
|
|
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
|
+
},
|
|
85
|
+
},
|
|
86
|
+
spec: {
|
|
87
|
+
type: 'from-registry-v1',
|
|
88
|
+
id,
|
|
89
|
+
registryUrl: regSpec.url,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
result.push({
|
|
93
|
+
registryId: regEntry.id,
|
|
94
|
+
id,
|
|
95
|
+
latestByChannel: {
|
|
96
|
+
[AnyChannel]: latestOverview,
|
|
97
|
+
[StableChannel]: latestOverview,
|
|
98
|
+
},
|
|
99
|
+
allVersions: overviewEntry.allVersions.map((v) => ({ version: v, channels: [] })),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
case 'remote-v2':
|
|
105
|
+
return (await this.v2Provider.getRegistry(regSpec.url).listBlockPacks())
|
|
106
|
+
.map((e) => ({ ...e, registryId: regEntry.id }));
|
|
107
|
+
// e.latestByChannel[StableChannel]
|
|
108
|
+
// ? {
|
|
109
|
+
// ...e,
|
|
110
|
+
// registryId: regEntry.id,
|
|
111
|
+
// }
|
|
112
|
+
// : {
|
|
113
|
+
// ...e,
|
|
114
|
+
// latestByChannel: {
|
|
115
|
+
// ...e.latestByChannel,
|
|
116
|
+
// [StableChannel]: ((s: SingleBlockPackOverview) => {
|
|
117
|
+
// if (s.spec.type === 'from-registry-v2') {
|
|
118
|
+
// return { ...s, spec: { ...s.spec, channel: StableChannel } };
|
|
119
|
+
// }
|
|
120
|
+
// return s;
|
|
121
|
+
// })(e.latestByChannel[AnyChannel]),
|
|
122
|
+
// },
|
|
123
|
+
// registryId: regEntry.id,
|
|
124
|
+
// },
|
|
125
|
+
case 'local-dev':
|
|
126
|
+
for (const entry of await fs.promises.readdir(regSpec.path, { withFileTypes: true })) {
|
|
127
|
+
if (!entry.isDirectory())
|
|
128
|
+
continue;
|
|
129
|
+
const devPath = path__default.join(regSpec.path, entry.name);
|
|
130
|
+
const legacyYamlContent = await getFileContent(path__default.join(devPath, RegistryV1.PlPackageYamlConfigFile));
|
|
131
|
+
if (legacyYamlContent !== undefined) {
|
|
132
|
+
const config = RegistryV1.PlPackageConfigData.parse(YAML.parse(legacyYamlContent));
|
|
133
|
+
const mtime = await getDevV1PacketMtime(devPath);
|
|
134
|
+
const id = {
|
|
135
|
+
organization: config.organization,
|
|
136
|
+
name: config.package,
|
|
137
|
+
version: 'DEV',
|
|
138
|
+
};
|
|
139
|
+
const latestOverview = {
|
|
140
|
+
id,
|
|
141
|
+
meta: {
|
|
142
|
+
title: config.meta['title'] ?? 'No title',
|
|
143
|
+
description: config.meta['description'] ?? 'No Description',
|
|
144
|
+
organization: {
|
|
145
|
+
name: config.organization,
|
|
146
|
+
url: 'https://unknown.com',
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
spec: {
|
|
150
|
+
type: 'dev-v2',
|
|
151
|
+
folder: devPath,
|
|
152
|
+
mtime,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
result.push({
|
|
156
|
+
registryId: regEntry.id,
|
|
157
|
+
id,
|
|
158
|
+
latestByChannel: {
|
|
159
|
+
[AnyChannel]: latestOverview,
|
|
160
|
+
[StableChannel]: latestOverview,
|
|
161
|
+
},
|
|
162
|
+
allVersions: [],
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
let actualDevPath = devPath;
|
|
167
|
+
let v2Description = await tryLoadPackDescription(actualDevPath);
|
|
168
|
+
if (v2Description === undefined)
|
|
169
|
+
// iterating over expected subfolder names where block developer may put root block-pack package
|
|
170
|
+
for (const bpSubfolder of ['block', 'meta']) {
|
|
171
|
+
actualDevPath = path__default.join(devPath, bpSubfolder);
|
|
172
|
+
v2Description = await tryLoadPackDescription(actualDevPath);
|
|
173
|
+
if (v2Description !== undefined)
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
if (v2Description !== undefined) {
|
|
177
|
+
const mtime = await getDevV2PacketMtime(v2Description);
|
|
178
|
+
const latestOverview = {
|
|
179
|
+
id: v2Description.id,
|
|
180
|
+
meta: await BlockPackMetaEmbedAbsoluteBytes.parseAsync(v2Description.meta),
|
|
181
|
+
featureFlags: v2Description.featureFlags,
|
|
182
|
+
spec: {
|
|
183
|
+
type: 'dev-v2',
|
|
184
|
+
folder: actualDevPath,
|
|
185
|
+
mtime,
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
result.push({
|
|
189
|
+
registryId: regEntry.id,
|
|
190
|
+
id: v2Description.id,
|
|
191
|
+
latestByChannel: {
|
|
192
|
+
[AnyChannel]: latestOverview,
|
|
193
|
+
[StableChannel]: latestOverview,
|
|
194
|
+
},
|
|
195
|
+
allVersions: [],
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
return result;
|
|
202
|
+
default:
|
|
203
|
+
return assertNever(regSpec);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
async listBlockPacks() {
|
|
207
|
+
const blockPacks = [];
|
|
208
|
+
const registries = [];
|
|
209
|
+
for (const regSpecs of this.registries) {
|
|
210
|
+
registries.push({ ...regSpecs, status: 'online' });
|
|
211
|
+
blockPacks.push(...(await this.getPackagesForRoot(regSpecs)));
|
|
212
|
+
}
|
|
213
|
+
return { registries, blockPacks };
|
|
214
|
+
}
|
|
215
|
+
async getOverview(registryId, blockId, channel) {
|
|
216
|
+
const regSpec = this.registries.find((reg) => reg.id === registryId)?.spec;
|
|
217
|
+
if (!regSpec)
|
|
218
|
+
throw new Error(`Registry with id "${registryId}" not found`);
|
|
219
|
+
if (regSpec.type !== 'remote-v2')
|
|
220
|
+
throw new Error(`Only "remote-v2" registries support specific package version overview retrieval.`);
|
|
221
|
+
const reg = this.v2Provider.getRegistry(regSpec.url);
|
|
222
|
+
return await reg.getSpecificOverview(blockId, channel);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export { BlockPackRegistry, getDevV1PacketMtime, getDevV2PacketMtime };
|
|
227
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +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'] ?? 'No title',\n description: latestMeta['description'] ?? '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":["path"],"mappings":"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"}
|