@platforma-sdk/model 1.79.27 → 1.80.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +10 -8
  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
@@ -15,13 +15,21 @@ import {
15
15
  import { distillFilterSpec } from "../../filters";
16
16
  import type { PlDataTableFilterState, PlTableFilter } from "./typesV4";
17
17
  import type {
18
+ PlDataTableFilters,
18
19
  PlDataTableFiltersWithMeta,
19
- PlDataTableGridStateCore,
20
20
  PlDataTableSheetState,
21
21
  PlDataTableStateV2CacheEntry,
22
22
  PlDataTableStateV2Normalized,
23
- PlTableColumnIdJson,
24
23
  PTableParamsV2,
24
+ } from "./typesV8";
25
+ import type {
26
+ PlDataTableFilters as PlDataTableFiltersV7,
27
+ PlDataTableFiltersWithMeta as PlDataTableFiltersWithMetaV7,
28
+ PlDataTableGridStateCore as PlDataTableGridStateCoreV7,
29
+ PlDataTableStateV2CacheEntry as PlDataTableStateV2V7CacheEntry,
30
+ PlDataTableStateV2Normalized as PlDataTableStateV2V7,
31
+ PlTableColumnIdJson,
32
+ PTableParamsV2 as PTableParamsV2V7,
25
33
  } from "./typesV7";
26
34
  import type {
27
35
  PlDataTableGridStateV6,
@@ -111,7 +119,7 @@ export type PlDataTableStateV2 =
111
119
  sheetsState: PlDataTableSheetState[];
112
120
  filtersState: PlDataTableFilterState[];
113
121
  }[];
114
- pTableParams: PTableParamsV2;
122
+ pTableParams: PTableParamsV2V7;
115
123
  }
116
124
  | {
117
125
  version: 4;
@@ -135,15 +143,18 @@ export type PlDataTableStateV2 =
135
143
  sourceId: string;
136
144
  gridState: PlDataTableGridStateV5;
137
145
  sheetsState: PlDataTableSheetState[];
138
- filtersState: null | PlDataTableFiltersWithMeta;
139
- defaultFiltersState: null | PlDataTableFiltersWithMeta;
146
+ filtersState: null | PlDataTableFiltersWithMetaV7;
147
+ defaultFiltersState: null | PlDataTableFiltersWithMetaV7;
140
148
  searchString?: string;
141
149
  }[];
142
- pTableParams: PTableParamsV2;
150
+ pTableParams: PTableParamsV2V7;
143
151
  }
144
152
  // v6 stored colIds as canonicalized full `PTableColumnSpec` (including
145
153
  // annotations + `pl7.app/trace`). v7 strips down to `PTableColumnId`.
146
154
  | PlDataTableStateV2V6
155
+ // v7 still had filter leaves serialised as `CanonicalizedJson<PTableColumnId>`
156
+ // strings and `sorting: []` for the "untouched" case.
157
+ | PlDataTableStateV2V7
147
158
  // Normalized state
148
159
  | PlDataTableStateV2Normalized;
149
160
 
@@ -168,7 +179,7 @@ export function upgradePlDataTableStateV2(
168
179
  ...entry,
169
180
  filtersState: [],
170
181
  })),
171
- pTableParams: createDefaultPTableParams(),
182
+ pTableParams: createDefaultPTableParamsV7(),
172
183
  };
173
184
  }
174
185
  // v3 -> v4
@@ -182,7 +193,7 @@ export function upgradePlDataTableStateV2(
182
193
  if (state.version === 4) {
183
194
  state = migrateV4toV6(state);
184
195
  }
185
- // v5 -> v6: unwrap `{source, labeled}` colIds in gridState back to bare PTableColumnSpec.
196
+ // v5 -> v6: unwrap `{source, labeled}` colIds in gridState.
186
197
  if (state.version === 5) {
187
198
  state = migrateV5toV6(state);
188
199
  }
@@ -190,12 +201,17 @@ export function upgradePlDataTableStateV2(
190
201
  if (state.version === 6) {
191
202
  state = migrateV6toV7(state);
192
203
  }
204
+ // v7 -> v8: parse CanonicalizedJson<PTableColumnId> filter leaves into object
205
+ // form; translate `sorting: []` into `sorting: null`.
206
+ if (state.version === 7) {
207
+ state = migrateV7toV8(state);
208
+ }
193
209
  return state;
194
210
  }
195
211
 
196
212
  /** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */
197
213
  function migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDataTableStateV2V6 {
198
- // pTableParams reset: v5 stored DiscoveredPColumnId-based hiddenColIds with
214
+ // pTableParams reset: v5 stored ColumnDiscoveredId-based hiddenColIds with
199
215
  // empty-array fields (e.g. `{column, path: [], columnQualifications: [], ...}`).
200
216
  // v6 distills empty fields, so the same logical column serialises differently
201
217
  // and lookups would silently miss every previously-hidden discovered column.
@@ -206,7 +222,7 @@ function migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDa
206
222
  ...entry,
207
223
  gridState: unwrapV5GridState(entry.gridState),
208
224
  })),
209
- pTableParams: createDefaultPTableParams(),
225
+ pTableParams: createDefaultPTableParamsV7(),
210
226
  };
211
227
  }
212
228
 
@@ -242,11 +258,11 @@ function unwrapV5GridState(gridState: PlDataTableGridStateV5): PlDataTableGridSt
242
258
 
243
259
  /** Migrate v6 to v7: rewrite each colId from a full PTableColumnSpec to its
244
260
  * compact PTableColumnId (drops annotations/spec body, ~16× smaller per column). */
245
- function migrateV6toV7(state: PlDataTableStateV2V6): PlDataTableStateV2Normalized {
261
+ function migrateV6toV7(state: PlDataTableStateV2V6): PlDataTableStateV2V7 {
246
262
  return {
247
263
  version: 7,
248
264
  stateCache: state.stateCache.map(
249
- (entry): PlDataTableStateV2CacheEntry => ({
265
+ (entry): PlDataTableStateV2V7CacheEntry => ({
250
266
  ...entry,
251
267
  gridState: shrinkV6GridState(entry.gridState),
252
268
  }),
@@ -266,7 +282,7 @@ function shrinkV6ColId(json: PlDataTableV6ColIdJson): PlTableColumnIdJson {
266
282
  return json as unknown as PlTableColumnIdJson;
267
283
  }
268
284
 
269
- function shrinkV6GridState(gridState: PlDataTableGridStateV6): PlDataTableGridStateCore {
285
+ function shrinkV6GridState(gridState: PlDataTableGridStateV6): PlDataTableGridStateCoreV7 {
270
286
  return {
271
287
  columnOrder: gridState.columnOrder
272
288
  ? { orderedColIds: gridState.columnOrder.orderedColIds.map(shrinkV6ColId) }
@@ -291,14 +307,13 @@ function migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDa
291
307
  const nextId = () => ++idCounter;
292
308
 
293
309
  const migratedCache: PlDataTableStateV2V6CacheEntry[] = state.stateCache.map((entry) => {
294
- const leaves: PlDataTableFiltersWithMeta["filters"] = [];
310
+ const leaves: PlDataTableFiltersWithMetaV7["filters"] = [];
295
311
  for (const f of entry.filtersState) {
296
312
  if (f.filter !== null && !f.filter.disabled) {
297
- const column = canonicalizeJson(f.id);
298
- leaves.push(migrateTableFilter(column, f.filter.value, nextId));
313
+ leaves.push(migrateTableFilter(canonicalizeJson(f.id), f.filter.value, nextId));
299
314
  }
300
315
  }
301
- const filtersState: PlDataTableFiltersWithMeta | null =
316
+ const filtersState: PlDataTableFiltersWithMetaV7 | null =
302
317
  leaves.length > 0 ? { id: nextId(), type: "and", filters: leaves } : null;
303
318
 
304
319
  return {
@@ -329,16 +344,17 @@ function migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDa
329
344
  defaultFilters: null,
330
345
  sorting: state.pTableParams.sorting,
331
346
  }
332
- : createDefaultPTableParams(),
347
+ : createDefaultPTableParamsV7(),
333
348
  };
334
349
  }
335
350
 
336
- /** Migrate a single per-column PlTableFilter to a tree-based FilterSpec node */
351
+ /** Migrate a single per-column PlTableFilter to a v7-form tree node (legacy
352
+ * string column ids). v7 → v8 later converts these to object form. */
337
353
  function migrateTableFilter(
338
354
  column: CanonicalizedJson<PTableColumnId>,
339
355
  filter: PlTableFilter,
340
356
  nextId: () => number,
341
- ): PlDataTableFiltersWithMeta["filters"][number] {
357
+ ): PlDataTableFiltersWithMetaV7["filters"][number] {
342
358
  const id = nextId();
343
359
  switch (filter.type) {
344
360
  case "isNA":
@@ -404,7 +420,9 @@ function migrateTableFilter(
404
420
  }
405
421
  }
406
422
 
407
- export function createDefaultPTableParams(): PTableParamsV2 {
423
+ /** Default pTableParams in the v7 shape (sorting: []). Used by intermediate
424
+ * migration steps that produce v6/v7 state before the v7 → v8 conversion. */
425
+ function createDefaultPTableParamsV7(): PTableParamsV2V7 {
408
426
  return {
409
427
  sourceId: null,
410
428
  hiddenColIds: null,
@@ -414,10 +432,121 @@ export function createDefaultPTableParams(): PTableParamsV2 {
414
432
  };
415
433
  }
416
434
 
435
+ export function createDefaultPTableParams(): PTableParamsV2 {
436
+ return {
437
+ sourceId: null,
438
+ hiddenColIds: null,
439
+ filters: null,
440
+ defaultFilters: null,
441
+ sorting: null,
442
+ };
443
+ }
444
+
417
445
  export function createPlDataTableStateV2(): PlDataTableStateV2Normalized {
418
446
  return {
419
- version: 7,
447
+ version: 8,
420
448
  stateCache: [],
421
449
  pTableParams: createDefaultPTableParams(),
422
450
  };
423
451
  }
452
+
453
+ // --- v7 -> v8 migration ----------------------------------------------------
454
+ // Parses CanonicalizedJson<PTableColumnId> filter leaves into the new object
455
+ // form. Malformed leaves are dropped; groups that become empty after pruning
456
+ // are dropped; cache entries whose tree fully prunes get filtersState: null.
457
+ // Also translates `sorting: []` (legacy "untouched") into `sorting: null`.
458
+
459
+ function migrateV7toV8(state: PlDataTableStateV2V7): PlDataTableStateV2Normalized {
460
+ const newCache: PlDataTableStateV2CacheEntry[] = state.stateCache.map((entry) => ({
461
+ sourceId: entry.sourceId,
462
+ gridState: entry.gridState,
463
+ sheetsState: entry.sheetsState,
464
+ filtersState: convertFiltersWithMeta(entry.filtersState),
465
+ defaultFiltersState: convertFiltersWithMeta(entry.defaultFiltersState),
466
+ searchString: entry.searchString,
467
+ }));
468
+
469
+ const params = state.pTableParams;
470
+ let pTableParams: PTableParamsV2;
471
+ if (params.sourceId === null) {
472
+ pTableParams = createDefaultPTableParams();
473
+ } else {
474
+ pTableParams = {
475
+ sourceId: params.sourceId,
476
+ hiddenColIds: params.hiddenColIds,
477
+ // Empty array in legacy state means "not touched" — translate to null so the
478
+ // model falls back to default sorting; non-empty stays as user's explicit value.
479
+ sorting: params.sorting.length === 0 ? null : params.sorting,
480
+ filters: convertFiltersPlain(params.filters),
481
+ defaultFilters: convertFiltersPlain(params.defaultFilters),
482
+ };
483
+ }
484
+
485
+ return { version: 8, stateCache: newCache, pTableParams };
486
+ }
487
+
488
+ function convertFiltersWithMeta(
489
+ node: null | PlDataTableFiltersWithMetaV7,
490
+ ): null | PlDataTableFiltersWithMeta {
491
+ if (node === null) return null;
492
+ const result = pruneFilterNode(node as unknown);
493
+ if (result === undefined) return null;
494
+ return result as PlDataTableFiltersWithMeta;
495
+ }
496
+
497
+ function convertFiltersPlain(node: null | PlDataTableFiltersV7): null | PlDataTableFilters {
498
+ if (node === null) return null;
499
+ const result = pruneFilterNode(node as unknown);
500
+ if (result === undefined) return null;
501
+ return result as PlDataTableFilters;
502
+ }
503
+
504
+ /** Recursively converts and prunes a legacy v7 filter tree. Preserves meta
505
+ * fields (id/isExpanded/source/isSuppressed) on non-leaf nodes. Returns
506
+ * `undefined` when the subtree is empty after pruning. */
507
+ function pruneFilterNode(node: unknown): unknown | undefined {
508
+ if (!node || typeof node !== "object") return undefined;
509
+ const n = node as { type?: unknown };
510
+ if (n.type === "and" || n.type === "or") {
511
+ const filters = (n as { filters?: unknown[] }).filters ?? [];
512
+ const kept = filters.map((f) => pruneFilterNode(f)).filter((f): f is object => f !== undefined);
513
+ if (kept.length === 0) return undefined;
514
+ return { ...(n as object), type: n.type, filters: kept };
515
+ }
516
+ if (n.type === "not") {
517
+ const inner = pruneFilterNode((n as { filter?: unknown }).filter);
518
+ if (inner === undefined) return undefined;
519
+ return { ...(n as object), type: "not", filter: inner };
520
+ }
521
+ return convertLegacyLeaf(n);
522
+ }
523
+
524
+ function convertLegacyLeaf(leaf: {
525
+ type?: unknown;
526
+ column?: unknown;
527
+ rhs?: unknown;
528
+ }): unknown | undefined {
529
+ if (leaf.type === undefined) return leaf;
530
+ const result: Record<string, unknown> = { ...leaf };
531
+ if ("column" in result) {
532
+ const c = parseLegacyLeafColumn(result.column);
533
+ if (c === undefined) return undefined;
534
+ result.column = c;
535
+ }
536
+ if ("rhs" in result) {
537
+ const c = parseLegacyLeafColumn(result.rhs);
538
+ if (c === undefined) return undefined;
539
+ result.rhs = c;
540
+ }
541
+ return result;
542
+ }
543
+
544
+ function parseLegacyLeafColumn(s: unknown): PTableColumnId | undefined {
545
+ if (typeof s !== "string") return undefined;
546
+ const parsed = parseJsonSafely(s as CanonicalizedJson<PTableColumnId>);
547
+ if (!parsed || typeof parsed !== "object") return undefined;
548
+ if (!("type" in parsed) || !("id" in parsed)) return undefined;
549
+ const t = (parsed as { type: unknown }).type;
550
+ if (t !== "axis" && t !== "column") return undefined;
551
+ return parsed as PTableColumnId;
552
+ }
@@ -0,0 +1,188 @@
1
+ import type {
2
+ AnnotationDataStatus,
3
+ AxisId,
4
+ AxisSpec,
5
+ CanonicalizedJson,
6
+ ColumnUniversalId,
7
+ ListOptionBase,
8
+ PTableSorting,
9
+ PColumnIdAndSpec,
10
+ PTableHandle,
11
+ RootFilterSpec,
12
+ PTableColumnId,
13
+ PFrameHandle,
14
+ } from "@milaboratories/pl-model-common";
15
+ import type { FilterSpecLeaf } from "../../filters";
16
+ import { Nil } from "@milaboratories/helpers";
17
+
18
+ export type PlTableColumnIdJson = CanonicalizedJson<PTableColumnId>;
19
+
20
+ export type PlDataTableGridStateCore = {
21
+ /** Includes column ordering */
22
+ columnOrder?: {
23
+ /** All colIds in order */
24
+ orderedColIds: PlTableColumnIdJson[];
25
+ };
26
+ /** Includes current sort columns and direction */
27
+ sort?: {
28
+ /** Sorted columns and directions in order */
29
+ sortModel: {
30
+ /** Column Id to apply the sort to. */
31
+ colId: PlTableColumnIdJson;
32
+ /** Sort direction */
33
+ sort: "asc" | "desc";
34
+ }[];
35
+ };
36
+ /** Includes column visibility */
37
+ columnVisibility?: {
38
+ /** All colIds which were hidden */
39
+ hiddenColIds: PlTableColumnIdJson[];
40
+ };
41
+ };
42
+
43
+ export type PlDataTableSheet = {
44
+ /** spec of the axis to use */
45
+ axis: AxisSpec;
46
+ /** options to show in the filter dropdown */
47
+ options: ListOptionBase<string | number>[];
48
+ /** default (selected) value */
49
+ defaultValue?: string | number;
50
+ };
51
+
52
+ export type PlDataTableSheetState = {
53
+ /** id of the axis */
54
+ axisId: AxisId;
55
+ /** selected value */
56
+ value: string | number;
57
+ };
58
+
59
+ /** Tree-based filter state compatible with PlAdvancedFilter's RootFilter */
60
+ export type PlDataTableFilterMeta = {
61
+ id: number;
62
+ source?: "table-filter" | "table-search";
63
+ isExpanded?: boolean;
64
+ isSuppressed?: boolean;
65
+ };
66
+ export type PlDataTableFilterSpecLeaf = FilterSpecLeaf<PTableColumnId>;
67
+ export type PlDataTableFilters = RootFilterSpec<PlDataTableFilterSpecLeaf>;
68
+ export type PlDataTableFiltersWithMeta = RootFilterSpec<
69
+ PlDataTableFilterSpecLeaf,
70
+ PlDataTableFilterMeta
71
+ >;
72
+
73
+ export type PlDataTableStateV2CacheEntry = {
74
+ /** DataSource identifier for state management */
75
+ sourceId: string;
76
+ /** Internal ag-grid state */
77
+ gridState: PlDataTableGridStateCore;
78
+ /** Sheets state */
79
+ sheetsState: PlDataTableSheetState[];
80
+ /** User filters state (tree-based, compatible with PlAdvancedFilter) */
81
+ filtersState: null | PlDataTableFiltersWithMeta;
82
+ /** Default filters state from model (snapshot of defaults) */
83
+ defaultFiltersState: null | PlDataTableFiltersWithMeta;
84
+ /** Fast search string */
85
+ searchString?: string;
86
+ };
87
+
88
+ export type PTableParamsV2 =
89
+ | {
90
+ sourceId: null;
91
+ hiddenColIds: null;
92
+ sorting: null;
93
+ filters: null;
94
+ defaultFilters: null;
95
+ }
96
+ | {
97
+ sourceId: string;
98
+ hiddenColIds: null | PTableColumnId[];
99
+ sorting: null | PTableSorting[];
100
+ filters: null | PlDataTableFilters;
101
+ defaultFilters: null | PlDataTableFilters;
102
+ };
103
+
104
+ export type PlDataTableStateV2Normalized = {
105
+ /** Version for upgrades */
106
+ version: 8;
107
+ /** Internal states, LRU cache for 5 sourceId-s */
108
+ stateCache: PlDataTableStateV2CacheEntry[];
109
+ /** PTable params derived from the cache state for the current sourceId */
110
+ pTableParams: PTableParamsV2;
111
+ };
112
+
113
+ /** PlAgDataTable model */
114
+ export type PlDataTableModel = {
115
+ /** DataSource identifier for state management */
116
+ sourceId: null | string;
117
+ /** p-table including all columns, used to show the full specification of the table */
118
+ fullTableHandle?: PTableHandle;
119
+ /** p-frame handle */
120
+ fullPframeHandle?: PFrameHandle;
121
+ /** p-table including only visible columns, used to get the data */
122
+ visibleTableHandle?: PTableHandle;
123
+ /** Default filters from model options, surfaced for UI display */
124
+ defaultFilters?: Nil | PlDataTableFilters;
125
+ /**
126
+ * Sidecar rendering metadata kept out of the column specs: baking
127
+ * label/visibility/order/status into a spec via overrides changes the
128
+ * recipe's `ColumnUniversalId`, so the same physical column reached two ways
129
+ * (e.g. as a primary column and as a discovered axis label) would diverge
130
+ * into two ids and render twice. The UI overlays this onto the
131
+ * engine-emitted specs at render time.
132
+ */
133
+ columnsMeta?: PlDataTableColumnsMeta;
134
+ };
135
+
136
+ /** Display metadata for one column, applied by the UI over the emitted spec. */
137
+ export type PlDataTableColumnMeta = {
138
+ /** Disambiguated label (overrides the spec's intrinsic `pl7.app/label`). */
139
+ label?: string;
140
+ /** Effective visibility from rules + intrinsic annotations. */
141
+ visibility?: "default" | "optional" | "hidden";
142
+ /** Effective order priority (higher = further left). */
143
+ order?: number;
144
+ /** Per-column data status (set for visible columns only). */
145
+ status?: AnnotationDataStatus;
146
+ };
147
+
148
+ /** Display metadata for one axis, applied by the UI over the emitted spec. */
149
+ export type PlDataTableAxisMeta = {
150
+ /** Whether the UI must hide this axis (axes introduced only by secondary columns). */
151
+ hidden: boolean;
152
+ };
153
+
154
+ /** Sidecar display metadata for a table, keyed by emitted column/axis identity. */
155
+ export type PlDataTableColumnsMeta = {
156
+ /** Per-column metadata keyed by the emitted `ColumnUniversalId`. */
157
+ columns: Record<ColumnUniversalId, PlDataTableColumnMeta>;
158
+ /** Per-axis metadata keyed by the canonicalized `AxisId`. */
159
+ axes: Record<CanonicalizedJson<AxisId>, PlDataTableAxisMeta>;
160
+ };
161
+
162
+ export type CreatePlDataTableOps = {
163
+ /** Filters for columns and non-partitioned axes */
164
+ filters?: PlDataTableFilters;
165
+
166
+ /** Sorting to columns hidden from user */
167
+ sorting?: PTableSorting[];
168
+
169
+ /**
170
+ * Selects columns for which will be inner-joined to the table.
171
+ *
172
+ * Default behaviour: all columns are considered to be core
173
+ */
174
+ coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;
175
+
176
+ /**
177
+ * Determines how core columns should be joined together:
178
+ * inner - so user will only see records present in all core columns
179
+ * full - so user will only see records present in any of the core columns
180
+ *
181
+ * All non-core columns will be left joined to the table produced by the core
182
+ * columns, in other words records form the pool of non-core columns will only
183
+ * make their way into the final table if core table contains corresponding key.
184
+ *
185
+ * Default: 'full'
186
+ */
187
+ coreJoinType?: "inner" | "full";
188
+ };
@@ -2,15 +2,10 @@ import type { MultiColumnSelector, Option, PObjectSpec } from "@milaboratories/p
2
2
  import { multiColumnSelectorsToPredicate } from "@milaboratories/pl-model-common";
3
3
  import type { DeriveLabelsOptions } from "../../labels/derive_distinct_labels";
4
4
  import type { RenderCtxBase } from "../../render";
5
- import type { AnchoredColumnCollection } from "../../columns/column_collection_builder";
6
- import { ColumnCollectionBuilder } from "../../columns/column_collection_builder";
7
- import {
8
- ResultPoolColumnSnapshotProvider,
9
- collectCtxColumnSnapshotProviders,
10
- } from "../../columns/ctx_column_sources";
11
5
  import type { DatasetOption } from "./dataset_selection";
12
6
  import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./filter_discovery";
13
7
  import { enrichmentVariantsToRefs, findEnrichmentColumns } from "./enrichment_discovery";
8
+ import { ColumnsProvider, getCtxProviders } from "../../columns";
14
9
 
15
10
  type SpecPredicateOption =
16
11
  | MultiColumnSelector
@@ -63,70 +58,50 @@ export function buildDatasetOptions(
63
58
  if (options.length === 0) return [];
64
59
 
65
60
  const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);
66
- const pframeSpec = ctx.getService("pframeSpec");
67
61
 
68
62
  const withEnrichments = opts?.withEnrichments ?? false;
69
- const filterSource = new ResultPoolColumnSnapshotProvider(ctx.resultPool);
70
- // Hoisted out of the per-option loop: collectCtxColumnSnapshotProviders
71
- // walks the entire output tree, so calling it once per dataset option would
72
- // be O(N × tree).
73
- const enrichmentSources = withEnrichments ? collectCtxColumnSnapshotProviders(ctx) : undefined;
63
+ const filterSource = ColumnsProvider(ctx.ctx.getUpstreamBlockCtx());
64
+ // Hoist providers once: getCtxProviders walks the full output tree, so
65
+ // calling it per dataset option would be O(N × tree).
66
+ const enrichmentSources = withEnrichments ? getCtxProviders(ctx) : undefined;
74
67
 
75
68
  return options.map((primary: Option): DatasetOption => {
76
69
  const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);
77
70
  if (!datasetSpec) return { primary };
78
71
 
79
- // Allocations happen inside try so a throw on the second build()
80
- // still disposes the first collection.
81
- let filterCollection: AnchoredColumnCollection | undefined;
82
- let enrichmentCollection: AnchoredColumnCollection | undefined;
83
- try {
84
- // ResultPoolColumnSnapshotProvider is always complete;
85
- // allowPartialColumnList narrows the return type to non-undefined.
86
- filterCollection = new ColumnCollectionBuilder(pframeSpec)
87
- .addSource(filterSource)
88
- .build({ anchors: { main: datasetSpec }, allowPartialColumnList: true });
72
+ const filterMatches = findFilterColumns({
73
+ sources: [filterSource],
74
+ anchorSpec: datasetSpec,
75
+ }).filter((m) => filterPredicate(m.getSpec()!));
89
76
 
90
- enrichmentCollection =
91
- enrichmentSources !== undefined
92
- ? new ColumnCollectionBuilder(pframeSpec)
93
- .addSources(enrichmentSources)
94
- .build({ anchors: { main: datasetSpec } })
95
- : undefined;
77
+ const filters =
78
+ filterMatches.length === 0
79
+ ? undefined
80
+ : filterMatchesToOptions(filterMatches, {
81
+ refsByObjectId: refMap,
82
+ datasetSpec,
83
+ labelOptions: opts?.labelOptions,
84
+ });
96
85
 
97
- const filterMatches = findFilterColumns(filterCollection).filter((m) =>
98
- filterPredicate(m.column.spec),
99
- );
100
- const filters =
101
- filterMatches.length === 0
102
- ? undefined
103
- : filterMatchesToOptions(filterMatches, {
104
- refsByObjectId: refMap,
105
- datasetSpec,
106
- labelOptions: opts?.labelOptions,
107
- });
108
-
109
- let enrichments;
110
- if (enrichmentCollection && withEnrichments) {
111
- const enrichmentVariants = findEnrichmentColumns(enrichmentCollection, {
112
- maxHops: opts?.enrichmentMaxHops,
113
- ...(typeof withEnrichments === "function"
114
- ? { predicate: withEnrichments }
115
- : { include: withEnrichments }),
116
- });
117
- if (enrichmentVariants.length > 0) {
118
- enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);
119
- }
86
+ let enrichments;
87
+ if (enrichmentSources && withEnrichments) {
88
+ const enrichmentVariants = findEnrichmentColumns({
89
+ sources: enrichmentSources,
90
+ anchorSpec: datasetSpec,
91
+ maxHops: opts?.enrichmentMaxHops,
92
+ ...(typeof withEnrichments === "function"
93
+ ? { predicate: withEnrichments }
94
+ : { include: withEnrichments }),
95
+ });
96
+ if (enrichmentVariants.length > 0) {
97
+ enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);
120
98
  }
121
-
122
- return {
123
- primary,
124
- ...(filters !== undefined && filters.length > 0 ? { filters } : {}),
125
- ...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),
126
- };
127
- } finally {
128
- filterCollection?.dispose();
129
- enrichmentCollection?.dispose();
130
99
  }
100
+
101
+ return {
102
+ primary,
103
+ ...(filters !== undefined && filters.length > 0 ? { filters } : {}),
104
+ ...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),
105
+ };
131
106
  });
132
107
  }