@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct_template_loader.cjs","sources":["../../../src/mutator/template/direct_template_loader.ts"],"sourcesContent":["import type { AnyRef, AnyResourceRef, PlTransaction } from '@milaboratories/pl-client';\nimport { assertNever } from '@milaboratories/ts-helpers';\nimport type { ExplicitTemplate, PreparedTemplate } from '../../model/template_spec';\nimport type { Hash } from 'node:crypto';\nimport { createHash } from 'node:crypto';\nimport type {\n TemplateData,\n TemplateLibData,\n TemplateSoftwareData,\n} from '@milaboratories/pl-model-backend';\nimport {\n PlTemplateLibV1,\n PlTemplateSoftwareV1,\n PlTemplateV1,\n PlTemplateOverrideV1,\n parseTemplate,\n} from '@milaboratories/pl-model-backend';\nimport { createTemplateV3Tree } from './direct_template_loader_v3';\n\nexport function loadTemplateFromExplicitDirect(\n tx: PlTransaction,\n spec: ExplicitTemplate,\n): AnyRef {\n const templateInfo = parseTemplate(spec.content);\n\n const templateFormat = templateInfo.type;\n switch (templateFormat) {\n case 'pl.tengo-template.v2':\n return createTemplateV2Tree(tx, templateInfo);\n case 'pl.tengo-template.v3':\n return createTemplateV3Tree(tx, templateInfo);\n default:\n assertNever(templateFormat);\n }\n}\n\nexport function loadTemplateFromPrepared(\n tx: PlTransaction,\n spec: PreparedTemplate,\n): AnyRef {\n const templateData = spec.data;\n\n const templateFormat = templateData.type;\n switch (templateFormat) {\n case 'pl.tengo-template.v2':\n return createTemplateV2Tree(tx, templateData);\n case 'pl.tengo-template.v3':\n return createTemplateV3Tree(tx, templateData);\n default:\n assertNever(templateFormat);\n }\n}\n\ntype Renderer<T> = {\n hash: Hasher<T>;\n render: (resource: T, tx: PlTransaction, creator: Creator) => AnyResourceRef;\n};\ntype Hasher<T> = (resource: T, hash: Hash) => void;\ntype Creator = <T>(resource: T, renderer: Renderer<T>) => AnyResourceRef;\n\nconst LibRenderer: Renderer<TemplateLibData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateLibV1.type.name)\n .update(PlTemplateLibV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n },\n render(resource, tx, _creator) {\n return tx.createValue(\n PlTemplateLibV1.type,\n JSON.stringify(PlTemplateLibV1.fromV2Data(resource).data),\n );\n },\n};\n\nconst SoftwareInfoRenderer: Renderer<TemplateSoftwareData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateSoftwareV1.type.name)\n .update(PlTemplateSoftwareV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n },\n render(resource, tx, _creator) {\n const sw = PlTemplateSoftwareV1.fromV2Data(resource);\n const ref = tx.createStruct(PlTemplateSoftwareV1.type, sw.data);\n tx.setKValue(ref, PlTemplateSoftwareV1.metaNameKey, JSON.stringify(sw.name));\n tx.lock(ref);\n return ref;\n },\n};\n\nconst TemplateRenderer: Renderer<TemplateData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateV1.type.name)\n .update(PlTemplateV1.type.version)\n .update(resource.hashOverride ?? 'no-override')\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n\n const srt = <T>(entries: [string, T][]): [string, T][] => {\n entries.sort((a, b) => (a[0] === b[0] ? 0 : a[0] < b[0] ? -1 : 1));\n return entries;\n };\n\n for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {\n hash.update('lib:' + libId);\n LibRenderer.hash(lib, hash);\n }\n for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {\n hash.update('soft:' + swId);\n SoftwareInfoRenderer.hash(sw, hash);\n }\n for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {\n hash.update('asset:' + swId);\n SoftwareInfoRenderer.hash(sw, hash);\n }\n for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {\n hash.update('tpl:' + tplId);\n this.hash(tpl, hash);\n }\n },\n render(resource, tx, _creator) {\n const tplRef = tx.createStruct(\n PlTemplateV1.type,\n JSON.stringify(PlTemplateV1.fromV2Data(resource).data),\n );\n // Render libraries\n for (const [libId, lib] of Object.entries(resource.libs ?? {})) {\n const fld = PlTemplateV1.libField(tplRef, libId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(lib, LibRenderer));\n }\n\n // Render software and assets\n for (const [swId, sw] of Object.entries(resource.software ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer));\n }\n for (const [swId, sw] of Object.entries(resource.assets ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer));\n }\n\n // Render dependency templates\n for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {\n const fld = PlTemplateV1.tplField(tplRef, depTplId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(depTpl, TemplateRenderer));\n }\n\n tx.lock(tplRef);\n\n if (!resource.hashOverride) return tplRef;\n\n // Override template hash with proxy resource, when hash override is configured for template\n const overrideRef = tx.createStruct(\n PlTemplateOverrideV1.type,\n JSON.stringify(PlTemplateOverrideV1.fromV2Data(resource)),\n );\n const fld = PlTemplateOverrideV1.tplField(overrideRef);\n tx.createField(fld, 'Service');\n tx.setField(fld, tplRef);\n tx.lock(overrideRef);\n return overrideRef;\n },\n};\n\nfunction createTemplateV2Tree(tx: PlTransaction, tplData: TemplateData): AnyRef {\n const resourceCache = new Map<string, AnyResourceRef>();\n\n const createResource = <T>(resource: T, renderer: Renderer<T>): AnyResourceRef => {\n const hasher: Hash = createHash('sha256');\n renderer.hash(resource, hasher);\n\n const rKey = hasher.digest('hex');\n\n if (!resourceCache.has(rKey)) {\n const rId = renderer.render(resource, tx, createResource);\n resourceCache.set(rKey, rId);\n }\n\n return resourceCache.get(rKey)!;\n };\n\n return createResource(tplData, TemplateRenderer);\n}\n"],"names":["parseTemplate","createTemplateV3Tree","assertNever","PlTemplateLibV1","PlTemplateSoftwareV1","PlTemplateV1","PlTemplateOverrideV1","createHash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"direct_template_loader.cjs","sources":["../../../src/mutator/template/direct_template_loader.ts"],"sourcesContent":["import type { AnyRef, AnyResourceRef, PlTransaction } from \"@milaboratories/pl-client\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport type { ExplicitTemplate, PreparedTemplate } from \"../../model/template_spec\";\nimport type { Hash } from \"node:crypto\";\nimport { createHash } from \"node:crypto\";\nimport type {\n TemplateData,\n TemplateLibData,\n TemplateSoftwareData,\n} from \"@milaboratories/pl-model-backend\";\nimport {\n PlTemplateLibV1,\n PlTemplateSoftwareV1,\n PlTemplateV1,\n PlTemplateOverrideV1,\n parseTemplate,\n} from \"@milaboratories/pl-model-backend\";\nimport { createTemplateV3Tree } from \"./direct_template_loader_v3\";\n\nexport function loadTemplateFromExplicitDirect(tx: PlTransaction, spec: ExplicitTemplate): AnyRef {\n const templateInfo = parseTemplate(spec.content);\n\n const templateFormat = templateInfo.type;\n switch (templateFormat) {\n case \"pl.tengo-template.v2\":\n return createTemplateV2Tree(tx, templateInfo);\n case \"pl.tengo-template.v3\":\n return createTemplateV3Tree(tx, templateInfo);\n default:\n assertNever(templateFormat);\n }\n}\n\nexport function loadTemplateFromPrepared(tx: PlTransaction, spec: PreparedTemplate): AnyRef {\n const templateData = spec.data;\n\n const templateFormat = templateData.type;\n switch (templateFormat) {\n case \"pl.tengo-template.v2\":\n return createTemplateV2Tree(tx, templateData);\n case \"pl.tengo-template.v3\":\n return createTemplateV3Tree(tx, templateData);\n default:\n assertNever(templateFormat);\n }\n}\n\ntype Renderer<T> = {\n hash: Hasher<T>;\n render: (resource: T, tx: PlTransaction, creator: Creator) => AnyResourceRef;\n};\ntype Hasher<T> = (resource: T, hash: Hash) => void;\ntype Creator = <T>(resource: T, renderer: Renderer<T>) => AnyResourceRef;\n\nconst LibRenderer: Renderer<TemplateLibData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateLibV1.type.name)\n .update(PlTemplateLibV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n },\n render(resource, tx, _creator) {\n return tx.createValue(\n PlTemplateLibV1.type,\n JSON.stringify(PlTemplateLibV1.fromV2Data(resource).data),\n );\n },\n};\n\nconst SoftwareInfoRenderer: Renderer<TemplateSoftwareData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateSoftwareV1.type.name)\n .update(PlTemplateSoftwareV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n },\n render(resource, tx, _creator) {\n const sw = PlTemplateSoftwareV1.fromV2Data(resource);\n const ref = tx.createStruct(PlTemplateSoftwareV1.type, sw.data);\n tx.setKValue(ref, PlTemplateSoftwareV1.metaNameKey, JSON.stringify(sw.name));\n tx.lock(ref);\n return ref;\n },\n};\n\nconst TemplateRenderer: Renderer<TemplateData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateV1.type.name)\n .update(PlTemplateV1.type.version)\n .update(resource.hashOverride ?? \"no-override\")\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n\n const srt = <T>(entries: [string, T][]): [string, T][] => {\n entries.sort((a, b) => (a[0] === b[0] ? 0 : a[0] < b[0] ? -1 : 1));\n return entries;\n };\n\n for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {\n hash.update(\"lib:\" + libId);\n LibRenderer.hash(lib, hash);\n }\n for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {\n hash.update(\"soft:\" + swId);\n SoftwareInfoRenderer.hash(sw, hash);\n }\n for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {\n hash.update(\"asset:\" + swId);\n SoftwareInfoRenderer.hash(sw, hash);\n }\n for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {\n hash.update(\"tpl:\" + tplId);\n this.hash(tpl, hash);\n }\n },\n render(resource, tx, _creator) {\n const tplRef = tx.createStruct(\n PlTemplateV1.type,\n JSON.stringify(PlTemplateV1.fromV2Data(resource).data),\n );\n // Render libraries\n for (const [libId, lib] of Object.entries(resource.libs ?? {})) {\n const fld = PlTemplateV1.libField(tplRef, libId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(lib, LibRenderer));\n }\n\n // Render software and assets\n for (const [swId, sw] of Object.entries(resource.software ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer));\n }\n for (const [swId, sw] of Object.entries(resource.assets ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer));\n }\n\n // Render dependency templates\n for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {\n const fld = PlTemplateV1.tplField(tplRef, depTplId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(depTpl, TemplateRenderer));\n }\n\n tx.lock(tplRef);\n\n if (!resource.hashOverride) return tplRef;\n\n // Override template hash with proxy resource, when hash override is configured for template\n const overrideRef = tx.createStruct(\n PlTemplateOverrideV1.type,\n JSON.stringify(PlTemplateOverrideV1.fromV2Data(resource)),\n );\n const fld = PlTemplateOverrideV1.tplField(overrideRef);\n tx.createField(fld, \"Service\");\n tx.setField(fld, tplRef);\n tx.lock(overrideRef);\n return overrideRef;\n },\n};\n\nfunction createTemplateV2Tree(tx: PlTransaction, tplData: TemplateData): AnyRef {\n const resourceCache = new Map<string, AnyResourceRef>();\n\n const createResource = <T>(resource: T, renderer: Renderer<T>): AnyResourceRef => {\n const hasher: Hash = createHash(\"sha256\");\n renderer.hash(resource, hasher);\n\n const rKey = hasher.digest(\"hex\");\n\n if (!resourceCache.has(rKey)) {\n const rId = renderer.render(resource, tx, createResource);\n resourceCache.set(rKey, rId);\n }\n\n return resourceCache.get(rKey)!;\n };\n\n return createResource(tplData, TemplateRenderer);\n}\n"],"names":["parseTemplate","createTemplateV3Tree","assertNever","PlTemplateLibV1","PlTemplateSoftwareV1","PlTemplateV1","PlTemplateOverrideV1","createHash"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AnyRef, PlTransaction } from
|
|
2
|
-
import type { ExplicitTemplate, PreparedTemplate } from
|
|
1
|
+
import type { AnyRef, PlTransaction } from "@milaboratories/pl-client";
|
|
2
|
+
import type { ExplicitTemplate, PreparedTemplate } from "../../model/template_spec";
|
|
3
3
|
export declare function loadTemplateFromExplicitDirect(tx: PlTransaction, spec: ExplicitTemplate): AnyRef;
|
|
4
4
|
export declare function loadTemplateFromPrepared(tx: PlTransaction, spec: PreparedTemplate): AnyRef;
|
|
5
5
|
//# sourceMappingURL=direct_template_loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct_template_loader.d.ts","sourceRoot":"","sources":["../../../src/mutator/template/direct_template_loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAkB,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAiBpF,wBAAgB,8BAA8B,
|
|
1
|
+
{"version":3,"file":"direct_template_loader.d.ts","sourceRoot":"","sources":["../../../src/mutator/template/direct_template_loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAkB,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAiBpF,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAYhG;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAY1F"}
|
|
@@ -7,9 +7,9 @@ function loadTemplateFromExplicitDirect(tx, spec) {
|
|
|
7
7
|
const templateInfo = parseTemplate(spec.content);
|
|
8
8
|
const templateFormat = templateInfo.type;
|
|
9
9
|
switch (templateFormat) {
|
|
10
|
-
case
|
|
10
|
+
case "pl.tengo-template.v2":
|
|
11
11
|
return createTemplateV2Tree(tx, templateInfo);
|
|
12
|
-
case
|
|
12
|
+
case "pl.tengo-template.v3":
|
|
13
13
|
return createTemplateV3Tree(tx, templateInfo);
|
|
14
14
|
default:
|
|
15
15
|
assertNever(templateFormat);
|
|
@@ -19,9 +19,9 @@ function loadTemplateFromPrepared(tx, spec) {
|
|
|
19
19
|
const templateData = spec.data;
|
|
20
20
|
const templateFormat = templateData.type;
|
|
21
21
|
switch (templateFormat) {
|
|
22
|
-
case
|
|
22
|
+
case "pl.tengo-template.v2":
|
|
23
23
|
return createTemplateV2Tree(tx, templateData);
|
|
24
|
-
case
|
|
24
|
+
case "pl.tengo-template.v3":
|
|
25
25
|
return createTemplateV3Tree(tx, templateData);
|
|
26
26
|
default:
|
|
27
27
|
assertNever(templateFormat);
|
|
@@ -62,7 +62,7 @@ const TemplateRenderer = {
|
|
|
62
62
|
hash
|
|
63
63
|
.update(PlTemplateV1.type.name)
|
|
64
64
|
.update(PlTemplateV1.type.version)
|
|
65
|
-
.update(resource.hashOverride ??
|
|
65
|
+
.update(resource.hashOverride ?? "no-override")
|
|
66
66
|
.update(resource.name)
|
|
67
67
|
.update(resource.version)
|
|
68
68
|
.update(resource.src);
|
|
@@ -71,19 +71,19 @@ const TemplateRenderer = {
|
|
|
71
71
|
return entries;
|
|
72
72
|
};
|
|
73
73
|
for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {
|
|
74
|
-
hash.update(
|
|
74
|
+
hash.update("lib:" + libId);
|
|
75
75
|
LibRenderer.hash(lib, hash);
|
|
76
76
|
}
|
|
77
77
|
for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {
|
|
78
|
-
hash.update(
|
|
78
|
+
hash.update("soft:" + swId);
|
|
79
79
|
SoftwareInfoRenderer.hash(sw, hash);
|
|
80
80
|
}
|
|
81
81
|
for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {
|
|
82
|
-
hash.update(
|
|
82
|
+
hash.update("asset:" + swId);
|
|
83
83
|
SoftwareInfoRenderer.hash(sw, hash);
|
|
84
84
|
}
|
|
85
85
|
for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {
|
|
86
|
-
hash.update(
|
|
86
|
+
hash.update("tpl:" + tplId);
|
|
87
87
|
this.hash(tpl, hash);
|
|
88
88
|
}
|
|
89
89
|
},
|
|
@@ -92,24 +92,24 @@ const TemplateRenderer = {
|
|
|
92
92
|
// Render libraries
|
|
93
93
|
for (const [libId, lib] of Object.entries(resource.libs ?? {})) {
|
|
94
94
|
const fld = PlTemplateV1.libField(tplRef, libId);
|
|
95
|
-
tx.createField(fld,
|
|
95
|
+
tx.createField(fld, "Input");
|
|
96
96
|
tx.setField(fld, _creator(lib, LibRenderer));
|
|
97
97
|
}
|
|
98
98
|
// Render software and assets
|
|
99
99
|
for (const [swId, sw] of Object.entries(resource.software ?? {})) {
|
|
100
100
|
const fld = PlTemplateV1.swField(tplRef, swId);
|
|
101
|
-
tx.createField(fld,
|
|
101
|
+
tx.createField(fld, "Input");
|
|
102
102
|
tx.setField(fld, _creator(sw, SoftwareInfoRenderer));
|
|
103
103
|
}
|
|
104
104
|
for (const [swId, sw] of Object.entries(resource.assets ?? {})) {
|
|
105
105
|
const fld = PlTemplateV1.swField(tplRef, swId);
|
|
106
|
-
tx.createField(fld,
|
|
106
|
+
tx.createField(fld, "Input");
|
|
107
107
|
tx.setField(fld, _creator(sw, SoftwareInfoRenderer));
|
|
108
108
|
}
|
|
109
109
|
// Render dependency templates
|
|
110
110
|
for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {
|
|
111
111
|
const fld = PlTemplateV1.tplField(tplRef, depTplId);
|
|
112
|
-
tx.createField(fld,
|
|
112
|
+
tx.createField(fld, "Input");
|
|
113
113
|
tx.setField(fld, _creator(depTpl, TemplateRenderer));
|
|
114
114
|
}
|
|
115
115
|
tx.lock(tplRef);
|
|
@@ -118,7 +118,7 @@ const TemplateRenderer = {
|
|
|
118
118
|
// Override template hash with proxy resource, when hash override is configured for template
|
|
119
119
|
const overrideRef = tx.createStruct(PlTemplateOverrideV1.type, JSON.stringify(PlTemplateOverrideV1.fromV2Data(resource)));
|
|
120
120
|
const fld = PlTemplateOverrideV1.tplField(overrideRef);
|
|
121
|
-
tx.createField(fld,
|
|
121
|
+
tx.createField(fld, "Service");
|
|
122
122
|
tx.setField(fld, tplRef);
|
|
123
123
|
tx.lock(overrideRef);
|
|
124
124
|
return overrideRef;
|
|
@@ -127,9 +127,9 @@ const TemplateRenderer = {
|
|
|
127
127
|
function createTemplateV2Tree(tx, tplData) {
|
|
128
128
|
const resourceCache = new Map();
|
|
129
129
|
const createResource = (resource, renderer) => {
|
|
130
|
-
const hasher = createHash(
|
|
130
|
+
const hasher = createHash("sha256");
|
|
131
131
|
renderer.hash(resource, hasher);
|
|
132
|
-
const rKey = hasher.digest(
|
|
132
|
+
const rKey = hasher.digest("hex");
|
|
133
133
|
if (!resourceCache.has(rKey)) {
|
|
134
134
|
const rId = renderer.render(resource, tx, createResource);
|
|
135
135
|
resourceCache.set(rKey, rId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct_template_loader.js","sources":["../../../src/mutator/template/direct_template_loader.ts"],"sourcesContent":["import type { AnyRef, AnyResourceRef, PlTransaction } from '@milaboratories/pl-client';\nimport { assertNever } from '@milaboratories/ts-helpers';\nimport type { ExplicitTemplate, PreparedTemplate } from '../../model/template_spec';\nimport type { Hash } from 'node:crypto';\nimport { createHash } from 'node:crypto';\nimport type {\n TemplateData,\n TemplateLibData,\n TemplateSoftwareData,\n} from '@milaboratories/pl-model-backend';\nimport {\n PlTemplateLibV1,\n PlTemplateSoftwareV1,\n PlTemplateV1,\n PlTemplateOverrideV1,\n parseTemplate,\n} from '@milaboratories/pl-model-backend';\nimport { createTemplateV3Tree } from './direct_template_loader_v3';\n\nexport function loadTemplateFromExplicitDirect(\n tx: PlTransaction,\n spec: ExplicitTemplate,\n): AnyRef {\n const templateInfo = parseTemplate(spec.content);\n\n const templateFormat = templateInfo.type;\n switch (templateFormat) {\n case 'pl.tengo-template.v2':\n return createTemplateV2Tree(tx, templateInfo);\n case 'pl.tengo-template.v3':\n return createTemplateV3Tree(tx, templateInfo);\n default:\n assertNever(templateFormat);\n }\n}\n\nexport function loadTemplateFromPrepared(\n tx: PlTransaction,\n spec: PreparedTemplate,\n): AnyRef {\n const templateData = spec.data;\n\n const templateFormat = templateData.type;\n switch (templateFormat) {\n case 'pl.tengo-template.v2':\n return createTemplateV2Tree(tx, templateData);\n case 'pl.tengo-template.v3':\n return createTemplateV3Tree(tx, templateData);\n default:\n assertNever(templateFormat);\n }\n}\n\ntype Renderer<T> = {\n hash: Hasher<T>;\n render: (resource: T, tx: PlTransaction, creator: Creator) => AnyResourceRef;\n};\ntype Hasher<T> = (resource: T, hash: Hash) => void;\ntype Creator = <T>(resource: T, renderer: Renderer<T>) => AnyResourceRef;\n\nconst LibRenderer: Renderer<TemplateLibData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateLibV1.type.name)\n .update(PlTemplateLibV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n },\n render(resource, tx, _creator) {\n return tx.createValue(\n PlTemplateLibV1.type,\n JSON.stringify(PlTemplateLibV1.fromV2Data(resource).data),\n );\n },\n};\n\nconst SoftwareInfoRenderer: Renderer<TemplateSoftwareData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateSoftwareV1.type.name)\n .update(PlTemplateSoftwareV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n },\n render(resource, tx, _creator) {\n const sw = PlTemplateSoftwareV1.fromV2Data(resource);\n const ref = tx.createStruct(PlTemplateSoftwareV1.type, sw.data);\n tx.setKValue(ref, PlTemplateSoftwareV1.metaNameKey, JSON.stringify(sw.name));\n tx.lock(ref);\n return ref;\n },\n};\n\nconst TemplateRenderer: Renderer<TemplateData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateV1.type.name)\n .update(PlTemplateV1.type.version)\n .update(resource.hashOverride ?? 'no-override')\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n\n const srt = <T>(entries: [string, T][]): [string, T][] => {\n entries.sort((a, b) => (a[0] === b[0] ? 0 : a[0] < b[0] ? -1 : 1));\n return entries;\n };\n\n for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {\n hash.update('lib:' + libId);\n LibRenderer.hash(lib, hash);\n }\n for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {\n hash.update('soft:' + swId);\n SoftwareInfoRenderer.hash(sw, hash);\n }\n for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {\n hash.update('asset:' + swId);\n SoftwareInfoRenderer.hash(sw, hash);\n }\n for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {\n hash.update('tpl:' + tplId);\n this.hash(tpl, hash);\n }\n },\n render(resource, tx, _creator) {\n const tplRef = tx.createStruct(\n PlTemplateV1.type,\n JSON.stringify(PlTemplateV1.fromV2Data(resource).data),\n );\n // Render libraries\n for (const [libId, lib] of Object.entries(resource.libs ?? {})) {\n const fld = PlTemplateV1.libField(tplRef, libId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(lib, LibRenderer));\n }\n\n // Render software and assets\n for (const [swId, sw] of Object.entries(resource.software ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer));\n }\n for (const [swId, sw] of Object.entries(resource.assets ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer));\n }\n\n // Render dependency templates\n for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {\n const fld = PlTemplateV1.tplField(tplRef, depTplId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(depTpl, TemplateRenderer));\n }\n\n tx.lock(tplRef);\n\n if (!resource.hashOverride) return tplRef;\n\n // Override template hash with proxy resource, when hash override is configured for template\n const overrideRef = tx.createStruct(\n PlTemplateOverrideV1.type,\n JSON.stringify(PlTemplateOverrideV1.fromV2Data(resource)),\n );\n const fld = PlTemplateOverrideV1.tplField(overrideRef);\n tx.createField(fld, 'Service');\n tx.setField(fld, tplRef);\n tx.lock(overrideRef);\n return overrideRef;\n },\n};\n\nfunction createTemplateV2Tree(tx: PlTransaction, tplData: TemplateData): AnyRef {\n const resourceCache = new Map<string, AnyResourceRef>();\n\n const createResource = <T>(resource: T, renderer: Renderer<T>): AnyResourceRef => {\n const hasher: Hash = createHash('sha256');\n renderer.hash(resource, hasher);\n\n const rKey = hasher.digest('hex');\n\n if (!resourceCache.has(rKey)) {\n const rId = renderer.render(resource, tx, createResource);\n resourceCache.set(rKey, rId);\n }\n\n return resourceCache.get(rKey)!;\n };\n\n return createResource(tplData, TemplateRenderer);\n}\n"],"names":[],"mappings":";;;;;AAmBM,SAAU,8BAA8B,CAC5C,EAAiB,EACjB,IAAsB,EAAA;IAEtB,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;AAEhD,IAAA,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI;IACxC,QAAQ,cAAc;AACpB,QAAA,KAAK,sBAAsB;AACzB,YAAA,OAAO,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC;AAC/C,QAAA,KAAK,sBAAsB;AACzB,YAAA,OAAO,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC;AAC/C,QAAA;YACE,WAAW,CAAC,cAAc,CAAC;;AAEjC;AAEM,SAAU,wBAAwB,CACtC,EAAiB,EACjB,IAAsB,EAAA;AAEtB,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI;AAE9B,IAAA,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI;IACxC,QAAQ,cAAc;AACpB,QAAA,KAAK,sBAAsB;AACzB,YAAA,OAAO,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC;AAC/C,QAAA,KAAK,sBAAsB;AACzB,YAAA,OAAO,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC;AAC/C,QAAA;YACE,WAAW,CAAC,cAAc,CAAC;;AAEjC;AASA,MAAM,WAAW,GAA8B;IAC7C,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAA;QACjB;AACG,aAAA,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI;AAChC,aAAA,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO;AACnC,aAAA,MAAM,CAAC,QAAQ,CAAC,IAAI;AACpB,aAAA,MAAM,CAAC,QAAQ,CAAC,OAAO;AACvB,aAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;IACzB,CAAC;AACD,IAAA,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAA;QAC3B,OAAO,EAAE,CAAC,WAAW,CACnB,eAAe,CAAC,IAAI,EACpB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAC1D;IACH,CAAC;CACF;AAED,MAAM,oBAAoB,GAAmC;IAC3D,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAA;QACjB;AACG,aAAA,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI;AACrC,aAAA,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO;AACxC,aAAA,MAAM,CAAC,QAAQ,CAAC,IAAI;AACpB,aAAA,MAAM,CAAC,QAAQ,CAAC,OAAO;AACvB,aAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;IACzB,CAAC;AACD,IAAA,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAA;QAC3B,MAAM,EAAE,GAAG,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC;AACpD,QAAA,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;AAC/D,QAAA,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5E,QAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;AACZ,QAAA,OAAO,GAAG;IACZ,CAAC;CACF;AAED,MAAM,gBAAgB,GAA2B;IAC/C,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAA;QACjB;AACG,aAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI;AAC7B,aAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO;AAChC,aAAA,MAAM,CAAC,QAAQ,CAAC,YAAY,IAAI,aAAa;AAC7C,aAAA,MAAM,CAAC,QAAQ,CAAC,IAAI;AACpB,aAAA,MAAM,CAAC,QAAQ,CAAC,OAAO;AACvB,aAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAEvB,QAAA,MAAM,GAAG,GAAG,CAAI,OAAsB,KAAmB;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAClE,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE;AACnE,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;AAC3B,YAAA,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QAC7B;QACA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,EAAE;AACrE,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;AAC3B,YAAA,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;QACrC;QACA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE;AACnE,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC5B,YAAA,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;QACrC;QACA,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,EAAE;AACxE,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QACtB;IACF,CAAC;AACD,IAAA,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAA;QAC3B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAC5B,YAAY,CAAC,IAAI,EACjB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CACvD;;AAED,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;YAC9D,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;AAChD,YAAA,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC5B,YAAA,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC9C;;AAGA,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE;YAChE,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;AAC9C,YAAA,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC5B,YAAA,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;QACtD;AACA,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;YAC9D,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;AAC9C,YAAA,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC5B,YAAA,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;QACtD;;AAGA,QAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE;YACzE,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;AACnD,YAAA,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC5B,YAAA,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACtD;AAEA,QAAA,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;QAEf,IAAI,CAAC,QAAQ,CAAC,YAAY;AAAE,YAAA,OAAO,MAAM;;QAGzC,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CACjC,oBAAoB,CAAC,IAAI,EACzB,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAC1D;QACD,MAAM,GAAG,GAAG,oBAAoB,CAAC,QAAQ,CAAC,WAAW,CAAC;AACtD,QAAA,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC;AAC9B,QAAA,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;AACxB,QAAA,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;AACpB,QAAA,OAAO,WAAW;IACpB,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,EAAiB,EAAE,OAAqB,EAAA;AACpE,IAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B;AAEvD,IAAA,MAAM,cAAc,GAAG,CAAI,QAAW,EAAE,QAAqB,KAAoB;AAC/E,QAAA,MAAM,MAAM,GAAS,UAAU,CAAC,QAAQ,CAAC;AACzC,QAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;QAE/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAEjC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC5B,YAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,cAAc,CAAC;AACzD,YAAA,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;QAC9B;AAEA,QAAA,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAE;AACjC,IAAA,CAAC;AAED,IAAA,OAAO,cAAc,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAClD;;;;"}
|
|
1
|
+
{"version":3,"file":"direct_template_loader.js","sources":["../../../src/mutator/template/direct_template_loader.ts"],"sourcesContent":["import type { AnyRef, AnyResourceRef, PlTransaction } from \"@milaboratories/pl-client\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport type { ExplicitTemplate, PreparedTemplate } from \"../../model/template_spec\";\nimport type { Hash } from \"node:crypto\";\nimport { createHash } from \"node:crypto\";\nimport type {\n TemplateData,\n TemplateLibData,\n TemplateSoftwareData,\n} from \"@milaboratories/pl-model-backend\";\nimport {\n PlTemplateLibV1,\n PlTemplateSoftwareV1,\n PlTemplateV1,\n PlTemplateOverrideV1,\n parseTemplate,\n} from \"@milaboratories/pl-model-backend\";\nimport { createTemplateV3Tree } from \"./direct_template_loader_v3\";\n\nexport function loadTemplateFromExplicitDirect(tx: PlTransaction, spec: ExplicitTemplate): AnyRef {\n const templateInfo = parseTemplate(spec.content);\n\n const templateFormat = templateInfo.type;\n switch (templateFormat) {\n case \"pl.tengo-template.v2\":\n return createTemplateV2Tree(tx, templateInfo);\n case \"pl.tengo-template.v3\":\n return createTemplateV3Tree(tx, templateInfo);\n default:\n assertNever(templateFormat);\n }\n}\n\nexport function loadTemplateFromPrepared(tx: PlTransaction, spec: PreparedTemplate): AnyRef {\n const templateData = spec.data;\n\n const templateFormat = templateData.type;\n switch (templateFormat) {\n case \"pl.tengo-template.v2\":\n return createTemplateV2Tree(tx, templateData);\n case \"pl.tengo-template.v3\":\n return createTemplateV3Tree(tx, templateData);\n default:\n assertNever(templateFormat);\n }\n}\n\ntype Renderer<T> = {\n hash: Hasher<T>;\n render: (resource: T, tx: PlTransaction, creator: Creator) => AnyResourceRef;\n};\ntype Hasher<T> = (resource: T, hash: Hash) => void;\ntype Creator = <T>(resource: T, renderer: Renderer<T>) => AnyResourceRef;\n\nconst LibRenderer: Renderer<TemplateLibData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateLibV1.type.name)\n .update(PlTemplateLibV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n },\n render(resource, tx, _creator) {\n return tx.createValue(\n PlTemplateLibV1.type,\n JSON.stringify(PlTemplateLibV1.fromV2Data(resource).data),\n );\n },\n};\n\nconst SoftwareInfoRenderer: Renderer<TemplateSoftwareData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateSoftwareV1.type.name)\n .update(PlTemplateSoftwareV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n },\n render(resource, tx, _creator) {\n const sw = PlTemplateSoftwareV1.fromV2Data(resource);\n const ref = tx.createStruct(PlTemplateSoftwareV1.type, sw.data);\n tx.setKValue(ref, PlTemplateSoftwareV1.metaNameKey, JSON.stringify(sw.name));\n tx.lock(ref);\n return ref;\n },\n};\n\nconst TemplateRenderer: Renderer<TemplateData> = {\n hash(resource, hash) {\n hash\n .update(PlTemplateV1.type.name)\n .update(PlTemplateV1.type.version)\n .update(resource.hashOverride ?? \"no-override\")\n .update(resource.name)\n .update(resource.version)\n .update(resource.src);\n\n const srt = <T>(entries: [string, T][]): [string, T][] => {\n entries.sort((a, b) => (a[0] === b[0] ? 0 : a[0] < b[0] ? -1 : 1));\n return entries;\n };\n\n for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {\n hash.update(\"lib:\" + libId);\n LibRenderer.hash(lib, hash);\n }\n for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {\n hash.update(\"soft:\" + swId);\n SoftwareInfoRenderer.hash(sw, hash);\n }\n for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {\n hash.update(\"asset:\" + swId);\n SoftwareInfoRenderer.hash(sw, hash);\n }\n for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {\n hash.update(\"tpl:\" + tplId);\n this.hash(tpl, hash);\n }\n },\n render(resource, tx, _creator) {\n const tplRef = tx.createStruct(\n PlTemplateV1.type,\n JSON.stringify(PlTemplateV1.fromV2Data(resource).data),\n );\n // Render libraries\n for (const [libId, lib] of Object.entries(resource.libs ?? {})) {\n const fld = PlTemplateV1.libField(tplRef, libId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(lib, LibRenderer));\n }\n\n // Render software and assets\n for (const [swId, sw] of Object.entries(resource.software ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer));\n }\n for (const [swId, sw] of Object.entries(resource.assets ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer));\n }\n\n // Render dependency templates\n for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {\n const fld = PlTemplateV1.tplField(tplRef, depTplId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(depTpl, TemplateRenderer));\n }\n\n tx.lock(tplRef);\n\n if (!resource.hashOverride) return tplRef;\n\n // Override template hash with proxy resource, when hash override is configured for template\n const overrideRef = tx.createStruct(\n PlTemplateOverrideV1.type,\n JSON.stringify(PlTemplateOverrideV1.fromV2Data(resource)),\n );\n const fld = PlTemplateOverrideV1.tplField(overrideRef);\n tx.createField(fld, \"Service\");\n tx.setField(fld, tplRef);\n tx.lock(overrideRef);\n return overrideRef;\n },\n};\n\nfunction createTemplateV2Tree(tx: PlTransaction, tplData: TemplateData): AnyRef {\n const resourceCache = new Map<string, AnyResourceRef>();\n\n const createResource = <T>(resource: T, renderer: Renderer<T>): AnyResourceRef => {\n const hasher: Hash = createHash(\"sha256\");\n renderer.hash(resource, hasher);\n\n const rKey = hasher.digest(\"hex\");\n\n if (!resourceCache.has(rKey)) {\n const rId = renderer.render(resource, tx, createResource);\n resourceCache.set(rKey, rId);\n }\n\n return resourceCache.get(rKey)!;\n };\n\n return createResource(tplData, TemplateRenderer);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -14,13 +14,13 @@ var tsHelpers = require('@milaboratories/ts-helpers');
|
|
|
14
14
|
*
|
|
15
15
|
* IMO, it'd be clearer to rewrite it with Visitor pattern, and separate
|
|
16
16
|
* tree traversing and operations on it, but I don't have time to do it now.
|
|
17
|
-
*/
|
|
17
|
+
*/
|
|
18
18
|
function createTemplateV3Tree(tx, tplData) {
|
|
19
19
|
const resourceCache = new Map();
|
|
20
20
|
const createResourceCached = (resource, renderer, hashToSource) => {
|
|
21
|
-
const key = node_crypto.createHash(
|
|
21
|
+
const key = node_crypto.createHash("sha256");
|
|
22
22
|
renderer.updateCacheKey(resource, key, hashToSource);
|
|
23
|
-
const rKey = key.digest(
|
|
23
|
+
const rKey = key.digest("hex");
|
|
24
24
|
if (!resourceCache.has(rKey)) {
|
|
25
25
|
const rId = renderer.render(resource, tx, createResourceCached, hashToSource);
|
|
26
26
|
resourceCache.set(rKey, rId);
|
|
@@ -64,7 +64,7 @@ const TemplateRenderer = {
|
|
|
64
64
|
hash
|
|
65
65
|
.update(plModelBackend.PlTemplateV1.type.name)
|
|
66
66
|
.update(plModelBackend.PlTemplateV1.type.version)
|
|
67
|
-
.update(resource.hashOverride ??
|
|
67
|
+
.update(resource.hashOverride ?? "no-override")
|
|
68
68
|
.update(resource.name)
|
|
69
69
|
.update(resource.version)
|
|
70
70
|
.update(getSourceCode(resource.name, sources, resource.sourceHash));
|
|
@@ -73,19 +73,19 @@ const TemplateRenderer = {
|
|
|
73
73
|
return entries;
|
|
74
74
|
};
|
|
75
75
|
for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {
|
|
76
|
-
hash.update(
|
|
76
|
+
hash.update("lib:" + libId);
|
|
77
77
|
LibRenderer.updateCacheKey(lib, hash, sources);
|
|
78
78
|
}
|
|
79
79
|
for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {
|
|
80
|
-
hash.update(
|
|
80
|
+
hash.update("soft:" + swId);
|
|
81
81
|
SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);
|
|
82
82
|
}
|
|
83
83
|
for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {
|
|
84
|
-
hash.update(
|
|
84
|
+
hash.update("asset:" + swId);
|
|
85
85
|
SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);
|
|
86
86
|
}
|
|
87
87
|
for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {
|
|
88
|
-
hash.update(
|
|
88
|
+
hash.update("tpl:" + tplId);
|
|
89
89
|
this.updateCacheKey(tpl, hash, sources);
|
|
90
90
|
}
|
|
91
91
|
},
|
|
@@ -94,24 +94,24 @@ const TemplateRenderer = {
|
|
|
94
94
|
// Render libraries
|
|
95
95
|
for (const [libId, lib] of Object.entries(resource.libs ?? {})) {
|
|
96
96
|
const fld = plModelBackend.PlTemplateV1.libField(tplRef, libId);
|
|
97
|
-
tx.createField(fld,
|
|
97
|
+
tx.createField(fld, "Input");
|
|
98
98
|
tx.setField(fld, _creator(lib, LibRenderer, sources));
|
|
99
99
|
}
|
|
100
100
|
// Render software and assets
|
|
101
101
|
for (const [swId, sw] of Object.entries(resource.software ?? {})) {
|
|
102
102
|
const fld = plModelBackend.PlTemplateV1.swField(tplRef, swId);
|
|
103
|
-
tx.createField(fld,
|
|
103
|
+
tx.createField(fld, "Input");
|
|
104
104
|
tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));
|
|
105
105
|
}
|
|
106
106
|
for (const [swId, sw] of Object.entries(resource.assets ?? {})) {
|
|
107
107
|
const fld = plModelBackend.PlTemplateV1.swField(tplRef, swId);
|
|
108
|
-
tx.createField(fld,
|
|
108
|
+
tx.createField(fld, "Input");
|
|
109
109
|
tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));
|
|
110
110
|
}
|
|
111
111
|
// Render dependency templates
|
|
112
112
|
for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {
|
|
113
113
|
const fld = plModelBackend.PlTemplateV1.tplField(tplRef, depTplId);
|
|
114
|
-
tx.createField(fld,
|
|
114
|
+
tx.createField(fld, "Input");
|
|
115
115
|
tx.setField(fld, _creator(depTpl, TemplateRenderer, sources));
|
|
116
116
|
}
|
|
117
117
|
tx.lock(tplRef);
|
|
@@ -120,7 +120,7 @@ const TemplateRenderer = {
|
|
|
120
120
|
// Override template hash with proxy resource, when hash override is configured for template
|
|
121
121
|
const overrideRef = tx.createStruct(plModelBackend.PlTemplateOverrideV1.type, JSON.stringify(plModelBackend.PlTemplateOverrideV1.fromV3Data(resource)));
|
|
122
122
|
const fld = plModelBackend.PlTemplateOverrideV1.tplField(overrideRef);
|
|
123
|
-
tx.createField(fld,
|
|
123
|
+
tx.createField(fld, "Service");
|
|
124
124
|
tx.setField(fld, tplRef);
|
|
125
125
|
tx.lock(overrideRef);
|
|
126
126
|
return overrideRef;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct_template_loader_v3.cjs","sources":["../../../src/mutator/template/direct_template_loader_v3.ts"],"sourcesContent":["import type { AnyRef, AnyResourceRef, PlTransaction } from '@milaboratories/pl-client';\nimport type { Hash } from 'node:crypto';\nimport { createHash } from 'node:crypto';\nimport type {\n CompiledTemplateV3,\n TemplateDataV3,\n TemplateLibDataV3,\n TemplateSoftwareDataV3,\n} from '@milaboratories/pl-model-backend';\nimport {\n PlTemplateLibV1,\n PlTemplateSoftwareV1,\n PlTemplateV1,\n PlTemplateOverrideV1,\n} from '@milaboratories/pl-model-backend';\nimport { notEmpty } from '@milaboratories/ts-helpers';\n\n/**\n * Renders the tree of templates by caching all resource ids\n * by their cache keys.\n * It's different from v2 version because we provide\n * the hash map of the code of all sources everywhere.\n * It does a double-dispatch on the node type (template, library etc),\n * and creates resources.\n *\n * IMO, it'd be clearer to rewrite it with Visitor pattern, and separate\n * tree traversing and operations on it, but I don't have time to do it now.\n*/\nexport function createTemplateV3Tree(tx: PlTransaction, tplData: CompiledTemplateV3): AnyRef {\n const resourceCache = new Map<string, AnyResourceRef>();\n\n const createResourceCached = <T>(resource: T, renderer: Renderer<T>, hashToSource: Record<string, string>): AnyResourceRef => {\n const key: Hash = createHash('sha256');\n renderer.updateCacheKey(resource, key, hashToSource);\n\n const rKey = key.digest('hex');\n\n if (!resourceCache.has(rKey)) {\n const rId = renderer.render(resource, tx, createResourceCached, hashToSource);\n resourceCache.set(rKey, rId);\n }\n\n return resourceCache.get(rKey)!;\n };\n\n return createResourceCached(tplData.template, TemplateRenderer, tplData.hashToSource);\n}\n\ntype Renderer<T> = {\n /** Updates the cache key by adding all info of the artifact. */\n updateCacheKey: CacheKey<T>;\n /** Create resources for all dependencies recursively and then for this artifact. */\n render: (resource: T, tx: PlTransaction, creator: Creator, sources: Record<string, string>) => AnyResourceRef;\n};\ntype CacheKey<T> = (resource: T, key: Hash, sources: Record<string, string>) => void;\ntype Creator = <T>(resource: T, renderer: Renderer<T>, sources: Record<string, string>) => AnyResourceRef;\n\nconst LibRenderer: Renderer<TemplateLibDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateLibV1.type.name)\n .update(PlTemplateLibV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n },\n render(resource, tx, _creator, sources) {\n return tx.createValue(\n PlTemplateLibV1.type,\n JSON.stringify(PlTemplateLibV1.fromV3Data(resource, getSourceCode(resource.name, sources, resource.sourceHash)).data),\n );\n },\n};\n\nconst SoftwareInfoRenderer: Renderer<TemplateSoftwareDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateSoftwareV1.type.name)\n .update(PlTemplateSoftwareV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n },\n render(resource, tx, _creator, sources) {\n const sw = PlTemplateSoftwareV1.fromV3Data(resource, getSourceCode(resource.name, sources, resource.sourceHash));\n const ref = tx.createStruct(PlTemplateSoftwareV1.type, sw.data);\n tx.setKValue(ref, PlTemplateSoftwareV1.metaNameKey, JSON.stringify(sw.name));\n tx.lock(ref);\n return ref;\n },\n};\n\nconst TemplateRenderer: Renderer<TemplateDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateV1.type.name)\n .update(PlTemplateV1.type.version)\n .update(resource.hashOverride ?? 'no-override')\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n\n const srt = <T>(entries: [string, T][]): [string, T][] => {\n entries.sort((a, b) => (a[0] === b[0] ? 0 : a[0] < b[0] ? -1 : 1));\n return entries;\n };\n\n for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {\n hash.update('lib:' + libId);\n LibRenderer.updateCacheKey(lib, hash, sources);\n }\n for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {\n hash.update('soft:' + swId);\n SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);\n }\n for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {\n hash.update('asset:' + swId);\n SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);\n }\n for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {\n hash.update('tpl:' + tplId);\n this.updateCacheKey(tpl, hash, sources);\n }\n },\n render(resource, tx, _creator, sources) {\n const tplRef = tx.createStruct(\n PlTemplateV1.type,\n JSON.stringify(PlTemplateV1.fromV3Data(resource, getSourceCode(resource.name, sources, resource.sourceHash)).data),\n );\n // Render libraries\n for (const [libId, lib] of Object.entries(resource.libs ?? {})) {\n const fld = PlTemplateV1.libField(tplRef, libId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(lib, LibRenderer, sources));\n }\n\n // Render software and assets\n for (const [swId, sw] of Object.entries(resource.software ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));\n }\n for (const [swId, sw] of Object.entries(resource.assets ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));\n }\n\n // Render dependency templates\n for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {\n const fld = PlTemplateV1.tplField(tplRef, depTplId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(depTpl, TemplateRenderer, sources));\n }\n\n tx.lock(tplRef);\n\n if (!resource.hashOverride) return tplRef;\n\n // Override template hash with proxy resource, when hash override is configured for template\n const overrideRef = tx.createStruct(\n PlTemplateOverrideV1.type,\n JSON.stringify(PlTemplateOverrideV1.fromV3Data(resource)),\n );\n const fld = PlTemplateOverrideV1.tplField(overrideRef);\n tx.createField(fld, 'Service');\n tx.setField(fld, tplRef);\n tx.lock(overrideRef);\n return overrideRef;\n },\n};\n\n/**\n * Gets a source code of the artifact by its source hash.\n * the source hash was calculated and stored by tengo compiler\n * and is different from the hash we're using for caching here.\n */\nfunction getSourceCode(name: string, sources: Record<string, string>, sourceHash: string): string {\n return notEmpty(\n sources[sourceHash],\n `trying to get \"${name}\" source: sources map doesn't contain source hash ${sourceHash}`,\n );\n}\n"],"names":["createHash","PlTemplateLibV1","PlTemplateSoftwareV1","PlTemplateV1","PlTemplateOverrideV1","notEmpty"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"direct_template_loader_v3.cjs","sources":["../../../src/mutator/template/direct_template_loader_v3.ts"],"sourcesContent":["import type { AnyRef, AnyResourceRef, PlTransaction } from \"@milaboratories/pl-client\";\nimport type { Hash } from \"node:crypto\";\nimport { createHash } from \"node:crypto\";\nimport type {\n CompiledTemplateV3,\n TemplateDataV3,\n TemplateLibDataV3,\n TemplateSoftwareDataV3,\n} from \"@milaboratories/pl-model-backend\";\nimport {\n PlTemplateLibV1,\n PlTemplateSoftwareV1,\n PlTemplateV1,\n PlTemplateOverrideV1,\n} from \"@milaboratories/pl-model-backend\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\n\n/**\n * Renders the tree of templates by caching all resource ids\n * by their cache keys.\n * It's different from v2 version because we provide\n * the hash map of the code of all sources everywhere.\n * It does a double-dispatch on the node type (template, library etc),\n * and creates resources.\n *\n * IMO, it'd be clearer to rewrite it with Visitor pattern, and separate\n * tree traversing and operations on it, but I don't have time to do it now.\n */\nexport function createTemplateV3Tree(tx: PlTransaction, tplData: CompiledTemplateV3): AnyRef {\n const resourceCache = new Map<string, AnyResourceRef>();\n\n const createResourceCached = <T>(\n resource: T,\n renderer: Renderer<T>,\n hashToSource: Record<string, string>,\n ): AnyResourceRef => {\n const key: Hash = createHash(\"sha256\");\n renderer.updateCacheKey(resource, key, hashToSource);\n\n const rKey = key.digest(\"hex\");\n\n if (!resourceCache.has(rKey)) {\n const rId = renderer.render(resource, tx, createResourceCached, hashToSource);\n resourceCache.set(rKey, rId);\n }\n\n return resourceCache.get(rKey)!;\n };\n\n return createResourceCached(tplData.template, TemplateRenderer, tplData.hashToSource);\n}\n\ntype Renderer<T> = {\n /** Updates the cache key by adding all info of the artifact. */\n updateCacheKey: CacheKey<T>;\n /** Create resources for all dependencies recursively and then for this artifact. */\n render: (\n resource: T,\n tx: PlTransaction,\n creator: Creator,\n sources: Record<string, string>,\n ) => AnyResourceRef;\n};\ntype CacheKey<T> = (resource: T, key: Hash, sources: Record<string, string>) => void;\ntype Creator = <T>(\n resource: T,\n renderer: Renderer<T>,\n sources: Record<string, string>,\n) => AnyResourceRef;\n\nconst LibRenderer: Renderer<TemplateLibDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateLibV1.type.name)\n .update(PlTemplateLibV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n },\n render(resource, tx, _creator, sources) {\n return tx.createValue(\n PlTemplateLibV1.type,\n JSON.stringify(\n PlTemplateLibV1.fromV3Data(\n resource,\n getSourceCode(resource.name, sources, resource.sourceHash),\n ).data,\n ),\n );\n },\n};\n\nconst SoftwareInfoRenderer: Renderer<TemplateSoftwareDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateSoftwareV1.type.name)\n .update(PlTemplateSoftwareV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n },\n render(resource, tx, _creator, sources) {\n const sw = PlTemplateSoftwareV1.fromV3Data(\n resource,\n getSourceCode(resource.name, sources, resource.sourceHash),\n );\n const ref = tx.createStruct(PlTemplateSoftwareV1.type, sw.data);\n tx.setKValue(ref, PlTemplateSoftwareV1.metaNameKey, JSON.stringify(sw.name));\n tx.lock(ref);\n return ref;\n },\n};\n\nconst TemplateRenderer: Renderer<TemplateDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateV1.type.name)\n .update(PlTemplateV1.type.version)\n .update(resource.hashOverride ?? \"no-override\")\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n\n const srt = <T>(entries: [string, T][]): [string, T][] => {\n entries.sort((a, b) => (a[0] === b[0] ? 0 : a[0] < b[0] ? -1 : 1));\n return entries;\n };\n\n for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {\n hash.update(\"lib:\" + libId);\n LibRenderer.updateCacheKey(lib, hash, sources);\n }\n for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {\n hash.update(\"soft:\" + swId);\n SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);\n }\n for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {\n hash.update(\"asset:\" + swId);\n SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);\n }\n for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {\n hash.update(\"tpl:\" + tplId);\n this.updateCacheKey(tpl, hash, sources);\n }\n },\n render(resource, tx, _creator, sources) {\n const tplRef = tx.createStruct(\n PlTemplateV1.type,\n JSON.stringify(\n PlTemplateV1.fromV3Data(\n resource,\n getSourceCode(resource.name, sources, resource.sourceHash),\n ).data,\n ),\n );\n // Render libraries\n for (const [libId, lib] of Object.entries(resource.libs ?? {})) {\n const fld = PlTemplateV1.libField(tplRef, libId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(lib, LibRenderer, sources));\n }\n\n // Render software and assets\n for (const [swId, sw] of Object.entries(resource.software ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));\n }\n for (const [swId, sw] of Object.entries(resource.assets ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));\n }\n\n // Render dependency templates\n for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {\n const fld = PlTemplateV1.tplField(tplRef, depTplId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(depTpl, TemplateRenderer, sources));\n }\n\n tx.lock(tplRef);\n\n if (!resource.hashOverride) return tplRef;\n\n // Override template hash with proxy resource, when hash override is configured for template\n const overrideRef = tx.createStruct(\n PlTemplateOverrideV1.type,\n JSON.stringify(PlTemplateOverrideV1.fromV3Data(resource)),\n );\n const fld = PlTemplateOverrideV1.tplField(overrideRef);\n tx.createField(fld, \"Service\");\n tx.setField(fld, tplRef);\n tx.lock(overrideRef);\n return overrideRef;\n },\n};\n\n/**\n * Gets a source code of the artifact by its source hash.\n * the source hash was calculated and stored by tengo compiler\n * and is different from the hash we're using for caching here.\n */\nfunction getSourceCode(name: string, sources: Record<string, string>, sourceHash: string): string {\n return notEmpty(\n sources[sourceHash],\n `trying to get \"${name}\" source: sources map doesn't contain source hash ${sourceHash}`,\n );\n}\n"],"names":["createHash","PlTemplateLibV1","PlTemplateSoftwareV1","PlTemplateV1","PlTemplateOverrideV1","notEmpty"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AnyRef, PlTransaction } from
|
|
2
|
-
import type { CompiledTemplateV3 } from
|
|
1
|
+
import type { AnyRef, PlTransaction } from "@milaboratories/pl-client";
|
|
2
|
+
import type { CompiledTemplateV3 } from "@milaboratories/pl-model-backend";
|
|
3
3
|
/**
|
|
4
4
|
* Renders the tree of templates by caching all resource ids
|
|
5
5
|
* by their cache keys.
|
|
@@ -10,6 +10,6 @@ import type { CompiledTemplateV3 } from '@milaboratories/pl-model-backend';
|
|
|
10
10
|
*
|
|
11
11
|
* IMO, it'd be clearer to rewrite it with Visitor pattern, and separate
|
|
12
12
|
* tree traversing and operations on it, but I don't have time to do it now.
|
|
13
|
-
*/
|
|
13
|
+
*/
|
|
14
14
|
export declare function createTemplateV3Tree(tx: PlTransaction, tplData: CompiledTemplateV3): AnyRef;
|
|
15
15
|
//# sourceMappingURL=direct_template_loader_v3.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct_template_loader_v3.d.ts","sourceRoot":"","sources":["../../../src/mutator/template/direct_template_loader_v3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAkB,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAGvF,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,kCAAkC,CAAC;AAS1C;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"direct_template_loader_v3.d.ts","sourceRoot":"","sources":["../../../src/mutator/template/direct_template_loader_v3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAkB,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAGvF,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,kCAAkC,CAAC;AAS1C;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAsB3F"}
|
|
@@ -12,13 +12,13 @@ import { notEmpty } from '@milaboratories/ts-helpers';
|
|
|
12
12
|
*
|
|
13
13
|
* IMO, it'd be clearer to rewrite it with Visitor pattern, and separate
|
|
14
14
|
* tree traversing and operations on it, but I don't have time to do it now.
|
|
15
|
-
*/
|
|
15
|
+
*/
|
|
16
16
|
function createTemplateV3Tree(tx, tplData) {
|
|
17
17
|
const resourceCache = new Map();
|
|
18
18
|
const createResourceCached = (resource, renderer, hashToSource) => {
|
|
19
|
-
const key = createHash(
|
|
19
|
+
const key = createHash("sha256");
|
|
20
20
|
renderer.updateCacheKey(resource, key, hashToSource);
|
|
21
|
-
const rKey = key.digest(
|
|
21
|
+
const rKey = key.digest("hex");
|
|
22
22
|
if (!resourceCache.has(rKey)) {
|
|
23
23
|
const rId = renderer.render(resource, tx, createResourceCached, hashToSource);
|
|
24
24
|
resourceCache.set(rKey, rId);
|
|
@@ -62,7 +62,7 @@ const TemplateRenderer = {
|
|
|
62
62
|
hash
|
|
63
63
|
.update(PlTemplateV1.type.name)
|
|
64
64
|
.update(PlTemplateV1.type.version)
|
|
65
|
-
.update(resource.hashOverride ??
|
|
65
|
+
.update(resource.hashOverride ?? "no-override")
|
|
66
66
|
.update(resource.name)
|
|
67
67
|
.update(resource.version)
|
|
68
68
|
.update(getSourceCode(resource.name, sources, resource.sourceHash));
|
|
@@ -71,19 +71,19 @@ const TemplateRenderer = {
|
|
|
71
71
|
return entries;
|
|
72
72
|
};
|
|
73
73
|
for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {
|
|
74
|
-
hash.update(
|
|
74
|
+
hash.update("lib:" + libId);
|
|
75
75
|
LibRenderer.updateCacheKey(lib, hash, sources);
|
|
76
76
|
}
|
|
77
77
|
for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {
|
|
78
|
-
hash.update(
|
|
78
|
+
hash.update("soft:" + swId);
|
|
79
79
|
SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);
|
|
80
80
|
}
|
|
81
81
|
for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {
|
|
82
|
-
hash.update(
|
|
82
|
+
hash.update("asset:" + swId);
|
|
83
83
|
SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);
|
|
84
84
|
}
|
|
85
85
|
for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {
|
|
86
|
-
hash.update(
|
|
86
|
+
hash.update("tpl:" + tplId);
|
|
87
87
|
this.updateCacheKey(tpl, hash, sources);
|
|
88
88
|
}
|
|
89
89
|
},
|
|
@@ -92,24 +92,24 @@ const TemplateRenderer = {
|
|
|
92
92
|
// Render libraries
|
|
93
93
|
for (const [libId, lib] of Object.entries(resource.libs ?? {})) {
|
|
94
94
|
const fld = PlTemplateV1.libField(tplRef, libId);
|
|
95
|
-
tx.createField(fld,
|
|
95
|
+
tx.createField(fld, "Input");
|
|
96
96
|
tx.setField(fld, _creator(lib, LibRenderer, sources));
|
|
97
97
|
}
|
|
98
98
|
// Render software and assets
|
|
99
99
|
for (const [swId, sw] of Object.entries(resource.software ?? {})) {
|
|
100
100
|
const fld = PlTemplateV1.swField(tplRef, swId);
|
|
101
|
-
tx.createField(fld,
|
|
101
|
+
tx.createField(fld, "Input");
|
|
102
102
|
tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));
|
|
103
103
|
}
|
|
104
104
|
for (const [swId, sw] of Object.entries(resource.assets ?? {})) {
|
|
105
105
|
const fld = PlTemplateV1.swField(tplRef, swId);
|
|
106
|
-
tx.createField(fld,
|
|
106
|
+
tx.createField(fld, "Input");
|
|
107
107
|
tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));
|
|
108
108
|
}
|
|
109
109
|
// Render dependency templates
|
|
110
110
|
for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {
|
|
111
111
|
const fld = PlTemplateV1.tplField(tplRef, depTplId);
|
|
112
|
-
tx.createField(fld,
|
|
112
|
+
tx.createField(fld, "Input");
|
|
113
113
|
tx.setField(fld, _creator(depTpl, TemplateRenderer, sources));
|
|
114
114
|
}
|
|
115
115
|
tx.lock(tplRef);
|
|
@@ -118,7 +118,7 @@ const TemplateRenderer = {
|
|
|
118
118
|
// Override template hash with proxy resource, when hash override is configured for template
|
|
119
119
|
const overrideRef = tx.createStruct(PlTemplateOverrideV1.type, JSON.stringify(PlTemplateOverrideV1.fromV3Data(resource)));
|
|
120
120
|
const fld = PlTemplateOverrideV1.tplField(overrideRef);
|
|
121
|
-
tx.createField(fld,
|
|
121
|
+
tx.createField(fld, "Service");
|
|
122
122
|
tx.setField(fld, tplRef);
|
|
123
123
|
tx.lock(overrideRef);
|
|
124
124
|
return overrideRef;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct_template_loader_v3.js","sources":["../../../src/mutator/template/direct_template_loader_v3.ts"],"sourcesContent":["import type { AnyRef, AnyResourceRef, PlTransaction } from '@milaboratories/pl-client';\nimport type { Hash } from 'node:crypto';\nimport { createHash } from 'node:crypto';\nimport type {\n CompiledTemplateV3,\n TemplateDataV3,\n TemplateLibDataV3,\n TemplateSoftwareDataV3,\n} from '@milaboratories/pl-model-backend';\nimport {\n PlTemplateLibV1,\n PlTemplateSoftwareV1,\n PlTemplateV1,\n PlTemplateOverrideV1,\n} from '@milaboratories/pl-model-backend';\nimport { notEmpty } from '@milaboratories/ts-helpers';\n\n/**\n * Renders the tree of templates by caching all resource ids\n * by their cache keys.\n * It's different from v2 version because we provide\n * the hash map of the code of all sources everywhere.\n * It does a double-dispatch on the node type (template, library etc),\n * and creates resources.\n *\n * IMO, it'd be clearer to rewrite it with Visitor pattern, and separate\n * tree traversing and operations on it, but I don't have time to do it now.\n*/\nexport function createTemplateV3Tree(tx: PlTransaction, tplData: CompiledTemplateV3): AnyRef {\n const resourceCache = new Map<string, AnyResourceRef>();\n\n const createResourceCached = <T>(resource: T, renderer: Renderer<T>, hashToSource: Record<string, string>): AnyResourceRef => {\n const key: Hash = createHash('sha256');\n renderer.updateCacheKey(resource, key, hashToSource);\n\n const rKey = key.digest('hex');\n\n if (!resourceCache.has(rKey)) {\n const rId = renderer.render(resource, tx, createResourceCached, hashToSource);\n resourceCache.set(rKey, rId);\n }\n\n return resourceCache.get(rKey)!;\n };\n\n return createResourceCached(tplData.template, TemplateRenderer, tplData.hashToSource);\n}\n\ntype Renderer<T> = {\n /** Updates the cache key by adding all info of the artifact. */\n updateCacheKey: CacheKey<T>;\n /** Create resources for all dependencies recursively and then for this artifact. */\n render: (resource: T, tx: PlTransaction, creator: Creator, sources: Record<string, string>) => AnyResourceRef;\n};\ntype CacheKey<T> = (resource: T, key: Hash, sources: Record<string, string>) => void;\ntype Creator = <T>(resource: T, renderer: Renderer<T>, sources: Record<string, string>) => AnyResourceRef;\n\nconst LibRenderer: Renderer<TemplateLibDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateLibV1.type.name)\n .update(PlTemplateLibV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n },\n render(resource, tx, _creator, sources) {\n return tx.createValue(\n PlTemplateLibV1.type,\n JSON.stringify(PlTemplateLibV1.fromV3Data(resource, getSourceCode(resource.name, sources, resource.sourceHash)).data),\n );\n },\n};\n\nconst SoftwareInfoRenderer: Renderer<TemplateSoftwareDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateSoftwareV1.type.name)\n .update(PlTemplateSoftwareV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n },\n render(resource, tx, _creator, sources) {\n const sw = PlTemplateSoftwareV1.fromV3Data(resource, getSourceCode(resource.name, sources, resource.sourceHash));\n const ref = tx.createStruct(PlTemplateSoftwareV1.type, sw.data);\n tx.setKValue(ref, PlTemplateSoftwareV1.metaNameKey, JSON.stringify(sw.name));\n tx.lock(ref);\n return ref;\n },\n};\n\nconst TemplateRenderer: Renderer<TemplateDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateV1.type.name)\n .update(PlTemplateV1.type.version)\n .update(resource.hashOverride ?? 'no-override')\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n\n const srt = <T>(entries: [string, T][]): [string, T][] => {\n entries.sort((a, b) => (a[0] === b[0] ? 0 : a[0] < b[0] ? -1 : 1));\n return entries;\n };\n\n for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {\n hash.update('lib:' + libId);\n LibRenderer.updateCacheKey(lib, hash, sources);\n }\n for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {\n hash.update('soft:' + swId);\n SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);\n }\n for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {\n hash.update('asset:' + swId);\n SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);\n }\n for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {\n hash.update('tpl:' + tplId);\n this.updateCacheKey(tpl, hash, sources);\n }\n },\n render(resource, tx, _creator, sources) {\n const tplRef = tx.createStruct(\n PlTemplateV1.type,\n JSON.stringify(PlTemplateV1.fromV3Data(resource, getSourceCode(resource.name, sources, resource.sourceHash)).data),\n );\n // Render libraries\n for (const [libId, lib] of Object.entries(resource.libs ?? {})) {\n const fld = PlTemplateV1.libField(tplRef, libId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(lib, LibRenderer, sources));\n }\n\n // Render software and assets\n for (const [swId, sw] of Object.entries(resource.software ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));\n }\n for (const [swId, sw] of Object.entries(resource.assets ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));\n }\n\n // Render dependency templates\n for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {\n const fld = PlTemplateV1.tplField(tplRef, depTplId);\n tx.createField(fld, 'Input');\n tx.setField(fld, _creator(depTpl, TemplateRenderer, sources));\n }\n\n tx.lock(tplRef);\n\n if (!resource.hashOverride) return tplRef;\n\n // Override template hash with proxy resource, when hash override is configured for template\n const overrideRef = tx.createStruct(\n PlTemplateOverrideV1.type,\n JSON.stringify(PlTemplateOverrideV1.fromV3Data(resource)),\n );\n const fld = PlTemplateOverrideV1.tplField(overrideRef);\n tx.createField(fld, 'Service');\n tx.setField(fld, tplRef);\n tx.lock(overrideRef);\n return overrideRef;\n },\n};\n\n/**\n * Gets a source code of the artifact by its source hash.\n * the source hash was calculated and stored by tengo compiler\n * and is different from the hash we're using for caching here.\n */\nfunction getSourceCode(name: string, sources: Record<string, string>, sourceHash: string): string {\n return notEmpty(\n sources[sourceHash],\n `trying to get \"${name}\" source: sources map doesn't contain source hash ${sourceHash}`,\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"direct_template_loader_v3.js","sources":["../../../src/mutator/template/direct_template_loader_v3.ts"],"sourcesContent":["import type { AnyRef, AnyResourceRef, PlTransaction } from \"@milaboratories/pl-client\";\nimport type { Hash } from \"node:crypto\";\nimport { createHash } from \"node:crypto\";\nimport type {\n CompiledTemplateV3,\n TemplateDataV3,\n TemplateLibDataV3,\n TemplateSoftwareDataV3,\n} from \"@milaboratories/pl-model-backend\";\nimport {\n PlTemplateLibV1,\n PlTemplateSoftwareV1,\n PlTemplateV1,\n PlTemplateOverrideV1,\n} from \"@milaboratories/pl-model-backend\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\n\n/**\n * Renders the tree of templates by caching all resource ids\n * by their cache keys.\n * It's different from v2 version because we provide\n * the hash map of the code of all sources everywhere.\n * It does a double-dispatch on the node type (template, library etc),\n * and creates resources.\n *\n * IMO, it'd be clearer to rewrite it with Visitor pattern, and separate\n * tree traversing and operations on it, but I don't have time to do it now.\n */\nexport function createTemplateV3Tree(tx: PlTransaction, tplData: CompiledTemplateV3): AnyRef {\n const resourceCache = new Map<string, AnyResourceRef>();\n\n const createResourceCached = <T>(\n resource: T,\n renderer: Renderer<T>,\n hashToSource: Record<string, string>,\n ): AnyResourceRef => {\n const key: Hash = createHash(\"sha256\");\n renderer.updateCacheKey(resource, key, hashToSource);\n\n const rKey = key.digest(\"hex\");\n\n if (!resourceCache.has(rKey)) {\n const rId = renderer.render(resource, tx, createResourceCached, hashToSource);\n resourceCache.set(rKey, rId);\n }\n\n return resourceCache.get(rKey)!;\n };\n\n return createResourceCached(tplData.template, TemplateRenderer, tplData.hashToSource);\n}\n\ntype Renderer<T> = {\n /** Updates the cache key by adding all info of the artifact. */\n updateCacheKey: CacheKey<T>;\n /** Create resources for all dependencies recursively and then for this artifact. */\n render: (\n resource: T,\n tx: PlTransaction,\n creator: Creator,\n sources: Record<string, string>,\n ) => AnyResourceRef;\n};\ntype CacheKey<T> = (resource: T, key: Hash, sources: Record<string, string>) => void;\ntype Creator = <T>(\n resource: T,\n renderer: Renderer<T>,\n sources: Record<string, string>,\n) => AnyResourceRef;\n\nconst LibRenderer: Renderer<TemplateLibDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateLibV1.type.name)\n .update(PlTemplateLibV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n },\n render(resource, tx, _creator, sources) {\n return tx.createValue(\n PlTemplateLibV1.type,\n JSON.stringify(\n PlTemplateLibV1.fromV3Data(\n resource,\n getSourceCode(resource.name, sources, resource.sourceHash),\n ).data,\n ),\n );\n },\n};\n\nconst SoftwareInfoRenderer: Renderer<TemplateSoftwareDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateSoftwareV1.type.name)\n .update(PlTemplateSoftwareV1.type.version)\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n },\n render(resource, tx, _creator, sources) {\n const sw = PlTemplateSoftwareV1.fromV3Data(\n resource,\n getSourceCode(resource.name, sources, resource.sourceHash),\n );\n const ref = tx.createStruct(PlTemplateSoftwareV1.type, sw.data);\n tx.setKValue(ref, PlTemplateSoftwareV1.metaNameKey, JSON.stringify(sw.name));\n tx.lock(ref);\n return ref;\n },\n};\n\nconst TemplateRenderer: Renderer<TemplateDataV3> = {\n updateCacheKey(resource, hash, sources) {\n hash\n .update(PlTemplateV1.type.name)\n .update(PlTemplateV1.type.version)\n .update(resource.hashOverride ?? \"no-override\")\n .update(resource.name)\n .update(resource.version)\n .update(getSourceCode(resource.name, sources, resource.sourceHash));\n\n const srt = <T>(entries: [string, T][]): [string, T][] => {\n entries.sort((a, b) => (a[0] === b[0] ? 0 : a[0] < b[0] ? -1 : 1));\n return entries;\n };\n\n for (const [libId, lib] of srt(Object.entries(resource.libs ?? {}))) {\n hash.update(\"lib:\" + libId);\n LibRenderer.updateCacheKey(lib, hash, sources);\n }\n for (const [swId, sw] of srt(Object.entries(resource.software ?? {}))) {\n hash.update(\"soft:\" + swId);\n SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);\n }\n for (const [swId, sw] of srt(Object.entries(resource.assets ?? {}))) {\n hash.update(\"asset:\" + swId);\n SoftwareInfoRenderer.updateCacheKey(sw, hash, sources);\n }\n for (const [tplId, tpl] of srt(Object.entries(resource.templates ?? {}))) {\n hash.update(\"tpl:\" + tplId);\n this.updateCacheKey(tpl, hash, sources);\n }\n },\n render(resource, tx, _creator, sources) {\n const tplRef = tx.createStruct(\n PlTemplateV1.type,\n JSON.stringify(\n PlTemplateV1.fromV3Data(\n resource,\n getSourceCode(resource.name, sources, resource.sourceHash),\n ).data,\n ),\n );\n // Render libraries\n for (const [libId, lib] of Object.entries(resource.libs ?? {})) {\n const fld = PlTemplateV1.libField(tplRef, libId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(lib, LibRenderer, sources));\n }\n\n // Render software and assets\n for (const [swId, sw] of Object.entries(resource.software ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));\n }\n for (const [swId, sw] of Object.entries(resource.assets ?? {})) {\n const fld = PlTemplateV1.swField(tplRef, swId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(sw, SoftwareInfoRenderer, sources));\n }\n\n // Render dependency templates\n for (const [depTplId, depTpl] of Object.entries(resource.templates ?? {})) {\n const fld = PlTemplateV1.tplField(tplRef, depTplId);\n tx.createField(fld, \"Input\");\n tx.setField(fld, _creator(depTpl, TemplateRenderer, sources));\n }\n\n tx.lock(tplRef);\n\n if (!resource.hashOverride) return tplRef;\n\n // Override template hash with proxy resource, when hash override is configured for template\n const overrideRef = tx.createStruct(\n PlTemplateOverrideV1.type,\n JSON.stringify(PlTemplateOverrideV1.fromV3Data(resource)),\n );\n const fld = PlTemplateOverrideV1.tplField(overrideRef);\n tx.createField(fld, \"Service\");\n tx.setField(fld, tplRef);\n tx.lock(overrideRef);\n return overrideRef;\n },\n};\n\n/**\n * Gets a source code of the artifact by its source hash.\n * the source hash was calculated and stored by tengo compiler\n * and is different from the hash we're using for caching here.\n */\nfunction getSourceCode(name: string, sources: Record<string, string>, sourceHash: string): string {\n return notEmpty(\n sources[sourceHash],\n `trying to get \"${name}\" source: sources map doesn't contain source hash ${sourceHash}`,\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,11 @@ var plClient = require('@milaboratories/pl-client');
|
|
|
4
4
|
var node_crypto = require('node:crypto');
|
|
5
5
|
var render_template = require('./render_template.cjs');
|
|
6
6
|
|
|
7
|
-
const BContextEnd = { name:
|
|
8
|
-
const BContext = { name:
|
|
9
|
-
const BContextId =
|
|
10
|
-
const BContextMultiParentPrefix =
|
|
11
|
-
const HeavyBlockOutputNames = [
|
|
7
|
+
const BContextEnd = { name: "BContextEnd", version: "1" };
|
|
8
|
+
const BContext = { name: "BContext", version: "1" };
|
|
9
|
+
const BContextId = "id";
|
|
10
|
+
const BContextMultiParentPrefix = "parent/";
|
|
11
|
+
const HeavyBlockOutputNames = ["context", "result"];
|
|
12
12
|
function createRenderHeavyBlock(tx, tpl, inputs) {
|
|
13
13
|
return render_template.createRenderTemplate(tx, tpl, true, inputs, HeavyBlockOutputNames);
|
|
14
14
|
}
|
|
@@ -24,10 +24,10 @@ function createBContextFromUpstreams(tx, upstreamCtxs) {
|
|
|
24
24
|
return upstreamCtxs[0];
|
|
25
25
|
const ctx = tx.createEphemeral(BContext);
|
|
26
26
|
// setting id
|
|
27
|
-
tx.createField(plClient.field(ctx, BContextId),
|
|
27
|
+
tx.createField(plClient.field(ctx, BContextId), "Input", plClient.Pl.createPlString(tx, node_crypto.randomUUID()));
|
|
28
28
|
// setting parents
|
|
29
29
|
for (let i = 0; i < upstreamCtxs.length; i++)
|
|
30
|
-
tx.createField(plClient.field(ctx, `${BContextMultiParentPrefix}${i}`),
|
|
30
|
+
tx.createField(plClient.field(ctx, `${BContextMultiParentPrefix}${i}`), "Input", upstreamCtxs[i]);
|
|
31
31
|
tx.lock(ctx);
|
|
32
32
|
return ctx;
|
|
33
33
|
}
|