@milaboratories/pl-middle-layer 1.64.37 → 1.64.38
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.123.0/helpers → _@oxc-project_runtime@0.137.0/helpers/esm}/usingCtx.cjs +2 -2
- package/dist/_virtual/{_@oxc-project_runtime@0.123.0/helpers → _@oxc-project_runtime@0.137.0/helpers/esm}/usingCtx.js +2 -2
- package/dist/block_registry/index.cjs +11 -3
- package/dist/block_registry/index.d.ts +3 -2
- package/dist/block_registry/index.js +4 -3
- package/dist/block_registry/registry-v2-provider.cjs +1 -1
- package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
- package/dist/block_registry/registry-v2-provider.d.ts.map +1 -1
- package/dist/block_registry/registry-v2-provider.js +1 -0
- package/dist/block_registry/registry-v2-provider.js.map +1 -1
- package/dist/block_registry/registry.cjs +20 -3
- package/dist/block_registry/registry.cjs.map +1 -1
- package/dist/block_registry/registry.d.ts +7 -1
- package/dist/block_registry/registry.d.ts.map +1 -1
- package/dist/block_registry/registry.js +17 -1
- package/dist/block_registry/registry.js.map +1 -1
- package/dist/block_registry/watcher.cjs +21 -2
- package/dist/block_registry/watcher.cjs.map +1 -1
- package/dist/block_registry/watcher.d.ts +1 -1
- package/dist/block_registry/watcher.d.ts.map +1 -1
- package/dist/block_registry/watcher.js +21 -3
- package/dist/block_registry/watcher.js.map +1 -1
- package/dist/block_registry/well_known_registries.cjs.map +1 -1
- package/dist/block_registry/well_known_registries.d.ts.map +1 -1
- package/dist/block_registry/well_known_registries.js.map +1 -1
- package/dist/cfg_render/executor.cjs +2 -2
- package/dist/cfg_render/executor.cjs.map +1 -1
- package/dist/cfg_render/executor.js.map +1 -1
- package/dist/cfg_render/renderer.cjs +0 -1
- package/dist/cfg_render/renderer.cjs.map +1 -1
- package/dist/cfg_render/renderer.js.map +1 -1
- package/dist/cfg_render/traverse.cjs +0 -1
- package/dist/cfg_render/traverse.cjs.map +1 -1
- package/dist/cfg_render/traverse.js.map +1 -1
- package/dist/cfg_render/util.cjs.map +1 -1
- package/dist/cfg_render/util.js.map +1 -1
- package/dist/debug/index.cjs +1 -0
- 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 +9 -1
- package/dist/dev_env/index.cjs.map +1 -1
- package/dist/dev_env/index.js +1 -1
- 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.js.map +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/js_render/computable_context.cjs +8 -5
- package/dist/js_render/computable_context.cjs.map +1 -1
- package/dist/js_render/computable_context.js +5 -1
- package/dist/js_render/computable_context.js.map +1 -1
- package/dist/js_render/context.cjs +4 -1
- package/dist/js_render/context.cjs.map +1 -1
- package/dist/js_render/context.js +4 -1
- package/dist/js_render/context.js.map +1 -1
- package/dist/js_render/index.cjs +0 -1
- package/dist/js_render/index.cjs.map +1 -1
- package/dist/js_render/index.js.map +1 -1
- package/dist/js_render/service_injectors.cjs +2 -3
- package/dist/js_render/service_injectors.cjs.map +1 -1
- package/dist/js_render/service_injectors.js +1 -1
- package/dist/js_render/service_injectors.js.map +1 -1
- package/dist/middle_layer/active_cfg.cjs +0 -1
- package/dist/middle_layer/active_cfg.cjs.map +1 -1
- package/dist/middle_layer/active_cfg.js.map +1 -1
- package/dist/middle_layer/block.cjs +0 -1
- package/dist/middle_layer/block.cjs.map +1 -1
- package/dist/middle_layer/block.js.map +1 -1
- package/dist/middle_layer/block_ctx.cjs +0 -1
- package/dist/middle_layer/block_ctx.cjs.map +1 -1
- package/dist/middle_layer/block_ctx.js.map +1 -1
- package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
- package/dist/middle_layer/block_ctx_unsafe.js.map +1 -1
- package/dist/middle_layer/driver_kit.cjs +0 -1
- package/dist/middle_layer/driver_kit.cjs.map +1 -1
- package/dist/middle_layer/driver_kit.js.map +1 -1
- package/dist/middle_layer/frontend_path.cjs +5 -1
- package/dist/middle_layer/frontend_path.cjs.map +1 -1
- package/dist/middle_layer/frontend_path.js +6 -1
- package/dist/middle_layer/frontend_path.js.map +1 -1
- package/dist/middle_layer/index.cjs +13 -5
- package/dist/middle_layer/index.d.ts +2 -1
- package/dist/middle_layer/index.js +6 -5
- package/dist/middle_layer/middle_layer.cjs +7 -1
- package/dist/middle_layer/middle_layer.cjs.map +1 -1
- package/dist/middle_layer/middle_layer.d.ts.map +1 -1
- package/dist/middle_layer/middle_layer.js +7 -0
- package/dist/middle_layer/middle_layer.js.map +1 -1
- package/dist/middle_layer/navigation_states.cjs +0 -1
- package/dist/middle_layer/navigation_states.cjs.map +1 -1
- package/dist/middle_layer/navigation_states.js.map +1 -1
- package/dist/middle_layer/ops.cjs +1 -1
- package/dist/middle_layer/ops.cjs.map +1 -1
- package/dist/middle_layer/ops.d.ts.map +1 -1
- package/dist/middle_layer/ops.js.map +1 -1
- package/dist/middle_layer/project.cjs +9 -2
- package/dist/middle_layer/project.cjs.map +1 -1
- package/dist/middle_layer/project.d.ts.map +1 -1
- package/dist/middle_layer/project.js +5 -1
- package/dist/middle_layer/project.js.map +1 -1
- package/dist/middle_layer/project_list.cjs +2 -1
- package/dist/middle_layer/project_list.cjs.map +1 -1
- package/dist/middle_layer/project_list.js +1 -1
- package/dist/middle_layer/project_list.js.map +1 -1
- package/dist/middle_layer/project_overview.cjs +0 -1
- package/dist/middle_layer/project_overview.cjs.map +1 -1
- package/dist/middle_layer/project_overview.js.map +1 -1
- package/dist/middle_layer/project_overview_light.cjs +0 -1
- package/dist/middle_layer/project_overview_light.cjs.map +1 -1
- package/dist/middle_layer/project_overview_light.js.map +1 -1
- package/dist/middle_layer/render.cjs +0 -1
- package/dist/middle_layer/render.cjs.map +1 -1
- package/dist/middle_layer/render.js.map +1 -1
- package/dist/middle_layer/types.d.ts.map +1 -1
- package/dist/middle_layer/util.cjs +0 -1
- package/dist/middle_layer/util.cjs.map +1 -1
- package/dist/middle_layer/util.js.map +1 -1
- package/dist/model/args.cjs +1 -1
- package/dist/model/args.cjs.map +1 -1
- package/dist/model/args.js +1 -1
- package/dist/model/args.js.map +1 -1
- package/dist/model/block_pack_spec.cjs +5 -0
- package/dist/model/block_pack_spec.cjs.map +1 -1
- package/dist/model/block_pack_spec.d.ts +19 -2
- package/dist/model/block_pack_spec.d.ts.map +1 -1
- package/dist/model/block_pack_spec.js +5 -1
- package/dist/model/block_pack_spec.js.map +1 -1
- package/dist/model/frontend.d.ts.map +1 -1
- package/dist/model/index.d.ts +2 -1
- package/dist/model/project_helper.cjs +2 -1
- package/dist/model/project_helper.cjs.map +1 -1
- package/dist/model/project_helper.d.ts +1 -1
- package/dist/model/project_helper.d.ts.map +1 -1
- package/dist/model/project_helper.js +2 -0
- package/dist/model/project_helper.js.map +1 -1
- package/dist/model/project_model.cjs +2 -1
- package/dist/model/project_model.cjs.map +1 -1
- package/dist/model/project_model.d.ts.map +1 -1
- package/dist/model/project_model.js +2 -2
- package/dist/model/project_model.js.map +1 -1
- package/dist/model/project_model_util.cjs +4 -3
- package/dist/model/project_model_util.cjs.map +1 -1
- package/dist/model/project_model_util.js +4 -4
- package/dist/model/project_model_util.js.map +1 -1
- package/dist/model/template_spec.d.ts.map +1 -1
- package/dist/mutator/block-pack/block_pack.cjs +41 -4
- package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
- package/dist/mutator/block-pack/block_pack.d.ts.map +1 -1
- package/dist/mutator/block-pack/block_pack.js +40 -4
- package/dist/mutator/block-pack/block_pack.js.map +1 -1
- package/dist/mutator/block-pack/frontend.cjs +5 -1
- package/dist/mutator/block-pack/frontend.cjs.map +1 -1
- package/dist/mutator/block-pack/frontend.js +6 -1
- package/dist/mutator/block-pack/frontend.js.map +1 -1
- package/dist/mutator/block-pack/required_capabilities.cjs +0 -1
- package/dist/mutator/block-pack/required_capabilities.cjs.map +1 -1
- package/dist/mutator/block-pack/required_capabilities.js.map +1 -1
- package/dist/mutator/context_export.cjs +0 -1
- package/dist/mutator/context_export.cjs.map +1 -1
- package/dist/mutator/context_export.js.map +1 -1
- package/dist/mutator/migration.cjs +0 -1
- package/dist/mutator/migration.cjs.map +1 -1
- package/dist/mutator/migration.js.map +1 -1
- package/dist/mutator/project.cjs +22 -4
- package/dist/mutator/project.cjs.map +1 -1
- package/dist/mutator/project.js +21 -4
- package/dist/mutator/project.js.map +1 -1
- package/dist/mutator/template/direct_template_loader.cjs +0 -1
- package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
- package/dist/mutator/template/direct_template_loader.js.map +1 -1
- package/dist/mutator/template/direct_template_loader_v3.cjs +0 -1
- package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
- package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
- package/dist/mutator/template/render_block.cjs +4 -1
- package/dist/mutator/template/render_block.cjs.map +1 -1
- package/dist/mutator/template/render_block.js +1 -1
- package/dist/mutator/template/render_block.js.map +1 -1
- package/dist/mutator/template/render_template.cjs +0 -1
- package/dist/mutator/template/render_template.cjs.map +1 -1
- package/dist/mutator/template/render_template.d.ts.map +1 -1
- package/dist/mutator/template/render_template.js.map +1 -1
- package/dist/mutator/template/template_cache.cjs +6 -3
- package/dist/mutator/template/template_cache.cjs.map +1 -1
- package/dist/mutator/template/template_cache.d.ts +1 -2
- package/dist/mutator/template/template_cache.d.ts.map +1 -1
- package/dist/mutator/template/template_cache.js +6 -2
- package/dist/mutator/template/template_cache.js.map +1 -1
- package/dist/mutator/template/template_loading.cjs +1 -1
- package/dist/mutator/template/template_loading.cjs.map +1 -1
- package/dist/mutator/template/template_loading.d.ts.map +1 -1
- package/dist/mutator/template/template_loading.js.map +1 -1
- package/dist/network_check/network_check.cjs +0 -1
- package/dist/network_check/network_check.cjs.map +1 -1
- package/dist/network_check/network_check.d.ts.map +1 -1
- package/dist/network_check/network_check.js.map +1 -1
- package/dist/network_check/pings.cjs +3 -1
- package/dist/network_check/pings.cjs.map +1 -1
- package/dist/network_check/pings.js +1 -1
- package/dist/network_check/pings.js.map +1 -1
- package/dist/network_check/template.cjs +10 -3
- package/dist/network_check/template.cjs.map +1 -1
- package/dist/network_check/template.js +1 -1
- package/dist/network_check/template.js.map +1 -1
- package/dist/pool/data.cjs +12 -1
- package/dist/pool/data.cjs.map +1 -1
- package/dist/pool/data.d.ts.map +1 -1
- package/dist/pool/data.js +3 -1
- package/dist/pool/data.js.map +1 -1
- package/dist/pool/driver.cjs +8 -1
- package/dist/pool/driver.cjs.map +1 -1
- package/dist/pool/driver.d.ts.map +1 -1
- package/dist/pool/driver.js +7 -0
- package/dist/pool/driver.js.map +1 -1
- package/dist/pool/index.cjs +5 -2
- package/dist/pool/index.d.ts +2 -1
- package/dist/pool/index.js +3 -2
- package/dist/pool/p_object_collection.cjs +1 -1
- package/dist/pool/p_object_collection.cjs.map +1 -1
- package/dist/pool/p_object_collection.js.map +1 -1
- package/dist/pool/result_pool.cjs +2 -1
- package/dist/pool/result_pool.cjs.map +1 -1
- package/dist/pool/result_pool.js +2 -0
- package/dist/pool/result_pool.js.map +1 -1
- package/dist/service_factories.cjs +0 -1
- package/dist/service_factories.cjs.map +1 -1
- package/dist/service_factories.js.map +1 -1
- package/dist/worker/WorkerManager.cjs +3 -2
- package/dist/worker/WorkerManager.cjs.map +1 -1
- package/dist/worker/WorkerManager.js +2 -1
- package/dist/worker/WorkerManager.js.map +1 -1
- package/dist/worker/worker.cjs +0 -1
- package/dist/worker/worker.cjs.map +1 -1
- package/dist/worker/worker.js.map +1 -1
- package/dist/worker/workerApi.cjs +0 -1
- package/dist/worker/workerApi.cjs.map +1 -1
- package/dist/worker/workerApi.js.map +1 -1
- package/package.json +13 -13
- package/src/block_registry/registry.ts +19 -0
- package/src/block_registry/watcher.ts +25 -2
- package/src/middle_layer/frontend_path.ts +22 -2
- package/src/model/block_pack_spec.ts +24 -1
- package/src/mutator/block-pack/block_pack.ts +61 -2
- package/src/mutator/block-pack/frontend.ts +20 -2
- package/src/mutator/template/template_cache.ts +10 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project_list.js","names":[],"sources":["../../src/middle_layer/project_list.ts"],"sourcesContent":["import type { PruningFunction } from \"@milaboratories/pl-tree\";\nimport { SynchronizedTreeState } from \"@milaboratories/pl-tree\";\nimport type { Filter, PlClient, ResourceType, SignedResourceId } from \"@milaboratories/pl-client\";\nimport { resourceIdToString, resourceTypesEqual, treeFilter } from \"@milaboratories/pl-client\";\nimport type { TreeAndComputableU } from \"./types\";\nimport type { WatchableValue } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectId, ProjectListEntry } from \"../model/project_model\";\nimport {\n ProjectCreatedTimestamp,\n ProjectLastModifiedTimestamp,\n ProjectMetaKey,\n} from \"../model/project_model\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { ProjectMeta } from \"@milaboratories/pl-model-middle-layer\";\n\nexport const ProjectsField = \"projects\";\nexport const ProjectsResourceType: ResourceType = { name: \"Projects\", version: \"1\" };\n\nexport const ProjectsListTreePruningFunction: PruningFunction = (resource) => {\n if (!resourceTypesEqual(resource.type, ProjectsResourceType)) return [];\n return resource.fields;\n};\n\nexport const projectsListFieldFilter: Filter = treeFilter.resourceTypeEq(\"Projects\");\n\nexport async function createProjectList(\n pl: PlClient,\n rid: SignedResourceId,\n openedProjects: WatchableValue<ProjectId[]>,\n env: MiddleLayerEnvironment,\n): Promise<TreeAndComputableU<ProjectListEntry[]>> {\n const tree = await SynchronizedTreeState.init(\n pl,\n rid,\n {\n ...env.ops.defaultTreeOptions,\n pruning: ProjectsListTreePruningFunction,\n fieldFilter: projectsListFieldFilter,\n },\n env.logger,\n );\n\n const c = Computable.make((ctx) => {\n const node = ctx.accessor(tree.entry()).node();\n const oProjects = openedProjects.getValue(ctx);\n if (node === undefined) return undefined;\n const result: ProjectListEntry[] = [];\n\n // Projects list resource keeps projects assigned to fields. Each field name is project's UUID\n for (const field of node.listDynamicFields()) {\n const prj = node.traverse(field);\n if (prj === undefined) continue;\n const meta = notEmpty(prj.getKeyValueAsJson<ProjectMeta>(ProjectMetaKey));\n const created = notEmpty(prj.getKeyValueAsJson<number>(ProjectCreatedTimestamp));\n const lastModified = notEmpty(prj.getKeyValueAsJson<number>(ProjectLastModifiedTimestamp));\n const projectId = resourceIdToString(prj.id) as ProjectId;\n result.push({\n id: projectId,\n created: new Date(created),\n lastModified: new Date(lastModified),\n opened: oProjects.indexOf(projectId) >= 0,\n meta,\n });\n }\n result.sort((p) => -p.lastModified.valueOf());\n return result;\n }).withStableType();\n\n return { computable: c, tree };\n}\n"],"mappings":";;;;;;AAiBA,MAAa,gBAAgB;AAC7B,MAAa,uBAAqC;CAAE,MAAM;CAAY,SAAS;
|
|
1
|
+
{"version":3,"file":"project_list.js","names":[],"sources":["../../src/middle_layer/project_list.ts"],"sourcesContent":["import type { PruningFunction } from \"@milaboratories/pl-tree\";\nimport { SynchronizedTreeState } from \"@milaboratories/pl-tree\";\nimport type { Filter, PlClient, ResourceType, SignedResourceId } from \"@milaboratories/pl-client\";\nimport { resourceIdToString, resourceTypesEqual, treeFilter } from \"@milaboratories/pl-client\";\nimport type { TreeAndComputableU } from \"./types\";\nimport type { WatchableValue } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectId, ProjectListEntry } from \"../model/project_model\";\nimport {\n ProjectCreatedTimestamp,\n ProjectLastModifiedTimestamp,\n ProjectMetaKey,\n} from \"../model/project_model\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { ProjectMeta } from \"@milaboratories/pl-model-middle-layer\";\n\nexport const ProjectsField = \"projects\";\nexport const ProjectsResourceType: ResourceType = { name: \"Projects\", version: \"1\" };\n\nexport const ProjectsListTreePruningFunction: PruningFunction = (resource) => {\n if (!resourceTypesEqual(resource.type, ProjectsResourceType)) return [];\n return resource.fields;\n};\n\nexport const projectsListFieldFilter: Filter = treeFilter.resourceTypeEq(\"Projects\");\n\nexport async function createProjectList(\n pl: PlClient,\n rid: SignedResourceId,\n openedProjects: WatchableValue<ProjectId[]>,\n env: MiddleLayerEnvironment,\n): Promise<TreeAndComputableU<ProjectListEntry[]>> {\n const tree = await SynchronizedTreeState.init(\n pl,\n rid,\n {\n ...env.ops.defaultTreeOptions,\n pruning: ProjectsListTreePruningFunction,\n fieldFilter: projectsListFieldFilter,\n },\n env.logger,\n );\n\n const c = Computable.make((ctx) => {\n const node = ctx.accessor(tree.entry()).node();\n const oProjects = openedProjects.getValue(ctx);\n if (node === undefined) return undefined;\n const result: ProjectListEntry[] = [];\n\n // Projects list resource keeps projects assigned to fields. Each field name is project's UUID\n for (const field of node.listDynamicFields()) {\n const prj = node.traverse(field);\n if (prj === undefined) continue;\n const meta = notEmpty(prj.getKeyValueAsJson<ProjectMeta>(ProjectMetaKey));\n const created = notEmpty(prj.getKeyValueAsJson<number>(ProjectCreatedTimestamp));\n const lastModified = notEmpty(prj.getKeyValueAsJson<number>(ProjectLastModifiedTimestamp));\n const projectId = resourceIdToString(prj.id) as ProjectId;\n result.push({\n id: projectId,\n created: new Date(created),\n lastModified: new Date(lastModified),\n opened: oProjects.indexOf(projectId) >= 0,\n meta,\n });\n }\n result.sort((p) => -p.lastModified.valueOf());\n return result;\n }).withStableType();\n\n return { computable: c, tree };\n}\n"],"mappings":";;;;;;AAiBA,MAAa,gBAAgB;AAC7B,MAAa,uBAAqC;CAAE,MAAM;CAAY,SAAS;AAAI;AAEnF,MAAa,mCAAoD,aAAa;CAC5E,IAAI,CAAC,mBAAmB,SAAS,MAAM,oBAAoB,GAAG,OAAO,CAAC;CACtE,OAAO,SAAS;AAClB;AAEA,MAAa,0BAAkC,WAAW,eAAe,UAAU;AAEnF,eAAsB,kBACpB,IACA,KACA,gBACA,KACiD;CACjD,MAAM,OAAO,MAAM,sBAAsB,KACvC,IACA,KACA;EACE,GAAG,IAAI,IAAI;EACX,SAAS;EACT,aAAa;CACf,GACA,IAAI,MACN;CA4BA,OAAO;EAAE,YA1BC,WAAW,MAAM,QAAQ;GACjC,MAAM,OAAO,IAAI,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK;GAC7C,MAAM,YAAY,eAAe,SAAS,GAAG;GAC7C,IAAI,SAAS,KAAA,GAAW,OAAO,KAAA;GAC/B,MAAM,SAA6B,CAAC;GAGpC,KAAK,MAAM,SAAS,KAAK,kBAAkB,GAAG;IAC5C,MAAM,MAAM,KAAK,SAAS,KAAK;IAC/B,IAAI,QAAQ,KAAA,GAAW;IACvB,MAAM,OAAO,SAAS,IAAI,kBAA+B,cAAc,CAAC;IACxE,MAAM,UAAU,SAAS,IAAI,kBAA0B,uBAAuB,CAAC;IAC/E,MAAM,eAAe,SAAS,IAAI,kBAA0B,4BAA4B,CAAC;IACzF,MAAM,YAAY,mBAAmB,IAAI,EAAE;IAC3C,OAAO,KAAK;KACV,IAAI;KACJ,SAAS,IAAI,KAAK,OAAO;KACzB,cAAc,IAAI,KAAK,YAAY;KACnC,QAAQ,UAAU,QAAQ,SAAS,KAAK;KACxC;IACF,CAAC;GACH;GACA,OAAO,MAAM,MAAM,CAAC,EAAE,aAAa,QAAQ,CAAC;GAC5C,OAAO;EACT,CAAC,CAAC,CAAC,eAEkB;EAAG;CAAK;AAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project_overview.cjs","names":["Computable","ProjectCreatedTimestamp","ProjectLastModifiedTimestamp","ProjectMetaKey","ProjectStructureKey","BlockRenderingStateKey","allBlocks","projectFieldName","productionGraph","getBlockPackInfo","ifNotUndef","constructBlockContext","constructBlockContextArgsOnly","computableFromCfgOrRF","BLOCK_STORAGE_FACADE_VERSION","ProjectStructureAuthorKey","getDebugFlags"],"sources":["../../src/middle_layer/project_overview.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { ComputableStableDefined } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectRenderingState, ProjectStructure } from \"../model/project_model\";\nimport {\n BlockRenderingStateKey,\n ProjectCreatedTimestamp,\n projectFieldName,\n ProjectLastModifiedTimestamp,\n ProjectMetaKey,\n ProjectStructureAuthorKey,\n ProjectStructureKey,\n} from \"../model/project_model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { allBlocks, productionGraph } from \"../model/project_model_util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport type {\n AuthorMarker,\n BlockCalculationStatus,\n BlockSettings,\n ProjectMeta,\n ProjectOverview,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport { type BlockSection, BLOCK_STORAGE_FACADE_VERSION } from \"@platforma-sdk/model\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport type { NavigationStates } from \"./navigation_states\";\nimport { getBlockPackInfo } from \"./util\";\nimport { resourceIdToString, type SignedResourceId } from \"@milaboratories/pl-client\";\nimport { omitBy, isEqual } from \"es-toolkit\";\nimport { getDebugFlags } from \"../debug\";\n\ntype BlockInfo = {\n argsRid?: SignedResourceId;\n currentArguments: unknown;\n prod?: ProdState;\n};\n\ntype ProdState = {\n finished: boolean;\n\n outputError: boolean;\n\n outputsError?: string;\n\n exportsError?: string;\n\n stale: boolean;\n\n /** Arguments current production was rendered with. */\n arguments: Record<string, unknown>;\n};\n\nfunction argsEquals(\n a: Record<string, unknown> | undefined,\n b: Record<string, unknown> | undefined,\n): boolean {\n if (a === b) return true;\n if (a === undefined || b === undefined) return false;\n const cleanA = omitBy(a, (_, key) => key.startsWith(\"__\"));\n const cleanB = omitBy(b, (_, key) => key.startsWith(\"__\"));\n return isEqual(cleanA, cleanB);\n}\n\n/** Returns derived general project state form the project resource */\nexport function projectOverview(\n prjEntry: PlTreeEntry,\n navigationStates: NavigationStates,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<ProjectOverview> {\n return Computable.make(\n (ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const created = notEmpty(prj.getKeyValueAsJson<number>(ProjectCreatedTimestamp));\n const lastModified = notEmpty(prj.getKeyValueAsJson<number>(ProjectLastModifiedTimestamp));\n\n const meta = notEmpty(prj.getKeyValueAsJson<ProjectMeta>(ProjectMetaKey));\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const renderingState = notEmpty(\n prj.getKeyValueAsJson<ProjectRenderingState>(BlockRenderingStateKey),\n );\n\n const infos = new Map<string, BlockInfo>();\n for (const { id } of allBlocks(structure)) {\n const cInputs = prj.traverse({\n field: projectFieldName(id, \"currentArgs\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n const currentArguments = cInputs?.getDataAsJson<Record<string, unknown>>();\n\n let prod: ProdState | undefined = undefined;\n\n const rInputs = prj.traverse({\n field: projectFieldName(id, \"prodArgs\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n if (rInputs !== undefined) {\n const prodArgs = rInputs.getDataAsJson() as Record<string, unknown>;\n const result = prj.getField({\n field: projectFieldName(id, \"prodOutput\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotFound: true,\n });\n const ctx = prj.getField({\n field: projectFieldName(id, \"prodUiCtx\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotFound: true,\n });\n prod = {\n arguments: prodArgs,\n stale: !argsEquals(currentArguments, prodArgs),\n outputError:\n result.error !== undefined ||\n ctx.error !== undefined ||\n result.value?.getError() !== undefined ||\n ctx.value?.getError() !== undefined,\n outputsError:\n result.error?.getDataAsString() ?? result.value?.getError()?.getDataAsString(),\n exportsError: ctx.error?.getDataAsString() ?? ctx.value?.getError()?.getDataAsString(),\n finished:\n ((result.value !== undefined && result.value.getIsReadyOrError()) ||\n (result.error !== undefined && result.error.getIsReadyOrError())) &&\n ((ctx.value !== undefined && ctx.value.getIsReadyOrError()) ||\n (ctx.error !== undefined && ctx.error.getIsReadyOrError())),\n };\n }\n\n infos.set(id, { currentArguments, prod, argsRid: cInputs?.resourceInfo.id });\n }\n\n const currentGraph = productionGraph(structure, (id) => {\n const bpInfo = getBlockPackInfo(prj, id)!;\n const bInfo = infos.get(id)!;\n const args = bInfo.currentArguments;\n return {\n args,\n enrichmentTargets: bInfo.argsRid\n ? env.projectHelper.getEnrichmentTargets(\n () => bpInfo.cfg,\n () => args,\n { argsRid: bInfo.argsRid, blockPackRid: bpInfo.bpResourceId },\n )\n : undefined,\n };\n });\n\n const limbo = new Set(renderingState.blocksInLimbo);\n\n const blocks = [...allBlocks(structure)].map(({ id, label: defaultLabel, renderingMode }) => {\n const info = notEmpty(infos.get(id));\n const gNode = notEmpty(currentGraph.nodes.get(id));\n let calculationStatus: BlockCalculationStatus = \"NotCalculated\";\n if (info.prod !== undefined) {\n if (limbo.has(id)) calculationStatus = \"Limbo\";\n else calculationStatus = info.prod.finished ? \"Done\" : \"Running\";\n }\n\n const bp = getBlockPackInfo(prj, id);\n\n const {\n sections,\n title,\n subtitle,\n tags,\n inputsValid,\n sdkVersion,\n featureFlags,\n isIncompatibleWithRuntime,\n } =\n ifNotUndef(bp, ({ bpId, cfg }) => {\n if (!env.runtimeCapabilities.checkCompatibility(cfg.featureFlags)) {\n return {\n isIncompatibleWithRuntime: true,\n featureFlags: cfg.featureFlags,\n };\n }\n const blockCtx = constructBlockContext(prjEntry, id);\n const blockCtxArgsOnly = constructBlockContextArgsOnly(prjEntry, id);\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(cfg));\n if (codeWithInfoOrError.error) {\n return {\n title: codeWithInfoOrError.error.message,\n isIncompatibleWithRuntime: true,\n featureFlags: cfg.featureFlags,\n };\n }\n const codeWithInfo = codeWithInfoOrError.value;\n return {\n sections: computableFromCfgOrRF(env, blockCtx, cfg.sections, codeWithInfo, bpId).wrap(\n {\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model sections\", { cause }));\n return [];\n },\n },\n ) as ComputableStableDefined<BlockSection[]>,\n title: ifNotUndef(\n cfg.title,\n (title) =>\n computableFromCfgOrRF(env, blockCtxArgsOnly, title, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model title\", { cause }));\n return \"Invalid title\";\n },\n }) as ComputableStableDefined<string>,\n ),\n subtitle: ifNotUndef(\n cfg.subtitle,\n (subtitle) =>\n computableFromCfgOrRF(env, blockCtxArgsOnly, subtitle, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model subtitle\", { cause }));\n return \"Invalid subtitle\";\n },\n }) as ComputableStableDefined<string>,\n ),\n tags: ifNotUndef(\n cfg.tags,\n (tags) =>\n computableFromCfgOrRF(env, blockCtx, tags, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model tags\", { cause }));\n return [];\n },\n }) as ComputableStableDefined<string[]>,\n ),\n // inputsValid: for modelAPIVersion 2, it's true if currentArgs exists (args derivation succeeded)\n // For older blocks, use the inputsValid callback from config\n inputsValid:\n cfg.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION\n ? info.currentArguments !== undefined\n : cfg.inputsValid\n ? (computableFromCfgOrRF(\n env,\n blockCtxArgsOnly,\n cfg.inputsValid,\n codeWithInfo,\n bpId,\n ).wrap({\n recover: (cause) => {\n env.logger.error(\n new Error(\"Error in block model inputsValid\", { cause }),\n );\n return false;\n },\n }) as ComputableStableDefined<boolean>)\n : undefined,\n sdkVersion: codeWithInfo?.sdkVersion,\n featureFlags: codeWithInfo?.featureFlags ?? {},\n isIncompatibleWithRuntime: false,\n };\n }) || {};\n\n const settings = prj\n .traverse({\n field: projectFieldName(id, \"blockSettings\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotSet: true,\n })\n .getDataAsJson() as BlockSettings;\n\n // Get block storage debug view by calling VM function (only for Model API v2 blocks)\n const storageDebugView = ifNotUndef(bp, ({ cfg }) => {\n if (cfg.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return undefined;\n }\n const storageNode = prj.traverse({\n field: projectFieldName(id, \"blockStorage\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n const rawStorageJson = storageNode?.getDataAsString();\n return env.projectHelper.getStorageDebugViewInVM(cfg, rawStorageJson);\n });\n\n const updates = ifNotUndef(bp, ({ info }) =>\n env.blockUpdateWatcher.get({ currentSpec: info.source, settings }),\n );\n\n return {\n projectResourceId: resourceIdToString(prjEntry.rid),\n id,\n label: title ?? defaultLabel,\n title: title ?? defaultLabel,\n subtitle,\n tags,\n renderingMode,\n stale: info.prod?.stale !== false || calculationStatus === \"Limbo\",\n missingReference: gNode.missingReferences,\n upstreams: [...currentGraph.traverseIdsExcludingRoots(\"upstream\", id)],\n downstreams: [...currentGraph.traverseIdsExcludingRoots(\"downstream\", id)],\n calculationStatus,\n outputErrors: info.prod?.outputError === true,\n outputsError: info.prod?.outputsError,\n exportsError: info.prod?.exportsError,\n settings,\n sections,\n inputsValid,\n updateInfo: {},\n currentBlockPack: bp?.info?.source,\n updates,\n sdkVersion,\n featureFlags,\n isIncompatibleWithRuntime,\n navigationState: navigationStates.getState(id),\n storageDebugView,\n };\n });\n\n return {\n meta,\n created: new Date(created),\n lastModified: new Date(lastModified),\n authorMarker: prj.getKeyValueAsJson<AuthorMarker>(ProjectStructureAuthorKey),\n blocks,\n };\n },\n {\n postprocessValue: (value) => {\n const cantRun = new Set<string>();\n const staleBlocks = new Set<string>();\n return {\n ...value,\n blocks: value.blocks.map((b) => {\n if (!b.inputsValid) cantRun.add(b.id);\n if (b.stale) staleBlocks.add(b.id);\n const stale = b.stale || b.upstreams.findIndex((u) => staleBlocks.has(u)) !== -1;\n const canRun =\n (stale || b.outputErrors) &&\n Boolean(b.inputsValid) &&\n !b.missingReference &&\n b.upstreams.findIndex((u) => cantRun.has(u)) === -1;\n const bb = {\n ...b,\n canRun,\n stale,\n updateSuggestions: b.updates?.suggestions ?? [],\n updatedBlockPack: b.updates?.mainSuggestion,\n };\n delete bb[\"updates\"];\n return bb;\n }),\n };\n },\n onRecalculation: getDebugFlags().logProjectOverviewStat\n ? (stats) => {\n console.log(`[projectOverview] ${JSON.stringify(stats)}`);\n }\n : undefined,\n },\n ).withStableType();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project_overview.cjs","names":["Computable","ProjectCreatedTimestamp","ProjectLastModifiedTimestamp","ProjectMetaKey","ProjectStructureKey","BlockRenderingStateKey","allBlocks","projectFieldName","productionGraph","getBlockPackInfo","ifNotUndef","constructBlockContext","constructBlockContextArgsOnly","computableFromCfgOrRF","BLOCK_STORAGE_FACADE_VERSION","ProjectStructureAuthorKey","getDebugFlags"],"sources":["../../src/middle_layer/project_overview.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { ComputableStableDefined } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectRenderingState, ProjectStructure } from \"../model/project_model\";\nimport {\n BlockRenderingStateKey,\n ProjectCreatedTimestamp,\n projectFieldName,\n ProjectLastModifiedTimestamp,\n ProjectMetaKey,\n ProjectStructureAuthorKey,\n ProjectStructureKey,\n} from \"../model/project_model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { allBlocks, productionGraph } from \"../model/project_model_util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport type {\n AuthorMarker,\n BlockCalculationStatus,\n BlockSettings,\n ProjectMeta,\n ProjectOverview,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport { type BlockSection, BLOCK_STORAGE_FACADE_VERSION } from \"@platforma-sdk/model\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport type { NavigationStates } from \"./navigation_states\";\nimport { getBlockPackInfo } from \"./util\";\nimport { resourceIdToString, type SignedResourceId } from \"@milaboratories/pl-client\";\nimport { omitBy, isEqual } from \"es-toolkit\";\nimport { getDebugFlags } from \"../debug\";\n\ntype BlockInfo = {\n argsRid?: SignedResourceId;\n currentArguments: unknown;\n prod?: ProdState;\n};\n\ntype ProdState = {\n finished: boolean;\n\n outputError: boolean;\n\n outputsError?: string;\n\n exportsError?: string;\n\n stale: boolean;\n\n /** Arguments current production was rendered with. */\n arguments: Record<string, unknown>;\n};\n\nfunction argsEquals(\n a: Record<string, unknown> | undefined,\n b: Record<string, unknown> | undefined,\n): boolean {\n if (a === b) return true;\n if (a === undefined || b === undefined) return false;\n const cleanA = omitBy(a, (_, key) => key.startsWith(\"__\"));\n const cleanB = omitBy(b, (_, key) => key.startsWith(\"__\"));\n return isEqual(cleanA, cleanB);\n}\n\n/** Returns derived general project state form the project resource */\nexport function projectOverview(\n prjEntry: PlTreeEntry,\n navigationStates: NavigationStates,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<ProjectOverview> {\n return Computable.make(\n (ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const created = notEmpty(prj.getKeyValueAsJson<number>(ProjectCreatedTimestamp));\n const lastModified = notEmpty(prj.getKeyValueAsJson<number>(ProjectLastModifiedTimestamp));\n\n const meta = notEmpty(prj.getKeyValueAsJson<ProjectMeta>(ProjectMetaKey));\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const renderingState = notEmpty(\n prj.getKeyValueAsJson<ProjectRenderingState>(BlockRenderingStateKey),\n );\n\n const infos = new Map<string, BlockInfo>();\n for (const { id } of allBlocks(structure)) {\n const cInputs = prj.traverse({\n field: projectFieldName(id, \"currentArgs\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n const currentArguments = cInputs?.getDataAsJson<Record<string, unknown>>();\n\n let prod: ProdState | undefined = undefined;\n\n const rInputs = prj.traverse({\n field: projectFieldName(id, \"prodArgs\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n if (rInputs !== undefined) {\n const prodArgs = rInputs.getDataAsJson() as Record<string, unknown>;\n const result = prj.getField({\n field: projectFieldName(id, \"prodOutput\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotFound: true,\n });\n const ctx = prj.getField({\n field: projectFieldName(id, \"prodUiCtx\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotFound: true,\n });\n prod = {\n arguments: prodArgs,\n stale: !argsEquals(currentArguments, prodArgs),\n outputError:\n result.error !== undefined ||\n ctx.error !== undefined ||\n result.value?.getError() !== undefined ||\n ctx.value?.getError() !== undefined,\n outputsError:\n result.error?.getDataAsString() ?? result.value?.getError()?.getDataAsString(),\n exportsError: ctx.error?.getDataAsString() ?? ctx.value?.getError()?.getDataAsString(),\n finished:\n ((result.value !== undefined && result.value.getIsReadyOrError()) ||\n (result.error !== undefined && result.error.getIsReadyOrError())) &&\n ((ctx.value !== undefined && ctx.value.getIsReadyOrError()) ||\n (ctx.error !== undefined && ctx.error.getIsReadyOrError())),\n };\n }\n\n infos.set(id, { currentArguments, prod, argsRid: cInputs?.resourceInfo.id });\n }\n\n const currentGraph = productionGraph(structure, (id) => {\n const bpInfo = getBlockPackInfo(prj, id)!;\n const bInfo = infos.get(id)!;\n const args = bInfo.currentArguments;\n return {\n args,\n enrichmentTargets: bInfo.argsRid\n ? env.projectHelper.getEnrichmentTargets(\n () => bpInfo.cfg,\n () => args,\n { argsRid: bInfo.argsRid, blockPackRid: bpInfo.bpResourceId },\n )\n : undefined,\n };\n });\n\n const limbo = new Set(renderingState.blocksInLimbo);\n\n const blocks = [...allBlocks(structure)].map(({ id, label: defaultLabel, renderingMode }) => {\n const info = notEmpty(infos.get(id));\n const gNode = notEmpty(currentGraph.nodes.get(id));\n let calculationStatus: BlockCalculationStatus = \"NotCalculated\";\n if (info.prod !== undefined) {\n if (limbo.has(id)) calculationStatus = \"Limbo\";\n else calculationStatus = info.prod.finished ? \"Done\" : \"Running\";\n }\n\n const bp = getBlockPackInfo(prj, id);\n\n const {\n sections,\n title,\n subtitle,\n tags,\n inputsValid,\n sdkVersion,\n featureFlags,\n isIncompatibleWithRuntime,\n } =\n ifNotUndef(bp, ({ bpId, cfg }) => {\n if (!env.runtimeCapabilities.checkCompatibility(cfg.featureFlags)) {\n return {\n isIncompatibleWithRuntime: true,\n featureFlags: cfg.featureFlags,\n };\n }\n const blockCtx = constructBlockContext(prjEntry, id);\n const blockCtxArgsOnly = constructBlockContextArgsOnly(prjEntry, id);\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(cfg));\n if (codeWithInfoOrError.error) {\n return {\n title: codeWithInfoOrError.error.message,\n isIncompatibleWithRuntime: true,\n featureFlags: cfg.featureFlags,\n };\n }\n const codeWithInfo = codeWithInfoOrError.value;\n return {\n sections: computableFromCfgOrRF(env, blockCtx, cfg.sections, codeWithInfo, bpId).wrap(\n {\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model sections\", { cause }));\n return [];\n },\n },\n ) as ComputableStableDefined<BlockSection[]>,\n title: ifNotUndef(\n cfg.title,\n (title) =>\n computableFromCfgOrRF(env, blockCtxArgsOnly, title, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model title\", { cause }));\n return \"Invalid title\";\n },\n }) as ComputableStableDefined<string>,\n ),\n subtitle: ifNotUndef(\n cfg.subtitle,\n (subtitle) =>\n computableFromCfgOrRF(env, blockCtxArgsOnly, subtitle, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model subtitle\", { cause }));\n return \"Invalid subtitle\";\n },\n }) as ComputableStableDefined<string>,\n ),\n tags: ifNotUndef(\n cfg.tags,\n (tags) =>\n computableFromCfgOrRF(env, blockCtx, tags, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model tags\", { cause }));\n return [];\n },\n }) as ComputableStableDefined<string[]>,\n ),\n // inputsValid: for modelAPIVersion 2, it's true if currentArgs exists (args derivation succeeded)\n // For older blocks, use the inputsValid callback from config\n inputsValid:\n cfg.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION\n ? info.currentArguments !== undefined\n : cfg.inputsValid\n ? (computableFromCfgOrRF(\n env,\n blockCtxArgsOnly,\n cfg.inputsValid,\n codeWithInfo,\n bpId,\n ).wrap({\n recover: (cause) => {\n env.logger.error(\n new Error(\"Error in block model inputsValid\", { cause }),\n );\n return false;\n },\n }) as ComputableStableDefined<boolean>)\n : undefined,\n sdkVersion: codeWithInfo?.sdkVersion,\n featureFlags: codeWithInfo?.featureFlags ?? {},\n isIncompatibleWithRuntime: false,\n };\n }) || {};\n\n const settings = prj\n .traverse({\n field: projectFieldName(id, \"blockSettings\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotSet: true,\n })\n .getDataAsJson() as BlockSettings;\n\n // Get block storage debug view by calling VM function (only for Model API v2 blocks)\n const storageDebugView = ifNotUndef(bp, ({ cfg }) => {\n if (cfg.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return undefined;\n }\n const storageNode = prj.traverse({\n field: projectFieldName(id, \"blockStorage\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n const rawStorageJson = storageNode?.getDataAsString();\n return env.projectHelper.getStorageDebugViewInVM(cfg, rawStorageJson);\n });\n\n const updates = ifNotUndef(bp, ({ info }) =>\n env.blockUpdateWatcher.get({ currentSpec: info.source, settings }),\n );\n\n return {\n projectResourceId: resourceIdToString(prjEntry.rid),\n id,\n label: title ?? defaultLabel,\n title: title ?? defaultLabel,\n subtitle,\n tags,\n renderingMode,\n stale: info.prod?.stale !== false || calculationStatus === \"Limbo\",\n missingReference: gNode.missingReferences,\n upstreams: [...currentGraph.traverseIdsExcludingRoots(\"upstream\", id)],\n downstreams: [...currentGraph.traverseIdsExcludingRoots(\"downstream\", id)],\n calculationStatus,\n outputErrors: info.prod?.outputError === true,\n outputsError: info.prod?.outputsError,\n exportsError: info.prod?.exportsError,\n settings,\n sections,\n inputsValid,\n updateInfo: {},\n currentBlockPack: bp?.info?.source,\n updates,\n sdkVersion,\n featureFlags,\n isIncompatibleWithRuntime,\n navigationState: navigationStates.getState(id),\n storageDebugView,\n };\n });\n\n return {\n meta,\n created: new Date(created),\n lastModified: new Date(lastModified),\n authorMarker: prj.getKeyValueAsJson<AuthorMarker>(ProjectStructureAuthorKey),\n blocks,\n };\n },\n {\n postprocessValue: (value) => {\n const cantRun = new Set<string>();\n const staleBlocks = new Set<string>();\n return {\n ...value,\n blocks: value.blocks.map((b) => {\n if (!b.inputsValid) cantRun.add(b.id);\n if (b.stale) staleBlocks.add(b.id);\n const stale = b.stale || b.upstreams.findIndex((u) => staleBlocks.has(u)) !== -1;\n const canRun =\n (stale || b.outputErrors) &&\n Boolean(b.inputsValid) &&\n !b.missingReference &&\n b.upstreams.findIndex((u) => cantRun.has(u)) === -1;\n const bb = {\n ...b,\n canRun,\n stale,\n updateSuggestions: b.updates?.suggestions ?? [],\n updatedBlockPack: b.updates?.mainSuggestion,\n };\n delete bb[\"updates\"];\n return bb;\n }),\n };\n },\n onRecalculation: getDebugFlags().logProjectOverviewStat\n ? (stats) => {\n console.log(`[projectOverview] ${JSON.stringify(stats)}`);\n }\n : undefined,\n },\n ).withStableType();\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project_overview.js","names":[],"sources":["../../src/middle_layer/project_overview.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { ComputableStableDefined } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectRenderingState, ProjectStructure } from \"../model/project_model\";\nimport {\n BlockRenderingStateKey,\n ProjectCreatedTimestamp,\n projectFieldName,\n ProjectLastModifiedTimestamp,\n ProjectMetaKey,\n ProjectStructureAuthorKey,\n ProjectStructureKey,\n} from \"../model/project_model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { allBlocks, productionGraph } from \"../model/project_model_util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport type {\n AuthorMarker,\n BlockCalculationStatus,\n BlockSettings,\n ProjectMeta,\n ProjectOverview,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport { type BlockSection, BLOCK_STORAGE_FACADE_VERSION } from \"@platforma-sdk/model\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport type { NavigationStates } from \"./navigation_states\";\nimport { getBlockPackInfo } from \"./util\";\nimport { resourceIdToString, type SignedResourceId } from \"@milaboratories/pl-client\";\nimport { omitBy, isEqual } from \"es-toolkit\";\nimport { getDebugFlags } from \"../debug\";\n\ntype BlockInfo = {\n argsRid?: SignedResourceId;\n currentArguments: unknown;\n prod?: ProdState;\n};\n\ntype ProdState = {\n finished: boolean;\n\n outputError: boolean;\n\n outputsError?: string;\n\n exportsError?: string;\n\n stale: boolean;\n\n /** Arguments current production was rendered with. */\n arguments: Record<string, unknown>;\n};\n\nfunction argsEquals(\n a: Record<string, unknown> | undefined,\n b: Record<string, unknown> | undefined,\n): boolean {\n if (a === b) return true;\n if (a === undefined || b === undefined) return false;\n const cleanA = omitBy(a, (_, key) => key.startsWith(\"__\"));\n const cleanB = omitBy(b, (_, key) => key.startsWith(\"__\"));\n return isEqual(cleanA, cleanB);\n}\n\n/** Returns derived general project state form the project resource */\nexport function projectOverview(\n prjEntry: PlTreeEntry,\n navigationStates: NavigationStates,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<ProjectOverview> {\n return Computable.make(\n (ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const created = notEmpty(prj.getKeyValueAsJson<number>(ProjectCreatedTimestamp));\n const lastModified = notEmpty(prj.getKeyValueAsJson<number>(ProjectLastModifiedTimestamp));\n\n const meta = notEmpty(prj.getKeyValueAsJson<ProjectMeta>(ProjectMetaKey));\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const renderingState = notEmpty(\n prj.getKeyValueAsJson<ProjectRenderingState>(BlockRenderingStateKey),\n );\n\n const infos = new Map<string, BlockInfo>();\n for (const { id } of allBlocks(structure)) {\n const cInputs = prj.traverse({\n field: projectFieldName(id, \"currentArgs\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n const currentArguments = cInputs?.getDataAsJson<Record<string, unknown>>();\n\n let prod: ProdState | undefined = undefined;\n\n const rInputs = prj.traverse({\n field: projectFieldName(id, \"prodArgs\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n if (rInputs !== undefined) {\n const prodArgs = rInputs.getDataAsJson() as Record<string, unknown>;\n const result = prj.getField({\n field: projectFieldName(id, \"prodOutput\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotFound: true,\n });\n const ctx = prj.getField({\n field: projectFieldName(id, \"prodUiCtx\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotFound: true,\n });\n prod = {\n arguments: prodArgs,\n stale: !argsEquals(currentArguments, prodArgs),\n outputError:\n result.error !== undefined ||\n ctx.error !== undefined ||\n result.value?.getError() !== undefined ||\n ctx.value?.getError() !== undefined,\n outputsError:\n result.error?.getDataAsString() ?? result.value?.getError()?.getDataAsString(),\n exportsError: ctx.error?.getDataAsString() ?? ctx.value?.getError()?.getDataAsString(),\n finished:\n ((result.value !== undefined && result.value.getIsReadyOrError()) ||\n (result.error !== undefined && result.error.getIsReadyOrError())) &&\n ((ctx.value !== undefined && ctx.value.getIsReadyOrError()) ||\n (ctx.error !== undefined && ctx.error.getIsReadyOrError())),\n };\n }\n\n infos.set(id, { currentArguments, prod, argsRid: cInputs?.resourceInfo.id });\n }\n\n const currentGraph = productionGraph(structure, (id) => {\n const bpInfo = getBlockPackInfo(prj, id)!;\n const bInfo = infos.get(id)!;\n const args = bInfo.currentArguments;\n return {\n args,\n enrichmentTargets: bInfo.argsRid\n ? env.projectHelper.getEnrichmentTargets(\n () => bpInfo.cfg,\n () => args,\n { argsRid: bInfo.argsRid, blockPackRid: bpInfo.bpResourceId },\n )\n : undefined,\n };\n });\n\n const limbo = new Set(renderingState.blocksInLimbo);\n\n const blocks = [...allBlocks(structure)].map(({ id, label: defaultLabel, renderingMode }) => {\n const info = notEmpty(infos.get(id));\n const gNode = notEmpty(currentGraph.nodes.get(id));\n let calculationStatus: BlockCalculationStatus = \"NotCalculated\";\n if (info.prod !== undefined) {\n if (limbo.has(id)) calculationStatus = \"Limbo\";\n else calculationStatus = info.prod.finished ? \"Done\" : \"Running\";\n }\n\n const bp = getBlockPackInfo(prj, id);\n\n const {\n sections,\n title,\n subtitle,\n tags,\n inputsValid,\n sdkVersion,\n featureFlags,\n isIncompatibleWithRuntime,\n } =\n ifNotUndef(bp, ({ bpId, cfg }) => {\n if (!env.runtimeCapabilities.checkCompatibility(cfg.featureFlags)) {\n return {\n isIncompatibleWithRuntime: true,\n featureFlags: cfg.featureFlags,\n };\n }\n const blockCtx = constructBlockContext(prjEntry, id);\n const blockCtxArgsOnly = constructBlockContextArgsOnly(prjEntry, id);\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(cfg));\n if (codeWithInfoOrError.error) {\n return {\n title: codeWithInfoOrError.error.message,\n isIncompatibleWithRuntime: true,\n featureFlags: cfg.featureFlags,\n };\n }\n const codeWithInfo = codeWithInfoOrError.value;\n return {\n sections: computableFromCfgOrRF(env, blockCtx, cfg.sections, codeWithInfo, bpId).wrap(\n {\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model sections\", { cause }));\n return [];\n },\n },\n ) as ComputableStableDefined<BlockSection[]>,\n title: ifNotUndef(\n cfg.title,\n (title) =>\n computableFromCfgOrRF(env, blockCtxArgsOnly, title, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model title\", { cause }));\n return \"Invalid title\";\n },\n }) as ComputableStableDefined<string>,\n ),\n subtitle: ifNotUndef(\n cfg.subtitle,\n (subtitle) =>\n computableFromCfgOrRF(env, blockCtxArgsOnly, subtitle, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model subtitle\", { cause }));\n return \"Invalid subtitle\";\n },\n }) as ComputableStableDefined<string>,\n ),\n tags: ifNotUndef(\n cfg.tags,\n (tags) =>\n computableFromCfgOrRF(env, blockCtx, tags, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model tags\", { cause }));\n return [];\n },\n }) as ComputableStableDefined<string[]>,\n ),\n // inputsValid: for modelAPIVersion 2, it's true if currentArgs exists (args derivation succeeded)\n // For older blocks, use the inputsValid callback from config\n inputsValid:\n cfg.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION\n ? info.currentArguments !== undefined\n : cfg.inputsValid\n ? (computableFromCfgOrRF(\n env,\n blockCtxArgsOnly,\n cfg.inputsValid,\n codeWithInfo,\n bpId,\n ).wrap({\n recover: (cause) => {\n env.logger.error(\n new Error(\"Error in block model inputsValid\", { cause }),\n );\n return false;\n },\n }) as ComputableStableDefined<boolean>)\n : undefined,\n sdkVersion: codeWithInfo?.sdkVersion,\n featureFlags: codeWithInfo?.featureFlags ?? {},\n isIncompatibleWithRuntime: false,\n };\n }) || {};\n\n const settings = prj\n .traverse({\n field: projectFieldName(id, \"blockSettings\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotSet: true,\n })\n .getDataAsJson() as BlockSettings;\n\n // Get block storage debug view by calling VM function (only for Model API v2 blocks)\n const storageDebugView = ifNotUndef(bp, ({ cfg }) => {\n if (cfg.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return undefined;\n }\n const storageNode = prj.traverse({\n field: projectFieldName(id, \"blockStorage\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n const rawStorageJson = storageNode?.getDataAsString();\n return env.projectHelper.getStorageDebugViewInVM(cfg, rawStorageJson);\n });\n\n const updates = ifNotUndef(bp, ({ info }) =>\n env.blockUpdateWatcher.get({ currentSpec: info.source, settings }),\n );\n\n return {\n projectResourceId: resourceIdToString(prjEntry.rid),\n id,\n label: title ?? defaultLabel,\n title: title ?? defaultLabel,\n subtitle,\n tags,\n renderingMode,\n stale: info.prod?.stale !== false || calculationStatus === \"Limbo\",\n missingReference: gNode.missingReferences,\n upstreams: [...currentGraph.traverseIdsExcludingRoots(\"upstream\", id)],\n downstreams: [...currentGraph.traverseIdsExcludingRoots(\"downstream\", id)],\n calculationStatus,\n outputErrors: info.prod?.outputError === true,\n outputsError: info.prod?.outputsError,\n exportsError: info.prod?.exportsError,\n settings,\n sections,\n inputsValid,\n updateInfo: {},\n currentBlockPack: bp?.info?.source,\n updates,\n sdkVersion,\n featureFlags,\n isIncompatibleWithRuntime,\n navigationState: navigationStates.getState(id),\n storageDebugView,\n };\n });\n\n return {\n meta,\n created: new Date(created),\n lastModified: new Date(lastModified),\n authorMarker: prj.getKeyValueAsJson<AuthorMarker>(ProjectStructureAuthorKey),\n blocks,\n };\n },\n {\n postprocessValue: (value) => {\n const cantRun = new Set<string>();\n const staleBlocks = new Set<string>();\n return {\n ...value,\n blocks: value.blocks.map((b) => {\n if (!b.inputsValid) cantRun.add(b.id);\n if (b.stale) staleBlocks.add(b.id);\n const stale = b.stale || b.upstreams.findIndex((u) => staleBlocks.has(u)) !== -1;\n const canRun =\n (stale || b.outputErrors) &&\n Boolean(b.inputsValid) &&\n !b.missingReference &&\n b.upstreams.findIndex((u) => cantRun.has(u)) === -1;\n const bb = {\n ...b,\n canRun,\n stale,\n updateSuggestions: b.updates?.suggestions ?? [],\n updatedBlockPack: b.updates?.mainSuggestion,\n };\n delete bb[\"updates\"];\n return bb;\n }),\n };\n },\n onRecalculation: getDebugFlags().logProjectOverviewStat\n ? (stats) => {\n console.log(`[projectOverview] ${JSON.stringify(stats)}`);\n }\n : undefined,\n },\n ).withStableType();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project_overview.js","names":[],"sources":["../../src/middle_layer/project_overview.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { ComputableStableDefined } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectRenderingState, ProjectStructure } from \"../model/project_model\";\nimport {\n BlockRenderingStateKey,\n ProjectCreatedTimestamp,\n projectFieldName,\n ProjectLastModifiedTimestamp,\n ProjectMetaKey,\n ProjectStructureAuthorKey,\n ProjectStructureKey,\n} from \"../model/project_model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { allBlocks, productionGraph } from \"../model/project_model_util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport type {\n AuthorMarker,\n BlockCalculationStatus,\n BlockSettings,\n ProjectMeta,\n ProjectOverview,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport { type BlockSection, BLOCK_STORAGE_FACADE_VERSION } from \"@platforma-sdk/model\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport type { NavigationStates } from \"./navigation_states\";\nimport { getBlockPackInfo } from \"./util\";\nimport { resourceIdToString, type SignedResourceId } from \"@milaboratories/pl-client\";\nimport { omitBy, isEqual } from \"es-toolkit\";\nimport { getDebugFlags } from \"../debug\";\n\ntype BlockInfo = {\n argsRid?: SignedResourceId;\n currentArguments: unknown;\n prod?: ProdState;\n};\n\ntype ProdState = {\n finished: boolean;\n\n outputError: boolean;\n\n outputsError?: string;\n\n exportsError?: string;\n\n stale: boolean;\n\n /** Arguments current production was rendered with. */\n arguments: Record<string, unknown>;\n};\n\nfunction argsEquals(\n a: Record<string, unknown> | undefined,\n b: Record<string, unknown> | undefined,\n): boolean {\n if (a === b) return true;\n if (a === undefined || b === undefined) return false;\n const cleanA = omitBy(a, (_, key) => key.startsWith(\"__\"));\n const cleanB = omitBy(b, (_, key) => key.startsWith(\"__\"));\n return isEqual(cleanA, cleanB);\n}\n\n/** Returns derived general project state form the project resource */\nexport function projectOverview(\n prjEntry: PlTreeEntry,\n navigationStates: NavigationStates,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<ProjectOverview> {\n return Computable.make(\n (ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const created = notEmpty(prj.getKeyValueAsJson<number>(ProjectCreatedTimestamp));\n const lastModified = notEmpty(prj.getKeyValueAsJson<number>(ProjectLastModifiedTimestamp));\n\n const meta = notEmpty(prj.getKeyValueAsJson<ProjectMeta>(ProjectMetaKey));\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const renderingState = notEmpty(\n prj.getKeyValueAsJson<ProjectRenderingState>(BlockRenderingStateKey),\n );\n\n const infos = new Map<string, BlockInfo>();\n for (const { id } of allBlocks(structure)) {\n const cInputs = prj.traverse({\n field: projectFieldName(id, \"currentArgs\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n const currentArguments = cInputs?.getDataAsJson<Record<string, unknown>>();\n\n let prod: ProdState | undefined = undefined;\n\n const rInputs = prj.traverse({\n field: projectFieldName(id, \"prodArgs\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n if (rInputs !== undefined) {\n const prodArgs = rInputs.getDataAsJson() as Record<string, unknown>;\n const result = prj.getField({\n field: projectFieldName(id, \"prodOutput\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotFound: true,\n });\n const ctx = prj.getField({\n field: projectFieldName(id, \"prodUiCtx\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotFound: true,\n });\n prod = {\n arguments: prodArgs,\n stale: !argsEquals(currentArguments, prodArgs),\n outputError:\n result.error !== undefined ||\n ctx.error !== undefined ||\n result.value?.getError() !== undefined ||\n ctx.value?.getError() !== undefined,\n outputsError:\n result.error?.getDataAsString() ?? result.value?.getError()?.getDataAsString(),\n exportsError: ctx.error?.getDataAsString() ?? ctx.value?.getError()?.getDataAsString(),\n finished:\n ((result.value !== undefined && result.value.getIsReadyOrError()) ||\n (result.error !== undefined && result.error.getIsReadyOrError())) &&\n ((ctx.value !== undefined && ctx.value.getIsReadyOrError()) ||\n (ctx.error !== undefined && ctx.error.getIsReadyOrError())),\n };\n }\n\n infos.set(id, { currentArguments, prod, argsRid: cInputs?.resourceInfo.id });\n }\n\n const currentGraph = productionGraph(structure, (id) => {\n const bpInfo = getBlockPackInfo(prj, id)!;\n const bInfo = infos.get(id)!;\n const args = bInfo.currentArguments;\n return {\n args,\n enrichmentTargets: bInfo.argsRid\n ? env.projectHelper.getEnrichmentTargets(\n () => bpInfo.cfg,\n () => args,\n { argsRid: bInfo.argsRid, blockPackRid: bpInfo.bpResourceId },\n )\n : undefined,\n };\n });\n\n const limbo = new Set(renderingState.blocksInLimbo);\n\n const blocks = [...allBlocks(structure)].map(({ id, label: defaultLabel, renderingMode }) => {\n const info = notEmpty(infos.get(id));\n const gNode = notEmpty(currentGraph.nodes.get(id));\n let calculationStatus: BlockCalculationStatus = \"NotCalculated\";\n if (info.prod !== undefined) {\n if (limbo.has(id)) calculationStatus = \"Limbo\";\n else calculationStatus = info.prod.finished ? \"Done\" : \"Running\";\n }\n\n const bp = getBlockPackInfo(prj, id);\n\n const {\n sections,\n title,\n subtitle,\n tags,\n inputsValid,\n sdkVersion,\n featureFlags,\n isIncompatibleWithRuntime,\n } =\n ifNotUndef(bp, ({ bpId, cfg }) => {\n if (!env.runtimeCapabilities.checkCompatibility(cfg.featureFlags)) {\n return {\n isIncompatibleWithRuntime: true,\n featureFlags: cfg.featureFlags,\n };\n }\n const blockCtx = constructBlockContext(prjEntry, id);\n const blockCtxArgsOnly = constructBlockContextArgsOnly(prjEntry, id);\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(cfg));\n if (codeWithInfoOrError.error) {\n return {\n title: codeWithInfoOrError.error.message,\n isIncompatibleWithRuntime: true,\n featureFlags: cfg.featureFlags,\n };\n }\n const codeWithInfo = codeWithInfoOrError.value;\n return {\n sections: computableFromCfgOrRF(env, blockCtx, cfg.sections, codeWithInfo, bpId).wrap(\n {\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model sections\", { cause }));\n return [];\n },\n },\n ) as ComputableStableDefined<BlockSection[]>,\n title: ifNotUndef(\n cfg.title,\n (title) =>\n computableFromCfgOrRF(env, blockCtxArgsOnly, title, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model title\", { cause }));\n return \"Invalid title\";\n },\n }) as ComputableStableDefined<string>,\n ),\n subtitle: ifNotUndef(\n cfg.subtitle,\n (subtitle) =>\n computableFromCfgOrRF(env, blockCtxArgsOnly, subtitle, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model subtitle\", { cause }));\n return \"Invalid subtitle\";\n },\n }) as ComputableStableDefined<string>,\n ),\n tags: ifNotUndef(\n cfg.tags,\n (tags) =>\n computableFromCfgOrRF(env, blockCtx, tags, codeWithInfo, bpId).wrap({\n recover: (cause) => {\n env.logger.error(new Error(\"Error in block model tags\", { cause }));\n return [];\n },\n }) as ComputableStableDefined<string[]>,\n ),\n // inputsValid: for modelAPIVersion 2, it's true if currentArgs exists (args derivation succeeded)\n // For older blocks, use the inputsValid callback from config\n inputsValid:\n cfg.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION\n ? info.currentArguments !== undefined\n : cfg.inputsValid\n ? (computableFromCfgOrRF(\n env,\n blockCtxArgsOnly,\n cfg.inputsValid,\n codeWithInfo,\n bpId,\n ).wrap({\n recover: (cause) => {\n env.logger.error(\n new Error(\"Error in block model inputsValid\", { cause }),\n );\n return false;\n },\n }) as ComputableStableDefined<boolean>)\n : undefined,\n sdkVersion: codeWithInfo?.sdkVersion,\n featureFlags: codeWithInfo?.featureFlags ?? {},\n isIncompatibleWithRuntime: false,\n };\n }) || {};\n\n const settings = prj\n .traverse({\n field: projectFieldName(id, \"blockSettings\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotSet: true,\n })\n .getDataAsJson() as BlockSettings;\n\n // Get block storage debug view by calling VM function (only for Model API v2 blocks)\n const storageDebugView = ifNotUndef(bp, ({ cfg }) => {\n if (cfg.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return undefined;\n }\n const storageNode = prj.traverse({\n field: projectFieldName(id, \"blockStorage\"),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n const rawStorageJson = storageNode?.getDataAsString();\n return env.projectHelper.getStorageDebugViewInVM(cfg, rawStorageJson);\n });\n\n const updates = ifNotUndef(bp, ({ info }) =>\n env.blockUpdateWatcher.get({ currentSpec: info.source, settings }),\n );\n\n return {\n projectResourceId: resourceIdToString(prjEntry.rid),\n id,\n label: title ?? defaultLabel,\n title: title ?? defaultLabel,\n subtitle,\n tags,\n renderingMode,\n stale: info.prod?.stale !== false || calculationStatus === \"Limbo\",\n missingReference: gNode.missingReferences,\n upstreams: [...currentGraph.traverseIdsExcludingRoots(\"upstream\", id)],\n downstreams: [...currentGraph.traverseIdsExcludingRoots(\"downstream\", id)],\n calculationStatus,\n outputErrors: info.prod?.outputError === true,\n outputsError: info.prod?.outputsError,\n exportsError: info.prod?.exportsError,\n settings,\n sections,\n inputsValid,\n updateInfo: {},\n currentBlockPack: bp?.info?.source,\n updates,\n sdkVersion,\n featureFlags,\n isIncompatibleWithRuntime,\n navigationState: navigationStates.getState(id),\n storageDebugView,\n };\n });\n\n return {\n meta,\n created: new Date(created),\n lastModified: new Date(lastModified),\n authorMarker: prj.getKeyValueAsJson<AuthorMarker>(ProjectStructureAuthorKey),\n blocks,\n };\n },\n {\n postprocessValue: (value) => {\n const cantRun = new Set<string>();\n const staleBlocks = new Set<string>();\n return {\n ...value,\n blocks: value.blocks.map((b) => {\n if (!b.inputsValid) cantRun.add(b.id);\n if (b.stale) staleBlocks.add(b.id);\n const stale = b.stale || b.upstreams.findIndex((u) => staleBlocks.has(u)) !== -1;\n const canRun =\n (stale || b.outputErrors) &&\n Boolean(b.inputsValid) &&\n !b.missingReference &&\n b.upstreams.findIndex((u) => cantRun.has(u)) === -1;\n const bb = {\n ...b,\n canRun,\n stale,\n updateSuggestions: b.updates?.suggestions ?? [],\n updatedBlockPack: b.updates?.mainSuggestion,\n };\n delete bb[\"updates\"];\n return bb;\n }),\n };\n },\n onRecalculation: getDebugFlags().logProjectOverviewStat\n ? (stats) => {\n console.log(`[projectOverview] ${JSON.stringify(stats)}`);\n }\n : undefined,\n },\n ).withStableType();\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project_overview_light.cjs","names":["Computable","allBlocks","ProjectStructureKey"],"sources":["../../src/middle_layer/project_overview_light.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\n\nexport type ProjectOverviewLight = {\n readonly listOfBlocks: string[];\n};\n\n/** Returns derived general project state form the project resource */\nexport function projectOverviewLight(prjEntry: PlTreeEntry): Computable<ProjectOverviewLight> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n\n return {\n listOfBlocks: [...allBlocks(structure)].map((b) => b.id),\n };\n });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"project_overview_light.cjs","names":["Computable","allBlocks","ProjectStructureKey"],"sources":["../../src/middle_layer/project_overview_light.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\n\nexport type ProjectOverviewLight = {\n readonly listOfBlocks: string[];\n};\n\n/** Returns derived general project state form the project resource */\nexport function projectOverviewLight(prjEntry: PlTreeEntry): Computable<ProjectOverviewLight> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n\n return {\n listOfBlocks: [...allBlocks(structure)].map((b) => b.id),\n };\n });\n}\n"],"mappings":";;;;;;AAYA,SAAgB,qBAAqB,UAAyD;CAC5F,OAAOA,2BAAAA,WAAW,MAAM,QAAQ;EAK9B,OAAO,EACL,cAAc,CAAC,GAAGC,2BAAAA,WAAAA,GAAAA,2BAAAA,SAAAA,CALR,IAAI,SAAS,QAAQ,CAAC,CAAC,KAEN,CAAC,CAAC,kBAAoCC,sBAAAA,mBAAmB,CAGhD,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,EAAE,EACzD;CACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project_overview_light.js","names":[],"sources":["../../src/middle_layer/project_overview_light.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\n\nexport type ProjectOverviewLight = {\n readonly listOfBlocks: string[];\n};\n\n/** Returns derived general project state form the project resource */\nexport function projectOverviewLight(prjEntry: PlTreeEntry): Computable<ProjectOverviewLight> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n\n return {\n listOfBlocks: [...allBlocks(structure)].map((b) => b.id),\n };\n });\n}\n"],"mappings":";;;;;;AAYA,SAAgB,qBAAqB,UAAyD;
|
|
1
|
+
{"version":3,"file":"project_overview_light.js","names":[],"sources":["../../src/middle_layer/project_overview_light.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\n\nexport type ProjectOverviewLight = {\n readonly listOfBlocks: string[];\n};\n\n/** Returns derived general project state form the project resource */\nexport function projectOverviewLight(prjEntry: PlTreeEntry): Computable<ProjectOverviewLight> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n\n return {\n listOfBlocks: [...allBlocks(structure)].map((b) => b.id),\n };\n });\n}\n"],"mappings":";;;;;;AAYA,SAAgB,qBAAqB,UAAyD;CAC5F,OAAO,WAAW,MAAM,QAAQ;EAK9B,OAAO,EACL,cAAc,CAAC,GAAG,UAHF,SAFN,IAAI,SAAS,QAAQ,CAAC,CAAC,KAEN,CAAC,CAAC,kBAAoC,mBAAmB,CAGhD,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,EAAE,EACzD;CACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.cjs","names":["hasActiveCfgComponents","computableFromRF","computableFromCfg"],"sources":["../../src/middle_layer/render.ts"],"sourcesContent":["import type { BlockCodeWithInfo, TypedConfigOrConfigLambda } from \"@platforma-sdk/model\";\nimport { isConfigLambda } from \"@platforma-sdk/model\";\nimport type { Computable, ComputableRenderingOps } from \"@milaboratories/computable\";\nimport { computableFromCfg } from \"../cfg_render/executor\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { computableFromRF } from \"../js_render\";\nimport type { BlockContextAny } from \"./block_ctx\";\nimport { hasActiveCfgComponents } from \"../cfg_render/util\";\n\nexport function isActive(cfg: TypedConfigOrConfigLambda): boolean {\n if (isConfigLambda(cfg)) return cfg.isActive === true;\n else return hasActiveCfgComponents(cfg);\n}\n\nexport function computableFromCfgOrRF(\n env: MiddleLayerEnvironment,\n ctx: BlockContextAny,\n cfgOrFh: TypedConfigOrConfigLambda,\n codeWithInfo: BlockCodeWithInfo | undefined,\n configKey: string,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n if (isConfigLambda(cfgOrFh)) {\n if (codeWithInfo === undefined) throw new Error(\"computableFromCfgOrRF: No code bundle.\");\n return computableFromRF(env, ctx, cfgOrFh, codeWithInfo, configKey, ops);\n } else return computableFromCfg(env.driverKit, ctx, cfgOrFh, ops);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.cjs","names":["hasActiveCfgComponents","computableFromRF","computableFromCfg"],"sources":["../../src/middle_layer/render.ts"],"sourcesContent":["import type { BlockCodeWithInfo, TypedConfigOrConfigLambda } from \"@platforma-sdk/model\";\nimport { isConfigLambda } from \"@platforma-sdk/model\";\nimport type { Computable, ComputableRenderingOps } from \"@milaboratories/computable\";\nimport { computableFromCfg } from \"../cfg_render/executor\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { computableFromRF } from \"../js_render\";\nimport type { BlockContextAny } from \"./block_ctx\";\nimport { hasActiveCfgComponents } from \"../cfg_render/util\";\n\nexport function isActive(cfg: TypedConfigOrConfigLambda): boolean {\n if (isConfigLambda(cfg)) return cfg.isActive === true;\n else return hasActiveCfgComponents(cfg);\n}\n\nexport function computableFromCfgOrRF(\n env: MiddleLayerEnvironment,\n ctx: BlockContextAny,\n cfgOrFh: TypedConfigOrConfigLambda,\n codeWithInfo: BlockCodeWithInfo | undefined,\n configKey: string,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n if (isConfigLambda(cfgOrFh)) {\n if (codeWithInfo === undefined) throw new Error(\"computableFromCfgOrRF: No code bundle.\");\n return computableFromRF(env, ctx, cfgOrFh, codeWithInfo, configKey, ops);\n } else return computableFromCfg(env.driverKit, ctx, cfgOrFh, ops);\n}\n"],"mappings":";;;;;AASA,SAAgB,SAAS,KAAyC;CAChE,KAAA,GAAA,qBAAA,eAAA,CAAmB,GAAG,GAAG,OAAO,IAAI,aAAa;MAC5C,OAAOA,aAAAA,uBAAuB,GAAG;AACxC;AAEA,SAAgB,sBACd,KACA,KACA,SACA,cACA,WACA,MAAuC,CAAC,GACnB;CACrB,KAAA,GAAA,qBAAA,eAAA,CAAmB,OAAO,GAAG;EAC3B,IAAI,iBAAiB,KAAA,GAAW,MAAM,IAAI,MAAM,wCAAwC;EACxF,OAAOC,cAAAA,iBAAiB,KAAK,KAAK,SAAS,cAAc,WAAW,GAAG;CACzE,OAAO,OAAOC,iBAAAA,kBAAkB,IAAI,WAAW,KAAK,SAAS,GAAG;AAClE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","names":[],"sources":["../../src/middle_layer/render.ts"],"sourcesContent":["import type { BlockCodeWithInfo, TypedConfigOrConfigLambda } from \"@platforma-sdk/model\";\nimport { isConfigLambda } from \"@platforma-sdk/model\";\nimport type { Computable, ComputableRenderingOps } from \"@milaboratories/computable\";\nimport { computableFromCfg } from \"../cfg_render/executor\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { computableFromRF } from \"../js_render\";\nimport type { BlockContextAny } from \"./block_ctx\";\nimport { hasActiveCfgComponents } from \"../cfg_render/util\";\n\nexport function isActive(cfg: TypedConfigOrConfigLambda): boolean {\n if (isConfigLambda(cfg)) return cfg.isActive === true;\n else return hasActiveCfgComponents(cfg);\n}\n\nexport function computableFromCfgOrRF(\n env: MiddleLayerEnvironment,\n ctx: BlockContextAny,\n cfgOrFh: TypedConfigOrConfigLambda,\n codeWithInfo: BlockCodeWithInfo | undefined,\n configKey: string,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n if (isConfigLambda(cfgOrFh)) {\n if (codeWithInfo === undefined) throw new Error(\"computableFromCfgOrRF: No code bundle.\");\n return computableFromRF(env, ctx, cfgOrFh, codeWithInfo, configKey, ops);\n } else return computableFromCfg(env.driverKit, ctx, cfgOrFh, ops);\n}\n"],"mappings":";;;;;AASA,SAAgB,SAAS,KAAyC;
|
|
1
|
+
{"version":3,"file":"render.js","names":[],"sources":["../../src/middle_layer/render.ts"],"sourcesContent":["import type { BlockCodeWithInfo, TypedConfigOrConfigLambda } from \"@platforma-sdk/model\";\nimport { isConfigLambda } from \"@platforma-sdk/model\";\nimport type { Computable, ComputableRenderingOps } from \"@milaboratories/computable\";\nimport { computableFromCfg } from \"../cfg_render/executor\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { computableFromRF } from \"../js_render\";\nimport type { BlockContextAny } from \"./block_ctx\";\nimport { hasActiveCfgComponents } from \"../cfg_render/util\";\n\nexport function isActive(cfg: TypedConfigOrConfigLambda): boolean {\n if (isConfigLambda(cfg)) return cfg.isActive === true;\n else return hasActiveCfgComponents(cfg);\n}\n\nexport function computableFromCfgOrRF(\n env: MiddleLayerEnvironment,\n ctx: BlockContextAny,\n cfgOrFh: TypedConfigOrConfigLambda,\n codeWithInfo: BlockCodeWithInfo | undefined,\n configKey: string,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n if (isConfigLambda(cfgOrFh)) {\n if (codeWithInfo === undefined) throw new Error(\"computableFromCfgOrRF: No code bundle.\");\n return computableFromRF(env, ctx, cfgOrFh, codeWithInfo, configKey, ops);\n } else return computableFromCfg(env.driverKit, ctx, cfgOrFh, ops);\n}\n"],"mappings":";;;;;AASA,SAAgB,SAAS,KAAyC;CAChE,IAAI,eAAe,GAAG,GAAG,OAAO,IAAI,aAAa;MAC5C,OAAO,uBAAuB,GAAG;AACxC;AAEA,SAAgB,sBACd,KACA,KACA,SACA,cACA,WACA,MAAuC,CAAC,GACnB;CACrB,IAAI,eAAe,OAAO,GAAG;EAC3B,IAAI,iBAAiB,KAAA,GAAW,MAAM,IAAI,MAAM,wCAAwC;EACxF,OAAO,iBAAiB,KAAK,KAAK,SAAS,cAAc,WAAW,GAAG;CACzE,OAAO,OAAO,kBAAkB,IAAI,WAAW,KAAK,SAAS,GAAG;AAClE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/middle_layer/types.ts"],"mappings":";;;;KAGY,2BAAA,GAA8B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/middle_layer/types.ts"],"mappings":";;;;KAGY,2BAAA,GAA8B,IAAI,CAC5C,mBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.cjs","names":["ifNotUndef","projectFieldName","Pl"],"sources":["../../src/middle_layer/util.ts"],"sourcesContent":["import type { PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { projectFieldName } from \"../model/project_model\";\nimport type { SignedResourceId } from \"@milaboratories/pl-client\";\nimport { Pl } from \"@milaboratories/pl-client\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { BlockPackInfo } from \"../model/block_pack\";\nimport type { BlockConfig } from \"@platforma-sdk/model\";\nimport { extractConfig } from \"@platforma-sdk/model\";\n\nexport type BlockPackInfoAndId = {\n readonly bpResourceId: SignedResourceId;\n /** To be added to computable keys, to force reload on config change */\n readonly bpId: string;\n /** Full block-pack info */\n readonly info: BlockPackInfo;\n /** Config extracted from the info */\n readonly cfg: BlockConfig;\n};\n\n/** Returns block pack info along with string representation of block-pack resource id */\nexport function getBlockPackInfo(\n prj: PlTreeNodeAccessor,\n blockId: string,\n): BlockPackInfoAndId | undefined {\n return ifNotUndef(\n prj.traverse(\n {\n field: projectFieldName(blockId, \"blockPack\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotSet: true,\n },\n { field: Pl.HolderRefField, assertFieldType: \"Input\", errorIfFieldNotFound: true },\n ),\n (bpAcc) => {\n const info = bpAcc.getDataAsJson<BlockPackInfo>()!;\n const cfg = extractConfig(info.config);\n return {\n bpResourceId: bpAcc.resourceInfo.id,\n bpId: bpAcc.resourceInfo.id.toString(),\n info,\n cfg,\n };\n },\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.cjs","names":["ifNotUndef","projectFieldName","Pl"],"sources":["../../src/middle_layer/util.ts"],"sourcesContent":["import type { PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { projectFieldName } from \"../model/project_model\";\nimport type { SignedResourceId } from \"@milaboratories/pl-client\";\nimport { Pl } from \"@milaboratories/pl-client\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { BlockPackInfo } from \"../model/block_pack\";\nimport type { BlockConfig } from \"@platforma-sdk/model\";\nimport { extractConfig } from \"@platforma-sdk/model\";\n\nexport type BlockPackInfoAndId = {\n readonly bpResourceId: SignedResourceId;\n /** To be added to computable keys, to force reload on config change */\n readonly bpId: string;\n /** Full block-pack info */\n readonly info: BlockPackInfo;\n /** Config extracted from the info */\n readonly cfg: BlockConfig;\n};\n\n/** Returns block pack info along with string representation of block-pack resource id */\nexport function getBlockPackInfo(\n prj: PlTreeNodeAccessor,\n blockId: string,\n): BlockPackInfoAndId | undefined {\n return ifNotUndef(\n prj.traverse(\n {\n field: projectFieldName(blockId, \"blockPack\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotSet: true,\n },\n { field: Pl.HolderRefField, assertFieldType: \"Input\", errorIfFieldNotFound: true },\n ),\n (bpAcc) => {\n const info = bpAcc.getDataAsJson<BlockPackInfo>()!;\n const cfg = extractConfig(info.config);\n return {\n bpResourceId: bpAcc.resourceInfo.id,\n bpId: bpAcc.resourceInfo.id.toString(),\n info,\n cfg,\n };\n },\n );\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,iBACd,KACA,SACgC;CAChC,OAAOA,aAAAA,WACL,IAAI,SACF;EACE,OAAOC,sBAAAA,iBAAiB,SAAS,WAAW;EAC5C,iBAAiB;EACjB,oBAAoB;CACtB,GACA;EAAE,OAAOC,0BAAAA,GAAG;EAAgB,iBAAiB;EAAS,sBAAsB;CAAK,CACnF,IACC,UAAU;EACT,MAAM,OAAO,MAAM,cAA6B;EAChD,MAAM,OAAA,GAAA,qBAAA,cAAA,CAAoB,KAAK,MAAM;EACrC,OAAO;GACL,cAAc,MAAM,aAAa;GACjC,MAAM,MAAM,aAAa,GAAG,SAAS;GACrC;GACA;EACF;CACF,CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","names":[],"sources":["../../src/middle_layer/util.ts"],"sourcesContent":["import type { PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { projectFieldName } from \"../model/project_model\";\nimport type { SignedResourceId } from \"@milaboratories/pl-client\";\nimport { Pl } from \"@milaboratories/pl-client\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { BlockPackInfo } from \"../model/block_pack\";\nimport type { BlockConfig } from \"@platforma-sdk/model\";\nimport { extractConfig } from \"@platforma-sdk/model\";\n\nexport type BlockPackInfoAndId = {\n readonly bpResourceId: SignedResourceId;\n /** To be added to computable keys, to force reload on config change */\n readonly bpId: string;\n /** Full block-pack info */\n readonly info: BlockPackInfo;\n /** Config extracted from the info */\n readonly cfg: BlockConfig;\n};\n\n/** Returns block pack info along with string representation of block-pack resource id */\nexport function getBlockPackInfo(\n prj: PlTreeNodeAccessor,\n blockId: string,\n): BlockPackInfoAndId | undefined {\n return ifNotUndef(\n prj.traverse(\n {\n field: projectFieldName(blockId, \"blockPack\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotSet: true,\n },\n { field: Pl.HolderRefField, assertFieldType: \"Input\", errorIfFieldNotFound: true },\n ),\n (bpAcc) => {\n const info = bpAcc.getDataAsJson<BlockPackInfo>()!;\n const cfg = extractConfig(info.config);\n return {\n bpResourceId: bpAcc.resourceInfo.id,\n bpId: bpAcc.resourceInfo.id.toString(),\n info,\n cfg,\n };\n },\n );\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,iBACd,KACA,SACgC;
|
|
1
|
+
{"version":3,"file":"util.js","names":[],"sources":["../../src/middle_layer/util.ts"],"sourcesContent":["import type { PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { projectFieldName } from \"../model/project_model\";\nimport type { SignedResourceId } from \"@milaboratories/pl-client\";\nimport { Pl } from \"@milaboratories/pl-client\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { BlockPackInfo } from \"../model/block_pack\";\nimport type { BlockConfig } from \"@platforma-sdk/model\";\nimport { extractConfig } from \"@platforma-sdk/model\";\n\nexport type BlockPackInfoAndId = {\n readonly bpResourceId: SignedResourceId;\n /** To be added to computable keys, to force reload on config change */\n readonly bpId: string;\n /** Full block-pack info */\n readonly info: BlockPackInfo;\n /** Config extracted from the info */\n readonly cfg: BlockConfig;\n};\n\n/** Returns block pack info along with string representation of block-pack resource id */\nexport function getBlockPackInfo(\n prj: PlTreeNodeAccessor,\n blockId: string,\n): BlockPackInfoAndId | undefined {\n return ifNotUndef(\n prj.traverse(\n {\n field: projectFieldName(blockId, \"blockPack\"),\n assertFieldType: \"Dynamic\",\n errorIfFieldNotSet: true,\n },\n { field: Pl.HolderRefField, assertFieldType: \"Input\", errorIfFieldNotFound: true },\n ),\n (bpAcc) => {\n const info = bpAcc.getDataAsJson<BlockPackInfo>()!;\n const cfg = extractConfig(info.config);\n return {\n bpResourceId: bpAcc.resourceInfo.id,\n bpId: bpAcc.resourceInfo.id.toString(),\n info,\n cfg,\n };\n },\n );\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,iBACd,KACA,SACgC;CAChC,OAAO,WACL,IAAI,SACF;EACE,OAAO,iBAAiB,SAAS,WAAW;EAC5C,iBAAiB;EACjB,oBAAoB;CACtB,GACA;EAAE,OAAO,GAAG;EAAgB,iBAAiB;EAAS,sBAAsB;CAAK,CACnF,IACC,UAAU;EACT,MAAM,OAAO,MAAM,cAA6B;EAChD,MAAM,MAAM,cAAc,KAAK,MAAM;EACrC,OAAO;GACL,cAAc,MAAM,aAAa;GACjC,MAAM,MAAM,aAAa,GAAG,SAAS;GACrC;GACA;EACF;CACF,CACF;AACF"}
|
package/dist/model/args.cjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
|
|
3
2
|
//#region src/model/args.ts
|
|
4
3
|
function outputRef(blockId, name, requireEnrichments) {
|
|
@@ -81,6 +80,7 @@ function recordRef(result, blockId, requireEnrichments, allowed) {
|
|
|
81
80
|
}
|
|
82
81
|
//#endregion
|
|
83
82
|
exports.inferAllReferencedBlocks = inferAllReferencedBlocks;
|
|
83
|
+
exports.isBlockOutputReference = isBlockOutputReference;
|
|
84
84
|
exports.outputRef = outputRef;
|
|
85
85
|
|
|
86
86
|
//# sourceMappingURL=args.cjs.map
|
package/dist/model/args.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.cjs","names":[],"sources":["../../src/model/args.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/ts-helpers\";\nimport type { PlRef } from \"@platforma-sdk/model\";\n\nexport function outputRef(blockId: string, name: string, requireEnrichments?: boolean): PlRef {\n if (requireEnrichments) return { __isRef: true, blockId, name, requireEnrichments };\n else return { __isRef: true, blockId, name };\n}\n\nexport function isBlockOutputReference(obj: unknown): obj is PlRef {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"__isRef\" in obj &&\n obj.__isRef === true &&\n \"blockId\" in obj &&\n \"name\" in obj\n );\n}\n\nexport interface BlockUpstreams {\n /** All direct block dependencies */\n upstreams: Set<string>;\n /** Direct block dependencies which enrichments are also required by current block */\n upstreamsRequiringEnrichments: Set<string>;\n /** True if not-allowed references was encountered */\n missingReferences: boolean;\n}\n\n/** Extracts all resource ids referenced by args object. */\nexport function inferAllReferencedBlocks(args: unknown, allowed?: Set<string>): BlockUpstreams {\n const result = {\n upstreams: new Set<string>(),\n upstreamsRequiringEnrichments: new Set<string>(),\n missingReferences: false,\n };\n addAllReferencedBlocks(result, args, allowed);\n return result;\n}\n\nfunction addAllReferencedBlocks(result: BlockUpstreams, node: unknown, allowed?: Set<string>) {\n const type = typeof node;\n switch (type) {\n case \"function\":\n case \"bigint\":\n case \"number\":\n case \"boolean\":\n case \"symbol\":\n case \"undefined\":\n return;\n case \"string\": {\n unwrapEmbeddedRef(node as string, (parsed) =>\n addAllReferencedBlocks(result, parsed, allowed),\n );\n return;\n }\n case \"object\": {\n if (node === null) return;\n if (isBlockOutputReference(node)) {\n recordRef(result, node.blockId, node.requireEnrichments === true, allowed);\n } else if (Array.isArray(node)) {\n for (const child of node) addAllReferencedBlocks(result, child, allowed);\n } else {\n for (const [, child] of Object.entries(node as object))\n addAllReferencedBlocks(result, child, allowed);\n }\n\n return;\n }\n default:\n assertNever(type);\n }\n}\n\n/**\n * Detect a PlRef carried inside a string and hand the decoded value to `onParsed`.\n *\n * A PlRef-as-string is canonical `{...}` optionally wrapped by N `JSON.stringify`\n * passes. Each pass adds a symmetric prefix/suffix made only of `\"` and `\\`\n * chars (the escape padding) of equal length. The regex below is the strict\n * shape gate — non-ref strings fail at the very first character, so we never\n * scan their body. One pass is peeled per call; deeper nesting is unwrapped\n * via recursion in the caller.\n */\nconst EMBEDDED_REF_RE = /^(?<pre>[\\\\\"]*)\\{[\\s\\S]*?__isRef[\\s\\S]*\\}(?<suf>[\\\\\"]*)$/;\n\nfunction unwrapEmbeddedRef(s: string, onParsed: (value: unknown) => void) {\n const c0 = s.charCodeAt(0);\n if (c0 !== 0x7b /* { */ && c0 !== 0x22 /* \" */) return;\n const m = EMBEDDED_REF_RE.exec(s);\n if (m === null) return;\n if (m.groups!.pre.length !== m.groups!.suf.length) return;\n let parsed: unknown;\n try {\n parsed = JSON.parse(s);\n } catch {\n return;\n }\n if (parsed !== s) onParsed(parsed);\n}\n\nfunction recordRef(\n result: BlockUpstreams,\n blockId: string,\n requireEnrichments: boolean,\n allowed?: Set<string>,\n) {\n if (allowed === undefined || allowed.has(blockId)) {\n result.upstreams.add(blockId);\n if (requireEnrichments) result.upstreamsRequiringEnrichments.add(blockId);\n } else result.missingReferences = true;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"args.cjs","names":[],"sources":["../../src/model/args.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/ts-helpers\";\nimport type { PlRef } from \"@platforma-sdk/model\";\n\nexport function outputRef(blockId: string, name: string, requireEnrichments?: boolean): PlRef {\n if (requireEnrichments) return { __isRef: true, blockId, name, requireEnrichments };\n else return { __isRef: true, blockId, name };\n}\n\nexport function isBlockOutputReference(obj: unknown): obj is PlRef {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"__isRef\" in obj &&\n obj.__isRef === true &&\n \"blockId\" in obj &&\n \"name\" in obj\n );\n}\n\nexport interface BlockUpstreams {\n /** All direct block dependencies */\n upstreams: Set<string>;\n /** Direct block dependencies which enrichments are also required by current block */\n upstreamsRequiringEnrichments: Set<string>;\n /** True if not-allowed references was encountered */\n missingReferences: boolean;\n}\n\n/** Extracts all resource ids referenced by args object. */\nexport function inferAllReferencedBlocks(args: unknown, allowed?: Set<string>): BlockUpstreams {\n const result = {\n upstreams: new Set<string>(),\n upstreamsRequiringEnrichments: new Set<string>(),\n missingReferences: false,\n };\n addAllReferencedBlocks(result, args, allowed);\n return result;\n}\n\nfunction addAllReferencedBlocks(result: BlockUpstreams, node: unknown, allowed?: Set<string>) {\n const type = typeof node;\n switch (type) {\n case \"function\":\n case \"bigint\":\n case \"number\":\n case \"boolean\":\n case \"symbol\":\n case \"undefined\":\n return;\n case \"string\": {\n unwrapEmbeddedRef(node as string, (parsed) =>\n addAllReferencedBlocks(result, parsed, allowed),\n );\n return;\n }\n case \"object\": {\n if (node === null) return;\n if (isBlockOutputReference(node)) {\n recordRef(result, node.blockId, node.requireEnrichments === true, allowed);\n } else if (Array.isArray(node)) {\n for (const child of node) addAllReferencedBlocks(result, child, allowed);\n } else {\n for (const [, child] of Object.entries(node as object))\n addAllReferencedBlocks(result, child, allowed);\n }\n\n return;\n }\n default:\n assertNever(type);\n }\n}\n\n/**\n * Detect a PlRef carried inside a string and hand the decoded value to `onParsed`.\n *\n * A PlRef-as-string is canonical `{...}` optionally wrapped by N `JSON.stringify`\n * passes. Each pass adds a symmetric prefix/suffix made only of `\"` and `\\`\n * chars (the escape padding) of equal length. The regex below is the strict\n * shape gate — non-ref strings fail at the very first character, so we never\n * scan their body. One pass is peeled per call; deeper nesting is unwrapped\n * via recursion in the caller.\n */\nconst EMBEDDED_REF_RE = /^(?<pre>[\\\\\"]*)\\{[\\s\\S]*?__isRef[\\s\\S]*\\}(?<suf>[\\\\\"]*)$/;\n\nfunction unwrapEmbeddedRef(s: string, onParsed: (value: unknown) => void) {\n const c0 = s.charCodeAt(0);\n if (c0 !== 0x7b /* { */ && c0 !== 0x22 /* \" */) return;\n const m = EMBEDDED_REF_RE.exec(s);\n if (m === null) return;\n if (m.groups!.pre.length !== m.groups!.suf.length) return;\n let parsed: unknown;\n try {\n parsed = JSON.parse(s);\n } catch {\n return;\n }\n if (parsed !== s) onParsed(parsed);\n}\n\nfunction recordRef(\n result: BlockUpstreams,\n blockId: string,\n requireEnrichments: boolean,\n allowed?: Set<string>,\n) {\n if (allowed === undefined || allowed.has(blockId)) {\n result.upstreams.add(blockId);\n if (requireEnrichments) result.upstreamsRequiringEnrichments.add(blockId);\n } else result.missingReferences = true;\n}\n"],"mappings":";;AAGA,SAAgB,UAAU,SAAiB,MAAc,oBAAqC;CAC5F,IAAI,oBAAoB,OAAO;EAAE,SAAS;EAAM;EAAS;EAAM;CAAmB;MAC7E,OAAO;EAAE,SAAS;EAAM;EAAS;CAAK;AAC7C;AAEA,SAAgB,uBAAuB,KAA4B;CACjE,OACE,OAAO,QAAQ,YACf,QAAQ,QACR,aAAa,OACb,IAAI,YAAY,QAChB,aAAa,OACb,UAAU;AAEd;;AAYA,SAAgB,yBAAyB,MAAe,SAAuC;CAC7F,MAAM,SAAS;EACb,2BAAW,IAAI,IAAY;EAC3B,+CAA+B,IAAI,IAAY;EAC/C,mBAAmB;CACrB;CACA,uBAAuB,QAAQ,MAAM,OAAO;CAC5C,OAAO;AACT;AAEA,SAAS,uBAAuB,QAAwB,MAAe,SAAuB;CAC5F,MAAM,OAAO,OAAO;CACpB,QAAQ,MAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,aACH;EACF,KAAK;GACH,kBAAkB,OAAiB,WACjC,uBAAuB,QAAQ,QAAQ,OAAO,CAChD;GACA;EAEF,KAAK;GACH,IAAI,SAAS,MAAM;GACnB,IAAI,uBAAuB,IAAI,GAC7B,UAAU,QAAQ,KAAK,SAAS,KAAK,uBAAuB,MAAM,OAAO;QACpE,IAAI,MAAM,QAAQ,IAAI,GAC3B,KAAK,MAAM,SAAS,MAAM,uBAAuB,QAAQ,OAAO,OAAO;QAEvE,KAAK,MAAM,GAAG,UAAU,OAAO,QAAQ,IAAc,GACnD,uBAAuB,QAAQ,OAAO,OAAO;GAGjD;EAEF,SACE,CAAA,GAAA,2BAAA,YAAA,CAAY,IAAI;CACpB;AACF;;;;;;;;;;;AAYA,MAAM,kBAAkB;AAExB,SAAS,kBAAkB,GAAW,UAAoC;CACxE,MAAM,KAAK,EAAE,WAAW,CAAC;CACzB,IAAI,OAAO,OAAgB,OAAO,IAAc;CAChD,MAAM,IAAI,gBAAgB,KAAK,CAAC;CAChC,IAAI,MAAM,MAAM;CAChB,IAAI,EAAE,OAAQ,IAAI,WAAW,EAAE,OAAQ,IAAI,QAAQ;CACnD,IAAI;CACJ,IAAI;EACF,SAAS,KAAK,MAAM,CAAC;CACvB,QAAQ;EACN;CACF;CACA,IAAI,WAAW,GAAG,SAAS,MAAM;AACnC;AAEA,SAAS,UACP,QACA,SACA,oBACA,SACA;CACA,IAAI,YAAY,KAAA,KAAa,QAAQ,IAAI,OAAO,GAAG;EACjD,OAAO,UAAU,IAAI,OAAO;EAC5B,IAAI,oBAAoB,OAAO,8BAA8B,IAAI,OAAO;CAC1E,OAAO,OAAO,oBAAoB;AACpC"}
|
package/dist/model/args.js
CHANGED
|
@@ -79,6 +79,6 @@ function recordRef(result, blockId, requireEnrichments, allowed) {
|
|
|
79
79
|
} else result.missingReferences = true;
|
|
80
80
|
}
|
|
81
81
|
//#endregion
|
|
82
|
-
export { inferAllReferencedBlocks, outputRef };
|
|
82
|
+
export { inferAllReferencedBlocks, isBlockOutputReference, outputRef };
|
|
83
83
|
|
|
84
84
|
//# sourceMappingURL=args.js.map
|
package/dist/model/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","names":[],"sources":["../../src/model/args.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/ts-helpers\";\nimport type { PlRef } from \"@platforma-sdk/model\";\n\nexport function outputRef(blockId: string, name: string, requireEnrichments?: boolean): PlRef {\n if (requireEnrichments) return { __isRef: true, blockId, name, requireEnrichments };\n else return { __isRef: true, blockId, name };\n}\n\nexport function isBlockOutputReference(obj: unknown): obj is PlRef {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"__isRef\" in obj &&\n obj.__isRef === true &&\n \"blockId\" in obj &&\n \"name\" in obj\n );\n}\n\nexport interface BlockUpstreams {\n /** All direct block dependencies */\n upstreams: Set<string>;\n /** Direct block dependencies which enrichments are also required by current block */\n upstreamsRequiringEnrichments: Set<string>;\n /** True if not-allowed references was encountered */\n missingReferences: boolean;\n}\n\n/** Extracts all resource ids referenced by args object. */\nexport function inferAllReferencedBlocks(args: unknown, allowed?: Set<string>): BlockUpstreams {\n const result = {\n upstreams: new Set<string>(),\n upstreamsRequiringEnrichments: new Set<string>(),\n missingReferences: false,\n };\n addAllReferencedBlocks(result, args, allowed);\n return result;\n}\n\nfunction addAllReferencedBlocks(result: BlockUpstreams, node: unknown, allowed?: Set<string>) {\n const type = typeof node;\n switch (type) {\n case \"function\":\n case \"bigint\":\n case \"number\":\n case \"boolean\":\n case \"symbol\":\n case \"undefined\":\n return;\n case \"string\": {\n unwrapEmbeddedRef(node as string, (parsed) =>\n addAllReferencedBlocks(result, parsed, allowed),\n );\n return;\n }\n case \"object\": {\n if (node === null) return;\n if (isBlockOutputReference(node)) {\n recordRef(result, node.blockId, node.requireEnrichments === true, allowed);\n } else if (Array.isArray(node)) {\n for (const child of node) addAllReferencedBlocks(result, child, allowed);\n } else {\n for (const [, child] of Object.entries(node as object))\n addAllReferencedBlocks(result, child, allowed);\n }\n\n return;\n }\n default:\n assertNever(type);\n }\n}\n\n/**\n * Detect a PlRef carried inside a string and hand the decoded value to `onParsed`.\n *\n * A PlRef-as-string is canonical `{...}` optionally wrapped by N `JSON.stringify`\n * passes. Each pass adds a symmetric prefix/suffix made only of `\"` and `\\`\n * chars (the escape padding) of equal length. The regex below is the strict\n * shape gate — non-ref strings fail at the very first character, so we never\n * scan their body. One pass is peeled per call; deeper nesting is unwrapped\n * via recursion in the caller.\n */\nconst EMBEDDED_REF_RE = /^(?<pre>[\\\\\"]*)\\{[\\s\\S]*?__isRef[\\s\\S]*\\}(?<suf>[\\\\\"]*)$/;\n\nfunction unwrapEmbeddedRef(s: string, onParsed: (value: unknown) => void) {\n const c0 = s.charCodeAt(0);\n if (c0 !== 0x7b /* { */ && c0 !== 0x22 /* \" */) return;\n const m = EMBEDDED_REF_RE.exec(s);\n if (m === null) return;\n if (m.groups!.pre.length !== m.groups!.suf.length) return;\n let parsed: unknown;\n try {\n parsed = JSON.parse(s);\n } catch {\n return;\n }\n if (parsed !== s) onParsed(parsed);\n}\n\nfunction recordRef(\n result: BlockUpstreams,\n blockId: string,\n requireEnrichments: boolean,\n allowed?: Set<string>,\n) {\n if (allowed === undefined || allowed.has(blockId)) {\n result.upstreams.add(blockId);\n if (requireEnrichments) result.upstreamsRequiringEnrichments.add(blockId);\n } else result.missingReferences = true;\n}\n"],"mappings":";;AAGA,SAAgB,UAAU,SAAiB,MAAc,oBAAqC;
|
|
1
|
+
{"version":3,"file":"args.js","names":[],"sources":["../../src/model/args.ts"],"sourcesContent":["import { assertNever } from \"@milaboratories/ts-helpers\";\nimport type { PlRef } from \"@platforma-sdk/model\";\n\nexport function outputRef(blockId: string, name: string, requireEnrichments?: boolean): PlRef {\n if (requireEnrichments) return { __isRef: true, blockId, name, requireEnrichments };\n else return { __isRef: true, blockId, name };\n}\n\nexport function isBlockOutputReference(obj: unknown): obj is PlRef {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"__isRef\" in obj &&\n obj.__isRef === true &&\n \"blockId\" in obj &&\n \"name\" in obj\n );\n}\n\nexport interface BlockUpstreams {\n /** All direct block dependencies */\n upstreams: Set<string>;\n /** Direct block dependencies which enrichments are also required by current block */\n upstreamsRequiringEnrichments: Set<string>;\n /** True if not-allowed references was encountered */\n missingReferences: boolean;\n}\n\n/** Extracts all resource ids referenced by args object. */\nexport function inferAllReferencedBlocks(args: unknown, allowed?: Set<string>): BlockUpstreams {\n const result = {\n upstreams: new Set<string>(),\n upstreamsRequiringEnrichments: new Set<string>(),\n missingReferences: false,\n };\n addAllReferencedBlocks(result, args, allowed);\n return result;\n}\n\nfunction addAllReferencedBlocks(result: BlockUpstreams, node: unknown, allowed?: Set<string>) {\n const type = typeof node;\n switch (type) {\n case \"function\":\n case \"bigint\":\n case \"number\":\n case \"boolean\":\n case \"symbol\":\n case \"undefined\":\n return;\n case \"string\": {\n unwrapEmbeddedRef(node as string, (parsed) =>\n addAllReferencedBlocks(result, parsed, allowed),\n );\n return;\n }\n case \"object\": {\n if (node === null) return;\n if (isBlockOutputReference(node)) {\n recordRef(result, node.blockId, node.requireEnrichments === true, allowed);\n } else if (Array.isArray(node)) {\n for (const child of node) addAllReferencedBlocks(result, child, allowed);\n } else {\n for (const [, child] of Object.entries(node as object))\n addAllReferencedBlocks(result, child, allowed);\n }\n\n return;\n }\n default:\n assertNever(type);\n }\n}\n\n/**\n * Detect a PlRef carried inside a string and hand the decoded value to `onParsed`.\n *\n * A PlRef-as-string is canonical `{...}` optionally wrapped by N `JSON.stringify`\n * passes. Each pass adds a symmetric prefix/suffix made only of `\"` and `\\`\n * chars (the escape padding) of equal length. The regex below is the strict\n * shape gate — non-ref strings fail at the very first character, so we never\n * scan their body. One pass is peeled per call; deeper nesting is unwrapped\n * via recursion in the caller.\n */\nconst EMBEDDED_REF_RE = /^(?<pre>[\\\\\"]*)\\{[\\s\\S]*?__isRef[\\s\\S]*\\}(?<suf>[\\\\\"]*)$/;\n\nfunction unwrapEmbeddedRef(s: string, onParsed: (value: unknown) => void) {\n const c0 = s.charCodeAt(0);\n if (c0 !== 0x7b /* { */ && c0 !== 0x22 /* \" */) return;\n const m = EMBEDDED_REF_RE.exec(s);\n if (m === null) return;\n if (m.groups!.pre.length !== m.groups!.suf.length) return;\n let parsed: unknown;\n try {\n parsed = JSON.parse(s);\n } catch {\n return;\n }\n if (parsed !== s) onParsed(parsed);\n}\n\nfunction recordRef(\n result: BlockUpstreams,\n blockId: string,\n requireEnrichments: boolean,\n allowed?: Set<string>,\n) {\n if (allowed === undefined || allowed.has(blockId)) {\n result.upstreams.add(blockId);\n if (requireEnrichments) result.upstreamsRequiringEnrichments.add(blockId);\n } else result.missingReferences = true;\n}\n"],"mappings":";;AAGA,SAAgB,UAAU,SAAiB,MAAc,oBAAqC;CAC5F,IAAI,oBAAoB,OAAO;EAAE,SAAS;EAAM;EAAS;EAAM;CAAmB;MAC7E,OAAO;EAAE,SAAS;EAAM;EAAS;CAAK;AAC7C;AAEA,SAAgB,uBAAuB,KAA4B;CACjE,OACE,OAAO,QAAQ,YACf,QAAQ,QACR,aAAa,OACb,IAAI,YAAY,QAChB,aAAa,OACb,UAAU;AAEd;;AAYA,SAAgB,yBAAyB,MAAe,SAAuC;CAC7F,MAAM,SAAS;EACb,2BAAW,IAAI,IAAY;EAC3B,+CAA+B,IAAI,IAAY;EAC/C,mBAAmB;CACrB;CACA,uBAAuB,QAAQ,MAAM,OAAO;CAC5C,OAAO;AACT;AAEA,SAAS,uBAAuB,QAAwB,MAAe,SAAuB;CAC5F,MAAM,OAAO,OAAO;CACpB,QAAQ,MAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,aACH;EACF,KAAK;GACH,kBAAkB,OAAiB,WACjC,uBAAuB,QAAQ,QAAQ,OAAO,CAChD;GACA;EAEF,KAAK;GACH,IAAI,SAAS,MAAM;GACnB,IAAI,uBAAuB,IAAI,GAC7B,UAAU,QAAQ,KAAK,SAAS,KAAK,uBAAuB,MAAM,OAAO;QACpE,IAAI,MAAM,QAAQ,IAAI,GAC3B,KAAK,MAAM,SAAS,MAAM,uBAAuB,QAAQ,OAAO,OAAO;QAEvE,KAAK,MAAM,GAAG,UAAU,OAAO,QAAQ,IAAc,GACnD,uBAAuB,QAAQ,OAAO,OAAO;GAGjD;EAEF,SACE,YAAY,IAAI;CACpB;AACF;;;;;;;;;;;AAYA,MAAM,kBAAkB;AAExB,SAAS,kBAAkB,GAAW,UAAoC;CACxE,MAAM,KAAK,EAAE,WAAW,CAAC;CACzB,IAAI,OAAO,OAAgB,OAAO,IAAc;CAChD,MAAM,IAAI,gBAAgB,KAAK,CAAC;CAChC,IAAI,MAAM,MAAM;CAChB,IAAI,EAAE,OAAQ,IAAI,WAAW,EAAE,OAAQ,IAAI,QAAQ;CACnD,IAAI;CACJ,IAAI;EACF,SAAS,KAAK,MAAM,CAAC;CACvB,QAAQ;EACN;CACF;CACA,IAAI,WAAW,GAAG,SAAS,MAAM;AACnC;AAEA,SAAS,UACP,QACA,SACA,oBACA,SACA;CACA,IAAI,YAAY,KAAA,KAAa,QAAQ,IAAI,OAAO,GAAG;EACjD,OAAO,UAAU,IAAI,OAAO;EAC5B,IAAI,oBAAoB,OAAO,8BAA8B,IAAI,OAAO;CAC1E,OAAO,OAAO,oBAAoB;AACpC"}
|
|
@@ -7,8 +7,13 @@ const FrontendFromFolderResourceType = {
|
|
|
7
7
|
name: "Frontend/FromFolder",
|
|
8
8
|
version: "1"
|
|
9
9
|
};
|
|
10
|
+
const FrontendFromLocalTgzResourceType = {
|
|
11
|
+
name: "Frontend/FromLocalTgz",
|
|
12
|
+
version: "1"
|
|
13
|
+
};
|
|
10
14
|
//#endregion
|
|
11
15
|
exports.FrontendFromFolderResourceType = FrontendFromFolderResourceType;
|
|
16
|
+
exports.FrontendFromLocalTgzResourceType = FrontendFromLocalTgzResourceType;
|
|
12
17
|
exports.FrontendFromUrlResourceType = FrontendFromUrlResourceType;
|
|
13
18
|
|
|
14
19
|
//# sourceMappingURL=block_pack_spec.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_pack_spec.cjs","names":[],"sources":["../../src/model/block_pack_spec.ts"],"sourcesContent":["import type { CachedTemplate, ExplicitTemplate, PreparedTemplate } from \"./template_spec\";\nimport type { ResourceType } from \"@milaboratories/pl-client\";\nimport type { BlockConfigContainer } from \"@platforma-sdk/model\";\nimport type { BlockPackSpec } from \"@milaboratories/pl-model-middle-layer\";\n\nexport type FrontendSpec = FrontendFromUrl | FrontendFromFolder;\n\nexport interface FrontendFromUrlData {\n url: string;\n}\n\nexport const FrontendFromUrlResourceType: ResourceType = { name: \"Frontend/FromUrl\", version: \"1\" };\n\n/** Directs user of the block pack to download the contents from the URL\n * outside the pl infrastructure. */\nexport interface FrontendFromUrl extends FrontendFromUrlData {\n type: \"url\";\n}\n\nexport interface FrontendFromFolderData {\n path: string;\n /** HMAC signature of the path using local secret encoded as hex. */\n signature: string;\n}\n\nexport const FrontendFromFolderResourceType: ResourceType = {\n name: \"Frontend/FromFolder\",\n version: \"1\",\n};\n\n/** Directs user of the block pack to load frontend from specific local\n * folder. Signature allows to confirm that this is the same client who\n * added the resource. */\nexport interface FrontendFromFolder extends FrontendFromFolderData {\n type: \"local\";\n}\n\n/** Direct instructions to create block-pack from client. Currently, this\n * is the only block-pack spec that can be directly materialized. */\nexport interface BlockPackExplicit {\n type: \"explicit\";\n template: ExplicitTemplate;\n config: BlockConfigContainer;\n frontend: FrontendSpec;\n source: BlockPackSpec;\n}\n\n/** Block-pack spec that can be materialized in pl. */\nexport type BlockPackSpecPrepared = {\n type: \"prepared\";\n template: PreparedTemplate | CachedTemplate;\n config: BlockConfigContainer;\n frontend: FrontendSpec;\n source: BlockPackSpec;\n /** Backend-side runtime capabilities the block requires at install time.\n * Derived from the parsed workflow template by\n * `requiredCapabilitiesFromTemplate` during `BlockPackPreparer.prepare`.\n * `Project.addBlock` matches this list against `pl.serverInfo.capabilities`\n * and refuses to install when anything is missing. */\n requiredCapabilities?: string[];\n};\n\n/** All block-pack specs. */\nexport type BlockPackSpecAny = BlockPackSpecPrepared | BlockPackExplicit | BlockPackSpec;\n"],"mappings":";AAWA,MAAa,8BAA4C;CAAE,MAAM;CAAoB,SAAS;
|
|
1
|
+
{"version":3,"file":"block_pack_spec.cjs","names":[],"sources":["../../src/model/block_pack_spec.ts"],"sourcesContent":["import type { CachedTemplate, ExplicitTemplate, PreparedTemplate } from \"./template_spec\";\nimport type { ResourceType } from \"@milaboratories/pl-client\";\nimport type { BlockConfigContainer } from \"@platforma-sdk/model\";\nimport type { BlockPackSpec } from \"@milaboratories/pl-model-middle-layer\";\n\nexport type FrontendSpec = FrontendFromUrl | FrontendFromFolder | FrontendFromLocalTgz;\n\nexport interface FrontendFromUrlData {\n url: string;\n}\n\nexport const FrontendFromUrlResourceType: ResourceType = { name: \"Frontend/FromUrl\", version: \"1\" };\n\n/** Directs user of the block pack to download the contents from the URL\n * outside the pl infrastructure. */\nexport interface FrontendFromUrl extends FrontendFromUrlData {\n type: \"url\";\n}\n\nexport interface FrontendFromFolderData {\n path: string;\n /** HMAC signature of the path using local secret encoded as hex. */\n signature: string;\n}\n\nexport const FrontendFromFolderResourceType: ResourceType = {\n name: \"Frontend/FromFolder\",\n version: \"1\",\n};\n\n/** Directs user of the block pack to load frontend from specific local\n * folder. Signature allows to confirm that this is the same client who\n * added the resource. */\nexport interface FrontendFromFolder extends FrontendFromFolderData {\n type: \"local\";\n}\n\nexport interface FrontendFromLocalTgzData {\n /** Absolute path to a local `ui.tgz` archive. */\n path: string;\n /** Modification stamp of the source block; part of the cache key so the\n * unpacked UI is re-derived when the block changes. */\n mtime: string;\n /** HMAC signature of `path + \":\" + mtime` using local secret, encoded as hex. */\n signature: string;\n}\n\nexport const FrontendFromLocalTgzResourceType: ResourceType = {\n name: \"Frontend/FromLocalTgz\",\n version: \"1\",\n};\n\n/** Directs user of the block pack to lazily unpack the frontend from a local\n * `ui.tgz` archive via the download driver — so it inherits the driver's\n * usage-tracking and space recycling (unlike `local`, which serves a folder\n * path directly). Used by the `from-pack-v2` loader for npm-consumed blocks. */\nexport interface FrontendFromLocalTgz extends FrontendFromLocalTgzData {\n type: \"local-tgz\";\n}\n\n/** Direct instructions to create block-pack from client. Currently, this\n * is the only block-pack spec that can be directly materialized. */\nexport interface BlockPackExplicit {\n type: \"explicit\";\n template: ExplicitTemplate;\n config: BlockConfigContainer;\n frontend: FrontendSpec;\n source: BlockPackSpec;\n}\n\n/** Block-pack spec that can be materialized in pl. */\nexport type BlockPackSpecPrepared = {\n type: \"prepared\";\n template: PreparedTemplate | CachedTemplate;\n config: BlockConfigContainer;\n frontend: FrontendSpec;\n source: BlockPackSpec;\n /** Backend-side runtime capabilities the block requires at install time.\n * Derived from the parsed workflow template by\n * `requiredCapabilitiesFromTemplate` during `BlockPackPreparer.prepare`.\n * `Project.addBlock` matches this list against `pl.serverInfo.capabilities`\n * and refuses to install when anything is missing. */\n requiredCapabilities?: string[];\n};\n\n/** All block-pack specs. */\nexport type BlockPackSpecAny = BlockPackSpecPrepared | BlockPackExplicit | BlockPackSpec;\n"],"mappings":";AAWA,MAAa,8BAA4C;CAAE,MAAM;CAAoB,SAAS;AAAI;AAclG,MAAa,iCAA+C;CAC1D,MAAM;CACN,SAAS;AACX;AAmBA,MAAa,mCAAiD;CAC5D,MAAM;CACN,SAAS;AACX"}
|
|
@@ -4,7 +4,7 @@ import { BlockPackSpec } from "@milaboratories/pl-model-middle-layer";
|
|
|
4
4
|
import { ResourceType } from "@milaboratories/pl-client";
|
|
5
5
|
|
|
6
6
|
//#region src/model/block_pack_spec.d.ts
|
|
7
|
-
type FrontendSpec = FrontendFromUrl | FrontendFromFolder;
|
|
7
|
+
type FrontendSpec = FrontendFromUrl | FrontendFromFolder | FrontendFromLocalTgz;
|
|
8
8
|
interface FrontendFromUrlData {
|
|
9
9
|
url: string;
|
|
10
10
|
}
|
|
@@ -26,6 +26,23 @@ declare const FrontendFromFolderResourceType: ResourceType;
|
|
|
26
26
|
interface FrontendFromFolder extends FrontendFromFolderData {
|
|
27
27
|
type: "local";
|
|
28
28
|
}
|
|
29
|
+
interface FrontendFromLocalTgzData {
|
|
30
|
+
/** Absolute path to a local `ui.tgz` archive. */
|
|
31
|
+
path: string;
|
|
32
|
+
/** Modification stamp of the source block; part of the cache key so the
|
|
33
|
+
* unpacked UI is re-derived when the block changes. */
|
|
34
|
+
mtime: string;
|
|
35
|
+
/** HMAC signature of `path + ":" + mtime` using local secret, encoded as hex. */
|
|
36
|
+
signature: string;
|
|
37
|
+
}
|
|
38
|
+
declare const FrontendFromLocalTgzResourceType: ResourceType;
|
|
39
|
+
/** Directs user of the block pack to lazily unpack the frontend from a local
|
|
40
|
+
* `ui.tgz` archive via the download driver — so it inherits the driver's
|
|
41
|
+
* usage-tracking and space recycling (unlike `local`, which serves a folder
|
|
42
|
+
* path directly). Used by the `from-pack-v2` loader for npm-consumed blocks. */
|
|
43
|
+
interface FrontendFromLocalTgz extends FrontendFromLocalTgzData {
|
|
44
|
+
type: "local-tgz";
|
|
45
|
+
}
|
|
29
46
|
/** Direct instructions to create block-pack from client. Currently, this
|
|
30
47
|
* is the only block-pack spec that can be directly materialized. */
|
|
31
48
|
interface BlockPackExplicit {
|
|
@@ -52,5 +69,5 @@ type BlockPackSpecPrepared = {
|
|
|
52
69
|
/** All block-pack specs. */
|
|
53
70
|
type BlockPackSpecAny = BlockPackSpecPrepared | BlockPackExplicit | BlockPackSpec;
|
|
54
71
|
//#endregion
|
|
55
|
-
export { BlockPackExplicit, BlockPackSpecAny, BlockPackSpecPrepared, FrontendFromFolder, FrontendFromFolderData, FrontendFromFolderResourceType, FrontendFromUrl, FrontendFromUrlData, FrontendFromUrlResourceType, FrontendSpec };
|
|
72
|
+
export { BlockPackExplicit, BlockPackSpecAny, BlockPackSpecPrepared, FrontendFromFolder, FrontendFromFolderData, FrontendFromFolderResourceType, FrontendFromLocalTgz, FrontendFromLocalTgzData, FrontendFromLocalTgzResourceType, FrontendFromUrl, FrontendFromUrlData, FrontendFromUrlResourceType, FrontendSpec };
|
|
56
73
|
//# sourceMappingURL=block_pack_spec.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_pack_spec.d.ts","names":[],"sources":["../../src/model/block_pack_spec.ts"],"mappings":";;;;;;KAKY,YAAA,GAAe,eAAA,GAAkB,kBAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"block_pack_spec.d.ts","names":[],"sources":["../../src/model/block_pack_spec.ts"],"mappings":";;;;;;KAKY,YAAA,GAAe,eAAA,GAAkB,kBAAA,GAAqB,oBAAA;AAAA,UAEjD,mBAAA;EACf,GAAG;AAAA;AAAA,cAGQ,2BAAA,EAA6B,YAAyD;;;UAIlF,eAAA,SAAwB,mBAAmB;EAC1D,IAAI;AAAA;AAAA,UAGW,sBAAA;EACf,IAAA;EAfgE;EAiBhE,SAAS;AAAA;AAAA,cAGE,8BAAA,EAAgC,YAG5C;;;;UAKgB,kBAAA,SAA2B,sBAAsB;EAChE,IAAI;AAAA;AAAA,UAGW,wBAAA;EA1BkF;EA4BjG,IAAA;EAxBe;;EA2Bf,KAAA;EA3BuC;EA6BvC,SAAA;AAAA;AAAA,cAGW,gCAAA,EAAkC,YAG9C;;;AA5BU;AAGX;UA+BiB,oBAAA,SAA6B,wBAAwB;EACpE,IAAI;AAAA;AA7BL;AAKD;AALC,UAkCgB,iBAAA;EACf,IAAA;EACA,QAAA,EAAU,gBAAA;EACV,MAAA,EAAQ,oBAAA;EACR,QAAA,EAAU,YAAA;EACV,MAAA,EAAQ,aAAA;AAAA;;KAIE,qBAAA;EACV,IAAA;EACA,QAAA,EAAU,gBAAA,GAAmB,cAAA;EAC7B,MAAA,EAAQ,oBAAA;EACR,QAAA,EAAU,YAAA;EACV,MAAA,EAAQ,aAAA;EA1BT;;;AAAA;AAMD;EA0BE,oBAAA;AAAA;;KAIU,gBAAA,GAAmB,qBAAA,GAAwB,iBAAA,GAAoB,aAAA"}
|
|
@@ -7,7 +7,11 @@ const FrontendFromFolderResourceType = {
|
|
|
7
7
|
name: "Frontend/FromFolder",
|
|
8
8
|
version: "1"
|
|
9
9
|
};
|
|
10
|
+
const FrontendFromLocalTgzResourceType = {
|
|
11
|
+
name: "Frontend/FromLocalTgz",
|
|
12
|
+
version: "1"
|
|
13
|
+
};
|
|
10
14
|
//#endregion
|
|
11
|
-
export { FrontendFromFolderResourceType, FrontendFromUrlResourceType };
|
|
15
|
+
export { FrontendFromFolderResourceType, FrontendFromLocalTgzResourceType, FrontendFromUrlResourceType };
|
|
12
16
|
|
|
13
17
|
//# sourceMappingURL=block_pack_spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_pack_spec.js","names":[],"sources":["../../src/model/block_pack_spec.ts"],"sourcesContent":["import type { CachedTemplate, ExplicitTemplate, PreparedTemplate } from \"./template_spec\";\nimport type { ResourceType } from \"@milaboratories/pl-client\";\nimport type { BlockConfigContainer } from \"@platforma-sdk/model\";\nimport type { BlockPackSpec } from \"@milaboratories/pl-model-middle-layer\";\n\nexport type FrontendSpec = FrontendFromUrl | FrontendFromFolder;\n\nexport interface FrontendFromUrlData {\n url: string;\n}\n\nexport const FrontendFromUrlResourceType: ResourceType = { name: \"Frontend/FromUrl\", version: \"1\" };\n\n/** Directs user of the block pack to download the contents from the URL\n * outside the pl infrastructure. */\nexport interface FrontendFromUrl extends FrontendFromUrlData {\n type: \"url\";\n}\n\nexport interface FrontendFromFolderData {\n path: string;\n /** HMAC signature of the path using local secret encoded as hex. */\n signature: string;\n}\n\nexport const FrontendFromFolderResourceType: ResourceType = {\n name: \"Frontend/FromFolder\",\n version: \"1\",\n};\n\n/** Directs user of the block pack to load frontend from specific local\n * folder. Signature allows to confirm that this is the same client who\n * added the resource. */\nexport interface FrontendFromFolder extends FrontendFromFolderData {\n type: \"local\";\n}\n\n/** Direct instructions to create block-pack from client. Currently, this\n * is the only block-pack spec that can be directly materialized. */\nexport interface BlockPackExplicit {\n type: \"explicit\";\n template: ExplicitTemplate;\n config: BlockConfigContainer;\n frontend: FrontendSpec;\n source: BlockPackSpec;\n}\n\n/** Block-pack spec that can be materialized in pl. */\nexport type BlockPackSpecPrepared = {\n type: \"prepared\";\n template: PreparedTemplate | CachedTemplate;\n config: BlockConfigContainer;\n frontend: FrontendSpec;\n source: BlockPackSpec;\n /** Backend-side runtime capabilities the block requires at install time.\n * Derived from the parsed workflow template by\n * `requiredCapabilitiesFromTemplate` during `BlockPackPreparer.prepare`.\n * `Project.addBlock` matches this list against `pl.serverInfo.capabilities`\n * and refuses to install when anything is missing. */\n requiredCapabilities?: string[];\n};\n\n/** All block-pack specs. */\nexport type BlockPackSpecAny = BlockPackSpecPrepared | BlockPackExplicit | BlockPackSpec;\n"],"mappings":";AAWA,MAAa,8BAA4C;CAAE,MAAM;CAAoB,SAAS;
|
|
1
|
+
{"version":3,"file":"block_pack_spec.js","names":[],"sources":["../../src/model/block_pack_spec.ts"],"sourcesContent":["import type { CachedTemplate, ExplicitTemplate, PreparedTemplate } from \"./template_spec\";\nimport type { ResourceType } from \"@milaboratories/pl-client\";\nimport type { BlockConfigContainer } from \"@platforma-sdk/model\";\nimport type { BlockPackSpec } from \"@milaboratories/pl-model-middle-layer\";\n\nexport type FrontendSpec = FrontendFromUrl | FrontendFromFolder | FrontendFromLocalTgz;\n\nexport interface FrontendFromUrlData {\n url: string;\n}\n\nexport const FrontendFromUrlResourceType: ResourceType = { name: \"Frontend/FromUrl\", version: \"1\" };\n\n/** Directs user of the block pack to download the contents from the URL\n * outside the pl infrastructure. */\nexport interface FrontendFromUrl extends FrontendFromUrlData {\n type: \"url\";\n}\n\nexport interface FrontendFromFolderData {\n path: string;\n /** HMAC signature of the path using local secret encoded as hex. */\n signature: string;\n}\n\nexport const FrontendFromFolderResourceType: ResourceType = {\n name: \"Frontend/FromFolder\",\n version: \"1\",\n};\n\n/** Directs user of the block pack to load frontend from specific local\n * folder. Signature allows to confirm that this is the same client who\n * added the resource. */\nexport interface FrontendFromFolder extends FrontendFromFolderData {\n type: \"local\";\n}\n\nexport interface FrontendFromLocalTgzData {\n /** Absolute path to a local `ui.tgz` archive. */\n path: string;\n /** Modification stamp of the source block; part of the cache key so the\n * unpacked UI is re-derived when the block changes. */\n mtime: string;\n /** HMAC signature of `path + \":\" + mtime` using local secret, encoded as hex. */\n signature: string;\n}\n\nexport const FrontendFromLocalTgzResourceType: ResourceType = {\n name: \"Frontend/FromLocalTgz\",\n version: \"1\",\n};\n\n/** Directs user of the block pack to lazily unpack the frontend from a local\n * `ui.tgz` archive via the download driver — so it inherits the driver's\n * usage-tracking and space recycling (unlike `local`, which serves a folder\n * path directly). Used by the `from-pack-v2` loader for npm-consumed blocks. */\nexport interface FrontendFromLocalTgz extends FrontendFromLocalTgzData {\n type: \"local-tgz\";\n}\n\n/** Direct instructions to create block-pack from client. Currently, this\n * is the only block-pack spec that can be directly materialized. */\nexport interface BlockPackExplicit {\n type: \"explicit\";\n template: ExplicitTemplate;\n config: BlockConfigContainer;\n frontend: FrontendSpec;\n source: BlockPackSpec;\n}\n\n/** Block-pack spec that can be materialized in pl. */\nexport type BlockPackSpecPrepared = {\n type: \"prepared\";\n template: PreparedTemplate | CachedTemplate;\n config: BlockConfigContainer;\n frontend: FrontendSpec;\n source: BlockPackSpec;\n /** Backend-side runtime capabilities the block requires at install time.\n * Derived from the parsed workflow template by\n * `requiredCapabilitiesFromTemplate` during `BlockPackPreparer.prepare`.\n * `Project.addBlock` matches this list against `pl.serverInfo.capabilities`\n * and refuses to install when anything is missing. */\n requiredCapabilities?: string[];\n};\n\n/** All block-pack specs. */\nexport type BlockPackSpecAny = BlockPackSpecPrepared | BlockPackExplicit | BlockPackSpec;\n"],"mappings":";AAWA,MAAa,8BAA4C;CAAE,MAAM;CAAoB,SAAS;AAAI;AAclG,MAAa,iCAA+C;CAC1D,MAAM;CACN,SAAS;AACX;AAmBA,MAAa,mCAAiD;CAC5D,MAAM;CACN,SAAS;AACX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend.d.ts","names":[],"sources":["../../src/model/frontend.ts"],"mappings":";;AAGA;;UAAiB,YAAA;EAEN;EAAA,SAAA,GAAA;;WAGA,
|
|
1
|
+
{"version":3,"file":"frontend.d.ts","names":[],"sources":["../../src/model/frontend.ts"],"mappings":";;AAGA;;UAAiB,YAAA;EAEN;EAAA,SAAA,GAAA;;WAGA,UAAU;AAAA"}
|
package/dist/model/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { BlockArgsAuthorKeyPrefix, ProjectCreatedTimestamp, ProjectField, ProjectId, ProjectLastModifiedTimestamp, ProjectListEntry, ProjectMetaKey, ProjectResourceType, ProjectStructureAuthorKey, ProjectStructureKey, SchemaVersionCurrent, SchemaVersionKey } from "./project_model.js";
|
|
2
|
-
import { BlockPackExplicit, BlockPackSpecAny, BlockPackSpecPrepared, FrontendFromFolder, FrontendFromFolderData, FrontendFromFolderResourceType, FrontendFromUrl, FrontendFromUrlData, FrontendFromUrlResourceType, FrontendSpec } from "./block_pack_spec.js";
|
|
2
|
+
import { BlockPackExplicit, BlockPackSpecAny, BlockPackSpecPrepared, FrontendFromFolder, FrontendFromFolderData, FrontendFromFolderResourceType, FrontendFromLocalTgz, FrontendFromLocalTgzData, FrontendFromLocalTgzResourceType, FrontendFromUrl, FrontendFromUrlData, FrontendFromUrlResourceType, FrontendSpec } from "./block_pack_spec.js";
|
|
3
|
+
export { BlockArgsAuthorKeyPrefix, BlockPackExplicit, BlockPackSpecAny, BlockPackSpecPrepared, FrontendFromFolder, FrontendFromFolderData, FrontendFromFolderResourceType, FrontendFromLocalTgz, FrontendFromLocalTgzData, FrontendFromLocalTgzResourceType, FrontendFromUrl, FrontendFromUrlData, FrontendFromUrlResourceType, FrontendSpec, ProjectCreatedTimestamp, type ProjectField, ProjectLastModifiedTimestamp, type ProjectListEntry, ProjectMetaKey, ProjectResourceType, ProjectStructureAuthorKey, ProjectStructureKey, SchemaVersionCurrent, SchemaVersionKey };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
const require_index = require("../debug/index.cjs");
|
|
3
2
|
const require_index$1 = require("../js_render/index.cjs");
|
|
4
3
|
let _platforma_sdk_model = require("@platforma-sdk/model");
|
|
@@ -6,6 +5,8 @@ let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
|
|
|
6
5
|
let lru_cache = require("lru-cache");
|
|
7
6
|
//#region src/model/project_helper.ts
|
|
8
7
|
var ProjectHelper = class {
|
|
8
|
+
quickJs;
|
|
9
|
+
logger;
|
|
9
10
|
enrichmentTargetsCache = new lru_cache.LRUCache({
|
|
10
11
|
max: 256,
|
|
11
12
|
memoMethod: (_key, _value, { context }) => {
|