@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,74 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const InitialBlockStructure = {
|
|
4
|
+
groups: [{ id: 'default', label: 'Default', blocks: [] }],
|
|
5
|
+
};
|
|
6
|
+
const InitialProjectRenderingState = {
|
|
7
|
+
stagingRefreshTimestamp: 0,
|
|
8
|
+
blocksInLimbo: [],
|
|
9
|
+
};
|
|
10
|
+
const InitialBlockMeta = {
|
|
11
|
+
label: 'New Project',
|
|
12
|
+
};
|
|
13
|
+
//
|
|
14
|
+
// Pl Model
|
|
15
|
+
//
|
|
16
|
+
const ProjectResourceType = { name: 'UserProject', version: '2' };
|
|
17
|
+
const SchemaVersionKey = 'SchemaVersion';
|
|
18
|
+
const SchemaVersionCurrent = '2';
|
|
19
|
+
const ProjectCreatedTimestamp = 'ProjectCreated';
|
|
20
|
+
const ProjectLastModifiedTimestamp = 'ProjectLastModified';
|
|
21
|
+
const ProjectMetaKey = 'ProjectMeta';
|
|
22
|
+
const ProjectStructureKey = 'ProjectStructure';
|
|
23
|
+
const BlockRenderingStateKey = 'BlockRenderingState';
|
|
24
|
+
const BlockArgsAuthorKeyPrefix = 'BlockArgsAuthor/';
|
|
25
|
+
function blockArgsAuthorKey(blockId) {
|
|
26
|
+
return `${BlockArgsAuthorKeyPrefix}${blockId}`;
|
|
27
|
+
}
|
|
28
|
+
const ProjectStructureAuthorKey = 'ProjectStructureAuthor';
|
|
29
|
+
const ServiceTemplateCacheFieldPrefix = '__serviceTemplate_';
|
|
30
|
+
function getServiceTemplateField(hash) {
|
|
31
|
+
return `${ServiceTemplateCacheFieldPrefix}${hash}`;
|
|
32
|
+
}
|
|
33
|
+
const FieldsToDuplicate = new Set([
|
|
34
|
+
'blockPack',
|
|
35
|
+
'blockSettings',
|
|
36
|
+
'uiState',
|
|
37
|
+
'prodArgs',
|
|
38
|
+
'currentArgs',
|
|
39
|
+
'prodCtx',
|
|
40
|
+
'prodUiCtx',
|
|
41
|
+
'prodOutput',
|
|
42
|
+
]);
|
|
43
|
+
function projectFieldName(blockId, fieldName) {
|
|
44
|
+
return `${blockId}-${fieldName}`;
|
|
45
|
+
}
|
|
46
|
+
const projectFieldPattern = /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|uiState|prodArgs|currentArgs|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;
|
|
47
|
+
function parseProjectField(name) {
|
|
48
|
+
const match = name.match(projectFieldPattern);
|
|
49
|
+
if (match === null)
|
|
50
|
+
return undefined;
|
|
51
|
+
const { blockId, fieldName } = match.groups;
|
|
52
|
+
return { blockId, fieldName };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
exports.BlockArgsAuthorKeyPrefix = BlockArgsAuthorKeyPrefix;
|
|
56
|
+
exports.BlockRenderingStateKey = BlockRenderingStateKey;
|
|
57
|
+
exports.FieldsToDuplicate = FieldsToDuplicate;
|
|
58
|
+
exports.InitialBlockMeta = InitialBlockMeta;
|
|
59
|
+
exports.InitialBlockStructure = InitialBlockStructure;
|
|
60
|
+
exports.InitialProjectRenderingState = InitialProjectRenderingState;
|
|
61
|
+
exports.ProjectCreatedTimestamp = ProjectCreatedTimestamp;
|
|
62
|
+
exports.ProjectLastModifiedTimestamp = ProjectLastModifiedTimestamp;
|
|
63
|
+
exports.ProjectMetaKey = ProjectMetaKey;
|
|
64
|
+
exports.ProjectResourceType = ProjectResourceType;
|
|
65
|
+
exports.ProjectStructureAuthorKey = ProjectStructureAuthorKey;
|
|
66
|
+
exports.ProjectStructureKey = ProjectStructureKey;
|
|
67
|
+
exports.SchemaVersionCurrent = SchemaVersionCurrent;
|
|
68
|
+
exports.SchemaVersionKey = SchemaVersionKey;
|
|
69
|
+
exports.ServiceTemplateCacheFieldPrefix = ServiceTemplateCacheFieldPrefix;
|
|
70
|
+
exports.blockArgsAuthorKey = blockArgsAuthorKey;
|
|
71
|
+
exports.getServiceTemplateField = getServiceTemplateField;
|
|
72
|
+
exports.parseProjectField = parseProjectField;
|
|
73
|
+
exports.projectFieldName = projectFieldName;
|
|
74
|
+
//# sourceMappingURL=project_model.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_model.cjs","sources":["../../src/model/project_model.ts"],"sourcesContent":["import type { ResourceId, ResourceType } from '@milaboratories/pl-client';\nimport type {\n ProjectListEntry as ProjectListEntryFromModel,\n ProjectMeta,\n} from '@milaboratories/pl-model-middle-layer';\nimport type { BlockRenderingMode } from '@platforma-sdk/model';\n\nexport interface ProjectListEntry extends ProjectListEntryFromModel {\n /** Project resource ID. */\n rid: ResourceId;\n}\n\n/** Entry representing a single block in block structure */\nexport interface Block {\n /** Unique block id */\n readonly id: string;\n\n /**\n * Label shown to the user\n * @deprecated\n * */\n label: string;\n\n /** How to approach block rendering */\n renderingMode: BlockRenderingMode;\n}\n\n/** Block group in block structure */\nexport interface BlockGroup {\n /** Unique group id */\n readonly id: string;\n\n /** Label shown to the user */\n label: string;\n\n /** Blocks */\n blocks: Block[];\n}\n\n/** Root of block structure value */\nexport interface ProjectStructure {\n /** The structure */\n readonly groups: BlockGroup[];\n}\n\nexport const InitialBlockStructure: ProjectStructure = {\n groups: [{ id: 'default', label: 'Default', blocks: [] }],\n};\n\n/** Root of project rendering state */\nexport interface ProjectRenderingState {\n /** Timestamp of last staging rendering event */\n stagingRefreshTimestamp: number;\n\n /** Blocks with detached production state, i.e. some of the dependencies of\n * such blocks were re-rendered, but their state was left \"as is\". */\n blocksInLimbo: string[];\n}\n\nexport const InitialProjectRenderingState: ProjectRenderingState = {\n stagingRefreshTimestamp: 0,\n blocksInLimbo: [],\n};\n\nexport const InitialBlockMeta: ProjectMeta = {\n label: 'New Project',\n};\n\n//\n// Pl Model\n//\n\nexport const ProjectResourceType: ResourceType = { name: 'UserProject', version: '2' };\n\nexport const SchemaVersionKey = 'SchemaVersion';\nexport const SchemaVersionCurrent = '2';\n\nexport const ProjectCreatedTimestamp = 'ProjectCreated';\nexport const ProjectLastModifiedTimestamp = 'ProjectLastModified';\nexport const ProjectMetaKey = 'ProjectMeta';\nexport const ProjectStructureKey = 'ProjectStructure';\nexport const BlockRenderingStateKey = 'BlockRenderingState';\n\nexport const BlockArgsAuthorKeyPrefix = 'BlockArgsAuthor/';\nexport const BlockArgsAuthorKeyPattern = /^BlockArgsAuthor\\/(?<blockid>.*)$/;\n\nexport function blockArgsAuthorKey(blockId: string): string {\n return `${BlockArgsAuthorKeyPrefix}${blockId}`;\n}\n\nexport const ProjectStructureAuthorKey = 'ProjectStructureAuthor';\n\nexport const ServiceTemplateCacheFieldPrefix = '__serviceTemplate_';\n\nexport function getServiceTemplateField(hash: string): string {\n return `${ServiceTemplateCacheFieldPrefix}${hash}`;\n}\n\nexport interface ProjectField {\n blockId: string;\n fieldName:\n | 'blockPack'\n | 'blockSettings'\n | 'uiState'\n | 'prodArgs'\n | 'currentArgs'\n | 'prodCtx'\n | 'prodUiCtx'\n | 'prodOutput'\n | 'prodCtxPrevious'\n | 'prodUiCtxPrevious'\n | 'prodOutputPrevious'\n | 'stagingCtx'\n | 'stagingUiCtx'\n | 'stagingOutput'\n | 'stagingCtxPrevious'\n | 'stagingUiCtxPrevious'\n | 'stagingOutputPrevious';\n}\n\nexport const FieldsToDuplicate: Set<ProjectField['fieldName']> = new Set([\n 'blockPack',\n 'blockSettings',\n 'uiState',\n 'prodArgs',\n 'currentArgs',\n 'prodCtx',\n 'prodUiCtx',\n 'prodOutput',\n]);\n\nexport function projectFieldName(blockId: string, fieldName: ProjectField['fieldName']): string {\n return `${blockId}-${fieldName}`;\n}\n\nconst projectFieldPattern\n = /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|uiState|prodArgs|currentArgs|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;\n\nexport function parseProjectField(name: string): ProjectField | undefined {\n const match = name.match(projectFieldPattern);\n if (match === null) return undefined;\n const { blockId, fieldName } = match.groups!;\n return { blockId, fieldName } as ProjectField;\n}\n"],"names":[],"mappings":";;AA6CO,MAAM,qBAAqB,GAAqB;AACrD,IAAA,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;AAapD,MAAM,4BAA4B,GAA0B;AACjE,IAAA,uBAAuB,EAAE,CAAC;AAC1B,IAAA,aAAa,EAAE,EAAE;;AAGZ,MAAM,gBAAgB,GAAgB;AAC3C,IAAA,KAAK,EAAE,aAAa;;AAGtB;AACA;AACA;AAEO,MAAM,mBAAmB,GAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG;AAE7E,MAAM,gBAAgB,GAAG;AACzB,MAAM,oBAAoB,GAAG;AAE7B,MAAM,uBAAuB,GAAG;AAChC,MAAM,4BAA4B,GAAG;AACrC,MAAM,cAAc,GAAG;AACvB,MAAM,mBAAmB,GAAG;AAC5B,MAAM,sBAAsB,GAAG;AAE/B,MAAM,wBAAwB,GAAG;AAGlC,SAAU,kBAAkB,CAAC,OAAe,EAAA;AAChD,IAAA,OAAO,CAAA,EAAG,wBAAwB,CAAA,EAAG,OAAO,EAAE;AAChD;AAEO,MAAM,yBAAyB,GAAG;AAElC,MAAM,+BAA+B,GAAG;AAEzC,SAAU,uBAAuB,CAAC,IAAY,EAAA;AAClD,IAAA,OAAO,CAAA,EAAG,+BAA+B,CAAA,EAAG,IAAI,EAAE;AACpD;AAwBO,MAAM,iBAAiB,GAAmC,IAAI,GAAG,CAAC;IACvE,WAAW;IACX,eAAe;IACf,SAAS;IACT,UAAU;IACV,aAAa;IACb,SAAS;IACT,WAAW;IACX,YAAY;AACb,CAAA;AAEK,SAAU,gBAAgB,CAAC,OAAe,EAAE,SAAoC,EAAA;AACpF,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,SAAS,EAAE;AAClC;AAEA,MAAM,mBAAmB,GACrB,2QAA2Q;AAEzQ,SAAU,iBAAiB,CAAC,IAAY,EAAA;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;IAC7C,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,SAAS;IACpC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,MAAO;AAC5C,IAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAkB;AAC/C;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -63,4 +63,3 @@ export interface ProjectField {
|
|
|
63
63
|
export declare const FieldsToDuplicate: Set<ProjectField['fieldName']>;
|
|
64
64
|
export declare function projectFieldName(blockId: string, fieldName: ProjectField['fieldName']): string;
|
|
65
65
|
export declare function parseProjectField(name: string): ProjectField | undefined;
|
|
66
|
-
//# sourceMappingURL=project_model.d.ts.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const InitialBlockStructure = {
|
|
2
|
+
groups: [{ id: 'default', label: 'Default', blocks: [] }],
|
|
3
|
+
};
|
|
4
|
+
const InitialProjectRenderingState = {
|
|
5
|
+
stagingRefreshTimestamp: 0,
|
|
6
|
+
blocksInLimbo: [],
|
|
7
|
+
};
|
|
8
|
+
const InitialBlockMeta = {
|
|
9
|
+
label: 'New Project',
|
|
10
|
+
};
|
|
11
|
+
//
|
|
12
|
+
// Pl Model
|
|
13
|
+
//
|
|
14
|
+
const ProjectResourceType = { name: 'UserProject', version: '2' };
|
|
15
|
+
const SchemaVersionKey = 'SchemaVersion';
|
|
16
|
+
const SchemaVersionCurrent = '2';
|
|
17
|
+
const ProjectCreatedTimestamp = 'ProjectCreated';
|
|
18
|
+
const ProjectLastModifiedTimestamp = 'ProjectLastModified';
|
|
19
|
+
const ProjectMetaKey = 'ProjectMeta';
|
|
20
|
+
const ProjectStructureKey = 'ProjectStructure';
|
|
21
|
+
const BlockRenderingStateKey = 'BlockRenderingState';
|
|
22
|
+
const BlockArgsAuthorKeyPrefix = 'BlockArgsAuthor/';
|
|
23
|
+
function blockArgsAuthorKey(blockId) {
|
|
24
|
+
return `${BlockArgsAuthorKeyPrefix}${blockId}`;
|
|
25
|
+
}
|
|
26
|
+
const ProjectStructureAuthorKey = 'ProjectStructureAuthor';
|
|
27
|
+
const ServiceTemplateCacheFieldPrefix = '__serviceTemplate_';
|
|
28
|
+
function getServiceTemplateField(hash) {
|
|
29
|
+
return `${ServiceTemplateCacheFieldPrefix}${hash}`;
|
|
30
|
+
}
|
|
31
|
+
const FieldsToDuplicate = new Set([
|
|
32
|
+
'blockPack',
|
|
33
|
+
'blockSettings',
|
|
34
|
+
'uiState',
|
|
35
|
+
'prodArgs',
|
|
36
|
+
'currentArgs',
|
|
37
|
+
'prodCtx',
|
|
38
|
+
'prodUiCtx',
|
|
39
|
+
'prodOutput',
|
|
40
|
+
]);
|
|
41
|
+
function projectFieldName(blockId, fieldName) {
|
|
42
|
+
return `${blockId}-${fieldName}`;
|
|
43
|
+
}
|
|
44
|
+
const projectFieldPattern = /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|uiState|prodArgs|currentArgs|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;
|
|
45
|
+
function parseProjectField(name) {
|
|
46
|
+
const match = name.match(projectFieldPattern);
|
|
47
|
+
if (match === null)
|
|
48
|
+
return undefined;
|
|
49
|
+
const { blockId, fieldName } = match.groups;
|
|
50
|
+
return { blockId, fieldName };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { BlockArgsAuthorKeyPrefix, BlockRenderingStateKey, FieldsToDuplicate, InitialBlockMeta, InitialBlockStructure, InitialProjectRenderingState, ProjectCreatedTimestamp, ProjectLastModifiedTimestamp, ProjectMetaKey, ProjectResourceType, ProjectStructureAuthorKey, ProjectStructureKey, SchemaVersionCurrent, SchemaVersionKey, ServiceTemplateCacheFieldPrefix, blockArgsAuthorKey, getServiceTemplateField, parseProjectField, projectFieldName };
|
|
54
|
+
//# sourceMappingURL=project_model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_model.js","sources":["../../src/model/project_model.ts"],"sourcesContent":["import type { ResourceId, ResourceType } from '@milaboratories/pl-client';\nimport type {\n ProjectListEntry as ProjectListEntryFromModel,\n ProjectMeta,\n} from '@milaboratories/pl-model-middle-layer';\nimport type { BlockRenderingMode } from '@platforma-sdk/model';\n\nexport interface ProjectListEntry extends ProjectListEntryFromModel {\n /** Project resource ID. */\n rid: ResourceId;\n}\n\n/** Entry representing a single block in block structure */\nexport interface Block {\n /** Unique block id */\n readonly id: string;\n\n /**\n * Label shown to the user\n * @deprecated\n * */\n label: string;\n\n /** How to approach block rendering */\n renderingMode: BlockRenderingMode;\n}\n\n/** Block group in block structure */\nexport interface BlockGroup {\n /** Unique group id */\n readonly id: string;\n\n /** Label shown to the user */\n label: string;\n\n /** Blocks */\n blocks: Block[];\n}\n\n/** Root of block structure value */\nexport interface ProjectStructure {\n /** The structure */\n readonly groups: BlockGroup[];\n}\n\nexport const InitialBlockStructure: ProjectStructure = {\n groups: [{ id: 'default', label: 'Default', blocks: [] }],\n};\n\n/** Root of project rendering state */\nexport interface ProjectRenderingState {\n /** Timestamp of last staging rendering event */\n stagingRefreshTimestamp: number;\n\n /** Blocks with detached production state, i.e. some of the dependencies of\n * such blocks were re-rendered, but their state was left \"as is\". */\n blocksInLimbo: string[];\n}\n\nexport const InitialProjectRenderingState: ProjectRenderingState = {\n stagingRefreshTimestamp: 0,\n blocksInLimbo: [],\n};\n\nexport const InitialBlockMeta: ProjectMeta = {\n label: 'New Project',\n};\n\n//\n// Pl Model\n//\n\nexport const ProjectResourceType: ResourceType = { name: 'UserProject', version: '2' };\n\nexport const SchemaVersionKey = 'SchemaVersion';\nexport const SchemaVersionCurrent = '2';\n\nexport const ProjectCreatedTimestamp = 'ProjectCreated';\nexport const ProjectLastModifiedTimestamp = 'ProjectLastModified';\nexport const ProjectMetaKey = 'ProjectMeta';\nexport const ProjectStructureKey = 'ProjectStructure';\nexport const BlockRenderingStateKey = 'BlockRenderingState';\n\nexport const BlockArgsAuthorKeyPrefix = 'BlockArgsAuthor/';\nexport const BlockArgsAuthorKeyPattern = /^BlockArgsAuthor\\/(?<blockid>.*)$/;\n\nexport function blockArgsAuthorKey(blockId: string): string {\n return `${BlockArgsAuthorKeyPrefix}${blockId}`;\n}\n\nexport const ProjectStructureAuthorKey = 'ProjectStructureAuthor';\n\nexport const ServiceTemplateCacheFieldPrefix = '__serviceTemplate_';\n\nexport function getServiceTemplateField(hash: string): string {\n return `${ServiceTemplateCacheFieldPrefix}${hash}`;\n}\n\nexport interface ProjectField {\n blockId: string;\n fieldName:\n | 'blockPack'\n | 'blockSettings'\n | 'uiState'\n | 'prodArgs'\n | 'currentArgs'\n | 'prodCtx'\n | 'prodUiCtx'\n | 'prodOutput'\n | 'prodCtxPrevious'\n | 'prodUiCtxPrevious'\n | 'prodOutputPrevious'\n | 'stagingCtx'\n | 'stagingUiCtx'\n | 'stagingOutput'\n | 'stagingCtxPrevious'\n | 'stagingUiCtxPrevious'\n | 'stagingOutputPrevious';\n}\n\nexport const FieldsToDuplicate: Set<ProjectField['fieldName']> = new Set([\n 'blockPack',\n 'blockSettings',\n 'uiState',\n 'prodArgs',\n 'currentArgs',\n 'prodCtx',\n 'prodUiCtx',\n 'prodOutput',\n]);\n\nexport function projectFieldName(blockId: string, fieldName: ProjectField['fieldName']): string {\n return `${blockId}-${fieldName}`;\n}\n\nconst projectFieldPattern\n = /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|uiState|prodArgs|currentArgs|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;\n\nexport function parseProjectField(name: string): ProjectField | undefined {\n const match = name.match(projectFieldPattern);\n if (match === null) return undefined;\n const { blockId, fieldName } = match.groups!;\n return { blockId, fieldName } as ProjectField;\n}\n"],"names":[],"mappings":"AA6CO,MAAM,qBAAqB,GAAqB;AACrD,IAAA,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;AAapD,MAAM,4BAA4B,GAA0B;AACjE,IAAA,uBAAuB,EAAE,CAAC;AAC1B,IAAA,aAAa,EAAE,EAAE;;AAGZ,MAAM,gBAAgB,GAAgB;AAC3C,IAAA,KAAK,EAAE,aAAa;;AAGtB;AACA;AACA;AAEO,MAAM,mBAAmB,GAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG;AAE7E,MAAM,gBAAgB,GAAG;AACzB,MAAM,oBAAoB,GAAG;AAE7B,MAAM,uBAAuB,GAAG;AAChC,MAAM,4BAA4B,GAAG;AACrC,MAAM,cAAc,GAAG;AACvB,MAAM,mBAAmB,GAAG;AAC5B,MAAM,sBAAsB,GAAG;AAE/B,MAAM,wBAAwB,GAAG;AAGlC,SAAU,kBAAkB,CAAC,OAAe,EAAA;AAChD,IAAA,OAAO,CAAA,EAAG,wBAAwB,CAAA,EAAG,OAAO,EAAE;AAChD;AAEO,MAAM,yBAAyB,GAAG;AAElC,MAAM,+BAA+B,GAAG;AAEzC,SAAU,uBAAuB,CAAC,IAAY,EAAA;AAClD,IAAA,OAAO,CAAA,EAAG,+BAA+B,CAAA,EAAG,IAAI,EAAE;AACpD;AAwBO,MAAM,iBAAiB,GAAmC,IAAI,GAAG,CAAC;IACvE,WAAW;IACX,eAAe;IACf,SAAS;IACT,UAAU;IACV,aAAa;IACb,SAAS;IACT,WAAW;IACX,YAAY;AACb,CAAA;AAEK,SAAU,gBAAgB,CAAC,OAAe,EAAE,SAAoC,EAAA;AACpF,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,SAAS,EAAE;AAClC;AAEA,MAAM,mBAAmB,GACrB,2QAA2Q;AAEzQ,SAAU,iBAAiB,CAAC,IAAY,EAAA;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;IAC7C,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,SAAS;IACpC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,MAAO;AAC5C,IAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAkB;AAC/C;;;;"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var args = require('./args.cjs');
|
|
4
|
+
|
|
5
|
+
function allBlocks(structure) {
|
|
6
|
+
return {
|
|
7
|
+
*[Symbol.iterator]() {
|
|
8
|
+
for (const g of structure.groups)
|
|
9
|
+
for (const b of g.blocks)
|
|
10
|
+
yield b;
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
class BlockGraph {
|
|
15
|
+
/** Nodes are stored in the map in topological order */
|
|
16
|
+
nodes;
|
|
17
|
+
constructor(nodes) {
|
|
18
|
+
this.nodes = nodes;
|
|
19
|
+
}
|
|
20
|
+
traverseIds(direction, ...rootBlockIds) {
|
|
21
|
+
const all = new Set();
|
|
22
|
+
this.traverse(direction, rootBlockIds, (node) => all.add(node.id));
|
|
23
|
+
return all;
|
|
24
|
+
}
|
|
25
|
+
traverseIdsExcludingRoots(direction, ...rootBlockIds) {
|
|
26
|
+
const result = this.traverseIds(direction, ...rootBlockIds);
|
|
27
|
+
for (const r of rootBlockIds)
|
|
28
|
+
result.delete(r);
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
traverse(direction, rootBlockIds, cb) {
|
|
32
|
+
let unprocessed = [...rootBlockIds];
|
|
33
|
+
// used to deduplicate possible downstream / upstream blocks and process them only once
|
|
34
|
+
const queued = new Set(unprocessed);
|
|
35
|
+
while (unprocessed.length > 0) {
|
|
36
|
+
const nextUnprocessed = [];
|
|
37
|
+
for (const blockId of unprocessed) {
|
|
38
|
+
const info = this.nodes.get(blockId);
|
|
39
|
+
cb(info);
|
|
40
|
+
info[direction].forEach((v) => {
|
|
41
|
+
if (!queued.has(v)) {
|
|
42
|
+
queued.add(v);
|
|
43
|
+
nextUnprocessed.push(v);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
unprocessed = nextUnprocessed;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function stagingGraph(structure) {
|
|
52
|
+
const result = new Map();
|
|
53
|
+
// Simple dependency graph from previous to next
|
|
54
|
+
//
|
|
55
|
+
// more complicated patterns to be implemented later
|
|
56
|
+
// (i.e. groups with specific behaviours for total outputs and inputs)
|
|
57
|
+
//
|
|
58
|
+
let previous = undefined;
|
|
59
|
+
for (const { id } of allBlocks(structure)) {
|
|
60
|
+
const current = {
|
|
61
|
+
id: id,
|
|
62
|
+
missingReferences: false,
|
|
63
|
+
};
|
|
64
|
+
result.set(id, current);
|
|
65
|
+
if (previous === undefined) {
|
|
66
|
+
current.directUpstream = current.upstream = new Set();
|
|
67
|
+
current.enrichments = current.enrichmentTargets = new Set();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
current.directUpstream = current.upstream = new Set([previous.id]);
|
|
71
|
+
previous.directDownstream = previous.downstream = new Set([current.id]);
|
|
72
|
+
previous.enrichments = previous.enrichmentTargets = new Set();
|
|
73
|
+
}
|
|
74
|
+
previous = current;
|
|
75
|
+
}
|
|
76
|
+
if (previous !== undefined)
|
|
77
|
+
previous.directDownstream = previous.downstream = new Set();
|
|
78
|
+
return new BlockGraph(result);
|
|
79
|
+
}
|
|
80
|
+
function productionGraph(structure, infoProvider) {
|
|
81
|
+
const resultMap = new Map();
|
|
82
|
+
// result graph is constructed to be able to perform traversal on incomplete graph
|
|
83
|
+
// to calculate potentialUpstreams
|
|
84
|
+
const resultGraph = new BlockGraph(resultMap);
|
|
85
|
+
// traversing blocks in topological order defined by the project structure
|
|
86
|
+
// and keeping possibleUpstreams set on each step, to consider only
|
|
87
|
+
// those dependencies that are possible under current topology
|
|
88
|
+
const allAbove = new Set();
|
|
89
|
+
for (const { id } of allBlocks(structure)) {
|
|
90
|
+
const info = infoProvider(id);
|
|
91
|
+
// skipping those blocks for which we don't have args
|
|
92
|
+
if (info === undefined)
|
|
93
|
+
continue;
|
|
94
|
+
const references = args.inferAllReferencedBlocks(info.args, allAbove);
|
|
95
|
+
// The algorithm here adds all downstream blocks of direct upstreams as potential upstreams.
|
|
96
|
+
// They may produce additional columns, anchored in our direct upstream, those columns might be needed by the workflow.
|
|
97
|
+
const potentialUpstreams = new Set([
|
|
98
|
+
...references.upstreams,
|
|
99
|
+
...resultGraph.traverseIds('enrichments', ...references.upstreamsRequiringEnrichments),
|
|
100
|
+
]);
|
|
101
|
+
// To minimize complexity of the graph, we leave only the closest upstreams, removing all their transitive dependencies,
|
|
102
|
+
// relying on the traversal mechanisms in BContexts and on UI level to connect our block with all upstreams
|
|
103
|
+
const upstreams = new Set();
|
|
104
|
+
for (const { id: pId } of allBlocks(structure)) {
|
|
105
|
+
if (pId === id)
|
|
106
|
+
break; // stopping on current block
|
|
107
|
+
if (potentialUpstreams.has(pId)) {
|
|
108
|
+
upstreams.add(pId);
|
|
109
|
+
for (const transitiveUpstream of resultGraph.traverseIdsExcludingRoots('upstream', pId))
|
|
110
|
+
upstreams.delete(transitiveUpstream);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// default assumption is that all direct upstreams are enrichment targets
|
|
114
|
+
const enrichmentTargets = info.enrichmentTargets === undefined
|
|
115
|
+
? new Set(references.upstreams)
|
|
116
|
+
: new Set(info.enrichmentTargets.map((t) => t.blockId));
|
|
117
|
+
const node = {
|
|
118
|
+
id,
|
|
119
|
+
missingReferences: references.missingReferences,
|
|
120
|
+
upstream: upstreams,
|
|
121
|
+
directUpstream: references.upstreams,
|
|
122
|
+
enrichmentTargets,
|
|
123
|
+
downstream: new Set(), // will be populated from downstream blocks
|
|
124
|
+
directDownstream: new Set(), // will be populated from downstream blocks
|
|
125
|
+
enrichments: new Set(), // will be populated from downstream blocks
|
|
126
|
+
};
|
|
127
|
+
resultMap.set(id, node);
|
|
128
|
+
references.upstreams.forEach((dep) => resultMap.get(dep).directDownstream.add(id));
|
|
129
|
+
upstreams.forEach((dep) => resultMap.get(dep).downstream.add(id));
|
|
130
|
+
enrichmentTargets.forEach((dep) => resultMap.get(dep)?.enrichments.add(id));
|
|
131
|
+
allAbove.add(id);
|
|
132
|
+
}
|
|
133
|
+
return resultGraph;
|
|
134
|
+
}
|
|
135
|
+
function setsEqual(a, b) {
|
|
136
|
+
if (a.size !== b.size)
|
|
137
|
+
return false;
|
|
138
|
+
for (const e of a)
|
|
139
|
+
if (!b.has(e))
|
|
140
|
+
return false;
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
function intersects(a, b) {
|
|
144
|
+
if (a.size > b.size)
|
|
145
|
+
return intersects(b, a);
|
|
146
|
+
for (const e of a)
|
|
147
|
+
if (b.has(e))
|
|
148
|
+
return true;
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
function graphDiff(a, b) {
|
|
152
|
+
const onlyInA = new Set();
|
|
153
|
+
const onlyInB = new Set();
|
|
154
|
+
const different = new Set();
|
|
155
|
+
a.nodes.forEach((fromA) => {
|
|
156
|
+
const fromB = b.nodes.get(fromA.id);
|
|
157
|
+
if (fromB === undefined)
|
|
158
|
+
onlyInA.add(fromA.id);
|
|
159
|
+
else if (!setsEqual(fromA.upstream, fromB.upstream) || intersects(fromA.upstream, different))
|
|
160
|
+
different.add(fromA.id);
|
|
161
|
+
});
|
|
162
|
+
b.nodes.forEach((fromB) => {
|
|
163
|
+
if (!a.nodes.has(fromB.id))
|
|
164
|
+
onlyInB.add(fromB.id);
|
|
165
|
+
else if (intersects(fromB.upstream, different))
|
|
166
|
+
different.add(fromB.id);
|
|
167
|
+
});
|
|
168
|
+
return { onlyInA, onlyInB, different };
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
exports.BlockGraph = BlockGraph;
|
|
172
|
+
exports.allBlocks = allBlocks;
|
|
173
|
+
exports.graphDiff = graphDiff;
|
|
174
|
+
exports.productionGraph = productionGraph;
|
|
175
|
+
exports.stagingGraph = stagingGraph;
|
|
176
|
+
//# sourceMappingURL=project_model_util.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_model_util.cjs","sources":["../../src/model/project_model_util.ts"],"sourcesContent":["import type { Block, ProjectStructure } from './project_model';\nimport type { Optional, Writable } from 'utility-types';\nimport { inferAllReferencedBlocks } from './args';\nimport type { PlRef } from '@milaboratories/pl-model-common';\n\nexport function allBlocks(structure: ProjectStructure): Iterable<Block> {\n return {\n *[Symbol.iterator]() {\n for (const g of structure.groups) for (const b of g.blocks) yield b;\n },\n };\n}\n\nexport interface BlockGraphNode {\n readonly id: string;\n readonly missingReferences: boolean;\n /** Upstreams, calculated accounting for potential indirect block dependencies */\n readonly upstream: Set<string>;\n /** Direct upstream, listed in block args */\n readonly directUpstream: Set<string>;\n /** Downstreams, calculated accounting for potential indirect block dependencies */\n readonly downstream: Set<string>;\n /** Downstream blocks enriching current block's outputs */\n readonly enrichments: Set<string>;\n /** Direct downstreams listing our block in it's args */\n readonly directDownstream: Set<string>;\n /** Upstream blocks that current block may enrich with its exports */\n readonly enrichmentTargets: Set<string>;\n}\n\nexport type BlockGraphDirection = 'upstream' | 'downstream' | 'directUpstream' | 'directDownstream' | 'enrichments' | 'enrichmentTargets';\n\nexport class BlockGraph {\n /** Nodes are stored in the map in topological order */\n public readonly nodes: Map<string, BlockGraphNode>;\n\n constructor(nodes: Map<string, BlockGraphNode>) {\n this.nodes = nodes;\n }\n\n public traverseIds(\n direction: BlockGraphDirection,\n ...rootBlockIds: string[]\n ): Set<string> {\n const all = new Set<string>();\n this.traverse(direction, rootBlockIds, (node) => all.add(node.id));\n return all;\n }\n\n public traverseIdsExcludingRoots(\n direction: BlockGraphDirection,\n ...rootBlockIds: string[]\n ): Set<string> {\n const result = this.traverseIds(direction, ...rootBlockIds);\n for (const r of rootBlockIds) result.delete(r);\n return result;\n }\n\n public traverse(\n direction: BlockGraphDirection,\n rootBlockIds: string[],\n cb: (node: BlockGraphNode) => void,\n ): void {\n let unprocessed = [...rootBlockIds];\n // used to deduplicate possible downstream / upstream blocks and process them only once\n const queued = new Set<string>(unprocessed);\n while (unprocessed.length > 0) {\n const nextUnprocessed: string[] = [];\n for (const blockId of unprocessed) {\n const info = this.nodes.get(blockId)!;\n cb(info);\n info[direction].forEach((v) => {\n if (!queued.has(v)) {\n queued.add(v);\n nextUnprocessed.push(v);\n }\n });\n }\n unprocessed = nextUnprocessed;\n }\n }\n}\n\nexport function stagingGraph(structure: ProjectStructure) {\n type WNode = Optional<Writable<BlockGraphNode>, BlockGraphDirection>;\n const result = new Map<string, WNode>();\n\n // Simple dependency graph from previous to next\n //\n // more complicated patterns to be implemented later\n // (i.e. groups with specific behaviours for total outputs and inputs)\n //\n let previous: WNode | undefined = undefined;\n for (const { id } of allBlocks(structure)) {\n const current: WNode = {\n id: id,\n missingReferences: false,\n };\n result.set(id, current);\n if (previous === undefined) {\n current.directUpstream = current.upstream = new Set<string>();\n current.enrichments = current.enrichmentTargets = new Set<string>();\n } else {\n current.directUpstream = current.upstream = new Set<string>([previous.id]);\n previous.directDownstream = previous.downstream = new Set<string>([current.id]);\n previous.enrichments = previous.enrichmentTargets = new Set<string>();\n }\n\n previous = current;\n }\n if (previous !== undefined) previous.directDownstream = previous.downstream = new Set<string>();\n\n return new BlockGraph(result as Map<string, BlockGraphNode>);\n}\n\nexport type ProductionGraphBlockInfo = {\n args: unknown;\n enrichmentTargets: PlRef[] | undefined;\n};\n\nexport function productionGraph(\n structure: ProjectStructure,\n infoProvider: (blockId: string) => ProductionGraphBlockInfo | undefined,\n): BlockGraph {\n const resultMap = new Map<string, BlockGraphNode>();\n // result graph is constructed to be able to perform traversal on incomplete graph\n // to calculate potentialUpstreams\n const resultGraph = new BlockGraph(resultMap);\n\n // traversing blocks in topological order defined by the project structure\n // and keeping possibleUpstreams set on each step, to consider only\n // those dependencies that are possible under current topology\n const allAbove = new Set<string>();\n for (const { id } of allBlocks(structure)) {\n const info = infoProvider(id);\n\n // skipping those blocks for which we don't have args\n if (info === undefined) continue;\n\n const references = inferAllReferencedBlocks(info.args, allAbove);\n\n // The algorithm here adds all downstream blocks of direct upstreams as potential upstreams.\n // They may produce additional columns, anchored in our direct upstream, those columns might be needed by the workflow.\n const potentialUpstreams = new Set([\n ...references.upstreams,\n ...resultGraph.traverseIds('enrichments', ...references.upstreamsRequiringEnrichments),\n ]);\n\n // To minimize complexity of the graph, we leave only the closest upstreams, removing all their transitive dependencies,\n // relying on the traversal mechanisms in BContexts and on UI level to connect our block with all upstreams\n const upstreams = new Set<string>();\n for (const { id: pId } of allBlocks(structure)) {\n if (pId === id) break; // stopping on current block\n if (potentialUpstreams.has(pId)) {\n upstreams.add(pId);\n for (const transitiveUpstream of resultGraph.traverseIdsExcludingRoots('upstream', pId))\n upstreams.delete(transitiveUpstream);\n }\n }\n\n // default assumption is that all direct upstreams are enrichment targets\n const enrichmentTargets = info.enrichmentTargets === undefined\n ? new Set(references.upstreams)\n : new Set(info.enrichmentTargets.map((t) => t.blockId));\n\n const node: BlockGraphNode = {\n id,\n missingReferences: references.missingReferences,\n upstream: upstreams,\n directUpstream: references.upstreams,\n enrichmentTargets,\n downstream: new Set<string>(), // will be populated from downstream blocks\n directDownstream: new Set<string>(), // will be populated from downstream blocks\n enrichments: new Set<string>(), // will be populated from downstream blocks\n };\n resultMap.set(id, node);\n references.upstreams.forEach((dep) => resultMap.get(dep)!.directDownstream.add(id));\n upstreams.forEach((dep) => resultMap.get(dep)!.downstream.add(id));\n enrichmentTargets.forEach((dep) => resultMap.get(dep)?.enrichments.add(id));\n allAbove.add(id);\n }\n\n return resultGraph;\n}\n\nfunction setsEqual<T>(a: Set<T>, b: Set<T>): boolean {\n if (a.size !== b.size) return false;\n for (const e of a) if (!b.has(e)) return false;\n return true;\n}\n\nfunction intersects<T>(a: Set<T>, b: Set<T>): boolean {\n if (a.size > b.size) return intersects(b, a);\n for (const e of a) if (b.has(e)) return true;\n return false;\n}\n\nexport interface GraphDiff {\n onlyInA: Set<string>;\n /** Nodes that changed the list of their upstreams,\n * and all their downstreams */\n different: Set<string>;\n onlyInB: Set<string>;\n}\n\nexport function graphDiff(a: BlockGraph, b: BlockGraph): GraphDiff {\n const onlyInA = new Set<string>();\n const onlyInB = new Set<string>();\n const different = new Set<string>();\n a.nodes.forEach((fromA) => {\n const fromB = b.nodes.get(fromA.id);\n if (fromB === undefined) onlyInA.add(fromA.id);\n else if (!setsEqual(fromA.upstream, fromB.upstream) || intersects(fromA.upstream, different))\n different.add(fromA.id);\n });\n\n b.nodes.forEach((fromB) => {\n if (!a.nodes.has(fromB.id)) onlyInB.add(fromB.id);\n else if (intersects(fromB.upstream, different)) different.add(fromB.id);\n });\n\n return { onlyInA, onlyInB, different };\n}\n"],"names":["inferAllReferencedBlocks"],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { inferAllReferencedBlocks } from './args.js';
|
|
2
|
+
|
|
3
|
+
function allBlocks(structure) {
|
|
4
|
+
return {
|
|
5
|
+
*[Symbol.iterator]() {
|
|
6
|
+
for (const g of structure.groups)
|
|
7
|
+
for (const b of g.blocks)
|
|
8
|
+
yield b;
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
class BlockGraph {
|
|
13
|
+
/** Nodes are stored in the map in topological order */
|
|
14
|
+
nodes;
|
|
15
|
+
constructor(nodes) {
|
|
16
|
+
this.nodes = nodes;
|
|
17
|
+
}
|
|
18
|
+
traverseIds(direction, ...rootBlockIds) {
|
|
19
|
+
const all = new Set();
|
|
20
|
+
this.traverse(direction, rootBlockIds, (node) => all.add(node.id));
|
|
21
|
+
return all;
|
|
22
|
+
}
|
|
23
|
+
traverseIdsExcludingRoots(direction, ...rootBlockIds) {
|
|
24
|
+
const result = this.traverseIds(direction, ...rootBlockIds);
|
|
25
|
+
for (const r of rootBlockIds)
|
|
26
|
+
result.delete(r);
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
traverse(direction, rootBlockIds, cb) {
|
|
30
|
+
let unprocessed = [...rootBlockIds];
|
|
31
|
+
// used to deduplicate possible downstream / upstream blocks and process them only once
|
|
32
|
+
const queued = new Set(unprocessed);
|
|
33
|
+
while (unprocessed.length > 0) {
|
|
34
|
+
const nextUnprocessed = [];
|
|
35
|
+
for (const blockId of unprocessed) {
|
|
36
|
+
const info = this.nodes.get(blockId);
|
|
37
|
+
cb(info);
|
|
38
|
+
info[direction].forEach((v) => {
|
|
39
|
+
if (!queued.has(v)) {
|
|
40
|
+
queued.add(v);
|
|
41
|
+
nextUnprocessed.push(v);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
unprocessed = nextUnprocessed;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function stagingGraph(structure) {
|
|
50
|
+
const result = new Map();
|
|
51
|
+
// Simple dependency graph from previous to next
|
|
52
|
+
//
|
|
53
|
+
// more complicated patterns to be implemented later
|
|
54
|
+
// (i.e. groups with specific behaviours for total outputs and inputs)
|
|
55
|
+
//
|
|
56
|
+
let previous = undefined;
|
|
57
|
+
for (const { id } of allBlocks(structure)) {
|
|
58
|
+
const current = {
|
|
59
|
+
id: id,
|
|
60
|
+
missingReferences: false,
|
|
61
|
+
};
|
|
62
|
+
result.set(id, current);
|
|
63
|
+
if (previous === undefined) {
|
|
64
|
+
current.directUpstream = current.upstream = new Set();
|
|
65
|
+
current.enrichments = current.enrichmentTargets = new Set();
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
current.directUpstream = current.upstream = new Set([previous.id]);
|
|
69
|
+
previous.directDownstream = previous.downstream = new Set([current.id]);
|
|
70
|
+
previous.enrichments = previous.enrichmentTargets = new Set();
|
|
71
|
+
}
|
|
72
|
+
previous = current;
|
|
73
|
+
}
|
|
74
|
+
if (previous !== undefined)
|
|
75
|
+
previous.directDownstream = previous.downstream = new Set();
|
|
76
|
+
return new BlockGraph(result);
|
|
77
|
+
}
|
|
78
|
+
function productionGraph(structure, infoProvider) {
|
|
79
|
+
const resultMap = new Map();
|
|
80
|
+
// result graph is constructed to be able to perform traversal on incomplete graph
|
|
81
|
+
// to calculate potentialUpstreams
|
|
82
|
+
const resultGraph = new BlockGraph(resultMap);
|
|
83
|
+
// traversing blocks in topological order defined by the project structure
|
|
84
|
+
// and keeping possibleUpstreams set on each step, to consider only
|
|
85
|
+
// those dependencies that are possible under current topology
|
|
86
|
+
const allAbove = new Set();
|
|
87
|
+
for (const { id } of allBlocks(structure)) {
|
|
88
|
+
const info = infoProvider(id);
|
|
89
|
+
// skipping those blocks for which we don't have args
|
|
90
|
+
if (info === undefined)
|
|
91
|
+
continue;
|
|
92
|
+
const references = inferAllReferencedBlocks(info.args, allAbove);
|
|
93
|
+
// The algorithm here adds all downstream blocks of direct upstreams as potential upstreams.
|
|
94
|
+
// They may produce additional columns, anchored in our direct upstream, those columns might be needed by the workflow.
|
|
95
|
+
const potentialUpstreams = new Set([
|
|
96
|
+
...references.upstreams,
|
|
97
|
+
...resultGraph.traverseIds('enrichments', ...references.upstreamsRequiringEnrichments),
|
|
98
|
+
]);
|
|
99
|
+
// To minimize complexity of the graph, we leave only the closest upstreams, removing all their transitive dependencies,
|
|
100
|
+
// relying on the traversal mechanisms in BContexts and on UI level to connect our block with all upstreams
|
|
101
|
+
const upstreams = new Set();
|
|
102
|
+
for (const { id: pId } of allBlocks(structure)) {
|
|
103
|
+
if (pId === id)
|
|
104
|
+
break; // stopping on current block
|
|
105
|
+
if (potentialUpstreams.has(pId)) {
|
|
106
|
+
upstreams.add(pId);
|
|
107
|
+
for (const transitiveUpstream of resultGraph.traverseIdsExcludingRoots('upstream', pId))
|
|
108
|
+
upstreams.delete(transitiveUpstream);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// default assumption is that all direct upstreams are enrichment targets
|
|
112
|
+
const enrichmentTargets = info.enrichmentTargets === undefined
|
|
113
|
+
? new Set(references.upstreams)
|
|
114
|
+
: new Set(info.enrichmentTargets.map((t) => t.blockId));
|
|
115
|
+
const node = {
|
|
116
|
+
id,
|
|
117
|
+
missingReferences: references.missingReferences,
|
|
118
|
+
upstream: upstreams,
|
|
119
|
+
directUpstream: references.upstreams,
|
|
120
|
+
enrichmentTargets,
|
|
121
|
+
downstream: new Set(), // will be populated from downstream blocks
|
|
122
|
+
directDownstream: new Set(), // will be populated from downstream blocks
|
|
123
|
+
enrichments: new Set(), // will be populated from downstream blocks
|
|
124
|
+
};
|
|
125
|
+
resultMap.set(id, node);
|
|
126
|
+
references.upstreams.forEach((dep) => resultMap.get(dep).directDownstream.add(id));
|
|
127
|
+
upstreams.forEach((dep) => resultMap.get(dep).downstream.add(id));
|
|
128
|
+
enrichmentTargets.forEach((dep) => resultMap.get(dep)?.enrichments.add(id));
|
|
129
|
+
allAbove.add(id);
|
|
130
|
+
}
|
|
131
|
+
return resultGraph;
|
|
132
|
+
}
|
|
133
|
+
function setsEqual(a, b) {
|
|
134
|
+
if (a.size !== b.size)
|
|
135
|
+
return false;
|
|
136
|
+
for (const e of a)
|
|
137
|
+
if (!b.has(e))
|
|
138
|
+
return false;
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
function intersects(a, b) {
|
|
142
|
+
if (a.size > b.size)
|
|
143
|
+
return intersects(b, a);
|
|
144
|
+
for (const e of a)
|
|
145
|
+
if (b.has(e))
|
|
146
|
+
return true;
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
function graphDiff(a, b) {
|
|
150
|
+
const onlyInA = new Set();
|
|
151
|
+
const onlyInB = new Set();
|
|
152
|
+
const different = new Set();
|
|
153
|
+
a.nodes.forEach((fromA) => {
|
|
154
|
+
const fromB = b.nodes.get(fromA.id);
|
|
155
|
+
if (fromB === undefined)
|
|
156
|
+
onlyInA.add(fromA.id);
|
|
157
|
+
else if (!setsEqual(fromA.upstream, fromB.upstream) || intersects(fromA.upstream, different))
|
|
158
|
+
different.add(fromA.id);
|
|
159
|
+
});
|
|
160
|
+
b.nodes.forEach((fromB) => {
|
|
161
|
+
if (!a.nodes.has(fromB.id))
|
|
162
|
+
onlyInB.add(fromB.id);
|
|
163
|
+
else if (intersects(fromB.upstream, different))
|
|
164
|
+
different.add(fromB.id);
|
|
165
|
+
});
|
|
166
|
+
return { onlyInA, onlyInB, different };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export { BlockGraph, allBlocks, graphDiff, productionGraph, stagingGraph };
|
|
170
|
+
//# sourceMappingURL=project_model_util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_model_util.js","sources":["../../src/model/project_model_util.ts"],"sourcesContent":["import type { Block, ProjectStructure } from './project_model';\nimport type { Optional, Writable } from 'utility-types';\nimport { inferAllReferencedBlocks } from './args';\nimport type { PlRef } from '@milaboratories/pl-model-common';\n\nexport function allBlocks(structure: ProjectStructure): Iterable<Block> {\n return {\n *[Symbol.iterator]() {\n for (const g of structure.groups) for (const b of g.blocks) yield b;\n },\n };\n}\n\nexport interface BlockGraphNode {\n readonly id: string;\n readonly missingReferences: boolean;\n /** Upstreams, calculated accounting for potential indirect block dependencies */\n readonly upstream: Set<string>;\n /** Direct upstream, listed in block args */\n readonly directUpstream: Set<string>;\n /** Downstreams, calculated accounting for potential indirect block dependencies */\n readonly downstream: Set<string>;\n /** Downstream blocks enriching current block's outputs */\n readonly enrichments: Set<string>;\n /** Direct downstreams listing our block in it's args */\n readonly directDownstream: Set<string>;\n /** Upstream blocks that current block may enrich with its exports */\n readonly enrichmentTargets: Set<string>;\n}\n\nexport type BlockGraphDirection = 'upstream' | 'downstream' | 'directUpstream' | 'directDownstream' | 'enrichments' | 'enrichmentTargets';\n\nexport class BlockGraph {\n /** Nodes are stored in the map in topological order */\n public readonly nodes: Map<string, BlockGraphNode>;\n\n constructor(nodes: Map<string, BlockGraphNode>) {\n this.nodes = nodes;\n }\n\n public traverseIds(\n direction: BlockGraphDirection,\n ...rootBlockIds: string[]\n ): Set<string> {\n const all = new Set<string>();\n this.traverse(direction, rootBlockIds, (node) => all.add(node.id));\n return all;\n }\n\n public traverseIdsExcludingRoots(\n direction: BlockGraphDirection,\n ...rootBlockIds: string[]\n ): Set<string> {\n const result = this.traverseIds(direction, ...rootBlockIds);\n for (const r of rootBlockIds) result.delete(r);\n return result;\n }\n\n public traverse(\n direction: BlockGraphDirection,\n rootBlockIds: string[],\n cb: (node: BlockGraphNode) => void,\n ): void {\n let unprocessed = [...rootBlockIds];\n // used to deduplicate possible downstream / upstream blocks and process them only once\n const queued = new Set<string>(unprocessed);\n while (unprocessed.length > 0) {\n const nextUnprocessed: string[] = [];\n for (const blockId of unprocessed) {\n const info = this.nodes.get(blockId)!;\n cb(info);\n info[direction].forEach((v) => {\n if (!queued.has(v)) {\n queued.add(v);\n nextUnprocessed.push(v);\n }\n });\n }\n unprocessed = nextUnprocessed;\n }\n }\n}\n\nexport function stagingGraph(structure: ProjectStructure) {\n type WNode = Optional<Writable<BlockGraphNode>, BlockGraphDirection>;\n const result = new Map<string, WNode>();\n\n // Simple dependency graph from previous to next\n //\n // more complicated patterns to be implemented later\n // (i.e. groups with specific behaviours for total outputs and inputs)\n //\n let previous: WNode | undefined = undefined;\n for (const { id } of allBlocks(structure)) {\n const current: WNode = {\n id: id,\n missingReferences: false,\n };\n result.set(id, current);\n if (previous === undefined) {\n current.directUpstream = current.upstream = new Set<string>();\n current.enrichments = current.enrichmentTargets = new Set<string>();\n } else {\n current.directUpstream = current.upstream = new Set<string>([previous.id]);\n previous.directDownstream = previous.downstream = new Set<string>([current.id]);\n previous.enrichments = previous.enrichmentTargets = new Set<string>();\n }\n\n previous = current;\n }\n if (previous !== undefined) previous.directDownstream = previous.downstream = new Set<string>();\n\n return new BlockGraph(result as Map<string, BlockGraphNode>);\n}\n\nexport type ProductionGraphBlockInfo = {\n args: unknown;\n enrichmentTargets: PlRef[] | undefined;\n};\n\nexport function productionGraph(\n structure: ProjectStructure,\n infoProvider: (blockId: string) => ProductionGraphBlockInfo | undefined,\n): BlockGraph {\n const resultMap = new Map<string, BlockGraphNode>();\n // result graph is constructed to be able to perform traversal on incomplete graph\n // to calculate potentialUpstreams\n const resultGraph = new BlockGraph(resultMap);\n\n // traversing blocks in topological order defined by the project structure\n // and keeping possibleUpstreams set on each step, to consider only\n // those dependencies that are possible under current topology\n const allAbove = new Set<string>();\n for (const { id } of allBlocks(structure)) {\n const info = infoProvider(id);\n\n // skipping those blocks for which we don't have args\n if (info === undefined) continue;\n\n const references = inferAllReferencedBlocks(info.args, allAbove);\n\n // The algorithm here adds all downstream blocks of direct upstreams as potential upstreams.\n // They may produce additional columns, anchored in our direct upstream, those columns might be needed by the workflow.\n const potentialUpstreams = new Set([\n ...references.upstreams,\n ...resultGraph.traverseIds('enrichments', ...references.upstreamsRequiringEnrichments),\n ]);\n\n // To minimize complexity of the graph, we leave only the closest upstreams, removing all their transitive dependencies,\n // relying on the traversal mechanisms in BContexts and on UI level to connect our block with all upstreams\n const upstreams = new Set<string>();\n for (const { id: pId } of allBlocks(structure)) {\n if (pId === id) break; // stopping on current block\n if (potentialUpstreams.has(pId)) {\n upstreams.add(pId);\n for (const transitiveUpstream of resultGraph.traverseIdsExcludingRoots('upstream', pId))\n upstreams.delete(transitiveUpstream);\n }\n }\n\n // default assumption is that all direct upstreams are enrichment targets\n const enrichmentTargets = info.enrichmentTargets === undefined\n ? new Set(references.upstreams)\n : new Set(info.enrichmentTargets.map((t) => t.blockId));\n\n const node: BlockGraphNode = {\n id,\n missingReferences: references.missingReferences,\n upstream: upstreams,\n directUpstream: references.upstreams,\n enrichmentTargets,\n downstream: new Set<string>(), // will be populated from downstream blocks\n directDownstream: new Set<string>(), // will be populated from downstream blocks\n enrichments: new Set<string>(), // will be populated from downstream blocks\n };\n resultMap.set(id, node);\n references.upstreams.forEach((dep) => resultMap.get(dep)!.directDownstream.add(id));\n upstreams.forEach((dep) => resultMap.get(dep)!.downstream.add(id));\n enrichmentTargets.forEach((dep) => resultMap.get(dep)?.enrichments.add(id));\n allAbove.add(id);\n }\n\n return resultGraph;\n}\n\nfunction setsEqual<T>(a: Set<T>, b: Set<T>): boolean {\n if (a.size !== b.size) return false;\n for (const e of a) if (!b.has(e)) return false;\n return true;\n}\n\nfunction intersects<T>(a: Set<T>, b: Set<T>): boolean {\n if (a.size > b.size) return intersects(b, a);\n for (const e of a) if (b.has(e)) return true;\n return false;\n}\n\nexport interface GraphDiff {\n onlyInA: Set<string>;\n /** Nodes that changed the list of their upstreams,\n * and all their downstreams */\n different: Set<string>;\n onlyInB: Set<string>;\n}\n\nexport function graphDiff(a: BlockGraph, b: BlockGraph): GraphDiff {\n const onlyInA = new Set<string>();\n const onlyInB = new Set<string>();\n const different = new Set<string>();\n a.nodes.forEach((fromA) => {\n const fromB = b.nodes.get(fromA.id);\n if (fromB === undefined) onlyInA.add(fromA.id);\n else if (!setsEqual(fromA.upstream, fromB.upstream) || intersects(fromA.upstream, different))\n different.add(fromA.id);\n });\n\n b.nodes.forEach((fromB) => {\n if (!a.nodes.has(fromB.id)) onlyInB.add(fromB.id);\n else if (intersects(fromB.upstream, different)) different.add(fromB.id);\n });\n\n return { onlyInA, onlyInB, different };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/** Uses KV for uiState compared to V2 */
|
|
4
|
+
const SchemaVersionV1 = '1';
|
|
5
|
+
const BlockFrontendStateKeyPrefixV1 = 'BlockFrontendState/';
|
|
6
|
+
|
|
7
|
+
exports.BlockFrontendStateKeyPrefixV1 = BlockFrontendStateKeyPrefixV1;
|
|
8
|
+
exports.SchemaVersionV1 = SchemaVersionV1;
|
|
9
|
+
//# sourceMappingURL=project_model_v1.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_model_v1.cjs","sources":["../../src/model/project_model_v1.ts"],"sourcesContent":["/** Uses KV for uiState compared to V2 */\nexport const SchemaVersionV1 = '1';\n\nexport const BlockFrontendStateKeyPrefixV1 = 'BlockFrontendState/';\nexport const BlockFrontendStateKeyPatternV1 = /^BlockFrontendState\\/(?<blockid>.*)$/;\n\nexport function blockFrontendStateKeyV1(blockId: string): string {\n return `${BlockFrontendStateKeyPrefixV1}${blockId}`;\n}\n\n/** Returns block id, or undefined if key does not match the pattern. */\nexport function parseBlockFrontendStateKeyV1(key: string): string | undefined {\n const match = key.match(BlockFrontendStateKeyPatternV1);\n if (match === null) return undefined;\n return match.groups!['blockid'];\n}\n"],"names":[],"mappings":";;AAAA;AACO,MAAM,eAAe,GAAG;AAExB,MAAM,6BAA6B,GAAG;;;;;"}
|
|
@@ -5,4 +5,3 @@ export declare const BlockFrontendStateKeyPatternV1: RegExp;
|
|
|
5
5
|
export declare function blockFrontendStateKeyV1(blockId: string): string;
|
|
6
6
|
/** Returns block id, or undefined if key does not match the pattern. */
|
|
7
7
|
export declare function parseBlockFrontendStateKeyV1(key: string): string | undefined;
|
|
8
|
-
//# sourceMappingURL=project_model_v1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project_model_v1.js","sources":["../../src/model/project_model_v1.ts"],"sourcesContent":["/** Uses KV for uiState compared to V2 */\nexport const SchemaVersionV1 = '1';\n\nexport const BlockFrontendStateKeyPrefixV1 = 'BlockFrontendState/';\nexport const BlockFrontendStateKeyPatternV1 = /^BlockFrontendState\\/(?<blockid>.*)$/;\n\nexport function blockFrontendStateKeyV1(blockId: string): string {\n return `${BlockFrontendStateKeyPrefixV1}${blockId}`;\n}\n\n/** Returns block id, or undefined if key does not match the pattern. */\nexport function parseBlockFrontendStateKeyV1(key: string): string | undefined {\n const match = key.match(BlockFrontendStateKeyPatternV1);\n if (match === null) return undefined;\n return match.groups!['blockid'];\n}\n"],"names":[],"mappings":"AAAA;AACO,MAAM,eAAe,GAAG;AAExB,MAAM,6BAA6B,GAAG;;;;"}
|