@milaboratories/pl-middle-layer 1.46.20 → 1.46.22
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 +3 -3
- package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
- package/dist/block_registry/registry-v2-provider.d.ts +2 -2
- package/dist/block_registry/registry-v2-provider.js.map +1 -1
- package/dist/block_registry/registry.cjs +54 -53
- package/dist/block_registry/registry.cjs.map +1 -1
- package/dist/block_registry/registry.d.ts +4 -4
- package/dist/block_registry/registry.d.ts.map +1 -1
- package/dist/block_registry/registry.js +54 -53
- package/dist/block_registry/registry.js.map +1 -1
- package/dist/block_registry/watcher.cjs +12 -12
- package/dist/block_registry/watcher.cjs.map +1 -1
- package/dist/block_registry/watcher.d.ts +6 -6
- package/dist/block_registry/watcher.d.ts.map +1 -1
- package/dist/block_registry/watcher.js +12 -12
- package/dist/block_registry/watcher.js.map +1 -1
- package/dist/block_registry/well_known_registries.cjs +6 -6
- package/dist/block_registry/well_known_registries.cjs.map +1 -1
- package/dist/block_registry/well_known_registries.d.ts +1 -1
- package/dist/block_registry/well_known_registries.js +6 -6
- package/dist/block_registry/well_known_registries.js.map +1 -1
- package/dist/cfg_render/executor.cjs +11 -11
- package/dist/cfg_render/executor.cjs.map +1 -1
- package/dist/cfg_render/executor.d.ts +5 -5
- package/dist/cfg_render/executor.js +11 -11
- package/dist/cfg_render/executor.js.map +1 -1
- package/dist/cfg_render/operation.d.ts +5 -5
- package/dist/cfg_render/renderer.cjs +74 -75
- package/dist/cfg_render/renderer.cjs.map +1 -1
- package/dist/cfg_render/renderer.d.ts +2 -2
- package/dist/cfg_render/renderer.d.ts.map +1 -1
- package/dist/cfg_render/renderer.js +74 -75
- package/dist/cfg_render/renderer.js.map +1 -1
- package/dist/cfg_render/traverse.cjs +27 -27
- package/dist/cfg_render/traverse.cjs.map +1 -1
- package/dist/cfg_render/traverse.d.ts +1 -1
- package/dist/cfg_render/traverse.js +27 -27
- package/dist/cfg_render/traverse.js.map +1 -1
- package/dist/cfg_render/util.cjs +1 -1
- package/dist/cfg_render/util.cjs.map +1 -1
- package/dist/cfg_render/util.d.ts +1 -1
- package/dist/cfg_render/util.js +1 -1
- package/dist/cfg_render/util.js.map +1 -1
- package/dist/debug/index.cjs +4 -2
- package/dist/debug/index.cjs.map +1 -1
- package/dist/debug/index.d.ts +2 -2
- package/dist/debug/index.d.ts.map +1 -1
- package/dist/debug/index.js +4 -2
- package/dist/debug/index.js.map +1 -1
- package/dist/dev_env/index.cjs +8 -8
- package/dist/dev_env/index.cjs.map +1 -1
- package/dist/dev_env/index.js +8 -8
- package/dist/dev_env/index.js.map +1 -1
- package/dist/dev_env/util.cjs +1 -1
- package/dist/dev_env/util.cjs.map +1 -1
- package/dist/dev_env/util.d.ts +1 -1
- package/dist/dev_env/util.js +1 -1
- package/dist/dev_env/util.js.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/js_render/computable_context.cjs +78 -78
- package/dist/js_render/computable_context.cjs.map +1 -1
- package/dist/js_render/computable_context.d.ts +9 -9
- package/dist/js_render/computable_context.d.ts.map +1 -1
- package/dist/js_render/computable_context.js +78 -78
- package/dist/js_render/computable_context.js.map +1 -1
- package/dist/js_render/context.cjs +33 -27
- package/dist/js_render/context.cjs.map +1 -1
- package/dist/js_render/context.d.ts +7 -7
- package/dist/js_render/context.d.ts.map +1 -1
- package/dist/js_render/context.js +33 -27
- package/dist/js_render/context.js.map +1 -1
- package/dist/js_render/index.cjs +10 -6
- package/dist/js_render/index.cjs.map +1 -1
- package/dist/js_render/index.d.ts +6 -6
- package/dist/js_render/index.d.ts.map +1 -1
- package/dist/js_render/index.js +10 -6
- package/dist/js_render/index.js.map +1 -1
- package/dist/middle_layer/active_cfg.cjs.map +1 -1
- package/dist/middle_layer/active_cfg.d.ts +3 -3
- package/dist/middle_layer/active_cfg.d.ts.map +1 -1
- package/dist/middle_layer/active_cfg.js.map +1 -1
- package/dist/middle_layer/block.cjs +1 -1
- package/dist/middle_layer/block.cjs.map +1 -1
- package/dist/middle_layer/block.d.ts +6 -6
- package/dist/middle_layer/block.d.ts.map +1 -1
- package/dist/middle_layer/block.js +1 -1
- package/dist/middle_layer/block.js.map +1 -1
- package/dist/middle_layer/block_ctx.cjs +9 -9
- package/dist/middle_layer/block_ctx.cjs.map +1 -1
- package/dist/middle_layer/block_ctx.d.ts +6 -6
- package/dist/middle_layer/block_ctx.d.ts.map +1 -1
- package/dist/middle_layer/block_ctx.js +9 -9
- package/dist/middle_layer/block_ctx.js.map +1 -1
- package/dist/middle_layer/block_ctx_unsafe.cjs +1 -1
- package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
- package/dist/middle_layer/block_ctx_unsafe.d.ts +5 -5
- package/dist/middle_layer/block_ctx_unsafe.js +1 -1
- package/dist/middle_layer/block_ctx_unsafe.js.map +1 -1
- package/dist/middle_layer/driver_kit.cjs +1 -2
- package/dist/middle_layer/driver_kit.cjs.map +1 -1
- package/dist/middle_layer/driver_kit.d.ts +7 -7
- package/dist/middle_layer/driver_kit.d.ts.map +1 -1
- package/dist/middle_layer/driver_kit.js +1 -2
- package/dist/middle_layer/driver_kit.js.map +1 -1
- package/dist/middle_layer/frontend_path.cjs +5 -5
- package/dist/middle_layer/frontend_path.cjs.map +1 -1
- package/dist/middle_layer/frontend_path.d.ts +4 -4
- package/dist/middle_layer/frontend_path.d.ts.map +1 -1
- package/dist/middle_layer/frontend_path.js +5 -5
- package/dist/middle_layer/frontend_path.js.map +1 -1
- package/dist/middle_layer/index.d.ts +4 -4
- package/dist/middle_layer/middle_layer.cjs +11 -11
- package/dist/middle_layer/middle_layer.cjs.map +1 -1
- package/dist/middle_layer/middle_layer.d.ts +18 -18
- package/dist/middle_layer/middle_layer.d.ts.map +1 -1
- package/dist/middle_layer/middle_layer.js +11 -11
- package/dist/middle_layer/middle_layer.js.map +1 -1
- package/dist/middle_layer/navigation_states.cjs +2 -2
- package/dist/middle_layer/navigation_states.cjs.map +1 -1
- package/dist/middle_layer/navigation_states.d.ts +2 -2
- package/dist/middle_layer/navigation_states.js +2 -2
- package/dist/middle_layer/navigation_states.js.map +1 -1
- package/dist/middle_layer/ops.cjs +5 -5
- package/dist/middle_layer/ops.cjs.map +1 -1
- package/dist/middle_layer/ops.d.ts +11 -11
- package/dist/middle_layer/ops.d.ts.map +1 -1
- package/dist/middle_layer/ops.js +5 -5
- package/dist/middle_layer/ops.js.map +1 -1
- package/dist/middle_layer/project.cjs +71 -63
- package/dist/middle_layer/project.cjs.map +1 -1
- package/dist/middle_layer/project.d.ts +10 -10
- package/dist/middle_layer/project.d.ts.map +1 -1
- package/dist/middle_layer/project.js +71 -63
- package/dist/middle_layer/project.js.map +1 -1
- package/dist/middle_layer/project_list.cjs +2 -2
- package/dist/middle_layer/project_list.cjs.map +1 -1
- package/dist/middle_layer/project_list.d.ts +6 -6
- package/dist/middle_layer/project_list.d.ts.map +1 -1
- package/dist/middle_layer/project_list.js +2 -2
- package/dist/middle_layer/project_list.js.map +1 -1
- package/dist/middle_layer/project_overview.cjs +40 -40
- package/dist/middle_layer/project_overview.cjs.map +1 -1
- package/dist/middle_layer/project_overview.d.ts +5 -5
- package/dist/middle_layer/project_overview.d.ts.map +1 -1
- package/dist/middle_layer/project_overview.js +40 -40
- package/dist/middle_layer/project_overview.js.map +1 -1
- package/dist/middle_layer/project_overview_light.cjs.map +1 -1
- package/dist/middle_layer/project_overview_light.d.ts +2 -2
- package/dist/middle_layer/project_overview_light.d.ts.map +1 -1
- package/dist/middle_layer/project_overview_light.js.map +1 -1
- package/dist/middle_layer/render.cjs +1 -1
- package/dist/middle_layer/render.cjs.map +1 -1
- package/dist/middle_layer/render.d.ts +4 -4
- package/dist/middle_layer/render.js +1 -1
- package/dist/middle_layer/render.js.map +1 -1
- package/dist/middle_layer/render.test.d.ts +2 -2
- package/dist/middle_layer/types.d.ts +3 -3
- package/dist/middle_layer/util.cjs +9 -4
- package/dist/middle_layer/util.cjs.map +1 -1
- package/dist/middle_layer/util.d.ts +4 -4
- package/dist/middle_layer/util.d.ts.map +1 -1
- package/dist/middle_layer/util.js +9 -4
- package/dist/middle_layer/util.js.map +1 -1
- package/dist/model/args.cjs +19 -15
- package/dist/model/args.cjs.map +1 -1
- package/dist/model/args.d.ts +1 -1
- package/dist/model/args.d.ts.map +1 -1
- package/dist/model/args.js +19 -15
- package/dist/model/args.js.map +1 -1
- package/dist/model/block_pack.d.ts +2 -2
- package/dist/model/block_pack_spec.cjs +3 -3
- package/dist/model/block_pack_spec.cjs.map +1 -1
- package/dist/model/block_pack_spec.d.ts +8 -8
- package/dist/model/block_pack_spec.js +3 -3
- package/dist/model/block_pack_spec.js.map +1 -1
- package/dist/model/block_storage_helper.cjs +4 -4
- package/dist/model/block_storage_helper.cjs.map +1 -1
- package/dist/model/block_storage_helper.d.ts +2 -2
- package/dist/model/block_storage_helper.d.ts.map +1 -1
- package/dist/model/block_storage_helper.js +4 -4
- package/dist/model/block_storage_helper.js.map +1 -1
- package/dist/model/index.d.ts +3 -3
- package/dist/model/project_helper.cjs +30 -13
- package/dist/model/project_helper.cjs.map +1 -1
- package/dist/model/project_helper.d.ts +4 -4
- package/dist/model/project_helper.d.ts.map +1 -1
- package/dist/model/project_helper.js +30 -13
- package/dist/model/project_helper.js.map +1 -1
- package/dist/model/project_model.cjs +23 -23
- package/dist/model/project_model.cjs.map +1 -1
- package/dist/model/project_model.d.ts +6 -6
- package/dist/model/project_model.d.ts.map +1 -1
- package/dist/model/project_model.js +23 -23
- package/dist/model/project_model.js.map +1 -1
- package/dist/model/project_model_util.cjs +2 -2
- package/dist/model/project_model_util.cjs.map +1 -1
- package/dist/model/project_model_util.d.ts +3 -3
- package/dist/model/project_model_util.d.ts.map +1 -1
- package/dist/model/project_model_util.js +2 -2
- package/dist/model/project_model_util.js.map +1 -1
- package/dist/model/project_model_v1.cjs +2 -2
- package/dist/model/project_model_v1.cjs.map +1 -1
- package/dist/model/project_model_v1.js +2 -2
- package/dist/model/project_model_v1.js.map +1 -1
- package/dist/model/template_spec.d.ts +5 -5
- package/dist/mutator/block-pack/block_pack.cjs +43 -43
- package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
- package/dist/mutator/block-pack/block_pack.d.ts +6 -6
- package/dist/mutator/block-pack/block_pack.d.ts.map +1 -1
- package/dist/mutator/block-pack/block_pack.js +43 -43
- package/dist/mutator/block-pack/block_pack.js.map +1 -1
- package/dist/mutator/block-pack/frontend.cjs +2 -2
- package/dist/mutator/block-pack/frontend.cjs.map +1 -1
- package/dist/mutator/block-pack/frontend.d.ts +2 -2
- package/dist/mutator/block-pack/frontend.d.ts.map +1 -1
- package/dist/mutator/block-pack/frontend.js +2 -2
- package/dist/mutator/block-pack/frontend.js.map +1 -1
- package/dist/mutator/context_export.cjs +5 -5
- package/dist/mutator/context_export.cjs.map +1 -1
- package/dist/mutator/context_export.d.ts +2 -2
- package/dist/mutator/context_export.d.ts.map +1 -1
- package/dist/mutator/context_export.js +5 -5
- package/dist/mutator/context_export.js.map +1 -1
- package/dist/mutator/migration.cjs +7 -7
- package/dist/mutator/migration.cjs.map +1 -1
- package/dist/mutator/migration.d.ts +1 -1
- package/dist/mutator/migration.d.ts.map +1 -1
- package/dist/mutator/migration.js +7 -7
- package/dist/mutator/migration.js.map +1 -1
- package/dist/mutator/project.cjs +147 -148
- package/dist/mutator/project.cjs.map +1 -1
- package/dist/mutator/project.d.ts +13 -13
- package/dist/mutator/project.d.ts.map +1 -1
- package/dist/mutator/project.js +147 -148
- package/dist/mutator/project.js.map +1 -1
- package/dist/mutator/template/direct_template_loader.cjs +16 -16
- package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
- package/dist/mutator/template/direct_template_loader.d.ts +2 -2
- package/dist/mutator/template/direct_template_loader.d.ts.map +1 -1
- package/dist/mutator/template/direct_template_loader.js +16 -16
- package/dist/mutator/template/direct_template_loader.js.map +1 -1
- package/dist/mutator/template/direct_template_loader_v3.cjs +13 -13
- package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
- package/dist/mutator/template/direct_template_loader_v3.d.ts +3 -3
- package/dist/mutator/template/direct_template_loader_v3.d.ts.map +1 -1
- package/dist/mutator/template/direct_template_loader_v3.js +13 -13
- package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
- package/dist/mutator/template/render_block.cjs +7 -7
- package/dist/mutator/template/render_block.cjs.map +1 -1
- package/dist/mutator/template/render_block.d.ts +1 -1
- package/dist/mutator/template/render_block.d.ts.map +1 -1
- package/dist/mutator/template/render_block.js +7 -7
- package/dist/mutator/template/render_block.js.map +1 -1
- package/dist/mutator/template/render_template.cjs +10 -10
- package/dist/mutator/template/render_template.cjs.map +1 -1
- package/dist/mutator/template/render_template.d.ts +2 -2
- package/dist/mutator/template/render_template.js +10 -10
- package/dist/mutator/template/render_template.js.map +1 -1
- package/dist/mutator/template/template_loading.cjs +17 -17
- package/dist/mutator/template/template_loading.cjs.map +1 -1
- package/dist/mutator/template/template_loading.d.ts +2 -2
- package/dist/mutator/template/template_loading.js +17 -17
- package/dist/mutator/template/template_loading.js.map +1 -1
- package/dist/network_check/network_check.cjs +33 -32
- package/dist/network_check/network_check.cjs.map +1 -1
- package/dist/network_check/network_check.d.ts +6 -6
- package/dist/network_check/network_check.d.ts.map +1 -1
- package/dist/network_check/network_check.js +33 -32
- package/dist/network_check/network_check.js.map +1 -1
- package/dist/network_check/pings.cjs +3 -3
- package/dist/network_check/pings.cjs.map +1 -1
- package/dist/network_check/pings.d.ts +4 -4
- package/dist/network_check/pings.d.ts.map +1 -1
- package/dist/network_check/pings.js +3 -3
- package/dist/network_check/pings.js.map +1 -1
- package/dist/network_check/template.cjs +57 -44
- package/dist/network_check/template.cjs.map +1 -1
- package/dist/network_check/template.d.ts +8 -8
- package/dist/network_check/template.d.ts.map +1 -1
- package/dist/network_check/template.js +57 -44
- package/dist/network_check/template.js.map +1 -1
- package/dist/pool/data.cjs +45 -33
- package/dist/pool/data.cjs.map +1 -1
- package/dist/pool/data.d.ts +3 -3
- package/dist/pool/data.d.ts.map +1 -1
- package/dist/pool/data.js +45 -33
- package/dist/pool/data.js.map +1 -1
- package/dist/pool/driver.cjs +18 -16
- package/dist/pool/driver.cjs.map +1 -1
- package/dist/pool/driver.d.ts +5 -5
- package/dist/pool/driver.d.ts.map +1 -1
- package/dist/pool/driver.js +18 -16
- package/dist/pool/driver.js.map +1 -1
- package/dist/pool/index.d.ts +2 -2
- package/dist/pool/p_object_collection.cjs +5 -5
- package/dist/pool/p_object_collection.cjs.map +1 -1
- package/dist/pool/p_object_collection.d.ts +2 -2
- package/dist/pool/p_object_collection.d.ts.map +1 -1
- package/dist/pool/p_object_collection.js +5 -5
- package/dist/pool/p_object_collection.js.map +1 -1
- package/dist/pool/result_pool.cjs +6 -6
- package/dist/pool/result_pool.cjs.map +1 -1
- package/dist/pool/result_pool.d.ts +6 -6
- package/dist/pool/result_pool.d.ts.map +1 -1
- package/dist/pool/result_pool.js +6 -6
- package/dist/pool/result_pool.js.map +1 -1
- package/dist/test/block_packs.d.ts +2 -2
- package/dist/test/known_templates.d.ts +1 -1
- package/dist/worker/WorkerManager.cjs +7 -8
- package/dist/worker/WorkerManager.cjs.map +1 -1
- package/dist/worker/WorkerManager.d.ts +2 -2
- package/dist/worker/WorkerManager.d.ts.map +1 -1
- package/dist/worker/WorkerManager.js +7 -8
- package/dist/worker/WorkerManager.js.map +1 -1
- package/dist/worker/worker.cjs +6 -4
- package/dist/worker/worker.cjs.map +1 -1
- package/dist/worker/worker.js +6 -4
- package/dist/worker/worker.js.map +1 -1
- package/dist/worker/workerApi.cjs.map +1 -1
- package/dist/worker/workerApi.js.map +1 -1
- package/package.json +41 -41
- package/src/block_registry/index.ts +3 -3
- package/src/block_registry/registry-v2-provider.ts +2 -2
- package/src/block_registry/registry.test.ts +17 -17
- package/src/block_registry/registry.ts +55 -60
- package/src/block_registry/watcher.ts +24 -23
- package/src/block_registry/well_known_registries.ts +7 -7
- package/src/cfg_render/executor.test.ts +36 -36
- package/src/cfg_render/executor.ts +24 -24
- package/src/cfg_render/operation.ts +5 -5
- package/src/cfg_render/renderer.ts +96 -93
- package/src/cfg_render/traverse.ts +50 -50
- package/src/cfg_render/util.ts +3 -3
- package/src/debug/index.ts +6 -4
- package/src/dev_env/index.ts +16 -16
- package/src/dev_env/util.ts +3 -3
- package/src/index.ts +16 -16
- package/src/js_render/computable_context.ts +143 -126
- package/src/js_render/context.ts +72 -44
- package/src/js_render/index.ts +51 -24
- package/src/middle_layer/active_cfg.ts +14 -12
- package/src/middle_layer/block.ts +30 -23
- package/src/middle_layer/block_ctx.ts +27 -31
- package/src/middle_layer/block_ctx_unsafe.ts +9 -9
- package/src/middle_layer/driver_kit.ts +13 -19
- package/src/middle_layer/frontend_path.ts +18 -23
- package/src/middle_layer/index.ts +4 -4
- package/src/middle_layer/middle_layer.ts +57 -55
- package/src/middle_layer/navigation_states.ts +6 -6
- package/src/middle_layer/ops.ts +43 -42
- package/src/middle_layer/project.ts +274 -173
- package/src/middle_layer/project_list.ts +14 -15
- package/src/middle_layer/project_overview.ts +104 -113
- package/src/middle_layer/project_overview_light.ts +7 -9
- package/src/middle_layer/render.test.ts +49 -48
- package/src/middle_layer/render.ts +9 -9
- package/src/middle_layer/types.ts +3 -3
- package/src/middle_layer/util.ts +17 -12
- package/src/model/args.ts +22 -19
- package/src/model/block_pack.ts +2 -2
- package/src/model/block_pack_spec.ts +11 -11
- package/src/model/block_storage_helper.ts +11 -11
- package/src/model/index.ts +3 -3
- package/src/model/project_helper.ts +78 -32
- package/src/model/project_model.test.ts +5 -9
- package/src/model/project_model.ts +48 -49
- package/src/model/project_model_util.test.ts +86 -53
- package/src/model/project_model_util.ts +18 -14
- package/src/model/project_model_v1.ts +3 -3
- package/src/model/template_spec.ts +5 -5
- package/src/mutator/block-pack/block_pack.test.ts +25 -25
- package/src/mutator/block-pack/block_pack.ts +70 -68
- package/src/mutator/block-pack/frontend.ts +6 -13
- package/src/mutator/context_export.ts +12 -10
- package/src/mutator/migration.ts +20 -14
- package/src/mutator/project-v3.test.ts +123 -118
- package/src/mutator/project.test.ts +105 -94
- package/src/mutator/project.ts +357 -274
- package/src/mutator/template/direct_template_loader.ts +26 -32
- package/src/mutator/template/direct_template_loader_v3.ts +51 -25
- package/src/mutator/template/render_block.ts +14 -21
- package/src/mutator/template/render_template.ts +13 -13
- package/src/mutator/template/template_loading.ts +23 -23
- package/src/mutator/template/template_render.test.ts +87 -86
- package/src/network_check/network_check.test.ts +4 -4
- package/src/network_check/network_check.ts +102 -79
- package/src/network_check/pings.ts +35 -16
- package/src/network_check/template.test.ts +47 -44
- package/src/network_check/template.ts +151 -95
- package/src/network_check/test_utils.ts +1 -1
- package/src/pool/data.ts +81 -69
- package/src/pool/driver.ts +56 -51
- package/src/pool/index.ts +2 -2
- package/src/pool/p_object_collection.ts +16 -15
- package/src/pool/result_pool.ts +23 -34
- package/src/test/block_packs.ts +15 -15
- package/src/test/explicit_templates.ts +4 -4
- package/src/test/known_templates.ts +10 -10
- package/src/test_env.ts +1 -1
- package/src/worker/WorkerManager.ts +22 -18
- package/src/worker/worker.ts +11 -9
- package/src/worker/workerApi.ts +1 -1
package/dist/mutator/project.js
CHANGED
|
@@ -44,19 +44,19 @@ class BlockInfo {
|
|
|
44
44
|
check() {
|
|
45
45
|
// state assertions
|
|
46
46
|
if ((this.fields.prodOutput === undefined) !== (this.fields.prodCtx === undefined))
|
|
47
|
-
throw new Error(
|
|
47
|
+
throw new Error("inconsistent prod fields");
|
|
48
48
|
if ((this.fields.stagingOutput === undefined) !== (this.fields.stagingCtx === undefined))
|
|
49
|
-
throw new Error(
|
|
50
|
-
if ((this.fields.prodOutputPrevious === undefined)
|
|
51
|
-
|
|
52
|
-
throw new Error(
|
|
53
|
-
if ((this.fields.stagingOutputPrevious === undefined)
|
|
54
|
-
|
|
55
|
-
throw new Error(
|
|
49
|
+
throw new Error("inconsistent stage fields");
|
|
50
|
+
if ((this.fields.prodOutputPrevious === undefined) !==
|
|
51
|
+
(this.fields.prodCtxPrevious === undefined))
|
|
52
|
+
throw new Error("inconsistent prod cache fields");
|
|
53
|
+
if ((this.fields.stagingOutputPrevious === undefined) !==
|
|
54
|
+
(this.fields.stagingCtxPrevious === undefined))
|
|
55
|
+
throw new Error("inconsistent stage cache fields");
|
|
56
56
|
if (this.fields.blockPack === undefined)
|
|
57
|
-
throw new Error(
|
|
57
|
+
throw new Error("no block pack field");
|
|
58
58
|
if (this.fields.blockStorage === undefined)
|
|
59
|
-
throw new Error(
|
|
59
|
+
throw new Error("no block storage field");
|
|
60
60
|
}
|
|
61
61
|
currentArgsC = cached(() => this.fields.currentArgs?.modCount, () => {
|
|
62
62
|
const bin = this.fields.currentArgs?.value;
|
|
@@ -96,7 +96,7 @@ class BlockInfo {
|
|
|
96
96
|
return this.blockStorageC();
|
|
97
97
|
}
|
|
98
98
|
catch (e) {
|
|
99
|
-
console.error(
|
|
99
|
+
console.error("Error getting blockStorage:", e);
|
|
100
100
|
return undefined;
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -113,10 +113,10 @@ class BlockInfo {
|
|
|
113
113
|
return this.fields.prodCtx !== undefined;
|
|
114
114
|
}
|
|
115
115
|
get productionHasErrors() {
|
|
116
|
-
return this.fields.prodUiCtx?.status ===
|
|
116
|
+
return this.fields.prodUiCtx?.status === "Error";
|
|
117
117
|
}
|
|
118
|
-
productionStaleC = cached(() => `${this.fields.currentArgs.modCount}_${this.fields.prodArgs?.modCount}`, () => this.fields.prodArgs === undefined
|
|
119
|
-
|
|
118
|
+
productionStaleC = cached(() => `${this.fields.currentArgs.modCount}_${this.fields.prodArgs?.modCount}`, () => this.fields.prodArgs === undefined ||
|
|
119
|
+
Buffer.compare(this.fields.currentArgs.value, this.fields.prodArgs.value) !== 0);
|
|
120
120
|
get requireProductionRendering() {
|
|
121
121
|
return !this.productionRendered || this.productionStaleC() || this.productionHasErrors;
|
|
122
122
|
}
|
|
@@ -131,7 +131,7 @@ class BlockInfo {
|
|
|
131
131
|
return this.prodArgsC();
|
|
132
132
|
}
|
|
133
133
|
getTemplate(tx) {
|
|
134
|
-
return tx.getFutureFieldValue(Pl.unwrapHolder(tx, this.fields.blockPack.ref), BlockPackTemplateField,
|
|
134
|
+
return tx.getFutureFieldValue(Pl.unwrapHolder(tx, this.fields.blockPack.ref), BlockPackTemplateField, "Input");
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
const NoNewBlocks = (blockId) => {
|
|
@@ -178,10 +178,10 @@ class ProjectMutator {
|
|
|
178
178
|
fixProblemsAndMigrate() {
|
|
179
179
|
// Fixing problems introduced by old code
|
|
180
180
|
this.blockInfos.forEach((blockInfo) => {
|
|
181
|
-
if (blockInfo.fields.prodArgs === undefined
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
this.deleteBlockFields(blockInfo.id,
|
|
181
|
+
if (blockInfo.fields.prodArgs === undefined ||
|
|
182
|
+
blockInfo.fields.prodOutput === undefined ||
|
|
183
|
+
blockInfo.fields.prodCtx === undefined)
|
|
184
|
+
this.deleteBlockFields(blockInfo.id, "prodArgs", "prodOutput", "prodCtx");
|
|
185
185
|
});
|
|
186
186
|
// Migration for addition of block settings field
|
|
187
187
|
let initialBlockSettings;
|
|
@@ -189,16 +189,16 @@ class ProjectMutator {
|
|
|
189
189
|
if (blockInfo.fields.blockSettings === undefined) {
|
|
190
190
|
if (initialBlockSettings === undefined)
|
|
191
191
|
initialBlockSettings = this.createJsonFieldValue(InitialBlockSettings);
|
|
192
|
-
this.setBlockFieldObj(blockInfo.id,
|
|
192
|
+
this.setBlockFieldObj(blockInfo.id, "blockSettings", initialBlockSettings);
|
|
193
193
|
}
|
|
194
194
|
});
|
|
195
195
|
}
|
|
196
196
|
get wasModified() {
|
|
197
|
-
return (this.lastModifiedChanged
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
197
|
+
return (this.lastModifiedChanged ||
|
|
198
|
+
this.structureChanged ||
|
|
199
|
+
this.fieldsChanged ||
|
|
200
|
+
this.metaChanged ||
|
|
201
|
+
this.renderingStateChanged);
|
|
202
202
|
}
|
|
203
203
|
get structure() {
|
|
204
204
|
return JSON.parse(JSON.stringify(this.struct));
|
|
@@ -265,10 +265,10 @@ class ProjectMutator {
|
|
|
265
265
|
}
|
|
266
266
|
createJsonFieldValueByContent(content) {
|
|
267
267
|
if (content === undefined)
|
|
268
|
-
throw new Error(
|
|
268
|
+
throw new Error("content is undefined");
|
|
269
269
|
const value = Buffer.from(content);
|
|
270
270
|
const ref = this.tx.createValue(Pl.JsonObject, value);
|
|
271
|
-
return { ref, value, status:
|
|
271
|
+
return { ref, value, status: "Ready" };
|
|
272
272
|
}
|
|
273
273
|
createJsonFieldValue(obj) {
|
|
274
274
|
return this.createJsonFieldValueByContent(JSON.stringify(obj));
|
|
@@ -277,14 +277,14 @@ class ProjectMutator {
|
|
|
277
277
|
for (const block of allBlocks(this.struct))
|
|
278
278
|
if (block.id === blockId)
|
|
279
279
|
return block;
|
|
280
|
-
throw new Error(
|
|
280
|
+
throw new Error("block not found");
|
|
281
281
|
}
|
|
282
282
|
setBlockFieldObj(blockId, fieldName, state) {
|
|
283
283
|
const fid = field(this.rid, projectFieldName(blockId, fieldName));
|
|
284
284
|
if (state.ref === undefined)
|
|
285
|
-
throw new Error(
|
|
285
|
+
throw new Error("Can't set value with empty ref");
|
|
286
286
|
if (this.getBlockInfo(blockId).fields[fieldName] === undefined)
|
|
287
|
-
this.tx.createField(fid,
|
|
287
|
+
this.tx.createField(fid, "Dynamic", state.ref);
|
|
288
288
|
else
|
|
289
289
|
this.tx.setField(fid, state.ref);
|
|
290
290
|
this.getBlockInfo(blockId).fields[fieldName] = {
|
|
@@ -323,26 +323,26 @@ class ProjectMutator {
|
|
|
323
323
|
}
|
|
324
324
|
resetStaging(blockId) {
|
|
325
325
|
const fields = this.getBlockInfo(blockId).fields;
|
|
326
|
-
if (fields.stagingOutput?.status ===
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
this.setBlockFieldObj(blockId,
|
|
330
|
-
this.setBlockFieldObj(blockId,
|
|
331
|
-
this.setBlockFieldObj(blockId,
|
|
326
|
+
if (fields.stagingOutput?.status === "Ready" &&
|
|
327
|
+
fields.stagingCtx?.status === "Ready" &&
|
|
328
|
+
fields.stagingUiCtx?.status === "Ready") {
|
|
329
|
+
this.setBlockFieldObj(blockId, "stagingOutputPrevious", fields.stagingOutput);
|
|
330
|
+
this.setBlockFieldObj(blockId, "stagingCtxPrevious", fields.stagingCtx);
|
|
331
|
+
this.setBlockFieldObj(blockId, "stagingUiCtxPrevious", fields.stagingUiCtx);
|
|
332
332
|
}
|
|
333
|
-
if (this.deleteBlockFields(blockId,
|
|
333
|
+
if (this.deleteBlockFields(blockId, "stagingOutput", "stagingCtx", "stagingUiCtx"))
|
|
334
334
|
this.resetStagingRefreshTimestamp();
|
|
335
335
|
}
|
|
336
336
|
resetProduction(blockId) {
|
|
337
337
|
const fields = this.getBlockInfo(blockId).fields;
|
|
338
|
-
if (fields.prodOutput?.status ===
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
this.setBlockFieldObj(blockId,
|
|
342
|
-
this.setBlockFieldObj(blockId,
|
|
343
|
-
this.setBlockFieldObj(blockId,
|
|
338
|
+
if (fields.prodOutput?.status === "Ready" &&
|
|
339
|
+
fields.prodCtx?.status === "Ready" &&
|
|
340
|
+
fields.prodUiCtx?.status === "Ready") {
|
|
341
|
+
this.setBlockFieldObj(blockId, "prodOutputPrevious", fields.prodOutput);
|
|
342
|
+
this.setBlockFieldObj(blockId, "prodCtxPrevious", fields.prodCtx);
|
|
343
|
+
this.setBlockFieldObj(blockId, "prodUiCtxPrevious", fields.prodUiCtx);
|
|
344
344
|
}
|
|
345
|
-
this.deleteBlockFields(blockId,
|
|
345
|
+
this.deleteBlockFields(blockId, "prodOutput", "prodCtx", "prodUiCtx", "prodArgs");
|
|
346
346
|
}
|
|
347
347
|
/** Running blocks are reset, already computed moved to limbo. Returns if
|
|
348
348
|
* either of the actions were actually performed.
|
|
@@ -350,7 +350,7 @@ class ProjectMutator {
|
|
|
350
350
|
resetOrLimboProduction(blockId) {
|
|
351
351
|
const fields = this.getBlockInfo(blockId).fields;
|
|
352
352
|
// Check if we can safely move to limbo (both core production fields are ready)
|
|
353
|
-
if (fields.prodOutput?.status ===
|
|
353
|
+
if (fields.prodOutput?.status === "Ready" && fields.prodCtx?.status === "Ready") {
|
|
354
354
|
if (this.blocksInLimbo.has(blockId))
|
|
355
355
|
// we are already in limbo
|
|
356
356
|
return false;
|
|
@@ -358,12 +358,12 @@ class ProjectMutator {
|
|
|
358
358
|
this.blocksInLimbo.add(blockId);
|
|
359
359
|
this.renderingStateChanged = true;
|
|
360
360
|
// doing some gc - clean up previous cache fields
|
|
361
|
-
this.deleteBlockFields(blockId,
|
|
361
|
+
this.deleteBlockFields(blockId, "prodOutputPrevious", "prodCtxPrevious", "prodUiCtxPrevious");
|
|
362
362
|
return true;
|
|
363
363
|
}
|
|
364
364
|
else {
|
|
365
365
|
// reset - clean up any partial/inconsistent production stat
|
|
366
|
-
return this.deleteBlockFields(blockId,
|
|
366
|
+
return this.deleteBlockFields(blockId, "prodOutput", "prodCtx", "prodUiCtx", "prodArgs", "prodOutputPrevious", "prodCtxPrevious", "prodUiCtxPrevious");
|
|
367
367
|
}
|
|
368
368
|
}
|
|
369
369
|
/**
|
|
@@ -387,7 +387,7 @@ class ProjectMutator {
|
|
|
387
387
|
* @param rawStorageJson Raw storage as JSON string
|
|
388
388
|
*/
|
|
389
389
|
setBlockStorageRaw(blockId, rawStorageJson) {
|
|
390
|
-
this.setBlockFieldObj(blockId,
|
|
390
|
+
this.setBlockFieldObj(blockId, "blockStorage", this.createJsonFieldValueByContent(rawStorageJson));
|
|
391
391
|
this.blocksWithChangedInputs.add(blockId);
|
|
392
392
|
this.updateLastModified();
|
|
393
393
|
}
|
|
@@ -403,7 +403,7 @@ class ProjectMutator {
|
|
|
403
403
|
const info = this.getBlockInfo(blockId);
|
|
404
404
|
const blockConfig = info.config;
|
|
405
405
|
if (blockConfig.modelAPIVersion !== 2) {
|
|
406
|
-
throw new Error(
|
|
406
|
+
throw new Error("resetToInitialStorage is only supported for model API version 2");
|
|
407
407
|
}
|
|
408
408
|
// Get initial storage from VM
|
|
409
409
|
const initialStorageJson = this.projectHelper.getInitialStorageInVM(blockConfig);
|
|
@@ -411,15 +411,15 @@ class ProjectMutator {
|
|
|
411
411
|
// Derive args from storage - set or clear currentArgs based on derivation result
|
|
412
412
|
const deriveArgsResult = this.projectHelper.deriveArgsFromStorage(blockConfig, initialStorageJson);
|
|
413
413
|
if (!deriveArgsResult.error) {
|
|
414
|
-
this.setBlockFieldObj(blockId,
|
|
414
|
+
this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(deriveArgsResult.value));
|
|
415
415
|
// Derive prerunArgs from storage
|
|
416
416
|
const prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(blockConfig, initialStorageJson);
|
|
417
417
|
if (prerunArgs !== undefined) {
|
|
418
|
-
this.setBlockFieldObj(blockId,
|
|
418
|
+
this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
419
419
|
}
|
|
420
420
|
}
|
|
421
421
|
else {
|
|
422
|
-
this.deleteBlockFields(blockId,
|
|
422
|
+
this.deleteBlockFields(blockId, "currentArgs");
|
|
423
423
|
}
|
|
424
424
|
}
|
|
425
425
|
/** Optimally sets inputs for multiple blocks in one go */
|
|
@@ -444,7 +444,7 @@ class ProjectMutator {
|
|
|
444
444
|
}
|
|
445
445
|
// Apply the state update to storage
|
|
446
446
|
const updatedStorageJson = this.projectHelper.applyStorageUpdateInVM(blockConfig, currentStorageJson, req.payload);
|
|
447
|
-
this.setBlockFieldObj(req.blockId,
|
|
447
|
+
this.setBlockFieldObj(req.blockId, "blockStorage", this.createJsonFieldValueByContent(updatedStorageJson));
|
|
448
448
|
// Derive args directly from storage (VM extracts data internally)
|
|
449
449
|
const derivedArgsResult = this.projectHelper.deriveArgsFromStorage(blockConfig, updatedStorageJson);
|
|
450
450
|
if (derivedArgsResult.error) {
|
|
@@ -458,8 +458,8 @@ class ProjectMutator {
|
|
|
458
458
|
}
|
|
459
459
|
}
|
|
460
460
|
else {
|
|
461
|
-
this.setBlockFieldObj(req.blockId,
|
|
462
|
-
if (req.state !== null && typeof req.state ===
|
|
461
|
+
this.setBlockFieldObj(req.blockId, "blockStorage", this.createJsonFieldValue(req.state));
|
|
462
|
+
if (req.state !== null && typeof req.state === "object" && "args" in req.state) {
|
|
463
463
|
args = req.state.args;
|
|
464
464
|
}
|
|
465
465
|
else {
|
|
@@ -472,10 +472,10 @@ class ProjectMutator {
|
|
|
472
472
|
if (args !== undefined) {
|
|
473
473
|
const currentArgsData = canonicalJsonBytes(args);
|
|
474
474
|
const argsPartRef = this.tx.createValue(Pl.JsonObject, currentArgsData);
|
|
475
|
-
this.setBlockField(req.blockId,
|
|
475
|
+
this.setBlockField(req.blockId, "currentArgs", argsPartRef, "Ready", currentArgsData);
|
|
476
476
|
}
|
|
477
477
|
else {
|
|
478
|
-
this.deleteBlockFields(req.blockId,
|
|
478
|
+
this.deleteBlockFields(req.blockId, "currentArgs");
|
|
479
479
|
}
|
|
480
480
|
// Set currentPrerunArgs field and check if it actually changed
|
|
481
481
|
let prerunArgsChanged = false;
|
|
@@ -483,11 +483,12 @@ class ProjectMutator {
|
|
|
483
483
|
const prerunArgsData = canonicalJsonBytes(prerunArgs);
|
|
484
484
|
const oldPrerunArgsData = info.fields.currentPrerunArgs?.value;
|
|
485
485
|
// Check if prerunArgs actually changed
|
|
486
|
-
if (oldPrerunArgsData === undefined ||
|
|
486
|
+
if (oldPrerunArgsData === undefined ||
|
|
487
|
+
Buffer.compare(oldPrerunArgsData, prerunArgsData) !== 0) {
|
|
487
488
|
prerunArgsChanged = true;
|
|
488
489
|
}
|
|
489
490
|
const prerunArgsRef = this.tx.createValue(Pl.JsonObject, prerunArgsData);
|
|
490
|
-
this.setBlockField(req.blockId,
|
|
491
|
+
this.setBlockField(req.blockId, "currentPrerunArgs", prerunArgsRef, "Ready", prerunArgsData);
|
|
491
492
|
}
|
|
492
493
|
else {
|
|
493
494
|
// prerunArgs is undefined - check if we previously had one
|
|
@@ -507,21 +508,21 @@ class ProjectMutator {
|
|
|
507
508
|
}
|
|
508
509
|
}
|
|
509
510
|
// resetting staging outputs for all downstream blocks
|
|
510
|
-
this.getStagingGraph().traverse(
|
|
511
|
+
this.getStagingGraph().traverse("downstream", changedArgs, ({ id }) => this.resetStaging(id));
|
|
511
512
|
if (somethingChanged)
|
|
512
513
|
this.updateLastModified();
|
|
513
514
|
}
|
|
514
515
|
setBlockSettings(blockId, newValue) {
|
|
515
|
-
this.setBlockFieldObj(blockId,
|
|
516
|
+
this.setBlockFieldObj(blockId, "blockSettings", this.createJsonFieldValue(newValue));
|
|
516
517
|
this.updateLastModified();
|
|
517
518
|
}
|
|
518
519
|
createProdCtx(upstream) {
|
|
519
520
|
const upstreamContexts = [];
|
|
520
521
|
upstream.forEach((id) => {
|
|
521
522
|
const info = this.getBlockInfo(id);
|
|
522
|
-
if (info.fields[
|
|
523
|
-
throw new Error(
|
|
524
|
-
upstreamContexts.push(Pl.unwrapHolder(this.tx, info.fields[
|
|
523
|
+
if (info.fields["prodCtx"]?.ref === undefined)
|
|
524
|
+
throw new Error("One of the upstreams staging is not rendered.");
|
|
525
|
+
upstreamContexts.push(Pl.unwrapHolder(this.tx, info.fields["prodCtx"].ref));
|
|
525
526
|
});
|
|
526
527
|
return createBContextFromUpstreams(this.tx, upstreamContexts);
|
|
527
528
|
}
|
|
@@ -529,11 +530,11 @@ class ProjectMutator {
|
|
|
529
530
|
const upstreamContexts = [];
|
|
530
531
|
upstream.forEach((id) => {
|
|
531
532
|
const info = this.getBlockInfo(id);
|
|
532
|
-
if (info.fields[
|
|
533
|
-
throw new Error(
|
|
534
|
-
upstreamContexts.push(Pl.unwrapHolder(this.tx, info.fields[
|
|
535
|
-
if (info.fields[
|
|
536
|
-
upstreamContexts.push(Pl.unwrapHolder(this.tx, info.fields[
|
|
533
|
+
if (info.fields["stagingCtx"]?.ref === undefined)
|
|
534
|
+
throw new Error("One of the upstreams staging is not rendered.");
|
|
535
|
+
upstreamContexts.push(Pl.unwrapHolder(this.tx, info.fields["stagingCtx"].ref));
|
|
536
|
+
if (info.fields["prodCtx"]?.ref !== undefined)
|
|
537
|
+
upstreamContexts.push(Pl.unwrapHolder(this.tx, info.fields["prodCtx"].ref));
|
|
537
538
|
});
|
|
538
539
|
return createBContextFromUpstreams(this.tx, upstreamContexts);
|
|
539
540
|
}
|
|
@@ -553,8 +554,8 @@ class ProjectMutator {
|
|
|
553
554
|
return;
|
|
554
555
|
}
|
|
555
556
|
const ctx = this.createStagingCtx(this.getStagingGraph().nodes.get(blockId).upstream);
|
|
556
|
-
if (this.getBlock(blockId).renderingMode !==
|
|
557
|
-
throw new Error(
|
|
557
|
+
if (this.getBlock(blockId).renderingMode !== "Heavy")
|
|
558
|
+
throw new Error("not supported yet");
|
|
558
559
|
const tpl = info.getTemplate(this.tx);
|
|
559
560
|
// Use currentPrerunArgs for staging rendering
|
|
560
561
|
const results = createRenderHeavyBlock(this.tx, tpl, {
|
|
@@ -566,11 +567,11 @@ class ProjectMutator {
|
|
|
566
567
|
// Here we set the staging ctx to the input context of the staging workflow, not the output because exports
|
|
567
568
|
// of one staging context should stay within the same block, and not travel downstream.
|
|
568
569
|
// We may change this decision in the future if wanted to support traveling staging exports downstream.
|
|
569
|
-
this.setBlockField(blockId,
|
|
570
|
+
this.setBlockField(blockId, "stagingCtx", Pl.wrapInEphHolder(this.tx, ctx), "NotReady");
|
|
570
571
|
// Yet the staging UI Ctx is the output context of the staging workflow, because it is used to form the result pool
|
|
571
572
|
// thus creating a certain discrepancy between staging workflow context behavior and desktop's result pool.
|
|
572
|
-
this.setBlockField(blockId,
|
|
573
|
-
this.setBlockField(blockId,
|
|
573
|
+
this.setBlockField(blockId, "stagingUiCtx", this.exportCtx(results.context), "NotReady");
|
|
574
|
+
this.setBlockField(blockId, "stagingOutput", results.result, "NotReady");
|
|
574
575
|
}
|
|
575
576
|
renderProductionFor(blockId) {
|
|
576
577
|
this.resetProduction(blockId);
|
|
@@ -580,8 +581,8 @@ class ProjectMutator {
|
|
|
580
581
|
throw new Error(`Can't render production for block ${blockId}: currentArgs not set`);
|
|
581
582
|
}
|
|
582
583
|
const ctx = this.createProdCtx(this.getPendingProductionGraph().nodes.get(blockId).upstream);
|
|
583
|
-
if (this.getBlock(blockId).renderingMode ===
|
|
584
|
-
throw new Error(
|
|
584
|
+
if (this.getBlock(blockId).renderingMode === "Light")
|
|
585
|
+
throw new Error("Can't render production for light block.");
|
|
585
586
|
const tpl = info.getTemplate(this.tx);
|
|
586
587
|
const results = createRenderHeavyBlock(this.tx, tpl, {
|
|
587
588
|
args: info.fields.currentArgs.ref,
|
|
@@ -589,11 +590,11 @@ class ProjectMutator {
|
|
|
589
590
|
isProduction: this.tx.createValue(Pl.JsonBool, JSON.stringify(true)),
|
|
590
591
|
context: ctx,
|
|
591
592
|
});
|
|
592
|
-
this.setBlockField(blockId,
|
|
593
|
-
this.setBlockField(blockId,
|
|
594
|
-
this.setBlockField(blockId,
|
|
593
|
+
this.setBlockField(blockId, "prodCtx", Pl.wrapInEphHolder(this.tx, results.context), "NotReady");
|
|
594
|
+
this.setBlockField(blockId, "prodUiCtx", this.exportCtx(results.context), "NotReady");
|
|
595
|
+
this.setBlockField(blockId, "prodOutput", results.result, "NotReady");
|
|
595
596
|
// saving inputs for which we rendered the production
|
|
596
|
-
this.setBlockFieldObj(blockId,
|
|
597
|
+
this.setBlockFieldObj(blockId, "prodArgs", info.fields.currentArgs);
|
|
597
598
|
// removing block from limbo as we juts rendered fresh production for it
|
|
598
599
|
if (this.blocksInLimbo.delete(blockId))
|
|
599
600
|
this.renderingStateChanged = true;
|
|
@@ -606,14 +607,14 @@ class ProjectMutator {
|
|
|
606
607
|
this.blockInfos.set(blockId, info);
|
|
607
608
|
// block pack
|
|
608
609
|
const bp = createBlockPack(this.tx, spec.blockPack);
|
|
609
|
-
this.setBlockField(blockId,
|
|
610
|
+
this.setBlockField(blockId, "blockPack", Pl.wrapInHolder(this.tx, bp), "NotReady");
|
|
610
611
|
// settings
|
|
611
|
-
this.setBlockFieldObj(blockId,
|
|
612
|
+
this.setBlockFieldObj(blockId, "blockSettings", this.createJsonFieldValue(InitialBlockSettings));
|
|
612
613
|
const blockConfig = info.config;
|
|
613
614
|
let args;
|
|
614
615
|
let prerunArgs;
|
|
615
616
|
let storageToWrite;
|
|
616
|
-
if (spec.storageMode ===
|
|
617
|
+
if (spec.storageMode === "fromModel") {
|
|
617
618
|
// Model API v2+: get initial storage and derive args from it
|
|
618
619
|
storageToWrite = this.projectHelper.getInitialStorageInVM(blockConfig);
|
|
619
620
|
// Derive args directly from storage (VM extracts data internally)
|
|
@@ -627,12 +628,12 @@ class ProjectMutator {
|
|
|
627
628
|
prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(blockConfig, storageToWrite);
|
|
628
629
|
}
|
|
629
630
|
}
|
|
630
|
-
else if (spec.storageMode ===
|
|
631
|
+
else if (spec.storageMode === "legacy") {
|
|
631
632
|
// Model API v1: use legacyState from spec
|
|
632
633
|
const parsedState = JSON.parse(spec.legacyState);
|
|
633
634
|
args = parsedState.args;
|
|
634
635
|
if (args === undefined) {
|
|
635
|
-
throw new Error(
|
|
636
|
+
throw new Error("args is undefined in legacyState");
|
|
636
637
|
}
|
|
637
638
|
prerunArgs = args;
|
|
638
639
|
storageToWrite = spec.legacyState;
|
|
@@ -642,14 +643,14 @@ class ProjectMutator {
|
|
|
642
643
|
}
|
|
643
644
|
// currentArgs
|
|
644
645
|
if (args !== undefined) {
|
|
645
|
-
this.setBlockFieldObj(blockId,
|
|
646
|
+
this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(args));
|
|
646
647
|
}
|
|
647
648
|
// currentPrerunArgs
|
|
648
649
|
if (prerunArgs !== undefined) {
|
|
649
|
-
this.setBlockFieldObj(blockId,
|
|
650
|
+
this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
650
651
|
}
|
|
651
652
|
// blockStorage
|
|
652
|
-
this.setBlockFieldObj(blockId,
|
|
653
|
+
this.setBlockFieldObj(blockId, "blockStorage", this.createJsonFieldValueByContent(storageToWrite));
|
|
653
654
|
// checking structure
|
|
654
655
|
info.check();
|
|
655
656
|
}
|
|
@@ -657,25 +658,21 @@ class ProjectMutator {
|
|
|
657
658
|
const fields = this.getBlockInfo(blockId).fields;
|
|
658
659
|
const diff = (setA, setB) => new Set([...setA].filter((x) => !setB.has(x)));
|
|
659
660
|
// Check if we can safely move to limbo (both core production fields are ready)
|
|
660
|
-
if (fields.prodOutput?.status ===
|
|
661
|
+
if (fields.prodOutput?.status === "Ready" && fields.prodCtx?.status === "Ready") {
|
|
661
662
|
if (this.blocksInLimbo.has(blockId))
|
|
662
663
|
// we are already in limbo
|
|
663
664
|
return FieldsToDuplicate;
|
|
664
|
-
return diff(FieldsToDuplicate, new Set([
|
|
665
|
-
'prodOutputPrevious',
|
|
666
|
-
'prodCtxPrevious',
|
|
667
|
-
'prodUiCtxPrevious',
|
|
668
|
-
]));
|
|
665
|
+
return diff(FieldsToDuplicate, new Set(["prodOutputPrevious", "prodCtxPrevious", "prodUiCtxPrevious"]));
|
|
669
666
|
}
|
|
670
667
|
else {
|
|
671
668
|
return diff(FieldsToDuplicate, new Set([
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
669
|
+
"prodOutput",
|
|
670
|
+
"prodCtx",
|
|
671
|
+
"prodUiCtx",
|
|
672
|
+
"prodArgs",
|
|
673
|
+
"prodOutputPrevious",
|
|
674
|
+
"prodCtxPrevious",
|
|
675
|
+
"prodUiCtxPrevious",
|
|
679
676
|
]));
|
|
680
677
|
}
|
|
681
678
|
}
|
|
@@ -685,7 +682,9 @@ class ProjectMutator {
|
|
|
685
682
|
const fieldNamesToDuplicate = this.getFieldNamesToDuplicate(blockId);
|
|
686
683
|
// Copy all fields from original block to new block by sharing references
|
|
687
684
|
for (const [fieldName, fieldState] of Object.entries(originalBlockInfo.fields)) {
|
|
688
|
-
if (fieldNamesToDuplicate.has(fieldName) &&
|
|
685
|
+
if (fieldNamesToDuplicate.has(fieldName) &&
|
|
686
|
+
fieldState &&
|
|
687
|
+
fieldState.ref) {
|
|
689
688
|
this.setBlockFieldObj(blockId, fieldName, {
|
|
690
689
|
ref: fieldState.ref,
|
|
691
690
|
status: fieldState.status,
|
|
@@ -722,12 +721,12 @@ class ProjectMutator {
|
|
|
722
721
|
const prodDiff = graphDiff(currentActualProductionGraph, newActualProductionGraph);
|
|
723
722
|
// applying changes due to topology change in production to affected nodes and
|
|
724
723
|
// all their downstreams
|
|
725
|
-
currentActualProductionGraph.traverse(
|
|
724
|
+
currentActualProductionGraph.traverse("downstream", [...prodDiff.different], (node) => {
|
|
726
725
|
this.resetOrLimboProduction(node.id);
|
|
727
726
|
});
|
|
728
|
-
if (stagingDiff.onlyInB.size > 0
|
|
729
|
-
|
|
730
|
-
|
|
727
|
+
if (stagingDiff.onlyInB.size > 0 ||
|
|
728
|
+
stagingDiff.onlyInA.size > 0 ||
|
|
729
|
+
stagingDiff.different.size > 0)
|
|
731
730
|
this.resetStagingRefreshTimestamp();
|
|
732
731
|
this.struct = newStructure;
|
|
733
732
|
this.structureChanged = true;
|
|
@@ -760,7 +759,7 @@ class ProjectMutator {
|
|
|
760
759
|
}
|
|
761
760
|
this.updateStructure(newStruct, (blockId) => {
|
|
762
761
|
if (blockId !== block.id)
|
|
763
|
-
throw new Error(
|
|
762
|
+
throw new Error("Unexpected");
|
|
764
763
|
this.initializeNewBlock(blockId, spec);
|
|
765
764
|
});
|
|
766
765
|
}
|
|
@@ -803,7 +802,7 @@ class ProjectMutator {
|
|
|
803
802
|
}
|
|
804
803
|
this.updateStructure(newStruct, (blockId) => {
|
|
805
804
|
if (blockId !== newBlockId)
|
|
806
|
-
throw new Error(
|
|
805
|
+
throw new Error("Unexpected");
|
|
807
806
|
this.initializeBlockDuplicate(blockId, originalBlockInfo);
|
|
808
807
|
});
|
|
809
808
|
}
|
|
@@ -828,7 +827,7 @@ class ProjectMutator {
|
|
|
828
827
|
migrateBlockPack(blockId, spec, newClearState) {
|
|
829
828
|
const info = this.getBlockInfo(blockId);
|
|
830
829
|
const newConfig = extractConfig(spec.config);
|
|
831
|
-
this.setBlockField(blockId,
|
|
830
|
+
this.setBlockField(blockId, "blockPack", Pl.wrapInHolder(this.tx, createBlockPack(this.tx, spec)), "NotReady");
|
|
832
831
|
if (newClearState !== undefined) {
|
|
833
832
|
// State is being reset - no migration needed
|
|
834
833
|
const supportsStorageFromVM = newConfig.modelAPIVersion === 2;
|
|
@@ -839,11 +838,11 @@ class ProjectMutator {
|
|
|
839
838
|
// Derive args from storage - only set currentArgs if derivation succeeds
|
|
840
839
|
const deriveArgsResult = this.projectHelper.deriveArgsFromStorage(newConfig, initialStorageJson);
|
|
841
840
|
if (!deriveArgsResult.error) {
|
|
842
|
-
this.setBlockFieldObj(blockId,
|
|
841
|
+
this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(deriveArgsResult.value));
|
|
843
842
|
// Derive prerunArgs from storage
|
|
844
843
|
const prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(newConfig, initialStorageJson);
|
|
845
844
|
if (prerunArgs !== undefined) {
|
|
846
|
-
this.setBlockFieldObj(blockId,
|
|
845
|
+
this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
847
846
|
}
|
|
848
847
|
}
|
|
849
848
|
this.blocksWithChangedInputs.add(blockId);
|
|
@@ -873,11 +872,11 @@ class ProjectMutator {
|
|
|
873
872
|
}
|
|
874
873
|
}
|
|
875
874
|
// resetting staging outputs for all downstream blocks
|
|
876
|
-
this.getStagingGraph().traverse(
|
|
875
|
+
this.getStagingGraph().traverse("downstream", [blockId], ({ id }) => this.resetStaging(id));
|
|
877
876
|
}
|
|
878
877
|
// also reset or limbo all downstream productions
|
|
879
878
|
if (info.productionRendered)
|
|
880
|
-
this.getActualProductionGraph().traverse(
|
|
879
|
+
this.getActualProductionGraph().traverse("downstream", [blockId], ({ id }) => this.resetOrLimboProduction(id));
|
|
881
880
|
this.updateLastModified();
|
|
882
881
|
}
|
|
883
882
|
//
|
|
@@ -888,17 +887,18 @@ class ProjectMutator {
|
|
|
888
887
|
const prodGraph = this.getPendingProductionGraph();
|
|
889
888
|
if (addUpstreams)
|
|
890
889
|
// adding all upstreams automatically
|
|
891
|
-
prodGraph.traverse(
|
|
890
|
+
prodGraph.traverse("upstream", blockIds, (node) => {
|
|
892
891
|
blockIdsSet.add(node.id);
|
|
893
892
|
});
|
|
894
|
-
else
|
|
893
|
+
else
|
|
894
|
+
// checking that targets contain all upstreams
|
|
895
895
|
for (const blockId of blockIdsSet) {
|
|
896
896
|
const node = prodGraph.nodes.get(blockId);
|
|
897
897
|
if (node === undefined)
|
|
898
898
|
throw new Error(`Can't find block with id: ${blockId}`);
|
|
899
899
|
for (const upstream of node.upstream)
|
|
900
900
|
if (!blockIdsSet.has(upstream))
|
|
901
|
-
throw new Error(
|
|
901
|
+
throw new Error("Can't render blocks not including all upstreams.");
|
|
902
902
|
}
|
|
903
903
|
// traversing in topological order and rendering target blocks
|
|
904
904
|
const rendered = new Set();
|
|
@@ -919,14 +919,14 @@ class ProjectMutator {
|
|
|
919
919
|
}
|
|
920
920
|
const renderedArray = [...rendered];
|
|
921
921
|
// sending to limbo all downstream blocks
|
|
922
|
-
prodGraph.traverse(
|
|
922
|
+
prodGraph.traverse("downstream", renderedArray, (node) => {
|
|
923
923
|
if (rendered.has(node.id))
|
|
924
924
|
// don't send to limbo blocks that were just rendered
|
|
925
925
|
return;
|
|
926
926
|
this.resetOrLimboProduction(node.id);
|
|
927
927
|
});
|
|
928
928
|
// resetting staging outputs for all downstream blocks
|
|
929
|
-
this.getStagingGraph().traverse(
|
|
929
|
+
this.getStagingGraph().traverse("downstream", renderedArray, ({ id }) => {
|
|
930
930
|
// don't reset staging of the first rendered block
|
|
931
931
|
if (renderedArray[0] !== id)
|
|
932
932
|
this.resetStaging(id);
|
|
@@ -946,14 +946,14 @@ class ProjectMutator {
|
|
|
946
946
|
while (!queue.isEmpty()) {
|
|
947
947
|
const blockId = queue.shift();
|
|
948
948
|
const fields = this.getBlockInfo(blockId).fields;
|
|
949
|
-
if (fields.prodOutput?.status ===
|
|
949
|
+
if (fields.prodOutput?.status === "Ready" && fields.prodCtx?.status === "Ready")
|
|
950
950
|
// skipping finished blocks
|
|
951
951
|
continue;
|
|
952
|
-
if (this.deleteBlockFields(blockId,
|
|
952
|
+
if (this.deleteBlockFields(blockId, "prodOutput", "prodCtx", "prodUiCtx", "prodArgs")) {
|
|
953
953
|
// was actually stopped
|
|
954
954
|
stopped.push(blockId);
|
|
955
955
|
// will try to stop all its downstreams
|
|
956
|
-
for (const downstream of activeProdGraph.traverseIdsExcludingRoots(
|
|
956
|
+
for (const downstream of activeProdGraph.traverseIdsExcludingRoots("downstream", blockId)) {
|
|
957
957
|
if (queued.has(downstream))
|
|
958
958
|
continue;
|
|
959
959
|
queue.push(downstream);
|
|
@@ -962,10 +962,10 @@ class ProjectMutator {
|
|
|
962
962
|
}
|
|
963
963
|
}
|
|
964
964
|
// blocks under stopped blocks, but having finished production results, goes to limbo
|
|
965
|
-
for (const blockId of activeProdGraph.traverseIdsExcludingRoots(
|
|
965
|
+
for (const blockId of activeProdGraph.traverseIdsExcludingRoots("downstream", ...stopped))
|
|
966
966
|
this.resetOrLimboProduction(blockId);
|
|
967
967
|
// reset staging outputs for all downstream blocks
|
|
968
|
-
this.getStagingGraph().traverse(
|
|
968
|
+
this.getStagingGraph().traverse("downstream", stopped, ({ id }) => this.resetStaging(id));
|
|
969
969
|
}
|
|
970
970
|
traverseWithStagingLag(cb) {
|
|
971
971
|
const lags = new Map();
|
|
@@ -1022,12 +1022,12 @@ class ProjectMutator {
|
|
|
1022
1022
|
doRefresh(stagingRenderingRate) {
|
|
1023
1023
|
this.refreshStagings(stagingRenderingRate);
|
|
1024
1024
|
this.blockInfos.forEach((blockInfo) => {
|
|
1025
|
-
if (blockInfo.fields.prodCtx?.status ===
|
|
1026
|
-
|
|
1027
|
-
this.deleteBlockFields(blockInfo.id,
|
|
1028
|
-
if (blockInfo.fields.stagingCtx?.status ===
|
|
1029
|
-
|
|
1030
|
-
this.deleteBlockFields(blockInfo.id,
|
|
1025
|
+
if (blockInfo.fields.prodCtx?.status === "Ready" &&
|
|
1026
|
+
blockInfo.fields.prodOutput?.status === "Ready")
|
|
1027
|
+
this.deleteBlockFields(blockInfo.id, "prodOutputPrevious", "prodCtxPrevious", "prodUiCtxPrevious");
|
|
1028
|
+
if (blockInfo.fields.stagingCtx?.status === "Ready" &&
|
|
1029
|
+
blockInfo.fields.stagingOutput?.status === "Ready")
|
|
1030
|
+
this.deleteBlockFields(blockInfo.id, "stagingOutputPrevious", "stagingCtxPrevious", "stagingUiCtxPrevious");
|
|
1031
1031
|
});
|
|
1032
1032
|
}
|
|
1033
1033
|
assignAuthorMarkers() {
|
|
@@ -1102,22 +1102,18 @@ class ProjectMutator {
|
|
|
1102
1102
|
if (state.ref === undefined)
|
|
1103
1103
|
continue;
|
|
1104
1104
|
if (!isResource(state.ref) || isResourceRef(state.ref))
|
|
1105
|
-
throw new Error(
|
|
1105
|
+
throw new Error("unexpected behaviour");
|
|
1106
1106
|
const fieldName = fName;
|
|
1107
1107
|
blockFieldRequests.push([
|
|
1108
|
-
info,
|
|
1109
|
-
|
|
1108
|
+
info,
|
|
1109
|
+
fieldName,
|
|
1110
|
+
state,
|
|
1111
|
+
tx.getResourceData(state.ref, fieldName == "blockPack"),
|
|
1110
1112
|
]);
|
|
1111
1113
|
}
|
|
1112
1114
|
});
|
|
1113
1115
|
// loading jsons
|
|
1114
|
-
const [schema, lastModified, meta, structure, { stagingRefreshTimestamp, blocksInLimbo }
|
|
1115
|
-
schemaP,
|
|
1116
|
-
lastModifiedP,
|
|
1117
|
-
metaP,
|
|
1118
|
-
structureP,
|
|
1119
|
-
renderingStateP,
|
|
1120
|
-
]);
|
|
1116
|
+
const [schema, lastModified, meta, structure, { stagingRefreshTimestamp, blocksInLimbo }] = await Promise.all([schemaP, lastModifiedP, metaP, structureP, renderingStateP]);
|
|
1121
1117
|
// Checking schema version of the project
|
|
1122
1118
|
if (schema !== SchemaVersionCurrent) {
|
|
1123
1119
|
if (Number(schema) < Number(SchemaVersionCurrent))
|
|
@@ -1137,17 +1133,20 @@ class ProjectMutator {
|
|
|
1137
1133
|
const result = await response;
|
|
1138
1134
|
state.value = result.data;
|
|
1139
1135
|
if (isNotNullResourceId(result.error))
|
|
1140
|
-
state.status =
|
|
1136
|
+
state.status = "Error";
|
|
1141
1137
|
else if (result.resourceReady || isNotNullResourceId(result.originalResourceId))
|
|
1142
|
-
state.status =
|
|
1138
|
+
state.status = "Ready";
|
|
1143
1139
|
else
|
|
1144
|
-
state.status =
|
|
1140
|
+
state.status = "NotReady";
|
|
1145
1141
|
// For block pack we need to traverse the ref field from the resource data
|
|
1146
|
-
if (fieldName ===
|
|
1142
|
+
if (fieldName === "blockPack") {
|
|
1147
1143
|
const refField = result.fields.find((f) => f.name === Pl.HolderRefField);
|
|
1148
1144
|
if (refField === undefined)
|
|
1149
|
-
throw new Error(
|
|
1150
|
-
blockPackRequests.push([
|
|
1145
|
+
throw new Error("Block pack ref field is missing");
|
|
1146
|
+
blockPackRequests.push([
|
|
1147
|
+
info,
|
|
1148
|
+
tx.getResourceData(ensureResourceIdNotNull(refField.value), false),
|
|
1149
|
+
]);
|
|
1151
1150
|
}
|
|
1152
1151
|
}
|
|
1153
1152
|
//
|
|
@@ -1172,7 +1171,7 @@ class ProjectMutator {
|
|
|
1172
1171
|
ctxExportTplHolder = ensureResourceIdNotNull(ctxExportTplField.value);
|
|
1173
1172
|
else {
|
|
1174
1173
|
ctxExportTplHolder = Pl.wrapInHolder(tx, loadTemplate(tx, ctxExportTplEnvelope.spec));
|
|
1175
|
-
tx.createField(field(rid, getServiceTemplateField(ctxExportTplEnvelope.hash)),
|
|
1174
|
+
tx.createField(field(rid, getServiceTemplateField(ctxExportTplEnvelope.hash)), "Dynamic", ctxExportTplHolder);
|
|
1176
1175
|
}
|
|
1177
1176
|
const renderingState = { stagingRefreshTimestamp };
|
|
1178
1177
|
const blocksInLimboSet = new Set(blocksInLimbo);
|
|
@@ -1207,7 +1206,7 @@ async function createProject(tx, meta = InitialBlockMeta) {
|
|
|
1207
1206
|
tx.setKValue(prj, ProjectStructureKey, JSON.stringify(InitialBlockStructure));
|
|
1208
1207
|
tx.setKValue(prj, BlockRenderingStateKey, JSON.stringify(InitialProjectRenderingState));
|
|
1209
1208
|
const ctxExportTplEnvelope = await getPreparedExportTemplateEnvelope();
|
|
1210
|
-
tx.createField(field(prj, getServiceTemplateField(ctxExportTplEnvelope.hash)),
|
|
1209
|
+
tx.createField(field(prj, getServiceTemplateField(ctxExportTplEnvelope.hash)), "Dynamic", Pl.wrapInHolder(tx, loadTemplate(tx, ctxExportTplEnvelope.spec)));
|
|
1211
1210
|
return prj;
|
|
1212
1211
|
}
|
|
1213
1212
|
async function withProject(projectHelper, txOrPl, rid, cb, ops) {
|
|
@@ -1215,7 +1214,7 @@ async function withProject(projectHelper, txOrPl, rid, cb, ops) {
|
|
|
1215
1214
|
}
|
|
1216
1215
|
async function withProjectAuthored(projectHelper, txOrPl, rid, author, cb, ops = {}) {
|
|
1217
1216
|
if (txOrPl instanceof PlClient) {
|
|
1218
|
-
return await txOrPl.withWriteTx(
|
|
1217
|
+
return await txOrPl.withWriteTx("ProjectAction" + (ops.name ? `: ${ops.name}` : ""), async (tx) => {
|
|
1219
1218
|
const mut = await ProjectMutator.load(projectHelper, tx, rid, author);
|
|
1220
1219
|
const result = await cb(mut);
|
|
1221
1220
|
if (!mut.wasModified)
|