@milaboratories/pl-middle-layer 1.55.1 → 1.55.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/dist/_virtual/{_@oxc-project_runtime@0.114.0 → _@oxc-project_runtime@0.123.0}/helpers/usingCtx.cjs +2 -4
  2. package/dist/_virtual/{_@oxc-project_runtime@0.114.0 → _@oxc-project_runtime@0.123.0}/helpers/usingCtx.js +2 -3
  3. package/dist/_virtual/_rolldown/runtime.cjs +7 -13
  4. package/dist/block_registry/index.cjs +3 -3
  5. package/dist/block_registry/index.js +3 -3
  6. package/dist/block_registry/registry-v2-provider.cjs +2 -3
  7. package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
  8. package/dist/block_registry/registry-v2-provider.d.ts.map +1 -0
  9. package/dist/block_registry/registry-v2-provider.js +1 -2
  10. package/dist/block_registry/registry-v2-provider.js.map +1 -1
  11. package/dist/block_registry/registry.cjs +3 -4
  12. package/dist/block_registry/registry.cjs.map +1 -1
  13. package/dist/block_registry/registry.d.ts.map +1 -0
  14. package/dist/block_registry/registry.js +1 -2
  15. package/dist/block_registry/registry.js.map +1 -1
  16. package/dist/block_registry/watcher.cjs +3 -4
  17. package/dist/block_registry/watcher.cjs.map +1 -1
  18. package/dist/block_registry/watcher.d.ts.map +1 -0
  19. package/dist/block_registry/watcher.js +1 -2
  20. package/dist/block_registry/watcher.js.map +1 -1
  21. package/dist/block_registry/well_known_registries.cjs +1 -2
  22. package/dist/block_registry/well_known_registries.cjs.map +1 -1
  23. package/dist/block_registry/well_known_registries.d.ts.map +1 -0
  24. package/dist/block_registry/well_known_registries.js +1 -1
  25. package/dist/cfg_render/executor.cjs +4 -5
  26. package/dist/cfg_render/executor.cjs.map +1 -1
  27. package/dist/cfg_render/executor.js +1 -2
  28. package/dist/cfg_render/executor.js.map +1 -1
  29. package/dist/cfg_render/renderer.cjs +4 -5
  30. package/dist/cfg_render/renderer.cjs.map +1 -1
  31. package/dist/cfg_render/renderer.js +1 -2
  32. package/dist/cfg_render/renderer.js.map +1 -1
  33. package/dist/cfg_render/traverse.cjs +2 -3
  34. package/dist/cfg_render/traverse.cjs.map +1 -1
  35. package/dist/cfg_render/traverse.js +1 -2
  36. package/dist/cfg_render/traverse.js.map +1 -1
  37. package/dist/cfg_render/util.cjs +2 -3
  38. package/dist/cfg_render/util.cjs.map +1 -1
  39. package/dist/cfg_render/util.js +1 -2
  40. package/dist/cfg_render/util.js.map +1 -1
  41. package/dist/debug/index.cjs +1 -2
  42. package/dist/debug/index.cjs.map +1 -1
  43. package/dist/debug/index.js +1 -1
  44. package/dist/debug/index.js.map +1 -1
  45. package/dist/dev_env/index.cjs +3 -4
  46. package/dist/dev_env/index.cjs.map +1 -1
  47. package/dist/dev_env/index.js +1 -2
  48. package/dist/dev_env/index.js.map +1 -1
  49. package/dist/dev_env/util.cjs +2 -3
  50. package/dist/dev_env/util.cjs.map +1 -1
  51. package/dist/dev_env/util.js +1 -2
  52. package/dist/dev_env/util.js.map +1 -1
  53. package/dist/index.cjs +48 -44
  54. package/dist/index.d.ts +0 -3
  55. package/dist/index.js +5 -10
  56. package/dist/js_render/computable_context.cjs +5 -6
  57. package/dist/js_render/computable_context.cjs.map +1 -1
  58. package/dist/js_render/computable_context.js +2 -3
  59. package/dist/js_render/computable_context.js.map +1 -1
  60. package/dist/js_render/context.cjs +3 -4
  61. package/dist/js_render/context.cjs.map +1 -1
  62. package/dist/js_render/context.js +1 -2
  63. package/dist/js_render/context.js.map +1 -1
  64. package/dist/js_render/index.cjs +4 -5
  65. package/dist/js_render/index.cjs.map +1 -1
  66. package/dist/js_render/index.js +1 -2
  67. package/dist/js_render/index.js.map +1 -1
  68. package/dist/js_render/service_injectors.cjs +3 -4
  69. package/dist/js_render/service_injectors.cjs.map +1 -1
  70. package/dist/js_render/service_injectors.js +2 -3
  71. package/dist/js_render/service_injectors.js.map +1 -1
  72. package/dist/middle_layer/active_cfg.cjs +7 -8
  73. package/dist/middle_layer/active_cfg.cjs.map +1 -1
  74. package/dist/middle_layer/active_cfg.js +1 -2
  75. package/dist/middle_layer/active_cfg.js.map +1 -1
  76. package/dist/middle_layer/block.cjs +8 -9
  77. package/dist/middle_layer/block.cjs.map +1 -1
  78. package/dist/middle_layer/block.js +1 -2
  79. package/dist/middle_layer/block.js.map +1 -1
  80. package/dist/middle_layer/block_ctx.cjs +5 -6
  81. package/dist/middle_layer/block_ctx.cjs.map +1 -1
  82. package/dist/middle_layer/block_ctx.js +1 -2
  83. package/dist/middle_layer/block_ctx.js.map +1 -1
  84. package/dist/middle_layer/block_ctx_unsafe.cjs +1 -2
  85. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
  86. package/dist/middle_layer/block_ctx_unsafe.js +1 -1
  87. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -1
  88. package/dist/middle_layer/driver_kit.cjs +5 -6
  89. package/dist/middle_layer/driver_kit.cjs.map +1 -1
  90. package/dist/middle_layer/driver_kit.d.ts +0 -1
  91. package/dist/middle_layer/driver_kit.d.ts.map +1 -0
  92. package/dist/middle_layer/driver_kit.js +1 -2
  93. package/dist/middle_layer/driver_kit.js.map +1 -1
  94. package/dist/middle_layer/frontend_path.cjs +6 -7
  95. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  96. package/dist/middle_layer/frontend_path.js +1 -2
  97. package/dist/middle_layer/frontend_path.js.map +1 -1
  98. package/dist/middle_layer/index.cjs +5 -5
  99. package/dist/middle_layer/index.js +5 -5
  100. package/dist/middle_layer/middle_layer.cjs +15 -16
  101. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  102. package/dist/middle_layer/middle_layer.d.ts +0 -2
  103. package/dist/middle_layer/middle_layer.d.ts.map +1 -0
  104. package/dist/middle_layer/middle_layer.js +1 -2
  105. package/dist/middle_layer/middle_layer.js.map +1 -1
  106. package/dist/middle_layer/navigation_states.cjs +2 -3
  107. package/dist/middle_layer/navigation_states.cjs.map +1 -1
  108. package/dist/middle_layer/navigation_states.js +1 -2
  109. package/dist/middle_layer/navigation_states.js.map +1 -1
  110. package/dist/middle_layer/ops.cjs +5 -7
  111. package/dist/middle_layer/ops.cjs.map +1 -1
  112. package/dist/middle_layer/ops.d.ts +0 -1
  113. package/dist/middle_layer/ops.d.ts.map +1 -0
  114. package/dist/middle_layer/ops.js +1 -2
  115. package/dist/middle_layer/ops.js.map +1 -1
  116. package/dist/middle_layer/project.cjs +12 -13
  117. package/dist/middle_layer/project.cjs.map +1 -1
  118. package/dist/middle_layer/project.d.ts +0 -1
  119. package/dist/middle_layer/project.d.ts.map +1 -0
  120. package/dist/middle_layer/project.js +1 -2
  121. package/dist/middle_layer/project.js.map +1 -1
  122. package/dist/middle_layer/project_list.cjs +3 -4
  123. package/dist/middle_layer/project_list.cjs.map +1 -1
  124. package/dist/middle_layer/project_list.d.ts +0 -4
  125. package/dist/middle_layer/project_list.d.ts.map +1 -0
  126. package/dist/middle_layer/project_list.js +1 -2
  127. package/dist/middle_layer/project_list.js.map +1 -1
  128. package/dist/middle_layer/project_overview.cjs +9 -10
  129. package/dist/middle_layer/project_overview.cjs.map +1 -1
  130. package/dist/middle_layer/project_overview.js +1 -2
  131. package/dist/middle_layer/project_overview.js.map +1 -1
  132. package/dist/middle_layer/project_overview_light.cjs +4 -5
  133. package/dist/middle_layer/project_overview_light.cjs.map +1 -1
  134. package/dist/middle_layer/project_overview_light.js +1 -2
  135. package/dist/middle_layer/project_overview_light.js.map +1 -1
  136. package/dist/middle_layer/render.cjs +5 -6
  137. package/dist/middle_layer/render.cjs.map +1 -1
  138. package/dist/middle_layer/render.js +1 -2
  139. package/dist/middle_layer/render.js.map +1 -1
  140. package/dist/middle_layer/types.d.ts.map +1 -0
  141. package/dist/middle_layer/util.cjs +4 -5
  142. package/dist/middle_layer/util.cjs.map +1 -1
  143. package/dist/middle_layer/util.js +1 -2
  144. package/dist/middle_layer/util.js.map +1 -1
  145. package/dist/model/args.cjs +2 -3
  146. package/dist/model/args.cjs.map +1 -1
  147. package/dist/model/args.js +1 -2
  148. package/dist/model/args.js.map +1 -1
  149. package/dist/model/block_pack_spec.cjs +1 -2
  150. package/dist/model/block_pack_spec.cjs.map +1 -1
  151. package/dist/model/block_pack_spec.d.ts.map +1 -0
  152. package/dist/model/block_pack_spec.js +1 -1
  153. package/dist/model/frontend.d.ts.map +1 -0
  154. package/dist/model/project_helper.cjs +3 -4
  155. package/dist/model/project_helper.cjs.map +1 -1
  156. package/dist/model/project_helper.d.ts.map +1 -0
  157. package/dist/model/project_helper.js +1 -2
  158. package/dist/model/project_helper.js.map +1 -1
  159. package/dist/model/project_model.cjs +1 -6
  160. package/dist/model/project_model.cjs.map +1 -1
  161. package/dist/model/project_model.d.ts +0 -1
  162. package/dist/model/project_model.d.ts.map +1 -0
  163. package/dist/model/project_model.js +2 -4
  164. package/dist/model/project_model.js.map +1 -1
  165. package/dist/model/project_model_util.cjs +2 -3
  166. package/dist/model/project_model_util.cjs.map +1 -1
  167. package/dist/model/project_model_util.js +1 -2
  168. package/dist/model/project_model_util.js.map +1 -1
  169. package/dist/model/project_model_v1.cjs +1 -5
  170. package/dist/model/project_model_v1.cjs.map +1 -1
  171. package/dist/model/project_model_v1.js +2 -4
  172. package/dist/model/project_model_v1.js.map +1 -1
  173. package/dist/model/template_spec.d.ts.map +1 -0
  174. package/dist/mutator/block-pack/block_pack.cjs +9 -10
  175. package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
  176. package/dist/mutator/block-pack/block_pack.d.ts +0 -1
  177. package/dist/mutator/block-pack/block_pack.d.ts.map +1 -0
  178. package/dist/mutator/block-pack/block_pack.js +2 -3
  179. package/dist/mutator/block-pack/block_pack.js.map +1 -1
  180. package/dist/mutator/block-pack/frontend.cjs +3 -4
  181. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  182. package/dist/mutator/block-pack/frontend.js +1 -2
  183. package/dist/mutator/block-pack/frontend.js.map +1 -1
  184. package/dist/mutator/context_export.cjs +4 -5
  185. package/dist/mutator/context_export.cjs.map +1 -1
  186. package/dist/mutator/context_export.js +1 -2
  187. package/dist/mutator/context_export.js.map +1 -1
  188. package/dist/mutator/migration.cjs +13 -14
  189. package/dist/mutator/migration.cjs.map +1 -1
  190. package/dist/mutator/migration.js +11 -12
  191. package/dist/mutator/migration.js.map +1 -1
  192. package/dist/mutator/project.cjs +13 -14
  193. package/dist/mutator/project.cjs.map +1 -1
  194. package/dist/mutator/project.d.ts +0 -3
  195. package/dist/mutator/project.d.ts.map +1 -0
  196. package/dist/mutator/project.js +6 -7
  197. package/dist/mutator/project.js.map +1 -1
  198. package/dist/mutator/template/direct_template_loader.cjs +3 -4
  199. package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
  200. package/dist/mutator/template/direct_template_loader.js +1 -2
  201. package/dist/mutator/template/direct_template_loader.js.map +1 -1
  202. package/dist/mutator/template/direct_template_loader_v3.cjs +2 -3
  203. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
  204. package/dist/mutator/template/direct_template_loader_v3.js +1 -2
  205. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
  206. package/dist/mutator/template/render_block.cjs +4 -6
  207. package/dist/mutator/template/render_block.cjs.map +1 -1
  208. package/dist/mutator/template/render_block.js +2 -4
  209. package/dist/mutator/template/render_block.js.map +1 -1
  210. package/dist/mutator/template/render_template.cjs +2 -3
  211. package/dist/mutator/template/render_template.cjs.map +1 -1
  212. package/dist/mutator/template/render_template.d.ts.map +1 -0
  213. package/dist/mutator/template/render_template.js +1 -2
  214. package/dist/mutator/template/render_template.js.map +1 -1
  215. package/dist/mutator/template/template_cache.cjs +6 -10
  216. package/dist/mutator/template/template_cache.cjs.map +1 -1
  217. package/dist/mutator/template/template_cache.d.ts +2 -3
  218. package/dist/mutator/template/template_cache.d.ts.map +1 -0
  219. package/dist/mutator/template/template_cache.js +4 -8
  220. package/dist/mutator/template/template_cache.js.map +1 -1
  221. package/dist/mutator/template/template_loading.cjs +3 -4
  222. package/dist/mutator/template/template_loading.cjs.map +1 -1
  223. package/dist/mutator/template/template_loading.d.ts.map +1 -0
  224. package/dist/mutator/template/template_loading.js +1 -2
  225. package/dist/mutator/template/template_loading.js.map +1 -1
  226. package/dist/network_check/network_check.cjs +4 -5
  227. package/dist/network_check/network_check.cjs.map +1 -1
  228. package/dist/network_check/network_check.d.ts.map +1 -0
  229. package/dist/network_check/network_check.js +1 -2
  230. package/dist/network_check/network_check.js.map +1 -1
  231. package/dist/network_check/pings.cjs +2 -3
  232. package/dist/network_check/pings.cjs.map +1 -1
  233. package/dist/network_check/pings.js +1 -2
  234. package/dist/network_check/pings.js.map +1 -1
  235. package/dist/network_check/template.cjs +4 -5
  236. package/dist/network_check/template.cjs.map +1 -1
  237. package/dist/network_check/template.js +1 -2
  238. package/dist/network_check/template.js.map +1 -1
  239. package/dist/pool/data.cjs +2 -3
  240. package/dist/pool/data.cjs.map +1 -1
  241. package/dist/pool/data.d.ts +0 -1
  242. package/dist/pool/data.d.ts.map +1 -0
  243. package/dist/pool/data.js +1 -2
  244. package/dist/pool/data.js.map +1 -1
  245. package/dist/pool/driver.cjs +3 -4
  246. package/dist/pool/driver.cjs.map +1 -1
  247. package/dist/pool/driver.d.ts +0 -1
  248. package/dist/pool/driver.d.ts.map +1 -0
  249. package/dist/pool/driver.js +1 -2
  250. package/dist/pool/driver.js.map +1 -1
  251. package/dist/pool/index.cjs +2 -2
  252. package/dist/pool/index.d.ts +1 -2
  253. package/dist/pool/index.js +2 -2
  254. package/dist/pool/p_object_collection.cjs +3 -4
  255. package/dist/pool/p_object_collection.cjs.map +1 -1
  256. package/dist/pool/p_object_collection.d.ts.map +1 -0
  257. package/dist/pool/p_object_collection.js +1 -2
  258. package/dist/pool/p_object_collection.js.map +1 -1
  259. package/dist/pool/result_pool.cjs +7 -8
  260. package/dist/pool/result_pool.cjs.map +1 -1
  261. package/dist/pool/result_pool.d.ts +1 -3
  262. package/dist/pool/result_pool.js +1 -2
  263. package/dist/pool/result_pool.js.map +1 -1
  264. package/dist/service_factories.cjs +2 -3
  265. package/dist/service_factories.cjs.map +1 -1
  266. package/dist/service_factories.js +1 -2
  267. package/dist/service_factories.js.map +1 -1
  268. package/dist/worker/WorkerManager.cjs +2 -3
  269. package/dist/worker/WorkerManager.cjs.map +1 -1
  270. package/dist/worker/WorkerManager.js +1 -2
  271. package/dist/worker/WorkerManager.js.map +1 -1
  272. package/dist/worker/worker.cjs +3 -4
  273. package/dist/worker/worker.cjs.map +1 -1
  274. package/dist/worker/worker.js +1 -2
  275. package/dist/worker/worker.js.map +1 -1
  276. package/dist/worker/workerApi.cjs +2 -3
  277. package/dist/worker/workerApi.cjs.map +1 -1
  278. package/dist/worker/workerApi.js +1 -2
  279. package/dist/worker/workerApi.js.map +1 -1
  280. package/package.json +19 -19
@@ -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;AAC5F,QAAO,WAAW,MAAM,QAAQ;AAK9B,SAAO,EACL,cAAc,CAAC,GAAG,UAHF,SAFN,IAAI,SAAS,SAAS,CAAC,MAAM,CAEV,kBAAoC,oBAAoB,CAAC,CAGhD,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,EACzD;GACD"}
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;AAC5F,QAAO,WAAW,MAAM,QAAQ;AAK9B,SAAO,EACL,cAAc,CAAC,GAAG,UAHF,SAFN,IAAI,SAAS,SAAS,CAAC,MAAM,CAEV,kBAAoC,oBAAoB,CAAC,CAGhD,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,EACzD;GACD"}
@@ -1,9 +1,8 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
- const require_util = require('../cfg_render/util.cjs');
3
- const require_executor = require('../cfg_render/executor.cjs');
4
- const require_index = require('../js_render/index.cjs');
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_util = require("../cfg_render/util.cjs");
3
+ const require_executor = require("../cfg_render/executor.cjs");
4
+ const require_index = require("../js_render/index.cjs");
5
5
  let _platforma_sdk_model = require("@platforma-sdk/model");
6
-
7
6
  //#region src/middle_layer/render.ts
8
7
  function isActive(cfg) {
9
8
  if ((0, _platforma_sdk_model.isConfigLambda)(cfg)) return cfg.isActive === true;
@@ -15,8 +14,8 @@ function computableFromCfgOrRF(env, ctx, cfgOrFh, codeWithInfo, configKey, ops =
15
14
  return require_index.computableFromRF(env, ctx, cfgOrFh, codeWithInfo, configKey, ops);
16
15
  } else return require_executor.computableFromCfg(env.driverKit, ctx, cfgOrFh, ops);
17
16
  }
18
-
19
17
  //#endregion
20
18
  exports.computableFromCfgOrRF = computableFromCfgOrRF;
21
19
  exports.isActive = isActive;
20
+
22
21
  //# sourceMappingURL=render.cjs.map
@@ -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":";;;;;;;AASA,SAAgB,SAAS,KAAyC;AAChE,8CAAmB,IAAI,CAAE,QAAO,IAAI,aAAa;KAC5C,QAAOA,oCAAuB,IAAI;;AAGzC,SAAgB,sBACd,KACA,KACA,SACA,cACA,WACA,MAAuC,EAAE,EACpB;AACrB,8CAAmB,QAAQ,EAAE;AAC3B,MAAI,iBAAiB,OAAW,OAAM,IAAI,MAAM,yCAAyC;AACzF,SAAOC,+BAAiB,KAAK,KAAK,SAAS,cAAc,WAAW,IAAI;OACnE,QAAOC,mCAAkB,IAAI,WAAW,KAAK,SAAS,IAAI"}
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;AAChE,MAAA,GAAA,qBAAA,gBAAmB,IAAI,CAAE,QAAO,IAAI,aAAa;KAC5C,QAAOA,aAAAA,uBAAuB,IAAI;;AAGzC,SAAgB,sBACd,KACA,KACA,SACA,cACA,WACA,MAAuC,EAAE,EACpB;AACrB,MAAA,GAAA,qBAAA,gBAAmB,QAAQ,EAAE;AAC3B,MAAI,iBAAiB,KAAA,EAAW,OAAM,IAAI,MAAM,yCAAyC;AACzF,SAAOC,cAAAA,iBAAiB,KAAK,KAAK,SAAS,cAAc,WAAW,IAAI;OACnE,QAAOC,iBAAAA,kBAAkB,IAAI,WAAW,KAAK,SAAS,IAAI"}
@@ -2,7 +2,6 @@ import { hasActiveCfgComponents } from "../cfg_render/util.js";
2
2
  import { computableFromCfg } from "../cfg_render/executor.js";
3
3
  import { computableFromRF } from "../js_render/index.js";
4
4
  import { isConfigLambda } from "@platforma-sdk/model";
5
-
6
5
  //#region src/middle_layer/render.ts
7
6
  function isActive(cfg) {
8
7
  if (isConfigLambda(cfg)) return cfg.isActive === true;
@@ -14,7 +13,7 @@ function computableFromCfgOrRF(env, ctx, cfgOrFh, codeWithInfo, configKey, ops =
14
13
  return computableFromRF(env, ctx, cfgOrFh, codeWithInfo, configKey, ops);
15
14
  } else return computableFromCfg(env.driverKit, ctx, cfgOrFh, ops);
16
15
  }
17
-
18
16
  //#endregion
19
17
  export { computableFromCfgOrRF, isActive };
18
+
20
19
  //# sourceMappingURL=render.js.map
@@ -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;AAChE,KAAI,eAAe,IAAI,CAAE,QAAO,IAAI,aAAa;KAC5C,QAAO,uBAAuB,IAAI;;AAGzC,SAAgB,sBACd,KACA,KACA,SACA,cACA,WACA,MAAuC,EAAE,EACpB;AACrB,KAAI,eAAe,QAAQ,EAAE;AAC3B,MAAI,iBAAiB,OAAW,OAAM,IAAI,MAAM,yCAAyC;AACzF,SAAO,iBAAiB,KAAK,KAAK,SAAS,cAAc,WAAW,IAAI;OACnE,QAAO,kBAAkB,IAAI,WAAW,KAAK,SAAS,IAAI"}
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;AAChE,KAAI,eAAe,IAAI,CAAE,QAAO,IAAI,aAAa;KAC5C,QAAO,uBAAuB,IAAI;;AAGzC,SAAgB,sBACd,KACA,KACA,SACA,cACA,WACA,MAAuC,EAAE,EACpB;AACrB,KAAI,eAAe,QAAQ,EAAE;AAC3B,MAAI,iBAAiB,KAAA,EAAW,OAAM,IAAI,MAAM,yCAAyC;AACzF,SAAO,iBAAiB,KAAK,KAAK,SAAS,cAAc,WAAW,IAAI;OACnE,QAAO,kBAAkB,IAAI,WAAW,KAAK,SAAS,IAAI"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/middle_layer/types.ts"],"mappings":";;;;KAGY,2BAAA,GAA8B,IAAA,CACxC,mBAAA"}
@@ -1,9 +1,8 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
- const require_project_model = require('../model/project_model.cjs');
3
- const require_util = require('../cfg_render/util.cjs');
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_project_model = require("../model/project_model.cjs");
3
+ const require_util = require("../cfg_render/util.cjs");
4
4
  let _platforma_sdk_model = require("@platforma-sdk/model");
5
5
  let _milaboratories_pl_client = require("@milaboratories/pl-client");
6
-
7
6
  //#region src/middle_layer/util.ts
8
7
  /** Returns block pack info along with string representation of block-pack resource id */
9
8
  function getBlockPackInfo(prj, blockId) {
@@ -26,7 +25,7 @@ function getBlockPackInfo(prj, blockId) {
26
25
  };
27
26
  });
28
27
  }
29
-
30
28
  //#endregion
31
29
  exports.getBlockPackInfo = getBlockPackInfo;
30
+
32
31
  //# sourceMappingURL=util.cjs.map
@@ -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 { ResourceId } 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: ResourceId;\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;AAChC,QAAOA,wBACL,IAAI,SACF;EACE,OAAOC,uCAAiB,SAAS,YAAY;EAC7C,iBAAiB;EACjB,oBAAoB;EACrB,EACD;EAAE,OAAOC,6BAAG;EAAgB,iBAAiB;EAAS,sBAAsB;EAAM,CACnF,GACA,UAAU;EACT,MAAM,OAAO,MAAM,eAA8B;EACjD,MAAM,8CAAoB,KAAK,OAAO;AACtC,SAAO;GACL,cAAc,MAAM,aAAa;GACjC,MAAM,MAAM,aAAa,GAAG,UAAU;GACtC;GACA;GACD;GAEJ"}
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 { ResourceId } 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: ResourceId;\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;AAChC,QAAOA,aAAAA,WACL,IAAI,SACF;EACE,OAAOC,sBAAAA,iBAAiB,SAAS,YAAY;EAC7C,iBAAiB;EACjB,oBAAoB;EACrB,EACD;EAAE,OAAOC,0BAAAA,GAAG;EAAgB,iBAAiB;EAAS,sBAAsB;EAAM,CACnF,GACA,UAAU;EACT,MAAM,OAAO,MAAM,eAA8B;EACjD,MAAM,OAAA,GAAA,qBAAA,eAAoB,KAAK,OAAO;AACtC,SAAO;GACL,cAAc,MAAM,aAAa;GACjC,MAAM,MAAM,aAAa,GAAG,UAAU;GACtC;GACA;GACD;GAEJ"}
@@ -2,7 +2,6 @@ import { projectFieldName } from "../model/project_model.js";
2
2
  import { ifNotUndef } from "../cfg_render/util.js";
3
3
  import { extractConfig } from "@platforma-sdk/model";
4
4
  import { Pl } from "@milaboratories/pl-client";
5
-
6
5
  //#region src/middle_layer/util.ts
7
6
  /** Returns block pack info along with string representation of block-pack resource id */
8
7
  function getBlockPackInfo(prj, blockId) {
@@ -25,7 +24,7 @@ function getBlockPackInfo(prj, blockId) {
25
24
  };
26
25
  });
27
26
  }
28
-
29
27
  //#endregion
30
28
  export { getBlockPackInfo };
29
+
31
30
  //# sourceMappingURL=util.js.map
@@ -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 { ResourceId } 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: ResourceId;\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;AAChC,QAAO,WACL,IAAI,SACF;EACE,OAAO,iBAAiB,SAAS,YAAY;EAC7C,iBAAiB;EACjB,oBAAoB;EACrB,EACD;EAAE,OAAO,GAAG;EAAgB,iBAAiB;EAAS,sBAAsB;EAAM,CACnF,GACA,UAAU;EACT,MAAM,OAAO,MAAM,eAA8B;EACjD,MAAM,MAAM,cAAc,KAAK,OAAO;AACtC,SAAO;GACL,cAAc,MAAM,aAAa;GACjC,MAAM,MAAM,aAAa,GAAG,UAAU;GACtC;GACA;GACD;GAEJ"}
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 { ResourceId } 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: ResourceId;\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;AAChC,QAAO,WACL,IAAI,SACF;EACE,OAAO,iBAAiB,SAAS,YAAY;EAC7C,iBAAiB;EACjB,oBAAoB;EACrB,EACD;EAAE,OAAO,GAAG;EAAgB,iBAAiB;EAAS,sBAAsB;EAAM,CACnF,GACA,UAAU;EACT,MAAM,OAAO,MAAM,eAA8B;EACjD,MAAM,MAAM,cAAc,KAAK,OAAO;AACtC,SAAO;GACL,cAAc,MAAM,aAAa;GACjC,MAAM,MAAM,aAAa,GAAG,UAAU;GACtC;GACA;GACD;GAEJ"}
@@ -1,6 +1,5 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
2
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
3
-
4
3
  //#region src/model/args.ts
5
4
  function outputRef(blockId, name, requireEnrichments) {
6
5
  if (requireEnrichments) return {
@@ -50,8 +49,8 @@ function inferAllReferencedBlocks(args, allowed) {
50
49
  addAllReferencedBlocks(result, args, allowed);
51
50
  return result;
52
51
  }
53
-
54
52
  //#endregion
55
53
  exports.inferAllReferencedBlocks = inferAllReferencedBlocks;
56
54
  exports.outputRef = outputRef;
55
+
57
56
  //# sourceMappingURL=args.cjs.map
@@ -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\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 \"string\":\n case \"boolean\":\n case \"symbol\":\n case \"undefined\":\n return;\n\n case \"object\":\n if (node === null) return;\n\n if (isBlockOutputReference(node)) {\n if (allowed === undefined || allowed.has(node.blockId)) {\n result.upstreams.add(node.blockId);\n if (node.requireEnrichments) result.upstreamsRequiringEnrichments.add(node.blockId);\n } else result.missingReferences = true;\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\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"],"mappings":";;;;AAGA,SAAgB,UAAU,SAAiB,MAAc,oBAAqC;AAC5F,KAAI,mBAAoB,QAAO;EAAE,SAAS;EAAM;EAAS;EAAM;EAAoB;KAC9E,QAAO;EAAE,SAAS;EAAM;EAAS;EAAM;;AAG9C,SAAgB,uBAAuB,KAA4B;AACjE,QACE,OAAO,QAAQ,YACf,QAAQ,QACR,aAAa,OACb,IAAI,YAAY,QAChB,aAAa,OACb,UAAU;;AAId,SAAS,uBAAuB,QAAwB,MAAe,SAAuB;CAC5F,MAAM,OAAO,OAAO;AACpB,SAAQ,MAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,YACH;EAEF,KAAK;AACH,OAAI,SAAS,KAAM;AAEnB,OAAI,uBAAuB,KAAK,CAC9B,KAAI,YAAY,UAAa,QAAQ,IAAI,KAAK,QAAQ,EAAE;AACtD,WAAO,UAAU,IAAI,KAAK,QAAQ;AAClC,QAAI,KAAK,mBAAoB,QAAO,8BAA8B,IAAI,KAAK,QAAQ;SAC9E,QAAO,oBAAoB;YACzB,MAAM,QAAQ,KAAK,CAC5B,MAAK,MAAM,SAAS,KAAM,wBAAuB,QAAQ,OAAO,QAAQ;OAExE,MAAK,MAAM,GAAG,UAAU,OAAO,QAAQ,KAAe,CACpD,wBAAuB,QAAQ,OAAO,QAAQ;AAGlD;EAEF,QACE,6CAAY,KAAK;;;;AAcvB,SAAgB,yBAAyB,MAAe,SAAuC;CAC7F,MAAM,SAAS;EACb,2BAAW,IAAI,KAAa;EAC5B,+CAA+B,IAAI,KAAa;EAChD,mBAAmB;EACpB;AACD,wBAAuB,QAAQ,MAAM,QAAQ;AAC7C,QAAO"}
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\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 \"string\":\n case \"boolean\":\n case \"symbol\":\n case \"undefined\":\n return;\n\n case \"object\":\n if (node === null) return;\n\n if (isBlockOutputReference(node)) {\n if (allowed === undefined || allowed.has(node.blockId)) {\n result.upstreams.add(node.blockId);\n if (node.requireEnrichments) result.upstreamsRequiringEnrichments.add(node.blockId);\n } else result.missingReferences = true;\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\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"],"mappings":";;;AAGA,SAAgB,UAAU,SAAiB,MAAc,oBAAqC;AAC5F,KAAI,mBAAoB,QAAO;EAAE,SAAS;EAAM;EAAS;EAAM;EAAoB;KAC9E,QAAO;EAAE,SAAS;EAAM;EAAS;EAAM;;AAG9C,SAAgB,uBAAuB,KAA4B;AACjE,QACE,OAAO,QAAQ,YACf,QAAQ,QACR,aAAa,OACb,IAAI,YAAY,QAChB,aAAa,OACb,UAAU;;AAId,SAAS,uBAAuB,QAAwB,MAAe,SAAuB;CAC5F,MAAM,OAAO,OAAO;AACpB,SAAQ,MAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,YACH;EAEF,KAAK;AACH,OAAI,SAAS,KAAM;AAEnB,OAAI,uBAAuB,KAAK,CAC9B,KAAI,YAAY,KAAA,KAAa,QAAQ,IAAI,KAAK,QAAQ,EAAE;AACtD,WAAO,UAAU,IAAI,KAAK,QAAQ;AAClC,QAAI,KAAK,mBAAoB,QAAO,8BAA8B,IAAI,KAAK,QAAQ;SAC9E,QAAO,oBAAoB;YACzB,MAAM,QAAQ,KAAK,CAC5B,MAAK,MAAM,SAAS,KAAM,wBAAuB,QAAQ,OAAO,QAAQ;OAExE,MAAK,MAAM,GAAG,UAAU,OAAO,QAAQ,KAAe,CACpD,wBAAuB,QAAQ,OAAO,QAAQ;AAGlD;EAEF,QACE,EAAA,GAAA,2BAAA,aAAY,KAAK;;;;AAcvB,SAAgB,yBAAyB,MAAe,SAAuC;CAC7F,MAAM,SAAS;EACb,2BAAW,IAAI,KAAa;EAC5B,+CAA+B,IAAI,KAAa;EAChD,mBAAmB;EACpB;AACD,wBAAuB,QAAQ,MAAM,QAAQ;AAC7C,QAAO"}
@@ -1,5 +1,4 @@
1
1
  import { assertNever } from "@milaboratories/ts-helpers";
2
-
3
2
  //#region src/model/args.ts
4
3
  function outputRef(blockId, name, requireEnrichments) {
5
4
  if (requireEnrichments) return {
@@ -49,7 +48,7 @@ function inferAllReferencedBlocks(args, allowed) {
49
48
  addAllReferencedBlocks(result, args, allowed);
50
49
  return result;
51
50
  }
52
-
53
51
  //#endregion
54
52
  export { inferAllReferencedBlocks, outputRef };
53
+
55
54
  //# sourceMappingURL=args.js.map
@@ -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\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 \"string\":\n case \"boolean\":\n case \"symbol\":\n case \"undefined\":\n return;\n\n case \"object\":\n if (node === null) return;\n\n if (isBlockOutputReference(node)) {\n if (allowed === undefined || allowed.has(node.blockId)) {\n result.upstreams.add(node.blockId);\n if (node.requireEnrichments) result.upstreamsRequiringEnrichments.add(node.blockId);\n } else result.missingReferences = true;\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\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"],"mappings":";;;AAGA,SAAgB,UAAU,SAAiB,MAAc,oBAAqC;AAC5F,KAAI,mBAAoB,QAAO;EAAE,SAAS;EAAM;EAAS;EAAM;EAAoB;KAC9E,QAAO;EAAE,SAAS;EAAM;EAAS;EAAM;;AAG9C,SAAgB,uBAAuB,KAA4B;AACjE,QACE,OAAO,QAAQ,YACf,QAAQ,QACR,aAAa,OACb,IAAI,YAAY,QAChB,aAAa,OACb,UAAU;;AAId,SAAS,uBAAuB,QAAwB,MAAe,SAAuB;CAC5F,MAAM,OAAO,OAAO;AACpB,SAAQ,MAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,YACH;EAEF,KAAK;AACH,OAAI,SAAS,KAAM;AAEnB,OAAI,uBAAuB,KAAK,CAC9B,KAAI,YAAY,UAAa,QAAQ,IAAI,KAAK,QAAQ,EAAE;AACtD,WAAO,UAAU,IAAI,KAAK,QAAQ;AAClC,QAAI,KAAK,mBAAoB,QAAO,8BAA8B,IAAI,KAAK,QAAQ;SAC9E,QAAO,oBAAoB;YACzB,MAAM,QAAQ,KAAK,CAC5B,MAAK,MAAM,SAAS,KAAM,wBAAuB,QAAQ,OAAO,QAAQ;OAExE,MAAK,MAAM,GAAG,UAAU,OAAO,QAAQ,KAAe,CACpD,wBAAuB,QAAQ,OAAO,QAAQ;AAGlD;EAEF,QACE,aAAY,KAAK;;;;AAcvB,SAAgB,yBAAyB,MAAe,SAAuC;CAC7F,MAAM,SAAS;EACb,2BAAW,IAAI,KAAa;EAC5B,+CAA+B,IAAI,KAAa;EAChD,mBAAmB;EACpB;AACD,wBAAuB,QAAQ,MAAM,QAAQ;AAC7C,QAAO"}
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\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 \"string\":\n case \"boolean\":\n case \"symbol\":\n case \"undefined\":\n return;\n\n case \"object\":\n if (node === null) return;\n\n if (isBlockOutputReference(node)) {\n if (allowed === undefined || allowed.has(node.blockId)) {\n result.upstreams.add(node.blockId);\n if (node.requireEnrichments) result.upstreamsRequiringEnrichments.add(node.blockId);\n } else result.missingReferences = true;\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\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"],"mappings":";;AAGA,SAAgB,UAAU,SAAiB,MAAc,oBAAqC;AAC5F,KAAI,mBAAoB,QAAO;EAAE,SAAS;EAAM;EAAS;EAAM;EAAoB;KAC9E,QAAO;EAAE,SAAS;EAAM;EAAS;EAAM;;AAG9C,SAAgB,uBAAuB,KAA4B;AACjE,QACE,OAAO,QAAQ,YACf,QAAQ,QACR,aAAa,OACb,IAAI,YAAY,QAChB,aAAa,OACb,UAAU;;AAId,SAAS,uBAAuB,QAAwB,MAAe,SAAuB;CAC5F,MAAM,OAAO,OAAO;AACpB,SAAQ,MAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,YACH;EAEF,KAAK;AACH,OAAI,SAAS,KAAM;AAEnB,OAAI,uBAAuB,KAAK,CAC9B,KAAI,YAAY,KAAA,KAAa,QAAQ,IAAI,KAAK,QAAQ,EAAE;AACtD,WAAO,UAAU,IAAI,KAAK,QAAQ;AAClC,QAAI,KAAK,mBAAoB,QAAO,8BAA8B,IAAI,KAAK,QAAQ;SAC9E,QAAO,oBAAoB;YACzB,MAAM,QAAQ,KAAK,CAC5B,MAAK,MAAM,SAAS,KAAM,wBAAuB,QAAQ,OAAO,QAAQ;OAExE,MAAK,MAAM,GAAG,UAAU,OAAO,QAAQ,KAAe,CACpD,wBAAuB,QAAQ,OAAO,QAAQ;AAGlD;EAEF,QACE,aAAY,KAAK;;;;AAcvB,SAAgB,yBAAyB,MAAe,SAAuC;CAC7F,MAAM,SAAS;EACb,2BAAW,IAAI,KAAa;EAC5B,+CAA+B,IAAI,KAAa;EAChD,mBAAmB;EACpB;AACD,wBAAuB,QAAQ,MAAM,QAAQ;AAC7C,QAAO"}
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/model/block_pack_spec.ts
3
2
  const FrontendFromUrlResourceType = {
4
3
  name: "Frontend/FromUrl",
@@ -8,8 +7,8 @@ const FrontendFromFolderResourceType = {
8
7
  name: "Frontend/FromFolder",
9
8
  version: "1"
10
9
  };
11
-
12
10
  //#endregion
13
11
  exports.FrontendFromFolderResourceType = FrontendFromFolderResourceType;
14
12
  exports.FrontendFromUrlResourceType = FrontendFromUrlResourceType;
13
+
15
14
  //# 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};\n\n/** All block-pack specs. */\nexport type BlockPackSpecAny = BlockPackSpecPrepared | BlockPackExplicit | BlockPackSpec;\n"],"mappings":";;AAWA,MAAa,8BAA4C;CAAE,MAAM;CAAoB,SAAS;CAAK;AAcnG,MAAa,iCAA+C;CAC1D,MAAM;CACN,SAAS;CACV"}
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};\n\n/** All block-pack specs. */\nexport type BlockPackSpecAny = BlockPackSpecPrepared | BlockPackExplicit | BlockPackSpec;\n"],"mappings":";AAWA,MAAa,8BAA4C;CAAE,MAAM;CAAoB,SAAS;CAAK;AAcnG,MAAa,iCAA+C;CAC1D,MAAM;CACN,SAAS;CACV"}
@@ -0,0 +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,UAE5B,mBAAA;EACf,GAAA;AAAA;AAAA,cAGW,2BAAA,EAA6B,YAAA;;;UAIzB,eAAA,SAAwB,mBAAA;EACvC,IAAA;AAAA;AAAA,UAGe,sBAAA;EACf,IAAA;EATW;EAWX,SAAA;AAAA;AAAA,cAGW,8BAAA,EAAgC,YAAA;;AAV7C;;UAkBiB,kBAAA,SAA2B,sBAAA;EAC1C,IAAA;AAAA;AAfF;;AAAA,UAoBiB,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;AAAA;;KAIE,gBAAA,GAAmB,qBAAA,GAAwB,iBAAA,GAAoB,aAAA"}
@@ -7,7 +7,7 @@ const FrontendFromFolderResourceType = {
7
7
  name: "Frontend/FromFolder",
8
8
  version: "1"
9
9
  };
10
-
11
10
  //#endregion
12
11
  export { FrontendFromFolderResourceType, FrontendFromUrlResourceType };
12
+
13
13
  //# sourceMappingURL=block_pack_spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend.d.ts","names":[],"sources":["../../src/model/frontend.ts"],"mappings":";;AAGA;;UAAiB,YAAA;EAEN;EAAA,SAAA,GAAA;;WAGA,UAAA;AAAA"}
@@ -1,9 +1,8 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
- const require_index = require('../js_render/index.cjs');
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_index = require("../js_render/index.cjs");
3
3
  let _platforma_sdk_model = require("@platforma-sdk/model");
4
4
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
5
5
  let lru_cache = require("lru-cache");
6
-
7
6
  //#region src/model/project_helper.ts
8
7
  var ProjectHelper = class {
9
8
  enrichmentTargetsCache = new lru_cache.LRUCache({
@@ -153,7 +152,7 @@ var ProjectHelper = class {
153
152
  }
154
153
  }
155
154
  };
156
-
157
155
  //#endregion
158
156
  exports.ProjectHelper = ProjectHelper;
157
+
159
158
  //# sourceMappingURL=project_helper.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"project_helper.cjs","names":["LRUCache","ConsoleLoggerAdapter","BLOCK_STORAGE_FACADE_VERSION","executeSingleLambda","BlockStorageFacadeCallbacks"],"sources":["../../src/model/project_helper.ts"],"sourcesContent":["import type { ResultOrError, BlockConfig, BlockStorage, PlRef } from \"@platforma-sdk/model\";\nimport type { StringifiedJson } from \"@milaboratories/pl-model-common\";\nimport {\n extractCodeWithInfo,\n ensureError,\n BlockStorageFacadeCallbacks,\n BLOCK_STORAGE_FACADE_VERSION,\n} from \"@platforma-sdk/model\";\nimport { LRUCache } from \"lru-cache\";\nimport type { QuickJSWASMModule } from \"quickjs-emscripten\";\nimport { executeSingleLambda } from \"../js_render\";\nimport type { ResourceId } from \"@milaboratories/pl-client\";\nimport { ConsoleLoggerAdapter, type MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { StorageDebugView } from \"@milaboratories/pl-model-middle-layer\";\n\ntype EnrichmentTargetsRequest = {\n blockConfig: () => BlockConfig;\n args: () => unknown;\n};\n\ntype EnrichmentTargetsValue = {\n value: PlRef[] | undefined;\n};\n\n/**\n * Result of VM-based storage migration.\n * Returned by migrateStorageInVM().\n *\n * - Error result: { error: string } - serious failure (no context, etc.)\n * - Success result: { newStorageJson: StringifiedJson<BlockStorage>, info: string } - migration succeeded\n */\nexport type MigrationResult =\n | { error: string }\n | { error?: undefined; newStorageJson: StringifiedJson<BlockStorage>; info: string };\n\n/**\n * Result of args derivation from storage.\n * Returned by __pl_args_derive and __pl_prerunArgs_derive VM callbacks.\n */\ntype ArgsDeriveResult = { error: string } | { error?: undefined; value: unknown };\n\nexport class ProjectHelper {\n private readonly enrichmentTargetsCache = new LRUCache<\n string,\n EnrichmentTargetsValue,\n EnrichmentTargetsRequest\n >({\n max: 256,\n memoMethod: (_key, _value, { context }) => {\n return { value: this.calculateEnrichmentTargets(context) };\n },\n });\n\n constructor(\n private readonly quickJs: QuickJSWASMModule,\n public readonly logger: MiLogger = new ConsoleLoggerAdapter(),\n ) {}\n\n // =============================================================================\n // Args Derivation from Storage (V3+)\n // =============================================================================\n\n /**\n * Derives args directly from storage JSON using VM callback.\n * The VM extracts data from storage and calls the block's args() function.\n *\n * This allows the middle layer to work only with storage JSON,\n * without needing to know the underlying data structure.\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param storageJson Storage as JSON string\n * @returns The derived args object, or error if derivation fails\n */\n public deriveArgsFromStorage(\n blockConfig: BlockConfig,\n storageJson: string,\n ): ResultOrError<unknown> {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return {\n error: new Error(\"deriveArgsFromStorage is only supported for model API version 2\"),\n };\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.ArgsDerive],\n extractCodeWithInfo(blockConfig),\n storageJson,\n ) as ArgsDeriveResult;\n\n if (result.error !== undefined) {\n return { error: new Error(result.error) };\n }\n return { value: result.value };\n } catch (e) {\n return { error: new Error(\"Args derivation from storage failed\", { cause: ensureError(e) }) };\n }\n }\n\n /**\n * Derives prerunArgs directly from storage JSON using VM callback.\n * Falls back to args() if prerunArgs is not defined in the block model.\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param storageJson Storage as JSON string\n * @returns The derived prerunArgs, or undefined if derivation fails\n */\n public derivePrerunArgsFromStorage(blockConfig: BlockConfig, storageJson: string): unknown {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"derivePrerunArgsFromStorage is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.PrerunArgsDerive],\n extractCodeWithInfo(blockConfig),\n storageJson,\n ) as ArgsDeriveResult;\n\n if (result.error !== undefined) {\n // Return undefined if derivation fails (skip block in staging)\n return undefined;\n }\n return result.value;\n } catch {\n // Return undefined if derivation fails (skip block in staging)\n return undefined;\n }\n }\n\n private calculateEnrichmentTargets(req: EnrichmentTargetsRequest): PlRef[] | undefined {\n const blockConfig = req.blockConfig();\n if (blockConfig.enrichmentTargets === undefined) return undefined;\n const args = req.args();\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.enrichmentTargets,\n extractCodeWithInfo(blockConfig),\n args,\n ) as PlRef[];\n return result;\n }\n\n public getEnrichmentTargets(\n blockConfig: () => BlockConfig,\n args: () => unknown,\n key?: { argsRid: ResourceId; blockPackRid: ResourceId },\n ): PlRef[] | undefined {\n const req = { blockConfig, args };\n if (key === undefined) return this.calculateEnrichmentTargets(req);\n const cacheKey = `${key.argsRid}:${key.blockPackRid}`;\n return this.enrichmentTargetsCache.memo(cacheKey, { context: req }).value;\n }\n\n // =============================================================================\n // VM-based Storage Operations\n // =============================================================================\n\n /**\n * Creates initial BlockStorage for a new block using VM-based transformation.\n * This calls the '__pl_storage_initial' callback registered by DataModel which:\n * - Gets initial data from DataModel.getDefaultData()\n * - Creates BlockStorage with correct version\n *\n * @param blockConfig The block configuration (provides the model code)\n * @returns Initial storage as JSON string\n * @throws Error if storage creation fails\n */\n public getInitialStorageInVM(blockConfig: BlockConfig): string {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"getInitialStorageInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageInitial],\n extractCodeWithInfo(blockConfig),\n ) as string;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.getInitialStorageInVM] Initial storage creation failed\", {\n cause: e,\n }),\n );\n throw new Error(`Block initial storage creation failed: ${e}`);\n }\n }\n\n /**\n * Applies a state update using VM-based transformation.\n * This calls the model's `__pl_storage_applyUpdate` callback which:\n * - Normalizes current storage\n * - Updates state while preserving other fields (version, plugins)\n * - Returns the updated storage as JSON string\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param currentStorageJson Current storage as JSON string (must be defined)\n * @param newState New state from developer\n * @returns Updated storage as JSON string\n * @throws Error if storage update fails\n */\n public applyStorageUpdateInVM(\n blockConfig: BlockConfig,\n currentStorageJson: string,\n payload: { operation: string; value: unknown },\n ): string {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"applyStorageUpdateInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageApplyUpdate],\n extractCodeWithInfo(blockConfig),\n currentStorageJson,\n payload,\n ) as string;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.applyStorageUpdateInVM] Storage update failed\", { cause: e }),\n );\n throw new Error(`Block storage update failed: ${e}`);\n }\n }\n\n /**\n * Gets storage debug view from raw storage data by calling the VM's __pl_storage_debugView callback.\n * Returns structured debug info about the storage (e.g., dataVersion).\n *\n * @param blockConfig Block configuration\n * @param rawStorageJson Raw storage as JSON string (or undefined)\n * @returns Storage debug view as JSON string (e.g., '{\"dataVersion\": \"v1\"}')\n */\n public getStorageDebugViewInVM(\n blockConfig: BlockConfig,\n rawStorageJson: string | undefined,\n ): StringifiedJson<StorageDebugView> | undefined {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"getStorageDebugViewInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageDebugView],\n extractCodeWithInfo(blockConfig),\n rawStorageJson,\n ) as StringifiedJson<StorageDebugView>;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.getStorageDebugViewInVM] Get storage debug view failed\", {\n cause: e,\n }),\n );\n return undefined;\n }\n }\n\n // =============================================================================\n // Block State Migrations\n // =============================================================================\n\n /**\n * Runs block state migrations via VM-based transformation.\n * This calls the model's `__pl_storage_migrate` callback which:\n * - Normalizes current storage to get state and version\n * - Applies DataModel upgrade to reach target version key\n * - Runs all necessary migrations sequentially\n * - Returns new storage with updated state and version\n *\n * The middle layer doesn't need to know about dataVersion or storage internals.\n * All migration logic is encapsulated in the model.\n *\n * @param blockConfig The NEW block configuration (provides the model code with migrations)\n * @param currentStorageJson Current storage as JSON string (or undefined)\n * @returns MigrationResult with new storage or skip/error info\n */\n public migrateStorageInVM(\n blockConfig: BlockConfig,\n currentStorageJson: string | undefined,\n ): MigrationResult {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return { error: \"migrateStorageInVM is only supported for model API version 2\" };\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageMigrate],\n extractCodeWithInfo(blockConfig),\n currentStorageJson,\n ) as MigrationResult;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.migrateStorageInVM] Migration failed\", { cause: e }),\n );\n return { error: `VM execution failed: ${e}` };\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"project_helper.cjs","names":["LRUCache","ConsoleLoggerAdapter","BLOCK_STORAGE_FACADE_VERSION","executeSingleLambda","BlockStorageFacadeCallbacks"],"sources":["../../src/model/project_helper.ts"],"sourcesContent":["import type { ResultOrError, BlockConfig, BlockStorage, PlRef } from \"@platforma-sdk/model\";\nimport type { StringifiedJson } from \"@milaboratories/pl-model-common\";\nimport {\n extractCodeWithInfo,\n ensureError,\n BlockStorageFacadeCallbacks,\n BLOCK_STORAGE_FACADE_VERSION,\n} from \"@platforma-sdk/model\";\nimport { LRUCache } from \"lru-cache\";\nimport type { QuickJSWASMModule } from \"quickjs-emscripten\";\nimport { executeSingleLambda } from \"../js_render\";\nimport type { ResourceId } from \"@milaboratories/pl-client\";\nimport { ConsoleLoggerAdapter, type MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { StorageDebugView } from \"@milaboratories/pl-model-middle-layer\";\n\ntype EnrichmentTargetsRequest = {\n blockConfig: () => BlockConfig;\n args: () => unknown;\n};\n\ntype EnrichmentTargetsValue = {\n value: PlRef[] | undefined;\n};\n\n/**\n * Result of VM-based storage migration.\n * Returned by migrateStorageInVM().\n *\n * - Error result: { error: string } - serious failure (no context, etc.)\n * - Success result: { newStorageJson: StringifiedJson<BlockStorage>, info: string } - migration succeeded\n */\nexport type MigrationResult =\n | { error: string }\n | { error?: undefined; newStorageJson: StringifiedJson<BlockStorage>; info: string };\n\n/**\n * Result of args derivation from storage.\n * Returned by __pl_args_derive and __pl_prerunArgs_derive VM callbacks.\n */\ntype ArgsDeriveResult = { error: string } | { error?: undefined; value: unknown };\n\nexport class ProjectHelper {\n private readonly enrichmentTargetsCache = new LRUCache<\n string,\n EnrichmentTargetsValue,\n EnrichmentTargetsRequest\n >({\n max: 256,\n memoMethod: (_key, _value, { context }) => {\n return { value: this.calculateEnrichmentTargets(context) };\n },\n });\n\n constructor(\n private readonly quickJs: QuickJSWASMModule,\n public readonly logger: MiLogger = new ConsoleLoggerAdapter(),\n ) {}\n\n // =============================================================================\n // Args Derivation from Storage (V3+)\n // =============================================================================\n\n /**\n * Derives args directly from storage JSON using VM callback.\n * The VM extracts data from storage and calls the block's args() function.\n *\n * This allows the middle layer to work only with storage JSON,\n * without needing to know the underlying data structure.\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param storageJson Storage as JSON string\n * @returns The derived args object, or error if derivation fails\n */\n public deriveArgsFromStorage(\n blockConfig: BlockConfig,\n storageJson: string,\n ): ResultOrError<unknown> {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return {\n error: new Error(\"deriveArgsFromStorage is only supported for model API version 2\"),\n };\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.ArgsDerive],\n extractCodeWithInfo(blockConfig),\n storageJson,\n ) as ArgsDeriveResult;\n\n if (result.error !== undefined) {\n return { error: new Error(result.error) };\n }\n return { value: result.value };\n } catch (e) {\n return { error: new Error(\"Args derivation from storage failed\", { cause: ensureError(e) }) };\n }\n }\n\n /**\n * Derives prerunArgs directly from storage JSON using VM callback.\n * Falls back to args() if prerunArgs is not defined in the block model.\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param storageJson Storage as JSON string\n * @returns The derived prerunArgs, or undefined if derivation fails\n */\n public derivePrerunArgsFromStorage(blockConfig: BlockConfig, storageJson: string): unknown {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"derivePrerunArgsFromStorage is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.PrerunArgsDerive],\n extractCodeWithInfo(blockConfig),\n storageJson,\n ) as ArgsDeriveResult;\n\n if (result.error !== undefined) {\n // Return undefined if derivation fails (skip block in staging)\n return undefined;\n }\n return result.value;\n } catch {\n // Return undefined if derivation fails (skip block in staging)\n return undefined;\n }\n }\n\n private calculateEnrichmentTargets(req: EnrichmentTargetsRequest): PlRef[] | undefined {\n const blockConfig = req.blockConfig();\n if (blockConfig.enrichmentTargets === undefined) return undefined;\n const args = req.args();\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.enrichmentTargets,\n extractCodeWithInfo(blockConfig),\n args,\n ) as PlRef[];\n return result;\n }\n\n public getEnrichmentTargets(\n blockConfig: () => BlockConfig,\n args: () => unknown,\n key?: { argsRid: ResourceId; blockPackRid: ResourceId },\n ): PlRef[] | undefined {\n const req = { blockConfig, args };\n if (key === undefined) return this.calculateEnrichmentTargets(req);\n const cacheKey = `${key.argsRid}:${key.blockPackRid}`;\n return this.enrichmentTargetsCache.memo(cacheKey, { context: req }).value;\n }\n\n // =============================================================================\n // VM-based Storage Operations\n // =============================================================================\n\n /**\n * Creates initial BlockStorage for a new block using VM-based transformation.\n * This calls the '__pl_storage_initial' callback registered by DataModel which:\n * - Gets initial data from DataModel.getDefaultData()\n * - Creates BlockStorage with correct version\n *\n * @param blockConfig The block configuration (provides the model code)\n * @returns Initial storage as JSON string\n * @throws Error if storage creation fails\n */\n public getInitialStorageInVM(blockConfig: BlockConfig): string {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"getInitialStorageInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageInitial],\n extractCodeWithInfo(blockConfig),\n ) as string;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.getInitialStorageInVM] Initial storage creation failed\", {\n cause: e,\n }),\n );\n throw new Error(`Block initial storage creation failed: ${e}`);\n }\n }\n\n /**\n * Applies a state update using VM-based transformation.\n * This calls the model's `__pl_storage_applyUpdate` callback which:\n * - Normalizes current storage\n * - Updates state while preserving other fields (version, plugins)\n * - Returns the updated storage as JSON string\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param currentStorageJson Current storage as JSON string (must be defined)\n * @param newState New state from developer\n * @returns Updated storage as JSON string\n * @throws Error if storage update fails\n */\n public applyStorageUpdateInVM(\n blockConfig: BlockConfig,\n currentStorageJson: string,\n payload: { operation: string; value: unknown },\n ): string {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"applyStorageUpdateInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageApplyUpdate],\n extractCodeWithInfo(blockConfig),\n currentStorageJson,\n payload,\n ) as string;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.applyStorageUpdateInVM] Storage update failed\", { cause: e }),\n );\n throw new Error(`Block storage update failed: ${e}`);\n }\n }\n\n /**\n * Gets storage debug view from raw storage data by calling the VM's __pl_storage_debugView callback.\n * Returns structured debug info about the storage (e.g., dataVersion).\n *\n * @param blockConfig Block configuration\n * @param rawStorageJson Raw storage as JSON string (or undefined)\n * @returns Storage debug view as JSON string (e.g., '{\"dataVersion\": \"v1\"}')\n */\n public getStorageDebugViewInVM(\n blockConfig: BlockConfig,\n rawStorageJson: string | undefined,\n ): StringifiedJson<StorageDebugView> | undefined {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"getStorageDebugViewInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageDebugView],\n extractCodeWithInfo(blockConfig),\n rawStorageJson,\n ) as StringifiedJson<StorageDebugView>;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.getStorageDebugViewInVM] Get storage debug view failed\", {\n cause: e,\n }),\n );\n return undefined;\n }\n }\n\n // =============================================================================\n // Block State Migrations\n // =============================================================================\n\n /**\n * Runs block state migrations via VM-based transformation.\n * This calls the model's `__pl_storage_migrate` callback which:\n * - Normalizes current storage to get state and version\n * - Applies DataModel upgrade to reach target version key\n * - Runs all necessary migrations sequentially\n * - Returns new storage with updated state and version\n *\n * The middle layer doesn't need to know about dataVersion or storage internals.\n * All migration logic is encapsulated in the model.\n *\n * @param blockConfig The NEW block configuration (provides the model code with migrations)\n * @param currentStorageJson Current storage as JSON string (or undefined)\n * @returns MigrationResult with new storage or skip/error info\n */\n public migrateStorageInVM(\n blockConfig: BlockConfig,\n currentStorageJson: string | undefined,\n ): MigrationResult {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return { error: \"migrateStorageInVM is only supported for model API version 2\" };\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageMigrate],\n extractCodeWithInfo(blockConfig),\n currentStorageJson,\n ) as MigrationResult;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.migrateStorageInVM] Migration failed\", { cause: e }),\n );\n return { error: `VM execution failed: ${e}` };\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_helper.d.ts","names":[],"sources":["../../src/model/project_helper.ts"],"mappings":";;;;;;;;;;AA+BA;;;;;KAAY,eAAA;EACN,KAAA;AAAA;EACA,KAAA;EAAmB,cAAA,EAAgB,eAAA,CAAgB,YAAA;EAAe,IAAA;AAAA;AAAA,cAQ3D,aAAA;EAAA,iBAaQ,OAAA;EAAA,SACD,MAAA,EAAQ,QAAA;EAAA,iBAbT,sBAAA;cAYE,OAAA,EAAS,iBAAA,EACV,MAAA,GAAQ,QAAA;EAAA;;;;;;;;;;;EAkBnB,qBAAA,CACL,WAAA,EAAa,WAAA,EACb,WAAA,WACC,aAAA;EAsKA;;;;;;;;EAtII,2BAAA,CAA4B,WAAA,EAAa,WAAA,EAAa,WAAA;EAAA,QAwBrD,0BAAA;EAaD,oBAAA,CACL,WAAA,QAAmB,WAAA,EACnB,IAAA,iBACA,GAAA;IAAQ,OAAA,EAAS,UAAA;IAAY,YAAA,EAAc,UAAA;EAAA,IAC1C,KAAA;EA5EI;;;;;;;;;;EAiGA,qBAAA,CAAsB,WAAA,EAAa,WAAA;EAxBrB;;;;;;;;;;;;;EA2Dd,sBAAA,CACL,WAAA,EAAa,WAAA,EACb,kBAAA,UACA,OAAA;IAAW,SAAA;IAAmB,KAAA;EAAA;EAAA;;;;;;;;EA+BzB,uBAAA,CACL,WAAA,EAAa,WAAA,EACb,cAAA,uBACC,eAAA,CAAgB,gBAAA;EA2CJ;;;;;;;;;;;;;;;EADR,kBAAA,CACL,WAAA,EAAa,WAAA,EACb,kBAAA,uBACC,eAAA;AAAA"}
@@ -2,7 +2,6 @@ import { executeSingleLambda } from "../js_render/index.js";
2
2
  import { BLOCK_STORAGE_FACADE_VERSION, BlockStorageFacadeCallbacks, ensureError, extractCodeWithInfo } from "@platforma-sdk/model";
3
3
  import { ConsoleLoggerAdapter } from "@milaboratories/ts-helpers";
4
4
  import { LRUCache } from "lru-cache";
5
-
6
5
  //#region src/model/project_helper.ts
7
6
  var ProjectHelper = class {
8
7
  enrichmentTargetsCache = new LRUCache({
@@ -152,7 +151,7 @@ var ProjectHelper = class {
152
151
  }
153
152
  }
154
153
  };
155
-
156
154
  //#endregion
157
155
  export { ProjectHelper };
156
+
158
157
  //# sourceMappingURL=project_helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project_helper.js","names":[],"sources":["../../src/model/project_helper.ts"],"sourcesContent":["import type { ResultOrError, BlockConfig, BlockStorage, PlRef } from \"@platforma-sdk/model\";\nimport type { StringifiedJson } from \"@milaboratories/pl-model-common\";\nimport {\n extractCodeWithInfo,\n ensureError,\n BlockStorageFacadeCallbacks,\n BLOCK_STORAGE_FACADE_VERSION,\n} from \"@platforma-sdk/model\";\nimport { LRUCache } from \"lru-cache\";\nimport type { QuickJSWASMModule } from \"quickjs-emscripten\";\nimport { executeSingleLambda } from \"../js_render\";\nimport type { ResourceId } from \"@milaboratories/pl-client\";\nimport { ConsoleLoggerAdapter, type MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { StorageDebugView } from \"@milaboratories/pl-model-middle-layer\";\n\ntype EnrichmentTargetsRequest = {\n blockConfig: () => BlockConfig;\n args: () => unknown;\n};\n\ntype EnrichmentTargetsValue = {\n value: PlRef[] | undefined;\n};\n\n/**\n * Result of VM-based storage migration.\n * Returned by migrateStorageInVM().\n *\n * - Error result: { error: string } - serious failure (no context, etc.)\n * - Success result: { newStorageJson: StringifiedJson<BlockStorage>, info: string } - migration succeeded\n */\nexport type MigrationResult =\n | { error: string }\n | { error?: undefined; newStorageJson: StringifiedJson<BlockStorage>; info: string };\n\n/**\n * Result of args derivation from storage.\n * Returned by __pl_args_derive and __pl_prerunArgs_derive VM callbacks.\n */\ntype ArgsDeriveResult = { error: string } | { error?: undefined; value: unknown };\n\nexport class ProjectHelper {\n private readonly enrichmentTargetsCache = new LRUCache<\n string,\n EnrichmentTargetsValue,\n EnrichmentTargetsRequest\n >({\n max: 256,\n memoMethod: (_key, _value, { context }) => {\n return { value: this.calculateEnrichmentTargets(context) };\n },\n });\n\n constructor(\n private readonly quickJs: QuickJSWASMModule,\n public readonly logger: MiLogger = new ConsoleLoggerAdapter(),\n ) {}\n\n // =============================================================================\n // Args Derivation from Storage (V3+)\n // =============================================================================\n\n /**\n * Derives args directly from storage JSON using VM callback.\n * The VM extracts data from storage and calls the block's args() function.\n *\n * This allows the middle layer to work only with storage JSON,\n * without needing to know the underlying data structure.\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param storageJson Storage as JSON string\n * @returns The derived args object, or error if derivation fails\n */\n public deriveArgsFromStorage(\n blockConfig: BlockConfig,\n storageJson: string,\n ): ResultOrError<unknown> {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return {\n error: new Error(\"deriveArgsFromStorage is only supported for model API version 2\"),\n };\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.ArgsDerive],\n extractCodeWithInfo(blockConfig),\n storageJson,\n ) as ArgsDeriveResult;\n\n if (result.error !== undefined) {\n return { error: new Error(result.error) };\n }\n return { value: result.value };\n } catch (e) {\n return { error: new Error(\"Args derivation from storage failed\", { cause: ensureError(e) }) };\n }\n }\n\n /**\n * Derives prerunArgs directly from storage JSON using VM callback.\n * Falls back to args() if prerunArgs is not defined in the block model.\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param storageJson Storage as JSON string\n * @returns The derived prerunArgs, or undefined if derivation fails\n */\n public derivePrerunArgsFromStorage(blockConfig: BlockConfig, storageJson: string): unknown {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"derivePrerunArgsFromStorage is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.PrerunArgsDerive],\n extractCodeWithInfo(blockConfig),\n storageJson,\n ) as ArgsDeriveResult;\n\n if (result.error !== undefined) {\n // Return undefined if derivation fails (skip block in staging)\n return undefined;\n }\n return result.value;\n } catch {\n // Return undefined if derivation fails (skip block in staging)\n return undefined;\n }\n }\n\n private calculateEnrichmentTargets(req: EnrichmentTargetsRequest): PlRef[] | undefined {\n const blockConfig = req.blockConfig();\n if (blockConfig.enrichmentTargets === undefined) return undefined;\n const args = req.args();\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.enrichmentTargets,\n extractCodeWithInfo(blockConfig),\n args,\n ) as PlRef[];\n return result;\n }\n\n public getEnrichmentTargets(\n blockConfig: () => BlockConfig,\n args: () => unknown,\n key?: { argsRid: ResourceId; blockPackRid: ResourceId },\n ): PlRef[] | undefined {\n const req = { blockConfig, args };\n if (key === undefined) return this.calculateEnrichmentTargets(req);\n const cacheKey = `${key.argsRid}:${key.blockPackRid}`;\n return this.enrichmentTargetsCache.memo(cacheKey, { context: req }).value;\n }\n\n // =============================================================================\n // VM-based Storage Operations\n // =============================================================================\n\n /**\n * Creates initial BlockStorage for a new block using VM-based transformation.\n * This calls the '__pl_storage_initial' callback registered by DataModel which:\n * - Gets initial data from DataModel.getDefaultData()\n * - Creates BlockStorage with correct version\n *\n * @param blockConfig The block configuration (provides the model code)\n * @returns Initial storage as JSON string\n * @throws Error if storage creation fails\n */\n public getInitialStorageInVM(blockConfig: BlockConfig): string {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"getInitialStorageInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageInitial],\n extractCodeWithInfo(blockConfig),\n ) as string;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.getInitialStorageInVM] Initial storage creation failed\", {\n cause: e,\n }),\n );\n throw new Error(`Block initial storage creation failed: ${e}`);\n }\n }\n\n /**\n * Applies a state update using VM-based transformation.\n * This calls the model's `__pl_storage_applyUpdate` callback which:\n * - Normalizes current storage\n * - Updates state while preserving other fields (version, plugins)\n * - Returns the updated storage as JSON string\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param currentStorageJson Current storage as JSON string (must be defined)\n * @param newState New state from developer\n * @returns Updated storage as JSON string\n * @throws Error if storage update fails\n */\n public applyStorageUpdateInVM(\n blockConfig: BlockConfig,\n currentStorageJson: string,\n payload: { operation: string; value: unknown },\n ): string {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"applyStorageUpdateInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageApplyUpdate],\n extractCodeWithInfo(blockConfig),\n currentStorageJson,\n payload,\n ) as string;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.applyStorageUpdateInVM] Storage update failed\", { cause: e }),\n );\n throw new Error(`Block storage update failed: ${e}`);\n }\n }\n\n /**\n * Gets storage debug view from raw storage data by calling the VM's __pl_storage_debugView callback.\n * Returns structured debug info about the storage (e.g., dataVersion).\n *\n * @param blockConfig Block configuration\n * @param rawStorageJson Raw storage as JSON string (or undefined)\n * @returns Storage debug view as JSON string (e.g., '{\"dataVersion\": \"v1\"}')\n */\n public getStorageDebugViewInVM(\n blockConfig: BlockConfig,\n rawStorageJson: string | undefined,\n ): StringifiedJson<StorageDebugView> | undefined {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"getStorageDebugViewInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageDebugView],\n extractCodeWithInfo(blockConfig),\n rawStorageJson,\n ) as StringifiedJson<StorageDebugView>;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.getStorageDebugViewInVM] Get storage debug view failed\", {\n cause: e,\n }),\n );\n return undefined;\n }\n }\n\n // =============================================================================\n // Block State Migrations\n // =============================================================================\n\n /**\n * Runs block state migrations via VM-based transformation.\n * This calls the model's `__pl_storage_migrate` callback which:\n * - Normalizes current storage to get state and version\n * - Applies DataModel upgrade to reach target version key\n * - Runs all necessary migrations sequentially\n * - Returns new storage with updated state and version\n *\n * The middle layer doesn't need to know about dataVersion or storage internals.\n * All migration logic is encapsulated in the model.\n *\n * @param blockConfig The NEW block configuration (provides the model code with migrations)\n * @param currentStorageJson Current storage as JSON string (or undefined)\n * @returns MigrationResult with new storage or skip/error info\n */\n public migrateStorageInVM(\n blockConfig: BlockConfig,\n currentStorageJson: string | undefined,\n ): MigrationResult {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return { error: \"migrateStorageInVM is only supported for model API version 2\" };\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageMigrate],\n extractCodeWithInfo(blockConfig),\n currentStorageJson,\n ) as MigrationResult;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.migrateStorageInVM] Migration failed\", { cause: e }),\n );\n return { error: `VM execution failed: ${e}` };\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"project_helper.js","names":[],"sources":["../../src/model/project_helper.ts"],"sourcesContent":["import type { ResultOrError, BlockConfig, BlockStorage, PlRef } from \"@platforma-sdk/model\";\nimport type { StringifiedJson } from \"@milaboratories/pl-model-common\";\nimport {\n extractCodeWithInfo,\n ensureError,\n BlockStorageFacadeCallbacks,\n BLOCK_STORAGE_FACADE_VERSION,\n} from \"@platforma-sdk/model\";\nimport { LRUCache } from \"lru-cache\";\nimport type { QuickJSWASMModule } from \"quickjs-emscripten\";\nimport { executeSingleLambda } from \"../js_render\";\nimport type { ResourceId } from \"@milaboratories/pl-client\";\nimport { ConsoleLoggerAdapter, type MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { StorageDebugView } from \"@milaboratories/pl-model-middle-layer\";\n\ntype EnrichmentTargetsRequest = {\n blockConfig: () => BlockConfig;\n args: () => unknown;\n};\n\ntype EnrichmentTargetsValue = {\n value: PlRef[] | undefined;\n};\n\n/**\n * Result of VM-based storage migration.\n * Returned by migrateStorageInVM().\n *\n * - Error result: { error: string } - serious failure (no context, etc.)\n * - Success result: { newStorageJson: StringifiedJson<BlockStorage>, info: string } - migration succeeded\n */\nexport type MigrationResult =\n | { error: string }\n | { error?: undefined; newStorageJson: StringifiedJson<BlockStorage>; info: string };\n\n/**\n * Result of args derivation from storage.\n * Returned by __pl_args_derive and __pl_prerunArgs_derive VM callbacks.\n */\ntype ArgsDeriveResult = { error: string } | { error?: undefined; value: unknown };\n\nexport class ProjectHelper {\n private readonly enrichmentTargetsCache = new LRUCache<\n string,\n EnrichmentTargetsValue,\n EnrichmentTargetsRequest\n >({\n max: 256,\n memoMethod: (_key, _value, { context }) => {\n return { value: this.calculateEnrichmentTargets(context) };\n },\n });\n\n constructor(\n private readonly quickJs: QuickJSWASMModule,\n public readonly logger: MiLogger = new ConsoleLoggerAdapter(),\n ) {}\n\n // =============================================================================\n // Args Derivation from Storage (V3+)\n // =============================================================================\n\n /**\n * Derives args directly from storage JSON using VM callback.\n * The VM extracts data from storage and calls the block's args() function.\n *\n * This allows the middle layer to work only with storage JSON,\n * without needing to know the underlying data structure.\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param storageJson Storage as JSON string\n * @returns The derived args object, or error if derivation fails\n */\n public deriveArgsFromStorage(\n blockConfig: BlockConfig,\n storageJson: string,\n ): ResultOrError<unknown> {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return {\n error: new Error(\"deriveArgsFromStorage is only supported for model API version 2\"),\n };\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.ArgsDerive],\n extractCodeWithInfo(blockConfig),\n storageJson,\n ) as ArgsDeriveResult;\n\n if (result.error !== undefined) {\n return { error: new Error(result.error) };\n }\n return { value: result.value };\n } catch (e) {\n return { error: new Error(\"Args derivation from storage failed\", { cause: ensureError(e) }) };\n }\n }\n\n /**\n * Derives prerunArgs directly from storage JSON using VM callback.\n * Falls back to args() if prerunArgs is not defined in the block model.\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param storageJson Storage as JSON string\n * @returns The derived prerunArgs, or undefined if derivation fails\n */\n public derivePrerunArgsFromStorage(blockConfig: BlockConfig, storageJson: string): unknown {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"derivePrerunArgsFromStorage is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.PrerunArgsDerive],\n extractCodeWithInfo(blockConfig),\n storageJson,\n ) as ArgsDeriveResult;\n\n if (result.error !== undefined) {\n // Return undefined if derivation fails (skip block in staging)\n return undefined;\n }\n return result.value;\n } catch {\n // Return undefined if derivation fails (skip block in staging)\n return undefined;\n }\n }\n\n private calculateEnrichmentTargets(req: EnrichmentTargetsRequest): PlRef[] | undefined {\n const blockConfig = req.blockConfig();\n if (blockConfig.enrichmentTargets === undefined) return undefined;\n const args = req.args();\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.enrichmentTargets,\n extractCodeWithInfo(blockConfig),\n args,\n ) as PlRef[];\n return result;\n }\n\n public getEnrichmentTargets(\n blockConfig: () => BlockConfig,\n args: () => unknown,\n key?: { argsRid: ResourceId; blockPackRid: ResourceId },\n ): PlRef[] | undefined {\n const req = { blockConfig, args };\n if (key === undefined) return this.calculateEnrichmentTargets(req);\n const cacheKey = `${key.argsRid}:${key.blockPackRid}`;\n return this.enrichmentTargetsCache.memo(cacheKey, { context: req }).value;\n }\n\n // =============================================================================\n // VM-based Storage Operations\n // =============================================================================\n\n /**\n * Creates initial BlockStorage for a new block using VM-based transformation.\n * This calls the '__pl_storage_initial' callback registered by DataModel which:\n * - Gets initial data from DataModel.getDefaultData()\n * - Creates BlockStorage with correct version\n *\n * @param blockConfig The block configuration (provides the model code)\n * @returns Initial storage as JSON string\n * @throws Error if storage creation fails\n */\n public getInitialStorageInVM(blockConfig: BlockConfig): string {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"getInitialStorageInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageInitial],\n extractCodeWithInfo(blockConfig),\n ) as string;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.getInitialStorageInVM] Initial storage creation failed\", {\n cause: e,\n }),\n );\n throw new Error(`Block initial storage creation failed: ${e}`);\n }\n }\n\n /**\n * Applies a state update using VM-based transformation.\n * This calls the model's `__pl_storage_applyUpdate` callback which:\n * - Normalizes current storage\n * - Updates state while preserving other fields (version, plugins)\n * - Returns the updated storage as JSON string\n *\n * @param blockConfig The block configuration (provides the model code)\n * @param currentStorageJson Current storage as JSON string (must be defined)\n * @param newState New state from developer\n * @returns Updated storage as JSON string\n * @throws Error if storage update fails\n */\n public applyStorageUpdateInVM(\n blockConfig: BlockConfig,\n currentStorageJson: string,\n payload: { operation: string; value: unknown },\n ): string {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"applyStorageUpdateInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageApplyUpdate],\n extractCodeWithInfo(blockConfig),\n currentStorageJson,\n payload,\n ) as string;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.applyStorageUpdateInVM] Storage update failed\", { cause: e }),\n );\n throw new Error(`Block storage update failed: ${e}`);\n }\n }\n\n /**\n * Gets storage debug view from raw storage data by calling the VM's __pl_storage_debugView callback.\n * Returns structured debug info about the storage (e.g., dataVersion).\n *\n * @param blockConfig Block configuration\n * @param rawStorageJson Raw storage as JSON string (or undefined)\n * @returns Storage debug view as JSON string (e.g., '{\"dataVersion\": \"v1\"}')\n */\n public getStorageDebugViewInVM(\n blockConfig: BlockConfig,\n rawStorageJson: string | undefined,\n ): StringifiedJson<StorageDebugView> | undefined {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n throw new Error(\"getStorageDebugViewInVM is only supported for model API version 2\");\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageDebugView],\n extractCodeWithInfo(blockConfig),\n rawStorageJson,\n ) as StringifiedJson<StorageDebugView>;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.getStorageDebugViewInVM] Get storage debug view failed\", {\n cause: e,\n }),\n );\n return undefined;\n }\n }\n\n // =============================================================================\n // Block State Migrations\n // =============================================================================\n\n /**\n * Runs block state migrations via VM-based transformation.\n * This calls the model's `__pl_storage_migrate` callback which:\n * - Normalizes current storage to get state and version\n * - Applies DataModel upgrade to reach target version key\n * - Runs all necessary migrations sequentially\n * - Returns new storage with updated state and version\n *\n * The middle layer doesn't need to know about dataVersion or storage internals.\n * All migration logic is encapsulated in the model.\n *\n * @param blockConfig The NEW block configuration (provides the model code with migrations)\n * @param currentStorageJson Current storage as JSON string (or undefined)\n * @returns MigrationResult with new storage or skip/error info\n */\n public migrateStorageInVM(\n blockConfig: BlockConfig,\n currentStorageJson: string | undefined,\n ): MigrationResult {\n if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {\n return { error: \"migrateStorageInVM is only supported for model API version 2\" };\n }\n\n try {\n const result = executeSingleLambda(\n this.quickJs,\n blockConfig.blockLifecycleCallbacks[BlockStorageFacadeCallbacks.StorageMigrate],\n extractCodeWithInfo(blockConfig),\n currentStorageJson,\n ) as MigrationResult;\n return result;\n } catch (e) {\n this.logger.error(\n new Error(\"[ProjectHelper.migrateStorageInVM] Migration failed\", { cause: e }),\n );\n return { error: `VM execution failed: ${e}` };\n }\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/model/project_model.ts
3
2
  const InitialBlockStructure = { groups: [{
4
3
  id: "default",
@@ -15,8 +14,6 @@ const ProjectResourceType = {
15
14
  version: "2"
16
15
  };
17
16
  const SchemaVersionKey = "SchemaVersion";
18
- const SchemaVersionV2 = "2";
19
- const SchemaVersionV3 = "3";
20
17
  const SchemaVersionCurrent = "4";
21
18
  const ProjectCreatedTimestamp = "ProjectCreated";
22
19
  const ProjectLastModifiedTimestamp = "ProjectLastModified";
@@ -56,7 +53,6 @@ function parseProjectField(name) {
56
53
  fieldName
57
54
  };
58
55
  }
59
-
60
56
  //#endregion
61
57
  exports.BlockArgsAuthorKeyPrefix = BlockArgsAuthorKeyPrefix;
62
58
  exports.BlockRenderingStateKey = BlockRenderingStateKey;
@@ -72,10 +68,9 @@ exports.ProjectStructureAuthorKey = ProjectStructureAuthorKey;
72
68
  exports.ProjectStructureKey = ProjectStructureKey;
73
69
  exports.SchemaVersionCurrent = SchemaVersionCurrent;
74
70
  exports.SchemaVersionKey = SchemaVersionKey;
75
- exports.SchemaVersionV2 = SchemaVersionV2;
76
- exports.SchemaVersionV3 = SchemaVersionV3;
77
71
  exports.blockArgsAuthorKey = blockArgsAuthorKey;
78
72
  exports.getServiceTemplateField = getServiceTemplateField;
79
73
  exports.parseProjectField = parseProjectField;
80
74
  exports.projectFieldName = projectFieldName;
75
+
81
76
  //# sourceMappingURL=project_model.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"project_model.cjs","names":[],"sources":["../../src/model/project_model.ts"],"sourcesContent":["import type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport type {\n ProjectListEntry as ProjectListEntryFromModel,\n ProjectMeta,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { BlockRenderingMode } from \"@platforma-sdk/model\";\n\nexport interface ProjectListEntry extends ProjectListEntryFromModel {\n /** Project resource ID. */\n rid: ResourceId;\n}\n\n/** Entry representing a single block in block structure */\nexport interface Block {\n /** Unique block id */\n readonly id: string;\n\n /**\n * Label shown to the user\n * @deprecated\n * */\n label: string;\n\n /** How to approach block rendering */\n renderingMode: BlockRenderingMode;\n}\n\n/** Block group in block structure */\nexport interface BlockGroup {\n /** Unique group id */\n readonly id: string;\n\n /** Label shown to the user */\n label: string;\n\n /** Blocks */\n blocks: Block[];\n}\n\n/** Root of block structure value */\nexport interface ProjectStructure {\n /** The structure */\n readonly groups: BlockGroup[];\n}\n\nexport const InitialBlockStructure: ProjectStructure = {\n groups: [{ id: \"default\", label: \"Default\", blocks: [] }],\n};\n\n/** Root of project rendering state */\nexport interface ProjectRenderingState {\n /** Timestamp of last staging rendering event */\n stagingRefreshTimestamp: number;\n\n /** Blocks with detached production state, i.e. some of the dependencies of\n * such blocks were re-rendered, but their state was left \"as is\". */\n blocksInLimbo: string[];\n}\n\nexport const InitialProjectRenderingState: ProjectRenderingState = {\n stagingRefreshTimestamp: 0,\n blocksInLimbo: [],\n};\n\nexport const InitialBlockMeta: ProjectMeta = {\n label: \"New Project\",\n};\n\n//\n// Pl Model\n//\n\nexport const ProjectResourceType: ResourceType = { name: \"UserProject\", version: \"2\" };\n\nexport const SchemaVersionKey = \"SchemaVersion\";\nexport const SchemaVersionV2 = \"2\";\nexport const SchemaVersionV3 = \"3\";\nexport const SchemaVersionCurrent = \"4\";\n\nexport const ProjectCreatedTimestamp = \"ProjectCreated\";\nexport const ProjectLastModifiedTimestamp = \"ProjectLastModified\";\nexport const ProjectMetaKey = \"ProjectMeta\";\nexport const ProjectStructureKey = \"ProjectStructure\";\nexport const BlockRenderingStateKey = \"BlockRenderingState\";\n\nexport const BlockArgsAuthorKeyPrefix = \"BlockArgsAuthor/\";\nexport const BlockArgsAuthorKeyPattern = /^BlockArgsAuthor\\/(?<blockid>.*)$/;\n\nexport function blockArgsAuthorKey(blockId: string): string {\n return `${BlockArgsAuthorKeyPrefix}${blockId}`;\n}\n\nexport const ProjectStructureAuthorKey = \"ProjectStructureAuthor\";\n\nexport const ServiceTemplateCacheFieldPrefix = \"__serviceTemplate_\";\n\nexport function getServiceTemplateField(hash: string): string {\n return `${ServiceTemplateCacheFieldPrefix}${hash}`;\n}\n\nexport interface ProjectField {\n blockId: string;\n fieldName:\n | \"blockPack\"\n | \"blockSettings\"\n | \"blockStorage\" // Persistent storage for v3 blocks (state, plugins data, etc.)\n | \"prodArgs\"\n | \"currentArgs\"\n | \"currentPrerunArgs\" // Derived args for staging/prerun rendering (from prerunArgs() or args())\n | \"prodChainCtx\" // Pre-built production context chain node (accumulated prodCtx from all blocks above)\n | \"prodCtx\"\n | \"prodUiCtx\"\n | \"prodOutput\"\n | \"prodCtxPrevious\"\n | \"prodUiCtxPrevious\"\n | \"prodOutputPrevious\"\n | \"stagingCtx\"\n | \"stagingUiCtx\"\n | \"stagingOutput\"\n | \"stagingCtxPrevious\"\n | \"stagingUiCtxPrevious\"\n | \"stagingOutputPrevious\";\n}\n\nexport const FieldsToDuplicate: Set<ProjectField[\"fieldName\"]> = new Set([\n \"blockPack\",\n \"blockSettings\",\n \"blockStorage\",\n \"prodArgs\",\n \"currentArgs\",\n \"currentPrerunArgs\",\n \"prodCtx\",\n \"prodUiCtx\",\n \"prodOutput\",\n]);\n\nexport function projectFieldName(blockId: string, fieldName: ProjectField[\"fieldName\"]): string {\n return `${blockId}-${fieldName}`;\n}\n\nconst projectFieldPattern =\n /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|blockStorage|inputsValid|prodArgs|currentArgs|currentPrerunArgs|prodChainCtx|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;\n\nexport function parseProjectField(name: string): ProjectField | undefined {\n const match = name.match(projectFieldPattern);\n if (match === null) return undefined;\n const { blockId, fieldName } = match.groups!;\n return { blockId, fieldName } as ProjectField;\n}\n"],"mappings":";;AA6CA,MAAa,wBAA0C,EACrD,QAAQ,CAAC;CAAE,IAAI;CAAW,OAAO;CAAW,QAAQ,EAAE;CAAE,CAAC,EAC1D;AAYD,MAAa,+BAAsD;CACjE,yBAAyB;CACzB,eAAe,EAAE;CAClB;AAED,MAAa,mBAAgC,EAC3C,OAAO,eACR;AAMD,MAAa,sBAAoC;CAAE,MAAM;CAAe,SAAS;CAAK;AAEtF,MAAa,mBAAmB;AAChC,MAAa,kBAAkB;AAC/B,MAAa,kBAAkB;AAC/B,MAAa,uBAAuB;AAEpC,MAAa,0BAA0B;AACvC,MAAa,+BAA+B;AAC5C,MAAa,iBAAiB;AAC9B,MAAa,sBAAsB;AACnC,MAAa,yBAAyB;AAEtC,MAAa,2BAA2B;AAGxC,SAAgB,mBAAmB,SAAyB;AAC1D,QAAO,GAAG,2BAA2B;;AAGvC,MAAa,4BAA4B;AAEzC,MAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,MAAsB;AAC5D,QAAO,GAAG,kCAAkC;;AA2B9C,MAAa,oBAAoD,IAAI,IAAI;CACvE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,iBAAiB,SAAiB,WAA8C;AAC9F,QAAO,GAAG,QAAQ,GAAG;;AAGvB,MAAM,sBACJ;AAEF,SAAgB,kBAAkB,MAAwC;CACxE,MAAM,QAAQ,KAAK,MAAM,oBAAoB;AAC7C,KAAI,UAAU,KAAM,QAAO;CAC3B,MAAM,EAAE,SAAS,cAAc,MAAM;AACrC,QAAO;EAAE;EAAS;EAAW"}
1
+ {"version":3,"file":"project_model.cjs","names":[],"sources":["../../src/model/project_model.ts"],"sourcesContent":["import type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport type {\n ProjectListEntry as ProjectListEntryFromModel,\n ProjectMeta,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { BlockRenderingMode } from \"@platforma-sdk/model\";\n\nexport interface ProjectListEntry extends ProjectListEntryFromModel {\n /** Project resource ID. */\n rid: ResourceId;\n}\n\n/** Entry representing a single block in block structure */\nexport interface Block {\n /** Unique block id */\n readonly id: string;\n\n /**\n * Label shown to the user\n * @deprecated\n * */\n label: string;\n\n /** How to approach block rendering */\n renderingMode: BlockRenderingMode;\n}\n\n/** Block group in block structure */\nexport interface BlockGroup {\n /** Unique group id */\n readonly id: string;\n\n /** Label shown to the user */\n label: string;\n\n /** Blocks */\n blocks: Block[];\n}\n\n/** Root of block structure value */\nexport interface ProjectStructure {\n /** The structure */\n readonly groups: BlockGroup[];\n}\n\nexport const InitialBlockStructure: ProjectStructure = {\n groups: [{ id: \"default\", label: \"Default\", blocks: [] }],\n};\n\n/** Root of project rendering state */\nexport interface ProjectRenderingState {\n /** Timestamp of last staging rendering event */\n stagingRefreshTimestamp: number;\n\n /** Blocks with detached production state, i.e. some of the dependencies of\n * such blocks were re-rendered, but their state was left \"as is\". */\n blocksInLimbo: string[];\n}\n\nexport const InitialProjectRenderingState: ProjectRenderingState = {\n stagingRefreshTimestamp: 0,\n blocksInLimbo: [],\n};\n\nexport const InitialBlockMeta: ProjectMeta = {\n label: \"New Project\",\n};\n\n//\n// Pl Model\n//\n\nexport const ProjectResourceType: ResourceType = { name: \"UserProject\", version: \"2\" };\n\nexport const SchemaVersionKey = \"SchemaVersion\";\nexport const SchemaVersionV2 = \"2\";\nexport const SchemaVersionV3 = \"3\";\nexport const SchemaVersionCurrent = \"4\";\n\nexport const ProjectCreatedTimestamp = \"ProjectCreated\";\nexport const ProjectLastModifiedTimestamp = \"ProjectLastModified\";\nexport const ProjectMetaKey = \"ProjectMeta\";\nexport const ProjectStructureKey = \"ProjectStructure\";\nexport const BlockRenderingStateKey = \"BlockRenderingState\";\n\nexport const BlockArgsAuthorKeyPrefix = \"BlockArgsAuthor/\";\nexport const BlockArgsAuthorKeyPattern = /^BlockArgsAuthor\\/(?<blockid>.*)$/;\n\nexport function blockArgsAuthorKey(blockId: string): string {\n return `${BlockArgsAuthorKeyPrefix}${blockId}`;\n}\n\nexport const ProjectStructureAuthorKey = \"ProjectStructureAuthor\";\n\nexport const ServiceTemplateCacheFieldPrefix = \"__serviceTemplate_\";\n\nexport function getServiceTemplateField(hash: string): string {\n return `${ServiceTemplateCacheFieldPrefix}${hash}`;\n}\n\nexport interface ProjectField {\n blockId: string;\n fieldName:\n | \"blockPack\"\n | \"blockSettings\"\n | \"blockStorage\" // Persistent storage for v3 blocks (state, plugins data, etc.)\n | \"prodArgs\"\n | \"currentArgs\"\n | \"currentPrerunArgs\" // Derived args for staging/prerun rendering (from prerunArgs() or args())\n | \"prodChainCtx\" // Pre-built production context chain node (accumulated prodCtx from all blocks above)\n | \"prodCtx\"\n | \"prodUiCtx\"\n | \"prodOutput\"\n | \"prodCtxPrevious\"\n | \"prodUiCtxPrevious\"\n | \"prodOutputPrevious\"\n | \"stagingCtx\"\n | \"stagingUiCtx\"\n | \"stagingOutput\"\n | \"stagingCtxPrevious\"\n | \"stagingUiCtxPrevious\"\n | \"stagingOutputPrevious\";\n}\n\nexport const FieldsToDuplicate: Set<ProjectField[\"fieldName\"]> = new Set([\n \"blockPack\",\n \"blockSettings\",\n \"blockStorage\",\n \"prodArgs\",\n \"currentArgs\",\n \"currentPrerunArgs\",\n \"prodCtx\",\n \"prodUiCtx\",\n \"prodOutput\",\n]);\n\nexport function projectFieldName(blockId: string, fieldName: ProjectField[\"fieldName\"]): string {\n return `${blockId}-${fieldName}`;\n}\n\nconst projectFieldPattern =\n /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|blockStorage|inputsValid|prodArgs|currentArgs|currentPrerunArgs|prodChainCtx|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;\n\nexport function parseProjectField(name: string): ProjectField | undefined {\n const match = name.match(projectFieldPattern);\n if (match === null) return undefined;\n const { blockId, fieldName } = match.groups!;\n return { blockId, fieldName } as ProjectField;\n}\n"],"mappings":";AA6CA,MAAa,wBAA0C,EACrD,QAAQ,CAAC;CAAE,IAAI;CAAW,OAAO;CAAW,QAAQ,EAAE;CAAE,CAAC,EAC1D;AAYD,MAAa,+BAAsD;CACjE,yBAAyB;CACzB,eAAe,EAAE;CAClB;AAED,MAAa,mBAAgC,EAC3C,OAAO,eACR;AAMD,MAAa,sBAAoC;CAAE,MAAM;CAAe,SAAS;CAAK;AAEtF,MAAa,mBAAmB;AAGhC,MAAa,uBAAuB;AAEpC,MAAa,0BAA0B;AACvC,MAAa,+BAA+B;AAC5C,MAAa,iBAAiB;AAC9B,MAAa,sBAAsB;AACnC,MAAa,yBAAyB;AAEtC,MAAa,2BAA2B;AAGxC,SAAgB,mBAAmB,SAAyB;AAC1D,QAAO,GAAG,2BAA2B;;AAGvC,MAAa,4BAA4B;AAEzC,MAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,MAAsB;AAC5D,QAAO,GAAG,kCAAkC;;AA2B9C,MAAa,oBAAoD,IAAI,IAAI;CACvE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,iBAAiB,SAAiB,WAA8C;AAC9F,QAAO,GAAG,QAAQ,GAAG;;AAGvB,MAAM,sBACJ;AAEF,SAAgB,kBAAkB,MAAwC;CACxE,MAAM,QAAQ,KAAK,MAAM,oBAAoB;AAC7C,KAAI,UAAU,KAAM,QAAO,KAAA;CAC3B,MAAM,EAAE,SAAS,cAAc,MAAM;AACrC,QAAO;EAAE;EAAS;EAAW"}
@@ -1,4 +1,3 @@
1
- import "@platforma-sdk/model";
2
1
  import { ProjectListEntry, ProjectMeta } from "@milaboratories/pl-model-middle-layer";
3
2
  import { ResourceId, ResourceType } from "@milaboratories/pl-client";
4
3
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_model.d.ts","names":[],"sources":["../../src/model/project_model.ts"],"mappings":";;;;UAOiB,kBAAA,SAAyB,gBAAA;;EAExC,GAAA,EAAK,UAAA;AAAA;AAAA,cA+DM,mBAAA,EAAqB,YAAA;AAAA,cAErB,gBAAA;AAAA,cAGA,oBAAA;AAAA,cAEA,uBAAA;AAAA,cACA,4BAAA;AAAA,cACA,cAAA;AAAA,cACA,mBAAA;AAAA,cAGA,wBAAA;AAAA,cAOA,yBAAA;AAAA,UAQI,YAAA;EACf,OAAA;EACA,SAAA;AAAA"}
@@ -14,8 +14,6 @@ const ProjectResourceType = {
14
14
  version: "2"
15
15
  };
16
16
  const SchemaVersionKey = "SchemaVersion";
17
- const SchemaVersionV2 = "2";
18
- const SchemaVersionV3 = "3";
19
17
  const SchemaVersionCurrent = "4";
20
18
  const ProjectCreatedTimestamp = "ProjectCreated";
21
19
  const ProjectLastModifiedTimestamp = "ProjectLastModified";
@@ -55,7 +53,7 @@ function parseProjectField(name) {
55
53
  fieldName
56
54
  };
57
55
  }
58
-
59
56
  //#endregion
60
- export { BlockArgsAuthorKeyPrefix, BlockRenderingStateKey, FieldsToDuplicate, InitialBlockMeta, InitialBlockStructure, InitialProjectRenderingState, ProjectCreatedTimestamp, ProjectLastModifiedTimestamp, ProjectMetaKey, ProjectResourceType, ProjectStructureAuthorKey, ProjectStructureKey, SchemaVersionCurrent, SchemaVersionKey, SchemaVersionV2, SchemaVersionV3, blockArgsAuthorKey, getServiceTemplateField, parseProjectField, projectFieldName };
57
+ export { BlockArgsAuthorKeyPrefix, BlockRenderingStateKey, FieldsToDuplicate, InitialBlockMeta, InitialBlockStructure, InitialProjectRenderingState, ProjectCreatedTimestamp, ProjectLastModifiedTimestamp, ProjectMetaKey, ProjectResourceType, ProjectStructureAuthorKey, ProjectStructureKey, SchemaVersionCurrent, SchemaVersionKey, blockArgsAuthorKey, getServiceTemplateField, parseProjectField, projectFieldName };
58
+
61
59
  //# sourceMappingURL=project_model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project_model.js","names":[],"sources":["../../src/model/project_model.ts"],"sourcesContent":["import type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport type {\n ProjectListEntry as ProjectListEntryFromModel,\n ProjectMeta,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { BlockRenderingMode } from \"@platforma-sdk/model\";\n\nexport interface ProjectListEntry extends ProjectListEntryFromModel {\n /** Project resource ID. */\n rid: ResourceId;\n}\n\n/** Entry representing a single block in block structure */\nexport interface Block {\n /** Unique block id */\n readonly id: string;\n\n /**\n * Label shown to the user\n * @deprecated\n * */\n label: string;\n\n /** How to approach block rendering */\n renderingMode: BlockRenderingMode;\n}\n\n/** Block group in block structure */\nexport interface BlockGroup {\n /** Unique group id */\n readonly id: string;\n\n /** Label shown to the user */\n label: string;\n\n /** Blocks */\n blocks: Block[];\n}\n\n/** Root of block structure value */\nexport interface ProjectStructure {\n /** The structure */\n readonly groups: BlockGroup[];\n}\n\nexport const InitialBlockStructure: ProjectStructure = {\n groups: [{ id: \"default\", label: \"Default\", blocks: [] }],\n};\n\n/** Root of project rendering state */\nexport interface ProjectRenderingState {\n /** Timestamp of last staging rendering event */\n stagingRefreshTimestamp: number;\n\n /** Blocks with detached production state, i.e. some of the dependencies of\n * such blocks were re-rendered, but their state was left \"as is\". */\n blocksInLimbo: string[];\n}\n\nexport const InitialProjectRenderingState: ProjectRenderingState = {\n stagingRefreshTimestamp: 0,\n blocksInLimbo: [],\n};\n\nexport const InitialBlockMeta: ProjectMeta = {\n label: \"New Project\",\n};\n\n//\n// Pl Model\n//\n\nexport const ProjectResourceType: ResourceType = { name: \"UserProject\", version: \"2\" };\n\nexport const SchemaVersionKey = \"SchemaVersion\";\nexport const SchemaVersionV2 = \"2\";\nexport const SchemaVersionV3 = \"3\";\nexport const SchemaVersionCurrent = \"4\";\n\nexport const ProjectCreatedTimestamp = \"ProjectCreated\";\nexport const ProjectLastModifiedTimestamp = \"ProjectLastModified\";\nexport const ProjectMetaKey = \"ProjectMeta\";\nexport const ProjectStructureKey = \"ProjectStructure\";\nexport const BlockRenderingStateKey = \"BlockRenderingState\";\n\nexport const BlockArgsAuthorKeyPrefix = \"BlockArgsAuthor/\";\nexport const BlockArgsAuthorKeyPattern = /^BlockArgsAuthor\\/(?<blockid>.*)$/;\n\nexport function blockArgsAuthorKey(blockId: string): string {\n return `${BlockArgsAuthorKeyPrefix}${blockId}`;\n}\n\nexport const ProjectStructureAuthorKey = \"ProjectStructureAuthor\";\n\nexport const ServiceTemplateCacheFieldPrefix = \"__serviceTemplate_\";\n\nexport function getServiceTemplateField(hash: string): string {\n return `${ServiceTemplateCacheFieldPrefix}${hash}`;\n}\n\nexport interface ProjectField {\n blockId: string;\n fieldName:\n | \"blockPack\"\n | \"blockSettings\"\n | \"blockStorage\" // Persistent storage for v3 blocks (state, plugins data, etc.)\n | \"prodArgs\"\n | \"currentArgs\"\n | \"currentPrerunArgs\" // Derived args for staging/prerun rendering (from prerunArgs() or args())\n | \"prodChainCtx\" // Pre-built production context chain node (accumulated prodCtx from all blocks above)\n | \"prodCtx\"\n | \"prodUiCtx\"\n | \"prodOutput\"\n | \"prodCtxPrevious\"\n | \"prodUiCtxPrevious\"\n | \"prodOutputPrevious\"\n | \"stagingCtx\"\n | \"stagingUiCtx\"\n | \"stagingOutput\"\n | \"stagingCtxPrevious\"\n | \"stagingUiCtxPrevious\"\n | \"stagingOutputPrevious\";\n}\n\nexport const FieldsToDuplicate: Set<ProjectField[\"fieldName\"]> = new Set([\n \"blockPack\",\n \"blockSettings\",\n \"blockStorage\",\n \"prodArgs\",\n \"currentArgs\",\n \"currentPrerunArgs\",\n \"prodCtx\",\n \"prodUiCtx\",\n \"prodOutput\",\n]);\n\nexport function projectFieldName(blockId: string, fieldName: ProjectField[\"fieldName\"]): string {\n return `${blockId}-${fieldName}`;\n}\n\nconst projectFieldPattern =\n /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|blockStorage|inputsValid|prodArgs|currentArgs|currentPrerunArgs|prodChainCtx|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;\n\nexport function parseProjectField(name: string): ProjectField | undefined {\n const match = name.match(projectFieldPattern);\n if (match === null) return undefined;\n const { blockId, fieldName } = match.groups!;\n return { blockId, fieldName } as ProjectField;\n}\n"],"mappings":";AA6CA,MAAa,wBAA0C,EACrD,QAAQ,CAAC;CAAE,IAAI;CAAW,OAAO;CAAW,QAAQ,EAAE;CAAE,CAAC,EAC1D;AAYD,MAAa,+BAAsD;CACjE,yBAAyB;CACzB,eAAe,EAAE;CAClB;AAED,MAAa,mBAAgC,EAC3C,OAAO,eACR;AAMD,MAAa,sBAAoC;CAAE,MAAM;CAAe,SAAS;CAAK;AAEtF,MAAa,mBAAmB;AAChC,MAAa,kBAAkB;AAC/B,MAAa,kBAAkB;AAC/B,MAAa,uBAAuB;AAEpC,MAAa,0BAA0B;AACvC,MAAa,+BAA+B;AAC5C,MAAa,iBAAiB;AAC9B,MAAa,sBAAsB;AACnC,MAAa,yBAAyB;AAEtC,MAAa,2BAA2B;AAGxC,SAAgB,mBAAmB,SAAyB;AAC1D,QAAO,GAAG,2BAA2B;;AAGvC,MAAa,4BAA4B;AAEzC,MAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,MAAsB;AAC5D,QAAO,GAAG,kCAAkC;;AA2B9C,MAAa,oBAAoD,IAAI,IAAI;CACvE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,iBAAiB,SAAiB,WAA8C;AAC9F,QAAO,GAAG,QAAQ,GAAG;;AAGvB,MAAM,sBACJ;AAEF,SAAgB,kBAAkB,MAAwC;CACxE,MAAM,QAAQ,KAAK,MAAM,oBAAoB;AAC7C,KAAI,UAAU,KAAM,QAAO;CAC3B,MAAM,EAAE,SAAS,cAAc,MAAM;AACrC,QAAO;EAAE;EAAS;EAAW"}
1
+ {"version":3,"file":"project_model.js","names":[],"sources":["../../src/model/project_model.ts"],"sourcesContent":["import type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport type {\n ProjectListEntry as ProjectListEntryFromModel,\n ProjectMeta,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { BlockRenderingMode } from \"@platforma-sdk/model\";\n\nexport interface ProjectListEntry extends ProjectListEntryFromModel {\n /** Project resource ID. */\n rid: ResourceId;\n}\n\n/** Entry representing a single block in block structure */\nexport interface Block {\n /** Unique block id */\n readonly id: string;\n\n /**\n * Label shown to the user\n * @deprecated\n * */\n label: string;\n\n /** How to approach block rendering */\n renderingMode: BlockRenderingMode;\n}\n\n/** Block group in block structure */\nexport interface BlockGroup {\n /** Unique group id */\n readonly id: string;\n\n /** Label shown to the user */\n label: string;\n\n /** Blocks */\n blocks: Block[];\n}\n\n/** Root of block structure value */\nexport interface ProjectStructure {\n /** The structure */\n readonly groups: BlockGroup[];\n}\n\nexport const InitialBlockStructure: ProjectStructure = {\n groups: [{ id: \"default\", label: \"Default\", blocks: [] }],\n};\n\n/** Root of project rendering state */\nexport interface ProjectRenderingState {\n /** Timestamp of last staging rendering event */\n stagingRefreshTimestamp: number;\n\n /** Blocks with detached production state, i.e. some of the dependencies of\n * such blocks were re-rendered, but their state was left \"as is\". */\n blocksInLimbo: string[];\n}\n\nexport const InitialProjectRenderingState: ProjectRenderingState = {\n stagingRefreshTimestamp: 0,\n blocksInLimbo: [],\n};\n\nexport const InitialBlockMeta: ProjectMeta = {\n label: \"New Project\",\n};\n\n//\n// Pl Model\n//\n\nexport const ProjectResourceType: ResourceType = { name: \"UserProject\", version: \"2\" };\n\nexport const SchemaVersionKey = \"SchemaVersion\";\nexport const SchemaVersionV2 = \"2\";\nexport const SchemaVersionV3 = \"3\";\nexport const SchemaVersionCurrent = \"4\";\n\nexport const ProjectCreatedTimestamp = \"ProjectCreated\";\nexport const ProjectLastModifiedTimestamp = \"ProjectLastModified\";\nexport const ProjectMetaKey = \"ProjectMeta\";\nexport const ProjectStructureKey = \"ProjectStructure\";\nexport const BlockRenderingStateKey = \"BlockRenderingState\";\n\nexport const BlockArgsAuthorKeyPrefix = \"BlockArgsAuthor/\";\nexport const BlockArgsAuthorKeyPattern = /^BlockArgsAuthor\\/(?<blockid>.*)$/;\n\nexport function blockArgsAuthorKey(blockId: string): string {\n return `${BlockArgsAuthorKeyPrefix}${blockId}`;\n}\n\nexport const ProjectStructureAuthorKey = \"ProjectStructureAuthor\";\n\nexport const ServiceTemplateCacheFieldPrefix = \"__serviceTemplate_\";\n\nexport function getServiceTemplateField(hash: string): string {\n return `${ServiceTemplateCacheFieldPrefix}${hash}`;\n}\n\nexport interface ProjectField {\n blockId: string;\n fieldName:\n | \"blockPack\"\n | \"blockSettings\"\n | \"blockStorage\" // Persistent storage for v3 blocks (state, plugins data, etc.)\n | \"prodArgs\"\n | \"currentArgs\"\n | \"currentPrerunArgs\" // Derived args for staging/prerun rendering (from prerunArgs() or args())\n | \"prodChainCtx\" // Pre-built production context chain node (accumulated prodCtx from all blocks above)\n | \"prodCtx\"\n | \"prodUiCtx\"\n | \"prodOutput\"\n | \"prodCtxPrevious\"\n | \"prodUiCtxPrevious\"\n | \"prodOutputPrevious\"\n | \"stagingCtx\"\n | \"stagingUiCtx\"\n | \"stagingOutput\"\n | \"stagingCtxPrevious\"\n | \"stagingUiCtxPrevious\"\n | \"stagingOutputPrevious\";\n}\n\nexport const FieldsToDuplicate: Set<ProjectField[\"fieldName\"]> = new Set([\n \"blockPack\",\n \"blockSettings\",\n \"blockStorage\",\n \"prodArgs\",\n \"currentArgs\",\n \"currentPrerunArgs\",\n \"prodCtx\",\n \"prodUiCtx\",\n \"prodOutput\",\n]);\n\nexport function projectFieldName(blockId: string, fieldName: ProjectField[\"fieldName\"]): string {\n return `${blockId}-${fieldName}`;\n}\n\nconst projectFieldPattern =\n /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|blockStorage|inputsValid|prodArgs|currentArgs|currentPrerunArgs|prodChainCtx|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;\n\nexport function parseProjectField(name: string): ProjectField | undefined {\n const match = name.match(projectFieldPattern);\n if (match === null) return undefined;\n const { blockId, fieldName } = match.groups!;\n return { blockId, fieldName } as ProjectField;\n}\n"],"mappings":";AA6CA,MAAa,wBAA0C,EACrD,QAAQ,CAAC;CAAE,IAAI;CAAW,OAAO;CAAW,QAAQ,EAAE;CAAE,CAAC,EAC1D;AAYD,MAAa,+BAAsD;CACjE,yBAAyB;CACzB,eAAe,EAAE;CAClB;AAED,MAAa,mBAAgC,EAC3C,OAAO,eACR;AAMD,MAAa,sBAAoC;CAAE,MAAM;CAAe,SAAS;CAAK;AAEtF,MAAa,mBAAmB;AAGhC,MAAa,uBAAuB;AAEpC,MAAa,0BAA0B;AACvC,MAAa,+BAA+B;AAC5C,MAAa,iBAAiB;AAC9B,MAAa,sBAAsB;AACnC,MAAa,yBAAyB;AAEtC,MAAa,2BAA2B;AAGxC,SAAgB,mBAAmB,SAAyB;AAC1D,QAAO,GAAG,2BAA2B;;AAGvC,MAAa,4BAA4B;AAEzC,MAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,MAAsB;AAC5D,QAAO,GAAG,kCAAkC;;AA2B9C,MAAa,oBAAoD,IAAI,IAAI;CACvE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,iBAAiB,SAAiB,WAA8C;AAC9F,QAAO,GAAG,QAAQ,GAAG;;AAGvB,MAAM,sBACJ;AAEF,SAAgB,kBAAkB,MAAwC;CACxE,MAAM,QAAQ,KAAK,MAAM,oBAAoB;AAC7C,KAAI,UAAU,KAAM,QAAO,KAAA;CAC3B,MAAM,EAAE,SAAS,cAAc,MAAM;AACrC,QAAO;EAAE;EAAS;EAAW"}