@milaboratories/pl-middle-layer 1.74.11 → 1.74.12

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 (320) hide show
  1. package/dist/_virtual/{_@oxc-project_runtime@0.137.0 → _@oxc-project_runtime@0.155.0}/helpers/esm/usingCtx.cjs +1 -2
  2. package/dist/_virtual/{_@oxc-project_runtime@0.137.0 → _@oxc-project_runtime@0.155.0}/helpers/esm/usingCtx.js +1 -2
  3. package/dist/_virtual/_rolldown/runtime.cjs +2 -3
  4. package/dist/block_registry/location_provider.cjs +1 -2
  5. package/dist/block_registry/location_provider.cjs.map +1 -1
  6. package/dist/block_registry/location_provider.js +1 -2
  7. package/dist/block_registry/registry-v2-provider.cjs +1 -2
  8. package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
  9. package/dist/block_registry/registry-v2-provider.d.ts +0 -2
  10. package/dist/block_registry/registry-v2-provider.d.ts.map +1 -1
  11. package/dist/block_registry/registry-v2-provider.js +1 -2
  12. package/dist/block_registry/registry.cjs +3 -3
  13. package/dist/block_registry/registry.cjs.map +1 -1
  14. package/dist/block_registry/registry.d.ts +0 -2
  15. package/dist/block_registry/registry.d.ts.map +1 -1
  16. package/dist/block_registry/registry.js +3 -3
  17. package/dist/block_registry/registry.js.map +1 -1
  18. package/dist/block_registry/template_provider.cjs +1 -2
  19. package/dist/block_registry/template_provider.cjs.map +1 -1
  20. package/dist/block_registry/template_provider.d.ts +0 -2
  21. package/dist/block_registry/template_provider.d.ts.map +1 -1
  22. package/dist/block_registry/template_provider.js +1 -2
  23. package/dist/block_registry/watcher.cjs +15 -14
  24. package/dist/block_registry/watcher.cjs.map +1 -1
  25. package/dist/block_registry/watcher.d.ts +0 -2
  26. package/dist/block_registry/watcher.d.ts.map +1 -1
  27. package/dist/block_registry/watcher.js +15 -14
  28. package/dist/block_registry/watcher.js.map +1 -1
  29. package/dist/block_registry/well_known_registries.cjs +1 -2
  30. package/dist/block_registry/well_known_registries.d.ts +0 -2
  31. package/dist/block_registry/well_known_registries.d.ts.map +1 -1
  32. package/dist/block_registry/well_known_registries.js +1 -2
  33. package/dist/cfg_render/executor.cjs +1 -2
  34. package/dist/cfg_render/executor.cjs.map +1 -1
  35. package/dist/cfg_render/executor.js +1 -2
  36. package/dist/cfg_render/renderer.cjs +1 -2
  37. package/dist/cfg_render/renderer.cjs.map +1 -1
  38. package/dist/cfg_render/renderer.js +1 -2
  39. package/dist/cfg_render/traverse.cjs +1 -2
  40. package/dist/cfg_render/traverse.js +1 -2
  41. package/dist/cfg_render/util.cjs +1 -2
  42. package/dist/cfg_render/util.js +1 -2
  43. package/dist/debug/index.cjs +1 -2
  44. package/dist/debug/index.js +1 -2
  45. package/dist/dev_env/index.cjs +1 -2
  46. package/dist/dev_env/index.cjs.map +1 -1
  47. package/dist/dev_env/index.js +1 -2
  48. package/dist/dev_env/util.cjs +1 -2
  49. package/dist/dev_env/util.js +1 -2
  50. package/dist/js_render/column_registry.cjs +1 -2
  51. package/dist/js_render/column_registry.cjs.map +1 -1
  52. package/dist/js_render/column_registry.js +1 -2
  53. package/dist/js_render/computable_context.cjs +4 -4
  54. package/dist/js_render/computable_context.cjs.map +1 -1
  55. package/dist/js_render/computable_context.js +4 -4
  56. package/dist/js_render/computable_context.js.map +1 -1
  57. package/dist/js_render/context.cjs +1 -2
  58. package/dist/js_render/context.cjs.map +1 -1
  59. package/dist/js_render/context.js +1 -2
  60. package/dist/js_render/index.cjs +12 -9
  61. package/dist/js_render/index.cjs.map +1 -1
  62. package/dist/js_render/index.js +12 -9
  63. package/dist/js_render/index.js.map +1 -1
  64. package/dist/js_render/service_injectors.cjs +2 -3
  65. package/dist/js_render/service_injectors.js +2 -3
  66. package/dist/js_render/spec_override_collapse.cjs +1 -2
  67. package/dist/js_render/spec_override_collapse.cjs.map +1 -1
  68. package/dist/js_render/spec_override_collapse.js +1 -2
  69. package/dist/middle_layer/active_cfg.cjs +1 -2
  70. package/dist/middle_layer/active_cfg.cjs.map +1 -1
  71. package/dist/middle_layer/active_cfg.js +1 -2
  72. package/dist/middle_layer/block.cjs +1 -2
  73. package/dist/middle_layer/block.cjs.map +1 -1
  74. package/dist/middle_layer/block.js +1 -2
  75. package/dist/middle_layer/block_ctx.cjs +3 -3
  76. package/dist/middle_layer/block_ctx.cjs.map +1 -1
  77. package/dist/middle_layer/block_ctx.js +3 -3
  78. package/dist/middle_layer/block_ctx.js.map +1 -1
  79. package/dist/middle_layer/block_ctx_unsafe.cjs +1 -2
  80. package/dist/middle_layer/block_ctx_unsafe.js +1 -2
  81. package/dist/middle_layer/build_stamp.cjs +2 -3
  82. package/dist/middle_layer/build_stamp.js +2 -3
  83. package/dist/middle_layer/driver_kit.cjs +1 -2
  84. package/dist/middle_layer/driver_kit.cjs.map +1 -1
  85. package/dist/middle_layer/driver_kit.d.ts +0 -2
  86. package/dist/middle_layer/driver_kit.d.ts.map +1 -1
  87. package/dist/middle_layer/driver_kit.js +1 -2
  88. package/dist/middle_layer/finality_stop_rules.cjs +1 -2
  89. package/dist/middle_layer/finality_stop_rules.js +1 -2
  90. package/dist/middle_layer/folders.cjs +12 -8
  91. package/dist/middle_layer/folders.cjs.map +1 -1
  92. package/dist/middle_layer/folders.d.ts +0 -2
  93. package/dist/middle_layer/folders.d.ts.map +1 -1
  94. package/dist/middle_layer/folders.js +12 -8
  95. package/dist/middle_layer/folders.js.map +1 -1
  96. package/dist/middle_layer/frontend_path.cjs +1 -2
  97. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  98. package/dist/middle_layer/frontend_path.js +1 -2
  99. package/dist/middle_layer/middle_layer.cjs +7 -6
  100. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  101. package/dist/middle_layer/middle_layer.d.ts +0 -2
  102. package/dist/middle_layer/middle_layer.d.ts.map +1 -1
  103. package/dist/middle_layer/middle_layer.js +7 -6
  104. package/dist/middle_layer/middle_layer.js.map +1 -1
  105. package/dist/middle_layer/navigation_states.cjs +1 -2
  106. package/dist/middle_layer/navigation_states.js +1 -2
  107. package/dist/middle_layer/ops.cjs +10 -11
  108. package/dist/middle_layer/ops.cjs.map +1 -1
  109. package/dist/middle_layer/ops.d.ts +0 -2
  110. package/dist/middle_layer/ops.d.ts.map +1 -1
  111. package/dist/middle_layer/ops.js +10 -11
  112. package/dist/middle_layer/ops.js.map +1 -1
  113. package/dist/middle_layer/project.cjs +3 -3
  114. package/dist/middle_layer/project.cjs.map +1 -1
  115. package/dist/middle_layer/project.d.ts +3 -5
  116. package/dist/middle_layer/project.d.ts.map +1 -1
  117. package/dist/middle_layer/project.js +3 -3
  118. package/dist/middle_layer/project.js.map +1 -1
  119. package/dist/middle_layer/project_list.cjs +1 -2
  120. package/dist/middle_layer/project_list.cjs.map +1 -1
  121. package/dist/middle_layer/project_list.d.ts +0 -2
  122. package/dist/middle_layer/project_list.d.ts.map +1 -1
  123. package/dist/middle_layer/project_list.js +1 -2
  124. package/dist/middle_layer/project_overview.cjs +8 -5
  125. package/dist/middle_layer/project_overview.cjs.map +1 -1
  126. package/dist/middle_layer/project_overview.js +8 -5
  127. package/dist/middle_layer/project_overview.js.map +1 -1
  128. package/dist/middle_layer/project_overview_light.cjs +4 -3
  129. package/dist/middle_layer/project_overview_light.cjs.map +1 -1
  130. package/dist/middle_layer/project_overview_light.js +4 -3
  131. package/dist/middle_layer/project_overview_light.js.map +1 -1
  132. package/dist/middle_layer/render.cjs +1 -2
  133. package/dist/middle_layer/render.cjs.map +1 -1
  134. package/dist/middle_layer/render.js +1 -2
  135. package/dist/middle_layer/sharing_list.cjs +1 -2
  136. package/dist/middle_layer/sharing_list.cjs.map +1 -1
  137. package/dist/middle_layer/sharing_list.d.ts +0 -2
  138. package/dist/middle_layer/sharing_list.d.ts.map +1 -1
  139. package/dist/middle_layer/sharing_list.js +1 -2
  140. package/dist/middle_layer/sharing_list.js.map +1 -1
  141. package/dist/middle_layer/template_list.cjs +1 -2
  142. package/dist/middle_layer/template_list.cjs.map +1 -1
  143. package/dist/middle_layer/template_list.d.ts +0 -2
  144. package/dist/middle_layer/template_list.d.ts.map +1 -1
  145. package/dist/middle_layer/template_list.js +1 -2
  146. package/dist/middle_layer/tree_snapshot_store.cjs +3 -3
  147. package/dist/middle_layer/tree_snapshot_store.cjs.map +1 -1
  148. package/dist/middle_layer/tree_snapshot_store.d.ts +0 -2
  149. package/dist/middle_layer/tree_snapshot_store.d.ts.map +1 -1
  150. package/dist/middle_layer/tree_snapshot_store.js +3 -3
  151. package/dist/middle_layer/tree_snapshot_store.js.map +1 -1
  152. package/dist/middle_layer/types.d.ts +0 -2
  153. package/dist/middle_layer/types.d.ts.map +1 -1
  154. package/dist/middle_layer/util.cjs +1 -2
  155. package/dist/middle_layer/util.cjs.map +1 -1
  156. package/dist/middle_layer/util.js +1 -2
  157. package/dist/model/args.cjs +1 -2
  158. package/dist/model/args.cjs.map +1 -1
  159. package/dist/model/args.js +1 -2
  160. package/dist/model/block_pack_spec.cjs +1 -2
  161. package/dist/model/block_pack_spec.d.ts +0 -2
  162. package/dist/model/block_pack_spec.d.ts.map +1 -1
  163. package/dist/model/block_pack_spec.js +1 -2
  164. package/dist/model/frontend.d.ts +0 -2
  165. package/dist/model/frontend.d.ts.map +1 -1
  166. package/dist/model/project_helper.cjs +1 -2
  167. package/dist/model/project_helper.cjs.map +1 -1
  168. package/dist/model/project_helper.d.ts +0 -2
  169. package/dist/model/project_helper.d.ts.map +1 -1
  170. package/dist/model/project_helper.js +1 -2
  171. package/dist/model/project_model.cjs +1 -2
  172. package/dist/model/project_model.d.ts +0 -2
  173. package/dist/model/project_model.d.ts.map +1 -1
  174. package/dist/model/project_model.js +1 -2
  175. package/dist/model/project_model_util.cjs +1 -2
  176. package/dist/model/project_model_util.js +1 -2
  177. package/dist/model/project_model_v1.cjs +1 -2
  178. package/dist/model/project_model_v1.js +1 -2
  179. package/dist/model/sharing_model.cjs +1 -2
  180. package/dist/model/sharing_model.cjs.map +1 -1
  181. package/dist/model/sharing_model.d.ts +0 -2
  182. package/dist/model/sharing_model.d.ts.map +1 -1
  183. package/dist/model/sharing_model.js +1 -2
  184. package/dist/model/template_apply.cjs +1 -2
  185. package/dist/model/template_apply.cjs.map +1 -1
  186. package/dist/model/template_apply.d.ts +0 -2
  187. package/dist/model/template_apply.d.ts.map +1 -1
  188. package/dist/model/template_apply.js +1 -2
  189. package/dist/model/template_export.cjs +1 -2
  190. package/dist/model/template_export.d.ts +0 -2
  191. package/dist/model/template_export.d.ts.map +1 -1
  192. package/dist/model/template_export.js +1 -2
  193. package/dist/model/template_parser.cjs +1 -2
  194. package/dist/model/template_parser.cjs.map +1 -1
  195. package/dist/model/template_parser.d.ts +0 -2
  196. package/dist/model/template_parser.d.ts.map +1 -1
  197. package/dist/model/template_parser.js +1 -2
  198. package/dist/model/template_resolve.cjs +1 -2
  199. package/dist/model/template_resolve.cjs.map +1 -1
  200. package/dist/model/template_resolve.d.ts +0 -2
  201. package/dist/model/template_resolve.d.ts.map +1 -1
  202. package/dist/model/template_resolve.js +1 -2
  203. package/dist/model/template_serializer.cjs +1 -2
  204. package/dist/model/template_serializer.cjs.map +1 -1
  205. package/dist/model/template_serializer.d.ts +0 -2
  206. package/dist/model/template_serializer.d.ts.map +1 -1
  207. package/dist/model/template_serializer.js +1 -2
  208. package/dist/model/template_spec.d.ts +0 -2
  209. package/dist/model/template_spec.d.ts.map +1 -1
  210. package/dist/mutator/block-pack/block_pack.cjs +7 -6
  211. package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
  212. package/dist/mutator/block-pack/block_pack.d.ts +0 -2
  213. package/dist/mutator/block-pack/block_pack.d.ts.map +1 -1
  214. package/dist/mutator/block-pack/block_pack.js +7 -6
  215. package/dist/mutator/block-pack/block_pack.js.map +1 -1
  216. package/dist/mutator/block-pack/frontend.cjs +1 -2
  217. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  218. package/dist/mutator/block-pack/frontend.js +1 -2
  219. package/dist/mutator/block-pack/required_capabilities.cjs +1 -2
  220. package/dist/mutator/block-pack/required_capabilities.cjs.map +1 -1
  221. package/dist/mutator/block-pack/required_capabilities.js +1 -2
  222. package/dist/mutator/context_export.cjs +1 -2
  223. package/dist/mutator/context_export.cjs.map +1 -1
  224. package/dist/mutator/context_export.js +1 -2
  225. package/dist/mutator/list.cjs +1 -2
  226. package/dist/mutator/list.cjs.map +1 -1
  227. package/dist/mutator/list.js +1 -2
  228. package/dist/mutator/migration.cjs +1 -2
  229. package/dist/mutator/migration.cjs.map +1 -1
  230. package/dist/mutator/migration.js +1 -2
  231. package/dist/mutator/project.cjs +30 -22
  232. package/dist/mutator/project.cjs.map +1 -1
  233. package/dist/mutator/project.d.ts +0 -2
  234. package/dist/mutator/project.d.ts.map +1 -1
  235. package/dist/mutator/project.js +30 -22
  236. package/dist/mutator/project.js.map +1 -1
  237. package/dist/mutator/sharing.cjs +1 -2
  238. package/dist/mutator/sharing.cjs.map +1 -1
  239. package/dist/mutator/sharing.js +1 -2
  240. package/dist/mutator/template/direct_template_loader.cjs +1 -2
  241. package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
  242. package/dist/mutator/template/direct_template_loader.js +1 -2
  243. package/dist/mutator/template/direct_template_loader_v3.cjs +1 -2
  244. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
  245. package/dist/mutator/template/direct_template_loader_v3.js +1 -2
  246. package/dist/mutator/template/render_block.cjs +1 -2
  247. package/dist/mutator/template/render_block.cjs.map +1 -1
  248. package/dist/mutator/template/render_block.js +1 -2
  249. package/dist/mutator/template/render_template.cjs +1 -2
  250. package/dist/mutator/template/render_template.cjs.map +1 -1
  251. package/dist/mutator/template/render_template.d.ts +0 -2
  252. package/dist/mutator/template/render_template.d.ts.map +1 -1
  253. package/dist/mutator/template/render_template.js +1 -2
  254. package/dist/mutator/template/template_cache.cjs +6 -5
  255. package/dist/mutator/template/template_cache.cjs.map +1 -1
  256. package/dist/mutator/template/template_cache.d.ts +1 -2
  257. package/dist/mutator/template/template_cache.d.ts.map +1 -1
  258. package/dist/mutator/template/template_cache.js +6 -5
  259. package/dist/mutator/template/template_cache.js.map +1 -1
  260. package/dist/mutator/template/template_loading.cjs +1 -2
  261. package/dist/mutator/template/template_loading.cjs.map +1 -1
  262. package/dist/mutator/template/template_loading.d.ts +0 -2
  263. package/dist/mutator/template/template_loading.d.ts.map +1 -1
  264. package/dist/mutator/template/template_loading.js +1 -2
  265. package/dist/mutator/template.cjs +1 -2
  266. package/dist/mutator/template.cjs.map +1 -1
  267. package/dist/mutator/template.js +1 -2
  268. package/dist/mutator/template_construct.cjs +1 -2
  269. package/dist/mutator/template_construct.cjs.map +1 -1
  270. package/dist/mutator/template_construct.js +1 -2
  271. package/dist/network_check/network_check.cjs +2 -3
  272. package/dist/network_check/network_check.cjs.map +1 -1
  273. package/dist/network_check/network_check.d.ts +0 -2
  274. package/dist/network_check/network_check.d.ts.map +1 -1
  275. package/dist/network_check/network_check.js +2 -3
  276. package/dist/network_check/network_check.js.map +1 -1
  277. package/dist/network_check/pings.cjs +1 -2
  278. package/dist/network_check/pings.cjs.map +1 -1
  279. package/dist/network_check/pings.js +1 -2
  280. package/dist/network_check/template.cjs +5 -4
  281. package/dist/network_check/template.cjs.map +1 -1
  282. package/dist/network_check/template.js +5 -4
  283. package/dist/network_check/template.js.map +1 -1
  284. package/dist/pool/data.cjs +1 -2
  285. package/dist/pool/data.cjs.map +1 -1
  286. package/dist/pool/data.d.ts +0 -2
  287. package/dist/pool/data.d.ts.map +1 -1
  288. package/dist/pool/data.js +1 -2
  289. package/dist/pool/driver.cjs +5 -4
  290. package/dist/pool/driver.cjs.map +1 -1
  291. package/dist/pool/driver.d.ts +0 -2
  292. package/dist/pool/driver.d.ts.map +1 -1
  293. package/dist/pool/driver.js +5 -4
  294. package/dist/pool/driver.js.map +1 -1
  295. package/dist/pool/p_object_collection.cjs +9 -8
  296. package/dist/pool/p_object_collection.cjs.map +1 -1
  297. package/dist/pool/p_object_collection.d.ts +0 -2
  298. package/dist/pool/p_object_collection.d.ts.map +1 -1
  299. package/dist/pool/p_object_collection.js +9 -8
  300. package/dist/pool/p_object_collection.js.map +1 -1
  301. package/dist/pool/result_pool.cjs +8 -7
  302. package/dist/pool/result_pool.cjs.map +1 -1
  303. package/dist/pool/result_pool.js +8 -7
  304. package/dist/pool/result_pool.js.map +1 -1
  305. package/dist/pool/upstream_block_ctx.cjs +1 -2
  306. package/dist/pool/upstream_block_ctx.cjs.map +1 -1
  307. package/dist/pool/upstream_block_ctx.js +1 -2
  308. package/dist/service_factories.cjs +1 -2
  309. package/dist/service_factories.js +1 -2
  310. package/dist/worker/WorkerManager.cjs +1 -2
  311. package/dist/worker/WorkerManager.js +1 -2
  312. package/dist/worker/WorkerManager.js.map +1 -1
  313. package/dist/worker/worker.cjs +1 -2
  314. package/dist/worker/worker.js +1 -2
  315. package/dist/worker/workerApi.cjs +1 -2
  316. package/dist/worker/workerApi.cjs.map +1 -1
  317. package/dist/worker/workerApi.js +1 -2
  318. package/package.json +33 -33
  319. package/src/middle_layer/middle_layer.ts +4 -6
  320. package/src/middle_layer/tree_snapshot_store.test.ts +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"p_object_collection.cjs","names":["deriveLegacyPObjectId","deriveLocalPObjectId"],"sources":["../../src/pool/p_object_collection.ts"],"sourcesContent":["import { type PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport type { PObject, PObjectSpec, ValueOrError } from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport assert from \"node:assert\";\nimport type { Writable } from \"utility-types\";\nimport { deriveLegacyPObjectId, deriveLocalPObjectId } from \"./data\";\n\n/** Represents specific staging or prod ctx data */\nexport interface RawPObjectCollection {\n /** true if no new results are expected */\n readonly locked: boolean;\n /** results by name */\n readonly results: Map<string, RawPObjectEntry>;\n}\n\n/** Single result in a particular ctx */\nexport interface RawPObjectEntry {\n /**\n * true - means this result has data field, however it may still be not ready\n * false - means it can be derived that this result incarnation is spec-only\n * undefined - means that it is not yet known\n * */\n readonly hasData?: boolean;\n\n /** Result may be added even if there is no data associated with it */\n readonly spec?: PObjectSpec;\n\n /**\n * Returns data accessor, or error, or undefined if data not yet available.\n * If data fuinction itself is not defined, this means that corresponding context\n * was not rendered.\n * */\n data?(): ValueOrError<PlTreeNodeAccessor, Error> | undefined;\n}\n\nexport function parseRawPObjectCollection(\n node: PlTreeNodeAccessor,\n errorOnUnknownField: boolean = true,\n ignoreFieldErrors: boolean = false,\n prefix: string = \"\",\n): RawPObjectCollection {\n const entryPattern = /^(?<name>.*)\\.(?<type>spec|data)$/;\n const results = new Map<string, Writable<RawPObjectEntry>>();\n for (const fieldName of node.listInputFields()) {\n const match = fieldName.match(entryPattern);\n if (!match) {\n if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);\n else continue;\n }\n\n let name = notEmpty(match.groups?.name);\n if (!name.startsWith(prefix)) {\n if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);\n else continue;\n }\n name = name.slice(prefix.length);\n\n const type = notEmpty(match.groups?.type) as \"spec\" | \"data\";\n let result = results.get(name);\n if (result === undefined) {\n result = {};\n results.set(name, result);\n }\n\n switch (type) {\n case \"spec\":\n result.spec = node\n .traverse({\n field: fieldName,\n ignoreError: ignoreFieldErrors,\n pureFieldErrorToUndefined: ignoreFieldErrors,\n })\n ?.getDataAsJson();\n break;\n case \"data\":\n result.hasData = true;\n result.data = () =>\n node.traverseOrError({\n field: fieldName,\n ignoreError: ignoreFieldErrors,\n });\n break;\n default:\n // other value types planned\n break;\n }\n }\n\n const locked = node.getInputsLocked();\n if (locked)\n for (const [, result] of results) if (result.data === undefined) result.hasData = false;\n\n return { locked, results };\n}\n\nexport function parseFinalPObjectCollection(\n node: PlTreeNodeAccessor,\n errorOnUnknownField: boolean = true,\n prefix: string = \"\",\n resolvePath: string[],\n): Record<string, PObject<PlTreeNodeAccessor>> {\n if (!node.getIsReadyOrError()) throw new Error(\"resource is not ready\");\n const rawCollection = parseRawPObjectCollection(node, errorOnUnknownField, false, prefix);\n assert(rawCollection.locked);\n const collection: Record<string, PObject<PlTreeNodeAccessor>> = {};\n for (const [outputName, result] of rawCollection.results) {\n if (result.spec === undefined) throw new Error(`no spec for key ${outputName}`);\n if (result.hasData !== true || result.data === undefined)\n throw new Error(`no data for key ${outputName}`);\n const data = result.data();\n if (data === undefined) throw new Error(`no data for key ${outputName}`);\n if (!data.ok) throw data.error;\n collection[outputName] = {\n id:\n resolvePath.length === 0\n ? deriveLegacyPObjectId(result.spec, data.value) // for old blocks opened in new desktop\n : deriveLocalPObjectId(resolvePath, outputName),\n spec: result.spec,\n data: data.value,\n };\n }\n return collection;\n}\n"],"mappings":";;;;;;AAmCA,SAAgB,0BACd,MACA,sBAA+B,MAC/B,oBAA6B,OAC7B,SAAiB,IACK;CACtB,MAAM,eAAe;CACrB,MAAM,0BAAU,IAAI,IAAuC;CAC3D,KAAK,MAAM,aAAa,KAAK,gBAAgB,GAAG;EAC9C,MAAM,QAAQ,UAAU,MAAM,YAAY;EAC1C,IAAI,CAAC,OACH,IAAI,qBAAqB,MAAM,IAAI,MAAM,yBAAyB,WAAW;OACxE;EAGP,IAAI,QAAA,GAAA,2BAAA,SAAA,CAAgB,MAAM,QAAQ,IAAI;EACtC,IAAI,CAAC,KAAK,WAAW,MAAM,GACzB,IAAI,qBAAqB,MAAM,IAAI,MAAM,yBAAyB,WAAW;OACxE;EAEP,OAAO,KAAK,MAAM,OAAO,MAAM;EAE/B,MAAM,QAAA,GAAA,2BAAA,SAAA,CAAgB,MAAM,QAAQ,IAAI;EACxC,IAAI,SAAS,QAAQ,IAAI,IAAI;EAC7B,IAAI,WAAW,KAAA,GAAW;GACxB,SAAS,CAAC;GACV,QAAQ,IAAI,MAAM,MAAM;EAC1B;EAEA,QAAQ,MAAR;GACE,KAAK;IACH,OAAO,OAAO,KACX,SAAS;KACR,OAAO;KACP,aAAa;KACb,2BAA2B;IAC7B,CAAC,CAAC,EACA,cAAc;IAClB;GACF,KAAK;IACH,OAAO,UAAU;IACjB,OAAO,aACL,KAAK,gBAAgB;KACnB,OAAO;KACP,aAAa;IACf,CAAC;IACH;GACF,SAEE;EACJ;CACF;CAEA,MAAM,SAAS,KAAK,gBAAgB;CACpC,IAAI;OACG,MAAM,GAAG,WAAW,SAAS,IAAI,OAAO,SAAS,KAAA,GAAW,OAAO,UAAU;CAAA;CAEpF,OAAO;EAAE;EAAQ;CAAQ;AAC3B;AAEA,SAAgB,4BACd,MACA,sBAA+B,MAC/B,SAAiB,IACjB,aAC6C;CAC7C,IAAI,CAAC,KAAK,kBAAkB,GAAG,MAAM,IAAI,MAAM,uBAAuB;CACtE,MAAM,gBAAgB,0BAA0B,MAAM,qBAAqB,OAAO,MAAM;CACxF,CAAA,GAAA,YAAA,QAAA,CAAO,cAAc,MAAM;CAC3B,MAAM,aAA0D,CAAC;CACjE,KAAK,MAAM,CAAC,YAAY,WAAW,cAAc,SAAS;EACxD,IAAI,OAAO,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB,YAAY;EAC9E,IAAI,OAAO,YAAY,QAAQ,OAAO,SAAS,KAAA,GAC7C,MAAM,IAAI,MAAM,mBAAmB,YAAY;EACjD,MAAM,OAAO,OAAO,KAAK;EACzB,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB,YAAY;EACvE,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK;EACzB,WAAW,cAAc;GACvB,IACE,YAAY,WAAW,IACnBA,aAAAA,sBAAsB,OAAO,MAAM,KAAK,KAAK,IAC7CC,aAAAA,qBAAqB,aAAa,UAAU;GAClD,MAAM,OAAO;GACb,MAAM,KAAK;EACb;CACF;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"p_object_collection.cjs","names":["notEmpty","deriveLegacyPObjectId","deriveLocalPObjectId"],"sources":["../../src/pool/p_object_collection.ts"],"sourcesContent":["import { type PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport type { PObject, PObjectSpec, ValueOrError } from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport assert from \"node:assert\";\nimport type { Writable } from \"utility-types\";\nimport { deriveLegacyPObjectId, deriveLocalPObjectId } from \"./data\";\n\n/** Represents specific staging or prod ctx data */\nexport interface RawPObjectCollection {\n /** true if no new results are expected */\n readonly locked: boolean;\n /** results by name */\n readonly results: Map<string, RawPObjectEntry>;\n}\n\n/** Single result in a particular ctx */\nexport interface RawPObjectEntry {\n /**\n * true - means this result has data field, however it may still be not ready\n * false - means it can be derived that this result incarnation is spec-only\n * undefined - means that it is not yet known\n * */\n readonly hasData?: boolean;\n\n /** Result may be added even if there is no data associated with it */\n readonly spec?: PObjectSpec;\n\n /**\n * Returns data accessor, or error, or undefined if data not yet available.\n * If data fuinction itself is not defined, this means that corresponding context\n * was not rendered.\n * */\n data?(): ValueOrError<PlTreeNodeAccessor, Error> | undefined;\n}\n\nexport function parseRawPObjectCollection(\n node: PlTreeNodeAccessor,\n errorOnUnknownField: boolean = true,\n ignoreFieldErrors: boolean = false,\n prefix: string = \"\",\n): RawPObjectCollection {\n const entryPattern = /^(?<name>.*)\\.(?<type>spec|data)$/;\n const results = new Map<string, Writable<RawPObjectEntry>>();\n for (const fieldName of node.listInputFields()) {\n const match = fieldName.match(entryPattern);\n if (!match) {\n if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);\n else continue;\n }\n\n let name = notEmpty(match.groups?.name);\n if (!name.startsWith(prefix)) {\n if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);\n else continue;\n }\n name = name.slice(prefix.length);\n\n const type = notEmpty(match.groups?.type) as \"spec\" | \"data\";\n let result = results.get(name);\n if (result === undefined) {\n result = {};\n results.set(name, result);\n }\n\n switch (type) {\n case \"spec\":\n result.spec = node\n .traverse({\n field: fieldName,\n ignoreError: ignoreFieldErrors,\n pureFieldErrorToUndefined: ignoreFieldErrors,\n })\n ?.getDataAsJson();\n break;\n case \"data\":\n result.hasData = true;\n result.data = () =>\n node.traverseOrError({\n field: fieldName,\n ignoreError: ignoreFieldErrors,\n });\n break;\n default:\n // other value types planned\n break;\n }\n }\n\n const locked = node.getInputsLocked();\n if (locked)\n for (const [, result] of results) if (result.data === undefined) result.hasData = false;\n\n return { locked, results };\n}\n\nexport function parseFinalPObjectCollection(\n node: PlTreeNodeAccessor,\n errorOnUnknownField: boolean = true,\n prefix: string = \"\",\n resolvePath: string[],\n): Record<string, PObject<PlTreeNodeAccessor>> {\n if (!node.getIsReadyOrError()) throw new Error(\"resource is not ready\");\n const rawCollection = parseRawPObjectCollection(node, errorOnUnknownField, false, prefix);\n assert(rawCollection.locked);\n const collection: Record<string, PObject<PlTreeNodeAccessor>> = {};\n for (const [outputName, result] of rawCollection.results) {\n if (result.spec === undefined) throw new Error(`no spec for key ${outputName}`);\n if (result.hasData !== true || result.data === undefined)\n throw new Error(`no data for key ${outputName}`);\n const data = result.data();\n if (data === undefined) throw new Error(`no data for key ${outputName}`);\n if (!data.ok) throw data.error;\n collection[outputName] = {\n id:\n resolvePath.length === 0\n ? deriveLegacyPObjectId(result.spec, data.value) // for old blocks opened in new desktop\n : deriveLocalPObjectId(resolvePath, outputName),\n spec: result.spec,\n data: data.value,\n };\n }\n return collection;\n}\n"],"mappings":";;;;;;AAmCA,SAAgB,0BACd,MACA,sBAA+B,MAC/B,oBAA6B,OAC7B,SAAiB,IACK;CACtB,MAAM,eAAe;CACrB,MAAM,0BAAU,IAAI,IAAuC;CAC3D,KAAK,MAAM,aAAa,KAAK,gBAAgB,GAAG;EAC9C,MAAM,QAAQ,UAAU,MAAM,YAAY;EAC1C,IAAI,CAAC,OAAO;GACV,IAAI,qBAAqB,MAAM,IAAI,MAAM,yBAAyB,WAAW;QACxE;EACP;EAEA,IAAI,QAAA,GAAOA,2BAAAA,SAAAA,CAAS,MAAM,QAAQ,IAAI;EACtC,IAAI,CAAC,KAAK,WAAW,MAAM,GAAG;GAC5B,IAAI,qBAAqB,MAAM,IAAI,MAAM,yBAAyB,WAAW;QACxE;EACP;EACA,OAAO,KAAK,MAAM,OAAO,MAAM;EAE/B,MAAM,QAAA,GAAOA,2BAAAA,SAAAA,CAAS,MAAM,QAAQ,IAAI;EACxC,IAAI,SAAS,QAAQ,IAAI,IAAI;EAC7B,IAAI,WAAW,KAAA,GAAW;GACxB,SAAS,CAAC;GACV,QAAQ,IAAI,MAAM,MAAM;EAC1B;EAEA,QAAQ,MAAR;GACE,KAAK;IACH,OAAO,OAAO,KACX,SAAS;KACR,OAAO;KACP,aAAa;KACb,2BAA2B;IAC7B,CAAC,CAAC,EACA,cAAc;IAClB;GACF,KAAK;IACH,OAAO,UAAU;IACjB,OAAO,aACL,KAAK,gBAAgB;KACnB,OAAO;KACP,aAAa;IACf,CAAC;EAKP;CACF;CAEA,MAAM,SAAS,KAAK,gBAAgB;CACpC,IAAI,QACG;OAAA,MAAM,GAAG,WAAW,SAAS,IAAI,OAAO,SAAS,KAAA,GAAW,OAAO,UAAU;CAAA;CAEpF,OAAO;EAAE;EAAQ;CAAQ;AAC3B;AAEA,SAAgB,4BACd,MACA,sBAA+B,MAC/B,SAAiB,IACjB,aAC6C;CAC7C,IAAI,CAAC,KAAK,kBAAkB,GAAG,MAAM,IAAI,MAAM,uBAAuB;CACtE,MAAM,gBAAgB,0BAA0B,MAAM,qBAAqB,OAAO,MAAM;CACxF,CAAA,GAAA,YAAA,QAAA,CAAO,cAAc,MAAM;CAC3B,MAAM,aAA0D,CAAC;CACjE,KAAK,MAAM,CAAC,YAAY,WAAW,cAAc,SAAS;EACxD,IAAI,OAAO,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB,YAAY;EAC9E,IAAI,OAAO,YAAY,QAAQ,OAAO,SAAS,KAAA,GAC7C,MAAM,IAAI,MAAM,mBAAmB,YAAY;EACjD,MAAM,OAAO,OAAO,KAAK;EACzB,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB,YAAY;EACvE,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK;EACzB,WAAW,cAAc;GACvB,IACE,YAAY,WAAW,IACnBC,aAAAA,sBAAsB,OAAO,MAAM,KAAK,KAAK,IAC7CC,aAAAA,qBAAqB,aAAa,UAAU;GAClD,MAAM,OAAO;GACb,MAAM,KAAK;EACb;CACF;CACA,OAAO;AACT"}
@@ -1,6 +1,4 @@
1
1
  import { PObject } from "@platforma-sdk/model";
2
2
  import { PlTreeNodeAccessor } from "@milaboratories/pl-tree";
3
- //#region src/pool/p_object_collection.d.ts
4
3
  export declare function parseFinalPObjectCollection(node: PlTreeNodeAccessor, errorOnUnknownField: boolean | undefined, prefix: string | undefined, resolvePath: string[]): Record<string, PObject<PlTreeNodeAccessor>>;
5
- //#endregion
6
4
  //# sourceMappingURL=p_object_collection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"p_object_collection.d.ts","names":[],"sources":["../../src/pool/p_object_collection.ts"],"mappings":";;;wBA+FgB,4BACd,MAAM,oBACN,0CACA,4BACA,wBACC,eAAe,QAAQ"}
1
+ {"version":3,"file":"p_object_collection.d.ts","names":[],"sources":["../../src/pool/p_object_collection.ts"],"mappings":";;wBA+FgB,4BACd,MAAM,oBACN,0CACA,4BACA,wBACC,eAAe,QAAQ"}
@@ -1,17 +1,21 @@
1
1
  import { deriveLegacyPObjectId, deriveLocalPObjectId } from "./data.js";
2
2
  import { notEmpty } from "@milaboratories/ts-helpers";
3
3
  import assert from "node:assert";
4
- //#region src/pool/p_object_collection.ts
4
+ // src/pool/p_object_collection.ts
5
5
  function parseRawPObjectCollection(node, errorOnUnknownField = true, ignoreFieldErrors = false, prefix = "") {
6
6
  const entryPattern = /^(?<name>.*)\.(?<type>spec|data)$/;
7
7
  const results = /* @__PURE__ */ new Map();
8
8
  for (const fieldName of node.listInputFields()) {
9
9
  const match = fieldName.match(entryPattern);
10
- if (!match) if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);
11
- else continue;
10
+ if (!match) {
11
+ if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);
12
+ else continue;
13
+ }
12
14
  let name = notEmpty(match.groups?.name);
13
- if (!name.startsWith(prefix)) if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);
14
- else continue;
15
+ if (!name.startsWith(prefix)) {
16
+ if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);
17
+ else continue;
18
+ }
15
19
  name = name.slice(prefix.length);
16
20
  const type = notEmpty(match.groups?.type);
17
21
  let result = results.get(name);
@@ -33,8 +37,6 @@ function parseRawPObjectCollection(node, errorOnUnknownField = true, ignoreField
33
37
  field: fieldName,
34
38
  ignoreError: ignoreFieldErrors
35
39
  });
36
- break;
37
- default: break;
38
40
  }
39
41
  }
40
42
  const locked = node.getInputsLocked();
@@ -65,7 +67,6 @@ function parseFinalPObjectCollection(node, errorOnUnknownField = true, prefix =
65
67
  }
66
68
  return collection;
67
69
  }
68
- //#endregion
69
70
  export { parseFinalPObjectCollection, parseRawPObjectCollection };
70
71
 
71
72
  //# sourceMappingURL=p_object_collection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"p_object_collection.js","names":[],"sources":["../../src/pool/p_object_collection.ts"],"sourcesContent":["import { type PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport type { PObject, PObjectSpec, ValueOrError } from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport assert from \"node:assert\";\nimport type { Writable } from \"utility-types\";\nimport { deriveLegacyPObjectId, deriveLocalPObjectId } from \"./data\";\n\n/** Represents specific staging or prod ctx data */\nexport interface RawPObjectCollection {\n /** true if no new results are expected */\n readonly locked: boolean;\n /** results by name */\n readonly results: Map<string, RawPObjectEntry>;\n}\n\n/** Single result in a particular ctx */\nexport interface RawPObjectEntry {\n /**\n * true - means this result has data field, however it may still be not ready\n * false - means it can be derived that this result incarnation is spec-only\n * undefined - means that it is not yet known\n * */\n readonly hasData?: boolean;\n\n /** Result may be added even if there is no data associated with it */\n readonly spec?: PObjectSpec;\n\n /**\n * Returns data accessor, or error, or undefined if data not yet available.\n * If data fuinction itself is not defined, this means that corresponding context\n * was not rendered.\n * */\n data?(): ValueOrError<PlTreeNodeAccessor, Error> | undefined;\n}\n\nexport function parseRawPObjectCollection(\n node: PlTreeNodeAccessor,\n errorOnUnknownField: boolean = true,\n ignoreFieldErrors: boolean = false,\n prefix: string = \"\",\n): RawPObjectCollection {\n const entryPattern = /^(?<name>.*)\\.(?<type>spec|data)$/;\n const results = new Map<string, Writable<RawPObjectEntry>>();\n for (const fieldName of node.listInputFields()) {\n const match = fieldName.match(entryPattern);\n if (!match) {\n if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);\n else continue;\n }\n\n let name = notEmpty(match.groups?.name);\n if (!name.startsWith(prefix)) {\n if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);\n else continue;\n }\n name = name.slice(prefix.length);\n\n const type = notEmpty(match.groups?.type) as \"spec\" | \"data\";\n let result = results.get(name);\n if (result === undefined) {\n result = {};\n results.set(name, result);\n }\n\n switch (type) {\n case \"spec\":\n result.spec = node\n .traverse({\n field: fieldName,\n ignoreError: ignoreFieldErrors,\n pureFieldErrorToUndefined: ignoreFieldErrors,\n })\n ?.getDataAsJson();\n break;\n case \"data\":\n result.hasData = true;\n result.data = () =>\n node.traverseOrError({\n field: fieldName,\n ignoreError: ignoreFieldErrors,\n });\n break;\n default:\n // other value types planned\n break;\n }\n }\n\n const locked = node.getInputsLocked();\n if (locked)\n for (const [, result] of results) if (result.data === undefined) result.hasData = false;\n\n return { locked, results };\n}\n\nexport function parseFinalPObjectCollection(\n node: PlTreeNodeAccessor,\n errorOnUnknownField: boolean = true,\n prefix: string = \"\",\n resolvePath: string[],\n): Record<string, PObject<PlTreeNodeAccessor>> {\n if (!node.getIsReadyOrError()) throw new Error(\"resource is not ready\");\n const rawCollection = parseRawPObjectCollection(node, errorOnUnknownField, false, prefix);\n assert(rawCollection.locked);\n const collection: Record<string, PObject<PlTreeNodeAccessor>> = {};\n for (const [outputName, result] of rawCollection.results) {\n if (result.spec === undefined) throw new Error(`no spec for key ${outputName}`);\n if (result.hasData !== true || result.data === undefined)\n throw new Error(`no data for key ${outputName}`);\n const data = result.data();\n if (data === undefined) throw new Error(`no data for key ${outputName}`);\n if (!data.ok) throw data.error;\n collection[outputName] = {\n id:\n resolvePath.length === 0\n ? deriveLegacyPObjectId(result.spec, data.value) // for old blocks opened in new desktop\n : deriveLocalPObjectId(resolvePath, outputName),\n spec: result.spec,\n data: data.value,\n };\n }\n return collection;\n}\n"],"mappings":";;;;AAmCA,SAAgB,0BACd,MACA,sBAA+B,MAC/B,oBAA6B,OAC7B,SAAiB,IACK;CACtB,MAAM,eAAe;CACrB,MAAM,0BAAU,IAAI,IAAuC;CAC3D,KAAK,MAAM,aAAa,KAAK,gBAAgB,GAAG;EAC9C,MAAM,QAAQ,UAAU,MAAM,YAAY;EAC1C,IAAI,CAAC,OACH,IAAI,qBAAqB,MAAM,IAAI,MAAM,yBAAyB,WAAW;OACxE;EAGP,IAAI,OAAO,SAAS,MAAM,QAAQ,IAAI;EACtC,IAAI,CAAC,KAAK,WAAW,MAAM,GACzB,IAAI,qBAAqB,MAAM,IAAI,MAAM,yBAAyB,WAAW;OACxE;EAEP,OAAO,KAAK,MAAM,OAAO,MAAM;EAE/B,MAAM,OAAO,SAAS,MAAM,QAAQ,IAAI;EACxC,IAAI,SAAS,QAAQ,IAAI,IAAI;EAC7B,IAAI,WAAW,KAAA,GAAW;GACxB,SAAS,CAAC;GACV,QAAQ,IAAI,MAAM,MAAM;EAC1B;EAEA,QAAQ,MAAR;GACE,KAAK;IACH,OAAO,OAAO,KACX,SAAS;KACR,OAAO;KACP,aAAa;KACb,2BAA2B;IAC7B,CAAC,CAAC,EACA,cAAc;IAClB;GACF,KAAK;IACH,OAAO,UAAU;IACjB,OAAO,aACL,KAAK,gBAAgB;KACnB,OAAO;KACP,aAAa;IACf,CAAC;IACH;GACF,SAEE;EACJ;CACF;CAEA,MAAM,SAAS,KAAK,gBAAgB;CACpC,IAAI;OACG,MAAM,GAAG,WAAW,SAAS,IAAI,OAAO,SAAS,KAAA,GAAW,OAAO,UAAU;CAAA;CAEpF,OAAO;EAAE;EAAQ;CAAQ;AAC3B;AAEA,SAAgB,4BACd,MACA,sBAA+B,MAC/B,SAAiB,IACjB,aAC6C;CAC7C,IAAI,CAAC,KAAK,kBAAkB,GAAG,MAAM,IAAI,MAAM,uBAAuB;CACtE,MAAM,gBAAgB,0BAA0B,MAAM,qBAAqB,OAAO,MAAM;CACxF,OAAO,cAAc,MAAM;CAC3B,MAAM,aAA0D,CAAC;CACjE,KAAK,MAAM,CAAC,YAAY,WAAW,cAAc,SAAS;EACxD,IAAI,OAAO,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB,YAAY;EAC9E,IAAI,OAAO,YAAY,QAAQ,OAAO,SAAS,KAAA,GAC7C,MAAM,IAAI,MAAM,mBAAmB,YAAY;EACjD,MAAM,OAAO,OAAO,KAAK;EACzB,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB,YAAY;EACvE,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK;EACzB,WAAW,cAAc;GACvB,IACE,YAAY,WAAW,IACnB,sBAAsB,OAAO,MAAM,KAAK,KAAK,IAC7C,qBAAqB,aAAa,UAAU;GAClD,MAAM,OAAO;GACb,MAAM,KAAK;EACb;CACF;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"p_object_collection.js","names":[],"sources":["../../src/pool/p_object_collection.ts"],"sourcesContent":["import { type PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport type { PObject, PObjectSpec, ValueOrError } from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport assert from \"node:assert\";\nimport type { Writable } from \"utility-types\";\nimport { deriveLegacyPObjectId, deriveLocalPObjectId } from \"./data\";\n\n/** Represents specific staging or prod ctx data */\nexport interface RawPObjectCollection {\n /** true if no new results are expected */\n readonly locked: boolean;\n /** results by name */\n readonly results: Map<string, RawPObjectEntry>;\n}\n\n/** Single result in a particular ctx */\nexport interface RawPObjectEntry {\n /**\n * true - means this result has data field, however it may still be not ready\n * false - means it can be derived that this result incarnation is spec-only\n * undefined - means that it is not yet known\n * */\n readonly hasData?: boolean;\n\n /** Result may be added even if there is no data associated with it */\n readonly spec?: PObjectSpec;\n\n /**\n * Returns data accessor, or error, or undefined if data not yet available.\n * If data fuinction itself is not defined, this means that corresponding context\n * was not rendered.\n * */\n data?(): ValueOrError<PlTreeNodeAccessor, Error> | undefined;\n}\n\nexport function parseRawPObjectCollection(\n node: PlTreeNodeAccessor,\n errorOnUnknownField: boolean = true,\n ignoreFieldErrors: boolean = false,\n prefix: string = \"\",\n): RawPObjectCollection {\n const entryPattern = /^(?<name>.*)\\.(?<type>spec|data)$/;\n const results = new Map<string, Writable<RawPObjectEntry>>();\n for (const fieldName of node.listInputFields()) {\n const match = fieldName.match(entryPattern);\n if (!match) {\n if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);\n else continue;\n }\n\n let name = notEmpty(match.groups?.name);\n if (!name.startsWith(prefix)) {\n if (errorOnUnknownField) throw new Error(`unexpected field name ${fieldName}`);\n else continue;\n }\n name = name.slice(prefix.length);\n\n const type = notEmpty(match.groups?.type) as \"spec\" | \"data\";\n let result = results.get(name);\n if (result === undefined) {\n result = {};\n results.set(name, result);\n }\n\n switch (type) {\n case \"spec\":\n result.spec = node\n .traverse({\n field: fieldName,\n ignoreError: ignoreFieldErrors,\n pureFieldErrorToUndefined: ignoreFieldErrors,\n })\n ?.getDataAsJson();\n break;\n case \"data\":\n result.hasData = true;\n result.data = () =>\n node.traverseOrError({\n field: fieldName,\n ignoreError: ignoreFieldErrors,\n });\n break;\n default:\n // other value types planned\n break;\n }\n }\n\n const locked = node.getInputsLocked();\n if (locked)\n for (const [, result] of results) if (result.data === undefined) result.hasData = false;\n\n return { locked, results };\n}\n\nexport function parseFinalPObjectCollection(\n node: PlTreeNodeAccessor,\n errorOnUnknownField: boolean = true,\n prefix: string = \"\",\n resolvePath: string[],\n): Record<string, PObject<PlTreeNodeAccessor>> {\n if (!node.getIsReadyOrError()) throw new Error(\"resource is not ready\");\n const rawCollection = parseRawPObjectCollection(node, errorOnUnknownField, false, prefix);\n assert(rawCollection.locked);\n const collection: Record<string, PObject<PlTreeNodeAccessor>> = {};\n for (const [outputName, result] of rawCollection.results) {\n if (result.spec === undefined) throw new Error(`no spec for key ${outputName}`);\n if (result.hasData !== true || result.data === undefined)\n throw new Error(`no data for key ${outputName}`);\n const data = result.data();\n if (data === undefined) throw new Error(`no data for key ${outputName}`);\n if (!data.ok) throw data.error;\n collection[outputName] = {\n id:\n resolvePath.length === 0\n ? deriveLegacyPObjectId(result.spec, data.value) // for old blocks opened in new desktop\n : deriveLocalPObjectId(resolvePath, outputName),\n spec: result.spec,\n data: data.value,\n };\n }\n return collection;\n}\n"],"mappings":";;;;AAmCA,SAAgB,0BACd,MACA,sBAA+B,MAC/B,oBAA6B,OAC7B,SAAiB,IACK;CACtB,MAAM,eAAe;CACrB,MAAM,0BAAU,IAAI,IAAuC;CAC3D,KAAK,MAAM,aAAa,KAAK,gBAAgB,GAAG;EAC9C,MAAM,QAAQ,UAAU,MAAM,YAAY;EAC1C,IAAI,CAAC,OAAO;GACV,IAAI,qBAAqB,MAAM,IAAI,MAAM,yBAAyB,WAAW;QACxE;EACP;EAEA,IAAI,OAAO,SAAS,MAAM,QAAQ,IAAI;EACtC,IAAI,CAAC,KAAK,WAAW,MAAM,GAAG;GAC5B,IAAI,qBAAqB,MAAM,IAAI,MAAM,yBAAyB,WAAW;QACxE;EACP;EACA,OAAO,KAAK,MAAM,OAAO,MAAM;EAE/B,MAAM,OAAO,SAAS,MAAM,QAAQ,IAAI;EACxC,IAAI,SAAS,QAAQ,IAAI,IAAI;EAC7B,IAAI,WAAW,KAAA,GAAW;GACxB,SAAS,CAAC;GACV,QAAQ,IAAI,MAAM,MAAM;EAC1B;EAEA,QAAQ,MAAR;GACE,KAAK;IACH,OAAO,OAAO,KACX,SAAS;KACR,OAAO;KACP,aAAa;KACb,2BAA2B;IAC7B,CAAC,CAAC,EACA,cAAc;IAClB;GACF,KAAK;IACH,OAAO,UAAU;IACjB,OAAO,aACL,KAAK,gBAAgB;KACnB,OAAO;KACP,aAAa;IACf,CAAC;EAKP;CACF;CAEA,MAAM,SAAS,KAAK,gBAAgB;CACpC,IAAI,QACG;OAAA,MAAM,GAAG,WAAW,SAAS,IAAI,OAAO,SAAS,KAAA,GAAW,OAAO,UAAU;CAAA;CAEpF,OAAO;EAAE;EAAQ;CAAQ;AAC3B;AAEA,SAAgB,4BACd,MACA,sBAA+B,MAC/B,SAAiB,IACjB,aAC6C;CAC7C,IAAI,CAAC,KAAK,kBAAkB,GAAG,MAAM,IAAI,MAAM,uBAAuB;CACtE,MAAM,gBAAgB,0BAA0B,MAAM,qBAAqB,OAAO,MAAM;CACxF,OAAO,cAAc,MAAM;CAC3B,MAAM,aAA0D,CAAC;CACjE,KAAK,MAAM,CAAC,YAAY,WAAW,cAAc,SAAS;EACxD,IAAI,OAAO,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB,YAAY;EAC9E,IAAI,OAAO,YAAY,QAAQ,OAAO,SAAS,KAAA,GAC7C,MAAM,IAAI,MAAM,mBAAmB,YAAY;EACjD,MAAM,OAAO,OAAO,KAAK;EACzB,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB,YAAY;EACvE,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK;EACzB,WAAW,cAAc;GACvB,IACE,YAAY,WAAW,IACnB,sBAAsB,OAAO,MAAM,KAAK,KAAK,IAC7C,qBAAqB,aAAa,UAAU;GAClD,MAAM,OAAO;GACb,MAAM,KAAK;EACb;CACF;CACA,OAAO;AACT"}
@@ -5,7 +5,7 @@ const require_data = require("./data.cjs");
5
5
  const require_p_object_collection = require("./p_object_collection.cjs");
6
6
  let _platforma_sdk_model = require("@platforma-sdk/model");
7
7
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
8
- //#region src/pool/result_pool.ts
8
+ // src/pool/result_pool.ts
9
9
  var ResultPool = class ResultPool {
10
10
  ctx;
11
11
  blocks;
@@ -189,15 +189,16 @@ var ResultPool = class ResultPool {
189
189
  };
190
190
  /** Loads single BContext data */
191
191
  function loadCtx(calculated, ctxAccessor) {
192
- if (ctxAccessor === void 0) if (calculated) return {
193
- locked: false,
194
- results: /* @__PURE__ */ new Map()
195
- };
196
- else return void 0;
192
+ if (ctxAccessor === void 0) {
193
+ if (calculated) return {
194
+ locked: false,
195
+ results: /* @__PURE__ */ new Map()
196
+ };
197
+ else return void 0;
198
+ }
197
199
  if (ctxAccessor.ok) return require_p_object_collection.parseRawPObjectCollection(ctxAccessor.value, false, true);
198
200
  else return void 0;
199
201
  }
200
- //#endregion
201
202
  exports.ResultPool = ResultPool;
202
203
 
203
204
  //# sourceMappingURL=result_pool.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"result_pool.cjs","names":["deriveGlobalPObjectId","outputRef","ProjectStructureKey","stagingGraph","allBlocks","projectFieldName","parseRawPObjectCollection"],"sources":["../../src/pool/result_pool.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport type {\n Option,\n PObject,\n PObjectSpec,\n PlRef,\n ResultCollection,\n ResultPoolEntry,\n ValueOrError,\n} from \"@platforma-sdk/model\";\nimport { mapValueInVOE } from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { outputRef } from \"../model/args\";\nimport type { Block, ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks, stagingGraph } from \"../model/project_model_util\";\nimport type { Optional } from \"utility-types\";\nimport { deriveGlobalPObjectId } from \"./data\";\nimport type { RawPObjectCollection, RawPObjectEntry } from \"./p_object_collection\";\nimport { parseRawPObjectCollection } from \"./p_object_collection\";\n\n/** All exported results are addressed */\nexport type ResultKey = Pick<PlRef, \"blockId\" | \"name\">;\n\n/** Represents current information about particular block */\ninterface PoolBlock {\n /** Meta information from the project structure */\n readonly info: Block;\n /** Production ctx, if exists. If block's prod was executed, this field is guaranteed to be defined. */\n readonly prod?: RawPObjectCollection;\n /** Staging ctx, if exists. If staging was rendered, this field is guaranteed to be defined. */\n readonly staging?: RawPObjectCollection;\n}\n\nexport interface ExtendedResultCollection<T> extends ResultCollection<T> {\n readonly instabilityMarker: string | undefined;\n}\n\nexport interface ExtendedOption extends Option {\n readonly spec: PObjectSpec;\n}\n\nexport class ResultPool {\n private readonly allSpecsAvailable: boolean;\n private constructor(\n private readonly ctx: ComputableCtx,\n private readonly blocks: Map<string, PoolBlock>,\n ) {\n let allSpecsAvailable = true;\n outer: for (const block of blocks.values()) {\n for (const ctx of [block.prod, block.staging])\n if (ctx !== undefined) {\n if (!ctx.locked) {\n allSpecsAvailable = false;\n break outer;\n }\n for (const result of ctx.results.values()) {\n if (result.spec === undefined) {\n allSpecsAvailable = false;\n break outer;\n }\n }\n }\n }\n this.allSpecsAvailable = allSpecsAvailable;\n }\n\n public getSpecByRef(blockId: string, exportName: string): PObjectSpec | undefined {\n const block = this.blocks.get(blockId);\n if (block === undefined) return undefined;\n let result = block.prod?.results?.get(exportName)?.spec;\n if (result !== undefined) return result;\n result = block.staging?.results?.get(exportName)?.spec;\n if (result !== undefined) return result;\n // Note: Don't mark unstable when staging is absent - it may be intentionally skipped\n // for v3 blocks with undefined prerunArgs.\n if (block.staging !== undefined && !block.staging.locked)\n this.ctx.markUnstable(`staging_not_locked:${blockId}`);\n else if (block.prod !== undefined && !block.prod.locked)\n this.ctx.markUnstable(`prod_not_locked:${blockId}`);\n // if neither prod nor staging is present, returned undefined value is considered stable\n return undefined;\n }\n\n public getDataOrErrorByRef(\n blockId: string,\n exportName: string,\n ): ValueOrError<PObject<PlTreeNodeAccessor>, Error> | undefined {\n const block = this.blocks.get(blockId);\n if (block === undefined) return undefined;\n const result = block.prod?.results?.get(exportName);\n const data = result?.data?.();\n if (result !== undefined && result.spec !== undefined && data !== undefined)\n return mapValueInVOE(data, (value) => ({\n id: deriveGlobalPObjectId(blockId, exportName),\n spec: result.spec!,\n data: value,\n }));\n if (result !== undefined) this.ctx.markUnstable(`no_data:${blockId}:${exportName}`);\n if (block.prod !== undefined && !block.prod.locked)\n this.ctx.markUnstable(`prod_not_locked:${blockId}`);\n // if prod is absent, returned undefined value is considered stable\n return undefined;\n }\n\n public getDataByRef(\n blockId: string,\n exportName: string,\n ): PObject<PlTreeNodeAccessor> | undefined {\n const res = this.getDataOrErrorByRef(blockId, exportName);\n if (res === undefined || !res.ok) return undefined;\n return res.value;\n }\n\n public getData(): ExtendedResultCollection<PObject<PlTreeNodeAccessor>> {\n const resultWithErrors = this.getDataWithErrors();\n const entries: ResultPoolEntry<PObject<PlTreeNodeAccessor>>[] = [];\n for (const res of resultWithErrors.entries)\n if (res.obj.id !== undefined && res.obj.data.ok)\n entries.push({\n ref: res.ref,\n obj: {\n id: res.obj.id,\n spec: res.obj.spec,\n data: res.obj.data.value,\n },\n });\n return {\n entries,\n isComplete: resultWithErrors.isComplete,\n instabilityMarker: resultWithErrors.instabilityMarker,\n };\n }\n\n public getDataWithErrors(): ExtendedResultCollection<\n Optional<PObject<ValueOrError<PlTreeNodeAccessor, Error>>, \"id\">\n > {\n const entries: ResultPoolEntry<\n Optional<PObject<ValueOrError<PlTreeNodeAccessor, Error>>, \"id\">\n >[] = [];\n let isComplete = true;\n\n let instabilityMarker: string | undefined = undefined;\n const markUnstable = (marker: string) => {\n if (instabilityMarker === undefined) instabilityMarker = marker;\n isComplete = false;\n };\n\n const tryAddEntry = (blockId: string, exportName: string, result: RawPObjectEntry) => {\n if (result.spec !== undefined && result.hasData === true && result.data !== undefined) {\n const data = result.data();\n if (data !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: {\n id: data.ok ? deriveGlobalPObjectId(blockId, exportName) : undefined,\n spec: result.spec,\n data,\n },\n });\n } else markUnstable(`no_data:${blockId}:${exportName}`); // because data will eventually be resolved\n }\n };\n\n for (const [blockId, block] of this.blocks) {\n const exportsProcessed = new Set<string>();\n\n if (block.prod !== undefined) {\n if (!block.prod.locked) markUnstable(`prod_not_locked:${blockId}`);\n for (const [exportName, result] of block.prod.results) {\n // any signal that this export will be (or already is) present in the prod\n // will prevent adding it from staging\n exportsProcessed.add(exportName);\n tryAddEntry(blockId, exportName, result);\n }\n }\n\n if (block.staging !== undefined) {\n if (!block.staging.locked) markUnstable(`staging_not_locked:${blockId}`);\n\n for (const [exportName, result] of block.staging.results) {\n // trying to add something only if result is absent in prod\n if (exportsProcessed.has(exportName)) continue;\n tryAddEntry(blockId, exportName, result);\n }\n }\n }\n\n return { entries, isComplete, instabilityMarker };\n }\n\n public getSpecs(): ExtendedResultCollection<PObjectSpec> {\n const entries: ResultPoolEntry<PObjectSpec>[] = [];\n\n let isComplete = true;\n\n let instabilityMarker: string | undefined = undefined;\n const markUnstable = (marker: string) => {\n if (instabilityMarker === undefined) instabilityMarker = marker;\n isComplete = false;\n };\n\n for (const [blockId, block] of this.blocks) {\n const exportsProcessed = new Set<string>();\n if (block.staging !== undefined) {\n if (!block.staging.locked) markUnstable(`staging_not_locked:${blockId}`);\n\n for (const [exportName, result] of block.staging.results)\n if (result.spec !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: result.spec,\n });\n exportsProcessed.add(exportName);\n }\n }\n // Note: Don't mark unstable when staging is absent - it may be intentionally skipped\n // for v3 blocks with undefined prerunArgs. If prod exists, use it; if neither exists,\n // the block simply has no specs to contribute.\n\n if (block.prod !== undefined) {\n if (!block.prod.locked) markUnstable(`prod_not_locked:${blockId}`);\n for (const [exportName, result] of block.prod.results) {\n // staging have higher priority when we are interested in specs\n if (exportsProcessed.has(exportName)) continue;\n\n if (result.spec !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: result.spec,\n });\n }\n }\n }\n }\n\n return { entries, isComplete, instabilityMarker };\n }\n\n public static create(ctx: ComputableCtx, prjEntry: PlTreeEntry, rootBlockId: string): ResultPool {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const graph = stagingGraph(structure);\n const targetBlocks = graph.traverseIds(\"upstream\", rootBlockId);\n\n const blocks = new Map<string, PoolBlock>();\n\n for (const blockInfo of allBlocks(structure)) {\n if (!targetBlocks.has(blockInfo.id)) continue;\n\n const prod = loadCtx(\n prj.traverse({\n field: projectFieldName(blockInfo.id, \"prodCtx\"),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined,\n prj.traverseOrError({\n field: projectFieldName(blockInfo.id, \"prodUiCtx\"),\n stableIfNotFound: true,\n }),\n );\n const staging = loadCtx(\n prj.traverse({\n field: projectFieldName(blockInfo.id, \"stagingCtx\"),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined,\n prj.traverseOrError({\n field: projectFieldName(blockInfo.id, \"stagingUiCtx\"),\n stableIfNotFound: true,\n }),\n );\n\n blocks.set(blockInfo.id, { info: blockInfo, prod, staging });\n }\n\n return new ResultPool(ctx, blocks);\n }\n}\n\n/** Loads single BContext data */\nfunction loadCtx(\n calculated: boolean,\n ctxAccessor: ValueOrError<PlTreeNodeAccessor, Error> | undefined,\n): RawPObjectCollection | undefined {\n if (ctxAccessor === undefined) {\n if (calculated)\n // this case defines the situation when ctx holder is present, but the ctx itself is\n // not yet available, to simplify the logic we make this situation indistinguishable\n // from empty unlocked cotext\n return { locked: false, results: new Map() };\n else return undefined;\n }\n\n if (ctxAccessor.ok) return parseRawPObjectCollection(ctxAccessor.value, false, true);\n else return undefined;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"result_pool.cjs","names":["mapValueInVOE","deriveGlobalPObjectId","outputRef","notEmpty","ProjectStructureKey","stagingGraph","allBlocks","projectFieldName","parseRawPObjectCollection"],"sources":["../../src/pool/result_pool.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport type {\n Option,\n PObject,\n PObjectSpec,\n PlRef,\n ResultCollection,\n ResultPoolEntry,\n ValueOrError,\n} from \"@platforma-sdk/model\";\nimport { mapValueInVOE } from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { outputRef } from \"../model/args\";\nimport type { Block, ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks, stagingGraph } from \"../model/project_model_util\";\nimport type { Optional } from \"utility-types\";\nimport { deriveGlobalPObjectId } from \"./data\";\nimport type { RawPObjectCollection, RawPObjectEntry } from \"./p_object_collection\";\nimport { parseRawPObjectCollection } from \"./p_object_collection\";\n\n/** All exported results are addressed */\nexport type ResultKey = Pick<PlRef, \"blockId\" | \"name\">;\n\n/** Represents current information about particular block */\ninterface PoolBlock {\n /** Meta information from the project structure */\n readonly info: Block;\n /** Production ctx, if exists. If block's prod was executed, this field is guaranteed to be defined. */\n readonly prod?: RawPObjectCollection;\n /** Staging ctx, if exists. If staging was rendered, this field is guaranteed to be defined. */\n readonly staging?: RawPObjectCollection;\n}\n\nexport interface ExtendedResultCollection<T> extends ResultCollection<T> {\n readonly instabilityMarker: string | undefined;\n}\n\nexport interface ExtendedOption extends Option {\n readonly spec: PObjectSpec;\n}\n\nexport class ResultPool {\n private readonly allSpecsAvailable: boolean;\n private constructor(\n private readonly ctx: ComputableCtx,\n private readonly blocks: Map<string, PoolBlock>,\n ) {\n let allSpecsAvailable = true;\n outer: for (const block of blocks.values()) {\n for (const ctx of [block.prod, block.staging])\n if (ctx !== undefined) {\n if (!ctx.locked) {\n allSpecsAvailable = false;\n break outer;\n }\n for (const result of ctx.results.values()) {\n if (result.spec === undefined) {\n allSpecsAvailable = false;\n break outer;\n }\n }\n }\n }\n this.allSpecsAvailable = allSpecsAvailable;\n }\n\n public getSpecByRef(blockId: string, exportName: string): PObjectSpec | undefined {\n const block = this.blocks.get(blockId);\n if (block === undefined) return undefined;\n let result = block.prod?.results?.get(exportName)?.spec;\n if (result !== undefined) return result;\n result = block.staging?.results?.get(exportName)?.spec;\n if (result !== undefined) return result;\n // Note: Don't mark unstable when staging is absent - it may be intentionally skipped\n // for v3 blocks with undefined prerunArgs.\n if (block.staging !== undefined && !block.staging.locked)\n this.ctx.markUnstable(`staging_not_locked:${blockId}`);\n else if (block.prod !== undefined && !block.prod.locked)\n this.ctx.markUnstable(`prod_not_locked:${blockId}`);\n // if neither prod nor staging is present, returned undefined value is considered stable\n return undefined;\n }\n\n public getDataOrErrorByRef(\n blockId: string,\n exportName: string,\n ): ValueOrError<PObject<PlTreeNodeAccessor>, Error> | undefined {\n const block = this.blocks.get(blockId);\n if (block === undefined) return undefined;\n const result = block.prod?.results?.get(exportName);\n const data = result?.data?.();\n if (result !== undefined && result.spec !== undefined && data !== undefined)\n return mapValueInVOE(data, (value) => ({\n id: deriveGlobalPObjectId(blockId, exportName),\n spec: result.spec!,\n data: value,\n }));\n if (result !== undefined) this.ctx.markUnstable(`no_data:${blockId}:${exportName}`);\n if (block.prod !== undefined && !block.prod.locked)\n this.ctx.markUnstable(`prod_not_locked:${blockId}`);\n // if prod is absent, returned undefined value is considered stable\n return undefined;\n }\n\n public getDataByRef(\n blockId: string,\n exportName: string,\n ): PObject<PlTreeNodeAccessor> | undefined {\n const res = this.getDataOrErrorByRef(blockId, exportName);\n if (res === undefined || !res.ok) return undefined;\n return res.value;\n }\n\n public getData(): ExtendedResultCollection<PObject<PlTreeNodeAccessor>> {\n const resultWithErrors = this.getDataWithErrors();\n const entries: ResultPoolEntry<PObject<PlTreeNodeAccessor>>[] = [];\n for (const res of resultWithErrors.entries)\n if (res.obj.id !== undefined && res.obj.data.ok)\n entries.push({\n ref: res.ref,\n obj: {\n id: res.obj.id,\n spec: res.obj.spec,\n data: res.obj.data.value,\n },\n });\n return {\n entries,\n isComplete: resultWithErrors.isComplete,\n instabilityMarker: resultWithErrors.instabilityMarker,\n };\n }\n\n public getDataWithErrors(): ExtendedResultCollection<\n Optional<PObject<ValueOrError<PlTreeNodeAccessor, Error>>, \"id\">\n > {\n const entries: ResultPoolEntry<\n Optional<PObject<ValueOrError<PlTreeNodeAccessor, Error>>, \"id\">\n >[] = [];\n let isComplete = true;\n\n let instabilityMarker: string | undefined = undefined;\n const markUnstable = (marker: string) => {\n if (instabilityMarker === undefined) instabilityMarker = marker;\n isComplete = false;\n };\n\n const tryAddEntry = (blockId: string, exportName: string, result: RawPObjectEntry) => {\n if (result.spec !== undefined && result.hasData === true && result.data !== undefined) {\n const data = result.data();\n if (data !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: {\n id: data.ok ? deriveGlobalPObjectId(blockId, exportName) : undefined,\n spec: result.spec,\n data,\n },\n });\n } else markUnstable(`no_data:${blockId}:${exportName}`); // because data will eventually be resolved\n }\n };\n\n for (const [blockId, block] of this.blocks) {\n const exportsProcessed = new Set<string>();\n\n if (block.prod !== undefined) {\n if (!block.prod.locked) markUnstable(`prod_not_locked:${blockId}`);\n for (const [exportName, result] of block.prod.results) {\n // any signal that this export will be (or already is) present in the prod\n // will prevent adding it from staging\n exportsProcessed.add(exportName);\n tryAddEntry(blockId, exportName, result);\n }\n }\n\n if (block.staging !== undefined) {\n if (!block.staging.locked) markUnstable(`staging_not_locked:${blockId}`);\n\n for (const [exportName, result] of block.staging.results) {\n // trying to add something only if result is absent in prod\n if (exportsProcessed.has(exportName)) continue;\n tryAddEntry(blockId, exportName, result);\n }\n }\n }\n\n return { entries, isComplete, instabilityMarker };\n }\n\n public getSpecs(): ExtendedResultCollection<PObjectSpec> {\n const entries: ResultPoolEntry<PObjectSpec>[] = [];\n\n let isComplete = true;\n\n let instabilityMarker: string | undefined = undefined;\n const markUnstable = (marker: string) => {\n if (instabilityMarker === undefined) instabilityMarker = marker;\n isComplete = false;\n };\n\n for (const [blockId, block] of this.blocks) {\n const exportsProcessed = new Set<string>();\n if (block.staging !== undefined) {\n if (!block.staging.locked) markUnstable(`staging_not_locked:${blockId}`);\n\n for (const [exportName, result] of block.staging.results)\n if (result.spec !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: result.spec,\n });\n exportsProcessed.add(exportName);\n }\n }\n // Note: Don't mark unstable when staging is absent - it may be intentionally skipped\n // for v3 blocks with undefined prerunArgs. If prod exists, use it; if neither exists,\n // the block simply has no specs to contribute.\n\n if (block.prod !== undefined) {\n if (!block.prod.locked) markUnstable(`prod_not_locked:${blockId}`);\n for (const [exportName, result] of block.prod.results) {\n // staging have higher priority when we are interested in specs\n if (exportsProcessed.has(exportName)) continue;\n\n if (result.spec !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: result.spec,\n });\n }\n }\n }\n }\n\n return { entries, isComplete, instabilityMarker };\n }\n\n public static create(ctx: ComputableCtx, prjEntry: PlTreeEntry, rootBlockId: string): ResultPool {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const graph = stagingGraph(structure);\n const targetBlocks = graph.traverseIds(\"upstream\", rootBlockId);\n\n const blocks = new Map<string, PoolBlock>();\n\n for (const blockInfo of allBlocks(structure)) {\n if (!targetBlocks.has(blockInfo.id)) continue;\n\n const prod = loadCtx(\n prj.traverse({\n field: projectFieldName(blockInfo.id, \"prodCtx\"),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined,\n prj.traverseOrError({\n field: projectFieldName(blockInfo.id, \"prodUiCtx\"),\n stableIfNotFound: true,\n }),\n );\n const staging = loadCtx(\n prj.traverse({\n field: projectFieldName(blockInfo.id, \"stagingCtx\"),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined,\n prj.traverseOrError({\n field: projectFieldName(blockInfo.id, \"stagingUiCtx\"),\n stableIfNotFound: true,\n }),\n );\n\n blocks.set(blockInfo.id, { info: blockInfo, prod, staging });\n }\n\n return new ResultPool(ctx, blocks);\n }\n}\n\n/** Loads single BContext data */\nfunction loadCtx(\n calculated: boolean,\n ctxAccessor: ValueOrError<PlTreeNodeAccessor, Error> | undefined,\n): RawPObjectCollection | undefined {\n if (ctxAccessor === undefined) {\n if (calculated)\n // this case defines the situation when ctx holder is present, but the ctx itself is\n // not yet available, to simplify the logic we make this situation indistinguishable\n // from empty unlocked cotext\n return { locked: false, results: new Map() };\n else return undefined;\n }\n\n if (ctxAccessor.ok) return parseRawPObjectCollection(ctxAccessor.value, false, true);\n else return undefined;\n}\n"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { deriveGlobalPObjectId } from "./data.js";
5
5
  import { parseRawPObjectCollection } from "./p_object_collection.js";
6
6
  import { mapValueInVOE } from "@platforma-sdk/model";
7
7
  import { notEmpty } from "@milaboratories/ts-helpers";
8
- //#region src/pool/result_pool.ts
8
+ // src/pool/result_pool.ts
9
9
  var ResultPool = class ResultPool {
10
10
  ctx;
11
11
  blocks;
@@ -189,15 +189,16 @@ var ResultPool = class ResultPool {
189
189
  };
190
190
  /** Loads single BContext data */
191
191
  function loadCtx(calculated, ctxAccessor) {
192
- if (ctxAccessor === void 0) if (calculated) return {
193
- locked: false,
194
- results: /* @__PURE__ */ new Map()
195
- };
196
- else return void 0;
192
+ if (ctxAccessor === void 0) {
193
+ if (calculated) return {
194
+ locked: false,
195
+ results: /* @__PURE__ */ new Map()
196
+ };
197
+ else return void 0;
198
+ }
197
199
  if (ctxAccessor.ok) return parseRawPObjectCollection(ctxAccessor.value, false, true);
198
200
  else return void 0;
199
201
  }
200
- //#endregion
201
202
  export { ResultPool };
202
203
 
203
204
  //# sourceMappingURL=result_pool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"result_pool.js","names":[],"sources":["../../src/pool/result_pool.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport type {\n Option,\n PObject,\n PObjectSpec,\n PlRef,\n ResultCollection,\n ResultPoolEntry,\n ValueOrError,\n} from \"@platforma-sdk/model\";\nimport { mapValueInVOE } from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { outputRef } from \"../model/args\";\nimport type { Block, ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks, stagingGraph } from \"../model/project_model_util\";\nimport type { Optional } from \"utility-types\";\nimport { deriveGlobalPObjectId } from \"./data\";\nimport type { RawPObjectCollection, RawPObjectEntry } from \"./p_object_collection\";\nimport { parseRawPObjectCollection } from \"./p_object_collection\";\n\n/** All exported results are addressed */\nexport type ResultKey = Pick<PlRef, \"blockId\" | \"name\">;\n\n/** Represents current information about particular block */\ninterface PoolBlock {\n /** Meta information from the project structure */\n readonly info: Block;\n /** Production ctx, if exists. If block's prod was executed, this field is guaranteed to be defined. */\n readonly prod?: RawPObjectCollection;\n /** Staging ctx, if exists. If staging was rendered, this field is guaranteed to be defined. */\n readonly staging?: RawPObjectCollection;\n}\n\nexport interface ExtendedResultCollection<T> extends ResultCollection<T> {\n readonly instabilityMarker: string | undefined;\n}\n\nexport interface ExtendedOption extends Option {\n readonly spec: PObjectSpec;\n}\n\nexport class ResultPool {\n private readonly allSpecsAvailable: boolean;\n private constructor(\n private readonly ctx: ComputableCtx,\n private readonly blocks: Map<string, PoolBlock>,\n ) {\n let allSpecsAvailable = true;\n outer: for (const block of blocks.values()) {\n for (const ctx of [block.prod, block.staging])\n if (ctx !== undefined) {\n if (!ctx.locked) {\n allSpecsAvailable = false;\n break outer;\n }\n for (const result of ctx.results.values()) {\n if (result.spec === undefined) {\n allSpecsAvailable = false;\n break outer;\n }\n }\n }\n }\n this.allSpecsAvailable = allSpecsAvailable;\n }\n\n public getSpecByRef(blockId: string, exportName: string): PObjectSpec | undefined {\n const block = this.blocks.get(blockId);\n if (block === undefined) return undefined;\n let result = block.prod?.results?.get(exportName)?.spec;\n if (result !== undefined) return result;\n result = block.staging?.results?.get(exportName)?.spec;\n if (result !== undefined) return result;\n // Note: Don't mark unstable when staging is absent - it may be intentionally skipped\n // for v3 blocks with undefined prerunArgs.\n if (block.staging !== undefined && !block.staging.locked)\n this.ctx.markUnstable(`staging_not_locked:${blockId}`);\n else if (block.prod !== undefined && !block.prod.locked)\n this.ctx.markUnstable(`prod_not_locked:${blockId}`);\n // if neither prod nor staging is present, returned undefined value is considered stable\n return undefined;\n }\n\n public getDataOrErrorByRef(\n blockId: string,\n exportName: string,\n ): ValueOrError<PObject<PlTreeNodeAccessor>, Error> | undefined {\n const block = this.blocks.get(blockId);\n if (block === undefined) return undefined;\n const result = block.prod?.results?.get(exportName);\n const data = result?.data?.();\n if (result !== undefined && result.spec !== undefined && data !== undefined)\n return mapValueInVOE(data, (value) => ({\n id: deriveGlobalPObjectId(blockId, exportName),\n spec: result.spec!,\n data: value,\n }));\n if (result !== undefined) this.ctx.markUnstable(`no_data:${blockId}:${exportName}`);\n if (block.prod !== undefined && !block.prod.locked)\n this.ctx.markUnstable(`prod_not_locked:${blockId}`);\n // if prod is absent, returned undefined value is considered stable\n return undefined;\n }\n\n public getDataByRef(\n blockId: string,\n exportName: string,\n ): PObject<PlTreeNodeAccessor> | undefined {\n const res = this.getDataOrErrorByRef(blockId, exportName);\n if (res === undefined || !res.ok) return undefined;\n return res.value;\n }\n\n public getData(): ExtendedResultCollection<PObject<PlTreeNodeAccessor>> {\n const resultWithErrors = this.getDataWithErrors();\n const entries: ResultPoolEntry<PObject<PlTreeNodeAccessor>>[] = [];\n for (const res of resultWithErrors.entries)\n if (res.obj.id !== undefined && res.obj.data.ok)\n entries.push({\n ref: res.ref,\n obj: {\n id: res.obj.id,\n spec: res.obj.spec,\n data: res.obj.data.value,\n },\n });\n return {\n entries,\n isComplete: resultWithErrors.isComplete,\n instabilityMarker: resultWithErrors.instabilityMarker,\n };\n }\n\n public getDataWithErrors(): ExtendedResultCollection<\n Optional<PObject<ValueOrError<PlTreeNodeAccessor, Error>>, \"id\">\n > {\n const entries: ResultPoolEntry<\n Optional<PObject<ValueOrError<PlTreeNodeAccessor, Error>>, \"id\">\n >[] = [];\n let isComplete = true;\n\n let instabilityMarker: string | undefined = undefined;\n const markUnstable = (marker: string) => {\n if (instabilityMarker === undefined) instabilityMarker = marker;\n isComplete = false;\n };\n\n const tryAddEntry = (blockId: string, exportName: string, result: RawPObjectEntry) => {\n if (result.spec !== undefined && result.hasData === true && result.data !== undefined) {\n const data = result.data();\n if (data !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: {\n id: data.ok ? deriveGlobalPObjectId(blockId, exportName) : undefined,\n spec: result.spec,\n data,\n },\n });\n } else markUnstable(`no_data:${blockId}:${exportName}`); // because data will eventually be resolved\n }\n };\n\n for (const [blockId, block] of this.blocks) {\n const exportsProcessed = new Set<string>();\n\n if (block.prod !== undefined) {\n if (!block.prod.locked) markUnstable(`prod_not_locked:${blockId}`);\n for (const [exportName, result] of block.prod.results) {\n // any signal that this export will be (or already is) present in the prod\n // will prevent adding it from staging\n exportsProcessed.add(exportName);\n tryAddEntry(blockId, exportName, result);\n }\n }\n\n if (block.staging !== undefined) {\n if (!block.staging.locked) markUnstable(`staging_not_locked:${blockId}`);\n\n for (const [exportName, result] of block.staging.results) {\n // trying to add something only if result is absent in prod\n if (exportsProcessed.has(exportName)) continue;\n tryAddEntry(blockId, exportName, result);\n }\n }\n }\n\n return { entries, isComplete, instabilityMarker };\n }\n\n public getSpecs(): ExtendedResultCollection<PObjectSpec> {\n const entries: ResultPoolEntry<PObjectSpec>[] = [];\n\n let isComplete = true;\n\n let instabilityMarker: string | undefined = undefined;\n const markUnstable = (marker: string) => {\n if (instabilityMarker === undefined) instabilityMarker = marker;\n isComplete = false;\n };\n\n for (const [blockId, block] of this.blocks) {\n const exportsProcessed = new Set<string>();\n if (block.staging !== undefined) {\n if (!block.staging.locked) markUnstable(`staging_not_locked:${blockId}`);\n\n for (const [exportName, result] of block.staging.results)\n if (result.spec !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: result.spec,\n });\n exportsProcessed.add(exportName);\n }\n }\n // Note: Don't mark unstable when staging is absent - it may be intentionally skipped\n // for v3 blocks with undefined prerunArgs. If prod exists, use it; if neither exists,\n // the block simply has no specs to contribute.\n\n if (block.prod !== undefined) {\n if (!block.prod.locked) markUnstable(`prod_not_locked:${blockId}`);\n for (const [exportName, result] of block.prod.results) {\n // staging have higher priority when we are interested in specs\n if (exportsProcessed.has(exportName)) continue;\n\n if (result.spec !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: result.spec,\n });\n }\n }\n }\n }\n\n return { entries, isComplete, instabilityMarker };\n }\n\n public static create(ctx: ComputableCtx, prjEntry: PlTreeEntry, rootBlockId: string): ResultPool {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const graph = stagingGraph(structure);\n const targetBlocks = graph.traverseIds(\"upstream\", rootBlockId);\n\n const blocks = new Map<string, PoolBlock>();\n\n for (const blockInfo of allBlocks(structure)) {\n if (!targetBlocks.has(blockInfo.id)) continue;\n\n const prod = loadCtx(\n prj.traverse({\n field: projectFieldName(blockInfo.id, \"prodCtx\"),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined,\n prj.traverseOrError({\n field: projectFieldName(blockInfo.id, \"prodUiCtx\"),\n stableIfNotFound: true,\n }),\n );\n const staging = loadCtx(\n prj.traverse({\n field: projectFieldName(blockInfo.id, \"stagingCtx\"),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined,\n prj.traverseOrError({\n field: projectFieldName(blockInfo.id, \"stagingUiCtx\"),\n stableIfNotFound: true,\n }),\n );\n\n blocks.set(blockInfo.id, { info: blockInfo, prod, staging });\n }\n\n return new ResultPool(ctx, blocks);\n }\n}\n\n/** Loads single BContext data */\nfunction loadCtx(\n calculated: boolean,\n ctxAccessor: ValueOrError<PlTreeNodeAccessor, Error> | undefined,\n): RawPObjectCollection | undefined {\n if (ctxAccessor === undefined) {\n if (calculated)\n // this case defines the situation when ctx holder is present, but the ctx itself is\n // not yet available, to simplify the logic we make this situation indistinguishable\n // from empty unlocked cotext\n return { locked: false, results: new Map() };\n else return undefined;\n }\n\n if (ctxAccessor.ok) return parseRawPObjectCollection(ctxAccessor.value, false, true);\n else return undefined;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"result_pool.js","names":[],"sources":["../../src/pool/result_pool.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport type {\n Option,\n PObject,\n PObjectSpec,\n PlRef,\n ResultCollection,\n ResultPoolEntry,\n ValueOrError,\n} from \"@platforma-sdk/model\";\nimport { mapValueInVOE } from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { outputRef } from \"../model/args\";\nimport type { Block, ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks, stagingGraph } from \"../model/project_model_util\";\nimport type { Optional } from \"utility-types\";\nimport { deriveGlobalPObjectId } from \"./data\";\nimport type { RawPObjectCollection, RawPObjectEntry } from \"./p_object_collection\";\nimport { parseRawPObjectCollection } from \"./p_object_collection\";\n\n/** All exported results are addressed */\nexport type ResultKey = Pick<PlRef, \"blockId\" | \"name\">;\n\n/** Represents current information about particular block */\ninterface PoolBlock {\n /** Meta information from the project structure */\n readonly info: Block;\n /** Production ctx, if exists. If block's prod was executed, this field is guaranteed to be defined. */\n readonly prod?: RawPObjectCollection;\n /** Staging ctx, if exists. If staging was rendered, this field is guaranteed to be defined. */\n readonly staging?: RawPObjectCollection;\n}\n\nexport interface ExtendedResultCollection<T> extends ResultCollection<T> {\n readonly instabilityMarker: string | undefined;\n}\n\nexport interface ExtendedOption extends Option {\n readonly spec: PObjectSpec;\n}\n\nexport class ResultPool {\n private readonly allSpecsAvailable: boolean;\n private constructor(\n private readonly ctx: ComputableCtx,\n private readonly blocks: Map<string, PoolBlock>,\n ) {\n let allSpecsAvailable = true;\n outer: for (const block of blocks.values()) {\n for (const ctx of [block.prod, block.staging])\n if (ctx !== undefined) {\n if (!ctx.locked) {\n allSpecsAvailable = false;\n break outer;\n }\n for (const result of ctx.results.values()) {\n if (result.spec === undefined) {\n allSpecsAvailable = false;\n break outer;\n }\n }\n }\n }\n this.allSpecsAvailable = allSpecsAvailable;\n }\n\n public getSpecByRef(blockId: string, exportName: string): PObjectSpec | undefined {\n const block = this.blocks.get(blockId);\n if (block === undefined) return undefined;\n let result = block.prod?.results?.get(exportName)?.spec;\n if (result !== undefined) return result;\n result = block.staging?.results?.get(exportName)?.spec;\n if (result !== undefined) return result;\n // Note: Don't mark unstable when staging is absent - it may be intentionally skipped\n // for v3 blocks with undefined prerunArgs.\n if (block.staging !== undefined && !block.staging.locked)\n this.ctx.markUnstable(`staging_not_locked:${blockId}`);\n else if (block.prod !== undefined && !block.prod.locked)\n this.ctx.markUnstable(`prod_not_locked:${blockId}`);\n // if neither prod nor staging is present, returned undefined value is considered stable\n return undefined;\n }\n\n public getDataOrErrorByRef(\n blockId: string,\n exportName: string,\n ): ValueOrError<PObject<PlTreeNodeAccessor>, Error> | undefined {\n const block = this.blocks.get(blockId);\n if (block === undefined) return undefined;\n const result = block.prod?.results?.get(exportName);\n const data = result?.data?.();\n if (result !== undefined && result.spec !== undefined && data !== undefined)\n return mapValueInVOE(data, (value) => ({\n id: deriveGlobalPObjectId(blockId, exportName),\n spec: result.spec!,\n data: value,\n }));\n if (result !== undefined) this.ctx.markUnstable(`no_data:${blockId}:${exportName}`);\n if (block.prod !== undefined && !block.prod.locked)\n this.ctx.markUnstable(`prod_not_locked:${blockId}`);\n // if prod is absent, returned undefined value is considered stable\n return undefined;\n }\n\n public getDataByRef(\n blockId: string,\n exportName: string,\n ): PObject<PlTreeNodeAccessor> | undefined {\n const res = this.getDataOrErrorByRef(blockId, exportName);\n if (res === undefined || !res.ok) return undefined;\n return res.value;\n }\n\n public getData(): ExtendedResultCollection<PObject<PlTreeNodeAccessor>> {\n const resultWithErrors = this.getDataWithErrors();\n const entries: ResultPoolEntry<PObject<PlTreeNodeAccessor>>[] = [];\n for (const res of resultWithErrors.entries)\n if (res.obj.id !== undefined && res.obj.data.ok)\n entries.push({\n ref: res.ref,\n obj: {\n id: res.obj.id,\n spec: res.obj.spec,\n data: res.obj.data.value,\n },\n });\n return {\n entries,\n isComplete: resultWithErrors.isComplete,\n instabilityMarker: resultWithErrors.instabilityMarker,\n };\n }\n\n public getDataWithErrors(): ExtendedResultCollection<\n Optional<PObject<ValueOrError<PlTreeNodeAccessor, Error>>, \"id\">\n > {\n const entries: ResultPoolEntry<\n Optional<PObject<ValueOrError<PlTreeNodeAccessor, Error>>, \"id\">\n >[] = [];\n let isComplete = true;\n\n let instabilityMarker: string | undefined = undefined;\n const markUnstable = (marker: string) => {\n if (instabilityMarker === undefined) instabilityMarker = marker;\n isComplete = false;\n };\n\n const tryAddEntry = (blockId: string, exportName: string, result: RawPObjectEntry) => {\n if (result.spec !== undefined && result.hasData === true && result.data !== undefined) {\n const data = result.data();\n if (data !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: {\n id: data.ok ? deriveGlobalPObjectId(blockId, exportName) : undefined,\n spec: result.spec,\n data,\n },\n });\n } else markUnstable(`no_data:${blockId}:${exportName}`); // because data will eventually be resolved\n }\n };\n\n for (const [blockId, block] of this.blocks) {\n const exportsProcessed = new Set<string>();\n\n if (block.prod !== undefined) {\n if (!block.prod.locked) markUnstable(`prod_not_locked:${blockId}`);\n for (const [exportName, result] of block.prod.results) {\n // any signal that this export will be (or already is) present in the prod\n // will prevent adding it from staging\n exportsProcessed.add(exportName);\n tryAddEntry(blockId, exportName, result);\n }\n }\n\n if (block.staging !== undefined) {\n if (!block.staging.locked) markUnstable(`staging_not_locked:${blockId}`);\n\n for (const [exportName, result] of block.staging.results) {\n // trying to add something only if result is absent in prod\n if (exportsProcessed.has(exportName)) continue;\n tryAddEntry(blockId, exportName, result);\n }\n }\n }\n\n return { entries, isComplete, instabilityMarker };\n }\n\n public getSpecs(): ExtendedResultCollection<PObjectSpec> {\n const entries: ResultPoolEntry<PObjectSpec>[] = [];\n\n let isComplete = true;\n\n let instabilityMarker: string | undefined = undefined;\n const markUnstable = (marker: string) => {\n if (instabilityMarker === undefined) instabilityMarker = marker;\n isComplete = false;\n };\n\n for (const [blockId, block] of this.blocks) {\n const exportsProcessed = new Set<string>();\n if (block.staging !== undefined) {\n if (!block.staging.locked) markUnstable(`staging_not_locked:${blockId}`);\n\n for (const [exportName, result] of block.staging.results)\n if (result.spec !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: result.spec,\n });\n exportsProcessed.add(exportName);\n }\n }\n // Note: Don't mark unstable when staging is absent - it may be intentionally skipped\n // for v3 blocks with undefined prerunArgs. If prod exists, use it; if neither exists,\n // the block simply has no specs to contribute.\n\n if (block.prod !== undefined) {\n if (!block.prod.locked) markUnstable(`prod_not_locked:${blockId}`);\n for (const [exportName, result] of block.prod.results) {\n // staging have higher priority when we are interested in specs\n if (exportsProcessed.has(exportName)) continue;\n\n if (result.spec !== undefined) {\n entries.push({\n ref: outputRef(blockId, exportName),\n obj: result.spec,\n });\n }\n }\n }\n }\n\n return { entries, isComplete, instabilityMarker };\n }\n\n public static create(ctx: ComputableCtx, prjEntry: PlTreeEntry, rootBlockId: string): ResultPool {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const graph = stagingGraph(structure);\n const targetBlocks = graph.traverseIds(\"upstream\", rootBlockId);\n\n const blocks = new Map<string, PoolBlock>();\n\n for (const blockInfo of allBlocks(structure)) {\n if (!targetBlocks.has(blockInfo.id)) continue;\n\n const prod = loadCtx(\n prj.traverse({\n field: projectFieldName(blockInfo.id, \"prodCtx\"),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined,\n prj.traverseOrError({\n field: projectFieldName(blockInfo.id, \"prodUiCtx\"),\n stableIfNotFound: true,\n }),\n );\n const staging = loadCtx(\n prj.traverse({\n field: projectFieldName(blockInfo.id, \"stagingCtx\"),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined,\n prj.traverseOrError({\n field: projectFieldName(blockInfo.id, \"stagingUiCtx\"),\n stableIfNotFound: true,\n }),\n );\n\n blocks.set(blockInfo.id, { info: blockInfo, prod, staging });\n }\n\n return new ResultPool(ctx, blocks);\n }\n}\n\n/** Loads single BContext data */\nfunction loadCtx(\n calculated: boolean,\n ctxAccessor: ValueOrError<PlTreeNodeAccessor, Error> | undefined,\n): RawPObjectCollection | undefined {\n if (ctxAccessor === undefined) {\n if (calculated)\n // this case defines the situation when ctx holder is present, but the ctx itself is\n // not yet available, to simplify the logic we make this situation indistinguishable\n // from empty unlocked cotext\n return { locked: false, results: new Map() };\n else return undefined;\n }\n\n if (ctxAccessor.ok) return parseRawPObjectCollection(ctxAccessor.value, false, true);\n else return undefined;\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  const require_project_model = require("../model/project_model.cjs");
2
2
  const require_project_model_util = require("../model/project_model_util.cjs");
3
3
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
4
- //#region src/pool/upstream_block_ctx.ts
4
+ // src/pool/upstream_block_ctx.ts
5
5
  /**
6
6
  * Collect upstream-block ctx accessors for the given root block.
7
7
  *
@@ -58,7 +58,6 @@ function resolveCtxAccessor(prj, blockId, kind) {
58
58
  accessor: uiCtx.value
59
59
  };
60
60
  }
61
- //#endregion
62
61
  exports.collectUpstreamBlockCtx = collectUpstreamBlockCtx;
63
62
 
64
63
  //# sourceMappingURL=upstream_block_ctx.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"upstream_block_ctx.cjs","names":["ProjectStructureKey","stagingGraph","allBlocks","projectFieldName"],"sources":["../../src/pool/upstream_block_ctx.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { UpstreamBlockCtx } from \"@milaboratories/pl-model-common\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks, stagingGraph } from \"../model/project_model_util\";\n\nexport type { UpstreamBlockCtx } from \"@milaboratories/pl-model-common\";\n\n/**\n * Collect upstream-block ctx accessors for the given root block.\n *\n * For each upstream block (per the staging graph) we try to resolve its\n * `prodUiCtx` and `stagingUiCtx` resources. Only the `.ok` outcomes are\n * surfaced; failures and missing fields collapse to `undefined`.\n *\n * SDK-side providers compose enumerate/status/data operations on top of these\n * accessors using the helpers in `column_providers/accessor_traversal`.\n *\n * Note: this function is the only place that reads the project tree to build\n * the upstream-pool view — the legacy `ResultPool` class is not used.\n */\nexport function collectUpstreamBlockCtx(\n ctx: ComputableCtx,\n prjEntry: PlTreeEntry,\n rootBlockId: string,\n): UpstreamBlockCtx<PlTreeNodeAccessor>[] {\n const prj = ctx.accessor(prjEntry).node();\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const graph = stagingGraph(structure);\n const targetBlocks = graph.traverseIds(\"upstream\", rootBlockId);\n\n const out: UpstreamBlockCtx<PlTreeNodeAccessor>[] = [];\n for (const blockInfo of allBlocks(structure)) {\n if (!targetBlocks.has(blockInfo.id)) continue;\n\n const prod = resolveCtxAccessor(prj, blockInfo.id, \"prod\");\n const staging = resolveCtxAccessor(prj, blockInfo.id, \"staging\");\n\n const prodIncomplete = prod.calculated && prod.accessor === undefined;\n const stagingIncomplete = staging.calculated && staging.accessor === undefined;\n\n out.push({\n blockId: blockInfo.id,\n prodCtx: prod.accessor,\n stagingCtx: staging.accessor,\n prodIncomplete: prodIncomplete || undefined,\n stagingIncomplete: stagingIncomplete || undefined,\n });\n }\n return out;\n}\n\ninterface CtxProbe {\n /** True if the ctx-holder field exists in the project tree (block has started rendering). */\n readonly calculated: boolean;\n /** Resolved ui-ctx accessor (only when `.ok`). */\n readonly accessor: PlTreeNodeAccessor | undefined;\n}\n\nfunction resolveCtxAccessor(\n prj: PlTreeNodeAccessor,\n blockId: string,\n kind: \"prod\" | \"staging\",\n): CtxProbe {\n const ctxField = kind === \"prod\" ? \"prodCtx\" : \"stagingCtx\";\n const uiCtxField = kind === \"prod\" ? \"prodUiCtx\" : \"stagingUiCtx\";\n\n const calculated =\n prj.traverse({\n field: projectFieldName(blockId, ctxField),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined;\n\n const uiCtx = prj.traverseOrError({\n field: projectFieldName(blockId, uiCtxField),\n stableIfNotFound: true,\n });\n\n if (uiCtx === undefined || !uiCtx.ok) return { calculated, accessor: undefined };\n return { calculated, accessor: uiCtx.value };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAuBA,SAAgB,wBACd,KACA,UACA,aACwC;CACxC,MAAM,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,KAAK;CACxC,MAAM,aAAA,GAAA,2BAAA,SAAA,CAAqB,IAAI,kBAAoCA,sBAAAA,mBAAmB,CAAC;CAEvF,MAAM,eADQC,2BAAAA,aAAa,SACF,CAAC,CAAC,YAAY,YAAY,WAAW;CAE9D,MAAM,MAA8C,CAAC;CACrD,KAAK,MAAM,aAAaC,2BAAAA,UAAU,SAAS,GAAG;EAC5C,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE,GAAG;EAErC,MAAM,OAAO,mBAAmB,KAAK,UAAU,IAAI,MAAM;EACzD,MAAM,UAAU,mBAAmB,KAAK,UAAU,IAAI,SAAS;EAE/D,MAAM,iBAAiB,KAAK,cAAc,KAAK,aAAa,KAAA;EAC5D,MAAM,oBAAoB,QAAQ,cAAc,QAAQ,aAAa,KAAA;EAErE,IAAI,KAAK;GACP,SAAS,UAAU;GACnB,SAAS,KAAK;GACd,YAAY,QAAQ;GACpB,gBAAgB,kBAAkB,KAAA;GAClC,mBAAmB,qBAAqB,KAAA;EAC1C,CAAC;CACH;CACA,OAAO;AACT;AASA,SAAS,mBACP,KACA,SACA,MACU;CACV,MAAM,WAAW,SAAS,SAAS,YAAY;CAC/C,MAAM,aAAa,SAAS,SAAS,cAAc;CAEnD,MAAM,aACJ,IAAI,SAAS;EACX,OAAOC,sBAAAA,iBAAiB,SAAS,QAAQ;EACzC,aAAa;EACb,2BAA2B;EAC3B,kBAAkB;CACpB,CAAC,MAAM,KAAA;CAET,MAAM,QAAQ,IAAI,gBAAgB;EAChC,OAAOA,sBAAAA,iBAAiB,SAAS,UAAU;EAC3C,kBAAkB;CACpB,CAAC;CAED,IAAI,UAAU,KAAA,KAAa,CAAC,MAAM,IAAI,OAAO;EAAE;EAAY,UAAU,KAAA;CAAU;CAC/E,OAAO;EAAE;EAAY,UAAU,MAAM;CAAM;AAC7C"}
1
+ {"version":3,"file":"upstream_block_ctx.cjs","names":["notEmpty","ProjectStructureKey","stagingGraph","allBlocks","projectFieldName"],"sources":["../../src/pool/upstream_block_ctx.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { UpstreamBlockCtx } from \"@milaboratories/pl-model-common\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks, stagingGraph } from \"../model/project_model_util\";\n\nexport type { UpstreamBlockCtx } from \"@milaboratories/pl-model-common\";\n\n/**\n * Collect upstream-block ctx accessors for the given root block.\n *\n * For each upstream block (per the staging graph) we try to resolve its\n * `prodUiCtx` and `stagingUiCtx` resources. Only the `.ok` outcomes are\n * surfaced; failures and missing fields collapse to `undefined`.\n *\n * SDK-side providers compose enumerate/status/data operations on top of these\n * accessors using the helpers in `column_providers/accessor_traversal`.\n *\n * Note: this function is the only place that reads the project tree to build\n * the upstream-pool view — the legacy `ResultPool` class is not used.\n */\nexport function collectUpstreamBlockCtx(\n ctx: ComputableCtx,\n prjEntry: PlTreeEntry,\n rootBlockId: string,\n): UpstreamBlockCtx<PlTreeNodeAccessor>[] {\n const prj = ctx.accessor(prjEntry).node();\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const graph = stagingGraph(structure);\n const targetBlocks = graph.traverseIds(\"upstream\", rootBlockId);\n\n const out: UpstreamBlockCtx<PlTreeNodeAccessor>[] = [];\n for (const blockInfo of allBlocks(structure)) {\n if (!targetBlocks.has(blockInfo.id)) continue;\n\n const prod = resolveCtxAccessor(prj, blockInfo.id, \"prod\");\n const staging = resolveCtxAccessor(prj, blockInfo.id, \"staging\");\n\n const prodIncomplete = prod.calculated && prod.accessor === undefined;\n const stagingIncomplete = staging.calculated && staging.accessor === undefined;\n\n out.push({\n blockId: blockInfo.id,\n prodCtx: prod.accessor,\n stagingCtx: staging.accessor,\n prodIncomplete: prodIncomplete || undefined,\n stagingIncomplete: stagingIncomplete || undefined,\n });\n }\n return out;\n}\n\ninterface CtxProbe {\n /** True if the ctx-holder field exists in the project tree (block has started rendering). */\n readonly calculated: boolean;\n /** Resolved ui-ctx accessor (only when `.ok`). */\n readonly accessor: PlTreeNodeAccessor | undefined;\n}\n\nfunction resolveCtxAccessor(\n prj: PlTreeNodeAccessor,\n blockId: string,\n kind: \"prod\" | \"staging\",\n): CtxProbe {\n const ctxField = kind === \"prod\" ? \"prodCtx\" : \"stagingCtx\";\n const uiCtxField = kind === \"prod\" ? \"prodUiCtx\" : \"stagingUiCtx\";\n\n const calculated =\n prj.traverse({\n field: projectFieldName(blockId, ctxField),\n ignoreError: true,\n pureFieldErrorToUndefined: true,\n stableIfNotFound: true,\n }) !== undefined;\n\n const uiCtx = prj.traverseOrError({\n field: projectFieldName(blockId, uiCtxField),\n stableIfNotFound: true,\n });\n\n if (uiCtx === undefined || !uiCtx.ok) return { calculated, accessor: undefined };\n return { calculated, accessor: uiCtx.value };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAuBA,SAAgB,wBACd,KACA,UACA,aACwC;CACxC,MAAM,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,KAAK;CACxC,MAAM,aAAA,GAAYA,2BAAAA,SAAAA,CAAS,IAAI,kBAAoCC,sBAAAA,mBAAmB,CAAC;CAEvF,MAAM,eADQC,2BAAAA,aAAa,SACF,CAAC,CAAC,YAAY,YAAY,WAAW;CAE9D,MAAM,MAA8C,CAAC;CACrD,KAAK,MAAM,aAAaC,2BAAAA,UAAU,SAAS,GAAG;EAC5C,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE,GAAG;EAErC,MAAM,OAAO,mBAAmB,KAAK,UAAU,IAAI,MAAM;EACzD,MAAM,UAAU,mBAAmB,KAAK,UAAU,IAAI,SAAS;EAE/D,MAAM,iBAAiB,KAAK,cAAc,KAAK,aAAa,KAAA;EAC5D,MAAM,oBAAoB,QAAQ,cAAc,QAAQ,aAAa,KAAA;EAErE,IAAI,KAAK;GACP,SAAS,UAAU;GACnB,SAAS,KAAK;GACd,YAAY,QAAQ;GACpB,gBAAgB,kBAAkB,KAAA;GAClC,mBAAmB,qBAAqB,KAAA;EAC1C,CAAC;CACH;CACA,OAAO;AACT;AASA,SAAS,mBACP,KACA,SACA,MACU;CACV,MAAM,WAAW,SAAS,SAAS,YAAY;CAC/C,MAAM,aAAa,SAAS,SAAS,cAAc;CAEnD,MAAM,aACJ,IAAI,SAAS;EACX,OAAOC,sBAAAA,iBAAiB,SAAS,QAAQ;EACzC,aAAa;EACb,2BAA2B;EAC3B,kBAAkB;CACpB,CAAC,MAAM,KAAA;CAET,MAAM,QAAQ,IAAI,gBAAgB;EAChC,OAAOA,sBAAAA,iBAAiB,SAAS,UAAU;EAC3C,kBAAkB;CACpB,CAAC;CAED,IAAI,UAAU,KAAA,KAAa,CAAC,MAAM,IAAI,OAAO;EAAE;EAAY,UAAU,KAAA;CAAU;CAC/E,OAAO;EAAE;EAAY,UAAU,MAAM;CAAM;AAC7C"}
@@ -1,7 +1,7 @@
1
1
  import { ProjectStructureKey, projectFieldName } from "../model/project_model.js";
2
2
  import { allBlocks, stagingGraph } from "../model/project_model_util.js";
3
3
  import { notEmpty } from "@milaboratories/ts-helpers";
4
- //#region src/pool/upstream_block_ctx.ts
4
+ // src/pool/upstream_block_ctx.ts
5
5
  /**
6
6
  * Collect upstream-block ctx accessors for the given root block.
7
7
  *
@@ -58,7 +58,6 @@ function resolveCtxAccessor(prj, blockId, kind) {
58
58
  accessor: uiCtx.value
59
59
  };
60
60
  }
61
- //#endregion
62
61
  export { collectUpstreamBlockCtx };
63
62
 
64
63
  //# sourceMappingURL=upstream_block_ctx.js.map
@@ -1,7 +1,7 @@
1
1
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
2
2
  let _milaboratories_pf_spec_driver = require("@milaboratories/pf-spec-driver");
3
3
  let _milaboratories_columns_collection_driver = require("@milaboratories/columns-collection-driver");
4
- //#region src/service_factories.ts
4
+ // src/service_factories.ts
5
5
  /**
6
6
  * Model service factories — add a factory for each new service here.
7
7
  *
@@ -17,7 +17,6 @@ function createModelServiceRegistry(options) {
17
17
  ColumnsCollection: () => new _milaboratories_columns_collection_driver.ColumnsCollectionDriverImpl()
18
18
  });
19
19
  }
20
- //#endregion
21
20
  exports.createModelServiceRegistry = createModelServiceRegistry;
22
21
 
23
22
  //# sourceMappingURL=service_factories.cjs.map
@@ -1,7 +1,7 @@
1
1
  import { ModelServiceRegistry, Services } from "@milaboratories/pl-model-common";
2
2
  import { SpecDriver } from "@milaboratories/pf-spec-driver";
3
3
  import { ColumnsCollectionDriverImpl } from "@milaboratories/columns-collection-driver";
4
- //#region src/service_factories.ts
4
+ // src/service_factories.ts
5
5
  /**
6
6
  * Model service factories — add a factory for each new service here.
7
7
  *
@@ -17,7 +17,6 @@ function createModelServiceRegistry(options) {
17
17
  ColumnsCollection: () => new ColumnsCollectionDriverImpl()
18
18
  });
19
19
  }
20
- //#endregion
21
20
  export { createModelServiceRegistry };
22
21
 
23
22
  //# sourceMappingURL=service_factories.js.map
@@ -2,7 +2,7 @@ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
2
  let node_path = require("node:path");
3
3
  node_path = require_runtime.__toESM(node_path, 1);
4
4
  let node_worker_threads = require("node:worker_threads");
5
- //#region src/worker/WorkerManager.ts
5
+ // src/worker/WorkerManager.ts
6
6
  var WorkerManager = class {
7
7
  nextMessageId = 0;
8
8
  worker;
@@ -48,7 +48,6 @@ var WorkerManager = class {
48
48
  return this.terminate();
49
49
  }
50
50
  };
51
- //#endregion
52
51
  exports.WorkerManager = WorkerManager;
53
52
 
54
53
  //# sourceMappingURL=WorkerManager.cjs.map
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { Worker } from "node:worker_threads";
3
- //#region src/worker/WorkerManager.ts
3
+ // src/worker/WorkerManager.ts
4
4
  var WorkerManager = class {
5
5
  nextMessageId = 0;
6
6
  worker;
@@ -46,7 +46,6 @@ var WorkerManager = class {
46
46
  return this.terminate();
47
47
  }
48
48
  };
49
- //#endregion
50
49
  export { WorkerManager };
51
50
 
52
51
  //# sourceMappingURL=WorkerManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkerManager.js","names":[],"sources":["../../src/worker/WorkerManager.ts"],"sourcesContent":["import path from \"node:path\";\nimport { Worker } from \"node:worker_threads\";\nimport type { Scheme } from \"./workerApi\";\n\nexport class WorkerManager implements AsyncDisposable {\n private nextMessageId = 0;\n private worker: Worker;\n private pendingRequests = new Map<\n number,\n { resolve: (value: unknown) => void; reject: (reason?: unknown) => void }\n >();\n\n constructor() {\n const workerPath: string | undefined =\n typeof global !== \"undefined\" && \"__WORKER_PATH__\" in global\n ? (global.__WORKER_PATH__ as string)\n : path.resolve(\n import.meta.dirname,\n `worker.${typeof module !== \"undefined\" ? \"cjs\" : \"js\"}`,\n );\n\n const worker = (this.worker = new Worker(workerPath, { workerData: {} }));\n\n worker.on(\"message\", ({ id, data, error }) => {\n const { resolve, reject } = this.pendingRequests.get(id)!;\n this.pendingRequests.delete(id);\n if (error) {\n reject(new Error(error));\n } else {\n resolve(data);\n }\n });\n\n worker.on(\"error\", (msg) => {\n console.error(\"Worker error\", msg);\n this.rejectAllPendingRequests(msg);\n });\n }\n\n private rejectAllPendingRequests(msg: unknown) {\n Array.from(this.pendingRequests.values()).map(({ reject }) => {\n reject(msg);\n });\n }\n\n async process<\n Type extends keyof Scheme,\n Args extends Scheme[Type][\"args\"],\n Response extends Scheme[Type][\"response\"],\n >(type: Type, ...args: Args): Promise<Response> {\n return new Promise<Response>((resolve, reject) => {\n const id = ++this.nextMessageId;\n this.pendingRequests.set(id, { resolve: resolve as (value: unknown) => void, reject });\n this.worker.postMessage({ id, type, args });\n });\n }\n\n async terminate() {\n this.rejectAllPendingRequests(new Error(\"Worker terminated\"));\n await this.worker.terminate();\n }\n\n [Symbol.asyncDispose]() {\n return this.terminate();\n }\n}\n"],"mappings":";;;AAIA,IAAa,gBAAb,MAAsD;CACpD,gBAAwB;CACxB;CACA,kCAA0B,IAAI,IAG5B;CAEF,cAAc;EACZ,MAAM,aACJ,OAAO,WAAW,eAAe,qBAAqB,SACjD,OAAO,kBACR,KAAK,QACH,OAAO,KAAK,SACZ,UAAU,OAAO,WAAW,cAAc,QAAQ,MACpD;EAEN,MAAM,SAAU,KAAK,SAAS,IAAI,OAAO,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;EAEvE,OAAO,GAAG,YAAY,EAAE,IAAI,MAAM,YAAY;GAC5C,MAAM,EAAE,SAAS,WAAW,KAAK,gBAAgB,IAAI,EAAE;GACvD,KAAK,gBAAgB,OAAO,EAAE;GAC9B,IAAI,OACF,OAAO,IAAI,MAAM,KAAK,CAAC;QAEvB,QAAQ,IAAI;EAEhB,CAAC;EAED,OAAO,GAAG,UAAU,QAAQ;GAC1B,QAAQ,MAAM,gBAAgB,GAAG;GACjC,KAAK,yBAAyB,GAAG;EACnC,CAAC;CACH;CAEA,yBAAiC,KAAc;EAC7C,MAAM,KAAK,KAAK,gBAAgB,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa;GAC5D,OAAO,GAAG;EACZ,CAAC;CACH;CAEA,MAAM,QAIJ,MAAY,GAAG,MAA+B;EAC9C,OAAO,IAAI,SAAmB,SAAS,WAAW;GAChD,MAAM,KAAK,EAAE,KAAK;GAClB,KAAK,gBAAgB,IAAI,IAAI;IAAW;IAAqC;GAAO,CAAC;GACrF,KAAK,OAAO,YAAY;IAAE;IAAI;IAAM;GAAK,CAAC;EAC5C,CAAC;CACH;CAEA,MAAM,YAAY;EAChB,KAAK,yCAAyB,IAAI,MAAM,mBAAmB,CAAC;EAC5D,MAAM,KAAK,OAAO,UAAU;CAC9B;CAEA,CAAC,OAAO,gBAAgB;EACtB,OAAO,KAAK,UAAU;CACxB;AACF"}
1
+ {"version":3,"file":"WorkerManager.js","names":[],"sources":["../../src/worker/WorkerManager.ts"],"sourcesContent":["import path from \"node:path\";\nimport { Worker } from \"node:worker_threads\";\nimport type { Scheme } from \"./workerApi\";\n\nexport class WorkerManager implements AsyncDisposable {\n private nextMessageId = 0;\n private worker: Worker;\n private pendingRequests = new Map<\n number,\n { resolve: (value: unknown) => void; reject: (reason?: unknown) => void }\n >();\n\n constructor() {\n const workerPath: string | undefined =\n typeof global !== \"undefined\" && \"__WORKER_PATH__\" in global\n ? (global.__WORKER_PATH__ as string)\n : path.resolve(\n import.meta.dirname,\n `worker.${typeof module !== \"undefined\" ? \"cjs\" : \"js\"}`,\n );\n\n const worker = (this.worker = new Worker(workerPath, { workerData: {} }));\n\n worker.on(\"message\", ({ id, data, error }) => {\n const { resolve, reject } = this.pendingRequests.get(id)!;\n this.pendingRequests.delete(id);\n if (error) {\n reject(new Error(error));\n } else {\n resolve(data);\n }\n });\n\n worker.on(\"error\", (msg) => {\n console.error(\"Worker error\", msg);\n this.rejectAllPendingRequests(msg);\n });\n }\n\n private rejectAllPendingRequests(msg: unknown) {\n Array.from(this.pendingRequests.values()).map(({ reject }) => {\n reject(msg);\n });\n }\n\n async process<\n Type extends keyof Scheme,\n Args extends Scheme[Type][\"args\"],\n Response extends Scheme[Type][\"response\"],\n >(type: Type, ...args: Args): Promise<Response> {\n return new Promise<Response>((resolve, reject) => {\n const id = ++this.nextMessageId;\n this.pendingRequests.set(id, { resolve: resolve as (value: unknown) => void, reject });\n this.worker.postMessage({ id, type, args });\n });\n }\n\n async terminate() {\n this.rejectAllPendingRequests(new Error(\"Worker terminated\"));\n await this.worker.terminate();\n }\n\n [Symbol.asyncDispose]() {\n return this.terminate();\n }\n}\n"],"mappings":";;;AAIA,IAAa,gBAAb,MAAsD;CACpD,gBAAwB;CACxB;CACA,kCAA0B,IAAI,IAG5B;CAEF,cAAc;EACZ,MAAM,aACJ,OAAO,WAAW,eAAe,qBAAqB,SACjD,OAAO,kBACR,KAAK,QACH,YAAY,SACZ,UAAU,OAAO,WAAW,cAAc,QAAQ,MACpD;EAEN,MAAM,SAAU,KAAK,SAAS,IAAI,OAAO,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;EAEvE,OAAO,GAAG,YAAY,EAAE,IAAI,MAAM,YAAY;GAC5C,MAAM,EAAE,SAAS,WAAW,KAAK,gBAAgB,IAAI,EAAE;GACvD,KAAK,gBAAgB,OAAO,EAAE;GAC9B,IAAI,OACF,OAAO,IAAI,MAAM,KAAK,CAAC;QAEvB,QAAQ,IAAI;EAEhB,CAAC;EAED,OAAO,GAAG,UAAU,QAAQ;GAC1B,QAAQ,MAAM,gBAAgB,GAAG;GACjC,KAAK,yBAAyB,GAAG;EACnC,CAAC;CACH;CAEA,yBAAiC,KAAc;EAC7C,MAAM,KAAK,KAAK,gBAAgB,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa;GAC5D,OAAO,GAAG;EACZ,CAAC;CACH;CAEA,MAAM,QAIJ,MAAY,GAAG,MAA+B;EAC9C,OAAO,IAAI,SAAmB,SAAS,WAAW;GAChD,MAAM,KAAK,EAAE,KAAK;GAClB,KAAK,gBAAgB,IAAI,IAAI;IAAW;IAAqC;GAAO,CAAC;GACrF,KAAK,OAAO,YAAY;IAAE;IAAI;IAAM;GAAK,CAAC;EAC5C,CAAC;CACH;CAEA,MAAM,YAAY;EAChB,KAAK,yCAAyB,IAAI,MAAM,mBAAmB,CAAC;EAC5D,MAAM,KAAK,OAAO,UAAU;CAC9B;CAEA,CAAC,OAAO,gBAAgB;EACtB,OAAO,KAAK,UAAU;CACxB;AACF"}
@@ -1,6 +1,6 @@
1
1
  const require_workerApi = require("./workerApi.cjs");
2
2
  let node_worker_threads = require("node:worker_threads");
3
- //#region src/worker/worker.ts
3
+ // src/worker/worker.ts
4
4
  if (!node_worker_threads.parentPort) throw new Error("Parent port is not available");
5
5
  node_worker_threads.parentPort.on("message", ({ id, type, args }) => {
6
6
  require_workerApi.workerApi[type](...args).then((r) => {
@@ -15,6 +15,5 @@ node_worker_threads.parentPort.on("message", ({ id, type, args }) => {
15
15
  });
16
16
  });
17
17
  });
18
- //#endregion
19
18
 
20
19
  //# sourceMappingURL=worker.cjs.map
@@ -1,6 +1,6 @@
1
1
  import { workerApi } from "./workerApi.js";
2
2
  import { parentPort } from "node:worker_threads";
3
- //#region src/worker/worker.ts
3
+ // src/worker/worker.ts
4
4
  if (!parentPort) throw new Error("Parent port is not available");
5
5
  parentPort.on("message", ({ id, type, args }) => {
6
6
  workerApi[type](...args).then((r) => {
@@ -15,6 +15,5 @@ parentPort.on("message", ({ id, type, args }) => {
15
15
  });
16
16
  });
17
17
  });
18
- //#endregion
19
18
 
20
19
  //# sourceMappingURL=worker.js.map
@@ -1,5 +1,5 @@
1
1
  let _milaboratories_pl_model_backend = require("@milaboratories/pl-model-backend");
2
- //#region src/worker/workerApi.ts
2
+ // src/worker/workerApi.ts
3
3
  /**
4
4
  * Add there all heavy synchronous operations that can be moved to the worker thread.
5
5
  */
@@ -10,7 +10,6 @@ const workerApi = { parseTemplate: async (payload) => {
10
10
  if (dt > 100) console.warn(`parseTemplate in worker took ${dt}ms`);
11
11
  return result;
12
12
  } };
13
- //#endregion
14
13
  exports.workerApi = workerApi;
15
14
 
16
15
  //# sourceMappingURL=workerApi.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"workerApi.cjs","names":[],"sources":["../../src/worker/workerApi.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/require-await */\nimport { parseTemplate } from \"@milaboratories/pl-model-backend\";\n\n/**\n * Add there all heavy synchronous operations that can be moved to the worker thread.\n */\nexport const workerApi = {\n parseTemplate: async (payload: Uint8Array) => {\n const t1 = performance.now();\n const result = parseTemplate(payload);\n const t2 = performance.now();\n const dt = t2 - t1;\n if (dt > 100) console.warn(`parseTemplate in worker took ${dt}ms`);\n return result;\n },\n} satisfies Record<string, (...args: any[]) => Promise<unknown>>;\n\ntype ToScheme<T extends Record<string, (...args: any[]) => any>> = {\n [K in keyof T]: {\n args: Parameters<T[K]>;\n response: Awaited<ReturnType<T[K]>>;\n };\n};\n\nexport type Scheme = ToScheme<typeof workerApi>;\n"],"mappings":";;;;;AAMA,MAAa,YAAY,EACvB,eAAe,OAAO,YAAwB;CAC5C,MAAM,KAAK,YAAY,IAAI;CAC3B,MAAM,UAAA,GAAA,iCAAA,cAAA,CAAuB,OAAO;CAEpC,MAAM,KADK,YAAY,IACX,IAAI;CAChB,IAAI,KAAK,KAAK,QAAQ,KAAK,gCAAgC,GAAG,GAAG;CACjE,OAAO;AACT,EACF"}
1
+ {"version":3,"file":"workerApi.cjs","names":["parseTemplate"],"sources":["../../src/worker/workerApi.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/require-await */\nimport { parseTemplate } from \"@milaboratories/pl-model-backend\";\n\n/**\n * Add there all heavy synchronous operations that can be moved to the worker thread.\n */\nexport const workerApi = {\n parseTemplate: async (payload: Uint8Array) => {\n const t1 = performance.now();\n const result = parseTemplate(payload);\n const t2 = performance.now();\n const dt = t2 - t1;\n if (dt > 100) console.warn(`parseTemplate in worker took ${dt}ms`);\n return result;\n },\n} satisfies Record<string, (...args: any[]) => Promise<unknown>>;\n\ntype ToScheme<T extends Record<string, (...args: any[]) => any>> = {\n [K in keyof T]: {\n args: Parameters<T[K]>;\n response: Awaited<ReturnType<T[K]>>;\n };\n};\n\nexport type Scheme = ToScheme<typeof workerApi>;\n"],"mappings":";;;;;AAMA,MAAa,YAAY,EACvB,eAAe,OAAO,YAAwB;CAC5C,MAAM,KAAK,YAAY,IAAI;CAC3B,MAAM,UAAA,GAASA,iCAAAA,cAAAA,CAAc,OAAO;CAEpC,MAAM,KADK,YAAY,IACX,IAAI;CAChB,IAAI,KAAK,KAAK,QAAQ,KAAK,gCAAgC,GAAG,GAAG;CACjE,OAAO;AACT,EACF"}
@@ -1,5 +1,5 @@
1
1
  import { parseTemplate } from "@milaboratories/pl-model-backend";
2
- //#region src/worker/workerApi.ts
2
+ // src/worker/workerApi.ts
3
3
  /**
4
4
  * Add there all heavy synchronous operations that can be moved to the worker thread.
5
5
  */
@@ -10,7 +10,6 @@ const workerApi = { parseTemplate: async (payload) => {
10
10
  if (dt > 100) console.warn(`parseTemplate in worker took ${dt}ms`);
11
11
  return result;
12
12
  } };
13
- //#endregion
14
13
  export { workerApi };
15
14
 
16
15
  //# sourceMappingURL=workerApi.js.map