@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 @@
|
|
|
1
|
+
{"version":3,"file":"executor.cjs","sources":["../../src/cfg_render/executor.ts"],"sourcesContent":["import type {\n ArgumentKey,\n ArgumentValues,\n ExecutionEnvironment,\n Operation,\n Subroutine,\n} from './operation';\nimport Denque from 'denque';\nimport { assertNever, notEmpty } from '@milaboratories/ts-helpers';\nimport type { ComputableCtx, ComputableRenderingOps } from '@milaboratories/computable';\nimport { Computable } from '@milaboratories/computable';\nimport type { Cfg } from '@platforma-sdk/model';\nimport { renderCfg, resOp } from './renderer';\nimport canonicalize from 'canonicalize';\nimport type { BlockContextAny } from '../middle_layer/block_ctx';\nimport type { MiddleLayerDriverKit } from '../middle_layer/driver_kit';\nimport { NonKeyCtxFields, toCfgContext } from '../middle_layer/block_ctx_unsafe';\n\n/** Addresses pending subroutines inside the stack */\ntype SubroutineKey = symbol;\n\n/** Represents destination of the result of an operation. I.e. when sequence of\n * subroutine invocations, and computables terminates with result, this object\n * determines to which argument of which pending subroutine it should be delivered.\n * See special value for delivery of the final \"return\" result. */\ntype Destination = {\n op: SubroutineKey;\n arg: ArgumentKey;\n};\n\n/** Special address of operation, see below. */\nconst ReturnOpKey: unique symbol = Symbol();\n/** The same, but for the argument part of destination, see below. */\nconst ReturnArgKey = 'return';\n\n/** Special destination, telling the executor that corresponding result should\n * be exposed as a final result, and execution terminate at this point. */\nconst ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey } as Destination;\n\nfunction isReturnDestination(destination: Destination): boolean {\n return destination.op == ReturnOpKey && destination.arg == ReturnArgKey;\n}\n\n/** Queued operation, used inside the executor */\ntype QueuedOperation = {\n operation: Operation;\n destination: Destination;\n};\n\n/** Queued computation, returned by the first round of config execution. Such\n * computables should be returned in the intermediate representation of the\n * enclosing computable, and after they are resolved and passed to the\n * postprocessing routine, should be injected into the execution stack to\n * finalize the computation. */\ntype ScheduledComputable = {\n destination: Destination;\n computable: Computable<unknown>;\n};\n\n/** This is what ScheduledComputable transforms from intermediate\n * representation to post-processing. */\ntype MaterializedComputable = {\n destination: Destination;\n computable: unknown;\n};\n\n/** Main entry inside the execution stack. */\ntype PendingSubroutine = {\n subroutine: Subroutine;\n destination: Destination;\n argCounter: number;\n args: ArgumentValues;\n};\n\n/** Execution stack. The closest concept that this object along with enclosed\n * {@link PendingSubroutine}s represent is a Continuation.\n * https://en.wikipedia.org/wiki/Continuation */\ntype ExecutionStack = {\n result?: unknown;\n pendingSubroutines: Map<SubroutineKey, PendingSubroutine>;\n};\n\n/** Returns initial stack value. */\nfunction zeroStack(): ExecutionStack {\n return { pendingSubroutines: new Map<SubroutineKey, PendingSubroutine>() };\n}\n\n/** Implements main executor mechanism.\n * @param env to be passed to while executing operations\n * @param stack execution stack to continue execution from\n * @param operations operations to initiate the execution process\n * @param allowComputables if false, scheduling of async computables will result in error\n * */\nfunction execute(\n env: ExecutionEnvironment,\n stack: ExecutionStack,\n operations: QueuedOperation[],\n allowComputables: boolean,\n): ScheduledComputable[] {\n const operationQueue = new Denque<QueuedOperation>(operations);\n\n /** Returns false if final result is set as result of this operation,\n * true if we should continue processing. */\n const deliverResult = (destination: Destination, result: unknown): boolean => {\n if (isReturnDestination(destination)) {\n stack.result = result;\n return false;\n }\n\n const pending = notEmpty(stack.pendingSubroutines.get(destination.op));\n if (destination.arg in pending.args) throw new Error('argument already set');\n pending.args[destination.arg] = result;\n pending.argCounter--;\n if (pending.argCounter === 0) {\n stack.pendingSubroutines.delete(destination.op);\n operationQueue.push({\n destination: pending.destination,\n operation: pending.subroutine(pending.args),\n });\n }\n\n return true;\n };\n\n // computables, scheduled during computation, are aggregated in this array,\n // and returned from the function in the end\n const computables: ScheduledComputable[] = [];\n\n // each loop = execution of a single queued operation\n mainLoop: while (operationQueue.length > 0) {\n const op = operationQueue.shift()!;\n const action = op.operation(env);\n switch (action.type) {\n case 'ReturnResult':\n if (!deliverResult(op.destination, action.result)) break mainLoop; // this terminates execution\n break; // switch\n\n case 'ScheduleSubroutine':\n {\n const newOpKey = Symbol();\n\n const argRequests = Object.entries(action.args);\n const initialArgCounter = argRequests.length;\n\n if (initialArgCounter === 0)\n // if no pending arguments\n operationQueue.push({\n destination: op.destination,\n operation: action.subroutine({}),\n });\n else {\n for (const [arg, operation] of argRequests)\n operationQueue.push({\n destination: { op: newOpKey, arg },\n operation,\n });\n\n stack.pendingSubroutines.set(newOpKey, {\n argCounter: initialArgCounter,\n args: {},\n subroutine: action.subroutine,\n destination: op.destination,\n });\n }\n }\n break;\n\n case 'ScheduleComputable':\n if (!allowComputables)\n throw new Error('asynchronous operations are forbidden in this context');\n computables.push({\n destination: op.destination,\n computable: action.computable,\n });\n break;\n\n default:\n assertNever(action);\n }\n }\n\n return computables;\n}\n\n//\n// Computable\n//\n\n/** Main method to render configurations */\nexport function computableFromCfg(\n drivers: MiddleLayerDriverKit,\n bCtx: BlockContextAny,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n return computableFromCfgUnsafe(drivers, toCfgContext(bCtx), cfg, ops);\n}\n\nexport function computableFromCfgUnsafe(\n drivers: MiddleLayerDriverKit,\n ctx: Record<string, unknown>,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n const key\n = `${ctx.blockId}#`\n + canonicalize({\n ctx: Object.fromEntries(\n Object.entries(ctx).filter(([k]) => NonKeyCtxFields.indexOf(k) === -1),\n ),\n cfg: cfg,\n })!;\n return Computable.makeRaw(\n (c) => {\n const env: ExecutionEnvironment = { drivers, cCtx: c };\n const stack = zeroStack();\n const computables = execute(\n env,\n stack,\n [\n {\n destination: ReturnDestination,\n operation: renderCfg(ctx, cfg),\n },\n ],\n true,\n );\n return {\n ir: computables,\n postprocessValue(value: MaterializedComputable[]): unknown {\n const resolvedOps: QueuedOperation[] = [];\n for (const mc of value)\n resolvedOps.push({ destination: mc.destination, operation: resOp(mc.computable) });\n const postEnv: ExecutionEnvironment = {\n drivers,\n get cCtx(): ComputableCtx {\n throw new Error('asynchronous operations are forbidden in this context');\n },\n };\n\n // Post process can be called several times, that's why it must be a side-effect-free function.\n // But `execute` modifies a stack, so we have to defensively copy it here.\n const copyOfPendingSubrotines = new Map<SubroutineKey, PendingSubroutine>();\n for (const [key, value] of stack.pendingSubroutines)\n copyOfPendingSubrotines.set(key, { ...value, args: { ...value.args } });\n const copiedStack: ExecutionStack = {\n result: stack.result,\n pendingSubroutines: copyOfPendingSubrotines,\n };\n execute(postEnv, copiedStack, resolvedOps, false);\n if (!('result' in copiedStack))\n throw new Error('illegal cfg rendering stack state, no result');\n return copiedStack.result;\n },\n };\n },\n { ...ops, key },\n );\n}\n"],"names":["notEmpty","assertNever","toCfgContext","NonKeyCtxFields","Computable","renderCfg","resOp"],"mappings":";;;;;;;;;AA8BA;AACA,MAAM,WAAW,GAAkB,MAAM,EAAE;AAC3C;AACA,MAAM,YAAY,GAAG,QAAQ;AAE7B;AAC0E;AAC1E,MAAM,iBAAiB,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAiB;AAE/E,SAAS,mBAAmB,CAAC,WAAwB,EAAA;IACnD,OAAO,WAAW,CAAC,EAAE,IAAI,WAAW,IAAI,WAAW,CAAC,GAAG,IAAI,YAAY;AACzE;AAyCA;AACA,SAAS,SAAS,GAAA;AAChB,IAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,GAAG,EAAoC,EAAE;AAC5E;AAEA;;;;;AAKK;AACL,SAAS,OAAO,CACd,GAAyB,EACzB,KAAqB,EACrB,UAA6B,EAC7B,gBAAyB,EAAA;AAEzB,IAAA,MAAM,cAAc,GAAG,IAAI,MAAM,CAAkB,UAAU,CAAC;AAE9D;AAC4C;AAC5C,IAAA,MAAM,aAAa,GAAG,CAAC,WAAwB,EAAE,MAAe,KAAa;AAC3E,QAAA,IAAI,mBAAmB,CAAC,WAAW,CAAC,EAAE;AACpC,YAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AACrB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,OAAO,GAAGA,kBAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACtE,QAAA,IAAI,WAAW,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM;QACtC,OAAO,CAAC,UAAU,EAAE;AACpB,QAAA,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE;YAC5B,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/C,cAAc,CAAC,IAAI,CAAC;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5C,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;;;IAID,MAAM,WAAW,GAA0B,EAAE;;IAG7C,QAAQ,EAAE,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,QAAA,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,EAAG;QAClC,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;AAChC,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;oBAAE,MAAM,QAAQ,CAAC;AAClE,gBAAA,MAAM;AAER,YAAA,KAAK,oBAAoB;gBACvB;AACE,oBAAA,MAAM,QAAQ,GAAG,MAAM,EAAE;oBAEzB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AAC/C,oBAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM;oBAE5C,IAAI,iBAAiB,KAAK,CAAC;;wBAEzB,cAAc,CAAC,IAAI,CAAC;4BAClB,WAAW,EAAE,EAAE,CAAC,WAAW;AAC3B,4BAAA,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACjC,yBAAA,CAAC;yBACC;AACH,wBAAA,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,WAAW;4BACxC,cAAc,CAAC,IAAI,CAAC;AAClB,gCAAA,WAAW,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;gCAClC,SAAS;AACV,6BAAA,CAAC;AAEJ,wBAAA,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE;AACrC,4BAAA,UAAU,EAAE,iBAAiB;AAC7B,4BAAA,IAAI,EAAE,EAAE;4BACR,UAAU,EAAE,MAAM,CAAC,UAAU;4BAC7B,WAAW,EAAE,EAAE,CAAC,WAAW;AAC5B,yBAAA,CAAC;oBACJ;gBACF;gBACA;AAEF,YAAA,KAAK,oBAAoB;AACvB,gBAAA,IAAI,CAAC,gBAAgB;AACnB,oBAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;gBAC1E,WAAW,CAAC,IAAI,CAAC;oBACf,WAAW,EAAE,EAAE,CAAC,WAAW;oBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;AAC9B,iBAAA,CAAC;gBACF;AAEF,YAAA;gBACEC,qBAAW,CAAC,MAAM,CAAC;;IAEzB;AAEA,IAAA,OAAO,WAAW;AACpB;AAEA;AACA;AACA;AAEA;AACM,SAAU,iBAAiB,CAC/B,OAA6B,EAC7B,IAAqB,EACrB,GAAQ,EACR,GAAA,GAAuC,EAAE,EAAA;AAEzC,IAAA,OAAO,uBAAuB,CAAC,OAAO,EAAEC,6BAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AACvE;AAEM,SAAU,uBAAuB,CACrC,OAA6B,EAC7B,GAA4B,EAC5B,GAAQ,EACR,GAAA,GAAuC,EAAE,EAAA;AAEzC,IAAA,MAAM,GAAG,GACL,CAAA,EAAG,GAAG,CAAC,OAAO,CAAA,CAAA;AACd,UAAA,YAAY,CAAC;AACb,YAAA,GAAG,EAAE,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAKC,gCAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CACvE;AACD,YAAA,GAAG,EAAE,GAAG;AACT,SAAA,CAAE;AACL,IAAA,OAAOC,qBAAU,CAAC,OAAO,CACvB,CAAC,CAAC,KAAI;QACJ,MAAM,GAAG,GAAyB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;AACtD,QAAA,MAAM,KAAK,GAAG,SAAS,EAAE;AACzB,QAAA,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EACH,KAAK,EACL;AACE,YAAA;AACE,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,SAAS,EAAEC,kBAAS,CAAC,GAAG,EAAE,GAAG,CAAC;AAC/B,aAAA;SACF,EACD,IAAI,CACL;QACD,OAAO;AACL,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,gBAAgB,CAAC,KAA+B,EAAA;gBAC9C,MAAM,WAAW,GAAsB,EAAE;gBACzC,KAAK,MAAM,EAAE,IAAI,KAAK;oBACpB,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,EAAEC,cAAK,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;AACpF,gBAAA,MAAM,OAAO,GAAyB;oBACpC,OAAO;AACP,oBAAA,IAAI,IAAI,GAAA;AACN,wBAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;oBAC1E,CAAC;iBACF;;;AAID,gBAAA,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAoC;gBAC3E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,kBAAkB;AACjD,oBAAA,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;AACzE,gBAAA,MAAM,WAAW,GAAmB;oBAClC,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,oBAAA,kBAAkB,EAAE,uBAAuB;iBAC5C;gBACD,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC;AACjD,gBAAA,IAAI,EAAE,QAAQ,IAAI,WAAW,CAAC;AAC5B,oBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;gBACjE,OAAO,WAAW,CAAC,MAAM;YAC3B,CAAC;SACF;IACH,CAAC,EACD,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,CAChB;AACH;;;;;"}
|
|
@@ -5,4 +5,3 @@ import { MiddleLayerDriverKit } from '../middle_layer/driver_kit';
|
|
|
5
5
|
/** Main method to render configurations */
|
|
6
6
|
export declare function computableFromCfg(drivers: MiddleLayerDriverKit, bCtx: BlockContextAny, cfg: Cfg, ops?: Partial<ComputableRenderingOps>): Computable<unknown>;
|
|
7
7
|
export declare function computableFromCfgUnsafe(drivers: MiddleLayerDriverKit, ctx: Record<string, unknown>, cfg: Cfg, ops?: Partial<ComputableRenderingOps>): Computable<unknown>;
|
|
8
|
-
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import Denque from 'denque';
|
|
2
|
+
import { assertNever, notEmpty } from '@milaboratories/ts-helpers';
|
|
3
|
+
import { Computable } from '@milaboratories/computable';
|
|
4
|
+
import { renderCfg, resOp } from './renderer.js';
|
|
5
|
+
import canonicalize from 'canonicalize';
|
|
6
|
+
import { toCfgContext, NonKeyCtxFields } from '../middle_layer/block_ctx_unsafe.js';
|
|
7
|
+
|
|
8
|
+
/** Special address of operation, see below. */
|
|
9
|
+
const ReturnOpKey = Symbol();
|
|
10
|
+
/** The same, but for the argument part of destination, see below. */
|
|
11
|
+
const ReturnArgKey = 'return';
|
|
12
|
+
/** Special destination, telling the executor that corresponding result should
|
|
13
|
+
* be exposed as a final result, and execution terminate at this point. */
|
|
14
|
+
const ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey };
|
|
15
|
+
function isReturnDestination(destination) {
|
|
16
|
+
return destination.op == ReturnOpKey && destination.arg == ReturnArgKey;
|
|
17
|
+
}
|
|
18
|
+
/** Returns initial stack value. */
|
|
19
|
+
function zeroStack() {
|
|
20
|
+
return { pendingSubroutines: new Map() };
|
|
21
|
+
}
|
|
22
|
+
/** Implements main executor mechanism.
|
|
23
|
+
* @param env to be passed to while executing operations
|
|
24
|
+
* @param stack execution stack to continue execution from
|
|
25
|
+
* @param operations operations to initiate the execution process
|
|
26
|
+
* @param allowComputables if false, scheduling of async computables will result in error
|
|
27
|
+
* */
|
|
28
|
+
function execute(env, stack, operations, allowComputables) {
|
|
29
|
+
const operationQueue = new Denque(operations);
|
|
30
|
+
/** Returns false if final result is set as result of this operation,
|
|
31
|
+
* true if we should continue processing. */
|
|
32
|
+
const deliverResult = (destination, result) => {
|
|
33
|
+
if (isReturnDestination(destination)) {
|
|
34
|
+
stack.result = result;
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const pending = notEmpty(stack.pendingSubroutines.get(destination.op));
|
|
38
|
+
if (destination.arg in pending.args)
|
|
39
|
+
throw new Error('argument already set');
|
|
40
|
+
pending.args[destination.arg] = result;
|
|
41
|
+
pending.argCounter--;
|
|
42
|
+
if (pending.argCounter === 0) {
|
|
43
|
+
stack.pendingSubroutines.delete(destination.op);
|
|
44
|
+
operationQueue.push({
|
|
45
|
+
destination: pending.destination,
|
|
46
|
+
operation: pending.subroutine(pending.args),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
};
|
|
51
|
+
// computables, scheduled during computation, are aggregated in this array,
|
|
52
|
+
// and returned from the function in the end
|
|
53
|
+
const computables = [];
|
|
54
|
+
// each loop = execution of a single queued operation
|
|
55
|
+
mainLoop: while (operationQueue.length > 0) {
|
|
56
|
+
const op = operationQueue.shift();
|
|
57
|
+
const action = op.operation(env);
|
|
58
|
+
switch (action.type) {
|
|
59
|
+
case 'ReturnResult':
|
|
60
|
+
if (!deliverResult(op.destination, action.result))
|
|
61
|
+
break mainLoop; // this terminates execution
|
|
62
|
+
break; // switch
|
|
63
|
+
case 'ScheduleSubroutine':
|
|
64
|
+
{
|
|
65
|
+
const newOpKey = Symbol();
|
|
66
|
+
const argRequests = Object.entries(action.args);
|
|
67
|
+
const initialArgCounter = argRequests.length;
|
|
68
|
+
if (initialArgCounter === 0)
|
|
69
|
+
// if no pending arguments
|
|
70
|
+
operationQueue.push({
|
|
71
|
+
destination: op.destination,
|
|
72
|
+
operation: action.subroutine({}),
|
|
73
|
+
});
|
|
74
|
+
else {
|
|
75
|
+
for (const [arg, operation] of argRequests)
|
|
76
|
+
operationQueue.push({
|
|
77
|
+
destination: { op: newOpKey, arg },
|
|
78
|
+
operation,
|
|
79
|
+
});
|
|
80
|
+
stack.pendingSubroutines.set(newOpKey, {
|
|
81
|
+
argCounter: initialArgCounter,
|
|
82
|
+
args: {},
|
|
83
|
+
subroutine: action.subroutine,
|
|
84
|
+
destination: op.destination,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
case 'ScheduleComputable':
|
|
90
|
+
if (!allowComputables)
|
|
91
|
+
throw new Error('asynchronous operations are forbidden in this context');
|
|
92
|
+
computables.push({
|
|
93
|
+
destination: op.destination,
|
|
94
|
+
computable: action.computable,
|
|
95
|
+
});
|
|
96
|
+
break;
|
|
97
|
+
default:
|
|
98
|
+
assertNever(action);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return computables;
|
|
102
|
+
}
|
|
103
|
+
//
|
|
104
|
+
// Computable
|
|
105
|
+
//
|
|
106
|
+
/** Main method to render configurations */
|
|
107
|
+
function computableFromCfg(drivers, bCtx, cfg, ops = {}) {
|
|
108
|
+
return computableFromCfgUnsafe(drivers, toCfgContext(bCtx), cfg, ops);
|
|
109
|
+
}
|
|
110
|
+
function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
|
|
111
|
+
const key = `${ctx.blockId}#`
|
|
112
|
+
+ canonicalize({
|
|
113
|
+
ctx: Object.fromEntries(Object.entries(ctx).filter(([k]) => NonKeyCtxFields.indexOf(k) === -1)),
|
|
114
|
+
cfg: cfg,
|
|
115
|
+
});
|
|
116
|
+
return Computable.makeRaw((c) => {
|
|
117
|
+
const env = { drivers, cCtx: c };
|
|
118
|
+
const stack = zeroStack();
|
|
119
|
+
const computables = execute(env, stack, [
|
|
120
|
+
{
|
|
121
|
+
destination: ReturnDestination,
|
|
122
|
+
operation: renderCfg(ctx, cfg),
|
|
123
|
+
},
|
|
124
|
+
], true);
|
|
125
|
+
return {
|
|
126
|
+
ir: computables,
|
|
127
|
+
postprocessValue(value) {
|
|
128
|
+
const resolvedOps = [];
|
|
129
|
+
for (const mc of value)
|
|
130
|
+
resolvedOps.push({ destination: mc.destination, operation: resOp(mc.computable) });
|
|
131
|
+
const postEnv = {
|
|
132
|
+
drivers,
|
|
133
|
+
get cCtx() {
|
|
134
|
+
throw new Error('asynchronous operations are forbidden in this context');
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
// Post process can be called several times, that's why it must be a side-effect-free function.
|
|
138
|
+
// But `execute` modifies a stack, so we have to defensively copy it here.
|
|
139
|
+
const copyOfPendingSubrotines = new Map();
|
|
140
|
+
for (const [key, value] of stack.pendingSubroutines)
|
|
141
|
+
copyOfPendingSubrotines.set(key, { ...value, args: { ...value.args } });
|
|
142
|
+
const copiedStack = {
|
|
143
|
+
result: stack.result,
|
|
144
|
+
pendingSubroutines: copyOfPendingSubrotines,
|
|
145
|
+
};
|
|
146
|
+
execute(postEnv, copiedStack, resolvedOps, false);
|
|
147
|
+
if (!('result' in copiedStack))
|
|
148
|
+
throw new Error('illegal cfg rendering stack state, no result');
|
|
149
|
+
return copiedStack.result;
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}, { ...ops, key });
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export { computableFromCfg, computableFromCfgUnsafe };
|
|
156
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sources":["../../src/cfg_render/executor.ts"],"sourcesContent":["import type {\n ArgumentKey,\n ArgumentValues,\n ExecutionEnvironment,\n Operation,\n Subroutine,\n} from './operation';\nimport Denque from 'denque';\nimport { assertNever, notEmpty } from '@milaboratories/ts-helpers';\nimport type { ComputableCtx, ComputableRenderingOps } from '@milaboratories/computable';\nimport { Computable } from '@milaboratories/computable';\nimport type { Cfg } from '@platforma-sdk/model';\nimport { renderCfg, resOp } from './renderer';\nimport canonicalize from 'canonicalize';\nimport type { BlockContextAny } from '../middle_layer/block_ctx';\nimport type { MiddleLayerDriverKit } from '../middle_layer/driver_kit';\nimport { NonKeyCtxFields, toCfgContext } from '../middle_layer/block_ctx_unsafe';\n\n/** Addresses pending subroutines inside the stack */\ntype SubroutineKey = symbol;\n\n/** Represents destination of the result of an operation. I.e. when sequence of\n * subroutine invocations, and computables terminates with result, this object\n * determines to which argument of which pending subroutine it should be delivered.\n * See special value for delivery of the final \"return\" result. */\ntype Destination = {\n op: SubroutineKey;\n arg: ArgumentKey;\n};\n\n/** Special address of operation, see below. */\nconst ReturnOpKey: unique symbol = Symbol();\n/** The same, but for the argument part of destination, see below. */\nconst ReturnArgKey = 'return';\n\n/** Special destination, telling the executor that corresponding result should\n * be exposed as a final result, and execution terminate at this point. */\nconst ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey } as Destination;\n\nfunction isReturnDestination(destination: Destination): boolean {\n return destination.op == ReturnOpKey && destination.arg == ReturnArgKey;\n}\n\n/** Queued operation, used inside the executor */\ntype QueuedOperation = {\n operation: Operation;\n destination: Destination;\n};\n\n/** Queued computation, returned by the first round of config execution. Such\n * computables should be returned in the intermediate representation of the\n * enclosing computable, and after they are resolved and passed to the\n * postprocessing routine, should be injected into the execution stack to\n * finalize the computation. */\ntype ScheduledComputable = {\n destination: Destination;\n computable: Computable<unknown>;\n};\n\n/** This is what ScheduledComputable transforms from intermediate\n * representation to post-processing. */\ntype MaterializedComputable = {\n destination: Destination;\n computable: unknown;\n};\n\n/** Main entry inside the execution stack. */\ntype PendingSubroutine = {\n subroutine: Subroutine;\n destination: Destination;\n argCounter: number;\n args: ArgumentValues;\n};\n\n/** Execution stack. The closest concept that this object along with enclosed\n * {@link PendingSubroutine}s represent is a Continuation.\n * https://en.wikipedia.org/wiki/Continuation */\ntype ExecutionStack = {\n result?: unknown;\n pendingSubroutines: Map<SubroutineKey, PendingSubroutine>;\n};\n\n/** Returns initial stack value. */\nfunction zeroStack(): ExecutionStack {\n return { pendingSubroutines: new Map<SubroutineKey, PendingSubroutine>() };\n}\n\n/** Implements main executor mechanism.\n * @param env to be passed to while executing operations\n * @param stack execution stack to continue execution from\n * @param operations operations to initiate the execution process\n * @param allowComputables if false, scheduling of async computables will result in error\n * */\nfunction execute(\n env: ExecutionEnvironment,\n stack: ExecutionStack,\n operations: QueuedOperation[],\n allowComputables: boolean,\n): ScheduledComputable[] {\n const operationQueue = new Denque<QueuedOperation>(operations);\n\n /** Returns false if final result is set as result of this operation,\n * true if we should continue processing. */\n const deliverResult = (destination: Destination, result: unknown): boolean => {\n if (isReturnDestination(destination)) {\n stack.result = result;\n return false;\n }\n\n const pending = notEmpty(stack.pendingSubroutines.get(destination.op));\n if (destination.arg in pending.args) throw new Error('argument already set');\n pending.args[destination.arg] = result;\n pending.argCounter--;\n if (pending.argCounter === 0) {\n stack.pendingSubroutines.delete(destination.op);\n operationQueue.push({\n destination: pending.destination,\n operation: pending.subroutine(pending.args),\n });\n }\n\n return true;\n };\n\n // computables, scheduled during computation, are aggregated in this array,\n // and returned from the function in the end\n const computables: ScheduledComputable[] = [];\n\n // each loop = execution of a single queued operation\n mainLoop: while (operationQueue.length > 0) {\n const op = operationQueue.shift()!;\n const action = op.operation(env);\n switch (action.type) {\n case 'ReturnResult':\n if (!deliverResult(op.destination, action.result)) break mainLoop; // this terminates execution\n break; // switch\n\n case 'ScheduleSubroutine':\n {\n const newOpKey = Symbol();\n\n const argRequests = Object.entries(action.args);\n const initialArgCounter = argRequests.length;\n\n if (initialArgCounter === 0)\n // if no pending arguments\n operationQueue.push({\n destination: op.destination,\n operation: action.subroutine({}),\n });\n else {\n for (const [arg, operation] of argRequests)\n operationQueue.push({\n destination: { op: newOpKey, arg },\n operation,\n });\n\n stack.pendingSubroutines.set(newOpKey, {\n argCounter: initialArgCounter,\n args: {},\n subroutine: action.subroutine,\n destination: op.destination,\n });\n }\n }\n break;\n\n case 'ScheduleComputable':\n if (!allowComputables)\n throw new Error('asynchronous operations are forbidden in this context');\n computables.push({\n destination: op.destination,\n computable: action.computable,\n });\n break;\n\n default:\n assertNever(action);\n }\n }\n\n return computables;\n}\n\n//\n// Computable\n//\n\n/** Main method to render configurations */\nexport function computableFromCfg(\n drivers: MiddleLayerDriverKit,\n bCtx: BlockContextAny,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n return computableFromCfgUnsafe(drivers, toCfgContext(bCtx), cfg, ops);\n}\n\nexport function computableFromCfgUnsafe(\n drivers: MiddleLayerDriverKit,\n ctx: Record<string, unknown>,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n const key\n = `${ctx.blockId}#`\n + canonicalize({\n ctx: Object.fromEntries(\n Object.entries(ctx).filter(([k]) => NonKeyCtxFields.indexOf(k) === -1),\n ),\n cfg: cfg,\n })!;\n return Computable.makeRaw(\n (c) => {\n const env: ExecutionEnvironment = { drivers, cCtx: c };\n const stack = zeroStack();\n const computables = execute(\n env,\n stack,\n [\n {\n destination: ReturnDestination,\n operation: renderCfg(ctx, cfg),\n },\n ],\n true,\n );\n return {\n ir: computables,\n postprocessValue(value: MaterializedComputable[]): unknown {\n const resolvedOps: QueuedOperation[] = [];\n for (const mc of value)\n resolvedOps.push({ destination: mc.destination, operation: resOp(mc.computable) });\n const postEnv: ExecutionEnvironment = {\n drivers,\n get cCtx(): ComputableCtx {\n throw new Error('asynchronous operations are forbidden in this context');\n },\n };\n\n // Post process can be called several times, that's why it must be a side-effect-free function.\n // But `execute` modifies a stack, so we have to defensively copy it here.\n const copyOfPendingSubrotines = new Map<SubroutineKey, PendingSubroutine>();\n for (const [key, value] of stack.pendingSubroutines)\n copyOfPendingSubrotines.set(key, { ...value, args: { ...value.args } });\n const copiedStack: ExecutionStack = {\n result: stack.result,\n pendingSubroutines: copyOfPendingSubrotines,\n };\n execute(postEnv, copiedStack, resolvedOps, false);\n if (!('result' in copiedStack))\n throw new Error('illegal cfg rendering stack state, no result');\n return copiedStack.result;\n },\n };\n },\n { ...ops, key },\n );\n}\n"],"names":[],"mappings":"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"}
|