@milaboratories/pl-middle-layer 1.55.0 → 1.55.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/dist/_virtual/{_@oxc-project_runtime@0.114.0 → _@oxc-project_runtime@0.123.0}/helpers/usingCtx.cjs +2 -4
  2. package/dist/_virtual/{_@oxc-project_runtime@0.114.0 → _@oxc-project_runtime@0.123.0}/helpers/usingCtx.js +2 -3
  3. package/dist/_virtual/_rolldown/runtime.cjs +7 -13
  4. package/dist/block_registry/index.cjs +3 -3
  5. package/dist/block_registry/index.js +3 -3
  6. package/dist/block_registry/registry-v2-provider.cjs +2 -3
  7. package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
  8. package/dist/block_registry/registry-v2-provider.d.ts.map +1 -0
  9. package/dist/block_registry/registry-v2-provider.js +1 -2
  10. package/dist/block_registry/registry-v2-provider.js.map +1 -1
  11. package/dist/block_registry/registry.cjs +3 -4
  12. package/dist/block_registry/registry.cjs.map +1 -1
  13. package/dist/block_registry/registry.d.ts.map +1 -0
  14. package/dist/block_registry/registry.js +1 -2
  15. package/dist/block_registry/registry.js.map +1 -1
  16. package/dist/block_registry/watcher.cjs +3 -4
  17. package/dist/block_registry/watcher.cjs.map +1 -1
  18. package/dist/block_registry/watcher.d.ts.map +1 -0
  19. package/dist/block_registry/watcher.js +1 -2
  20. package/dist/block_registry/watcher.js.map +1 -1
  21. package/dist/block_registry/well_known_registries.cjs +1 -2
  22. package/dist/block_registry/well_known_registries.cjs.map +1 -1
  23. package/dist/block_registry/well_known_registries.d.ts.map +1 -0
  24. package/dist/block_registry/well_known_registries.js +1 -1
  25. package/dist/cfg_render/executor.cjs +4 -5
  26. package/dist/cfg_render/executor.cjs.map +1 -1
  27. package/dist/cfg_render/executor.js +1 -2
  28. package/dist/cfg_render/executor.js.map +1 -1
  29. package/dist/cfg_render/renderer.cjs +4 -5
  30. package/dist/cfg_render/renderer.cjs.map +1 -1
  31. package/dist/cfg_render/renderer.js +1 -2
  32. package/dist/cfg_render/renderer.js.map +1 -1
  33. package/dist/cfg_render/traverse.cjs +2 -3
  34. package/dist/cfg_render/traverse.cjs.map +1 -1
  35. package/dist/cfg_render/traverse.js +1 -2
  36. package/dist/cfg_render/traverse.js.map +1 -1
  37. package/dist/cfg_render/util.cjs +2 -3
  38. package/dist/cfg_render/util.cjs.map +1 -1
  39. package/dist/cfg_render/util.js +1 -2
  40. package/dist/cfg_render/util.js.map +1 -1
  41. package/dist/debug/index.cjs +1 -2
  42. package/dist/debug/index.cjs.map +1 -1
  43. package/dist/debug/index.js +1 -1
  44. package/dist/debug/index.js.map +1 -1
  45. package/dist/dev_env/index.cjs +3 -4
  46. package/dist/dev_env/index.cjs.map +1 -1
  47. package/dist/dev_env/index.js +1 -2
  48. package/dist/dev_env/index.js.map +1 -1
  49. package/dist/dev_env/util.cjs +2 -3
  50. package/dist/dev_env/util.cjs.map +1 -1
  51. package/dist/dev_env/util.js +1 -2
  52. package/dist/dev_env/util.js.map +1 -1
  53. package/dist/index.cjs +48 -44
  54. package/dist/index.d.ts +0 -3
  55. package/dist/index.js +5 -10
  56. package/dist/js_render/computable_context.cjs +5 -6
  57. package/dist/js_render/computable_context.cjs.map +1 -1
  58. package/dist/js_render/computable_context.js +2 -3
  59. package/dist/js_render/computable_context.js.map +1 -1
  60. package/dist/js_render/context.cjs +3 -4
  61. package/dist/js_render/context.cjs.map +1 -1
  62. package/dist/js_render/context.js +1 -2
  63. package/dist/js_render/context.js.map +1 -1
  64. package/dist/js_render/index.cjs +4 -5
  65. package/dist/js_render/index.cjs.map +1 -1
  66. package/dist/js_render/index.js +1 -2
  67. package/dist/js_render/index.js.map +1 -1
  68. package/dist/js_render/service_injectors.cjs +3 -4
  69. package/dist/js_render/service_injectors.cjs.map +1 -1
  70. package/dist/js_render/service_injectors.js +2 -3
  71. package/dist/js_render/service_injectors.js.map +1 -1
  72. package/dist/middle_layer/active_cfg.cjs +7 -8
  73. package/dist/middle_layer/active_cfg.cjs.map +1 -1
  74. package/dist/middle_layer/active_cfg.js +1 -2
  75. package/dist/middle_layer/active_cfg.js.map +1 -1
  76. package/dist/middle_layer/block.cjs +8 -9
  77. package/dist/middle_layer/block.cjs.map +1 -1
  78. package/dist/middle_layer/block.js +1 -2
  79. package/dist/middle_layer/block.js.map +1 -1
  80. package/dist/middle_layer/block_ctx.cjs +5 -6
  81. package/dist/middle_layer/block_ctx.cjs.map +1 -1
  82. package/dist/middle_layer/block_ctx.js +1 -2
  83. package/dist/middle_layer/block_ctx.js.map +1 -1
  84. package/dist/middle_layer/block_ctx_unsafe.cjs +1 -2
  85. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
  86. package/dist/middle_layer/block_ctx_unsafe.js +1 -1
  87. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -1
  88. package/dist/middle_layer/driver_kit.cjs +5 -6
  89. package/dist/middle_layer/driver_kit.cjs.map +1 -1
  90. package/dist/middle_layer/driver_kit.d.ts +0 -1
  91. package/dist/middle_layer/driver_kit.d.ts.map +1 -0
  92. package/dist/middle_layer/driver_kit.js +1 -2
  93. package/dist/middle_layer/driver_kit.js.map +1 -1
  94. package/dist/middle_layer/frontend_path.cjs +6 -7
  95. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  96. package/dist/middle_layer/frontend_path.js +1 -2
  97. package/dist/middle_layer/frontend_path.js.map +1 -1
  98. package/dist/middle_layer/index.cjs +5 -5
  99. package/dist/middle_layer/index.js +5 -5
  100. package/dist/middle_layer/middle_layer.cjs +15 -16
  101. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  102. package/dist/middle_layer/middle_layer.d.ts +0 -2
  103. package/dist/middle_layer/middle_layer.d.ts.map +1 -0
  104. package/dist/middle_layer/middle_layer.js +1 -2
  105. package/dist/middle_layer/middle_layer.js.map +1 -1
  106. package/dist/middle_layer/navigation_states.cjs +2 -3
  107. package/dist/middle_layer/navigation_states.cjs.map +1 -1
  108. package/dist/middle_layer/navigation_states.js +1 -2
  109. package/dist/middle_layer/navigation_states.js.map +1 -1
  110. package/dist/middle_layer/ops.cjs +5 -7
  111. package/dist/middle_layer/ops.cjs.map +1 -1
  112. package/dist/middle_layer/ops.d.ts +0 -1
  113. package/dist/middle_layer/ops.d.ts.map +1 -0
  114. package/dist/middle_layer/ops.js +1 -2
  115. package/dist/middle_layer/ops.js.map +1 -1
  116. package/dist/middle_layer/project.cjs +12 -13
  117. package/dist/middle_layer/project.cjs.map +1 -1
  118. package/dist/middle_layer/project.d.ts +0 -1
  119. package/dist/middle_layer/project.d.ts.map +1 -0
  120. package/dist/middle_layer/project.js +1 -2
  121. package/dist/middle_layer/project.js.map +1 -1
  122. package/dist/middle_layer/project_list.cjs +3 -4
  123. package/dist/middle_layer/project_list.cjs.map +1 -1
  124. package/dist/middle_layer/project_list.d.ts +0 -4
  125. package/dist/middle_layer/project_list.d.ts.map +1 -0
  126. package/dist/middle_layer/project_list.js +1 -2
  127. package/dist/middle_layer/project_list.js.map +1 -1
  128. package/dist/middle_layer/project_overview.cjs +9 -10
  129. package/dist/middle_layer/project_overview.cjs.map +1 -1
  130. package/dist/middle_layer/project_overview.js +1 -2
  131. package/dist/middle_layer/project_overview.js.map +1 -1
  132. package/dist/middle_layer/project_overview_light.cjs +4 -5
  133. package/dist/middle_layer/project_overview_light.cjs.map +1 -1
  134. package/dist/middle_layer/project_overview_light.js +1 -2
  135. package/dist/middle_layer/project_overview_light.js.map +1 -1
  136. package/dist/middle_layer/render.cjs +5 -6
  137. package/dist/middle_layer/render.cjs.map +1 -1
  138. package/dist/middle_layer/render.js +1 -2
  139. package/dist/middle_layer/render.js.map +1 -1
  140. package/dist/middle_layer/types.d.ts.map +1 -0
  141. package/dist/middle_layer/util.cjs +4 -5
  142. package/dist/middle_layer/util.cjs.map +1 -1
  143. package/dist/middle_layer/util.js +1 -2
  144. package/dist/middle_layer/util.js.map +1 -1
  145. package/dist/model/args.cjs +2 -3
  146. package/dist/model/args.cjs.map +1 -1
  147. package/dist/model/args.js +1 -2
  148. package/dist/model/args.js.map +1 -1
  149. package/dist/model/block_pack_spec.cjs +1 -2
  150. package/dist/model/block_pack_spec.cjs.map +1 -1
  151. package/dist/model/block_pack_spec.d.ts.map +1 -0
  152. package/dist/model/block_pack_spec.js +1 -1
  153. package/dist/model/frontend.d.ts.map +1 -0
  154. package/dist/model/project_helper.cjs +3 -4
  155. package/dist/model/project_helper.cjs.map +1 -1
  156. package/dist/model/project_helper.d.ts.map +1 -0
  157. package/dist/model/project_helper.js +1 -2
  158. package/dist/model/project_helper.js.map +1 -1
  159. package/dist/model/project_model.cjs +1 -6
  160. package/dist/model/project_model.cjs.map +1 -1
  161. package/dist/model/project_model.d.ts +0 -1
  162. package/dist/model/project_model.d.ts.map +1 -0
  163. package/dist/model/project_model.js +2 -4
  164. package/dist/model/project_model.js.map +1 -1
  165. package/dist/model/project_model_util.cjs +2 -3
  166. package/dist/model/project_model_util.cjs.map +1 -1
  167. package/dist/model/project_model_util.js +1 -2
  168. package/dist/model/project_model_util.js.map +1 -1
  169. package/dist/model/project_model_v1.cjs +1 -5
  170. package/dist/model/project_model_v1.cjs.map +1 -1
  171. package/dist/model/project_model_v1.js +2 -4
  172. package/dist/model/project_model_v1.js.map +1 -1
  173. package/dist/model/template_spec.d.ts.map +1 -0
  174. package/dist/mutator/block-pack/block_pack.cjs +9 -10
  175. package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
  176. package/dist/mutator/block-pack/block_pack.d.ts +0 -1
  177. package/dist/mutator/block-pack/block_pack.d.ts.map +1 -0
  178. package/dist/mutator/block-pack/block_pack.js +2 -3
  179. package/dist/mutator/block-pack/block_pack.js.map +1 -1
  180. package/dist/mutator/block-pack/frontend.cjs +3 -4
  181. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  182. package/dist/mutator/block-pack/frontend.js +1 -2
  183. package/dist/mutator/block-pack/frontend.js.map +1 -1
  184. package/dist/mutator/context_export.cjs +4 -5
  185. package/dist/mutator/context_export.cjs.map +1 -1
  186. package/dist/mutator/context_export.js +1 -2
  187. package/dist/mutator/context_export.js.map +1 -1
  188. package/dist/mutator/migration.cjs +13 -14
  189. package/dist/mutator/migration.cjs.map +1 -1
  190. package/dist/mutator/migration.js +11 -12
  191. package/dist/mutator/migration.js.map +1 -1
  192. package/dist/mutator/project.cjs +13 -14
  193. package/dist/mutator/project.cjs.map +1 -1
  194. package/dist/mutator/project.d.ts +0 -3
  195. package/dist/mutator/project.d.ts.map +1 -0
  196. package/dist/mutator/project.js +6 -7
  197. package/dist/mutator/project.js.map +1 -1
  198. package/dist/mutator/template/direct_template_loader.cjs +3 -4
  199. package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
  200. package/dist/mutator/template/direct_template_loader.js +1 -2
  201. package/dist/mutator/template/direct_template_loader.js.map +1 -1
  202. package/dist/mutator/template/direct_template_loader_v3.cjs +2 -3
  203. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
  204. package/dist/mutator/template/direct_template_loader_v3.js +1 -2
  205. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
  206. package/dist/mutator/template/render_block.cjs +4 -6
  207. package/dist/mutator/template/render_block.cjs.map +1 -1
  208. package/dist/mutator/template/render_block.js +2 -4
  209. package/dist/mutator/template/render_block.js.map +1 -1
  210. package/dist/mutator/template/render_template.cjs +2 -3
  211. package/dist/mutator/template/render_template.cjs.map +1 -1
  212. package/dist/mutator/template/render_template.d.ts.map +1 -0
  213. package/dist/mutator/template/render_template.js +1 -2
  214. package/dist/mutator/template/render_template.js.map +1 -1
  215. package/dist/mutator/template/template_cache.cjs +6 -10
  216. package/dist/mutator/template/template_cache.cjs.map +1 -1
  217. package/dist/mutator/template/template_cache.d.ts +2 -3
  218. package/dist/mutator/template/template_cache.d.ts.map +1 -0
  219. package/dist/mutator/template/template_cache.js +4 -8
  220. package/dist/mutator/template/template_cache.js.map +1 -1
  221. package/dist/mutator/template/template_loading.cjs +3 -4
  222. package/dist/mutator/template/template_loading.cjs.map +1 -1
  223. package/dist/mutator/template/template_loading.d.ts.map +1 -0
  224. package/dist/mutator/template/template_loading.js +1 -2
  225. package/dist/mutator/template/template_loading.js.map +1 -1
  226. package/dist/network_check/network_check.cjs +4 -5
  227. package/dist/network_check/network_check.cjs.map +1 -1
  228. package/dist/network_check/network_check.d.ts.map +1 -0
  229. package/dist/network_check/network_check.js +1 -2
  230. package/dist/network_check/network_check.js.map +1 -1
  231. package/dist/network_check/pings.cjs +2 -3
  232. package/dist/network_check/pings.cjs.map +1 -1
  233. package/dist/network_check/pings.js +1 -2
  234. package/dist/network_check/pings.js.map +1 -1
  235. package/dist/network_check/template.cjs +4 -5
  236. package/dist/network_check/template.cjs.map +1 -1
  237. package/dist/network_check/template.js +1 -2
  238. package/dist/network_check/template.js.map +1 -1
  239. package/dist/pool/data.cjs +2 -3
  240. package/dist/pool/data.cjs.map +1 -1
  241. package/dist/pool/data.d.ts +0 -1
  242. package/dist/pool/data.d.ts.map +1 -0
  243. package/dist/pool/data.js +1 -2
  244. package/dist/pool/data.js.map +1 -1
  245. package/dist/pool/driver.cjs +3 -4
  246. package/dist/pool/driver.cjs.map +1 -1
  247. package/dist/pool/driver.d.ts +0 -1
  248. package/dist/pool/driver.d.ts.map +1 -0
  249. package/dist/pool/driver.js +1 -2
  250. package/dist/pool/driver.js.map +1 -1
  251. package/dist/pool/index.cjs +2 -2
  252. package/dist/pool/index.d.ts +1 -2
  253. package/dist/pool/index.js +2 -2
  254. package/dist/pool/p_object_collection.cjs +3 -4
  255. package/dist/pool/p_object_collection.cjs.map +1 -1
  256. package/dist/pool/p_object_collection.d.ts.map +1 -0
  257. package/dist/pool/p_object_collection.js +1 -2
  258. package/dist/pool/p_object_collection.js.map +1 -1
  259. package/dist/pool/result_pool.cjs +7 -8
  260. package/dist/pool/result_pool.cjs.map +1 -1
  261. package/dist/pool/result_pool.d.ts +1 -3
  262. package/dist/pool/result_pool.js +1 -2
  263. package/dist/pool/result_pool.js.map +1 -1
  264. package/dist/service_factories.cjs +2 -3
  265. package/dist/service_factories.cjs.map +1 -1
  266. package/dist/service_factories.js +1 -2
  267. package/dist/service_factories.js.map +1 -1
  268. package/dist/worker/WorkerManager.cjs +2 -3
  269. package/dist/worker/WorkerManager.cjs.map +1 -1
  270. package/dist/worker/WorkerManager.js +1 -2
  271. package/dist/worker/WorkerManager.js.map +1 -1
  272. package/dist/worker/worker.cjs +3 -4
  273. package/dist/worker/worker.cjs.map +1 -1
  274. package/dist/worker/worker.js +1 -2
  275. package/dist/worker/worker.js.map +1 -1
  276. package/dist/worker/workerApi.cjs +2 -3
  277. package/dist/worker/workerApi.cjs.map +1 -1
  278. package/dist/worker/workerApi.js +1 -2
  279. package/dist/worker/workerApi.js.map +1 -1
  280. package/package.json +13 -13
@@ -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,KAAwC;AAC5D,MAAK,MAAM,aAAa,KAAK,iBAAiB,EAAE;EAC9C,MAAM,QAAQ,UAAU,MAAM,aAAa;AAC3C,MAAI,CAAC,MACH,KAAI,oBAAqB,OAAM,IAAI,MAAM,yBAAyB,YAAY;MACzE;EAGP,IAAI,gDAAgB,MAAM,QAAQ,KAAK;AACvC,MAAI,CAAC,KAAK,WAAW,OAAO,CAC1B,KAAI,oBAAqB,OAAM,IAAI,MAAM,yBAAyB,YAAY;MACzE;AAEP,SAAO,KAAK,MAAM,OAAO,OAAO;EAEhC,MAAM,gDAAgB,MAAM,QAAQ,KAAK;EACzC,IAAI,SAAS,QAAQ,IAAI,KAAK;AAC9B,MAAI,WAAW,QAAW;AACxB,YAAS,EAAE;AACX,WAAQ,IAAI,MAAM,OAAO;;AAG3B,UAAQ,MAAR;GACE,KAAK;AACH,WAAO,OAAO,KACX,SAAS;KACR,OAAO;KACP,aAAa;KACb,2BAA2B;KAC5B,CAAC,EACA,eAAe;AACnB;GACF,KAAK;AACH,WAAO,UAAU;AACjB,WAAO,aACL,KAAK,gBAAgB;KACnB,OAAO;KACP,aAAa;KACd,CAAC;AACJ;GACF,QAEE;;;CAIN,MAAM,SAAS,KAAK,iBAAiB;AACrC,KAAI,QACF;OAAK,MAAM,GAAG,WAAW,QAAS,KAAI,OAAO,SAAS,OAAW,QAAO,UAAU;;AAEpF,QAAO;EAAE;EAAQ;EAAS;;AAG5B,SAAgB,4BACd,MACA,sBAA+B,MAC/B,SAAiB,IACjB,aAC6C;AAC7C,KAAI,CAAC,KAAK,mBAAmB,CAAE,OAAM,IAAI,MAAM,wBAAwB;CACvE,MAAM,gBAAgB,0BAA0B,MAAM,qBAAqB,OAAO,OAAO;AACzF,0BAAO,cAAc,OAAO;CAC5B,MAAM,aAA0D,EAAE;AAClE,MAAK,MAAM,CAAC,YAAY,WAAW,cAAc,SAAS;AACxD,MAAI,OAAO,SAAS,OAAW,OAAM,IAAI,MAAM,mBAAmB,aAAa;AAC/E,MAAI,OAAO,YAAY,QAAQ,OAAO,SAAS,OAC7C,OAAM,IAAI,MAAM,mBAAmB,aAAa;EAClD,MAAM,OAAO,OAAO,MAAM;AAC1B,MAAI,SAAS,OAAW,OAAM,IAAI,MAAM,mBAAmB,aAAa;AACxE,MAAI,CAAC,KAAK,GAAI,OAAM,KAAK;AACzB,aAAW,cAAc;GACvB,IACE,YAAY,WAAW,IACnBA,mCAAsB,OAAO,MAAM,KAAK,MAAM,GAC9CC,kCAAqB,aAAa,WAAW;GACnD,MAAM,OAAO;GACb,MAAM,KAAK;GACZ;;AAEH,QAAO"}
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,KAAwC;AAC5D,MAAK,MAAM,aAAa,KAAK,iBAAiB,EAAE;EAC9C,MAAM,QAAQ,UAAU,MAAM,aAAa;AAC3C,MAAI,CAAC,MACH,KAAI,oBAAqB,OAAM,IAAI,MAAM,yBAAyB,YAAY;MACzE;EAGP,IAAI,QAAA,GAAA,2BAAA,UAAgB,MAAM,QAAQ,KAAK;AACvC,MAAI,CAAC,KAAK,WAAW,OAAO,CAC1B,KAAI,oBAAqB,OAAM,IAAI,MAAM,yBAAyB,YAAY;MACzE;AAEP,SAAO,KAAK,MAAM,OAAO,OAAO;EAEhC,MAAM,QAAA,GAAA,2BAAA,UAAgB,MAAM,QAAQ,KAAK;EACzC,IAAI,SAAS,QAAQ,IAAI,KAAK;AAC9B,MAAI,WAAW,KAAA,GAAW;AACxB,YAAS,EAAE;AACX,WAAQ,IAAI,MAAM,OAAO;;AAG3B,UAAQ,MAAR;GACE,KAAK;AACH,WAAO,OAAO,KACX,SAAS;KACR,OAAO;KACP,aAAa;KACb,2BAA2B;KAC5B,CAAC,EACA,eAAe;AACnB;GACF,KAAK;AACH,WAAO,UAAU;AACjB,WAAO,aACL,KAAK,gBAAgB;KACnB,OAAO;KACP,aAAa;KACd,CAAC;AACJ;GACF,QAEE;;;CAIN,MAAM,SAAS,KAAK,iBAAiB;AACrC,KAAI;OACG,MAAM,GAAG,WAAW,QAAS,KAAI,OAAO,SAAS,KAAA,EAAW,QAAO,UAAU;;AAEpF,QAAO;EAAE;EAAQ;EAAS;;AAG5B,SAAgB,4BACd,MACA,sBAA+B,MAC/B,SAAiB,IACjB,aAC6C;AAC7C,KAAI,CAAC,KAAK,mBAAmB,CAAE,OAAM,IAAI,MAAM,wBAAwB;CACvE,MAAM,gBAAgB,0BAA0B,MAAM,qBAAqB,OAAO,OAAO;AACzF,EAAA,GAAA,YAAA,SAAO,cAAc,OAAO;CAC5B,MAAM,aAA0D,EAAE;AAClE,MAAK,MAAM,CAAC,YAAY,WAAW,cAAc,SAAS;AACxD,MAAI,OAAO,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,mBAAmB,aAAa;AAC/E,MAAI,OAAO,YAAY,QAAQ,OAAO,SAAS,KAAA,EAC7C,OAAM,IAAI,MAAM,mBAAmB,aAAa;EAClD,MAAM,OAAO,OAAO,MAAM;AAC1B,MAAI,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,mBAAmB,aAAa;AACxE,MAAI,CAAC,KAAK,GAAI,OAAM,KAAK;AACzB,aAAW,cAAc;GACvB,IACE,YAAY,WAAW,IACnBA,aAAAA,sBAAsB,OAAO,MAAM,KAAK,MAAM,GAC9CC,aAAAA,qBAAqB,aAAa,WAAW;GACnD,MAAM,OAAO;GACb,MAAM,KAAK;GACZ;;AAEH,QAAO"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p_object_collection.d.ts","names":[],"sources":["../../src/pool/p_object_collection.ts"],"mappings":";;;;iBA+FgB,2BAAA,CACd,IAAA,EAAM,kBAAA,EACN,mBAAA,uBACA,MAAA,sBACA,WAAA,aACC,MAAA,SAAe,OAAA,CAAQ,kBAAA"}
@@ -1,7 +1,6 @@
1
1
  import { deriveLegacyPObjectId, deriveLocalPObjectId } from "./data.js";
2
2
  import { notEmpty } from "@milaboratories/ts-helpers";
3
3
  import assert from "node:assert";
4
-
5
4
  //#region src/pool/p_object_collection.ts
6
5
  function parseRawPObjectCollection(node, errorOnUnknownField = true, ignoreFieldErrors = false, prefix = "") {
7
6
  const entryPattern = /^(?<name>.*)\.(?<type>spec|data)$/;
@@ -66,7 +65,7 @@ function parseFinalPObjectCollection(node, errorOnUnknownField = true, prefix =
66
65
  }
67
66
  return collection;
68
67
  }
69
-
70
68
  //#endregion
71
69
  export { parseFinalPObjectCollection, parseRawPObjectCollection };
70
+
72
71
  //# 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,KAAwC;AAC5D,MAAK,MAAM,aAAa,KAAK,iBAAiB,EAAE;EAC9C,MAAM,QAAQ,UAAU,MAAM,aAAa;AAC3C,MAAI,CAAC,MACH,KAAI,oBAAqB,OAAM,IAAI,MAAM,yBAAyB,YAAY;MACzE;EAGP,IAAI,OAAO,SAAS,MAAM,QAAQ,KAAK;AACvC,MAAI,CAAC,KAAK,WAAW,OAAO,CAC1B,KAAI,oBAAqB,OAAM,IAAI,MAAM,yBAAyB,YAAY;MACzE;AAEP,SAAO,KAAK,MAAM,OAAO,OAAO;EAEhC,MAAM,OAAO,SAAS,MAAM,QAAQ,KAAK;EACzC,IAAI,SAAS,QAAQ,IAAI,KAAK;AAC9B,MAAI,WAAW,QAAW;AACxB,YAAS,EAAE;AACX,WAAQ,IAAI,MAAM,OAAO;;AAG3B,UAAQ,MAAR;GACE,KAAK;AACH,WAAO,OAAO,KACX,SAAS;KACR,OAAO;KACP,aAAa;KACb,2BAA2B;KAC5B,CAAC,EACA,eAAe;AACnB;GACF,KAAK;AACH,WAAO,UAAU;AACjB,WAAO,aACL,KAAK,gBAAgB;KACnB,OAAO;KACP,aAAa;KACd,CAAC;AACJ;GACF,QAEE;;;CAIN,MAAM,SAAS,KAAK,iBAAiB;AACrC,KAAI,QACF;OAAK,MAAM,GAAG,WAAW,QAAS,KAAI,OAAO,SAAS,OAAW,QAAO,UAAU;;AAEpF,QAAO;EAAE;EAAQ;EAAS;;AAG5B,SAAgB,4BACd,MACA,sBAA+B,MAC/B,SAAiB,IACjB,aAC6C;AAC7C,KAAI,CAAC,KAAK,mBAAmB,CAAE,OAAM,IAAI,MAAM,wBAAwB;CACvE,MAAM,gBAAgB,0BAA0B,MAAM,qBAAqB,OAAO,OAAO;AACzF,QAAO,cAAc,OAAO;CAC5B,MAAM,aAA0D,EAAE;AAClE,MAAK,MAAM,CAAC,YAAY,WAAW,cAAc,SAAS;AACxD,MAAI,OAAO,SAAS,OAAW,OAAM,IAAI,MAAM,mBAAmB,aAAa;AAC/E,MAAI,OAAO,YAAY,QAAQ,OAAO,SAAS,OAC7C,OAAM,IAAI,MAAM,mBAAmB,aAAa;EAClD,MAAM,OAAO,OAAO,MAAM;AAC1B,MAAI,SAAS,OAAW,OAAM,IAAI,MAAM,mBAAmB,aAAa;AACxE,MAAI,CAAC,KAAK,GAAI,OAAM,KAAK;AACzB,aAAW,cAAc;GACvB,IACE,YAAY,WAAW,IACnB,sBAAsB,OAAO,MAAM,KAAK,MAAM,GAC9C,qBAAqB,aAAa,WAAW;GACnD,MAAM,OAAO;GACb,MAAM,KAAK;GACZ;;AAEH,QAAO"}
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,KAAwC;AAC5D,MAAK,MAAM,aAAa,KAAK,iBAAiB,EAAE;EAC9C,MAAM,QAAQ,UAAU,MAAM,aAAa;AAC3C,MAAI,CAAC,MACH,KAAI,oBAAqB,OAAM,IAAI,MAAM,yBAAyB,YAAY;MACzE;EAGP,IAAI,OAAO,SAAS,MAAM,QAAQ,KAAK;AACvC,MAAI,CAAC,KAAK,WAAW,OAAO,CAC1B,KAAI,oBAAqB,OAAM,IAAI,MAAM,yBAAyB,YAAY;MACzE;AAEP,SAAO,KAAK,MAAM,OAAO,OAAO;EAEhC,MAAM,OAAO,SAAS,MAAM,QAAQ,KAAK;EACzC,IAAI,SAAS,QAAQ,IAAI,KAAK;AAC9B,MAAI,WAAW,KAAA,GAAW;AACxB,YAAS,EAAE;AACX,WAAQ,IAAI,MAAM,OAAO;;AAG3B,UAAQ,MAAR;GACE,KAAK;AACH,WAAO,OAAO,KACX,SAAS;KACR,OAAO;KACP,aAAa;KACb,2BAA2B;KAC5B,CAAC,EACA,eAAe;AACnB;GACF,KAAK;AACH,WAAO,UAAU;AACjB,WAAO,aACL,KAAK,gBAAgB;KACnB,OAAO;KACP,aAAa;KACd,CAAC;AACJ;GACF,QAEE;;;CAIN,MAAM,SAAS,KAAK,iBAAiB;AACrC,KAAI;OACG,MAAM,GAAG,WAAW,QAAS,KAAI,OAAO,SAAS,KAAA,EAAW,QAAO,UAAU;;AAEpF,QAAO;EAAE;EAAQ;EAAS;;AAG5B,SAAgB,4BACd,MACA,sBAA+B,MAC/B,SAAiB,IACjB,aAC6C;AAC7C,KAAI,CAAC,KAAK,mBAAmB,CAAE,OAAM,IAAI,MAAM,wBAAwB;CACvE,MAAM,gBAAgB,0BAA0B,MAAM,qBAAqB,OAAO,OAAO;AACzF,QAAO,cAAc,OAAO;CAC5B,MAAM,aAA0D,EAAE;AAClE,MAAK,MAAM,CAAC,YAAY,WAAW,cAAc,SAAS;AACxD,MAAI,OAAO,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,mBAAmB,aAAa;AAC/E,MAAI,OAAO,YAAY,QAAQ,OAAO,SAAS,KAAA,EAC7C,OAAM,IAAI,MAAM,mBAAmB,aAAa;EAClD,MAAM,OAAO,OAAO,MAAM;AAC1B,MAAI,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,mBAAmB,aAAa;AACxE,MAAI,CAAC,KAAK,GAAI,OAAM,KAAK;AACzB,aAAW,cAAc;GACvB,IACE,YAAY,WAAW,IACnB,sBAAsB,OAAO,MAAM,KAAK,MAAM,GAC9C,qBAAqB,aAAa,WAAW;GACnD,MAAM,OAAO;GACb,MAAM,KAAK;GACZ;;AAEH,QAAO"}
@@ -1,12 +1,11 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
- const require_project_model = require('../model/project_model.cjs');
3
- const require_args = require('../model/args.cjs');
4
- const require_project_model_util = require('../model/project_model_util.cjs');
5
- const require_data = require('./data.cjs');
6
- const require_p_object_collection = require('./p_object_collection.cjs');
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_project_model = require("../model/project_model.cjs");
3
+ const require_args = require("../model/args.cjs");
4
+ const require_project_model_util = require("../model/project_model_util.cjs");
5
+ const require_data = require("./data.cjs");
6
+ const require_p_object_collection = require("./p_object_collection.cjs");
7
7
  let _platforma_sdk_model = require("@platforma-sdk/model");
8
8
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
9
-
10
9
  //#region src/pool/result_pool.ts
11
10
  var ResultPool = class ResultPool {
12
11
  allSpecsAvailable;
@@ -217,7 +216,7 @@ function loadCtx(calculated, ctxAccessor) {
217
216
  if (ctxAccessor.ok) return require_p_object_collection.parseRawPObjectCollection(ctxAccessor.value, false, true);
218
217
  else return void 0;
219
218
  }
220
-
221
219
  //#endregion
222
220
  exports.ResultPool = ResultPool;
221
+
223
222
  //# 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 PSpecPredicate,\n PlRef,\n ResultCollection,\n ResultPoolEntry,\n ValueOrError,\n} from \"@platforma-sdk/model\";\nimport { executePSpecPredicate, 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 calculateOptions(predicate: PSpecPredicate): ExtendedOption[] {\n const found: ExtendedOption[] = [];\n for (const block of this.blocks.values()) {\n const exportsChecked = new Set<string>();\n const addToFound = (ctx: RawPObjectCollection) => {\n for (const [exportName, result] of ctx.results) {\n if (exportsChecked.has(exportName) || result.spec === undefined) continue;\n exportsChecked.add(exportName);\n if (executePSpecPredicate(predicate, result.spec))\n found.push({\n label: block.info.label + \" / \" + exportName,\n ref: outputRef(block.info.id, exportName),\n spec: result.spec,\n });\n }\n };\n if (block.staging !== undefined) addToFound(block.staging);\n if (block.prod !== undefined) addToFound(block.prod);\n }\n return found;\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":["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 PSpecPredicate,\n PlRef,\n ResultCollection,\n ResultPoolEntry,\n ValueOrError,\n} from \"@platforma-sdk/model\";\nimport { executePSpecPredicate, 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 calculateOptions(predicate: PSpecPredicate): ExtendedOption[] {\n const found: ExtendedOption[] = [];\n for (const block of this.blocks.values()) {\n const exportsChecked = new Set<string>();\n const addToFound = (ctx: RawPObjectCollection) => {\n for (const [exportName, result] of ctx.results) {\n if (exportsChecked.has(exportName) || result.spec === undefined) continue;\n exportsChecked.add(exportName);\n if (executePSpecPredicate(predicate, result.spec))\n found.push({\n label: block.info.label + \" / \" + exportName,\n ref: outputRef(block.info.id, exportName),\n spec: result.spec,\n });\n }\n };\n if (block.staging !== undefined) addToFound(block.staging);\n if (block.prod !== undefined) addToFound(block.prod);\n }\n return found;\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,4 +1,2 @@
1
1
  import { PObject, PlRef } from "@platforma-sdk/model";
2
- import { PlTreeNodeAccessor } from "@milaboratories/pl-tree";
3
- import "@milaboratories/computable";
4
- import "utility-types";
2
+ import { PlTreeNodeAccessor } from "@milaboratories/pl-tree";
@@ -5,7 +5,6 @@ import { deriveGlobalPObjectId } from "./data.js";
5
5
  import { parseRawPObjectCollection } from "./p_object_collection.js";
6
6
  import { executePSpecPredicate, mapValueInVOE } from "@platforma-sdk/model";
7
7
  import { notEmpty } from "@milaboratories/ts-helpers";
8
-
9
8
  //#region src/pool/result_pool.ts
10
9
  var ResultPool = class ResultPool {
11
10
  allSpecsAvailable;
@@ -216,7 +215,7 @@ function loadCtx(calculated, ctxAccessor) {
216
215
  if (ctxAccessor.ok) return parseRawPObjectCollection(ctxAccessor.value, false, true);
217
216
  else return void 0;
218
217
  }
219
-
220
218
  //#endregion
221
219
  export { ResultPool };
220
+
222
221
  //# 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 PSpecPredicate,\n PlRef,\n ResultCollection,\n ResultPoolEntry,\n ValueOrError,\n} from \"@platforma-sdk/model\";\nimport { executePSpecPredicate, 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 calculateOptions(predicate: PSpecPredicate): ExtendedOption[] {\n const found: ExtendedOption[] = [];\n for (const block of this.blocks.values()) {\n const exportsChecked = new Set<string>();\n const addToFound = (ctx: RawPObjectCollection) => {\n for (const [exportName, result] of ctx.results) {\n if (exportsChecked.has(exportName) || result.spec === undefined) continue;\n exportsChecked.add(exportName);\n if (executePSpecPredicate(predicate, result.spec))\n found.push({\n label: block.info.label + \" / \" + exportName,\n ref: outputRef(block.info.id, exportName),\n spec: result.spec,\n });\n }\n };\n if (block.staging !== undefined) addToFound(block.staging);\n if (block.prod !== undefined) addToFound(block.prod);\n }\n return found;\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":";;;;;;;;;AA4CA,IAAa,aAAb,MAAa,WAAW;CACtB,AAAiB;CACjB,AAAQ,YACN,AAAiB,KACjB,AAAiB,QACjB;EAFiB;EACA;EAEjB,IAAI,oBAAoB;AACxB,QAAO,MAAK,MAAM,SAAS,OAAO,QAAQ,CACxC,MAAK,MAAM,OAAO,CAAC,MAAM,MAAM,MAAM,QAAQ,CAC3C,KAAI,QAAQ,QAAW;AACrB,OAAI,CAAC,IAAI,QAAQ;AACf,wBAAoB;AACpB,UAAM;;AAER,QAAK,MAAM,UAAU,IAAI,QAAQ,QAAQ,CACvC,KAAI,OAAO,SAAS,QAAW;AAC7B,wBAAoB;AACpB,UAAM;;;AAKhB,OAAK,oBAAoB;;CAG3B,AAAO,aAAa,SAAiB,YAA6C;EAChF,MAAM,QAAQ,KAAK,OAAO,IAAI,QAAQ;AACtC,MAAI,UAAU,OAAW,QAAO;EAChC,IAAI,SAAS,MAAM,MAAM,SAAS,IAAI,WAAW,EAAE;AACnD,MAAI,WAAW,OAAW,QAAO;AACjC,WAAS,MAAM,SAAS,SAAS,IAAI,WAAW,EAAE;AAClD,MAAI,WAAW,OAAW,QAAO;AAGjC,MAAI,MAAM,YAAY,UAAa,CAAC,MAAM,QAAQ,OAChD,MAAK,IAAI,aAAa,sBAAsB,UAAU;WAC/C,MAAM,SAAS,UAAa,CAAC,MAAM,KAAK,OAC/C,MAAK,IAAI,aAAa,mBAAmB,UAAU;;CAKvD,AAAO,oBACL,SACA,YAC8D;EAC9D,MAAM,QAAQ,KAAK,OAAO,IAAI,QAAQ;AACtC,MAAI,UAAU,OAAW,QAAO;EAChC,MAAM,SAAS,MAAM,MAAM,SAAS,IAAI,WAAW;EACnD,MAAM,OAAO,QAAQ,QAAQ;AAC7B,MAAI,WAAW,UAAa,OAAO,SAAS,UAAa,SAAS,OAChE,QAAO,cAAc,OAAO,WAAW;GACrC,IAAI,sBAAsB,SAAS,WAAW;GAC9C,MAAM,OAAO;GACb,MAAM;GACP,EAAE;AACL,MAAI,WAAW,OAAW,MAAK,IAAI,aAAa,WAAW,QAAQ,GAAG,aAAa;AACnF,MAAI,MAAM,SAAS,UAAa,CAAC,MAAM,KAAK,OAC1C,MAAK,IAAI,aAAa,mBAAmB,UAAU;;CAKvD,AAAO,aACL,SACA,YACyC;EACzC,MAAM,MAAM,KAAK,oBAAoB,SAAS,WAAW;AACzD,MAAI,QAAQ,UAAa,CAAC,IAAI,GAAI,QAAO;AACzC,SAAO,IAAI;;CAGb,AAAO,UAAiE;EACtE,MAAM,mBAAmB,KAAK,mBAAmB;EACjD,MAAM,UAA0D,EAAE;AAClE,OAAK,MAAM,OAAO,iBAAiB,QACjC,KAAI,IAAI,IAAI,OAAO,UAAa,IAAI,IAAI,KAAK,GAC3C,SAAQ,KAAK;GACX,KAAK,IAAI;GACT,KAAK;IACH,IAAI,IAAI,IAAI;IACZ,MAAM,IAAI,IAAI;IACd,MAAM,IAAI,IAAI,KAAK;IACpB;GACF,CAAC;AACN,SAAO;GACL;GACA,YAAY,iBAAiB;GAC7B,mBAAmB,iBAAiB;GACrC;;CAGH,AAAO,oBAEL;EACA,MAAM,UAEA,EAAE;EACR,IAAI,aAAa;EAEjB,IAAI,oBAAwC;EAC5C,MAAM,gBAAgB,WAAmB;AACvC,OAAI,sBAAsB,OAAW,qBAAoB;AACzD,gBAAa;;EAGf,MAAM,eAAe,SAAiB,YAAoB,WAA4B;AACpF,OAAI,OAAO,SAAS,UAAa,OAAO,YAAY,QAAQ,OAAO,SAAS,QAAW;IACrF,MAAM,OAAO,OAAO,MAAM;AAC1B,QAAI,SAAS,OACX,SAAQ,KAAK;KACX,KAAK,UAAU,SAAS,WAAW;KACnC,KAAK;MACH,IAAI,KAAK,KAAK,sBAAsB,SAAS,WAAW,GAAG;MAC3D,MAAM,OAAO;MACb;MACD;KACF,CAAC;QACG,cAAa,WAAW,QAAQ,GAAG,aAAa;;;AAI3D,OAAK,MAAM,CAAC,SAAS,UAAU,KAAK,QAAQ;GAC1C,MAAM,mCAAmB,IAAI,KAAa;AAE1C,OAAI,MAAM,SAAS,QAAW;AAC5B,QAAI,CAAC,MAAM,KAAK,OAAQ,cAAa,mBAAmB,UAAU;AAClE,SAAK,MAAM,CAAC,YAAY,WAAW,MAAM,KAAK,SAAS;AAGrD,sBAAiB,IAAI,WAAW;AAChC,iBAAY,SAAS,YAAY,OAAO;;;AAI5C,OAAI,MAAM,YAAY,QAAW;AAC/B,QAAI,CAAC,MAAM,QAAQ,OAAQ,cAAa,sBAAsB,UAAU;AAExE,SAAK,MAAM,CAAC,YAAY,WAAW,MAAM,QAAQ,SAAS;AAExD,SAAI,iBAAiB,IAAI,WAAW,CAAE;AACtC,iBAAY,SAAS,YAAY,OAAO;;;;AAK9C,SAAO;GAAE;GAAS;GAAY;GAAmB;;CAGnD,AAAO,WAAkD;EACvD,MAAM,UAA0C,EAAE;EAElD,IAAI,aAAa;EAEjB,IAAI,oBAAwC;EAC5C,MAAM,gBAAgB,WAAmB;AACvC,OAAI,sBAAsB,OAAW,qBAAoB;AACzD,gBAAa;;AAGf,OAAK,MAAM,CAAC,SAAS,UAAU,KAAK,QAAQ;GAC1C,MAAM,mCAAmB,IAAI,KAAa;AAC1C,OAAI,MAAM,YAAY,QAAW;AAC/B,QAAI,CAAC,MAAM,QAAQ,OAAQ,cAAa,sBAAsB,UAAU;AAExE,SAAK,MAAM,CAAC,YAAY,WAAW,MAAM,QAAQ,QAC/C,KAAI,OAAO,SAAS,QAAW;AAC7B,aAAQ,KAAK;MACX,KAAK,UAAU,SAAS,WAAW;MACnC,KAAK,OAAO;MACb,CAAC;AACF,sBAAiB,IAAI,WAAW;;;AAOtC,OAAI,MAAM,SAAS,QAAW;AAC5B,QAAI,CAAC,MAAM,KAAK,OAAQ,cAAa,mBAAmB,UAAU;AAClE,SAAK,MAAM,CAAC,YAAY,WAAW,MAAM,KAAK,SAAS;AAErD,SAAI,iBAAiB,IAAI,WAAW,CAAE;AAEtC,SAAI,OAAO,SAAS,OAClB,SAAQ,KAAK;MACX,KAAK,UAAU,SAAS,WAAW;MACnC,KAAK,OAAO;MACb,CAAC;;;;AAMV,SAAO;GAAE;GAAS;GAAY;GAAmB;;CAGnD,AAAO,iBAAiB,WAA6C;EACnE,MAAM,QAA0B,EAAE;AAClC,OAAK,MAAM,SAAS,KAAK,OAAO,QAAQ,EAAE;GACxC,MAAM,iCAAiB,IAAI,KAAa;GACxC,MAAM,cAAc,QAA8B;AAChD,SAAK,MAAM,CAAC,YAAY,WAAW,IAAI,SAAS;AAC9C,SAAI,eAAe,IAAI,WAAW,IAAI,OAAO,SAAS,OAAW;AACjE,oBAAe,IAAI,WAAW;AAC9B,SAAI,sBAAsB,WAAW,OAAO,KAAK,CAC/C,OAAM,KAAK;MACT,OAAO,MAAM,KAAK,QAAQ,QAAQ;MAClC,KAAK,UAAU,MAAM,KAAK,IAAI,WAAW;MACzC,MAAM,OAAO;MACd,CAAC;;;AAGR,OAAI,MAAM,YAAY,OAAW,YAAW,MAAM,QAAQ;AAC1D,OAAI,MAAM,SAAS,OAAW,YAAW,MAAM,KAAK;;AAEtD,SAAO;;CAGT,OAAc,OAAO,KAAoB,UAAuB,aAAiC;EAC/F,MAAM,MAAM,IAAI,SAAS,SAAS,CAAC,MAAM;EAEzC,MAAM,YAAY,SAAS,IAAI,kBAAoC,oBAAoB,CAAC;EAExF,MAAM,eADQ,aAAa,UAAU,CACV,YAAY,YAAY,YAAY;EAE/D,MAAM,yBAAS,IAAI,KAAwB;AAE3C,OAAK,MAAM,aAAa,UAAU,UAAU,EAAE;AAC5C,OAAI,CAAC,aAAa,IAAI,UAAU,GAAG,CAAE;GAErC,MAAM,OAAO,QACX,IAAI,SAAS;IACX,OAAO,iBAAiB,UAAU,IAAI,UAAU;IAChD,aAAa;IACb,2BAA2B;IAC3B,kBAAkB;IACnB,CAAC,KAAK,QACP,IAAI,gBAAgB;IAClB,OAAO,iBAAiB,UAAU,IAAI,YAAY;IAClD,kBAAkB;IACnB,CAAC,CACH;GACD,MAAM,UAAU,QACd,IAAI,SAAS;IACX,OAAO,iBAAiB,UAAU,IAAI,aAAa;IACnD,aAAa;IACb,2BAA2B;IAC3B,kBAAkB;IACnB,CAAC,KAAK,QACP,IAAI,gBAAgB;IAClB,OAAO,iBAAiB,UAAU,IAAI,eAAe;IACrD,kBAAkB;IACnB,CAAC,CACH;AAED,UAAO,IAAI,UAAU,IAAI;IAAE,MAAM;IAAW;IAAM;IAAS,CAAC;;AAG9D,SAAO,IAAI,WAAW,KAAK,OAAO;;;;AAKtC,SAAS,QACP,YACA,aACkC;AAClC,KAAI,gBAAgB,OAClB,KAAI,WAIF,QAAO;EAAE,QAAQ;EAAO,yBAAS,IAAI,KAAK;EAAE;KACzC,QAAO;AAGd,KAAI,YAAY,GAAI,QAAO,0BAA0B,YAAY,OAAO,OAAO,KAAK;KAC/E,QAAO"}
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 PSpecPredicate,\n PlRef,\n ResultCollection,\n ResultPoolEntry,\n ValueOrError,\n} from \"@platforma-sdk/model\";\nimport { executePSpecPredicate, 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 calculateOptions(predicate: PSpecPredicate): ExtendedOption[] {\n const found: ExtendedOption[] = [];\n for (const block of this.blocks.values()) {\n const exportsChecked = new Set<string>();\n const addToFound = (ctx: RawPObjectCollection) => {\n for (const [exportName, result] of ctx.results) {\n if (exportsChecked.has(exportName) || result.spec === undefined) continue;\n exportsChecked.add(exportName);\n if (executePSpecPredicate(predicate, result.spec))\n found.push({\n label: block.info.label + \" / \" + exportName,\n ref: outputRef(block.info.id, exportName),\n spec: result.spec,\n });\n }\n };\n if (block.staging !== undefined) addToFound(block.staging);\n if (block.prod !== undefined) addToFound(block.prod);\n }\n return found;\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,6 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
1
+ require("./_virtual/_rolldown/runtime.cjs");
2
2
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
3
3
  let _milaboratories_pf_spec_driver = require("@milaboratories/pf-spec-driver");
4
-
5
4
  //#region src/service_factories.ts
6
5
  /**
7
6
  * Model service factories — add a factory for each new service here.
@@ -16,7 +15,7 @@ function createModelServiceRegistry(options) {
16
15
  PFrame: null
17
16
  });
18
17
  }
19
-
20
18
  //#endregion
21
19
  exports.createModelServiceRegistry = createModelServiceRegistry;
20
+
22
21
  //# sourceMappingURL=service_factories.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"service_factories.cjs","names":["ModelServiceRegistry","Services","SpecDriver"],"sources":["../src/service_factories.ts"],"sourcesContent":["/**\n * Model service factories — add a factory for each new service here.\n *\n * Each entry maps a Services key to a factory function that creates the\n * model-side driver instance, or null if the service has no model-side driver\n * (e.g. node services whose driver is provided by the desktop app).\n */\n\nimport { ModelServiceRegistry, Services } from \"@milaboratories/pl-model-common\";\nimport { SpecDriver } from \"@milaboratories/pf-spec-driver\";\nimport { type MiLogger } from \"@milaboratories/ts-helpers\";\n\nexport type ModelServiceOptions = {\n logger: MiLogger;\n};\n\nexport function createModelServiceRegistry(options: ModelServiceOptions) {\n return new ModelServiceRegistry(Services, {\n PFrameSpec: () => new SpecDriver({ logger: options.logger }),\n PFrame: null,\n });\n}\n"],"mappings":";;;;;;;;;;;;AAgBA,SAAgB,2BAA2B,SAA8B;AACvE,QAAO,IAAIA,qDAAqBC,0CAAU;EACxC,kBAAkB,IAAIC,0CAAW,EAAE,QAAQ,QAAQ,QAAQ,CAAC;EAC5D,QAAQ;EACT,CAAC"}
1
+ {"version":3,"file":"service_factories.cjs","names":["ModelServiceRegistry","Services","SpecDriver"],"sources":["../src/service_factories.ts"],"sourcesContent":["/**\n * Model service factories — add a factory for each new service here.\n *\n * Each entry maps a Services key to a factory function that creates the\n * model-side driver instance, or null if the service has no model-side driver\n * (e.g. node services whose driver is provided by the desktop app).\n */\n\nimport { ModelServiceRegistry, Services } from \"@milaboratories/pl-model-common\";\nimport { SpecDriver } from \"@milaboratories/pf-spec-driver\";\nimport { type MiLogger } from \"@milaboratories/ts-helpers\";\n\nexport type ModelServiceOptions = {\n logger: MiLogger;\n};\n\nexport function createModelServiceRegistry(options: ModelServiceOptions) {\n return new ModelServiceRegistry(Services, {\n PFrameSpec: () => new SpecDriver({ logger: options.logger }),\n PFrame: null,\n });\n}\n"],"mappings":";;;;;;;;;;;AAgBA,SAAgB,2BAA2B,SAA8B;AACvE,QAAO,IAAIA,gCAAAA,qBAAqBC,gCAAAA,UAAU;EACxC,kBAAkB,IAAIC,+BAAAA,WAAW,EAAE,QAAQ,QAAQ,QAAQ,CAAC;EAC5D,QAAQ;EACT,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { ModelServiceRegistry, Services } from "@milaboratories/pl-model-common";
2
2
  import { SpecDriver } from "@milaboratories/pf-spec-driver";
3
-
4
3
  //#region src/service_factories.ts
5
4
  /**
6
5
  * Model service factories — add a factory for each new service here.
@@ -15,7 +14,7 @@ function createModelServiceRegistry(options) {
15
14
  PFrame: null
16
15
  });
17
16
  }
18
-
19
17
  //#endregion
20
18
  export { createModelServiceRegistry };
19
+
21
20
  //# sourceMappingURL=service_factories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service_factories.js","names":[],"sources":["../src/service_factories.ts"],"sourcesContent":["/**\n * Model service factories — add a factory for each new service here.\n *\n * Each entry maps a Services key to a factory function that creates the\n * model-side driver instance, or null if the service has no model-side driver\n * (e.g. node services whose driver is provided by the desktop app).\n */\n\nimport { ModelServiceRegistry, Services } from \"@milaboratories/pl-model-common\";\nimport { SpecDriver } from \"@milaboratories/pf-spec-driver\";\nimport { type MiLogger } from \"@milaboratories/ts-helpers\";\n\nexport type ModelServiceOptions = {\n logger: MiLogger;\n};\n\nexport function createModelServiceRegistry(options: ModelServiceOptions) {\n return new ModelServiceRegistry(Services, {\n PFrameSpec: () => new SpecDriver({ logger: options.logger }),\n PFrame: null,\n });\n}\n"],"mappings":";;;;;;;;;;;AAgBA,SAAgB,2BAA2B,SAA8B;AACvE,QAAO,IAAI,qBAAqB,UAAU;EACxC,kBAAkB,IAAI,WAAW,EAAE,QAAQ,QAAQ,QAAQ,CAAC;EAC5D,QAAQ;EACT,CAAC"}
1
+ {"version":3,"file":"service_factories.js","names":[],"sources":["../src/service_factories.ts"],"sourcesContent":["/**\n * Model service factories — add a factory for each new service here.\n *\n * Each entry maps a Services key to a factory function that creates the\n * model-side driver instance, or null if the service has no model-side driver\n * (e.g. node services whose driver is provided by the desktop app).\n */\n\nimport { ModelServiceRegistry, Services } from \"@milaboratories/pl-model-common\";\nimport { SpecDriver } from \"@milaboratories/pf-spec-driver\";\nimport { type MiLogger } from \"@milaboratories/ts-helpers\";\n\nexport type ModelServiceOptions = {\n logger: MiLogger;\n};\n\nexport function createModelServiceRegistry(options: ModelServiceOptions) {\n return new ModelServiceRegistry(Services, {\n PFrameSpec: () => new SpecDriver({ logger: options.logger }),\n PFrame: null,\n });\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,2BAA2B,SAA8B;AACvE,QAAO,IAAI,qBAAqB,UAAU;EACxC,kBAAkB,IAAI,WAAW,EAAE,QAAQ,QAAQ,QAAQ,CAAC;EAC5D,QAAQ;EACT,CAAC"}
@@ -1,8 +1,7 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
1
+ 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);
4
4
  let node_worker_threads = require("node:worker_threads");
5
-
6
5
  //#region src/worker/WorkerManager.ts
7
6
  var WorkerManager = class {
8
7
  nextMessageId = 0;
@@ -48,7 +47,7 @@ var WorkerManager = class {
48
47
  return this.terminate();
49
48
  }
50
49
  };
51
-
52
50
  //#endregion
53
51
  exports.WorkerManager = WorkerManager;
52
+
54
53
  //# sourceMappingURL=WorkerManager.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkerManager.cjs","names":["Worker","path"],"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,AAAQ,gBAAgB;CACxB,AAAQ;CACR,AAAQ,kCAAkB,IAAI,KAG3B;CAEH,cAAc;EASZ,MAAM,SAAU,KAAK,SAAS,IAAIA,2BAPhC,OAAO,WAAW,eAAe,qBAAqB,SACjD,OAAO,kBACRC,kBAAK,mBAEH,UAAU,OAAO,WAAW,cAAc,QAAQ,OACnD,EAE8C,EAAE,YAAY,EAAE,EAAE,CAAC;AAExE,SAAO,GAAG,YAAY,EAAE,IAAI,MAAM,YAAY;GAC5C,MAAM,EAAE,SAAS,WAAW,KAAK,gBAAgB,IAAI,GAAG;AACxD,QAAK,gBAAgB,OAAO,GAAG;AAC/B,OAAI,MACF,QAAO,IAAI,MAAM,MAAM,CAAC;OAExB,SAAQ,KAAK;IAEf;AAEF,SAAO,GAAG,UAAU,QAAQ;AAC1B,WAAQ,MAAM,gBAAgB,IAAI;AAClC,QAAK,yBAAyB,IAAI;IAClC;;CAGJ,AAAQ,yBAAyB,KAAc;AAC7C,QAAM,KAAK,KAAK,gBAAgB,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa;AAC5D,UAAO,IAAI;IACX;;CAGJ,MAAM,QAIJ,MAAY,GAAG,MAA+B;AAC9C,SAAO,IAAI,SAAmB,SAAS,WAAW;GAChD,MAAM,KAAK,EAAE,KAAK;AAClB,QAAK,gBAAgB,IAAI,IAAI;IAAW;IAAqC;IAAQ,CAAC;AACtF,QAAK,OAAO,YAAY;IAAE;IAAI;IAAM;IAAM,CAAC;IAC3C;;CAGJ,MAAM,YAAY;AAChB,OAAK,yCAAyB,IAAI,MAAM,oBAAoB,CAAC;AAC7D,QAAM,KAAK,OAAO,WAAW;;CAG/B,CAAC,OAAO,gBAAgB;AACtB,SAAO,KAAK,WAAW"}
1
+ {"version":3,"file":"WorkerManager.cjs","names":["Worker","path"],"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,KAG3B;CAEH,cAAc;EASZ,MAAM,SAAU,KAAK,SAAS,IAAIA,oBAAAA,OAPhC,OAAO,WAAW,eAAe,qBAAqB,SACjD,OAAO,kBACRC,UAAAA,QAAK,QAAA,WAEH,UAAU,OAAO,WAAW,cAAc,QAAQ,OACnD,EAE8C,EAAE,YAAY,EAAE,EAAE,CAAC;AAExE,SAAO,GAAG,YAAY,EAAE,IAAI,MAAM,YAAY;GAC5C,MAAM,EAAE,SAAS,WAAW,KAAK,gBAAgB,IAAI,GAAG;AACxD,QAAK,gBAAgB,OAAO,GAAG;AAC/B,OAAI,MACF,QAAO,IAAI,MAAM,MAAM,CAAC;OAExB,SAAQ,KAAK;IAEf;AAEF,SAAO,GAAG,UAAU,QAAQ;AAC1B,WAAQ,MAAM,gBAAgB,IAAI;AAClC,QAAK,yBAAyB,IAAI;IAClC;;CAGJ,yBAAiC,KAAc;AAC7C,QAAM,KAAK,KAAK,gBAAgB,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa;AAC5D,UAAO,IAAI;IACX;;CAGJ,MAAM,QAIJ,MAAY,GAAG,MAA+B;AAC9C,SAAO,IAAI,SAAmB,SAAS,WAAW;GAChD,MAAM,KAAK,EAAE,KAAK;AAClB,QAAK,gBAAgB,IAAI,IAAI;IAAW;IAAqC;IAAQ,CAAC;AACtF,QAAK,OAAO,YAAY;IAAE;IAAI;IAAM;IAAM,CAAC;IAC3C;;CAGJ,MAAM,YAAY;AAChB,OAAK,yCAAyB,IAAI,MAAM,oBAAoB,CAAC;AAC7D,QAAM,KAAK,OAAO,WAAW;;CAG/B,CAAC,OAAO,gBAAgB;AACtB,SAAO,KAAK,WAAW"}
@@ -1,6 +1,5 @@
1
1
  import path from "node:path";
2
2
  import { Worker } from "node:worker_threads";
3
-
4
3
  //#region src/worker/WorkerManager.ts
5
4
  var WorkerManager = class {
6
5
  nextMessageId = 0;
@@ -46,7 +45,7 @@ var WorkerManager = class {
46
45
  return this.terminate();
47
46
  }
48
47
  };
49
-
50
48
  //#endregion
51
49
  export { WorkerManager };
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,AAAQ,gBAAgB;CACxB,AAAQ;CACR,AAAQ,kCAAkB,IAAI,KAG3B;CAEH,cAAc;EASZ,MAAM,SAAU,KAAK,SAAS,IAAI,OAPhC,OAAO,WAAW,eAAe,qBAAqB,SACjD,OAAO,kBACR,KAAK,QACH,OAAO,KAAK,SACZ,UAAU,OAAO,WAAW,cAAc,QAAQ,OACnD,EAE8C,EAAE,YAAY,EAAE,EAAE,CAAC;AAExE,SAAO,GAAG,YAAY,EAAE,IAAI,MAAM,YAAY;GAC5C,MAAM,EAAE,SAAS,WAAW,KAAK,gBAAgB,IAAI,GAAG;AACxD,QAAK,gBAAgB,OAAO,GAAG;AAC/B,OAAI,MACF,QAAO,IAAI,MAAM,MAAM,CAAC;OAExB,SAAQ,KAAK;IAEf;AAEF,SAAO,GAAG,UAAU,QAAQ;AAC1B,WAAQ,MAAM,gBAAgB,IAAI;AAClC,QAAK,yBAAyB,IAAI;IAClC;;CAGJ,AAAQ,yBAAyB,KAAc;AAC7C,QAAM,KAAK,KAAK,gBAAgB,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa;AAC5D,UAAO,IAAI;IACX;;CAGJ,MAAM,QAIJ,MAAY,GAAG,MAA+B;AAC9C,SAAO,IAAI,SAAmB,SAAS,WAAW;GAChD,MAAM,KAAK,EAAE,KAAK;AAClB,QAAK,gBAAgB,IAAI,IAAI;IAAW;IAAqC;IAAQ,CAAC;AACtF,QAAK,OAAO,YAAY;IAAE;IAAI;IAAM;IAAM,CAAC;IAC3C;;CAGJ,MAAM,YAAY;AAChB,OAAK,yCAAyB,IAAI,MAAM,oBAAoB,CAAC;AAC7D,QAAM,KAAK,OAAO,WAAW;;CAG/B,CAAC,OAAO,gBAAgB;AACtB,SAAO,KAAK,WAAW"}
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,KAG3B;CAEH,cAAc;EASZ,MAAM,SAAU,KAAK,SAAS,IAAI,OAPhC,OAAO,WAAW,eAAe,qBAAqB,SACjD,OAAO,kBACR,KAAK,QACH,OAAO,KAAK,SACZ,UAAU,OAAO,WAAW,cAAc,QAAQ,OACnD,EAE8C,EAAE,YAAY,EAAE,EAAE,CAAC;AAExE,SAAO,GAAG,YAAY,EAAE,IAAI,MAAM,YAAY;GAC5C,MAAM,EAAE,SAAS,WAAW,KAAK,gBAAgB,IAAI,GAAG;AACxD,QAAK,gBAAgB,OAAO,GAAG;AAC/B,OAAI,MACF,QAAO,IAAI,MAAM,MAAM,CAAC;OAExB,SAAQ,KAAK;IAEf;AAEF,SAAO,GAAG,UAAU,QAAQ;AAC1B,WAAQ,MAAM,gBAAgB,IAAI;AAClC,QAAK,yBAAyB,IAAI;IAClC;;CAGJ,yBAAiC,KAAc;AAC7C,QAAM,KAAK,KAAK,gBAAgB,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa;AAC5D,UAAO,IAAI;IACX;;CAGJ,MAAM,QAIJ,MAAY,GAAG,MAA+B;AAC9C,SAAO,IAAI,SAAmB,SAAS,WAAW;GAChD,MAAM,KAAK,EAAE,KAAK;AAClB,QAAK,gBAAgB,IAAI,IAAI;IAAW;IAAqC;IAAQ,CAAC;AACtF,QAAK,OAAO,YAAY;IAAE;IAAI;IAAM;IAAM,CAAC;IAC3C;;CAGJ,MAAM,YAAY;AAChB,OAAK,yCAAyB,IAAI,MAAM,oBAAoB,CAAC;AAC7D,QAAM,KAAK,OAAO,WAAW;;CAG/B,CAAC,OAAO,gBAAgB;AACtB,SAAO,KAAK,WAAW"}
@@ -1,7 +1,6 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
- const require_workerApi = require('./workerApi.cjs');
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_workerApi = require("./workerApi.cjs");
3
3
  let node_worker_threads = require("node:worker_threads");
4
-
5
4
  //#region src/worker/worker.ts
6
5
  if (!node_worker_threads.parentPort) throw new Error("Parent port is not available");
7
6
  node_worker_threads.parentPort.on("message", ({ id, type, args }) => {
@@ -17,6 +16,6 @@ node_worker_threads.parentPort.on("message", ({ id, type, args }) => {
17
16
  });
18
17
  });
19
18
  });
20
-
21
19
  //#endregion
20
+
22
21
  //# sourceMappingURL=worker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.cjs","names":["parentPort","workerApi"],"sources":["../../src/worker/worker.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\";\nimport { workerApi, type Scheme } from \"./workerApi\";\n\nif (!parentPort) {\n throw new Error(\"Parent port is not available\");\n}\n\nparentPort.on(\"message\", ({ id, type, args }: { id: number; type: unknown; args: unknown[] }) => {\n (workerApi[type as keyof Scheme] as (...args: unknown[]) => Promise<unknown>)(...args)\n .then((r) => {\n parentPort?.postMessage({ id, data: r });\n })\n .catch((e) => {\n parentPort?.postMessage({ id, error: e instanceof Error ? e.message : String(e) });\n });\n});\n"],"mappings":";;;;;AAGA,IAAI,CAACA,+BACH,OAAM,IAAI,MAAM,+BAA+B;AAGjDA,+BAAW,GAAG,YAAY,EAAE,IAAI,MAAM,WAA2D;AAC/F,CAACC,4BAAU,MAAmE,GAAG,KAAK,CACnF,MAAM,MAAM;AACX,kCAAY,YAAY;GAAE;GAAI,MAAM;GAAG,CAAC;GACxC,CACD,OAAO,MAAM;AACZ,kCAAY,YAAY;GAAE;GAAI,OAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;GAAE,CAAC;GAClF;EACJ"}
1
+ {"version":3,"file":"worker.cjs","names":["parentPort","workerApi"],"sources":["../../src/worker/worker.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\";\nimport { workerApi, type Scheme } from \"./workerApi\";\n\nif (!parentPort) {\n throw new Error(\"Parent port is not available\");\n}\n\nparentPort.on(\"message\", ({ id, type, args }: { id: number; type: unknown; args: unknown[] }) => {\n (workerApi[type as keyof Scheme] as (...args: unknown[]) => Promise<unknown>)(...args)\n .then((r) => {\n parentPort?.postMessage({ id, data: r });\n })\n .catch((e) => {\n parentPort?.postMessage({ id, error: e instanceof Error ? e.message : String(e) });\n });\n});\n"],"mappings":";;;;AAGA,IAAI,CAACA,oBAAAA,WACH,OAAM,IAAI,MAAM,+BAA+B;AAGjDA,oBAAAA,WAAW,GAAG,YAAY,EAAE,IAAI,MAAM,WAA2D;AAC9FC,mBAAAA,UAAU,MAAmE,GAAG,KAAK,CACnF,MAAM,MAAM;AACX,sBAAA,YAAY,YAAY;GAAE;GAAI,MAAM;GAAG,CAAC;GACxC,CACD,OAAO,MAAM;AACZ,sBAAA,YAAY,YAAY;GAAE;GAAI,OAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;GAAE,CAAC;GAClF;EACJ"}
@@ -1,6 +1,5 @@
1
1
  import { workerApi } from "./workerApi.js";
2
2
  import { parentPort } from "node:worker_threads";
3
-
4
3
  //#region src/worker/worker.ts
5
4
  if (!parentPort) throw new Error("Parent port is not available");
6
5
  parentPort.on("message", ({ id, type, args }) => {
@@ -16,6 +15,6 @@ parentPort.on("message", ({ id, type, args }) => {
16
15
  });
17
16
  });
18
17
  });
19
-
20
18
  //#endregion
19
+
21
20
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","names":[],"sources":["../../src/worker/worker.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\";\nimport { workerApi, type Scheme } from \"./workerApi\";\n\nif (!parentPort) {\n throw new Error(\"Parent port is not available\");\n}\n\nparentPort.on(\"message\", ({ id, type, args }: { id: number; type: unknown; args: unknown[] }) => {\n (workerApi[type as keyof Scheme] as (...args: unknown[]) => Promise<unknown>)(...args)\n .then((r) => {\n parentPort?.postMessage({ id, data: r });\n })\n .catch((e) => {\n parentPort?.postMessage({ id, error: e instanceof Error ? e.message : String(e) });\n });\n});\n"],"mappings":";;;;AAGA,IAAI,CAAC,WACH,OAAM,IAAI,MAAM,+BAA+B;AAGjD,WAAW,GAAG,YAAY,EAAE,IAAI,MAAM,WAA2D;AAC/F,CAAC,UAAU,MAAmE,GAAG,KAAK,CACnF,MAAM,MAAM;AACX,cAAY,YAAY;GAAE;GAAI,MAAM;GAAG,CAAC;GACxC,CACD,OAAO,MAAM;AACZ,cAAY,YAAY;GAAE;GAAI,OAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;GAAE,CAAC;GAClF;EACJ"}
1
+ {"version":3,"file":"worker.js","names":[],"sources":["../../src/worker/worker.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\";\nimport { workerApi, type Scheme } from \"./workerApi\";\n\nif (!parentPort) {\n throw new Error(\"Parent port is not available\");\n}\n\nparentPort.on(\"message\", ({ id, type, args }: { id: number; type: unknown; args: unknown[] }) => {\n (workerApi[type as keyof Scheme] as (...args: unknown[]) => Promise<unknown>)(...args)\n .then((r) => {\n parentPort?.postMessage({ id, data: r });\n })\n .catch((e) => {\n parentPort?.postMessage({ id, error: e instanceof Error ? e.message : String(e) });\n });\n});\n"],"mappings":";;;AAGA,IAAI,CAAC,WACH,OAAM,IAAI,MAAM,+BAA+B;AAGjD,WAAW,GAAG,YAAY,EAAE,IAAI,MAAM,WAA2D;AAC9F,WAAU,MAAmE,GAAG,KAAK,CACnF,MAAM,MAAM;AACX,cAAY,YAAY;GAAE;GAAI,MAAM;GAAG,CAAC;GACxC,CACD,OAAO,MAAM;AACZ,cAAY,YAAY;GAAE;GAAI,OAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;GAAE,CAAC;GAClF;EACJ"}
@@ -1,6 +1,5 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
2
  let _milaboratories_pl_model_backend = require("@milaboratories/pl-model-backend");
3
-
4
3
  //#region src/worker/workerApi.ts
5
4
  /**
6
5
  * Add there all heavy synchronous operations that can be moved to the worker thread.
@@ -12,7 +11,7 @@ const workerApi = { parseTemplate: async (payload) => {
12
11
  if (dt > 100) console.warn(`parseTemplate in worker took ${dt}ms`);
13
12
  return result;
14
13
  } };
15
-
16
14
  //#endregion
17
15
  exports.workerApi = workerApi;
16
+
18
17
  //# 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,KAAK;CAC5B,MAAM,6DAAuB,QAAQ;CAErC,MAAM,KADK,YAAY,KAAK,GACZ;AAChB,KAAI,KAAK,IAAK,SAAQ,KAAK,gCAAgC,GAAG,IAAI;AAClE,QAAO;GAEV"}
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,KAAK;CAC5B,MAAM,UAAA,GAAA,iCAAA,eAAuB,QAAQ;CAErC,MAAM,KADK,YAAY,KAAK,GACZ;AAChB,KAAI,KAAK,IAAK,SAAQ,KAAK,gCAAgC,GAAG,IAAI;AAClE,QAAO;GAEV"}
@@ -1,5 +1,4 @@
1
1
  import { parseTemplate } from "@milaboratories/pl-model-backend";
2
-
3
2
  //#region src/worker/workerApi.ts
4
3
  /**
5
4
  * Add there all heavy synchronous operations that can be moved to the worker thread.
@@ -11,7 +10,7 @@ const workerApi = { parseTemplate: async (payload) => {
11
10
  if (dt > 100) console.warn(`parseTemplate in worker took ${dt}ms`);
12
11
  return result;
13
12
  } };
14
-
15
13
  //#endregion
16
14
  export { workerApi };
15
+
17
16
  //# sourceMappingURL=workerApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workerApi.js","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,KAAK;CAC5B,MAAM,SAAS,cAAc,QAAQ;CAErC,MAAM,KADK,YAAY,KAAK,GACZ;AAChB,KAAI,KAAK,IAAK,SAAQ,KAAK,gCAAgC,GAAG,IAAI;AAClE,QAAO;GAEV"}
1
+ {"version":3,"file":"workerApi.js","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,KAAK;CAC5B,MAAM,SAAS,cAAc,QAAQ;CAErC,MAAM,KADK,YAAY,KAAK,GACZ;AAChB,KAAI,KAAK,IAAK,SAAQ,KAAK,gCAAgC,GAAG,IAAI;AAClE,QAAO;GAEV"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-middle-layer",
3
- "version": "1.55.0",
3
+ "version": "1.55.2",
4
4
  "description": "Pl Middle Layer",
5
5
  "keywords": [],
6
6
  "license": "UNLICENSED",
@@ -32,33 +32,33 @@
32
32
  "zod": "~3.23.8",
33
33
  "@milaboratories/computable": "2.9.2",
34
34
  "@milaboratories/helpers": "1.14.1",
35
- "@milaboratories/pl-deployments": "2.16.5",
36
35
  "@milaboratories/pl-client": "3.0.0",
37
- "@milaboratories/pf-driver": "1.3.3",
38
36
  "@milaboratories/pf-spec-driver": "1.2.4",
39
- "@milaboratories/pl-drivers": "1.12.8",
37
+ "@milaboratories/pl-deployments": "2.16.5",
38
+ "@milaboratories/pf-driver": "1.3.3",
40
39
  "@milaboratories/pl-errors": "1.2.6",
41
- "@milaboratories/pl-http": "1.2.4",
42
40
  "@milaboratories/pl-model-backend": "1.2.6",
41
+ "@milaboratories/pl-http": "1.2.4",
42
+ "@milaboratories/pl-drivers": "1.12.8",
43
43
  "@milaboratories/pl-model-common": "1.31.1",
44
44
  "@milaboratories/pl-model-middle-layer": "1.16.3",
45
45
  "@milaboratories/pl-tree": "1.9.7",
46
- "@platforma-sdk/block-tools": "2.7.5",
47
- "@milaboratories/resolve-helper": "1.1.3",
48
46
  "@platforma-sdk/model": "1.63.1",
47
+ "@platforma-sdk/block-tools": "2.7.6",
49
48
  "@milaboratories/ts-helpers": "1.8.1",
50
- "@platforma-sdk/workflow-tengo": "5.11.0"
49
+ "@platforma-sdk/workflow-tengo": "5.12.0",
50
+ "@milaboratories/resolve-helper": "1.1.3"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/node": "~24.5.2",
54
54
  "@types/semver": "^7.7.0",
55
- "@vitest/coverage-istanbul": "^4.0.18",
55
+ "@vitest/coverage-istanbul": "^4.1.3",
56
56
  "semver": "^7.7.2",
57
57
  "typescript": "~5.9.3",
58
- "vitest": "^4.0.18",
59
- "@milaboratories/ts-builder": "1.3.0",
60
- "@milaboratories/build-configs": "1.5.2",
61
- "@milaboratories/ts-configs": "1.2.2"
58
+ "vitest": "^4.1.3",
59
+ "@milaboratories/build-configs": "2.0.0",
60
+ "@milaboratories/ts-configs": "1.2.3",
61
+ "@milaboratories/ts-builder": "1.3.1"
62
62
  },
63
63
  "engines": {
64
64
  "node": ">=22.19.0"