@platforma-sdk/model 1.79.24 → 1.80.0

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 (356) hide show
  1. package/dist/block_model.d.ts +2 -0
  2. package/dist/block_model.d.ts.map +1 -1
  3. package/dist/columns/column.cjs +28 -0
  4. package/dist/columns/column.cjs.map +1 -0
  5. package/dist/columns/column.d.ts +30 -0
  6. package/dist/columns/column.d.ts.map +1 -0
  7. package/dist/columns/column.js +27 -0
  8. package/dist/columns/column.js.map +1 -0
  9. package/dist/columns/column_lazy.cjs +248 -0
  10. package/dist/columns/column_lazy.cjs.map +1 -0
  11. package/dist/columns/column_lazy.d.ts +137 -0
  12. package/dist/columns/column_lazy.d.ts.map +1 -0
  13. package/dist/columns/column_lazy.js +245 -0
  14. package/dist/columns/column_lazy.js.map +1 -0
  15. package/dist/columns/column_providers/index.cjs +62 -0
  16. package/dist/columns/column_providers/index.cjs.map +1 -0
  17. package/dist/columns/column_providers/index.d.ts +30 -0
  18. package/dist/columns/column_providers/index.d.ts.map +1 -0
  19. package/dist/columns/column_providers/index.js +53 -0
  20. package/dist/columns/column_providers/index.js.map +1 -0
  21. package/dist/columns/column_providers/providers.cjs +123 -0
  22. package/dist/columns/column_providers/providers.cjs.map +1 -0
  23. package/dist/columns/column_providers/providers.d.ts +75 -0
  24. package/dist/columns/column_providers/providers.d.ts.map +1 -0
  25. package/dist/columns/column_providers/providers.js +118 -0
  26. package/dist/columns/column_providers/providers.js.map +1 -0
  27. package/dist/columns/column_providers/types.d.ts +23 -0
  28. package/dist/columns/column_providers/types.d.ts.map +1 -0
  29. package/dist/columns/column_recipes/column_discovered_recipe.cjs +180 -0
  30. package/dist/columns/column_recipes/column_discovered_recipe.cjs.map +1 -0
  31. package/dist/columns/column_recipes/column_discovered_recipe.d.ts +120 -0
  32. package/dist/columns/column_recipes/column_discovered_recipe.d.ts.map +1 -0
  33. package/dist/columns/column_recipes/column_discovered_recipe.js +180 -0
  34. package/dist/columns/column_recipes/column_discovered_recipe.js.map +1 -0
  35. package/dist/columns/column_recipes/column_filtered_recipe.cjs +133 -0
  36. package/dist/columns/column_recipes/column_filtered_recipe.cjs.map +1 -0
  37. package/dist/columns/column_recipes/column_filtered_recipe.d.ts +75 -0
  38. package/dist/columns/column_recipes/column_filtered_recipe.d.ts.map +1 -0
  39. package/dist/columns/column_recipes/column_filtered_recipe.js +133 -0
  40. package/dist/columns/column_recipes/column_filtered_recipe.js.map +1 -0
  41. package/dist/columns/column_recipes/column_overrided_recipe.cjs +101 -0
  42. package/dist/columns/column_recipes/column_overrided_recipe.cjs.map +1 -0
  43. package/dist/columns/column_recipes/column_overrided_recipe.d.ts +73 -0
  44. package/dist/columns/column_recipes/column_overrided_recipe.d.ts.map +1 -0
  45. package/dist/columns/column_recipes/column_overrided_recipe.js +101 -0
  46. package/dist/columns/column_recipes/column_overrided_recipe.js.map +1 -0
  47. package/dist/columns/column_recipes/index.cjs +72 -0
  48. package/dist/columns/column_recipes/index.cjs.map +1 -0
  49. package/dist/columns/column_recipes/index.d.ts +52 -0
  50. package/dist/columns/column_recipes/index.d.ts.map +1 -0
  51. package/dist/columns/column_recipes/index.js +68 -0
  52. package/dist/columns/column_recipes/index.js.map +1 -0
  53. package/dist/columns/column_recipes/leaf_rebrand.cjs +22 -0
  54. package/dist/columns/column_recipes/leaf_rebrand.cjs.map +1 -0
  55. package/dist/columns/column_recipes/leaf_rebrand.js +22 -0
  56. package/dist/columns/column_recipes/leaf_rebrand.js.map +1 -0
  57. package/dist/columns/column_recipes/types.d.ts +101 -0
  58. package/dist/columns/column_recipes/types.d.ts.map +1 -0
  59. package/dist/columns/columns_collection.cjs +124 -0
  60. package/dist/columns/columns_collection.cjs.map +1 -0
  61. package/dist/columns/columns_collection.d.ts +64 -0
  62. package/dist/columns/columns_collection.d.ts.map +1 -0
  63. package/dist/columns/columns_collection.js +122 -0
  64. package/dist/columns/columns_collection.js.map +1 -0
  65. package/dist/columns/derive_axis_values_labels.cjs +76 -0
  66. package/dist/columns/derive_axis_values_labels.cjs.map +1 -0
  67. package/dist/columns/derive_axis_values_labels.d.ts +30 -0
  68. package/dist/columns/derive_axis_values_labels.d.ts.map +1 -0
  69. package/dist/columns/derive_axis_values_labels.js +76 -0
  70. package/dist/columns/derive_axis_values_labels.js.map +1 -0
  71. package/dist/columns/expand_by_partition.cjs +53 -56
  72. package/dist/columns/expand_by_partition.cjs.map +1 -1
  73. package/dist/columns/expand_by_partition.d.ts +22 -18
  74. package/dist/columns/expand_by_partition.d.ts.map +1 -1
  75. package/dist/columns/expand_by_partition.js +55 -58
  76. package/dist/columns/expand_by_partition.js.map +1 -1
  77. package/dist/columns/index.cjs +44 -18
  78. package/dist/columns/index.d.ts +15 -7
  79. package/dist/columns/index.js +12 -6
  80. package/dist/columns/utils.cjs +186 -0
  81. package/dist/columns/utils.cjs.map +1 -0
  82. package/dist/columns/utils.d.ts +96 -0
  83. package/dist/columns/utils.d.ts.map +1 -0
  84. package/dist/columns/utils.js +179 -0
  85. package/dist/columns/utils.js.map +1 -0
  86. package/dist/components/PFrameForGraphs.cjs +1 -0
  87. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  88. package/dist/components/PFrameForGraphs.d.ts +1 -1
  89. package/dist/components/PFrameForGraphs.d.ts.map +1 -1
  90. package/dist/components/PFrameForGraphs.js +1 -0
  91. package/dist/components/PFrameForGraphs.js.map +1 -1
  92. package/dist/components/PlDataTable/columnResolver.cjs +28 -0
  93. package/dist/components/PlDataTable/columnResolver.cjs.map +1 -0
  94. package/dist/components/PlDataTable/columnResolver.js +28 -0
  95. package/dist/components/PlDataTable/columnResolver.js.map +1 -0
  96. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +4 -2
  97. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
  98. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +4 -2
  99. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
  100. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +20 -25
  101. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
  102. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +20 -25
  103. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
  104. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +58 -26
  105. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
  106. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +1 -1
  107. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
  108. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +60 -28
  109. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
  110. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +224 -194
  111. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
  112. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +13 -16
  113. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
  114. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +228 -198
  115. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
  116. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +40 -98
  117. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
  118. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +17 -8
  119. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -1
  120. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +40 -98
  121. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
  122. package/dist/components/PlDataTable/createPlDataTable/index.cjs +1 -1
  123. package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
  124. package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -2
  125. package/dist/components/PlDataTable/createPlDataTable/index.js +2 -2
  126. package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
  127. package/dist/components/PlDataTable/createPlDataTable/utils.cjs +51 -169
  128. package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
  129. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +1 -1
  130. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -1
  131. package/dist/components/PlDataTable/createPlDataTable/utils.js +52 -166
  132. package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
  133. package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
  134. package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +1 -1
  135. package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
  136. package/dist/components/PlDataTable/index.cjs +1 -1
  137. package/dist/components/PlDataTable/index.d.ts +4 -4
  138. package/dist/components/PlDataTable/index.js +2 -2
  139. package/dist/components/PlDataTable/labels.cjs +0 -1
  140. package/dist/components/PlDataTable/labels.cjs.map +1 -1
  141. package/dist/components/PlDataTable/labels.js +0 -1
  142. package/dist/components/PlDataTable/labels.js.map +1 -1
  143. package/dist/components/PlDataTable/state-migration.cjs +107 -10
  144. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  145. package/dist/components/PlDataTable/state-migration.d.ts +5 -4
  146. package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
  147. package/dist/components/PlDataTable/state-migration.js +107 -10
  148. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  149. package/dist/components/PlDataTable/typesV7.d.ts +1 -36
  150. package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
  151. package/dist/components/PlDataTable/typesV8.d.ts +123 -0
  152. package/dist/components/PlDataTable/typesV8.d.ts.map +1 -0
  153. package/dist/components/PlDatasetSelector/build_dataset_options.cjs +27 -34
  154. package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
  155. package/dist/components/PlDatasetSelector/build_dataset_options.d.ts.map +1 -1
  156. package/dist/components/PlDatasetSelector/build_dataset_options.js +27 -34
  157. package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
  158. package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +28 -33
  159. package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
  160. package/dist/components/PlDatasetSelector/enrichment_discovery.js +29 -34
  161. package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
  162. package/dist/components/PlDatasetSelector/filter_discovery.cjs +27 -17
  163. package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
  164. package/dist/components/PlDatasetSelector/filter_discovery.d.ts +24 -10
  165. package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
  166. package/dist/components/PlDatasetSelector/filter_discovery.js +28 -18
  167. package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
  168. package/dist/components/PlDatasetSelector/index.d.ts +2 -2
  169. package/dist/components/index.cjs +1 -1
  170. package/dist/components/index.d.ts +5 -5
  171. package/dist/components/index.js +2 -2
  172. package/dist/filters/converters/filterToQuery.cjs +5 -6
  173. package/dist/filters/converters/filterToQuery.cjs.map +1 -1
  174. package/dist/filters/converters/filterToQuery.d.ts +12 -3
  175. package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
  176. package/dist/filters/converters/filterToQuery.js +5 -6
  177. package/dist/filters/converters/filterToQuery.js.map +1 -1
  178. package/dist/filters/converters/index.d.ts +2 -2
  179. package/dist/filters/index.d.ts +2 -2
  180. package/dist/index.cjs +64 -35
  181. package/dist/index.d.ts +23 -15
  182. package/dist/index.js +15 -9
  183. package/dist/labels/derive_distinct_labels.cjs.map +1 -1
  184. package/dist/labels/derive_distinct_labels.d.ts +1 -2
  185. package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
  186. package/dist/labels/derive_distinct_labels.js.map +1 -1
  187. package/dist/labels/derive_distinct_tooltips.cjs +1 -1
  188. package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
  189. package/dist/labels/derive_distinct_tooltips.d.ts +6 -3
  190. package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
  191. package/dist/labels/derive_distinct_tooltips.js +1 -1
  192. package/dist/labels/derive_distinct_tooltips.js.map +1 -1
  193. package/dist/package.cjs +1 -1
  194. package/dist/package.js +1 -1
  195. package/dist/pframe_utils/axes.cjs.map +1 -1
  196. package/dist/pframe_utils/axes.d.ts +2 -2
  197. package/dist/pframe_utils/axes.d.ts.map +1 -1
  198. package/dist/pframe_utils/axes.js.map +1 -1
  199. package/dist/pframe_utils/columns.cjs +6 -10
  200. package/dist/pframe_utils/columns.cjs.map +1 -1
  201. package/dist/pframe_utils/columns.d.ts +4 -4
  202. package/dist/pframe_utils/columns.d.ts.map +1 -1
  203. package/dist/pframe_utils/columns.js +7 -11
  204. package/dist/pframe_utils/columns.js.map +1 -1
  205. package/dist/pframe_utils/index.cjs.map +1 -1
  206. package/dist/pframe_utils/index.d.ts +1 -1
  207. package/dist/pframe_utils/index.d.ts.map +1 -1
  208. package/dist/pframe_utils/index.js.map +1 -1
  209. package/dist/render/accessor.cjs +15 -16
  210. package/dist/render/accessor.cjs.map +1 -1
  211. package/dist/render/accessor.d.ts +7 -10
  212. package/dist/render/accessor.d.ts.map +1 -1
  213. package/dist/render/accessor.js +15 -16
  214. package/dist/render/accessor.js.map +1 -1
  215. package/dist/render/api.cjs +34 -36
  216. package/dist/render/api.cjs.map +1 -1
  217. package/dist/render/api.d.ts +30 -20
  218. package/dist/render/api.d.ts.map +1 -1
  219. package/dist/render/api.js +35 -38
  220. package/dist/render/api.js.map +1 -1
  221. package/dist/render/index.cjs +4 -0
  222. package/dist/render/index.d.ts +4 -4
  223. package/dist/render/index.js +3 -2
  224. package/dist/render/internal.cjs +3 -2
  225. package/dist/render/internal.cjs.map +1 -1
  226. package/dist/render/internal.d.ts +17 -9
  227. package/dist/render/internal.d.ts.map +1 -1
  228. package/dist/render/internal.js +3 -2
  229. package/dist/render/internal.js.map +1 -1
  230. package/dist/render/util/axis_filtering.cjs.map +1 -1
  231. package/dist/render/util/axis_filtering.js.map +1 -1
  232. package/dist/render/util/column_collection.cjs +6 -4
  233. package/dist/render/util/column_collection.cjs.map +1 -1
  234. package/dist/render/util/column_collection.d.ts +9 -9
  235. package/dist/render/util/column_collection.d.ts.map +1 -1
  236. package/dist/render/util/column_collection.js +6 -4
  237. package/dist/render/util/column_collection.js.map +1 -1
  238. package/dist/render/util/index.d.ts +2 -2
  239. package/dist/render/util/pcolumn_data.cjs +1 -1
  240. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  241. package/dist/render/util/pcolumn_data.d.ts +3 -3
  242. package/dist/render/util/pcolumn_data.d.ts.map +1 -1
  243. package/dist/render/util/pcolumn_data.js +1 -1
  244. package/dist/render/util/pcolumn_data.js.map +1 -1
  245. package/dist/services/block_services.cjs +2 -1
  246. package/dist/services/block_services.cjs.map +1 -1
  247. package/dist/services/block_services.d.ts +1 -0
  248. package/dist/services/block_services.d.ts.map +1 -1
  249. package/dist/services/block_services.js +2 -1
  250. package/dist/services/block_services.js.map +1 -1
  251. package/dist/services/get_services.cjs +2 -2
  252. package/dist/services/get_services.cjs.map +1 -1
  253. package/dist/services/get_services.d.ts +4 -1
  254. package/dist/services/get_services.d.ts.map +1 -1
  255. package/dist/services/get_services.js +2 -2
  256. package/dist/services/get_services.js.map +1 -1
  257. package/package.json +9 -7
  258. package/src/columns/__test_helpers__/collection_driver.ts +197 -0
  259. package/src/columns/__test_helpers__/stub_registry.ts +134 -0
  260. package/src/columns/column.ts +46 -0
  261. package/src/columns/column_lazy.test.ts +201 -0
  262. package/src/columns/column_lazy.ts +311 -0
  263. package/src/columns/column_providers/index.ts +78 -0
  264. package/src/columns/column_providers/providers.ts +193 -0
  265. package/src/columns/column_providers/types.ts +24 -0
  266. package/src/columns/column_recipes/column_discovered_recipe.ts +231 -0
  267. package/src/columns/column_recipes/column_filtered_recipe.ts +184 -0
  268. package/src/columns/column_recipes/column_overrided_recipe.ts +146 -0
  269. package/src/columns/column_recipes/column_recipes.test.ts +681 -0
  270. package/src/columns/column_recipes/index.ts +127 -0
  271. package/src/columns/column_recipes/leaf_rebrand.ts +28 -0
  272. package/src/columns/column_recipes/types.ts +113 -0
  273. package/src/columns/columns_collection.test.ts +164 -0
  274. package/src/columns/columns_collection.ts +170 -0
  275. package/src/columns/derive_axis_values_labels.ts +98 -0
  276. package/src/columns/expand_by_partition.test.ts +146 -110
  277. package/src/columns/expand_by_partition.ts +72 -84
  278. package/src/columns/index.ts +7 -5
  279. package/src/columns/utils.test.ts +249 -0
  280. package/src/columns/utils.ts +226 -0
  281. package/src/components/PFrameForGraphs.ts +3 -1
  282. package/src/components/PlAnnotations/filters_ui.test.ts +46 -47
  283. package/src/components/PlDataTable/columnResolver.test.ts +122 -0
  284. package/src/components/PlDataTable/columnResolver.ts +57 -0
  285. package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +9 -9
  286. package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +31 -63
  287. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +85 -58
  288. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +316 -354
  289. package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +48 -144
  290. package/src/components/PlDataTable/createPlDataTable/index.ts +2 -2
  291. package/src/components/PlDataTable/createPlDataTable/utils.test.ts +60 -69
  292. package/src/components/PlDataTable/createPlDataTable/utils.ts +65 -173
  293. package/src/components/PlDataTable/createPlDataTableSheet.ts +1 -1
  294. package/src/components/PlDataTable/index.ts +4 -2
  295. package/src/components/PlDataTable/labels.ts +4 -33
  296. package/src/components/PlDataTable/state-migration.ts +151 -22
  297. package/src/components/PlDataTable/typesV8.ts +188 -0
  298. package/src/components/PlDatasetSelector/build_dataset_options.ts +35 -60
  299. package/src/components/PlDatasetSelector/enrichment_discovery.ts +65 -61
  300. package/src/components/PlDatasetSelector/filter_discovery.test.ts +110 -72
  301. package/src/components/PlDatasetSelector/filter_discovery.ts +51 -31
  302. package/src/filters/converters/filterToQuery.test.ts +15 -8
  303. package/src/filters/converters/filterToQuery.ts +22 -9
  304. package/src/filters/converters/filterUiToExpressionImpl.test.ts +35 -36
  305. package/src/labels/derive_distinct_labels.ts +1 -1
  306. package/src/labels/derive_distinct_tooltips.test.ts +7 -4
  307. package/src/labels/derive_distinct_tooltips.ts +3 -3
  308. package/src/pframe_utils/axes.ts +2 -2
  309. package/src/pframe_utils/columns.ts +14 -23
  310. package/src/pframe_utils/index.ts +1 -1
  311. package/src/render/accessor.ts +35 -38
  312. package/src/render/api.ts +45 -61
  313. package/src/render/index.ts +2 -1
  314. package/src/render/internal.ts +43 -10
  315. package/src/render/util/axis_filtering.ts +0 -1
  316. package/src/render/util/column_collection.ts +17 -17
  317. package/src/render/util/pcolumn_data.ts +5 -9
  318. package/src/services/block_services.ts +1 -0
  319. package/src/services/get_services.ts +5 -2
  320. package/dist/columns/column_collection_builder.cjs +0 -241
  321. package/dist/columns/column_collection_builder.cjs.map +0 -1
  322. package/dist/columns/column_collection_builder.d.ts +0 -119
  323. package/dist/columns/column_collection_builder.d.ts.map +0 -1
  324. package/dist/columns/column_collection_builder.js +0 -241
  325. package/dist/columns/column_collection_builder.js.map +0 -1
  326. package/dist/columns/column_selector.cjs +0 -49
  327. package/dist/columns/column_selector.cjs.map +0 -1
  328. package/dist/columns/column_selector.d.ts +0 -33
  329. package/dist/columns/column_selector.d.ts.map +0 -1
  330. package/dist/columns/column_selector.js +0 -47
  331. package/dist/columns/column_selector.js.map +0 -1
  332. package/dist/columns/column_snapshot.cjs +0 -19
  333. package/dist/columns/column_snapshot.cjs.map +0 -1
  334. package/dist/columns/column_snapshot.d.ts +0 -39
  335. package/dist/columns/column_snapshot.d.ts.map +0 -1
  336. package/dist/columns/column_snapshot.js +0 -18
  337. package/dist/columns/column_snapshot.js.map +0 -1
  338. package/dist/columns/column_snapshot_provider.cjs +0 -137
  339. package/dist/columns/column_snapshot_provider.cjs.map +0 -1
  340. package/dist/columns/column_snapshot_provider.d.ts +0 -74
  341. package/dist/columns/column_snapshot_provider.d.ts.map +0 -1
  342. package/dist/columns/column_snapshot_provider.js +0 -133
  343. package/dist/columns/column_snapshot_provider.js.map +0 -1
  344. package/dist/columns/ctx_column_sources.cjs +0 -80
  345. package/dist/columns/ctx_column_sources.cjs.map +0 -1
  346. package/dist/columns/ctx_column_sources.d.ts +0 -30
  347. package/dist/columns/ctx_column_sources.d.ts.map +0 -1
  348. package/dist/columns/ctx_column_sources.js +0 -79
  349. package/dist/columns/ctx_column_sources.js.map +0 -1
  350. package/src/columns/column_collection_builder.test.ts +0 -484
  351. package/src/columns/column_collection_builder.ts +0 -485
  352. package/src/columns/column_selector.test.ts +0 -90
  353. package/src/columns/column_selector.ts +0 -100
  354. package/src/columns/column_snapshot.ts +0 -58
  355. package/src/columns/column_snapshot_provider.ts +0 -194
  356. package/src/columns/ctx_column_sources.ts +0 -99
@@ -47,7 +47,7 @@ var TreeNodeAccessor = class TreeNodeAccessor {
47
47
  }));
48
48
  return this.resolveWithCommon({}, ...transformedSteps);
49
49
  }
50
- resolveAny(...steps) {
50
+ traverse(...steps) {
51
51
  return this.resolveWithCommon({}, ...steps);
52
52
  }
53
53
  resolveWithCommon(commonOptions, ...steps) {
@@ -93,6 +93,9 @@ var TreeNodeAccessor = class TreeNodeAccessor {
93
93
  if (content == void 0) throw new Error("Resource has no content.");
94
94
  return JSON.parse(content);
95
95
  }
96
+ hasData() {
97
+ return require_internal.getCfgRenderCtx().hasData(this.handle);
98
+ }
96
99
  getDataBase64() {
97
100
  return require_internal.getCfgRenderCtx().getDataBase64(this.handle);
98
101
  }
@@ -129,9 +132,16 @@ var TreeNodeAccessor = class TreeNodeAccessor {
129
132
  }
130
133
  return this.getDataAsJson();
131
134
  }
132
- /**
133
- *
134
- */
135
+ getFileContentAsBase64(range) {
136
+ return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));
137
+ }
138
+ getFileContentAsString(range) {
139
+ return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsString(this.handle, range));
140
+ }
141
+ getFileContentAsJson(range) {
142
+ return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsString(this.handle, range)).mapDefined((v) => JSON.parse(v));
143
+ }
144
+ /** @deprecated */
135
145
  getPColumns(errorOnUnknownField = false, prefix = "") {
136
146
  const result = this.parsePObjectCollection(errorOnUnknownField, prefix);
137
147
  if (result === void 0) return void 0;
@@ -140,9 +150,7 @@ var TreeNodeAccessor = class TreeNodeAccessor {
140
150
  return obj;
141
151
  });
142
152
  }
143
- /**
144
- *
145
- */
153
+ /** @deprecated */
146
154
  parsePObjectCollection(errorOnUnknownField = false, prefix = "") {
147
155
  const pObjects = require_internal.getCfgRenderCtx().parsePObjectCollection(this.handle, errorOnUnknownField, prefix, ...this.resolvePath);
148
156
  if (pObjects === void 0) return void 0;
@@ -153,15 +161,6 @@ var TreeNodeAccessor = class TreeNodeAccessor {
153
161
  }
154
162
  return result;
155
163
  }
156
- getFileContentAsBase64(range) {
157
- return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));
158
- }
159
- getFileContentAsString(range) {
160
- return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsString(this.handle, range));
161
- }
162
- getFileContentAsJson(range) {
163
- return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsString(this.handle, range)).mapDefined((v) => JSON.parse(v));
164
- }
165
164
  /**
166
165
  * @deprecated use getFileContentAsBase64
167
166
  */
@@ -1 +1 @@
1
- {"version":3,"file":"accessor.cjs","names":["getCfgRenderCtx","FutureRef"],"sources":["../../src/render/accessor.ts"],"sourcesContent":["import type {\n AnyLogHandle,\n ImportProgress,\n LocalBlobHandleAndSize,\n PColumn,\n PObject,\n RemoteBlobHandleAndSize,\n FolderURL,\n ArchiveFormat,\n ProgressLogWithInfo,\n RangeBytes,\n} from \"@milaboratories/pl-model-common\";\nimport { isPColumn, mapPObjectData } from \"@milaboratories/pl-model-common\";\nimport { getCfgRenderCtx } from \"../internal\";\nimport { FutureRef } from \"./future\";\nimport type { AccessorHandle } from \"./internal\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\n\nexport function ifDef<T, R>(value: T | undefined, cb: (value: T) => R): R | undefined {\n return value === undefined ? undefined : cb(value);\n}\n\n/**\n * Decode an error node's content into a display message. The backend serializes\n * a resource error as `{\"message\": \"...\"}` (`ResourceError`); unwrap that to the\n * human-readable message. Falls back to the raw string when the content is not\n * that envelope (e.g. plain text, or an unexpected shape).\n */\nfunction decodeErrorMessage(raw: string): string {\n try {\n const parsed = JSON.parse(raw) as { message?: unknown };\n if (typeof parsed?.message === \"string\") return parsed.message;\n } catch {\n // Not JSON — surface the raw content.\n }\n return raw;\n}\n\ntype FieldMapOps = {\n /**\n * Type of fields to iterate over.\n * (default 'Input')\n * */\n readonly fieldType?: \"Input\" | \"Output\" | \"Dynamic\";\n /**\n * If not locked, `undefined` value will be returned. Do nothing if mapping `Dynamic` fields.\n * (default true)\n * */\n readonly requireLocked?: boolean;\n /**\n * Will skip unresolved fields.\n * (default false)\n * */\n readonly skipUnresolved?: boolean;\n};\n\n/** Represent resource tree node accessor */\nexport class TreeNodeAccessor {\n constructor(\n public readonly handle: AccessorHandle,\n public readonly resolvePath: string[],\n ) {}\n\n /** Shortcut for {@link resolveInput} */\n public resolve(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** Shortcut for {@link resolveInput} */\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Output\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n public resolveAny(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n public resolveAny(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveAny(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n return this.resolveWithCommon({}, ...steps);\n }\n\n public resolveWithCommon(\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): TreeNodeAccessor | undefined {\n const resolvePath = [\n ...this.resolvePath,\n ...steps.map((step) => (typeof step === \"string\" ? step : step.field)),\n ];\n return ifDef(\n getCfgRenderCtx().resolveWithCommon(this.handle, commonOptions, ...steps),\n (accessor) => new TreeNodeAccessor(accessor, resolvePath),\n );\n }\n\n public get resourceType(): ResourceType {\n return getCfgRenderCtx().getResourceType(this.handle);\n }\n\n public getInputsLocked(): boolean {\n return getCfgRenderCtx().getInputsLocked(this.handle);\n }\n\n public getOutputsLocked(): boolean {\n return getCfgRenderCtx().getOutputsLocked(this.handle);\n }\n\n public getIsReadyOrError(): boolean {\n return getCfgRenderCtx().getIsReadyOrError(this.handle);\n }\n\n public getIsFinal(): boolean {\n return getCfgRenderCtx().getIsFinal(this.handle);\n }\n\n public getError(): TreeNodeAccessor | undefined {\n const resolvePath = [...this.resolvePath, \"error\"];\n return ifDef(\n getCfgRenderCtx().getError(this.handle),\n (accsessor) => new TreeNodeAccessor(accsessor, resolvePath),\n );\n }\n\n public listInputFields(): string[] {\n return getCfgRenderCtx().listInputFields(this.handle);\n }\n\n public listOutputFields(): string[] {\n return getCfgRenderCtx().listOutputFields(this.handle);\n }\n\n public listDynamicFields(): string[] {\n return getCfgRenderCtx().listDynamicFields(this.handle);\n }\n\n public getKeyValueBase64(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueBase64(this.handle, key);\n }\n\n public getKeyValueAsString(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueAsString(this.handle, key);\n }\n\n public getKeyValueAsJson<T>(key: string): T {\n const content = this.getKeyValueAsString(key);\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n public getDataBase64(): string | undefined {\n return getCfgRenderCtx().getDataBase64(this.handle);\n }\n\n public getDataAsString(): string | undefined {\n return getCfgRenderCtx().getDataAsString(this.handle);\n }\n\n public getDataAsJson<T>(): T {\n const content = this.getDataAsString();\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n /**\n * Like {@link getDataAsJson}, but does not throw while the resource is still\n * computing. Three states:\n *\n * - **Not ready** → returns `undefined` (loading).\n * - **Errored** → throws the resource's error.\n * - **Ready** → returns the parsed content.\n *\n * Prefer this over {@link getDataAsJson} in reactive output lambdas: a field\n * that resolves before its resource is ready (routine on remote backends)\n * makes {@link getDataAsJson} throw \"Resource has no content.\" mid-calculation,\n * flashing a transient \"Some outputs have errors\" banner that clears when the\n * resource finishes (MILAB-6318).\n */\n public getDataAsJsonOrUndefined<T>(): T | undefined {\n // Not ready → undefined (loading). getIsReadyOrError() registers the\n // readiness dependency, so the lambda re-runs once the resource finishes.\n if (!this.getIsReadyOrError()) return undefined;\n // Errored → throw the actual error, decoded from the error node and tagged\n // with the resolve path for debugging context. Beats getDataAsJson's\n // generic \"Resource has no content.\"\n const error = this.getError();\n if (error !== undefined) {\n const raw = error.getDataAsString();\n const message = raw === undefined ? \"Resource computation failed.\" : decodeErrorMessage(raw);\n const path = this.resolvePath.join(\".\");\n throw new Error(path ? `${message} (at ${path})` : message);\n }\n // Ready → parse the content.\n return this.getDataAsJson<T>();\n }\n\n /**\n *\n */\n public getPColumns(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): PColumn<TreeNodeAccessor>[] | undefined {\n const result = this.parsePObjectCollection(errorOnUnknownField, prefix);\n if (result === undefined) return undefined;\n\n const pf = Object.entries(result).map(([, obj]) => {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n });\n\n return pf;\n }\n\n /**\n *\n */\n public parsePObjectCollection(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): Record<string, PObject<TreeNodeAccessor>> | undefined {\n const pObjects = getCfgRenderCtx().parsePObjectCollection(\n this.handle,\n errorOnUnknownField,\n prefix,\n ...this.resolvePath,\n );\n if (pObjects === undefined) return undefined;\n const result: Record<string, PObject<TreeNodeAccessor>> = {};\n for (const [key, value] of Object.entries(pObjects)) {\n const resolvePath = [...this.resolvePath, key];\n result[key] = mapPObjectData(value, (c) => new TreeNodeAccessor(c, resolvePath));\n }\n return result;\n }\n\n public getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));\n }\n\n public getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));\n }\n\n public getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined> {\n return new FutureRef<string | undefined>(\n getCfgRenderCtx().getBlobContentAsString(this.handle, range),\n ).mapDefined((v) => JSON.parse(v) as T);\n }\n\n /**\n * @deprecated use getFileContentAsBase64\n */\n public getBlobContentAsBase64(): FutureRef<string | undefined> {\n return this.getFileContentAsBase64();\n }\n\n /**\n * @deprecated use getFileContentAsString\n */\n public getBlobContentAsString(): FutureRef<string | undefined> {\n return this.getFileContentAsString();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getFileHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getDownloadedBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getFileHandle\n */\n public getDownloadedBlobHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return this.getFileHandle();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getRemoteFileHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getOnDemandBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getRemoteFileHandle\n */\n public getOnDemandBlobHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return this.getRemoteFileHandle();\n }\n\n /**\n * @returns the url to the extracted folder\n */\n public extractArchiveAndGetURL(format: ArchiveFormat): FutureRef<FolderURL | undefined> {\n return new FutureRef(getCfgRenderCtx().extractArchiveAndGetURL(this.handle, format));\n }\n\n public getImportProgress(): FutureRef<ImportProgress> {\n return new FutureRef(getCfgRenderCtx().getImportProgress(this.handle));\n }\n\n public getLastLogs(nLines: number): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getLastLogs(this.handle, nLines));\n }\n\n public getProgressLog(patternToSearch: string): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLog(this.handle, patternToSearch));\n }\n\n public getProgressLogWithInfo(\n patternToSearch: string,\n ): FutureRef<ProgressLogWithInfo | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLogWithInfo(this.handle, patternToSearch));\n }\n\n public getLogHandle(): FutureRef<AnyLogHandle | undefined> {\n return new FutureRef(getCfgRenderCtx().getLogHandle(this.handle));\n }\n\n public allFieldsResolved(fieldType: \"Input\" | \"Output\" = \"Input\"): boolean {\n switch (fieldType) {\n case \"Input\":\n return (\n this.getInputsLocked() &&\n this.listInputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Input\" }) !== undefined,\n )\n );\n case \"Output\":\n return (\n this.getOutputsLocked() &&\n this.listOutputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Output\" }) !== undefined,\n )\n );\n }\n }\n\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops: FieldMapOps & { skipUnresolved: true },\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor | undefined) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined {\n const { fieldType, requireLocked, skipUnresolved } = {\n fieldType: \"Input\" as const,\n requireLocked: true,\n skipUnresolved: false,\n ..._ops,\n };\n const mapping = _mapping as (name: string, value: TreeNodeAccessor | undefined) => T;\n if (requireLocked) {\n if (fieldType === \"Input\" && !this.getInputsLocked()) return undefined;\n if (fieldType === \"Output\" && !this.getOutputsLocked()) return undefined;\n }\n const fieldList =\n fieldType === \"Input\"\n ? this.listInputFields()\n : fieldType === \"Output\"\n ? this.listOutputFields()\n : this.listDynamicFields();\n let fieldEntries = fieldList.map(\n (field) => [field, this.resolve({ field, assertFieldType: fieldType })] as const,\n );\n if (skipUnresolved) fieldEntries = fieldEntries.filter((e) => e[1] !== undefined);\n return fieldEntries.map(([name, value]) => mapping(name, value));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"accessor.cjs","names":["getCfgRenderCtx","FutureRef"],"sources":["../../src/render/accessor.ts"],"sourcesContent":["import {\n type AnyLogHandle,\n type ImportProgress,\n type LocalBlobHandleAndSize,\n type RemoteBlobHandleAndSize,\n type FolderURL,\n type ArchiveFormat,\n type ProgressLogWithInfo,\n type RangeBytes,\n isPColumn,\n mapPObjectData,\n PColumn,\n PObject,\n} from \"@milaboratories/pl-model-common\";\nimport { getCfgRenderCtx } from \"../internal\";\nimport { FutureRef } from \"./future\";\nimport type { AccessorHandle } from \"./internal\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\n\nexport function ifDef<T, R>(value: T | undefined, cb: (value: T) => R): R | undefined {\n return value === undefined ? undefined : cb(value);\n}\n\n/**\n * Decode an error node's content into a display message. The backend serializes\n * a resource error as `{\"message\": \"...\"}` (`ResourceError`); unwrap that to the\n * human-readable message. Falls back to the raw string when the content is not\n * that envelope (e.g. plain text, or an unexpected shape).\n */\nfunction decodeErrorMessage(raw: string): string {\n try {\n const parsed = JSON.parse(raw) as { message?: unknown };\n if (typeof parsed?.message === \"string\") return parsed.message;\n } catch {\n // Not JSON — surface the raw content.\n }\n return raw;\n}\n\ntype FieldMapOps = {\n /**\n * Type of fields to iterate over.\n * (default 'Input')\n * */\n readonly fieldType?: \"Input\" | \"Output\" | \"Dynamic\";\n /**\n * If not locked, `undefined` value will be returned. Do nothing if mapping `Dynamic` fields.\n * (default true)\n * */\n readonly requireLocked?: boolean;\n /**\n * Will skip unresolved fields.\n * (default false)\n * */\n readonly skipUnresolved?: boolean;\n};\n\n/** Represent resource tree node accessor */\nexport class TreeNodeAccessor {\n constructor(\n public readonly handle: AccessorHandle,\n public readonly resolvePath: string[],\n ) {}\n\n /** Shortcut for {@link resolveInput} */\n public resolve(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** Shortcut for {@link resolveInput} */\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Output\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n public traverse(\n ...steps: [Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & { errorIfFieldNotAssigned: true }]\n ): TreeNodeAccessor;\n public traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n return this.resolveWithCommon({}, ...steps);\n }\n\n public resolveWithCommon(\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): TreeNodeAccessor | undefined {\n const resolvePath = [\n ...this.resolvePath,\n ...steps.map((step) => (typeof step === \"string\" ? step : step.field)),\n ];\n return ifDef(\n getCfgRenderCtx().resolveWithCommon(this.handle, commonOptions, ...steps),\n (accessor) => new TreeNodeAccessor(accessor, resolvePath),\n );\n }\n\n public get resourceType(): ResourceType {\n return getCfgRenderCtx().getResourceType(this.handle);\n }\n\n public getInputsLocked(): boolean {\n return getCfgRenderCtx().getInputsLocked(this.handle);\n }\n\n public getOutputsLocked(): boolean {\n return getCfgRenderCtx().getOutputsLocked(this.handle);\n }\n\n public getIsReadyOrError(): boolean {\n return getCfgRenderCtx().getIsReadyOrError(this.handle);\n }\n\n public getIsFinal(): boolean {\n return getCfgRenderCtx().getIsFinal(this.handle);\n }\n\n public getError(): TreeNodeAccessor | undefined {\n const resolvePath = [...this.resolvePath, \"error\"];\n return ifDef(\n getCfgRenderCtx().getError(this.handle),\n (accsessor) => new TreeNodeAccessor(accsessor, resolvePath),\n );\n }\n\n public listInputFields(): string[] {\n return getCfgRenderCtx().listInputFields(this.handle);\n }\n\n public listOutputFields(): string[] {\n return getCfgRenderCtx().listOutputFields(this.handle);\n }\n\n public listDynamicFields(): string[] {\n return getCfgRenderCtx().listDynamicFields(this.handle);\n }\n\n public getKeyValueBase64(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueBase64(this.handle, key);\n }\n\n public getKeyValueAsString(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueAsString(this.handle, key);\n }\n\n public getKeyValueAsJson<T>(key: string): T {\n const content = this.getKeyValueAsString(key);\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n public hasData(): boolean {\n return getCfgRenderCtx().hasData(this.handle);\n }\n\n public getDataBase64(): string | undefined {\n return getCfgRenderCtx().getDataBase64(this.handle);\n }\n\n public getDataAsString(): string | undefined {\n return getCfgRenderCtx().getDataAsString(this.handle);\n }\n\n public getDataAsJson<T>(): T {\n const content = this.getDataAsString();\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n /**\n * Like {@link getDataAsJson}, but does not throw while the resource is still\n * computing. Three states:\n *\n * - **Not ready** → returns `undefined` (loading).\n * - **Errored** → throws the resource's error.\n * - **Ready** → returns the parsed content.\n *\n * Prefer this over {@link getDataAsJson} in reactive output lambdas: a field\n * that resolves before its resource is ready (routine on remote backends)\n * makes {@link getDataAsJson} throw \"Resource has no content.\" mid-calculation,\n * flashing a transient \"Some outputs have errors\" banner that clears when the\n * resource finishes (MILAB-6318).\n */\n public getDataAsJsonOrUndefined<T>(): T | undefined {\n // Not ready → undefined (loading). getIsReadyOrError() registers the\n // readiness dependency, so the lambda re-runs once the resource finishes.\n if (!this.getIsReadyOrError()) return undefined;\n // Errored → throw the actual error, decoded from the error node and tagged\n // with the resolve path for debugging context. Beats getDataAsJson's\n // generic \"Resource has no content.\"\n const error = this.getError();\n if (error !== undefined) {\n const raw = error.getDataAsString();\n const message = raw === undefined ? \"Resource computation failed.\" : decodeErrorMessage(raw);\n const path = this.resolvePath.join(\".\");\n throw new Error(path ? `${message} (at ${path})` : message);\n }\n // Ready → parse the content.\n return this.getDataAsJson<T>();\n }\n\n public getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));\n }\n\n public getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));\n }\n\n public getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined> {\n return new FutureRef<string | undefined>(\n getCfgRenderCtx().getBlobContentAsString(this.handle, range),\n ).mapDefined((v) => JSON.parse(v) as T);\n }\n\n /** @deprecated */\n public getPColumns(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): PColumn<TreeNodeAccessor>[] | undefined {\n const result = this.parsePObjectCollection(errorOnUnknownField, prefix);\n if (result === undefined) return undefined;\n\n const pf = Object.entries(result).map(([, obj]) => {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n });\n\n return pf;\n }\n\n /** @deprecated */\n public parsePObjectCollection(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): Record<string, PObject<TreeNodeAccessor>> | undefined {\n const pObjects = getCfgRenderCtx().parsePObjectCollection(\n this.handle,\n errorOnUnknownField,\n prefix,\n ...this.resolvePath,\n );\n if (pObjects === undefined) return undefined;\n const result: Record<string, PObject<TreeNodeAccessor>> = {};\n for (const [key, value] of Object.entries(pObjects)) {\n const resolvePath = [...this.resolvePath, key];\n result[key] = mapPObjectData(value, (c) => new TreeNodeAccessor(c, resolvePath));\n }\n return result;\n }\n\n /**\n * @deprecated use getFileContentAsBase64\n */\n public getBlobContentAsBase64(): FutureRef<string | undefined> {\n return this.getFileContentAsBase64();\n }\n\n /**\n * @deprecated use getFileContentAsString\n */\n public getBlobContentAsString(): FutureRef<string | undefined> {\n return this.getFileContentAsString();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getFileHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getDownloadedBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getFileHandle\n */\n public getDownloadedBlobHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return this.getFileHandle();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getRemoteFileHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getOnDemandBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getRemoteFileHandle\n */\n public getOnDemandBlobHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return this.getRemoteFileHandle();\n }\n\n /**\n * @returns the url to the extracted folder\n */\n public extractArchiveAndGetURL(format: ArchiveFormat): FutureRef<FolderURL | undefined> {\n return new FutureRef(getCfgRenderCtx().extractArchiveAndGetURL(this.handle, format));\n }\n\n public getImportProgress(): FutureRef<ImportProgress> {\n return new FutureRef(getCfgRenderCtx().getImportProgress(this.handle));\n }\n\n public getLastLogs(nLines: number): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getLastLogs(this.handle, nLines));\n }\n\n public getProgressLog(patternToSearch: string): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLog(this.handle, patternToSearch));\n }\n\n public getProgressLogWithInfo(\n patternToSearch: string,\n ): FutureRef<ProgressLogWithInfo | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLogWithInfo(this.handle, patternToSearch));\n }\n\n public getLogHandle(): FutureRef<AnyLogHandle | undefined> {\n return new FutureRef(getCfgRenderCtx().getLogHandle(this.handle));\n }\n\n public allFieldsResolved(fieldType: \"Input\" | \"Output\" = \"Input\"): boolean {\n switch (fieldType) {\n case \"Input\":\n return (\n this.getInputsLocked() &&\n this.listInputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Input\" }) !== undefined,\n )\n );\n case \"Output\":\n return (\n this.getOutputsLocked() &&\n this.listOutputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Output\" }) !== undefined,\n )\n );\n }\n }\n\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops: FieldMapOps & { skipUnresolved: true },\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor | undefined) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined {\n const { fieldType, requireLocked, skipUnresolved } = {\n fieldType: \"Input\" as const,\n requireLocked: true,\n skipUnresolved: false,\n ..._ops,\n };\n const mapping = _mapping as (name: string, value: TreeNodeAccessor | undefined) => T;\n if (requireLocked) {\n if (fieldType === \"Input\" && !this.getInputsLocked()) return undefined;\n if (fieldType === \"Output\" && !this.getOutputsLocked()) return undefined;\n }\n const fieldList =\n fieldType === \"Input\"\n ? this.listInputFields()\n : fieldType === \"Output\"\n ? this.listOutputFields()\n : this.listDynamicFields();\n let fieldEntries = fieldList.map(\n (field) => [field, this.resolve({ field, assertFieldType: fieldType })] as const,\n );\n if (skipUnresolved) fieldEntries = fieldEntries.filter((e) => e[1] !== undefined);\n return fieldEntries.map(([name, value]) => mapping(name, value));\n }\n}\n"],"mappings":"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"}
@@ -45,10 +45,10 @@ declare class TreeNodeAccessor {
45
45
  }]): TreeNodeAccessor;
46
46
  /** If field type assertion is not specified for the step, default is Input. */
47
47
  resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;
48
- resolveAny(...steps: [Omit<FieldTraversalStep, "errorIfFieldNotSet"> & {
48
+ traverse(...steps: [Omit<FieldTraversalStep, "errorIfFieldNotSet"> & {
49
49
  errorIfFieldNotAssigned: true;
50
50
  }]): TreeNodeAccessor;
51
- resolveAny(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;
51
+ traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;
52
52
  resolveWithCommon(commonOptions: CommonFieldTraverseOps, ...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;
53
53
  get resourceType(): ResourceType;
54
54
  getInputsLocked(): boolean;
@@ -62,6 +62,7 @@ declare class TreeNodeAccessor {
62
62
  getKeyValueBase64(key: string): string | undefined;
63
63
  getKeyValueAsString(key: string): string | undefined;
64
64
  getKeyValueAsJson<T>(key: string): T;
65
+ hasData(): boolean;
65
66
  getDataBase64(): string | undefined;
66
67
  getDataAsString(): string | undefined;
67
68
  getDataAsJson<T>(): T;
@@ -80,17 +81,13 @@ declare class TreeNodeAccessor {
80
81
  * resource finishes (MILAB-6318).
81
82
  */
82
83
  getDataAsJsonOrUndefined<T>(): T | undefined;
83
- /**
84
- *
85
- */
86
- getPColumns(errorOnUnknownField?: boolean, prefix?: string): PColumn<TreeNodeAccessor>[] | undefined;
87
- /**
88
- *
89
- */
90
- parsePObjectCollection(errorOnUnknownField?: boolean, prefix?: string): Record<string, PObject<TreeNodeAccessor>> | undefined;
91
84
  getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined>;
92
85
  getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined>;
93
86
  getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined>;
87
+ /** @deprecated */
88
+ getPColumns(errorOnUnknownField?: boolean, prefix?: string): PColumn<TreeNodeAccessor>[] | undefined;
89
+ /** @deprecated */
90
+ parsePObjectCollection(errorOnUnknownField?: boolean, prefix?: string): Record<string, PObject<TreeNodeAccessor>> | undefined;
94
91
  /**
95
92
  * @deprecated use getFileContentAsBase64
96
93
  */
@@ -1 +1 @@
1
- {"version":3,"file":"accessor.d.ts","names":[],"sources":["../../src/render/accessor.ts"],"mappings":"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"}
1
+ {"version":3,"file":"accessor.d.ts","names":[],"sources":["../../src/render/accessor.ts"],"mappings":"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"}
@@ -47,7 +47,7 @@ var TreeNodeAccessor = class TreeNodeAccessor {
47
47
  }));
48
48
  return this.resolveWithCommon({}, ...transformedSteps);
49
49
  }
50
- resolveAny(...steps) {
50
+ traverse(...steps) {
51
51
  return this.resolveWithCommon({}, ...steps);
52
52
  }
53
53
  resolveWithCommon(commonOptions, ...steps) {
@@ -93,6 +93,9 @@ var TreeNodeAccessor = class TreeNodeAccessor {
93
93
  if (content == void 0) throw new Error("Resource has no content.");
94
94
  return JSON.parse(content);
95
95
  }
96
+ hasData() {
97
+ return getCfgRenderCtx().hasData(this.handle);
98
+ }
96
99
  getDataBase64() {
97
100
  return getCfgRenderCtx().getDataBase64(this.handle);
98
101
  }
@@ -129,9 +132,16 @@ var TreeNodeAccessor = class TreeNodeAccessor {
129
132
  }
130
133
  return this.getDataAsJson();
131
134
  }
132
- /**
133
- *
134
- */
135
+ getFileContentAsBase64(range) {
136
+ return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));
137
+ }
138
+ getFileContentAsString(range) {
139
+ return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));
140
+ }
141
+ getFileContentAsJson(range) {
142
+ return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range)).mapDefined((v) => JSON.parse(v));
143
+ }
144
+ /** @deprecated */
135
145
  getPColumns(errorOnUnknownField = false, prefix = "") {
136
146
  const result = this.parsePObjectCollection(errorOnUnknownField, prefix);
137
147
  if (result === void 0) return void 0;
@@ -140,9 +150,7 @@ var TreeNodeAccessor = class TreeNodeAccessor {
140
150
  return obj;
141
151
  });
142
152
  }
143
- /**
144
- *
145
- */
153
+ /** @deprecated */
146
154
  parsePObjectCollection(errorOnUnknownField = false, prefix = "") {
147
155
  const pObjects = getCfgRenderCtx().parsePObjectCollection(this.handle, errorOnUnknownField, prefix, ...this.resolvePath);
148
156
  if (pObjects === void 0) return void 0;
@@ -153,15 +161,6 @@ var TreeNodeAccessor = class TreeNodeAccessor {
153
161
  }
154
162
  return result;
155
163
  }
156
- getFileContentAsBase64(range) {
157
- return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));
158
- }
159
- getFileContentAsString(range) {
160
- return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));
161
- }
162
- getFileContentAsJson(range) {
163
- return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range)).mapDefined((v) => JSON.parse(v));
164
- }
165
164
  /**
166
165
  * @deprecated use getFileContentAsBase64
167
166
  */
@@ -1 +1 @@
1
- {"version":3,"file":"accessor.js","names":[],"sources":["../../src/render/accessor.ts"],"sourcesContent":["import type {\n AnyLogHandle,\n ImportProgress,\n LocalBlobHandleAndSize,\n PColumn,\n PObject,\n RemoteBlobHandleAndSize,\n FolderURL,\n ArchiveFormat,\n ProgressLogWithInfo,\n RangeBytes,\n} from \"@milaboratories/pl-model-common\";\nimport { isPColumn, mapPObjectData } from \"@milaboratories/pl-model-common\";\nimport { getCfgRenderCtx } from \"../internal\";\nimport { FutureRef } from \"./future\";\nimport type { AccessorHandle } from \"./internal\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\n\nexport function ifDef<T, R>(value: T | undefined, cb: (value: T) => R): R | undefined {\n return value === undefined ? undefined : cb(value);\n}\n\n/**\n * Decode an error node's content into a display message. The backend serializes\n * a resource error as `{\"message\": \"...\"}` (`ResourceError`); unwrap that to the\n * human-readable message. Falls back to the raw string when the content is not\n * that envelope (e.g. plain text, or an unexpected shape).\n */\nfunction decodeErrorMessage(raw: string): string {\n try {\n const parsed = JSON.parse(raw) as { message?: unknown };\n if (typeof parsed?.message === \"string\") return parsed.message;\n } catch {\n // Not JSON — surface the raw content.\n }\n return raw;\n}\n\ntype FieldMapOps = {\n /**\n * Type of fields to iterate over.\n * (default 'Input')\n * */\n readonly fieldType?: \"Input\" | \"Output\" | \"Dynamic\";\n /**\n * If not locked, `undefined` value will be returned. Do nothing if mapping `Dynamic` fields.\n * (default true)\n * */\n readonly requireLocked?: boolean;\n /**\n * Will skip unresolved fields.\n * (default false)\n * */\n readonly skipUnresolved?: boolean;\n};\n\n/** Represent resource tree node accessor */\nexport class TreeNodeAccessor {\n constructor(\n public readonly handle: AccessorHandle,\n public readonly resolvePath: string[],\n ) {}\n\n /** Shortcut for {@link resolveInput} */\n public resolve(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** Shortcut for {@link resolveInput} */\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Output\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n public resolveAny(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n public resolveAny(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveAny(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n return this.resolveWithCommon({}, ...steps);\n }\n\n public resolveWithCommon(\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): TreeNodeAccessor | undefined {\n const resolvePath = [\n ...this.resolvePath,\n ...steps.map((step) => (typeof step === \"string\" ? step : step.field)),\n ];\n return ifDef(\n getCfgRenderCtx().resolveWithCommon(this.handle, commonOptions, ...steps),\n (accessor) => new TreeNodeAccessor(accessor, resolvePath),\n );\n }\n\n public get resourceType(): ResourceType {\n return getCfgRenderCtx().getResourceType(this.handle);\n }\n\n public getInputsLocked(): boolean {\n return getCfgRenderCtx().getInputsLocked(this.handle);\n }\n\n public getOutputsLocked(): boolean {\n return getCfgRenderCtx().getOutputsLocked(this.handle);\n }\n\n public getIsReadyOrError(): boolean {\n return getCfgRenderCtx().getIsReadyOrError(this.handle);\n }\n\n public getIsFinal(): boolean {\n return getCfgRenderCtx().getIsFinal(this.handle);\n }\n\n public getError(): TreeNodeAccessor | undefined {\n const resolvePath = [...this.resolvePath, \"error\"];\n return ifDef(\n getCfgRenderCtx().getError(this.handle),\n (accsessor) => new TreeNodeAccessor(accsessor, resolvePath),\n );\n }\n\n public listInputFields(): string[] {\n return getCfgRenderCtx().listInputFields(this.handle);\n }\n\n public listOutputFields(): string[] {\n return getCfgRenderCtx().listOutputFields(this.handle);\n }\n\n public listDynamicFields(): string[] {\n return getCfgRenderCtx().listDynamicFields(this.handle);\n }\n\n public getKeyValueBase64(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueBase64(this.handle, key);\n }\n\n public getKeyValueAsString(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueAsString(this.handle, key);\n }\n\n public getKeyValueAsJson<T>(key: string): T {\n const content = this.getKeyValueAsString(key);\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n public getDataBase64(): string | undefined {\n return getCfgRenderCtx().getDataBase64(this.handle);\n }\n\n public getDataAsString(): string | undefined {\n return getCfgRenderCtx().getDataAsString(this.handle);\n }\n\n public getDataAsJson<T>(): T {\n const content = this.getDataAsString();\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n /**\n * Like {@link getDataAsJson}, but does not throw while the resource is still\n * computing. Three states:\n *\n * - **Not ready** → returns `undefined` (loading).\n * - **Errored** → throws the resource's error.\n * - **Ready** → returns the parsed content.\n *\n * Prefer this over {@link getDataAsJson} in reactive output lambdas: a field\n * that resolves before its resource is ready (routine on remote backends)\n * makes {@link getDataAsJson} throw \"Resource has no content.\" mid-calculation,\n * flashing a transient \"Some outputs have errors\" banner that clears when the\n * resource finishes (MILAB-6318).\n */\n public getDataAsJsonOrUndefined<T>(): T | undefined {\n // Not ready → undefined (loading). getIsReadyOrError() registers the\n // readiness dependency, so the lambda re-runs once the resource finishes.\n if (!this.getIsReadyOrError()) return undefined;\n // Errored → throw the actual error, decoded from the error node and tagged\n // with the resolve path for debugging context. Beats getDataAsJson's\n // generic \"Resource has no content.\"\n const error = this.getError();\n if (error !== undefined) {\n const raw = error.getDataAsString();\n const message = raw === undefined ? \"Resource computation failed.\" : decodeErrorMessage(raw);\n const path = this.resolvePath.join(\".\");\n throw new Error(path ? `${message} (at ${path})` : message);\n }\n // Ready → parse the content.\n return this.getDataAsJson<T>();\n }\n\n /**\n *\n */\n public getPColumns(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): PColumn<TreeNodeAccessor>[] | undefined {\n const result = this.parsePObjectCollection(errorOnUnknownField, prefix);\n if (result === undefined) return undefined;\n\n const pf = Object.entries(result).map(([, obj]) => {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n });\n\n return pf;\n }\n\n /**\n *\n */\n public parsePObjectCollection(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): Record<string, PObject<TreeNodeAccessor>> | undefined {\n const pObjects = getCfgRenderCtx().parsePObjectCollection(\n this.handle,\n errorOnUnknownField,\n prefix,\n ...this.resolvePath,\n );\n if (pObjects === undefined) return undefined;\n const result: Record<string, PObject<TreeNodeAccessor>> = {};\n for (const [key, value] of Object.entries(pObjects)) {\n const resolvePath = [...this.resolvePath, key];\n result[key] = mapPObjectData(value, (c) => new TreeNodeAccessor(c, resolvePath));\n }\n return result;\n }\n\n public getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));\n }\n\n public getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));\n }\n\n public getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined> {\n return new FutureRef<string | undefined>(\n getCfgRenderCtx().getBlobContentAsString(this.handle, range),\n ).mapDefined((v) => JSON.parse(v) as T);\n }\n\n /**\n * @deprecated use getFileContentAsBase64\n */\n public getBlobContentAsBase64(): FutureRef<string | undefined> {\n return this.getFileContentAsBase64();\n }\n\n /**\n * @deprecated use getFileContentAsString\n */\n public getBlobContentAsString(): FutureRef<string | undefined> {\n return this.getFileContentAsString();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getFileHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getDownloadedBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getFileHandle\n */\n public getDownloadedBlobHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return this.getFileHandle();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getRemoteFileHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getOnDemandBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getRemoteFileHandle\n */\n public getOnDemandBlobHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return this.getRemoteFileHandle();\n }\n\n /**\n * @returns the url to the extracted folder\n */\n public extractArchiveAndGetURL(format: ArchiveFormat): FutureRef<FolderURL | undefined> {\n return new FutureRef(getCfgRenderCtx().extractArchiveAndGetURL(this.handle, format));\n }\n\n public getImportProgress(): FutureRef<ImportProgress> {\n return new FutureRef(getCfgRenderCtx().getImportProgress(this.handle));\n }\n\n public getLastLogs(nLines: number): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getLastLogs(this.handle, nLines));\n }\n\n public getProgressLog(patternToSearch: string): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLog(this.handle, patternToSearch));\n }\n\n public getProgressLogWithInfo(\n patternToSearch: string,\n ): FutureRef<ProgressLogWithInfo | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLogWithInfo(this.handle, patternToSearch));\n }\n\n public getLogHandle(): FutureRef<AnyLogHandle | undefined> {\n return new FutureRef(getCfgRenderCtx().getLogHandle(this.handle));\n }\n\n public allFieldsResolved(fieldType: \"Input\" | \"Output\" = \"Input\"): boolean {\n switch (fieldType) {\n case \"Input\":\n return (\n this.getInputsLocked() &&\n this.listInputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Input\" }) !== undefined,\n )\n );\n case \"Output\":\n return (\n this.getOutputsLocked() &&\n this.listOutputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Output\" }) !== undefined,\n )\n );\n }\n }\n\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops: FieldMapOps & { skipUnresolved: true },\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor | undefined) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined {\n const { fieldType, requireLocked, skipUnresolved } = {\n fieldType: \"Input\" as const,\n requireLocked: true,\n skipUnresolved: false,\n ..._ops,\n };\n const mapping = _mapping as (name: string, value: TreeNodeAccessor | undefined) => T;\n if (requireLocked) {\n if (fieldType === \"Input\" && !this.getInputsLocked()) return undefined;\n if (fieldType === \"Output\" && !this.getOutputsLocked()) return undefined;\n }\n const fieldList =\n fieldType === \"Input\"\n ? this.listInputFields()\n : fieldType === \"Output\"\n ? this.listOutputFields()\n : this.listDynamicFields();\n let fieldEntries = fieldList.map(\n (field) => [field, this.resolve({ field, assertFieldType: fieldType })] as const,\n );\n if (skipUnresolved) fieldEntries = fieldEntries.filter((e) => e[1] !== undefined);\n return fieldEntries.map(([name, value]) => mapping(name, value));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"accessor.js","names":[],"sources":["../../src/render/accessor.ts"],"sourcesContent":["import {\n type AnyLogHandle,\n type ImportProgress,\n type LocalBlobHandleAndSize,\n type RemoteBlobHandleAndSize,\n type FolderURL,\n type ArchiveFormat,\n type ProgressLogWithInfo,\n type RangeBytes,\n isPColumn,\n mapPObjectData,\n PColumn,\n PObject,\n} from \"@milaboratories/pl-model-common\";\nimport { getCfgRenderCtx } from \"../internal\";\nimport { FutureRef } from \"./future\";\nimport type { AccessorHandle } from \"./internal\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\n\nexport function ifDef<T, R>(value: T | undefined, cb: (value: T) => R): R | undefined {\n return value === undefined ? undefined : cb(value);\n}\n\n/**\n * Decode an error node's content into a display message. The backend serializes\n * a resource error as `{\"message\": \"...\"}` (`ResourceError`); unwrap that to the\n * human-readable message. Falls back to the raw string when the content is not\n * that envelope (e.g. plain text, or an unexpected shape).\n */\nfunction decodeErrorMessage(raw: string): string {\n try {\n const parsed = JSON.parse(raw) as { message?: unknown };\n if (typeof parsed?.message === \"string\") return parsed.message;\n } catch {\n // Not JSON — surface the raw content.\n }\n return raw;\n}\n\ntype FieldMapOps = {\n /**\n * Type of fields to iterate over.\n * (default 'Input')\n * */\n readonly fieldType?: \"Input\" | \"Output\" | \"Dynamic\";\n /**\n * If not locked, `undefined` value will be returned. Do nothing if mapping `Dynamic` fields.\n * (default true)\n * */\n readonly requireLocked?: boolean;\n /**\n * Will skip unresolved fields.\n * (default false)\n * */\n readonly skipUnresolved?: boolean;\n};\n\n/** Represent resource tree node accessor */\nexport class TreeNodeAccessor {\n constructor(\n public readonly handle: AccessorHandle,\n public readonly resolvePath: string[],\n ) {}\n\n /** Shortcut for {@link resolveInput} */\n public resolve(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** Shortcut for {@link resolveInput} */\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Output\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n public traverse(\n ...steps: [Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & { errorIfFieldNotAssigned: true }]\n ): TreeNodeAccessor;\n public traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n return this.resolveWithCommon({}, ...steps);\n }\n\n public resolveWithCommon(\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): TreeNodeAccessor | undefined {\n const resolvePath = [\n ...this.resolvePath,\n ...steps.map((step) => (typeof step === \"string\" ? step : step.field)),\n ];\n return ifDef(\n getCfgRenderCtx().resolveWithCommon(this.handle, commonOptions, ...steps),\n (accessor) => new TreeNodeAccessor(accessor, resolvePath),\n );\n }\n\n public get resourceType(): ResourceType {\n return getCfgRenderCtx().getResourceType(this.handle);\n }\n\n public getInputsLocked(): boolean {\n return getCfgRenderCtx().getInputsLocked(this.handle);\n }\n\n public getOutputsLocked(): boolean {\n return getCfgRenderCtx().getOutputsLocked(this.handle);\n }\n\n public getIsReadyOrError(): boolean {\n return getCfgRenderCtx().getIsReadyOrError(this.handle);\n }\n\n public getIsFinal(): boolean {\n return getCfgRenderCtx().getIsFinal(this.handle);\n }\n\n public getError(): TreeNodeAccessor | undefined {\n const resolvePath = [...this.resolvePath, \"error\"];\n return ifDef(\n getCfgRenderCtx().getError(this.handle),\n (accsessor) => new TreeNodeAccessor(accsessor, resolvePath),\n );\n }\n\n public listInputFields(): string[] {\n return getCfgRenderCtx().listInputFields(this.handle);\n }\n\n public listOutputFields(): string[] {\n return getCfgRenderCtx().listOutputFields(this.handle);\n }\n\n public listDynamicFields(): string[] {\n return getCfgRenderCtx().listDynamicFields(this.handle);\n }\n\n public getKeyValueBase64(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueBase64(this.handle, key);\n }\n\n public getKeyValueAsString(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueAsString(this.handle, key);\n }\n\n public getKeyValueAsJson<T>(key: string): T {\n const content = this.getKeyValueAsString(key);\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n public hasData(): boolean {\n return getCfgRenderCtx().hasData(this.handle);\n }\n\n public getDataBase64(): string | undefined {\n return getCfgRenderCtx().getDataBase64(this.handle);\n }\n\n public getDataAsString(): string | undefined {\n return getCfgRenderCtx().getDataAsString(this.handle);\n }\n\n public getDataAsJson<T>(): T {\n const content = this.getDataAsString();\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n /**\n * Like {@link getDataAsJson}, but does not throw while the resource is still\n * computing. Three states:\n *\n * - **Not ready** → returns `undefined` (loading).\n * - **Errored** → throws the resource's error.\n * - **Ready** → returns the parsed content.\n *\n * Prefer this over {@link getDataAsJson} in reactive output lambdas: a field\n * that resolves before its resource is ready (routine on remote backends)\n * makes {@link getDataAsJson} throw \"Resource has no content.\" mid-calculation,\n * flashing a transient \"Some outputs have errors\" banner that clears when the\n * resource finishes (MILAB-6318).\n */\n public getDataAsJsonOrUndefined<T>(): T | undefined {\n // Not ready → undefined (loading). getIsReadyOrError() registers the\n // readiness dependency, so the lambda re-runs once the resource finishes.\n if (!this.getIsReadyOrError()) return undefined;\n // Errored → throw the actual error, decoded from the error node and tagged\n // with the resolve path for debugging context. Beats getDataAsJson's\n // generic \"Resource has no content.\"\n const error = this.getError();\n if (error !== undefined) {\n const raw = error.getDataAsString();\n const message = raw === undefined ? \"Resource computation failed.\" : decodeErrorMessage(raw);\n const path = this.resolvePath.join(\".\");\n throw new Error(path ? `${message} (at ${path})` : message);\n }\n // Ready → parse the content.\n return this.getDataAsJson<T>();\n }\n\n public getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));\n }\n\n public getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));\n }\n\n public getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined> {\n return new FutureRef<string | undefined>(\n getCfgRenderCtx().getBlobContentAsString(this.handle, range),\n ).mapDefined((v) => JSON.parse(v) as T);\n }\n\n /** @deprecated */\n public getPColumns(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): PColumn<TreeNodeAccessor>[] | undefined {\n const result = this.parsePObjectCollection(errorOnUnknownField, prefix);\n if (result === undefined) return undefined;\n\n const pf = Object.entries(result).map(([, obj]) => {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n });\n\n return pf;\n }\n\n /** @deprecated */\n public parsePObjectCollection(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): Record<string, PObject<TreeNodeAccessor>> | undefined {\n const pObjects = getCfgRenderCtx().parsePObjectCollection(\n this.handle,\n errorOnUnknownField,\n prefix,\n ...this.resolvePath,\n );\n if (pObjects === undefined) return undefined;\n const result: Record<string, PObject<TreeNodeAccessor>> = {};\n for (const [key, value] of Object.entries(pObjects)) {\n const resolvePath = [...this.resolvePath, key];\n result[key] = mapPObjectData(value, (c) => new TreeNodeAccessor(c, resolvePath));\n }\n return result;\n }\n\n /**\n * @deprecated use getFileContentAsBase64\n */\n public getBlobContentAsBase64(): FutureRef<string | undefined> {\n return this.getFileContentAsBase64();\n }\n\n /**\n * @deprecated use getFileContentAsString\n */\n public getBlobContentAsString(): FutureRef<string | undefined> {\n return this.getFileContentAsString();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getFileHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getDownloadedBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getFileHandle\n */\n public getDownloadedBlobHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return this.getFileHandle();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getRemoteFileHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getOnDemandBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getRemoteFileHandle\n */\n public getOnDemandBlobHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return this.getRemoteFileHandle();\n }\n\n /**\n * @returns the url to the extracted folder\n */\n public extractArchiveAndGetURL(format: ArchiveFormat): FutureRef<FolderURL | undefined> {\n return new FutureRef(getCfgRenderCtx().extractArchiveAndGetURL(this.handle, format));\n }\n\n public getImportProgress(): FutureRef<ImportProgress> {\n return new FutureRef(getCfgRenderCtx().getImportProgress(this.handle));\n }\n\n public getLastLogs(nLines: number): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getLastLogs(this.handle, nLines));\n }\n\n public getProgressLog(patternToSearch: string): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLog(this.handle, patternToSearch));\n }\n\n public getProgressLogWithInfo(\n patternToSearch: string,\n ): FutureRef<ProgressLogWithInfo | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLogWithInfo(this.handle, patternToSearch));\n }\n\n public getLogHandle(): FutureRef<AnyLogHandle | undefined> {\n return new FutureRef(getCfgRenderCtx().getLogHandle(this.handle));\n }\n\n public allFieldsResolved(fieldType: \"Input\" | \"Output\" = \"Input\"): boolean {\n switch (fieldType) {\n case \"Input\":\n return (\n this.getInputsLocked() &&\n this.listInputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Input\" }) !== undefined,\n )\n );\n case \"Output\":\n return (\n this.getOutputsLocked() &&\n this.listOutputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Output\" }) !== undefined,\n )\n );\n }\n }\n\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops: FieldMapOps & { skipUnresolved: true },\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor | undefined) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined {\n const { fieldType, requireLocked, skipUnresolved } = {\n fieldType: \"Input\" as const,\n requireLocked: true,\n skipUnresolved: false,\n ..._ops,\n };\n const mapping = _mapping as (name: string, value: TreeNodeAccessor | undefined) => T;\n if (requireLocked) {\n if (fieldType === \"Input\" && !this.getInputsLocked()) return undefined;\n if (fieldType === \"Output\" && !this.getOutputsLocked()) return undefined;\n }\n const fieldList =\n fieldType === \"Input\"\n ? this.listInputFields()\n : fieldType === \"Output\"\n ? this.listOutputFields()\n : this.listDynamicFields();\n let fieldEntries = fieldList.map(\n (field) => [field, this.resolve({ field, assertFieldType: fieldType })] as const,\n );\n if (skipUnresolved) fieldEntries = fieldEntries.filter((e) => e[1] !== undefined);\n return fieldEntries.map(([name, value]) => mapping(name, value));\n }\n}\n"],"mappings":"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"}
@@ -13,6 +13,8 @@ require("./util/index.cjs");
13
13
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
14
14
  let canonicalize = require("canonicalize");
15
15
  canonicalize = require_runtime.__toESM(canonicalize, 1);
16
+ let _milaboratories_helpers = require("@milaboratories/helpers");
17
+ let es_toolkit = require("es-toolkit");
16
18
  //#region src/render/api.ts
17
19
  /**
18
20
  * Helper function to match domain objects
@@ -28,24 +30,35 @@ function matchDomain(query, target) {
28
30
  }
29
31
  /**
30
32
  * Transforms PColumn data into the internal representation expected by the platform
31
- * @param data Data from a PColumn to transform
33
+ * @param column Data from a PColumn to transform
32
34
  * @returns Transformed data compatible with platform API
33
35
  */
34
- function transformPColumnData(data) {
35
- return (0, _milaboratories_pl_model_common.mapPObjectData)(data, (d) => {
36
- if (d instanceof require_accessor.TreeNodeAccessor) return d.handle;
37
- else if ((0, _milaboratories_pl_model_common.isDataInfo)(d)) return (0, _milaboratories_pl_model_common.mapDataInfo)(d, (accessor) => accessor.handle);
38
- else return d ?? [];
36
+ function finalizePColumnData(column) {
37
+ return (0, _milaboratories_pl_model_common.mapPObjectData)(column, (data) => {
38
+ if (data instanceof require_accessor.TreeNodeAccessor) return data.handle;
39
+ else if ((0, _milaboratories_pl_model_common.isDataInfo)(data)) {
40
+ let ready = true;
41
+ (0, _milaboratories_pl_model_common.visitDataInfo)(data, (accessor) => ready &&= accessor?.getIsReadyOrError() ?? false);
42
+ if (!ready) return [];
43
+ return (0, _milaboratories_pl_model_common.mapDataInfo)(data, (accessor) => accessor?.handle ?? (0, _milaboratories_helpers.throwError)("Accessor handle is undefined"));
44
+ } else return data ?? [];
39
45
  });
40
46
  }
47
+ /**
48
+ * @deprecated use the direct `ctx.*` methods on `RenderCtxBase` instead.
49
+ *
50
+ * Migration map:
51
+ * - `getSpecs` → `ctx.getSpecs`
52
+ * - `getSpecByRef` / `getPColumnSpecByRef` → `ctx.getSpecByRef` / `ctx.getPColumnSpecByRef`
53
+ * - `getDataByRef` / `getPColumnByRef` → `ctx.getDataByRef` / `ctx.getPColumnByRef`
54
+ * - `getOptions` → `ctx.getOptions`
55
+ *
56
+ * Eager methods `selectColumns` / `getData` / `getDataWithErrors` should be
57
+ * replaced by `ctx.getSpecs` + on-demand `ctx.getStatusByRef` /
58
+ * `ctx.getPColumnByRef` so that the data resource is not subscribed up-front.
59
+ */
41
60
  var ResultPool = class {
42
61
  ctx = require_internal.getCfgRenderCtx();
43
- /**
44
- * @deprecated use getOptions()
45
- */
46
- calculateOptions(predicate) {
47
- return this.ctx.calculateOptions(predicate);
48
- }
49
62
  getOptions(predicateOrSelector, opts) {
50
63
  const predicate = typeof predicateOrSelector === "function" ? predicateOrSelector : (0, _milaboratories_pl_model_common.legacyColumnSelectorsToPredicate)(predicateOrSelector);
51
64
  const filtered = this.getSpecs().entries.filter((s) => predicate(s.obj));
@@ -189,7 +202,6 @@ var ResultPool = class {
189
202
  * @returns data associated with the ref
190
203
  */
191
204
  getDataByRef(ref) {
192
- if (typeof this.ctx.getDataFromResultPoolByRef === "undefined") return this.getData().entries.find((f) => f.ref.blockId === ref.blockId && f.ref.name === ref.name)?.obj;
193
205
  const data = this.ctx.getDataFromResultPoolByRef(ref.blockId, ref.name);
194
206
  if (!data) return void 0;
195
207
  return (0, _milaboratories_pl_model_common.mapPObjectData)(data, (handle) => new require_accessor.TreeNodeAccessor(handle, [ref.blockId, ref.name]));
@@ -270,6 +282,9 @@ var ResultPool = class {
270
282
  *
271
283
  * @param selectors - A predicate function, a single selector, or an array of selectors.
272
284
  * @returns An array of PColumn objects matching the selectors. Data is loaded on first access.
285
+ * @deprecated use `RenderCtxBase.rawResultPool` + `ResultPoolColumnsProvider` +
286
+ * `discoverColumns` instead. This eager path materializes column data
287
+ * unnecessarily for callers that only filter by spec.
273
288
  */
274
289
  selectColumns(selectors) {
275
290
  const predicate = typeof selectors === "function" ? selectors : (0, _milaboratories_pl_model_common.legacyColumnSelectorsToPredicate)(selectors);
@@ -347,20 +362,8 @@ var RenderCtxBase = class {
347
362
  get outputs() {
348
363
  return this.getNamedAccessor(require_internal$1.MainAccessorName);
349
364
  }
365
+ /** @deprecated use `rawResultPool` + `ResultPoolColumnsProvider` instead. */
350
366
  resultPool = new ResultPool();
351
- /**
352
- * Find labels data for a given axis id. It will search for a label column and return its data as a map.
353
- * @returns a map of axis value => label
354
- * @deprecated Use resultPool.findLabels instead
355
- */
356
- findLabels(axis) {
357
- return this.resultPool.findLabels(axis);
358
- }
359
- verifyInlineAndExplicitColumnsSupport(columns) {
360
- const hasInlineColumns = columns.some((c) => !(c.data instanceof require_accessor.TreeNodeAccessor) || (0, _milaboratories_pl_model_common.isDataInfo)(c.data));
361
- const inlineColumnsSupport = this.ctx.featureFlags?.inlineColumnsSupport === true;
362
- if (hasInlineColumns && !inlineColumnsSupport) throw Error(`Inline or explicit columns not supported`);
363
- }
364
367
  patchPTableDef(def) {
365
368
  if (!this.ctx.featureFlags?.pTablePartitionFiltersSupport) def = {
366
369
  ...def,
@@ -375,7 +378,7 @@ var RenderCtxBase = class {
375
378
  return def;
376
379
  }
377
380
  createPFrame(def) {
378
- return this.ctx.createPFrame(def.map((c) => transformPColumnData(c)));
381
+ return this.ctx.createPFrame(def.map((v) => (0, es_toolkit.isString)(v) ? v : finalizePColumnData(v)));
379
382
  }
380
383
  createPTable(def) {
381
384
  let rawDef;
@@ -392,17 +395,11 @@ var RenderCtxBase = class {
392
395
  sorting: def.sorting ?? []
393
396
  });
394
397
  else rawDef = this.patchPTableDef(def);
395
- const columns = (0, _milaboratories_pl_model_common.extractAllColumns)(rawDef.src);
396
- this.verifyInlineAndExplicitColumnsSupport(columns);
397
- if (!require_pcolumn_data.allPColumnsReady(columns)) return void 0;
398
- return this.ctx.createPTable((0, _milaboratories_pl_model_common.mapPTableDef)(rawDef, (po) => transformPColumnData(po)));
398
+ if (!require_pcolumn_data.allPColumnsReady((0, _milaboratories_pl_model_common.extractAllColumns)(rawDef.src))) return void 0;
399
+ return this.ctx.createPTable((0, _milaboratories_pl_model_common.mapPTableDef)(rawDef, finalizePColumnData));
399
400
  }
400
401
  createPTableV2(def) {
401
- return this.ctx.createPTableV2((0, _milaboratories_pl_model_common.mapPTableDefV2)(def, (po) => transformPColumnData(po)));
402
- }
403
- /** @deprecated scheduled for removal from SDK */
404
- getBlockLabel(blockId) {
405
- return this.ctx.getBlockLabel(blockId);
402
+ return this.ctx.createPTableV2((0, _milaboratories_pl_model_common.mapPTableDefV2)(def, { column: (v) => (0, es_toolkit.isString)(v) ? v : finalizePColumnData(v) }));
406
403
  }
407
404
  getCurrentUnstableMarker() {
408
405
  return this.ctx.getCurrentUnstableMarker();
@@ -493,5 +490,6 @@ exports.PluginRenderCtx = PluginRenderCtx;
493
490
  exports.RenderCtxBase = RenderCtxBase;
494
491
  exports.RenderCtxLegacy = RenderCtxLegacy;
495
492
  exports.ResultPool = ResultPool;
493
+ exports.finalizePColumnData = finalizePColumnData;
496
494
 
497
495
  //# sourceMappingURL=api.cjs.map