@milaboratories/pl-middle-layer 1.42.2 → 1.42.4
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 +25 -33
- 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,226 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var plClient = require('@milaboratories/pl-client');
|
|
4
|
+
var project_list = require('./project_list.cjs');
|
|
5
|
+
var project = require('../mutator/project.cjs');
|
|
6
|
+
var block_pack = require('../mutator/block-pack/block_pack.cjs');
|
|
7
|
+
var tsHelpers = require('@milaboratories/ts-helpers');
|
|
8
|
+
var computable = require('@milaboratories/computable');
|
|
9
|
+
var project$1 = require('./project.cjs');
|
|
10
|
+
var ops = require('./ops.cjs');
|
|
11
|
+
var node_crypto = require('node:crypto');
|
|
12
|
+
var watcher = require('../block_registry/watcher.cjs');
|
|
13
|
+
var quickjsEmscripten = require('quickjs-emscripten');
|
|
14
|
+
var driver_kit = require('./driver_kit.cjs');
|
|
15
|
+
var model = require('@platforma-sdk/model');
|
|
16
|
+
var undici = require('undici');
|
|
17
|
+
require('@platforma-sdk/block-tools');
|
|
18
|
+
require('yaml');
|
|
19
|
+
require('../dev_env/index.cjs');
|
|
20
|
+
require('@milaboratories/pl-model-middle-layer');
|
|
21
|
+
var registryV2Provider = require('../block_registry/registry-v2-provider.cjs');
|
|
22
|
+
var index = require('../debug/index.cjs');
|
|
23
|
+
var project_helper = require('../model/project_helper.cjs');
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Main access object to work with pl from UI.
|
|
27
|
+
*
|
|
28
|
+
* It implements an abstraction layer of projects and blocks.
|
|
29
|
+
*
|
|
30
|
+
* As a main entry point inside the pl, this object uses a resource attached
|
|
31
|
+
* via the {@link ProjectsField} to the pl client's root, this resource
|
|
32
|
+
* contains project list.
|
|
33
|
+
*
|
|
34
|
+
* Read about alternative roots, if isolated project lists (working environments)
|
|
35
|
+
* are required.
|
|
36
|
+
* */
|
|
37
|
+
class MiddleLayer {
|
|
38
|
+
env;
|
|
39
|
+
driverKit;
|
|
40
|
+
signer;
|
|
41
|
+
projectListResourceId;
|
|
42
|
+
openedProjectsList;
|
|
43
|
+
projectListTree;
|
|
44
|
+
blockRegistryProvider;
|
|
45
|
+
pl;
|
|
46
|
+
/** Contains a reactive list of projects along with their meta information. */
|
|
47
|
+
projectList;
|
|
48
|
+
constructor(env, driverKit, signer, projectListResourceId, openedProjectsList, projectListTree, blockRegistryProvider, projectList) {
|
|
49
|
+
this.env = env;
|
|
50
|
+
this.driverKit = driverKit;
|
|
51
|
+
this.signer = signer;
|
|
52
|
+
this.projectListResourceId = projectListResourceId;
|
|
53
|
+
this.openedProjectsList = openedProjectsList;
|
|
54
|
+
this.projectListTree = projectListTree;
|
|
55
|
+
this.blockRegistryProvider = blockRegistryProvider;
|
|
56
|
+
this.projectList = projectList;
|
|
57
|
+
this.pl = this.env.pl;
|
|
58
|
+
}
|
|
59
|
+
/** Adds a runtime capability to the middle layer. */
|
|
60
|
+
addRuntimeCapability(requirement, value = true) {
|
|
61
|
+
this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);
|
|
62
|
+
}
|
|
63
|
+
/** Returns extended API driver kit used internally by middle layer. */
|
|
64
|
+
get internalDriverKit() {
|
|
65
|
+
return this.env.driverKit;
|
|
66
|
+
}
|
|
67
|
+
//
|
|
68
|
+
// Project List Manipulation
|
|
69
|
+
//
|
|
70
|
+
/** Creates a project with initial state and adds it to project list. */
|
|
71
|
+
async createProject(meta, id = node_crypto.randomUUID()) {
|
|
72
|
+
const resource = await this.pl.withWriteTx('MLCreateProject', async (tx) => {
|
|
73
|
+
const prj = await project.createProject(tx, meta);
|
|
74
|
+
tx.createField(plClient.field(this.projectListResourceId, id), 'Dynamic', prj);
|
|
75
|
+
await tx.commit();
|
|
76
|
+
return await plClient.toGlobalResourceId(prj);
|
|
77
|
+
});
|
|
78
|
+
await this.projectListTree.refreshState();
|
|
79
|
+
return resource;
|
|
80
|
+
}
|
|
81
|
+
/** Updates project metadata */
|
|
82
|
+
async setProjectMeta(rid, meta, author) {
|
|
83
|
+
await project.withProjectAuthored(this.env.projectHelper, this.pl, rid, author, (prj) => {
|
|
84
|
+
prj.setMeta(meta);
|
|
85
|
+
});
|
|
86
|
+
await this.projectListTree.refreshState();
|
|
87
|
+
}
|
|
88
|
+
/** Permanently deletes project from the project list, this will result in
|
|
89
|
+
* destruction of all attached objects, like files, analysis results etc. */
|
|
90
|
+
async deleteProject(id) {
|
|
91
|
+
await this.pl.withWriteTx('MLRemoveProject', async (tx) => {
|
|
92
|
+
tx.removeField(plClient.field(this.projectListResourceId, id));
|
|
93
|
+
await tx.commit();
|
|
94
|
+
});
|
|
95
|
+
await this.projectListTree.refreshState();
|
|
96
|
+
}
|
|
97
|
+
//
|
|
98
|
+
// Projects
|
|
99
|
+
//
|
|
100
|
+
openedProjectsByRid = new Map();
|
|
101
|
+
async projectIdToResourceId(id) {
|
|
102
|
+
return await this.pl.withReadTx('Project id to resource id', async (tx) => {
|
|
103
|
+
const rid = (await tx.getField(plClient.field(this.projectListResourceId, id))).value;
|
|
104
|
+
if (plClient.isNullResourceId(rid))
|
|
105
|
+
throw new Error('Unexpected project list structure.');
|
|
106
|
+
return rid;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async ensureProjectRid(id) {
|
|
110
|
+
if (typeof id === 'string')
|
|
111
|
+
return await this.projectIdToResourceId(id);
|
|
112
|
+
else
|
|
113
|
+
return id;
|
|
114
|
+
}
|
|
115
|
+
/** Opens a project, and starts corresponding project maintenance loop. */
|
|
116
|
+
async openProject(id) {
|
|
117
|
+
const rid = await this.ensureProjectRid(id);
|
|
118
|
+
if (this.openedProjectsByRid.has(rid))
|
|
119
|
+
throw new Error(`Project ${rid} already opened`);
|
|
120
|
+
this.openedProjectsByRid.set(rid, await project$1.Project.init(this.env, rid));
|
|
121
|
+
this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);
|
|
122
|
+
}
|
|
123
|
+
/** Closes the project, and deallocate all corresponding resources. */
|
|
124
|
+
async closeProject(rid) {
|
|
125
|
+
const prj = this.openedProjectsByRid.get(rid);
|
|
126
|
+
if (prj === undefined)
|
|
127
|
+
throw new Error(`Project ${rid} not found among opened projects`);
|
|
128
|
+
this.openedProjectsByRid.delete(rid);
|
|
129
|
+
await prj.destroy();
|
|
130
|
+
this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);
|
|
131
|
+
}
|
|
132
|
+
/** Returns a project access object for opened project, for the given project
|
|
133
|
+
* resource id. */
|
|
134
|
+
getOpenedProject(rid) {
|
|
135
|
+
const prj = this.openedProjectsByRid.get(rid);
|
|
136
|
+
if (prj === undefined)
|
|
137
|
+
throw new Error(`Project ${rid} not found among opened projects`);
|
|
138
|
+
return prj;
|
|
139
|
+
}
|
|
140
|
+
/** Deallocates all runtime resources consumed by this object and awaits
|
|
141
|
+
* actual termination of event loops and other processes associated with
|
|
142
|
+
* them. */
|
|
143
|
+
async close() {
|
|
144
|
+
await Promise.all([...this.openedProjectsByRid.values()].map((prj) => prj.destroy()));
|
|
145
|
+
// this.env.quickJs;
|
|
146
|
+
await this.projectListTree.terminate();
|
|
147
|
+
await this.env.retryHttpDispatcher.destroy();
|
|
148
|
+
await this.pl.close();
|
|
149
|
+
}
|
|
150
|
+
/** @deprecated */
|
|
151
|
+
async closeAndAwaitTermination() {
|
|
152
|
+
await this.close();
|
|
153
|
+
}
|
|
154
|
+
/** Generates sufficiently random string to be used as local secret for the
|
|
155
|
+
* middle layer */
|
|
156
|
+
static generateLocalSecret() {
|
|
157
|
+
return tsHelpers.HmacSha256Signer.generateSecret();
|
|
158
|
+
}
|
|
159
|
+
/** Returns a block event dispatcher, which can be used to listen to block events. */
|
|
160
|
+
get blockEventDispatcher() {
|
|
161
|
+
return this.env.blockEventDispatcher;
|
|
162
|
+
}
|
|
163
|
+
/** Initialize middle layer */
|
|
164
|
+
static async init(pl, workdir, _ops) {
|
|
165
|
+
const ops$1 = {
|
|
166
|
+
...ops.DefaultMiddleLayerOpsSettings,
|
|
167
|
+
...ops.DefaultMiddleLayerOpsPaths(workdir),
|
|
168
|
+
..._ops,
|
|
169
|
+
};
|
|
170
|
+
// overriding debug options from environment variables
|
|
171
|
+
ops$1.defaultTreeOptions.logStat = index.getDebugFlags().logTreeStats;
|
|
172
|
+
ops$1.debugOps.dumpInitialTreeState = index.getDebugFlags().dumpInitialTreeState;
|
|
173
|
+
const projects = await pl.withWriteTx('MLInitialization', async (tx) => {
|
|
174
|
+
const projectsField = plClient.field(tx.clientRoot, project_list.ProjectsField);
|
|
175
|
+
tx.createField(projectsField, 'Dynamic');
|
|
176
|
+
const projectsFieldData = await tx.getField(projectsField);
|
|
177
|
+
if (plClient.isNullResourceId(projectsFieldData.value)) {
|
|
178
|
+
const projects = tx.createEphemeral(project_list.ProjectsResourceType);
|
|
179
|
+
tx.lock(projects);
|
|
180
|
+
tx.setField(projectsField, projects);
|
|
181
|
+
await tx.commit();
|
|
182
|
+
return await projects.globalId;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
return projectsFieldData.value;
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
const logger = ops$1.logger;
|
|
189
|
+
const driverKit = await driver_kit.initDriverKit(pl, workdir, ops$1.frontendDownloadPath, ops$1);
|
|
190
|
+
// passed to components having no own retry logic
|
|
191
|
+
const retryHttpDispatcher = new undici.RetryAgent(pl.httpDispatcher);
|
|
192
|
+
const v2RegistryProvider = new registryV2Provider.V2RegistryProvider(retryHttpDispatcher);
|
|
193
|
+
const bpPreparer = new block_pack.BlockPackPreparer(v2RegistryProvider, driverKit.signer, retryHttpDispatcher);
|
|
194
|
+
const quickJs = await quickjsEmscripten.getQuickJS();
|
|
195
|
+
const runtimeCapabilities = new model.RuntimeCapabilities();
|
|
196
|
+
// add runtime capabilities of model here
|
|
197
|
+
runtimeCapabilities.addSupportedRequirement('requiresModelAPIVersion', 1);
|
|
198
|
+
// runtime capabilities of the desktop are to be added by the desktop app / test framework
|
|
199
|
+
const env = {
|
|
200
|
+
pl,
|
|
201
|
+
blockEventDispatcher: new tsHelpers.BlockEventDispatcher(),
|
|
202
|
+
signer: driverKit.signer,
|
|
203
|
+
logger,
|
|
204
|
+
httpDispatcher: pl.httpDispatcher,
|
|
205
|
+
retryHttpDispatcher: retryHttpDispatcher,
|
|
206
|
+
ops: ops$1,
|
|
207
|
+
bpPreparer,
|
|
208
|
+
frontendDownloadDriver: driverKit.frontendDriver,
|
|
209
|
+
driverKit,
|
|
210
|
+
blockUpdateWatcher: new watcher.BlockUpdateWatcher(v2RegistryProvider, logger, {
|
|
211
|
+
minDelay: ops$1.devBlockUpdateRecheckInterval,
|
|
212
|
+
http: retryHttpDispatcher,
|
|
213
|
+
preferredUpdateChannel: ops$1.preferredUpdateChannel,
|
|
214
|
+
}),
|
|
215
|
+
runtimeCapabilities,
|
|
216
|
+
quickJs,
|
|
217
|
+
projectHelper: new project_helper.ProjectHelper(quickJs),
|
|
218
|
+
};
|
|
219
|
+
const openedProjects = new computable.WatchableValue([]);
|
|
220
|
+
const projectListTC = await project_list.createProjectList(pl, projects, openedProjects, env);
|
|
221
|
+
return new MiddleLayer(env, driverKit, driverKit.signer, projects, openedProjects, projectListTC.tree, v2RegistryProvider, projectListTC.computable);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
exports.MiddleLayer = MiddleLayer;
|
|
226
|
+
//# sourceMappingURL=middle_layer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middle_layer.cjs","sources":["../../src/middle_layer/middle_layer.ts"],"sourcesContent":["import type {\n PlClient,\n ResourceId } from '@milaboratories/pl-client';\nimport {\n field,\n isNullResourceId,\n toGlobalResourceId,\n} from '@milaboratories/pl-client';\nimport { createProjectList, ProjectsField, ProjectsResourceType } from './project_list';\nimport { createProject, withProjectAuthored } from '../mutator/project';\nimport type { SynchronizedTreeState } from '@milaboratories/pl-tree';\nimport { BlockPackPreparer } from '../mutator/block-pack/block_pack';\nimport type { MiLogger, Signer } from '@milaboratories/ts-helpers';\nimport { BlockEventDispatcher } from '@milaboratories/ts-helpers';\nimport { HmacSha256Signer } from '@milaboratories/ts-helpers';\nimport type { ComputableStableDefined } from '@milaboratories/computable';\nimport { WatchableValue } from '@milaboratories/computable';\nimport { Project } from './project';\nimport type {\n MiddleLayerOps,\n MiddleLayerOpsConstructor,\n} from './ops';\nimport {\n DefaultMiddleLayerOpsPaths,\n DefaultMiddleLayerOpsSettings,\n} from './ops';\nimport { randomUUID } from 'node:crypto';\nimport type { ProjectListEntry } from '../model';\nimport type { AuthorMarker, ProjectMeta } from '@milaboratories/pl-model-middle-layer';\nimport { BlockUpdateWatcher } from '../block_registry/watcher';\nimport type { QuickJSWASMModule } from 'quickjs-emscripten';\nimport { getQuickJS } from 'quickjs-emscripten';\nimport type { MiddleLayerDriverKit } from './driver_kit';\nimport { initDriverKit } from './driver_kit';\nimport type { DriverKit, SupportedRequirement } from '@platforma-sdk/model';\nimport { RuntimeCapabilities } from '@platforma-sdk/model';\nimport type { DownloadUrlDriver } from '@milaboratories/pl-drivers';\nimport { V2RegistryProvider } from '../block_registry';\nimport type { Dispatcher } from 'undici';\nimport { RetryAgent } from 'undici';\nimport { getDebugFlags } from '../debug';\nimport { ProjectHelper } from '../model/project_helper';\n\nexport interface MiddleLayerEnvironment {\n readonly pl: PlClient;\n readonly runtimeCapabilities: RuntimeCapabilities;\n readonly logger: MiLogger;\n readonly blockEventDispatcher: BlockEventDispatcher;\n readonly httpDispatcher: Dispatcher;\n readonly retryHttpDispatcher: Dispatcher;\n readonly signer: Signer;\n readonly ops: MiddleLayerOps;\n readonly bpPreparer: BlockPackPreparer;\n readonly frontendDownloadDriver: DownloadUrlDriver;\n readonly blockUpdateWatcher: BlockUpdateWatcher;\n readonly quickJs: QuickJSWASMModule;\n readonly driverKit: MiddleLayerDriverKit;\n readonly projectHelper: ProjectHelper;\n}\n\n/**\n * Main access object to work with pl from UI.\n *\n * It implements an abstraction layer of projects and blocks.\n *\n * As a main entry point inside the pl, this object uses a resource attached\n * via the {@link ProjectsField} to the pl client's root, this resource\n * contains project list.\n *\n * Read about alternative roots, if isolated project lists (working environments)\n * are required.\n * */\nexport class MiddleLayer {\n private readonly pl: PlClient;\n\n /** Contains a reactive list of projects along with their meta information. */\n public readonly projectList: ComputableStableDefined<ProjectListEntry[]>;\n\n private constructor(\n private readonly env: MiddleLayerEnvironment,\n public readonly driverKit: DriverKit,\n public readonly signer: Signer,\n private readonly projectListResourceId: ResourceId,\n private readonly openedProjectsList: WatchableValue<ResourceId[]>,\n private readonly projectListTree: SynchronizedTreeState,\n public readonly blockRegistryProvider: V2RegistryProvider,\n projectList: ComputableStableDefined<ProjectListEntry[]>,\n ) {\n this.projectList = projectList;\n this.pl = this.env.pl;\n }\n\n /** Adds a runtime capability to the middle layer. */\n public addRuntimeCapability(requirement: SupportedRequirement, value: number | boolean = true): void {\n this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);\n }\n\n /** Returns extended API driver kit used internally by middle layer. */\n public get internalDriverKit(): MiddleLayerDriverKit {\n return this.env.driverKit;\n }\n\n //\n // Project List Manipulation\n //\n\n /** Creates a project with initial state and adds it to project list. */\n public async createProject(meta: ProjectMeta, id: string = randomUUID()): Promise<ResourceId> {\n const resource = await this.pl.withWriteTx('MLCreateProject', async (tx) => {\n const prj = await createProject(tx, meta);\n tx.createField(field(this.projectListResourceId, id), 'Dynamic', prj);\n await tx.commit();\n return await toGlobalResourceId(prj);\n });\n await this.projectListTree.refreshState();\n return resource;\n }\n\n /** Updates project metadata */\n public async setProjectMeta(\n rid: ResourceId,\n meta: ProjectMeta,\n author?: AuthorMarker,\n ): Promise<void> {\n await withProjectAuthored(this.env.projectHelper, this.pl, rid, author, (prj) => {\n prj.setMeta(meta);\n });\n await this.projectListTree.refreshState();\n }\n\n /** Permanently deletes project from the project list, this will result in\n * destruction of all attached objects, like files, analysis results etc. */\n public async deleteProject(id: string): Promise<void> {\n await this.pl.withWriteTx('MLRemoveProject', async (tx) => {\n tx.removeField(field(this.projectListResourceId, id));\n await tx.commit();\n });\n await this.projectListTree.refreshState();\n }\n\n //\n // Projects\n //\n\n private readonly openedProjectsByRid = new Map<ResourceId, Project>();\n\n private async projectIdToResourceId(id: string): Promise<ResourceId> {\n return await this.pl.withReadTx('Project id to resource id', async (tx) => {\n const rid = (await tx.getField(field(this.projectListResourceId, id))).value;\n if (isNullResourceId(rid)) throw new Error('Unexpected project list structure.');\n return rid;\n });\n }\n\n private async ensureProjectRid(id: ResourceId | string): Promise<ResourceId> {\n if (typeof id === 'string') return await this.projectIdToResourceId(id);\n else return id;\n }\n\n /** Opens a project, and starts corresponding project maintenance loop. */\n public async openProject(id: ResourceId | string) {\n const rid = await this.ensureProjectRid(id);\n if (this.openedProjectsByRid.has(rid)) throw new Error(`Project ${rid} already opened`);\n this.openedProjectsByRid.set(rid, await Project.init(this.env, rid));\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Closes the project, and deallocate all corresponding resources. */\n public async closeProject(rid: ResourceId): Promise<void> {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n this.openedProjectsByRid.delete(rid);\n await prj.destroy();\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Returns a project access object for opened project, for the given project\n * resource id. */\n public getOpenedProject(rid: ResourceId): Project {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n return prj;\n }\n\n /** Deallocates all runtime resources consumed by this object and awaits\n * actual termination of event loops and other processes associated with\n * them. */\n public async close() {\n await Promise.all([...this.openedProjectsByRid.values()].map((prj) => prj.destroy()));\n // this.env.quickJs;\n await this.projectListTree.terminate();\n await this.env.retryHttpDispatcher.destroy();\n await this.pl.close();\n }\n\n /** @deprecated */\n public async closeAndAwaitTermination() {\n await this.close();\n }\n\n /** Generates sufficiently random string to be used as local secret for the\n * middle layer */\n public static generateLocalSecret(): string {\n return HmacSha256Signer.generateSecret();\n }\n\n /** Returns a block event dispatcher, which can be used to listen to block events. */\n public get blockEventDispatcher(): BlockEventDispatcher {\n return this.env.blockEventDispatcher;\n }\n\n /** Initialize middle layer */\n public static async init(\n pl: PlClient,\n workdir: string,\n _ops: MiddleLayerOpsConstructor,\n ): Promise<MiddleLayer> {\n const ops: MiddleLayerOps = {\n ...DefaultMiddleLayerOpsSettings,\n ...DefaultMiddleLayerOpsPaths(workdir),\n ..._ops,\n };\n\n // overriding debug options from environment variables\n ops.defaultTreeOptions.logStat = getDebugFlags().logTreeStats;\n ops.debugOps.dumpInitialTreeState = getDebugFlags().dumpInitialTreeState;\n\n const projects = await pl.withWriteTx('MLInitialization', async (tx) => {\n const projectsField = field(tx.clientRoot, ProjectsField);\n tx.createField(projectsField, 'Dynamic');\n const projectsFieldData = await tx.getField(projectsField);\n if (isNullResourceId(projectsFieldData.value)) {\n const projects = tx.createEphemeral(ProjectsResourceType);\n tx.lock(projects);\n\n tx.setField(projectsField, projects);\n\n await tx.commit();\n\n return await projects.globalId;\n } else {\n return projectsFieldData.value;\n }\n });\n\n const logger = ops.logger;\n\n const driverKit = await initDriverKit(pl, workdir, ops.frontendDownloadPath, ops);\n\n // passed to components having no own retry logic\n const retryHttpDispatcher = new RetryAgent(pl.httpDispatcher);\n\n const v2RegistryProvider = new V2RegistryProvider(retryHttpDispatcher);\n\n const bpPreparer = new BlockPackPreparer(\n v2RegistryProvider,\n driverKit.signer,\n retryHttpDispatcher,\n );\n\n const quickJs = await getQuickJS();\n\n const runtimeCapabilities = new RuntimeCapabilities();\n // add runtime capabilities of model here\n runtimeCapabilities.addSupportedRequirement('requiresModelAPIVersion', 1);\n // runtime capabilities of the desktop are to be added by the desktop app / test framework\n\n const env: MiddleLayerEnvironment = {\n pl,\n blockEventDispatcher: new BlockEventDispatcher(),\n signer: driverKit.signer,\n logger,\n httpDispatcher: pl.httpDispatcher,\n retryHttpDispatcher: retryHttpDispatcher,\n ops,\n bpPreparer,\n frontendDownloadDriver: driverKit.frontendDriver,\n driverKit,\n blockUpdateWatcher: new BlockUpdateWatcher(v2RegistryProvider, logger, {\n minDelay: ops.devBlockUpdateRecheckInterval,\n http: retryHttpDispatcher,\n preferredUpdateChannel: ops.preferredUpdateChannel,\n }),\n runtimeCapabilities,\n quickJs,\n projectHelper: new ProjectHelper(quickJs),\n };\n\n const openedProjects = new WatchableValue<ResourceId[]>([]);\n const projectListTC = await createProjectList(pl, projects, openedProjects, env);\n\n return new MiddleLayer(\n env,\n driverKit,\n driverKit.signer,\n projects,\n openedProjects,\n projectListTC.tree,\n v2RegistryProvider,\n projectListTC.computable,\n );\n }\n}\n"],"names":["randomUUID","createProject","field","toGlobalResourceId","withProjectAuthored","isNullResourceId","Project","HmacSha256Signer","ops","DefaultMiddleLayerOpsSettings","DefaultMiddleLayerOpsPaths","getDebugFlags","ProjectsField","ProjectsResourceType","initDriverKit","RetryAgent","V2RegistryProvider","BlockPackPreparer","getQuickJS","RuntimeCapabilities","BlockEventDispatcher","BlockUpdateWatcher","ProjectHelper","WatchableValue","createProjectList"],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { field, toGlobalResourceId, isNullResourceId } from '@milaboratories/pl-client';
|
|
2
|
+
import { ProjectsField, ProjectsResourceType, createProjectList } from './project_list.js';
|
|
3
|
+
import { createProject, withProjectAuthored } from '../mutator/project.js';
|
|
4
|
+
import { BlockPackPreparer } from '../mutator/block-pack/block_pack.js';
|
|
5
|
+
import { HmacSha256Signer, BlockEventDispatcher } from '@milaboratories/ts-helpers';
|
|
6
|
+
import { WatchableValue } from '@milaboratories/computable';
|
|
7
|
+
import { Project } from './project.js';
|
|
8
|
+
import { DefaultMiddleLayerOpsPaths, DefaultMiddleLayerOpsSettings } from './ops.js';
|
|
9
|
+
import { randomUUID } from 'node:crypto';
|
|
10
|
+
import { BlockUpdateWatcher } from '../block_registry/watcher.js';
|
|
11
|
+
import { getQuickJS } from 'quickjs-emscripten';
|
|
12
|
+
import { initDriverKit } from './driver_kit.js';
|
|
13
|
+
import { RuntimeCapabilities } from '@platforma-sdk/model';
|
|
14
|
+
import { RetryAgent } from 'undici';
|
|
15
|
+
import '@platforma-sdk/block-tools';
|
|
16
|
+
import 'yaml';
|
|
17
|
+
import '../dev_env/index.js';
|
|
18
|
+
import '@milaboratories/pl-model-middle-layer';
|
|
19
|
+
import { V2RegistryProvider } from '../block_registry/registry-v2-provider.js';
|
|
20
|
+
import { getDebugFlags } from '../debug/index.js';
|
|
21
|
+
import { ProjectHelper } from '../model/project_helper.js';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Main access object to work with pl from UI.
|
|
25
|
+
*
|
|
26
|
+
* It implements an abstraction layer of projects and blocks.
|
|
27
|
+
*
|
|
28
|
+
* As a main entry point inside the pl, this object uses a resource attached
|
|
29
|
+
* via the {@link ProjectsField} to the pl client's root, this resource
|
|
30
|
+
* contains project list.
|
|
31
|
+
*
|
|
32
|
+
* Read about alternative roots, if isolated project lists (working environments)
|
|
33
|
+
* are required.
|
|
34
|
+
* */
|
|
35
|
+
class MiddleLayer {
|
|
36
|
+
env;
|
|
37
|
+
driverKit;
|
|
38
|
+
signer;
|
|
39
|
+
projectListResourceId;
|
|
40
|
+
openedProjectsList;
|
|
41
|
+
projectListTree;
|
|
42
|
+
blockRegistryProvider;
|
|
43
|
+
pl;
|
|
44
|
+
/** Contains a reactive list of projects along with their meta information. */
|
|
45
|
+
projectList;
|
|
46
|
+
constructor(env, driverKit, signer, projectListResourceId, openedProjectsList, projectListTree, blockRegistryProvider, projectList) {
|
|
47
|
+
this.env = env;
|
|
48
|
+
this.driverKit = driverKit;
|
|
49
|
+
this.signer = signer;
|
|
50
|
+
this.projectListResourceId = projectListResourceId;
|
|
51
|
+
this.openedProjectsList = openedProjectsList;
|
|
52
|
+
this.projectListTree = projectListTree;
|
|
53
|
+
this.blockRegistryProvider = blockRegistryProvider;
|
|
54
|
+
this.projectList = projectList;
|
|
55
|
+
this.pl = this.env.pl;
|
|
56
|
+
}
|
|
57
|
+
/** Adds a runtime capability to the middle layer. */
|
|
58
|
+
addRuntimeCapability(requirement, value = true) {
|
|
59
|
+
this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);
|
|
60
|
+
}
|
|
61
|
+
/** Returns extended API driver kit used internally by middle layer. */
|
|
62
|
+
get internalDriverKit() {
|
|
63
|
+
return this.env.driverKit;
|
|
64
|
+
}
|
|
65
|
+
//
|
|
66
|
+
// Project List Manipulation
|
|
67
|
+
//
|
|
68
|
+
/** Creates a project with initial state and adds it to project list. */
|
|
69
|
+
async createProject(meta, id = randomUUID()) {
|
|
70
|
+
const resource = await this.pl.withWriteTx('MLCreateProject', async (tx) => {
|
|
71
|
+
const prj = await createProject(tx, meta);
|
|
72
|
+
tx.createField(field(this.projectListResourceId, id), 'Dynamic', prj);
|
|
73
|
+
await tx.commit();
|
|
74
|
+
return await toGlobalResourceId(prj);
|
|
75
|
+
});
|
|
76
|
+
await this.projectListTree.refreshState();
|
|
77
|
+
return resource;
|
|
78
|
+
}
|
|
79
|
+
/** Updates project metadata */
|
|
80
|
+
async setProjectMeta(rid, meta, author) {
|
|
81
|
+
await withProjectAuthored(this.env.projectHelper, this.pl, rid, author, (prj) => {
|
|
82
|
+
prj.setMeta(meta);
|
|
83
|
+
});
|
|
84
|
+
await this.projectListTree.refreshState();
|
|
85
|
+
}
|
|
86
|
+
/** Permanently deletes project from the project list, this will result in
|
|
87
|
+
* destruction of all attached objects, like files, analysis results etc. */
|
|
88
|
+
async deleteProject(id) {
|
|
89
|
+
await this.pl.withWriteTx('MLRemoveProject', async (tx) => {
|
|
90
|
+
tx.removeField(field(this.projectListResourceId, id));
|
|
91
|
+
await tx.commit();
|
|
92
|
+
});
|
|
93
|
+
await this.projectListTree.refreshState();
|
|
94
|
+
}
|
|
95
|
+
//
|
|
96
|
+
// Projects
|
|
97
|
+
//
|
|
98
|
+
openedProjectsByRid = new Map();
|
|
99
|
+
async projectIdToResourceId(id) {
|
|
100
|
+
return await this.pl.withReadTx('Project id to resource id', async (tx) => {
|
|
101
|
+
const rid = (await tx.getField(field(this.projectListResourceId, id))).value;
|
|
102
|
+
if (isNullResourceId(rid))
|
|
103
|
+
throw new Error('Unexpected project list structure.');
|
|
104
|
+
return rid;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
async ensureProjectRid(id) {
|
|
108
|
+
if (typeof id === 'string')
|
|
109
|
+
return await this.projectIdToResourceId(id);
|
|
110
|
+
else
|
|
111
|
+
return id;
|
|
112
|
+
}
|
|
113
|
+
/** Opens a project, and starts corresponding project maintenance loop. */
|
|
114
|
+
async openProject(id) {
|
|
115
|
+
const rid = await this.ensureProjectRid(id);
|
|
116
|
+
if (this.openedProjectsByRid.has(rid))
|
|
117
|
+
throw new Error(`Project ${rid} already opened`);
|
|
118
|
+
this.openedProjectsByRid.set(rid, await Project.init(this.env, rid));
|
|
119
|
+
this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);
|
|
120
|
+
}
|
|
121
|
+
/** Closes the project, and deallocate all corresponding resources. */
|
|
122
|
+
async closeProject(rid) {
|
|
123
|
+
const prj = this.openedProjectsByRid.get(rid);
|
|
124
|
+
if (prj === undefined)
|
|
125
|
+
throw new Error(`Project ${rid} not found among opened projects`);
|
|
126
|
+
this.openedProjectsByRid.delete(rid);
|
|
127
|
+
await prj.destroy();
|
|
128
|
+
this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);
|
|
129
|
+
}
|
|
130
|
+
/** Returns a project access object for opened project, for the given project
|
|
131
|
+
* resource id. */
|
|
132
|
+
getOpenedProject(rid) {
|
|
133
|
+
const prj = this.openedProjectsByRid.get(rid);
|
|
134
|
+
if (prj === undefined)
|
|
135
|
+
throw new Error(`Project ${rid} not found among opened projects`);
|
|
136
|
+
return prj;
|
|
137
|
+
}
|
|
138
|
+
/** Deallocates all runtime resources consumed by this object and awaits
|
|
139
|
+
* actual termination of event loops and other processes associated with
|
|
140
|
+
* them. */
|
|
141
|
+
async close() {
|
|
142
|
+
await Promise.all([...this.openedProjectsByRid.values()].map((prj) => prj.destroy()));
|
|
143
|
+
// this.env.quickJs;
|
|
144
|
+
await this.projectListTree.terminate();
|
|
145
|
+
await this.env.retryHttpDispatcher.destroy();
|
|
146
|
+
await this.pl.close();
|
|
147
|
+
}
|
|
148
|
+
/** @deprecated */
|
|
149
|
+
async closeAndAwaitTermination() {
|
|
150
|
+
await this.close();
|
|
151
|
+
}
|
|
152
|
+
/** Generates sufficiently random string to be used as local secret for the
|
|
153
|
+
* middle layer */
|
|
154
|
+
static generateLocalSecret() {
|
|
155
|
+
return HmacSha256Signer.generateSecret();
|
|
156
|
+
}
|
|
157
|
+
/** Returns a block event dispatcher, which can be used to listen to block events. */
|
|
158
|
+
get blockEventDispatcher() {
|
|
159
|
+
return this.env.blockEventDispatcher;
|
|
160
|
+
}
|
|
161
|
+
/** Initialize middle layer */
|
|
162
|
+
static async init(pl, workdir, _ops) {
|
|
163
|
+
const ops = {
|
|
164
|
+
...DefaultMiddleLayerOpsSettings,
|
|
165
|
+
...DefaultMiddleLayerOpsPaths(workdir),
|
|
166
|
+
..._ops,
|
|
167
|
+
};
|
|
168
|
+
// overriding debug options from environment variables
|
|
169
|
+
ops.defaultTreeOptions.logStat = getDebugFlags().logTreeStats;
|
|
170
|
+
ops.debugOps.dumpInitialTreeState = getDebugFlags().dumpInitialTreeState;
|
|
171
|
+
const projects = await pl.withWriteTx('MLInitialization', async (tx) => {
|
|
172
|
+
const projectsField = field(tx.clientRoot, ProjectsField);
|
|
173
|
+
tx.createField(projectsField, 'Dynamic');
|
|
174
|
+
const projectsFieldData = await tx.getField(projectsField);
|
|
175
|
+
if (isNullResourceId(projectsFieldData.value)) {
|
|
176
|
+
const projects = tx.createEphemeral(ProjectsResourceType);
|
|
177
|
+
tx.lock(projects);
|
|
178
|
+
tx.setField(projectsField, projects);
|
|
179
|
+
await tx.commit();
|
|
180
|
+
return await projects.globalId;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
return projectsFieldData.value;
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
const logger = ops.logger;
|
|
187
|
+
const driverKit = await initDriverKit(pl, workdir, ops.frontendDownloadPath, ops);
|
|
188
|
+
// passed to components having no own retry logic
|
|
189
|
+
const retryHttpDispatcher = new RetryAgent(pl.httpDispatcher);
|
|
190
|
+
const v2RegistryProvider = new V2RegistryProvider(retryHttpDispatcher);
|
|
191
|
+
const bpPreparer = new BlockPackPreparer(v2RegistryProvider, driverKit.signer, retryHttpDispatcher);
|
|
192
|
+
const quickJs = await getQuickJS();
|
|
193
|
+
const runtimeCapabilities = new RuntimeCapabilities();
|
|
194
|
+
// add runtime capabilities of model here
|
|
195
|
+
runtimeCapabilities.addSupportedRequirement('requiresModelAPIVersion', 1);
|
|
196
|
+
// runtime capabilities of the desktop are to be added by the desktop app / test framework
|
|
197
|
+
const env = {
|
|
198
|
+
pl,
|
|
199
|
+
blockEventDispatcher: new BlockEventDispatcher(),
|
|
200
|
+
signer: driverKit.signer,
|
|
201
|
+
logger,
|
|
202
|
+
httpDispatcher: pl.httpDispatcher,
|
|
203
|
+
retryHttpDispatcher: retryHttpDispatcher,
|
|
204
|
+
ops,
|
|
205
|
+
bpPreparer,
|
|
206
|
+
frontendDownloadDriver: driverKit.frontendDriver,
|
|
207
|
+
driverKit,
|
|
208
|
+
blockUpdateWatcher: new BlockUpdateWatcher(v2RegistryProvider, logger, {
|
|
209
|
+
minDelay: ops.devBlockUpdateRecheckInterval,
|
|
210
|
+
http: retryHttpDispatcher,
|
|
211
|
+
preferredUpdateChannel: ops.preferredUpdateChannel,
|
|
212
|
+
}),
|
|
213
|
+
runtimeCapabilities,
|
|
214
|
+
quickJs,
|
|
215
|
+
projectHelper: new ProjectHelper(quickJs),
|
|
216
|
+
};
|
|
217
|
+
const openedProjects = new WatchableValue([]);
|
|
218
|
+
const projectListTC = await createProjectList(pl, projects, openedProjects, env);
|
|
219
|
+
return new MiddleLayer(env, driverKit, driverKit.signer, projects, openedProjects, projectListTC.tree, v2RegistryProvider, projectListTC.computable);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export { MiddleLayer };
|
|
224
|
+
//# sourceMappingURL=middle_layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middle_layer.js","sources":["../../src/middle_layer/middle_layer.ts"],"sourcesContent":["import type {\n PlClient,\n ResourceId } from '@milaboratories/pl-client';\nimport {\n field,\n isNullResourceId,\n toGlobalResourceId,\n} from '@milaboratories/pl-client';\nimport { createProjectList, ProjectsField, ProjectsResourceType } from './project_list';\nimport { createProject, withProjectAuthored } from '../mutator/project';\nimport type { SynchronizedTreeState } from '@milaboratories/pl-tree';\nimport { BlockPackPreparer } from '../mutator/block-pack/block_pack';\nimport type { MiLogger, Signer } from '@milaboratories/ts-helpers';\nimport { BlockEventDispatcher } from '@milaboratories/ts-helpers';\nimport { HmacSha256Signer } from '@milaboratories/ts-helpers';\nimport type { ComputableStableDefined } from '@milaboratories/computable';\nimport { WatchableValue } from '@milaboratories/computable';\nimport { Project } from './project';\nimport type {\n MiddleLayerOps,\n MiddleLayerOpsConstructor,\n} from './ops';\nimport {\n DefaultMiddleLayerOpsPaths,\n DefaultMiddleLayerOpsSettings,\n} from './ops';\nimport { randomUUID } from 'node:crypto';\nimport type { ProjectListEntry } from '../model';\nimport type { AuthorMarker, ProjectMeta } from '@milaboratories/pl-model-middle-layer';\nimport { BlockUpdateWatcher } from '../block_registry/watcher';\nimport type { QuickJSWASMModule } from 'quickjs-emscripten';\nimport { getQuickJS } from 'quickjs-emscripten';\nimport type { MiddleLayerDriverKit } from './driver_kit';\nimport { initDriverKit } from './driver_kit';\nimport type { DriverKit, SupportedRequirement } from '@platforma-sdk/model';\nimport { RuntimeCapabilities } from '@platforma-sdk/model';\nimport type { DownloadUrlDriver } from '@milaboratories/pl-drivers';\nimport { V2RegistryProvider } from '../block_registry';\nimport type { Dispatcher } from 'undici';\nimport { RetryAgent } from 'undici';\nimport { getDebugFlags } from '../debug';\nimport { ProjectHelper } from '../model/project_helper';\n\nexport interface MiddleLayerEnvironment {\n readonly pl: PlClient;\n readonly runtimeCapabilities: RuntimeCapabilities;\n readonly logger: MiLogger;\n readonly blockEventDispatcher: BlockEventDispatcher;\n readonly httpDispatcher: Dispatcher;\n readonly retryHttpDispatcher: Dispatcher;\n readonly signer: Signer;\n readonly ops: MiddleLayerOps;\n readonly bpPreparer: BlockPackPreparer;\n readonly frontendDownloadDriver: DownloadUrlDriver;\n readonly blockUpdateWatcher: BlockUpdateWatcher;\n readonly quickJs: QuickJSWASMModule;\n readonly driverKit: MiddleLayerDriverKit;\n readonly projectHelper: ProjectHelper;\n}\n\n/**\n * Main access object to work with pl from UI.\n *\n * It implements an abstraction layer of projects and blocks.\n *\n * As a main entry point inside the pl, this object uses a resource attached\n * via the {@link ProjectsField} to the pl client's root, this resource\n * contains project list.\n *\n * Read about alternative roots, if isolated project lists (working environments)\n * are required.\n * */\nexport class MiddleLayer {\n private readonly pl: PlClient;\n\n /** Contains a reactive list of projects along with their meta information. */\n public readonly projectList: ComputableStableDefined<ProjectListEntry[]>;\n\n private constructor(\n private readonly env: MiddleLayerEnvironment,\n public readonly driverKit: DriverKit,\n public readonly signer: Signer,\n private readonly projectListResourceId: ResourceId,\n private readonly openedProjectsList: WatchableValue<ResourceId[]>,\n private readonly projectListTree: SynchronizedTreeState,\n public readonly blockRegistryProvider: V2RegistryProvider,\n projectList: ComputableStableDefined<ProjectListEntry[]>,\n ) {\n this.projectList = projectList;\n this.pl = this.env.pl;\n }\n\n /** Adds a runtime capability to the middle layer. */\n public addRuntimeCapability(requirement: SupportedRequirement, value: number | boolean = true): void {\n this.env.runtimeCapabilities.addSupportedRequirement(requirement, value);\n }\n\n /** Returns extended API driver kit used internally by middle layer. */\n public get internalDriverKit(): MiddleLayerDriverKit {\n return this.env.driverKit;\n }\n\n //\n // Project List Manipulation\n //\n\n /** Creates a project with initial state and adds it to project list. */\n public async createProject(meta: ProjectMeta, id: string = randomUUID()): Promise<ResourceId> {\n const resource = await this.pl.withWriteTx('MLCreateProject', async (tx) => {\n const prj = await createProject(tx, meta);\n tx.createField(field(this.projectListResourceId, id), 'Dynamic', prj);\n await tx.commit();\n return await toGlobalResourceId(prj);\n });\n await this.projectListTree.refreshState();\n return resource;\n }\n\n /** Updates project metadata */\n public async setProjectMeta(\n rid: ResourceId,\n meta: ProjectMeta,\n author?: AuthorMarker,\n ): Promise<void> {\n await withProjectAuthored(this.env.projectHelper, this.pl, rid, author, (prj) => {\n prj.setMeta(meta);\n });\n await this.projectListTree.refreshState();\n }\n\n /** Permanently deletes project from the project list, this will result in\n * destruction of all attached objects, like files, analysis results etc. */\n public async deleteProject(id: string): Promise<void> {\n await this.pl.withWriteTx('MLRemoveProject', async (tx) => {\n tx.removeField(field(this.projectListResourceId, id));\n await tx.commit();\n });\n await this.projectListTree.refreshState();\n }\n\n //\n // Projects\n //\n\n private readonly openedProjectsByRid = new Map<ResourceId, Project>();\n\n private async projectIdToResourceId(id: string): Promise<ResourceId> {\n return await this.pl.withReadTx('Project id to resource id', async (tx) => {\n const rid = (await tx.getField(field(this.projectListResourceId, id))).value;\n if (isNullResourceId(rid)) throw new Error('Unexpected project list structure.');\n return rid;\n });\n }\n\n private async ensureProjectRid(id: ResourceId | string): Promise<ResourceId> {\n if (typeof id === 'string') return await this.projectIdToResourceId(id);\n else return id;\n }\n\n /** Opens a project, and starts corresponding project maintenance loop. */\n public async openProject(id: ResourceId | string) {\n const rid = await this.ensureProjectRid(id);\n if (this.openedProjectsByRid.has(rid)) throw new Error(`Project ${rid} already opened`);\n this.openedProjectsByRid.set(rid, await Project.init(this.env, rid));\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Closes the project, and deallocate all corresponding resources. */\n public async closeProject(rid: ResourceId): Promise<void> {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n this.openedProjectsByRid.delete(rid);\n await prj.destroy();\n this.openedProjectsList.setValue([...this.openedProjectsByRid.keys()]);\n }\n\n /** Returns a project access object for opened project, for the given project\n * resource id. */\n public getOpenedProject(rid: ResourceId): Project {\n const prj = this.openedProjectsByRid.get(rid);\n if (prj === undefined) throw new Error(`Project ${rid} not found among opened projects`);\n return prj;\n }\n\n /** Deallocates all runtime resources consumed by this object and awaits\n * actual termination of event loops and other processes associated with\n * them. */\n public async close() {\n await Promise.all([...this.openedProjectsByRid.values()].map((prj) => prj.destroy()));\n // this.env.quickJs;\n await this.projectListTree.terminate();\n await this.env.retryHttpDispatcher.destroy();\n await this.pl.close();\n }\n\n /** @deprecated */\n public async closeAndAwaitTermination() {\n await this.close();\n }\n\n /** Generates sufficiently random string to be used as local secret for the\n * middle layer */\n public static generateLocalSecret(): string {\n return HmacSha256Signer.generateSecret();\n }\n\n /** Returns a block event dispatcher, which can be used to listen to block events. */\n public get blockEventDispatcher(): BlockEventDispatcher {\n return this.env.blockEventDispatcher;\n }\n\n /** Initialize middle layer */\n public static async init(\n pl: PlClient,\n workdir: string,\n _ops: MiddleLayerOpsConstructor,\n ): Promise<MiddleLayer> {\n const ops: MiddleLayerOps = {\n ...DefaultMiddleLayerOpsSettings,\n ...DefaultMiddleLayerOpsPaths(workdir),\n ..._ops,\n };\n\n // overriding debug options from environment variables\n ops.defaultTreeOptions.logStat = getDebugFlags().logTreeStats;\n ops.debugOps.dumpInitialTreeState = getDebugFlags().dumpInitialTreeState;\n\n const projects = await pl.withWriteTx('MLInitialization', async (tx) => {\n const projectsField = field(tx.clientRoot, ProjectsField);\n tx.createField(projectsField, 'Dynamic');\n const projectsFieldData = await tx.getField(projectsField);\n if (isNullResourceId(projectsFieldData.value)) {\n const projects = tx.createEphemeral(ProjectsResourceType);\n tx.lock(projects);\n\n tx.setField(projectsField, projects);\n\n await tx.commit();\n\n return await projects.globalId;\n } else {\n return projectsFieldData.value;\n }\n });\n\n const logger = ops.logger;\n\n const driverKit = await initDriverKit(pl, workdir, ops.frontendDownloadPath, ops);\n\n // passed to components having no own retry logic\n const retryHttpDispatcher = new RetryAgent(pl.httpDispatcher);\n\n const v2RegistryProvider = new V2RegistryProvider(retryHttpDispatcher);\n\n const bpPreparer = new BlockPackPreparer(\n v2RegistryProvider,\n driverKit.signer,\n retryHttpDispatcher,\n );\n\n const quickJs = await getQuickJS();\n\n const runtimeCapabilities = new RuntimeCapabilities();\n // add runtime capabilities of model here\n runtimeCapabilities.addSupportedRequirement('requiresModelAPIVersion', 1);\n // runtime capabilities of the desktop are to be added by the desktop app / test framework\n\n const env: MiddleLayerEnvironment = {\n pl,\n blockEventDispatcher: new BlockEventDispatcher(),\n signer: driverKit.signer,\n logger,\n httpDispatcher: pl.httpDispatcher,\n retryHttpDispatcher: retryHttpDispatcher,\n ops,\n bpPreparer,\n frontendDownloadDriver: driverKit.frontendDriver,\n driverKit,\n blockUpdateWatcher: new BlockUpdateWatcher(v2RegistryProvider, logger, {\n minDelay: ops.devBlockUpdateRecheckInterval,\n http: retryHttpDispatcher,\n preferredUpdateChannel: ops.preferredUpdateChannel,\n }),\n runtimeCapabilities,\n quickJs,\n projectHelper: new ProjectHelper(quickJs),\n };\n\n const openedProjects = new WatchableValue<ResourceId[]>([]);\n const projectListTC = await createProjectList(pl, projects, openedProjects, env);\n\n return new MiddleLayer(\n env,\n driverKit,\n driverKit.signer,\n projects,\n openedProjects,\n projectListTC.tree,\n v2RegistryProvider,\n projectListTC.computable,\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var computable = require('@milaboratories/computable');
|
|
4
|
+
var model = require('@platforma-sdk/model');
|
|
5
|
+
|
|
6
|
+
class NavigationStates {
|
|
7
|
+
states = new Map();
|
|
8
|
+
setState(blockId, state) {
|
|
9
|
+
const entry = this.states.get(blockId);
|
|
10
|
+
if (entry === undefined) {
|
|
11
|
+
this.states.set(blockId, { state, change: new computable.ChangeSource() });
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
entry.state = { ...state };
|
|
15
|
+
entry.change.markChanged('navigation state changed');
|
|
16
|
+
}
|
|
17
|
+
readState(ctx, blockId) {
|
|
18
|
+
let entry = this.states.get(blockId);
|
|
19
|
+
if (entry === undefined) {
|
|
20
|
+
entry = { state: { ...model.DefaultNavigationState }, change: new computable.ChangeSource() };
|
|
21
|
+
this.states.set(blockId, entry);
|
|
22
|
+
}
|
|
23
|
+
entry.change.attachWatcher(ctx.watcher);
|
|
24
|
+
return entry.state;
|
|
25
|
+
}
|
|
26
|
+
getState(blockId) {
|
|
27
|
+
return computable.Computable.make((ctx) => {
|
|
28
|
+
return this.readState(ctx, blockId);
|
|
29
|
+
}, { key: `navigationState#${blockId}` });
|
|
30
|
+
}
|
|
31
|
+
deleteBlock(blockId) {
|
|
32
|
+
const entry = this.states.get(blockId);
|
|
33
|
+
if (entry !== undefined) {
|
|
34
|
+
this.states.delete(blockId);
|
|
35
|
+
entry.change.markChanged('block deleted');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
exports.NavigationStates = NavigationStates;
|
|
41
|
+
//# sourceMappingURL=navigation_states.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation_states.cjs","sources":["../../src/middle_layer/navigation_states.ts"],"sourcesContent":["import type { ComputableCtx } from '@milaboratories/computable';\nimport { ChangeSource, Computable } from '@milaboratories/computable';\nimport type { NavigationState } from '@platforma-sdk/model';\nimport { DefaultNavigationState } from '@platforma-sdk/model';\n\ntype NavigationStateEntry = {\n state: NavigationState;\n readonly change: ChangeSource;\n};\n\nexport class NavigationStates {\n private readonly states = new Map<string, NavigationStateEntry>();\n\n public setState(blockId: string, state: NavigationState) {\n const entry = this.states.get(blockId);\n if (entry === undefined) {\n this.states.set(blockId, { state, change: new ChangeSource() });\n return;\n }\n entry.state = { ...state };\n entry.change.markChanged('navigation state changed');\n }\n\n private readState(ctx: ComputableCtx, blockId: string): NavigationState {\n let entry = this.states.get(blockId);\n if (entry === undefined) {\n entry = { state: { ...DefaultNavigationState }, change: new ChangeSource() };\n this.states.set(blockId, entry);\n }\n entry.change.attachWatcher(ctx.watcher);\n return entry.state;\n }\n\n public getState(blockId: string): Computable<NavigationState> {\n return Computable.make(\n (ctx) => {\n return this.readState(ctx, blockId);\n },\n { key: `navigationState#${blockId}` },\n );\n }\n\n public deleteBlock(blockId: string) {\n const entry = this.states.get(blockId);\n if (entry !== undefined) {\n this.states.delete(blockId);\n entry.change.markChanged('block deleted');\n }\n }\n}\n"],"names":["ChangeSource","DefaultNavigationState","Computable"],"mappings":";;;;;MAUa,gBAAgB,CAAA;AACV,IAAA,MAAM,GAAG,IAAI,GAAG,EAAgC;IAE1D,QAAQ,CAAC,OAAe,EAAE,KAAsB,EAAA;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACtC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAIA,uBAAY,EAAE,EAAE,CAAC;YAC/D;QACF;AACA,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE;AAC1B,QAAA,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC;IACtD;IAEQ,SAAS,CAAC,GAAkB,EAAE,OAAe,EAAA;QACnD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACpC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAGC,4BAAsB,EAAE,EAAE,MAAM,EAAE,IAAID,uBAAY,EAAE,EAAE;YAC5E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;QACjC;QACA,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;QACvC,OAAO,KAAK,CAAC,KAAK;IACpB;AAEO,IAAA,QAAQ,CAAC,OAAe,EAAA;AAC7B,QAAA,OAAOE,qBAAU,CAAC,IAAI,CACpB,CAAC,GAAG,KAAI;YACN,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;QACrC,CAAC,EACD,EAAE,GAAG,EAAE,mBAAmB,OAAO,CAAA,CAAE,EAAE,CACtC;IACH;AAEO,IAAA,WAAW,CAAC,OAAe,EAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACtC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC3B,YAAA,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC;QAC3C;IACF;AACD;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ChangeSource, Computable } from '@milaboratories/computable';
|
|
2
|
+
import { DefaultNavigationState } from '@platforma-sdk/model';
|
|
3
|
+
|
|
4
|
+
class NavigationStates {
|
|
5
|
+
states = new Map();
|
|
6
|
+
setState(blockId, state) {
|
|
7
|
+
const entry = this.states.get(blockId);
|
|
8
|
+
if (entry === undefined) {
|
|
9
|
+
this.states.set(blockId, { state, change: new ChangeSource() });
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
entry.state = { ...state };
|
|
13
|
+
entry.change.markChanged('navigation state changed');
|
|
14
|
+
}
|
|
15
|
+
readState(ctx, blockId) {
|
|
16
|
+
let entry = this.states.get(blockId);
|
|
17
|
+
if (entry === undefined) {
|
|
18
|
+
entry = { state: { ...DefaultNavigationState }, change: new ChangeSource() };
|
|
19
|
+
this.states.set(blockId, entry);
|
|
20
|
+
}
|
|
21
|
+
entry.change.attachWatcher(ctx.watcher);
|
|
22
|
+
return entry.state;
|
|
23
|
+
}
|
|
24
|
+
getState(blockId) {
|
|
25
|
+
return Computable.make((ctx) => {
|
|
26
|
+
return this.readState(ctx, blockId);
|
|
27
|
+
}, { key: `navigationState#${blockId}` });
|
|
28
|
+
}
|
|
29
|
+
deleteBlock(blockId) {
|
|
30
|
+
const entry = this.states.get(blockId);
|
|
31
|
+
if (entry !== undefined) {
|
|
32
|
+
this.states.delete(blockId);
|
|
33
|
+
entry.change.markChanged('block deleted');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { NavigationStates };
|
|
39
|
+
//# sourceMappingURL=navigation_states.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation_states.js","sources":["../../src/middle_layer/navigation_states.ts"],"sourcesContent":["import type { ComputableCtx } from '@milaboratories/computable';\nimport { ChangeSource, Computable } from '@milaboratories/computable';\nimport type { NavigationState } from '@platforma-sdk/model';\nimport { DefaultNavigationState } from '@platforma-sdk/model';\n\ntype NavigationStateEntry = {\n state: NavigationState;\n readonly change: ChangeSource;\n};\n\nexport class NavigationStates {\n private readonly states = new Map<string, NavigationStateEntry>();\n\n public setState(blockId: string, state: NavigationState) {\n const entry = this.states.get(blockId);\n if (entry === undefined) {\n this.states.set(blockId, { state, change: new ChangeSource() });\n return;\n }\n entry.state = { ...state };\n entry.change.markChanged('navigation state changed');\n }\n\n private readState(ctx: ComputableCtx, blockId: string): NavigationState {\n let entry = this.states.get(blockId);\n if (entry === undefined) {\n entry = { state: { ...DefaultNavigationState }, change: new ChangeSource() };\n this.states.set(blockId, entry);\n }\n entry.change.attachWatcher(ctx.watcher);\n return entry.state;\n }\n\n public getState(blockId: string): Computable<NavigationState> {\n return Computable.make(\n (ctx) => {\n return this.readState(ctx, blockId);\n },\n { key: `navigationState#${blockId}` },\n );\n }\n\n public deleteBlock(blockId: string) {\n const entry = this.states.get(blockId);\n if (entry !== undefined) {\n this.states.delete(blockId);\n entry.change.markChanged('block deleted');\n }\n }\n}\n"],"names":[],"mappings":";;;MAUa,gBAAgB,CAAA;AACV,IAAA,MAAM,GAAG,IAAI,GAAG,EAAgC;IAE1D,QAAQ,CAAC,OAAe,EAAE,KAAsB,EAAA;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACtC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,YAAY,EAAE,EAAE,CAAC;YAC/D;QACF;AACA,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE;AAC1B,QAAA,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC;IACtD;IAEQ,SAAS,CAAC,GAAkB,EAAE,OAAe,EAAA;QACnD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACpC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,YAAY,EAAE,EAAE;YAC5E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;QACjC;QACA,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;QACvC,OAAO,KAAK,CAAC,KAAK;IACpB;AAEO,IAAA,QAAQ,CAAC,OAAe,EAAA;AAC7B,QAAA,OAAO,UAAU,CAAC,IAAI,CACpB,CAAC,GAAG,KAAI;YACN,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;QACrC,CAAC,EACD,EAAE,GAAG,EAAE,mBAAmB,OAAO,CAAA,CAAE,EAAE,CACtC;IACH;AAEO,IAAA,WAAW,CAAC,OAAe,EAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACtC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC3B,YAAA,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC;QAC3C;IACF;AACD;;;;"}
|