@milaboratories/pl-middle-layer 1.55.1 → 1.55.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/{_@oxc-project_runtime@0.114.0 → _@oxc-project_runtime@0.123.0}/helpers/usingCtx.cjs +2 -4
- package/dist/_virtual/{_@oxc-project_runtime@0.114.0 → _@oxc-project_runtime@0.123.0}/helpers/usingCtx.js +2 -3
- package/dist/_virtual/_rolldown/runtime.cjs +7 -13
- package/dist/block_registry/index.cjs +3 -3
- package/dist/block_registry/index.js +3 -3
- package/dist/block_registry/registry-v2-provider.cjs +2 -3
- package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
- package/dist/block_registry/registry-v2-provider.d.ts.map +1 -0
- package/dist/block_registry/registry-v2-provider.js +1 -2
- package/dist/block_registry/registry-v2-provider.js.map +1 -1
- package/dist/block_registry/registry.cjs +3 -4
- package/dist/block_registry/registry.cjs.map +1 -1
- package/dist/block_registry/registry.d.ts.map +1 -0
- package/dist/block_registry/registry.js +1 -2
- package/dist/block_registry/registry.js.map +1 -1
- package/dist/block_registry/watcher.cjs +3 -4
- package/dist/block_registry/watcher.cjs.map +1 -1
- package/dist/block_registry/watcher.d.ts.map +1 -0
- package/dist/block_registry/watcher.js +1 -2
- package/dist/block_registry/watcher.js.map +1 -1
- package/dist/block_registry/well_known_registries.cjs +1 -2
- package/dist/block_registry/well_known_registries.cjs.map +1 -1
- package/dist/block_registry/well_known_registries.d.ts.map +1 -0
- package/dist/block_registry/well_known_registries.js +1 -1
- package/dist/cfg_render/executor.cjs +4 -5
- package/dist/cfg_render/executor.cjs.map +1 -1
- package/dist/cfg_render/executor.js +1 -2
- package/dist/cfg_render/executor.js.map +1 -1
- package/dist/cfg_render/renderer.cjs +4 -5
- package/dist/cfg_render/renderer.cjs.map +1 -1
- package/dist/cfg_render/renderer.js +1 -2
- package/dist/cfg_render/renderer.js.map +1 -1
- package/dist/cfg_render/traverse.cjs +2 -3
- package/dist/cfg_render/traverse.cjs.map +1 -1
- package/dist/cfg_render/traverse.js +1 -2
- package/dist/cfg_render/traverse.js.map +1 -1
- package/dist/cfg_render/util.cjs +2 -3
- package/dist/cfg_render/util.cjs.map +1 -1
- package/dist/cfg_render/util.js +1 -2
- package/dist/cfg_render/util.js.map +1 -1
- package/dist/debug/index.cjs +1 -2
- package/dist/debug/index.cjs.map +1 -1
- package/dist/debug/index.js +1 -1
- package/dist/debug/index.js.map +1 -1
- package/dist/dev_env/index.cjs +3 -4
- package/dist/dev_env/index.cjs.map +1 -1
- package/dist/dev_env/index.js +1 -2
- package/dist/dev_env/index.js.map +1 -1
- package/dist/dev_env/util.cjs +2 -3
- package/dist/dev_env/util.cjs.map +1 -1
- package/dist/dev_env/util.js +1 -2
- package/dist/dev_env/util.js.map +1 -1
- package/dist/index.cjs +48 -44
- package/dist/index.d.ts +0 -3
- package/dist/index.js +5 -10
- package/dist/js_render/computable_context.cjs +5 -6
- package/dist/js_render/computable_context.cjs.map +1 -1
- package/dist/js_render/computable_context.js +2 -3
- package/dist/js_render/computable_context.js.map +1 -1
- package/dist/js_render/context.cjs +3 -4
- package/dist/js_render/context.cjs.map +1 -1
- package/dist/js_render/context.js +1 -2
- package/dist/js_render/context.js.map +1 -1
- package/dist/js_render/index.cjs +4 -5
- package/dist/js_render/index.cjs.map +1 -1
- package/dist/js_render/index.js +1 -2
- package/dist/js_render/index.js.map +1 -1
- package/dist/js_render/service_injectors.cjs +3 -4
- package/dist/js_render/service_injectors.cjs.map +1 -1
- package/dist/js_render/service_injectors.js +2 -3
- package/dist/js_render/service_injectors.js.map +1 -1
- package/dist/middle_layer/active_cfg.cjs +7 -8
- package/dist/middle_layer/active_cfg.cjs.map +1 -1
- package/dist/middle_layer/active_cfg.js +1 -2
- package/dist/middle_layer/active_cfg.js.map +1 -1
- package/dist/middle_layer/block.cjs +8 -9
- package/dist/middle_layer/block.cjs.map +1 -1
- package/dist/middle_layer/block.js +1 -2
- package/dist/middle_layer/block.js.map +1 -1
- package/dist/middle_layer/block_ctx.cjs +5 -6
- package/dist/middle_layer/block_ctx.cjs.map +1 -1
- package/dist/middle_layer/block_ctx.js +1 -2
- package/dist/middle_layer/block_ctx.js.map +1 -1
- package/dist/middle_layer/block_ctx_unsafe.cjs +1 -2
- package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
- 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 +5 -6
- package/dist/middle_layer/driver_kit.cjs.map +1 -1
- package/dist/middle_layer/driver_kit.d.ts +0 -1
- package/dist/middle_layer/driver_kit.d.ts.map +1 -0
- 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 +6 -7
- package/dist/middle_layer/frontend_path.cjs.map +1 -1
- package/dist/middle_layer/frontend_path.js +1 -2
- package/dist/middle_layer/frontend_path.js.map +1 -1
- package/dist/middle_layer/index.cjs +5 -5
- package/dist/middle_layer/index.js +5 -5
- package/dist/middle_layer/middle_layer.cjs +15 -16
- package/dist/middle_layer/middle_layer.cjs.map +1 -1
- package/dist/middle_layer/middle_layer.d.ts +0 -2
- package/dist/middle_layer/middle_layer.d.ts.map +1 -0
- package/dist/middle_layer/middle_layer.js +1 -2
- package/dist/middle_layer/middle_layer.js.map +1 -1
- package/dist/middle_layer/navigation_states.cjs +2 -3
- package/dist/middle_layer/navigation_states.cjs.map +1 -1
- package/dist/middle_layer/navigation_states.js +1 -2
- package/dist/middle_layer/navigation_states.js.map +1 -1
- package/dist/middle_layer/ops.cjs +5 -7
- package/dist/middle_layer/ops.cjs.map +1 -1
- package/dist/middle_layer/ops.d.ts +0 -1
- package/dist/middle_layer/ops.d.ts.map +1 -0
- package/dist/middle_layer/ops.js +1 -2
- package/dist/middle_layer/ops.js.map +1 -1
- package/dist/middle_layer/project.cjs +12 -13
- package/dist/middle_layer/project.cjs.map +1 -1
- package/dist/middle_layer/project.d.ts +0 -1
- package/dist/middle_layer/project.d.ts.map +1 -0
- package/dist/middle_layer/project.js +1 -2
- package/dist/middle_layer/project.js.map +1 -1
- package/dist/middle_layer/project_list.cjs +3 -4
- package/dist/middle_layer/project_list.cjs.map +1 -1
- package/dist/middle_layer/project_list.d.ts +0 -4
- package/dist/middle_layer/project_list.d.ts.map +1 -0
- package/dist/middle_layer/project_list.js +1 -2
- package/dist/middle_layer/project_list.js.map +1 -1
- package/dist/middle_layer/project_overview.cjs +9 -10
- package/dist/middle_layer/project_overview.cjs.map +1 -1
- package/dist/middle_layer/project_overview.js +1 -2
- package/dist/middle_layer/project_overview.js.map +1 -1
- package/dist/middle_layer/project_overview_light.cjs +4 -5
- package/dist/middle_layer/project_overview_light.cjs.map +1 -1
- package/dist/middle_layer/project_overview_light.js +1 -2
- package/dist/middle_layer/project_overview_light.js.map +1 -1
- package/dist/middle_layer/render.cjs +5 -6
- package/dist/middle_layer/render.cjs.map +1 -1
- package/dist/middle_layer/render.js +1 -2
- package/dist/middle_layer/render.js.map +1 -1
- package/dist/middle_layer/types.d.ts.map +1 -0
- package/dist/middle_layer/util.cjs +4 -5
- package/dist/middle_layer/util.cjs.map +1 -1
- package/dist/middle_layer/util.js +1 -2
- package/dist/middle_layer/util.js.map +1 -1
- package/dist/model/args.cjs +2 -3
- package/dist/model/args.cjs.map +1 -1
- package/dist/model/args.js +1 -2
- package/dist/model/args.js.map +1 -1
- package/dist/model/block_pack_spec.cjs +1 -2
- package/dist/model/block_pack_spec.cjs.map +1 -1
- package/dist/model/block_pack_spec.d.ts.map +1 -0
- package/dist/model/block_pack_spec.js +1 -1
- package/dist/model/frontend.d.ts.map +1 -0
- package/dist/model/project_helper.cjs +3 -4
- package/dist/model/project_helper.cjs.map +1 -1
- package/dist/model/project_helper.d.ts.map +1 -0
- package/dist/model/project_helper.js +1 -2
- package/dist/model/project_helper.js.map +1 -1
- package/dist/model/project_model.cjs +1 -6
- package/dist/model/project_model.cjs.map +1 -1
- package/dist/model/project_model.d.ts +0 -1
- package/dist/model/project_model.d.ts.map +1 -0
- package/dist/model/project_model.js +2 -4
- package/dist/model/project_model.js.map +1 -1
- package/dist/model/project_model_util.cjs +2 -3
- package/dist/model/project_model_util.cjs.map +1 -1
- package/dist/model/project_model_util.js +1 -2
- package/dist/model/project_model_util.js.map +1 -1
- package/dist/model/project_model_v1.cjs +1 -5
- package/dist/model/project_model_v1.cjs.map +1 -1
- package/dist/model/project_model_v1.js +2 -4
- package/dist/model/project_model_v1.js.map +1 -1
- package/dist/model/template_spec.d.ts.map +1 -0
- package/dist/mutator/block-pack/block_pack.cjs +9 -10
- package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
- package/dist/mutator/block-pack/block_pack.d.ts +0 -1
- package/dist/mutator/block-pack/block_pack.d.ts.map +1 -0
- package/dist/mutator/block-pack/block_pack.js +2 -3
- package/dist/mutator/block-pack/block_pack.js.map +1 -1
- package/dist/mutator/block-pack/frontend.cjs +3 -4
- package/dist/mutator/block-pack/frontend.cjs.map +1 -1
- package/dist/mutator/block-pack/frontend.js +1 -2
- package/dist/mutator/block-pack/frontend.js.map +1 -1
- package/dist/mutator/context_export.cjs +4 -5
- package/dist/mutator/context_export.cjs.map +1 -1
- package/dist/mutator/context_export.js +1 -2
- package/dist/mutator/context_export.js.map +1 -1
- package/dist/mutator/migration.cjs +13 -14
- package/dist/mutator/migration.cjs.map +1 -1
- package/dist/mutator/migration.js +11 -12
- package/dist/mutator/migration.js.map +1 -1
- package/dist/mutator/project.cjs +13 -14
- package/dist/mutator/project.cjs.map +1 -1
- package/dist/mutator/project.d.ts +0 -3
- package/dist/mutator/project.d.ts.map +1 -0
- package/dist/mutator/project.js +6 -7
- package/dist/mutator/project.js.map +1 -1
- package/dist/mutator/template/direct_template_loader.cjs +3 -4
- package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
- package/dist/mutator/template/direct_template_loader.js +1 -2
- package/dist/mutator/template/direct_template_loader.js.map +1 -1
- package/dist/mutator/template/direct_template_loader_v3.cjs +2 -3
- package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
- package/dist/mutator/template/direct_template_loader_v3.js +1 -2
- package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
- package/dist/mutator/template/render_block.cjs +4 -6
- package/dist/mutator/template/render_block.cjs.map +1 -1
- package/dist/mutator/template/render_block.js +2 -4
- package/dist/mutator/template/render_block.js.map +1 -1
- package/dist/mutator/template/render_template.cjs +2 -3
- package/dist/mutator/template/render_template.cjs.map +1 -1
- package/dist/mutator/template/render_template.d.ts.map +1 -0
- package/dist/mutator/template/render_template.js +1 -2
- package/dist/mutator/template/render_template.js.map +1 -1
- package/dist/mutator/template/template_cache.cjs +6 -10
- package/dist/mutator/template/template_cache.cjs.map +1 -1
- package/dist/mutator/template/template_cache.d.ts +2 -3
- package/dist/mutator/template/template_cache.d.ts.map +1 -0
- package/dist/mutator/template/template_cache.js +4 -8
- package/dist/mutator/template/template_cache.js.map +1 -1
- package/dist/mutator/template/template_loading.cjs +3 -4
- package/dist/mutator/template/template_loading.cjs.map +1 -1
- package/dist/mutator/template/template_loading.d.ts.map +1 -0
- package/dist/mutator/template/template_loading.js +1 -2
- package/dist/mutator/template/template_loading.js.map +1 -1
- package/dist/network_check/network_check.cjs +4 -5
- package/dist/network_check/network_check.cjs.map +1 -1
- package/dist/network_check/network_check.d.ts.map +1 -0
- package/dist/network_check/network_check.js +1 -2
- package/dist/network_check/network_check.js.map +1 -1
- package/dist/network_check/pings.cjs +2 -3
- package/dist/network_check/pings.cjs.map +1 -1
- package/dist/network_check/pings.js +1 -2
- package/dist/network_check/pings.js.map +1 -1
- package/dist/network_check/template.cjs +4 -5
- package/dist/network_check/template.cjs.map +1 -1
- package/dist/network_check/template.js +1 -2
- package/dist/network_check/template.js.map +1 -1
- package/dist/pool/data.cjs +2 -3
- package/dist/pool/data.cjs.map +1 -1
- package/dist/pool/data.d.ts +0 -1
- package/dist/pool/data.d.ts.map +1 -0
- package/dist/pool/data.js +1 -2
- package/dist/pool/data.js.map +1 -1
- package/dist/pool/driver.cjs +3 -4
- package/dist/pool/driver.cjs.map +1 -1
- package/dist/pool/driver.d.ts +0 -1
- package/dist/pool/driver.d.ts.map +1 -0
- package/dist/pool/driver.js +1 -2
- package/dist/pool/driver.js.map +1 -1
- package/dist/pool/index.cjs +2 -2
- package/dist/pool/index.d.ts +1 -2
- package/dist/pool/index.js +2 -2
- package/dist/pool/p_object_collection.cjs +3 -4
- package/dist/pool/p_object_collection.cjs.map +1 -1
- package/dist/pool/p_object_collection.d.ts.map +1 -0
- package/dist/pool/p_object_collection.js +1 -2
- package/dist/pool/p_object_collection.js.map +1 -1
- package/dist/pool/result_pool.cjs +7 -8
- package/dist/pool/result_pool.cjs.map +1 -1
- package/dist/pool/result_pool.d.ts +1 -3
- package/dist/pool/result_pool.js +1 -2
- package/dist/pool/result_pool.js.map +1 -1
- package/dist/service_factories.cjs +2 -3
- package/dist/service_factories.cjs.map +1 -1
- package/dist/service_factories.js +1 -2
- package/dist/service_factories.js.map +1 -1
- package/dist/worker/WorkerManager.cjs +2 -3
- package/dist/worker/WorkerManager.cjs.map +1 -1
- package/dist/worker/WorkerManager.js +1 -2
- package/dist/worker/WorkerManager.js.map +1 -1
- package/dist/worker/worker.cjs +3 -4
- package/dist/worker/worker.cjs.map +1 -1
- package/dist/worker/worker.js +1 -2
- package/dist/worker/worker.js.map +1 -1
- package/dist/worker/workerApi.cjs +2 -3
- package/dist/worker/workerApi.cjs.map +1 -1
- package/dist/worker/workerApi.js +1 -2
- package/dist/worker/workerApi.js.map +1 -1
- package/package.json +19 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct_template_loader.js","names":[],"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"],"mappings":"
|
|
1
|
+
{"version":3,"file":"direct_template_loader.js","names":[],"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"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
2
|
let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
|
|
3
3
|
let node_crypto = require("node:crypto");
|
|
4
4
|
let _milaboratories_pl_model_backend = require("@milaboratories/pl-model-backend");
|
|
5
|
-
|
|
6
5
|
//#region src/mutator/template/direct_template_loader_v3.ts
|
|
7
6
|
/**
|
|
8
7
|
* Renders the tree of templates by caching all resource ids
|
|
@@ -113,7 +112,7 @@ const TemplateRenderer = {
|
|
|
113
112
|
function getSourceCode(name, sources, sourceHash) {
|
|
114
113
|
return (0, _milaboratories_ts_helpers.notEmpty)(sources[sourceHash], `trying to get "${name}" source: sources map doesn't contain source hash ${sourceHash}`);
|
|
115
114
|
}
|
|
116
|
-
|
|
117
115
|
//#endregion
|
|
118
116
|
exports.createTemplateV3Tree = createTemplateV3Tree;
|
|
117
|
+
|
|
119
118
|
//# sourceMappingURL=direct_template_loader_v3.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct_template_loader_v3.cjs","names":["PlTemplateLibV1","PlTemplateSoftwareV1","PlTemplateV1","PlTemplateOverrideV1"],"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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"direct_template_loader_v3.cjs","names":["PlTemplateLibV1","PlTemplateSoftwareV1","PlTemplateV1","PlTemplateOverrideV1"],"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"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { notEmpty } from "@milaboratories/ts-helpers";
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
3
|
import { PlTemplateLibV1, PlTemplateOverrideV1, PlTemplateSoftwareV1, PlTemplateV1 } from "@milaboratories/pl-model-backend";
|
|
4
|
-
|
|
5
4
|
//#region src/mutator/template/direct_template_loader_v3.ts
|
|
6
5
|
/**
|
|
7
6
|
* Renders the tree of templates by caching all resource ids
|
|
@@ -112,7 +111,7 @@ const TemplateRenderer = {
|
|
|
112
111
|
function getSourceCode(name, sources, sourceHash) {
|
|
113
112
|
return notEmpty(sources[sourceHash], `trying to get "${name}" source: sources map doesn't contain source hash ${sourceHash}`);
|
|
114
113
|
}
|
|
115
|
-
|
|
116
114
|
//#endregion
|
|
117
115
|
export { createTemplateV3Tree };
|
|
116
|
+
|
|
118
117
|
//# sourceMappingURL=direct_template_loader_v3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct_template_loader_v3.js","names":[],"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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"direct_template_loader_v3.js","names":[],"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"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
const require_render_template = require(
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_render_template = require("./render_template.cjs");
|
|
3
3
|
let _milaboratories_pl_client = require("@milaboratories/pl-client");
|
|
4
4
|
let node_crypto = require("node:crypto");
|
|
5
|
-
|
|
6
5
|
//#region src/mutator/template/render_block.ts
|
|
7
6
|
const BContextEnd = {
|
|
8
7
|
name: "BContextEnd",
|
|
@@ -12,7 +11,6 @@ const BContext = {
|
|
|
12
11
|
name: "BContext",
|
|
13
12
|
version: "1"
|
|
14
13
|
};
|
|
15
|
-
const BContextId = "id";
|
|
16
14
|
const BContextMultiParentPrefix = "parent/";
|
|
17
15
|
const HeavyBlockOutputNames = ["context", "result"];
|
|
18
16
|
function createRenderHeavyBlock(tx, tpl, inputs) {
|
|
@@ -27,14 +25,14 @@ function createBContextFromUpstreams(tx, upstreamCtxs) {
|
|
|
27
25
|
if (upstreamCtxs.length === 0) return createBContextEnd(tx);
|
|
28
26
|
if (upstreamCtxs.length === 1) return upstreamCtxs[0];
|
|
29
27
|
const ctx = tx.createEphemeral(BContext);
|
|
30
|
-
tx.createField((0, _milaboratories_pl_client.field)(ctx,
|
|
28
|
+
tx.createField((0, _milaboratories_pl_client.field)(ctx, "id"), "Input", _milaboratories_pl_client.Pl.createPlString(tx, (0, node_crypto.randomUUID)()));
|
|
31
29
|
for (let i = 0; i < upstreamCtxs.length; i++) tx.createField((0, _milaboratories_pl_client.field)(ctx, `${BContextMultiParentPrefix}${i}`), "Input", upstreamCtxs[i]);
|
|
32
30
|
tx.lock(ctx);
|
|
33
31
|
return ctx;
|
|
34
32
|
}
|
|
35
|
-
|
|
36
33
|
//#endregion
|
|
37
34
|
exports.createBContextEnd = createBContextEnd;
|
|
38
35
|
exports.createBContextFromUpstreams = createBContextFromUpstreams;
|
|
39
36
|
exports.createRenderHeavyBlock = createRenderHeavyBlock;
|
|
37
|
+
|
|
40
38
|
//# sourceMappingURL=render_block.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render_block.cjs","names":["createRenderTemplate","Pl"],"sources":["../../../src/mutator/template/render_block.ts"],"sourcesContent":["import type { AnyRef, PlTransaction, ResourceRef, ResourceType } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport { randomUUID } from \"node:crypto\";\nimport { createRenderTemplate } from \"./render_template\";\n\nexport const BContextEnd: ResourceType = { name: \"BContextEnd\", version: \"1\" };\nexport const BContext: ResourceType = { name: \"BContext\", version: \"1\" };\nexport const BContextId = \"id\";\nexport const BContextParent = \"parent\";\nexport const BContextMultiParentPrefix = \"parent/\";\n\n// TODO: add implementation for dual context heavy block.\n// export type BlockType =\n// | 'LightBlock'\n// | 'HeavyBlock'\n// | 'DualContextHeavyBlock';\n// moved to project model ==>>>\n\nexport type HeavyBlockInputs = {\n args: AnyRef;\n blockId: AnyRef;\n isProduction: AnyRef;\n context: AnyRef;\n};\n\nexport type HeavyBlockOutputs = {\n context: AnyRef;\n result: AnyRef;\n};\n\nexport const HeavyBlockOutputNames: (keyof HeavyBlockOutputs)[] = [\"context\", \"result\"];\n\nexport function createRenderHeavyBlock(\n tx: PlTransaction,\n tpl: AnyRef,\n inputs: HeavyBlockInputs,\n): HeavyBlockOutputs {\n return createRenderTemplate(tx, tpl, true, inputs, HeavyBlockOutputNames);\n}\n\nexport type LightBlockInputs = {\n args: AnyRef;\n blockId: AnyRef;\n stagingContext: AnyRef;\n productionContext: AnyRef;\n};\n\nexport type LightBlockOutput = {\n result: AnyRef;\n};\n\nexport const LightBlockOutputNames: (keyof LightBlockOutput)[] = [\"result\"];\n\nexport function createRenderLightBlock(\n tx: PlTransaction,\n tpl: ResourceRef,\n inputs: LightBlockInputs,\n): LightBlockOutput {\n return createRenderTemplate(tx, tpl, true, inputs, LightBlockOutputNames);\n}\n\nexport function createBContextEnd(tx: PlTransaction): ResourceRef {\n const ctx = tx.createEphemeral(BContextEnd);\n tx.lock(ctx);\n return ctx;\n}\n\nexport function createBContextFromUpstreams(tx: PlTransaction, upstreamCtxs: AnyRef[]): AnyRef {\n if (upstreamCtxs.length === 0) return createBContextEnd(tx);\n\n if (upstreamCtxs.length === 1) return upstreamCtxs[0];\n\n const ctx = tx.createEphemeral(BContext);\n\n // setting id\n tx.createField(field(ctx, BContextId), \"Input\", Pl.createPlString(tx, randomUUID()));\n\n // setting parents\n for (let i = 0; i < upstreamCtxs.length; i++)\n tx.createField(field(ctx, `${BContextMultiParentPrefix}${i}`), \"Input\", upstreamCtxs[i]);\n\n tx.lock(ctx);\n\n return ctx;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"render_block.cjs","names":["createRenderTemplate","Pl"],"sources":["../../../src/mutator/template/render_block.ts"],"sourcesContent":["import type { AnyRef, PlTransaction, ResourceRef, ResourceType } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport { randomUUID } from \"node:crypto\";\nimport { createRenderTemplate } from \"./render_template\";\n\nexport const BContextEnd: ResourceType = { name: \"BContextEnd\", version: \"1\" };\nexport const BContext: ResourceType = { name: \"BContext\", version: \"1\" };\nexport const BContextId = \"id\";\nexport const BContextParent = \"parent\";\nexport const BContextMultiParentPrefix = \"parent/\";\n\n// TODO: add implementation for dual context heavy block.\n// export type BlockType =\n// | 'LightBlock'\n// | 'HeavyBlock'\n// | 'DualContextHeavyBlock';\n// moved to project model ==>>>\n\nexport type HeavyBlockInputs = {\n args: AnyRef;\n blockId: AnyRef;\n isProduction: AnyRef;\n context: AnyRef;\n};\n\nexport type HeavyBlockOutputs = {\n context: AnyRef;\n result: AnyRef;\n};\n\nexport const HeavyBlockOutputNames: (keyof HeavyBlockOutputs)[] = [\"context\", \"result\"];\n\nexport function createRenderHeavyBlock(\n tx: PlTransaction,\n tpl: AnyRef,\n inputs: HeavyBlockInputs,\n): HeavyBlockOutputs {\n return createRenderTemplate(tx, tpl, true, inputs, HeavyBlockOutputNames);\n}\n\nexport type LightBlockInputs = {\n args: AnyRef;\n blockId: AnyRef;\n stagingContext: AnyRef;\n productionContext: AnyRef;\n};\n\nexport type LightBlockOutput = {\n result: AnyRef;\n};\n\nexport const LightBlockOutputNames: (keyof LightBlockOutput)[] = [\"result\"];\n\nexport function createRenderLightBlock(\n tx: PlTransaction,\n tpl: ResourceRef,\n inputs: LightBlockInputs,\n): LightBlockOutput {\n return createRenderTemplate(tx, tpl, true, inputs, LightBlockOutputNames);\n}\n\nexport function createBContextEnd(tx: PlTransaction): ResourceRef {\n const ctx = tx.createEphemeral(BContextEnd);\n tx.lock(ctx);\n return ctx;\n}\n\nexport function createBContextFromUpstreams(tx: PlTransaction, upstreamCtxs: AnyRef[]): AnyRef {\n if (upstreamCtxs.length === 0) return createBContextEnd(tx);\n\n if (upstreamCtxs.length === 1) return upstreamCtxs[0];\n\n const ctx = tx.createEphemeral(BContext);\n\n // setting id\n tx.createField(field(ctx, BContextId), \"Input\", Pl.createPlString(tx, randomUUID()));\n\n // setting parents\n for (let i = 0; i < upstreamCtxs.length; i++)\n tx.createField(field(ctx, `${BContextMultiParentPrefix}${i}`), \"Input\", upstreamCtxs[i]);\n\n tx.lock(ctx);\n\n return ctx;\n}\n"],"mappings":";;;;;AAKA,MAAa,cAA4B;CAAE,MAAM;CAAe,SAAS;CAAK;AAC9E,MAAa,WAAyB;CAAE,MAAM;CAAY,SAAS;CAAK;AAGxE,MAAa,4BAA4B;AAqBzC,MAAa,wBAAqD,CAAC,WAAW,SAAS;AAEvF,SAAgB,uBACd,IACA,KACA,QACmB;AACnB,QAAOA,wBAAAA,qBAAqB,IAAI,KAAK,MAAM,QAAQ,sBAAsB;;AAwB3E,SAAgB,kBAAkB,IAAgC;CAChE,MAAM,MAAM,GAAG,gBAAgB,YAAY;AAC3C,IAAG,KAAK,IAAI;AACZ,QAAO;;AAGT,SAAgB,4BAA4B,IAAmB,cAAgC;AAC7F,KAAI,aAAa,WAAW,EAAG,QAAO,kBAAkB,GAAG;AAE3D,KAAI,aAAa,WAAW,EAAG,QAAO,aAAa;CAEnD,MAAM,MAAM,GAAG,gBAAgB,SAAS;AAGxC,IAAG,aAAA,GAAA,0BAAA,OAAkB,KAAA,KAAgB,EAAE,SAASC,0BAAAA,GAAG,eAAe,KAAA,GAAA,YAAA,aAAgB,CAAC,CAAC;AAGpF,MAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,IACvC,IAAG,aAAA,GAAA,0BAAA,OAAkB,KAAK,GAAG,4BAA4B,IAAI,EAAE,SAAS,aAAa,GAAG;AAE1F,IAAG,KAAK,IAAI;AAEZ,QAAO"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { createRenderTemplate } from "./render_template.js";
|
|
2
2
|
import { Pl, field } from "@milaboratories/pl-client";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
|
-
|
|
5
4
|
//#region src/mutator/template/render_block.ts
|
|
6
5
|
const BContextEnd = {
|
|
7
6
|
name: "BContextEnd",
|
|
@@ -11,7 +10,6 @@ const BContext = {
|
|
|
11
10
|
name: "BContext",
|
|
12
11
|
version: "1"
|
|
13
12
|
};
|
|
14
|
-
const BContextId = "id";
|
|
15
13
|
const BContextMultiParentPrefix = "parent/";
|
|
16
14
|
const HeavyBlockOutputNames = ["context", "result"];
|
|
17
15
|
function createRenderHeavyBlock(tx, tpl, inputs) {
|
|
@@ -26,12 +24,12 @@ function createBContextFromUpstreams(tx, upstreamCtxs) {
|
|
|
26
24
|
if (upstreamCtxs.length === 0) return createBContextEnd(tx);
|
|
27
25
|
if (upstreamCtxs.length === 1) return upstreamCtxs[0];
|
|
28
26
|
const ctx = tx.createEphemeral(BContext);
|
|
29
|
-
tx.createField(field(ctx,
|
|
27
|
+
tx.createField(field(ctx, "id"), "Input", Pl.createPlString(tx, randomUUID()));
|
|
30
28
|
for (let i = 0; i < upstreamCtxs.length; i++) tx.createField(field(ctx, `${BContextMultiParentPrefix}${i}`), "Input", upstreamCtxs[i]);
|
|
31
29
|
tx.lock(ctx);
|
|
32
30
|
return ctx;
|
|
33
31
|
}
|
|
34
|
-
|
|
35
32
|
//#endregion
|
|
36
33
|
export { createBContextEnd, createBContextFromUpstreams, createRenderHeavyBlock };
|
|
34
|
+
|
|
37
35
|
//# sourceMappingURL=render_block.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render_block.js","names":[],"sources":["../../../src/mutator/template/render_block.ts"],"sourcesContent":["import type { AnyRef, PlTransaction, ResourceRef, ResourceType } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport { randomUUID } from \"node:crypto\";\nimport { createRenderTemplate } from \"./render_template\";\n\nexport const BContextEnd: ResourceType = { name: \"BContextEnd\", version: \"1\" };\nexport const BContext: ResourceType = { name: \"BContext\", version: \"1\" };\nexport const BContextId = \"id\";\nexport const BContextParent = \"parent\";\nexport const BContextMultiParentPrefix = \"parent/\";\n\n// TODO: add implementation for dual context heavy block.\n// export type BlockType =\n// | 'LightBlock'\n// | 'HeavyBlock'\n// | 'DualContextHeavyBlock';\n// moved to project model ==>>>\n\nexport type HeavyBlockInputs = {\n args: AnyRef;\n blockId: AnyRef;\n isProduction: AnyRef;\n context: AnyRef;\n};\n\nexport type HeavyBlockOutputs = {\n context: AnyRef;\n result: AnyRef;\n};\n\nexport const HeavyBlockOutputNames: (keyof HeavyBlockOutputs)[] = [\"context\", \"result\"];\n\nexport function createRenderHeavyBlock(\n tx: PlTransaction,\n tpl: AnyRef,\n inputs: HeavyBlockInputs,\n): HeavyBlockOutputs {\n return createRenderTemplate(tx, tpl, true, inputs, HeavyBlockOutputNames);\n}\n\nexport type LightBlockInputs = {\n args: AnyRef;\n blockId: AnyRef;\n stagingContext: AnyRef;\n productionContext: AnyRef;\n};\n\nexport type LightBlockOutput = {\n result: AnyRef;\n};\n\nexport const LightBlockOutputNames: (keyof LightBlockOutput)[] = [\"result\"];\n\nexport function createRenderLightBlock(\n tx: PlTransaction,\n tpl: ResourceRef,\n inputs: LightBlockInputs,\n): LightBlockOutput {\n return createRenderTemplate(tx, tpl, true, inputs, LightBlockOutputNames);\n}\n\nexport function createBContextEnd(tx: PlTransaction): ResourceRef {\n const ctx = tx.createEphemeral(BContextEnd);\n tx.lock(ctx);\n return ctx;\n}\n\nexport function createBContextFromUpstreams(tx: PlTransaction, upstreamCtxs: AnyRef[]): AnyRef {\n if (upstreamCtxs.length === 0) return createBContextEnd(tx);\n\n if (upstreamCtxs.length === 1) return upstreamCtxs[0];\n\n const ctx = tx.createEphemeral(BContext);\n\n // setting id\n tx.createField(field(ctx, BContextId), \"Input\", Pl.createPlString(tx, randomUUID()));\n\n // setting parents\n for (let i = 0; i < upstreamCtxs.length; i++)\n tx.createField(field(ctx, `${BContextMultiParentPrefix}${i}`), \"Input\", upstreamCtxs[i]);\n\n tx.lock(ctx);\n\n return ctx;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"render_block.js","names":[],"sources":["../../../src/mutator/template/render_block.ts"],"sourcesContent":["import type { AnyRef, PlTransaction, ResourceRef, ResourceType } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport { randomUUID } from \"node:crypto\";\nimport { createRenderTemplate } from \"./render_template\";\n\nexport const BContextEnd: ResourceType = { name: \"BContextEnd\", version: \"1\" };\nexport const BContext: ResourceType = { name: \"BContext\", version: \"1\" };\nexport const BContextId = \"id\";\nexport const BContextParent = \"parent\";\nexport const BContextMultiParentPrefix = \"parent/\";\n\n// TODO: add implementation for dual context heavy block.\n// export type BlockType =\n// | 'LightBlock'\n// | 'HeavyBlock'\n// | 'DualContextHeavyBlock';\n// moved to project model ==>>>\n\nexport type HeavyBlockInputs = {\n args: AnyRef;\n blockId: AnyRef;\n isProduction: AnyRef;\n context: AnyRef;\n};\n\nexport type HeavyBlockOutputs = {\n context: AnyRef;\n result: AnyRef;\n};\n\nexport const HeavyBlockOutputNames: (keyof HeavyBlockOutputs)[] = [\"context\", \"result\"];\n\nexport function createRenderHeavyBlock(\n tx: PlTransaction,\n tpl: AnyRef,\n inputs: HeavyBlockInputs,\n): HeavyBlockOutputs {\n return createRenderTemplate(tx, tpl, true, inputs, HeavyBlockOutputNames);\n}\n\nexport type LightBlockInputs = {\n args: AnyRef;\n blockId: AnyRef;\n stagingContext: AnyRef;\n productionContext: AnyRef;\n};\n\nexport type LightBlockOutput = {\n result: AnyRef;\n};\n\nexport const LightBlockOutputNames: (keyof LightBlockOutput)[] = [\"result\"];\n\nexport function createRenderLightBlock(\n tx: PlTransaction,\n tpl: ResourceRef,\n inputs: LightBlockInputs,\n): LightBlockOutput {\n return createRenderTemplate(tx, tpl, true, inputs, LightBlockOutputNames);\n}\n\nexport function createBContextEnd(tx: PlTransaction): ResourceRef {\n const ctx = tx.createEphemeral(BContextEnd);\n tx.lock(ctx);\n return ctx;\n}\n\nexport function createBContextFromUpstreams(tx: PlTransaction, upstreamCtxs: AnyRef[]): AnyRef {\n if (upstreamCtxs.length === 0) return createBContextEnd(tx);\n\n if (upstreamCtxs.length === 1) return upstreamCtxs[0];\n\n const ctx = tx.createEphemeral(BContext);\n\n // setting id\n tx.createField(field(ctx, BContextId), \"Input\", Pl.createPlString(tx, randomUUID()));\n\n // setting parents\n for (let i = 0; i < upstreamCtxs.length; i++)\n tx.createField(field(ctx, `${BContextMultiParentPrefix}${i}`), \"Input\", upstreamCtxs[i]);\n\n tx.lock(ctx);\n\n return ctx;\n}\n"],"mappings":";;;;AAKA,MAAa,cAA4B;CAAE,MAAM;CAAe,SAAS;CAAK;AAC9E,MAAa,WAAyB;CAAE,MAAM;CAAY,SAAS;CAAK;AAGxE,MAAa,4BAA4B;AAqBzC,MAAa,wBAAqD,CAAC,WAAW,SAAS;AAEvF,SAAgB,uBACd,IACA,KACA,QACmB;AACnB,QAAO,qBAAqB,IAAI,KAAK,MAAM,QAAQ,sBAAsB;;AAwB3E,SAAgB,kBAAkB,IAAgC;CAChE,MAAM,MAAM,GAAG,gBAAgB,YAAY;AAC3C,IAAG,KAAK,IAAI;AACZ,QAAO;;AAGT,SAAgB,4BAA4B,IAAmB,cAAgC;AAC7F,KAAI,aAAa,WAAW,EAAG,QAAO,kBAAkB,GAAG;AAE3D,KAAI,aAAa,WAAW,EAAG,QAAO,aAAa;CAEnD,MAAM,MAAM,GAAG,gBAAgB,SAAS;AAGxC,IAAG,YAAY,MAAM,KAAA,KAAgB,EAAE,SAAS,GAAG,eAAe,IAAI,YAAY,CAAC,CAAC;AAGpF,MAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,IACvC,IAAG,YAAY,MAAM,KAAK,GAAG,4BAA4B,IAAI,EAAE,SAAS,aAAa,GAAG;AAE1F,IAAG,KAAK,IAAI;AAEZ,QAAO"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
2
|
let _milaboratories_pl_client = require("@milaboratories/pl-client");
|
|
3
|
-
|
|
4
3
|
//#region src/mutator/template/render_template.ts
|
|
5
4
|
const EphRenderTemplate = {
|
|
6
5
|
name: "EphRenderTemplate",
|
|
@@ -29,7 +28,7 @@ function createRenderTemplate(tx, tpl, ephemeral, inputs, outputNames) {
|
|
|
29
28
|
tx.lockInputs(rId);
|
|
30
29
|
return _milaboratories_pl_client.Pl.futureRecord(tx, rId, outputNames, "Output", "outputs/");
|
|
31
30
|
}
|
|
32
|
-
|
|
33
31
|
//#endregion
|
|
34
32
|
exports.createRenderTemplate = createRenderTemplate;
|
|
33
|
+
|
|
35
34
|
//# sourceMappingURL=render_template.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render_template.cjs","names":["Pl"],"sources":["../../../src/mutator/template/render_template.ts"],"sourcesContent":["import type { AnyRef, FieldRef, PlTransaction } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport type { ResourceType } from \"@platforma-sdk/model\";\n\nconst EphRenderTemplate: ResourceType = {\n name: \"EphRenderTemplate\",\n version: \"1\",\n};\nconst RenderTemplate: ResourceType = {\n name: \"RenderTemplate\",\n version: \"1\",\n};\n\n/**\n * Creates render template operation, for a given remplate and inputs.\n *\n * @param tx transaction to use during rendering creation\n * @param tpl reference to the template resource (see {@link loadTemplate})\n * @param ephemeral true for ephemeral templates, false for pure templates\n * @param inputs map of inputs pointing to other resources or fields\n * @param outputNames names of the outputs to collect and return from this method\n */\nexport function createRenderTemplate<O extends string>(\n tx: PlTransaction,\n tpl: AnyRef,\n ephemeral: boolean,\n inputs: Pl.PlRecord,\n outputNames: O[],\n): Record<O, FieldRef> {\n if (outputNames.length === 0) throw new Error(\"Zero output names provided\");\n const rId = ephemeral ? tx.createEphemeral(EphRenderTemplate) : tx.createStruct(RenderTemplate);\n\n const tplField = field(rId, \"template\");\n const inputsField = field(rId, \"inputs\");\n\n tx.createField(tplField, \"Input\", tpl);\n tx.createField(inputsField, \"Input\", Pl.createPlMap(tx, inputs, ephemeral));\n tx.lockInputs(rId);\n\n return Pl.futureRecord(tx, rId, outputNames, \"Output\", \"outputs/\");\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"render_template.cjs","names":["Pl"],"sources":["../../../src/mutator/template/render_template.ts"],"sourcesContent":["import type { AnyRef, FieldRef, PlTransaction } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport type { ResourceType } from \"@platforma-sdk/model\";\n\nconst EphRenderTemplate: ResourceType = {\n name: \"EphRenderTemplate\",\n version: \"1\",\n};\nconst RenderTemplate: ResourceType = {\n name: \"RenderTemplate\",\n version: \"1\",\n};\n\n/**\n * Creates render template operation, for a given remplate and inputs.\n *\n * @param tx transaction to use during rendering creation\n * @param tpl reference to the template resource (see {@link loadTemplate})\n * @param ephemeral true for ephemeral templates, false for pure templates\n * @param inputs map of inputs pointing to other resources or fields\n * @param outputNames names of the outputs to collect and return from this method\n */\nexport function createRenderTemplate<O extends string>(\n tx: PlTransaction,\n tpl: AnyRef,\n ephemeral: boolean,\n inputs: Pl.PlRecord,\n outputNames: O[],\n): Record<O, FieldRef> {\n if (outputNames.length === 0) throw new Error(\"Zero output names provided\");\n const rId = ephemeral ? tx.createEphemeral(EphRenderTemplate) : tx.createStruct(RenderTemplate);\n\n const tplField = field(rId, \"template\");\n const inputsField = field(rId, \"inputs\");\n\n tx.createField(tplField, \"Input\", tpl);\n tx.createField(inputsField, \"Input\", Pl.createPlMap(tx, inputs, ephemeral));\n tx.lockInputs(rId);\n\n return Pl.futureRecord(tx, rId, outputNames, \"Output\", \"outputs/\");\n}\n"],"mappings":";;;AAIA,MAAM,oBAAkC;CACtC,MAAM;CACN,SAAS;CACV;AACD,MAAM,iBAA+B;CACnC,MAAM;CACN,SAAS;CACV;;;;;;;;;;AAWD,SAAgB,qBACd,IACA,KACA,WACA,QACA,aACqB;AACrB,KAAI,YAAY,WAAW,EAAG,OAAM,IAAI,MAAM,6BAA6B;CAC3E,MAAM,MAAM,YAAY,GAAG,gBAAgB,kBAAkB,GAAG,GAAG,aAAa,eAAe;CAE/F,MAAM,YAAA,GAAA,0BAAA,OAAiB,KAAK,WAAW;CACvC,MAAM,eAAA,GAAA,0BAAA,OAAoB,KAAK,SAAS;AAExC,IAAG,YAAY,UAAU,SAAS,IAAI;AACtC,IAAG,YAAY,aAAa,SAASA,0BAAAA,GAAG,YAAY,IAAI,QAAQ,UAAU,CAAC;AAC3E,IAAG,WAAW,IAAI;AAElB,QAAOA,0BAAAA,GAAG,aAAa,IAAI,KAAK,aAAa,UAAU,WAAW"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render_template.d.ts","names":[],"sources":["../../../src/mutator/template/render_template.ts"],"mappings":";;;;AAsBA;;;;;;;;iBAAgB,oBAAA,kBAAA,CACd,EAAA,EAAI,aAAA,EACJ,GAAA,EAAK,MAAA,EACL,SAAA,WACA,MAAA,EAAQ,EAAA,CAAG,QAAA,EACX,WAAA,EAAa,CAAA,KACZ,MAAA,CAAO,CAAA,EAAG,QAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Pl, field } from "@milaboratories/pl-client";
|
|
2
|
-
|
|
3
2
|
//#region src/mutator/template/render_template.ts
|
|
4
3
|
const EphRenderTemplate = {
|
|
5
4
|
name: "EphRenderTemplate",
|
|
@@ -28,7 +27,7 @@ function createRenderTemplate(tx, tpl, ephemeral, inputs, outputNames) {
|
|
|
28
27
|
tx.lockInputs(rId);
|
|
29
28
|
return Pl.futureRecord(tx, rId, outputNames, "Output", "outputs/");
|
|
30
29
|
}
|
|
31
|
-
|
|
32
30
|
//#endregion
|
|
33
31
|
export { createRenderTemplate };
|
|
32
|
+
|
|
34
33
|
//# sourceMappingURL=render_template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render_template.js","names":[],"sources":["../../../src/mutator/template/render_template.ts"],"sourcesContent":["import type { AnyRef, FieldRef, PlTransaction } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport type { ResourceType } from \"@platforma-sdk/model\";\n\nconst EphRenderTemplate: ResourceType = {\n name: \"EphRenderTemplate\",\n version: \"1\",\n};\nconst RenderTemplate: ResourceType = {\n name: \"RenderTemplate\",\n version: \"1\",\n};\n\n/**\n * Creates render template operation, for a given remplate and inputs.\n *\n * @param tx transaction to use during rendering creation\n * @param tpl reference to the template resource (see {@link loadTemplate})\n * @param ephemeral true for ephemeral templates, false for pure templates\n * @param inputs map of inputs pointing to other resources or fields\n * @param outputNames names of the outputs to collect and return from this method\n */\nexport function createRenderTemplate<O extends string>(\n tx: PlTransaction,\n tpl: AnyRef,\n ephemeral: boolean,\n inputs: Pl.PlRecord,\n outputNames: O[],\n): Record<O, FieldRef> {\n if (outputNames.length === 0) throw new Error(\"Zero output names provided\");\n const rId = ephemeral ? tx.createEphemeral(EphRenderTemplate) : tx.createStruct(RenderTemplate);\n\n const tplField = field(rId, \"template\");\n const inputsField = field(rId, \"inputs\");\n\n tx.createField(tplField, \"Input\", tpl);\n tx.createField(inputsField, \"Input\", Pl.createPlMap(tx, inputs, ephemeral));\n tx.lockInputs(rId);\n\n return Pl.futureRecord(tx, rId, outputNames, \"Output\", \"outputs/\");\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"render_template.js","names":[],"sources":["../../../src/mutator/template/render_template.ts"],"sourcesContent":["import type { AnyRef, FieldRef, PlTransaction } from \"@milaboratories/pl-client\";\nimport { field, Pl } from \"@milaboratories/pl-client\";\nimport type { ResourceType } from \"@platforma-sdk/model\";\n\nconst EphRenderTemplate: ResourceType = {\n name: \"EphRenderTemplate\",\n version: \"1\",\n};\nconst RenderTemplate: ResourceType = {\n name: \"RenderTemplate\",\n version: \"1\",\n};\n\n/**\n * Creates render template operation, for a given remplate and inputs.\n *\n * @param tx transaction to use during rendering creation\n * @param tpl reference to the template resource (see {@link loadTemplate})\n * @param ephemeral true for ephemeral templates, false for pure templates\n * @param inputs map of inputs pointing to other resources or fields\n * @param outputNames names of the outputs to collect and return from this method\n */\nexport function createRenderTemplate<O extends string>(\n tx: PlTransaction,\n tpl: AnyRef,\n ephemeral: boolean,\n inputs: Pl.PlRecord,\n outputNames: O[],\n): Record<O, FieldRef> {\n if (outputNames.length === 0) throw new Error(\"Zero output names provided\");\n const rId = ephemeral ? tx.createEphemeral(EphRenderTemplate) : tx.createStruct(RenderTemplate);\n\n const tplField = field(rId, \"template\");\n const inputsField = field(rId, \"inputs\");\n\n tx.createField(tplField, \"Input\", tpl);\n tx.createField(inputsField, \"Input\", Pl.createPlMap(tx, inputs, ephemeral));\n tx.lockInputs(rId);\n\n return Pl.futureRecord(tx, rId, outputNames, \"Output\", \"outputs/\");\n}\n"],"mappings":";;AAIA,MAAM,oBAAkC;CACtC,MAAM;CACN,SAAS;CACV;AACD,MAAM,iBAA+B;CACnC,MAAM;CACN,SAAS;CACV;;;;;;;;;;AAWD,SAAgB,qBACd,IACA,KACA,WACA,QACA,aACqB;AACrB,KAAI,YAAY,WAAW,EAAG,OAAM,IAAI,MAAM,6BAA6B;CAC3E,MAAM,MAAM,YAAY,GAAG,gBAAgB,kBAAkB,GAAG,GAAG,aAAa,eAAe;CAE/F,MAAM,WAAW,MAAM,KAAK,WAAW;CACvC,MAAM,cAAc,MAAM,KAAK,SAAS;AAExC,IAAG,YAAY,UAAU,SAAS,IAAI;AACtC,IAAG,YAAY,aAAa,SAAS,GAAG,YAAY,IAAI,QAAQ,UAAU,CAAC;AAC3E,IAAG,WAAW,IAAI;AAElB,QAAO,GAAG,aAAa,IAAI,KAAK,aAAa,UAAU,WAAW"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
const require_index = require(
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_index = require("../../debug/index.cjs");
|
|
3
3
|
let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
|
|
4
4
|
let _milaboratories_pl_client = require("@milaboratories/pl-client");
|
|
5
5
|
let node_crypto = require("node:crypto");
|
|
6
6
|
let _milaboratories_pl_model_backend = require("@milaboratories/pl-model-backend");
|
|
7
|
-
|
|
8
7
|
//#region src/mutator/template/template_cache.ts
|
|
9
8
|
const TemplateCacheType = (0, _milaboratories_pl_client.resourceType)("TemplateCache", "1");
|
|
10
9
|
const TemplateCacheFieldName = "__templateCache";
|
|
@@ -309,7 +308,7 @@ async function runGc(pl, cacheRid, maxEntries = GC_MAX_ENTRIES) {
|
|
|
309
308
|
const kvs = await tx.listKeyValuesString(cacheRid);
|
|
310
309
|
const entries = [];
|
|
311
310
|
for (const { key, value } of kvs) {
|
|
312
|
-
if (!key.startsWith(
|
|
311
|
+
if (!key.startsWith("access_")) continue;
|
|
313
312
|
entries.push({
|
|
314
313
|
hash: key.slice(7),
|
|
315
314
|
timestamp: parseInt(value, 10)
|
|
@@ -444,10 +443,7 @@ async function loadTemplateCached(pl, spec, options) {
|
|
|
444
443
|
break;
|
|
445
444
|
case "cached": return spec.resourceId;
|
|
446
445
|
case "from-registry": throw new Error("loadTemplateCached does not support from-registry specs; use loadTemplate instead");
|
|
447
|
-
default: {
|
|
448
|
-
const _ = spec;
|
|
449
|
-
throw new Error(`unexpected spec type: ${_.type}`);
|
|
450
|
-
}
|
|
446
|
+
default: throw new Error(`unexpected spec type: ${spec.type}`);
|
|
451
447
|
}
|
|
452
448
|
stat.templateFormat = tplData.type;
|
|
453
449
|
const tFlatten = performance.now();
|
|
@@ -465,7 +461,7 @@ async function loadTemplateCached(pl, spec, options) {
|
|
|
465
461
|
const result = await materialize(pl, cacheRid, rootHash, nodes, stat);
|
|
466
462
|
stat.materializeMs = performance.now() - tMat;
|
|
467
463
|
stat.retries = attempt;
|
|
468
|
-
if (result.accessCount >=
|
|
464
|
+
if (result.accessCount >= 30) {
|
|
469
465
|
await runGc(pl, cacheRid);
|
|
470
466
|
stat.gcTriggered = true;
|
|
471
467
|
}
|
|
@@ -497,7 +493,6 @@ async function cacheBlockPackTemplate(pl, spec, options) {
|
|
|
497
493
|
}
|
|
498
494
|
};
|
|
499
495
|
}
|
|
500
|
-
|
|
501
496
|
//#endregion
|
|
502
497
|
exports.ACCESS_COUNT_KEY = ACCESS_COUNT_KEY;
|
|
503
498
|
exports.ACCESS_KEY_PREFIX = ACCESS_KEY_PREFIX;
|
|
@@ -512,4 +507,5 @@ exports.getOrCreateTemplateCache = getOrCreateTemplateCache;
|
|
|
512
507
|
exports.invalidateTemplateCacheId = invalidateTemplateCacheId;
|
|
513
508
|
exports.loadTemplateCached = loadTemplateCached;
|
|
514
509
|
exports.runGc = runGc;
|
|
510
|
+
|
|
515
511
|
//# sourceMappingURL=template_cache.cjs.map
|