@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,174 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var computable = require('@milaboratories/computable');
|
|
4
|
+
var plModelMiddleLayer = require('@milaboratories/pl-model-middle-layer');
|
|
5
|
+
var registry = require('./registry.cjs');
|
|
6
|
+
var blockTools = require('@platforma-sdk/block-tools');
|
|
7
|
+
var semver = require('semver');
|
|
8
|
+
var canonicalize = require('canonicalize');
|
|
9
|
+
|
|
10
|
+
const DefaultBlockUpdateWatcherOps = {
|
|
11
|
+
minDelay: 1500,
|
|
12
|
+
};
|
|
13
|
+
const NoUpdatesKey = '__no_updates__';
|
|
14
|
+
class BlockUpdateWatcher extends computable.PollComputablePool {
|
|
15
|
+
registryProvider;
|
|
16
|
+
http;
|
|
17
|
+
preferredUpdateChannel;
|
|
18
|
+
constructor(registryProvider, logger, ops = {}) {
|
|
19
|
+
super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);
|
|
20
|
+
this.registryProvider = registryProvider;
|
|
21
|
+
this.http = ops.http;
|
|
22
|
+
this.preferredUpdateChannel = ops.preferredUpdateChannel;
|
|
23
|
+
}
|
|
24
|
+
getKey(req) {
|
|
25
|
+
switch (req.currentSpec.type) {
|
|
26
|
+
case 'dev-v1':
|
|
27
|
+
return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
|
|
28
|
+
case 'dev-v2':
|
|
29
|
+
return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
|
|
30
|
+
case 'from-registry-v2':
|
|
31
|
+
return `from_registry_v2_${canonicalize(req)}`;
|
|
32
|
+
default:
|
|
33
|
+
return NoUpdatesKey;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async readValue(req) {
|
|
37
|
+
try {
|
|
38
|
+
const cSpec = req.currentSpec;
|
|
39
|
+
switch (cSpec.type) {
|
|
40
|
+
case 'dev-v1': {
|
|
41
|
+
try {
|
|
42
|
+
const mtime = await registry.getDevV1PacketMtime(cSpec.folder);
|
|
43
|
+
if (mtime === cSpec.mtime)
|
|
44
|
+
return { suggestions: [] };
|
|
45
|
+
else
|
|
46
|
+
return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
this.logger.warn(err);
|
|
50
|
+
return { suggestions: [] };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
case 'dev-v2': {
|
|
54
|
+
try {
|
|
55
|
+
const description = await blockTools.tryLoadPackDescription(cSpec.folder, this.logger);
|
|
56
|
+
if (description === undefined)
|
|
57
|
+
return { suggestions: [] };
|
|
58
|
+
const mtime = await registry.getDevV2PacketMtime(description);
|
|
59
|
+
if (mtime === cSpec.mtime)
|
|
60
|
+
return { suggestions: [] };
|
|
61
|
+
else
|
|
62
|
+
return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
this.logger.warn(err);
|
|
66
|
+
return { suggestions: [] };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
case 'from-registry-v2': {
|
|
70
|
+
try {
|
|
71
|
+
const { versionLock, skipVersion } = req.settings;
|
|
72
|
+
if (versionLock === 'patch')
|
|
73
|
+
return { suggestions: [] };
|
|
74
|
+
const registry = this.registryProvider.getRegistry(cSpec.registryUrl);
|
|
75
|
+
let channel = this.preferredUpdateChannel;
|
|
76
|
+
if (channel === undefined) {
|
|
77
|
+
if (cSpec.channel === undefined) {
|
|
78
|
+
const a1 = await registry.getLatestOverview(cSpec.id, plModelMiddleLayer.StableChannel);
|
|
79
|
+
if (a1)
|
|
80
|
+
channel = plModelMiddleLayer.StableChannel;
|
|
81
|
+
else {
|
|
82
|
+
// forcing update from non-existent channel to stable
|
|
83
|
+
const a2 = await registry.getLatestOverview(cSpec.id, plModelMiddleLayer.AnyChannel);
|
|
84
|
+
if (a2 === undefined) {
|
|
85
|
+
this.logger.error(`No "any" channel record for ${plModelMiddleLayer.blockPackIdToString(cSpec.id)}`);
|
|
86
|
+
return { suggestions: [] };
|
|
87
|
+
}
|
|
88
|
+
channel = plModelMiddleLayer.AnyChannel;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else
|
|
92
|
+
channel = cSpec.channel;
|
|
93
|
+
}
|
|
94
|
+
const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);
|
|
95
|
+
if (vSuggestions === undefined || vSuggestions.length === 0)
|
|
96
|
+
return { suggestions: [] };
|
|
97
|
+
// from major to patch
|
|
98
|
+
vSuggestions.reverse();
|
|
99
|
+
let vMainSuggestion = undefined;
|
|
100
|
+
switch (versionLock) {
|
|
101
|
+
case undefined:
|
|
102
|
+
vMainSuggestion = vSuggestions[0].update;
|
|
103
|
+
break;
|
|
104
|
+
case 'major':
|
|
105
|
+
vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;
|
|
106
|
+
break;
|
|
107
|
+
case 'minor':
|
|
108
|
+
vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
const suggestions = vSuggestions.map(({ type, update }) => ({
|
|
112
|
+
type,
|
|
113
|
+
update: { ...cSpec, id: { ...cSpec.id, version: update } },
|
|
114
|
+
}));
|
|
115
|
+
if (vMainSuggestion === undefined)
|
|
116
|
+
return { suggestions };
|
|
117
|
+
if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))
|
|
118
|
+
return { suggestions };
|
|
119
|
+
const mainSuggestion = {
|
|
120
|
+
...cSpec,
|
|
121
|
+
id: { ...cSpec.id, version: vMainSuggestion },
|
|
122
|
+
};
|
|
123
|
+
// warming cache
|
|
124
|
+
void (async () => {
|
|
125
|
+
try {
|
|
126
|
+
await registry.getComponents(mainSuggestion.id);
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
this.logger.warn(e);
|
|
130
|
+
}
|
|
131
|
+
})();
|
|
132
|
+
return { suggestions, mainSuggestion };
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
this.logger.warn(err);
|
|
136
|
+
return { suggestions: [] };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
default:
|
|
140
|
+
return { suggestions: [] };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
this.logger.warn(e);
|
|
145
|
+
return { suggestions: [] };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
resultsEqual(res1, res2) {
|
|
149
|
+
return canonicalize(res1) === canonicalize(res2);
|
|
150
|
+
// if (res1 === undefined && res2 === undefined) return true;
|
|
151
|
+
// if (res1 === undefined || res2 === undefined) return false;
|
|
152
|
+
// if (res1.type !== res2.type) return false;
|
|
153
|
+
// switch (res1.type) {
|
|
154
|
+
// case 'from-registry-v1':
|
|
155
|
+
// if (res2.type !== 'from-registry-v1') return false;
|
|
156
|
+
// return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);
|
|
157
|
+
// case 'from-registry-v2':
|
|
158
|
+
// if (res2.type !== 'from-registry-v2') return false;
|
|
159
|
+
// return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);
|
|
160
|
+
// case 'dev-v1':
|
|
161
|
+
// if (res2.type !== 'dev-v1') return false;
|
|
162
|
+
// return res1.folder === res2.folder && res1.mtime === res2.mtime;
|
|
163
|
+
// case 'dev-v2':
|
|
164
|
+
// if (res2.type !== 'dev-v2') return false;
|
|
165
|
+
// return res1.folder === res2.folder && res1.mtime === res2.mtime;
|
|
166
|
+
// default:
|
|
167
|
+
// assertNever(res1);
|
|
168
|
+
// }
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
exports.BlockUpdateWatcher = BlockUpdateWatcher;
|
|
173
|
+
exports.DefaultBlockUpdateWatcherOps = DefaultBlockUpdateWatcherOps;
|
|
174
|
+
//# sourceMappingURL=watcher.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.cjs","sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from '@milaboratories/computable';\nimport { PollComputablePool } from '@milaboratories/computable';\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions } from '@milaboratories/pl-model-middle-layer';\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from '@milaboratories/pl-model-middle-layer';\nimport type { Dispatcher } from 'undici';\nimport { getDevV1PacketMtime, getDevV2PacketMtime } from './registry';\nimport { tryLoadPackDescription } from '@platforma-sdk/block-tools';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport type { V2RegistryProvider } from './registry-v2-provider';\nimport semver from 'semver';\nimport canonicalize from 'canonicalize';\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = '__no_updates__';\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case 'dev-v1':\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case 'dev-v2':\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case 'from-registry-v2':\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case 'dev-v1': {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case 'dev-v2': {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case 'from-registry-v2': {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === 'patch') return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case 'major':\n vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;\n break;\n case 'minor':\n vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"names":["PollComputablePool","getDevV1PacketMtime","tryLoadPackDescription","getDevV2PacketMtime","StableChannel","AnyChannel","blockPackIdToString"],"mappings":"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"}
|
|
@@ -25,4 +25,3 @@ export declare class BlockUpdateWatcher extends PollComputablePool<CheckForUpdat
|
|
|
25
25
|
protected readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse>;
|
|
26
26
|
protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean;
|
|
27
27
|
}
|
|
28
|
-
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { PollComputablePool } from '@milaboratories/computable';
|
|
2
|
+
import { StableChannel, AnyChannel, blockPackIdToString } from '@milaboratories/pl-model-middle-layer';
|
|
3
|
+
import { getDevV2PacketMtime, getDevV1PacketMtime } from './registry.js';
|
|
4
|
+
import { tryLoadPackDescription } from '@platforma-sdk/block-tools';
|
|
5
|
+
import semver from 'semver';
|
|
6
|
+
import canonicalize from 'canonicalize';
|
|
7
|
+
|
|
8
|
+
const DefaultBlockUpdateWatcherOps = {
|
|
9
|
+
minDelay: 1500,
|
|
10
|
+
};
|
|
11
|
+
const NoUpdatesKey = '__no_updates__';
|
|
12
|
+
class BlockUpdateWatcher extends PollComputablePool {
|
|
13
|
+
registryProvider;
|
|
14
|
+
http;
|
|
15
|
+
preferredUpdateChannel;
|
|
16
|
+
constructor(registryProvider, logger, ops = {}) {
|
|
17
|
+
super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);
|
|
18
|
+
this.registryProvider = registryProvider;
|
|
19
|
+
this.http = ops.http;
|
|
20
|
+
this.preferredUpdateChannel = ops.preferredUpdateChannel;
|
|
21
|
+
}
|
|
22
|
+
getKey(req) {
|
|
23
|
+
switch (req.currentSpec.type) {
|
|
24
|
+
case 'dev-v1':
|
|
25
|
+
return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
|
|
26
|
+
case 'dev-v2':
|
|
27
|
+
return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;
|
|
28
|
+
case 'from-registry-v2':
|
|
29
|
+
return `from_registry_v2_${canonicalize(req)}`;
|
|
30
|
+
default:
|
|
31
|
+
return NoUpdatesKey;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async readValue(req) {
|
|
35
|
+
try {
|
|
36
|
+
const cSpec = req.currentSpec;
|
|
37
|
+
switch (cSpec.type) {
|
|
38
|
+
case 'dev-v1': {
|
|
39
|
+
try {
|
|
40
|
+
const mtime = await getDevV1PacketMtime(cSpec.folder);
|
|
41
|
+
if (mtime === cSpec.mtime)
|
|
42
|
+
return { suggestions: [] };
|
|
43
|
+
else
|
|
44
|
+
return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
this.logger.warn(err);
|
|
48
|
+
return { suggestions: [] };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
case 'dev-v2': {
|
|
52
|
+
try {
|
|
53
|
+
const description = await tryLoadPackDescription(cSpec.folder, this.logger);
|
|
54
|
+
if (description === undefined)
|
|
55
|
+
return { suggestions: [] };
|
|
56
|
+
const mtime = await getDevV2PacketMtime(description);
|
|
57
|
+
if (mtime === cSpec.mtime)
|
|
58
|
+
return { suggestions: [] };
|
|
59
|
+
else
|
|
60
|
+
return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
this.logger.warn(err);
|
|
64
|
+
return { suggestions: [] };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
case 'from-registry-v2': {
|
|
68
|
+
try {
|
|
69
|
+
const { versionLock, skipVersion } = req.settings;
|
|
70
|
+
if (versionLock === 'patch')
|
|
71
|
+
return { suggestions: [] };
|
|
72
|
+
const registry = this.registryProvider.getRegistry(cSpec.registryUrl);
|
|
73
|
+
let channel = this.preferredUpdateChannel;
|
|
74
|
+
if (channel === undefined) {
|
|
75
|
+
if (cSpec.channel === undefined) {
|
|
76
|
+
const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);
|
|
77
|
+
if (a1)
|
|
78
|
+
channel = StableChannel;
|
|
79
|
+
else {
|
|
80
|
+
// forcing update from non-existent channel to stable
|
|
81
|
+
const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);
|
|
82
|
+
if (a2 === undefined) {
|
|
83
|
+
this.logger.error(`No "any" channel record for ${blockPackIdToString(cSpec.id)}`);
|
|
84
|
+
return { suggestions: [] };
|
|
85
|
+
}
|
|
86
|
+
channel = AnyChannel;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else
|
|
90
|
+
channel = cSpec.channel;
|
|
91
|
+
}
|
|
92
|
+
const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);
|
|
93
|
+
if (vSuggestions === undefined || vSuggestions.length === 0)
|
|
94
|
+
return { suggestions: [] };
|
|
95
|
+
// from major to patch
|
|
96
|
+
vSuggestions.reverse();
|
|
97
|
+
let vMainSuggestion = undefined;
|
|
98
|
+
switch (versionLock) {
|
|
99
|
+
case undefined:
|
|
100
|
+
vMainSuggestion = vSuggestions[0].update;
|
|
101
|
+
break;
|
|
102
|
+
case 'major':
|
|
103
|
+
vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;
|
|
104
|
+
break;
|
|
105
|
+
case 'minor':
|
|
106
|
+
vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
const suggestions = vSuggestions.map(({ type, update }) => ({
|
|
110
|
+
type,
|
|
111
|
+
update: { ...cSpec, id: { ...cSpec.id, version: update } },
|
|
112
|
+
}));
|
|
113
|
+
if (vMainSuggestion === undefined)
|
|
114
|
+
return { suggestions };
|
|
115
|
+
if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))
|
|
116
|
+
return { suggestions };
|
|
117
|
+
const mainSuggestion = {
|
|
118
|
+
...cSpec,
|
|
119
|
+
id: { ...cSpec.id, version: vMainSuggestion },
|
|
120
|
+
};
|
|
121
|
+
// warming cache
|
|
122
|
+
void (async () => {
|
|
123
|
+
try {
|
|
124
|
+
await registry.getComponents(mainSuggestion.id);
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
this.logger.warn(e);
|
|
128
|
+
}
|
|
129
|
+
})();
|
|
130
|
+
return { suggestions, mainSuggestion };
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
this.logger.warn(err);
|
|
134
|
+
return { suggestions: [] };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
default:
|
|
138
|
+
return { suggestions: [] };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
this.logger.warn(e);
|
|
143
|
+
return { suggestions: [] };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
resultsEqual(res1, res2) {
|
|
147
|
+
return canonicalize(res1) === canonicalize(res2);
|
|
148
|
+
// if (res1 === undefined && res2 === undefined) return true;
|
|
149
|
+
// if (res1 === undefined || res2 === undefined) return false;
|
|
150
|
+
// if (res1.type !== res2.type) return false;
|
|
151
|
+
// switch (res1.type) {
|
|
152
|
+
// case 'from-registry-v1':
|
|
153
|
+
// if (res2.type !== 'from-registry-v1') return false;
|
|
154
|
+
// return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);
|
|
155
|
+
// case 'from-registry-v2':
|
|
156
|
+
// if (res2.type !== 'from-registry-v2') return false;
|
|
157
|
+
// return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);
|
|
158
|
+
// case 'dev-v1':
|
|
159
|
+
// if (res2.type !== 'dev-v1') return false;
|
|
160
|
+
// return res1.folder === res2.folder && res1.mtime === res2.mtime;
|
|
161
|
+
// case 'dev-v2':
|
|
162
|
+
// if (res2.type !== 'dev-v2') return false;
|
|
163
|
+
// return res1.folder === res2.folder && res1.mtime === res2.mtime;
|
|
164
|
+
// default:
|
|
165
|
+
// assertNever(res1);
|
|
166
|
+
// }
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export { BlockUpdateWatcher, DefaultBlockUpdateWatcherOps };
|
|
171
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from '@milaboratories/computable';\nimport { PollComputablePool } from '@milaboratories/computable';\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions } from '@milaboratories/pl-model-middle-layer';\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from '@milaboratories/pl-model-middle-layer';\nimport type { Dispatcher } from 'undici';\nimport { getDevV1PacketMtime, getDevV2PacketMtime } from './registry';\nimport { tryLoadPackDescription } from '@platforma-sdk/block-tools';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport type { V2RegistryProvider } from './registry-v2-provider';\nimport semver from 'semver';\nimport canonicalize from 'canonicalize';\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = '__no_updates__';\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case 'dev-v1':\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case 'dev-v2':\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case 'from-registry-v2':\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case 'dev-v1': {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case 'dev-v2': {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case 'from-registry-v2': {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === 'patch') return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case 'major':\n vMainSuggestion = vSuggestions.find((v) => v.type !== 'major')?.update;\n break;\n case 'minor':\n vMainSuggestion = vSuggestions.find((v) => v.type === 'patch')?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const CentralBlockRegistry = {
|
|
4
|
+
type: 'remote-v2',
|
|
5
|
+
url: 'https://blocks.pl-open.science/',
|
|
6
|
+
};
|
|
7
|
+
const V1CentralRegistry = {
|
|
8
|
+
type: 'remote-v1',
|
|
9
|
+
url: 'https://block.registry.platforma.bio/releases',
|
|
10
|
+
};
|
|
11
|
+
const V1CentralDevSnapshotRegistry = {
|
|
12
|
+
type: 'remote-v1',
|
|
13
|
+
url: 'https://block.registry.platforma.bio/dev',
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
exports.CentralBlockRegistry = CentralBlockRegistry;
|
|
17
|
+
exports.V1CentralDevSnapshotRegistry = V1CentralDevSnapshotRegistry;
|
|
18
|
+
exports.V1CentralRegistry = V1CentralRegistry;
|
|
19
|
+
//# sourceMappingURL=well_known_registries.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"well_known_registries.cjs","sources":["../../src/block_registry/well_known_registries.ts"],"sourcesContent":["import type { RegistrySpec } from '@milaboratories/pl-model-middle-layer';\n\nexport const CentralBlockRegistry: RegistrySpec = {\n type: 'remote-v2',\n url: 'https://blocks.pl-open.science/',\n};\n\nexport const V1CentralRegistry: RegistrySpec = {\n type: 'remote-v1',\n url: 'https://block.registry.platforma.bio/releases',\n};\n\nexport const V1CentralDevSnapshotRegistry: RegistrySpec = {\n type: 'remote-v1',\n url: 'https://block.registry.platforma.bio/dev',\n};\n"],"names":[],"mappings":";;AAEO,MAAM,oBAAoB,GAAiB;AAChD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,iCAAiC;;AAGjC,MAAM,iBAAiB,GAAiB;AAC7C,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,+CAA+C;;AAG/C,MAAM,4BAA4B,GAAiB;AACxD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,0CAA0C;;;;;;;"}
|
|
@@ -2,4 +2,3 @@ import { RegistrySpec } from '@milaboratories/pl-model-middle-layer';
|
|
|
2
2
|
export declare const CentralBlockRegistry: RegistrySpec;
|
|
3
3
|
export declare const V1CentralRegistry: RegistrySpec;
|
|
4
4
|
export declare const V1CentralDevSnapshotRegistry: RegistrySpec;
|
|
5
|
-
//# sourceMappingURL=well_known_registries.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const CentralBlockRegistry = {
|
|
2
|
+
type: 'remote-v2',
|
|
3
|
+
url: 'https://blocks.pl-open.science/',
|
|
4
|
+
};
|
|
5
|
+
const V1CentralRegistry = {
|
|
6
|
+
type: 'remote-v1',
|
|
7
|
+
url: 'https://block.registry.platforma.bio/releases',
|
|
8
|
+
};
|
|
9
|
+
const V1CentralDevSnapshotRegistry = {
|
|
10
|
+
type: 'remote-v1',
|
|
11
|
+
url: 'https://block.registry.platforma.bio/dev',
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { CentralBlockRegistry, V1CentralDevSnapshotRegistry, V1CentralRegistry };
|
|
15
|
+
//# sourceMappingURL=well_known_registries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"well_known_registries.js","sources":["../../src/block_registry/well_known_registries.ts"],"sourcesContent":["import type { RegistrySpec } from '@milaboratories/pl-model-middle-layer';\n\nexport const CentralBlockRegistry: RegistrySpec = {\n type: 'remote-v2',\n url: 'https://blocks.pl-open.science/',\n};\n\nexport const V1CentralRegistry: RegistrySpec = {\n type: 'remote-v1',\n url: 'https://block.registry.platforma.bio/releases',\n};\n\nexport const V1CentralDevSnapshotRegistry: RegistrySpec = {\n type: 'remote-v1',\n url: 'https://block.registry.platforma.bio/dev',\n};\n"],"names":[],"mappings":"AAEO,MAAM,oBAAoB,GAAiB;AAChD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,iCAAiC;;AAGjC,MAAM,iBAAiB,GAAiB;AAC7C,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,+CAA+C;;AAG/C,MAAM,4BAA4B,GAAiB;AACxD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,GAAG,EAAE,0CAA0C;;;;;"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Denque = require('denque');
|
|
4
|
+
var tsHelpers = require('@milaboratories/ts-helpers');
|
|
5
|
+
var computable = require('@milaboratories/computable');
|
|
6
|
+
var renderer = require('./renderer.cjs');
|
|
7
|
+
var canonicalize = require('canonicalize');
|
|
8
|
+
var block_ctx_unsafe = require('../middle_layer/block_ctx_unsafe.cjs');
|
|
9
|
+
|
|
10
|
+
/** Special address of operation, see below. */
|
|
11
|
+
const ReturnOpKey = Symbol();
|
|
12
|
+
/** The same, but for the argument part of destination, see below. */
|
|
13
|
+
const ReturnArgKey = 'return';
|
|
14
|
+
/** Special destination, telling the executor that corresponding result should
|
|
15
|
+
* be exposed as a final result, and execution terminate at this point. */
|
|
16
|
+
const ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey };
|
|
17
|
+
function isReturnDestination(destination) {
|
|
18
|
+
return destination.op == ReturnOpKey && destination.arg == ReturnArgKey;
|
|
19
|
+
}
|
|
20
|
+
/** Returns initial stack value. */
|
|
21
|
+
function zeroStack() {
|
|
22
|
+
return { pendingSubroutines: new Map() };
|
|
23
|
+
}
|
|
24
|
+
/** Implements main executor mechanism.
|
|
25
|
+
* @param env to be passed to while executing operations
|
|
26
|
+
* @param stack execution stack to continue execution from
|
|
27
|
+
* @param operations operations to initiate the execution process
|
|
28
|
+
* @param allowComputables if false, scheduling of async computables will result in error
|
|
29
|
+
* */
|
|
30
|
+
function execute(env, stack, operations, allowComputables) {
|
|
31
|
+
const operationQueue = new Denque(operations);
|
|
32
|
+
/** Returns false if final result is set as result of this operation,
|
|
33
|
+
* true if we should continue processing. */
|
|
34
|
+
const deliverResult = (destination, result) => {
|
|
35
|
+
if (isReturnDestination(destination)) {
|
|
36
|
+
stack.result = result;
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
const pending = tsHelpers.notEmpty(stack.pendingSubroutines.get(destination.op));
|
|
40
|
+
if (destination.arg in pending.args)
|
|
41
|
+
throw new Error('argument already set');
|
|
42
|
+
pending.args[destination.arg] = result;
|
|
43
|
+
pending.argCounter--;
|
|
44
|
+
if (pending.argCounter === 0) {
|
|
45
|
+
stack.pendingSubroutines.delete(destination.op);
|
|
46
|
+
operationQueue.push({
|
|
47
|
+
destination: pending.destination,
|
|
48
|
+
operation: pending.subroutine(pending.args),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return true;
|
|
52
|
+
};
|
|
53
|
+
// computables, scheduled during computation, are aggregated in this array,
|
|
54
|
+
// and returned from the function in the end
|
|
55
|
+
const computables = [];
|
|
56
|
+
// each loop = execution of a single queued operation
|
|
57
|
+
mainLoop: while (operationQueue.length > 0) {
|
|
58
|
+
const op = operationQueue.shift();
|
|
59
|
+
const action = op.operation(env);
|
|
60
|
+
switch (action.type) {
|
|
61
|
+
case 'ReturnResult':
|
|
62
|
+
if (!deliverResult(op.destination, action.result))
|
|
63
|
+
break mainLoop; // this terminates execution
|
|
64
|
+
break; // switch
|
|
65
|
+
case 'ScheduleSubroutine':
|
|
66
|
+
{
|
|
67
|
+
const newOpKey = Symbol();
|
|
68
|
+
const argRequests = Object.entries(action.args);
|
|
69
|
+
const initialArgCounter = argRequests.length;
|
|
70
|
+
if (initialArgCounter === 0)
|
|
71
|
+
// if no pending arguments
|
|
72
|
+
operationQueue.push({
|
|
73
|
+
destination: op.destination,
|
|
74
|
+
operation: action.subroutine({}),
|
|
75
|
+
});
|
|
76
|
+
else {
|
|
77
|
+
for (const [arg, operation] of argRequests)
|
|
78
|
+
operationQueue.push({
|
|
79
|
+
destination: { op: newOpKey, arg },
|
|
80
|
+
operation,
|
|
81
|
+
});
|
|
82
|
+
stack.pendingSubroutines.set(newOpKey, {
|
|
83
|
+
argCounter: initialArgCounter,
|
|
84
|
+
args: {},
|
|
85
|
+
subroutine: action.subroutine,
|
|
86
|
+
destination: op.destination,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
case 'ScheduleComputable':
|
|
92
|
+
if (!allowComputables)
|
|
93
|
+
throw new Error('asynchronous operations are forbidden in this context');
|
|
94
|
+
computables.push({
|
|
95
|
+
destination: op.destination,
|
|
96
|
+
computable: action.computable,
|
|
97
|
+
});
|
|
98
|
+
break;
|
|
99
|
+
default:
|
|
100
|
+
tsHelpers.assertNever(action);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return computables;
|
|
104
|
+
}
|
|
105
|
+
//
|
|
106
|
+
// Computable
|
|
107
|
+
//
|
|
108
|
+
/** Main method to render configurations */
|
|
109
|
+
function computableFromCfg(drivers, bCtx, cfg, ops = {}) {
|
|
110
|
+
return computableFromCfgUnsafe(drivers, block_ctx_unsafe.toCfgContext(bCtx), cfg, ops);
|
|
111
|
+
}
|
|
112
|
+
function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
|
|
113
|
+
const key = `${ctx.blockId}#`
|
|
114
|
+
+ canonicalize({
|
|
115
|
+
ctx: Object.fromEntries(Object.entries(ctx).filter(([k]) => block_ctx_unsafe.NonKeyCtxFields.indexOf(k) === -1)),
|
|
116
|
+
cfg: cfg,
|
|
117
|
+
});
|
|
118
|
+
return computable.Computable.makeRaw((c) => {
|
|
119
|
+
const env = { drivers, cCtx: c };
|
|
120
|
+
const stack = zeroStack();
|
|
121
|
+
const computables = execute(env, stack, [
|
|
122
|
+
{
|
|
123
|
+
destination: ReturnDestination,
|
|
124
|
+
operation: renderer.renderCfg(ctx, cfg),
|
|
125
|
+
},
|
|
126
|
+
], true);
|
|
127
|
+
return {
|
|
128
|
+
ir: computables,
|
|
129
|
+
postprocessValue(value) {
|
|
130
|
+
const resolvedOps = [];
|
|
131
|
+
for (const mc of value)
|
|
132
|
+
resolvedOps.push({ destination: mc.destination, operation: renderer.resOp(mc.computable) });
|
|
133
|
+
const postEnv = {
|
|
134
|
+
drivers,
|
|
135
|
+
get cCtx() {
|
|
136
|
+
throw new Error('asynchronous operations are forbidden in this context');
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
// Post process can be called several times, that's why it must be a side-effect-free function.
|
|
140
|
+
// But `execute` modifies a stack, so we have to defensively copy it here.
|
|
141
|
+
const copyOfPendingSubrotines = new Map();
|
|
142
|
+
for (const [key, value] of stack.pendingSubroutines)
|
|
143
|
+
copyOfPendingSubrotines.set(key, { ...value, args: { ...value.args } });
|
|
144
|
+
const copiedStack = {
|
|
145
|
+
result: stack.result,
|
|
146
|
+
pendingSubroutines: copyOfPendingSubrotines,
|
|
147
|
+
};
|
|
148
|
+
execute(postEnv, copiedStack, resolvedOps, false);
|
|
149
|
+
if (!('result' in copiedStack))
|
|
150
|
+
throw new Error('illegal cfg rendering stack state, no result');
|
|
151
|
+
return copiedStack.result;
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
}, { ...ops, key });
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
exports.computableFromCfg = computableFromCfg;
|
|
158
|
+
exports.computableFromCfgUnsafe = computableFromCfgUnsafe;
|
|
159
|
+
//# sourceMappingURL=executor.cjs.map
|