@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
@@ -0,0 +1,98 @@
1
+ import type { AxisId } from "@milaboratories/pl-model-common";
2
+ import { canonicalizeAxisId, getAxisId, PColumnName } from "@milaboratories/pl-model-common";
3
+ import type { ColumnsSource } from "./column_providers";
4
+ import { ColumnsCollection, isColumnsCollection } from "./columns_collection";
5
+ import type { GlobalCfgRenderCtx } from "../render/internal";
6
+ import { TreeNodeAccessor } from "../render";
7
+ import { isColumnLazy } from "./column_lazy";
8
+
9
+ const RT_JSON = "PColumnData/Json";
10
+ const RT_JSON_PARTITIONED = "PColumnData/JsonPartitioned";
11
+
12
+ /**
13
+ * Build an `axisValuesLabels` callback by discovering `pl7.app/label` columns
14
+ * from the given source, eagerly materialising their value→label maps, and
15
+ * keying them by canonical axis id.
16
+ *
17
+ * Modern replacement for `ctx.resultPool.findLabels` — uses the new
18
+ * column-access mechanism (filtered {@link ColumnsCollection}) instead of
19
+ * walking the raw result pool.
20
+ *
21
+ * Pair with {@link expandByPartition} (or any consumer expecting the
22
+ * `(axisId) => Record<axisValue, label>` shape).
23
+ *
24
+ * Skips:
25
+ * - non-leaf recipes (only direct `ColumnLazy` data is read);
26
+ * - label columns whose `axesSpec.length !== 1`;
27
+ * - label columns whose data resource type isn't `PColumnData/Json` /
28
+ * `PColumnData/JsonPartitioned`.
29
+ */
30
+ export function deriveAxisValuesLabels(
31
+ source?: ColumnsCollection | (ColumnsCollection | ColumnsSource)[],
32
+ opts?: { ctx?: GlobalCfgRenderCtx },
33
+ ): (axisId: AxisId) => Record<string | number, string> | undefined {
34
+ const collection =
35
+ source === undefined
36
+ ? ColumnsCollection(undefined, opts)
37
+ : isColumnsCollection(source)
38
+ ? source
39
+ : ColumnsCollection(source, opts);
40
+
41
+ const labelCols = collection
42
+ .filter({ include: { name: [{ type: "exact", value: PColumnName.Label }] } })
43
+ .getColumns();
44
+
45
+ const byAxis = labelCols.reduce<Map<string, Record<string | number, string>>>((map, col) => {
46
+ if (!isColumnLazy(col)) return map;
47
+ const spec = col.getSpec();
48
+ if (spec.axesSpec.length !== 1) return map;
49
+
50
+ const data = col.getData();
51
+ if (!(data instanceof TreeNodeAccessor)) return map;
52
+
53
+ const labelMap = readLabelMap(data);
54
+ if (!labelMap) return map;
55
+
56
+ map.set(canonicalizeAxisId(getAxisId(spec.axesSpec[0])), labelMap);
57
+ return map;
58
+ }, new Map());
59
+
60
+ return (axisId) => byAxis.get(canonicalizeAxisId(axisId));
61
+ }
62
+
63
+ function readLabelMap(acc: TreeNodeAccessor): undefined | Record<string | number, string> {
64
+ const rt = acc.resourceType.name;
65
+
66
+ if (rt === RT_JSON) {
67
+ const json = acc.getDataAsJson<{ data?: Record<string, string> }>();
68
+ return json?.data ? parseLabelKeys(json.data) : undefined;
69
+ }
70
+
71
+ if (rt === RT_JSON_PARTITIONED) {
72
+ return acc.listInputFields().reduce<Record<string | number, string>>((merged, partKey) => {
73
+ const part = acc.resolve({
74
+ field: partKey,
75
+ assertFieldType: "Input",
76
+ ignoreError: true,
77
+ });
78
+ if (!part) return merged;
79
+ const json = part.getDataAsJson<{ data?: Record<string, string> }>();
80
+ if (!json?.data) return merged;
81
+ return Object.assign(merged, parseLabelKeys(json.data));
82
+ }, {});
83
+ }
84
+
85
+ return undefined;
86
+ }
87
+
88
+ function parseLabelKeys(raw: Record<string, string>): Record<string | number, string> {
89
+ return Object.entries(raw).reduce<Record<string | number, string>>((acc, [k, v]) => {
90
+ try {
91
+ const parsed = JSON.parse(k);
92
+ acc[Array.isArray(parsed) ? parsed[0] : parsed] = v;
93
+ } catch {
94
+ acc[k] = v;
95
+ }
96
+ return acc;
97
+ }, {});
98
+ }
@@ -1,13 +1,20 @@
1
- import type {
2
- AxisSpec,
3
- JsonPartitionedDataInfoEntries,
4
- PColumnSpec,
5
- PObjectId,
1
+ import {
2
+ Annotation,
3
+ canonicalizeAxisId,
4
+ getAxisId,
5
+ isColumnFilteredKey,
6
+ isColumnOverriddenKey,
7
+ parseColumnIdSafely,
8
+ parseColumnOverriddenId,
9
+ type AxisSpec,
10
+ type JsonPartitionedDataInfoEntries,
11
+ type PColumnSpec,
12
+ type PObjectId,
6
13
  } from "@milaboratories/pl-model-common";
7
- import { canonicalizeAxisId, getAxisId } from "@milaboratories/pl-model-common";
8
14
  import { describe, expect, test } from "vitest";
9
15
  import type { PColumnDataUniversal } from "../render/internal";
10
- import type { ColumnSnapshot } from "./column_snapshot";
16
+ import type { ColumnLazy } from "./column_lazy";
17
+ import { ColumnLazyImpl } from "./column_lazy";
11
18
  import { expandByPartition } from "./expand_by_partition";
12
19
 
13
20
  // --- Helpers ---
@@ -26,74 +33,62 @@ function createSpec(name: string, axes: AxisSpec[]): PColumnSpec {
26
33
  } as PColumnSpec;
27
34
  }
28
35
 
29
- /** Create a ready snapshot whose data.get() returns a JsonPartitioned DataInfoEntries. */
30
- function createReadySnapshot(
36
+ /** Build a synthetic ColumnLazy whose data is a JsonPartitioned DataInfoEntries. */
37
+ function createReadyLazy(
31
38
  id: string,
32
- columnSpec: PColumnSpec,
39
+ spec: PColumnSpec,
33
40
  partitionKeyLength: number,
34
41
  parts: { key: (string | number)[]; value: unknown }[],
35
- ): ColumnSnapshot<PObjectId> {
42
+ ): ColumnLazy {
36
43
  const dataEntries: JsonPartitionedDataInfoEntries<unknown> = {
37
44
  type: "JsonPartitioned",
38
45
  partitionKeyLength,
39
46
  parts,
40
47
  };
41
- return {
42
- id: id as PObjectId,
43
- spec: columnSpec,
44
- dataStatus: "ready",
45
- // convertOrParsePColumnData checks isDataInfoEntries first (duck-type),
46
- // so this works at runtime despite the PColumnDataUniversal type
47
- data: { get: () => dataEntries as unknown as PColumnDataUniversal },
48
- };
49
- }
50
-
51
- function createComputingSnapshot(id: string, columnSpec: PColumnSpec): ColumnSnapshot<PObjectId> {
52
- return {
48
+ // `data` is typed `PColumnDataUniversal` but `getUniquePartitionKeys`
49
+ // duck-types DataInfoEntries via `isDataInfoEntries`, so the JsonPartitioned
50
+ // payload works at runtime.
51
+ return ColumnLazyImpl.fromColumn({
53
52
  id: id as PObjectId,
54
- spec: columnSpec,
55
- dataStatus: "computing",
56
- data: {
57
- get: () => undefined,
58
- },
59
- };
53
+ spec,
54
+ data: dataEntries as unknown as PColumnDataUniversal,
55
+ });
60
56
  }
61
57
 
62
- function createAbsentSnapshot(id: string, columnSpec: PColumnSpec): ColumnSnapshot<PObjectId> {
63
- return {
58
+ function createComputingLazy(id: string, spec: PColumnSpec): ColumnLazy {
59
+ return ColumnLazyImpl.fromColumn({
64
60
  id: id as PObjectId,
65
- spec: columnSpec,
66
- dataStatus: "absent",
61
+ spec,
67
62
  data: undefined,
68
- };
63
+ });
69
64
  }
70
65
 
71
66
  interface Trace {
72
67
  type: string;
73
68
  label: string;
74
- importance: number;
69
+ importance?: number;
75
70
  }
76
71
 
77
- function extractTrace(snapshot: ColumnSnapshot<PObjectId>): Trace[] {
78
- const raw = snapshot.spec.annotations?.["pl7.app/trace"];
72
+ function extractTrace(recipe: { getSpec(): PColumnSpec }): Trace[] {
73
+ const raw = recipe.getSpec().annotations?.[Annotation.Trace];
79
74
  return raw ? (JSON.parse(raw) as Trace[]) : [];
80
75
  }
81
76
 
82
77
  // --- Tests ---
83
78
 
84
79
  describe("expandByPartition", () => {
85
- test("no split axes returns snapshots as-is", () => {
86
- const s = createReadySnapshot("col1", createSpec("c", [createAxis("a")]), 1, [
80
+ test("no split axes returns inputs unchanged", () => {
81
+ const s = createReadyLazy("col1", createSpec("c", [createAxis("a")]), 1, [
87
82
  { key: ["x"], value: {} },
88
83
  ]);
89
84
  const result = expandByPartition([s], []);
90
- expect(result.complete).toBe(true);
91
- expect(result.items).toHaveLength(1);
92
- expect(result.items[0]).toBe(s); // same reference
85
+ expect(result).toBeDefined();
86
+ expect(result).toHaveLength(1);
87
+ expect(result![0]).toBe(s); // same reference
93
88
  });
94
89
 
95
- test("single axis split produces K snapshots", () => {
96
- const s = createReadySnapshot(
90
+ test("single axis split produces K recipes", () => {
91
+ const s = createReadyLazy(
97
92
  "col1",
98
93
  createSpec("c", [createAxis("sample"), createAxis("gene")]),
99
94
  2,
@@ -105,20 +100,20 @@ describe("expandByPartition", () => {
105
100
  );
106
101
 
107
102
  const result = expandByPartition([s], [{ idx: 0 }]);
108
-
109
- expect(result.complete).toBe(true);
110
- // unique values on axis 0: s1, s2 → 2 snapshots
111
- expect(result.items).toHaveLength(2);
112
-
113
- // split axis removed from axesSpec
114
- for (const snap of result.items) {
115
- expect(snap.spec.axesSpec).toHaveLength(1);
116
- expect(snap.spec.axesSpec[0].name).toBe("gene");
103
+ expect(result).toBeDefined();
104
+ // unique values on axis 0: s1, s2 → 2 recipes
105
+ expect(result).toHaveLength(2);
106
+
107
+ // split axis removed from axesSpec on each recipe
108
+ for (const recipe of result!) {
109
+ const spec = recipe.getSpec();
110
+ expect(spec.axesSpec).toHaveLength(1);
111
+ expect(spec.axesSpec[0].name).toBe("gene");
117
112
  }
118
113
  });
119
114
 
120
- test("multi-axis split produces K1 x K2 snapshots", () => {
121
- const s = createReadySnapshot(
115
+ test("multi-axis split produces K1 x K2 recipes", () => {
116
+ const s = createReadyLazy(
122
117
  "col1",
123
118
  createSpec("c", [createAxis("a"), createAxis("b"), createAxis("value")]),
124
119
  2,
@@ -130,20 +125,20 @@ describe("expandByPartition", () => {
130
125
  );
131
126
 
132
127
  const result = expandByPartition([s], [{ idx: 0 }, { idx: 1 }]);
133
-
134
- expect(result.complete).toBe(true);
128
+ expect(result).toBeDefined();
135
129
  // a: a1, a2 (2) × b: b1, b2 (2) = 4
136
- expect(result.items).toHaveLength(4);
130
+ expect(result).toHaveLength(4);
137
131
 
138
132
  // both split axes removed, only "value" remains
139
- for (const snap of result.items) {
140
- expect(snap.spec.axesSpec).toHaveLength(1);
141
- expect(snap.spec.axesSpec[0].name).toBe("value");
133
+ for (const recipe of result!) {
134
+ const spec = recipe.getSpec();
135
+ expect(spec.axesSpec).toHaveLength(1);
136
+ expect(spec.axesSpec[0].name).toBe("value");
142
137
  }
143
138
  });
144
139
 
145
- test("trace annotations include split info", () => {
146
- const s = createReadySnapshot(
140
+ test("trace annotations include split info appended to base trace", () => {
141
+ const s = createReadyLazy(
147
142
  "col1",
148
143
  createSpec("c", [createAxis("sample"), createAxis("gene")]),
149
144
  1,
@@ -154,31 +149,53 @@ describe("expandByPartition", () => {
154
149
  );
155
150
 
156
151
  const result = expandByPartition([s], [{ idx: 0 }]);
157
- expect(result.complete).toBe(true);
158
- expect(result.items).toHaveLength(2);
152
+ expect(result).toBeDefined();
153
+ expect(result).toHaveLength(2);
159
154
 
160
- const trace0 = extractTrace(result.items[0]);
155
+ const expectedType = `split:${canonicalizeAxisId(getAxisId(createAxis("sample")))}`;
156
+
157
+ const trace0 = extractTrace(result![0]);
161
158
  expect(trace0).toEqual([
162
159
  {
163
- type: `split:${canonicalizeAxisId(getAxisId(createAxis("sample")))}`,
160
+ type: expectedType,
164
161
  label: "s1",
165
162
  importance: 1_000_000,
166
163
  },
167
164
  ]);
168
165
 
169
- const trace1 = extractTrace(result.items[1]);
166
+ const trace1 = extractTrace(result![1]);
170
167
  expect(trace1).toEqual([
171
168
  {
172
- type: `split:${canonicalizeAxisId(getAxisId(createAxis("sample")))}`,
169
+ type: expectedType,
173
170
  label: "s2",
174
171
  importance: 1_000_000,
175
172
  },
176
173
  ]);
177
174
  });
178
175
 
179
- test("axisLabels option resolves labels", () => {
176
+ test("existing trace is preserved and split entry is appended", () => {
177
+ const baseTrace = [{ type: "ingest", label: "Input" }];
178
+ const spec: PColumnSpec = {
179
+ ...createSpec("c", [createAxis("sample"), createAxis("gene")]),
180
+ annotations: {
181
+ [Annotation.Trace]: JSON.stringify(baseTrace),
182
+ },
183
+ };
184
+ const s = createReadyLazy("col1", spec, 1, [{ key: ["s1"], value: {} }]);
185
+
186
+ const result = expandByPartition([s], [{ idx: 0 }]);
187
+ expect(result).toBeDefined();
188
+ expect(result).toHaveLength(1);
189
+
190
+ const trace0 = extractTrace(result![0]);
191
+ expect(trace0[0]).toEqual({ type: "ingest", label: "Input" });
192
+ expect(trace0[1].type).toBe(`split:${canonicalizeAxisId(getAxisId(createAxis("sample")))}`);
193
+ expect(trace0[1].label).toBe("s1");
194
+ });
195
+
196
+ test("axisValuesLabels option resolves labels in trace entries", () => {
180
197
  const sampleAxis = createAxis("sample");
181
- const s = createReadySnapshot("col1", createSpec("c", [sampleAxis, createAxis("gene")]), 1, [
198
+ const s = createReadyLazy("col1", createSpec("c", [sampleAxis, createAxis("gene")]), 1, [
182
199
  { key: ["s1"], value: {} },
183
200
  { key: ["s2"], value: {} },
184
201
  ]);
@@ -189,32 +206,22 @@ describe("expandByPartition", () => {
189
206
  };
190
207
 
191
208
  const result = expandByPartition([s], [{ idx: 0 }], {
192
- axisLabels: () => labels,
209
+ axisValuesLabels: () => labels,
193
210
  });
194
211
 
195
- expect(result.complete).toBe(true);
196
- const trace0 = extractTrace(result.items[0]);
197
- expect(trace0[0].label).toBe("Sample One");
198
- const trace1 = extractTrace(result.items[1]);
199
- expect(trace1[0].label).toBe("Sample Two");
200
- });
201
-
202
- test("computing snapshot returns incomplete", () => {
203
- const s = createComputingSnapshot("col1", createSpec("c", [createAxis("a")]));
204
- const result = expandByPartition([s], [{ idx: 0 }]);
205
- expect(result.complete).toBe(false);
206
- expect(result.items).toHaveLength(0);
212
+ expect(result).toBeDefined();
213
+ expect(extractTrace(result![0])[0].label).toBe("Sample One");
214
+ expect(extractTrace(result![1])[0].label).toBe("Sample Two");
207
215
  });
208
216
 
209
- test("absent snapshot returns incomplete", () => {
210
- const s = createAbsentSnapshot("col1", createSpec("c", [createAxis("a")]));
217
+ test("computing input (data undefined) returns undefined", () => {
218
+ const s = createComputingLazy("col1", createSpec("c", [createAxis("a")]));
211
219
  const result = expandByPartition([s], [{ idx: 0 }]);
212
- expect(result.complete).toBe(false);
213
- expect(result.items).toHaveLength(0);
220
+ expect(result).toBeUndefined();
214
221
  });
215
222
 
216
- test("empty unique keys for an axis produces no snapshots for that column", () => {
217
- const s = createReadySnapshot(
223
+ test("empty unique keys for an axis produces no recipes for that column", () => {
224
+ const s = createReadyLazy(
218
225
  "col1",
219
226
  createSpec("c", [createAxis("a"), createAxis("b")]),
220
227
  2,
@@ -222,35 +229,64 @@ describe("expandByPartition", () => {
222
229
  );
223
230
 
224
231
  const result = expandByPartition([s], [{ idx: 0 }]);
225
- expect(result.complete).toBe(true);
226
- expect(result.items).toHaveLength(0);
232
+ expect(result).toBeDefined();
233
+ expect(result).toHaveLength(0);
227
234
  });
228
235
 
229
- test("filtered data is accessible on expanded snapshots", () => {
230
- const s = createReadySnapshot(
236
+ test("recipe ids are canonical Overridden<Filtered<inner>>", () => {
237
+ const s = createReadyLazy(
231
238
  "col1",
232
239
  createSpec("c", [createAxis("sample"), createAxis("gene")]),
233
240
  1,
234
241
  [
235
- { key: ["s1"], value: { payload: "data-s1" } },
236
- { key: ["s2"], value: { payload: "data-s2" } },
242
+ { key: ["s1"], value: {} },
243
+ { key: ["s2"], value: {} },
237
244
  ],
238
245
  );
239
246
 
240
247
  const result = expandByPartition([s], [{ idx: 0 }]);
241
- expect(result.complete).toBe(true);
242
- expect(result.items).toHaveLength(2);
243
-
244
- // Each expanded snapshot should have accessible data
245
- for (const snap of result.items) {
246
- expect(snap.data).toBeDefined();
247
- const data = snap.data!.get();
248
- expect(data).toBeDefined();
248
+ expect(result).toBeDefined();
249
+ expect(result).toHaveLength(2);
250
+
251
+ for (const recipe of result!) {
252
+ // Outer wrap is Overridden
253
+ const overridedKey = parseColumnOverriddenId(recipe.id);
254
+ expect(isColumnOverriddenKey(overridedKey)).toBe(true);
255
+ // Inner is a stringified Filtered id
256
+ expect(typeof overridedKey.source).toBe("string");
257
+ const innerParsed = parseColumnIdSafely(overridedKey.source);
258
+ expect(isColumnFilteredKey(innerParsed)).toBe(true);
249
259
  }
260
+
261
+ // Each recipe's id is distinct
262
+ const ids = new Set(result!.map((r) => r.id));
263
+ expect(ids.size).toBe(2);
264
+ });
265
+
266
+ test("domain override carries axis name → value", () => {
267
+ const s = createReadyLazy(
268
+ "col1",
269
+ createSpec("c", [createAxis("sample"), createAxis("gene")]),
270
+ 1,
271
+ [
272
+ { key: ["s1"], value: {} },
273
+ { key: ["s2"], value: {} },
274
+ ],
275
+ );
276
+
277
+ const result = expandByPartition([s], [{ idx: 0 }]);
278
+ expect(result).toBeDefined();
279
+ expect(result).toHaveLength(2);
280
+
281
+ const overrided0 = parseColumnOverriddenId(result![0].id);
282
+ expect(overrided0.specOverrides.domain).toEqual({ sample: "s1" });
283
+
284
+ const overrided1 = parseColumnOverriddenId(result![1].id);
285
+ expect(overrided1.specOverrides.domain).toEqual({ sample: "s2" });
250
286
  });
251
287
 
252
- test("multiple input snapshots are all expanded", () => {
253
- const s1 = createReadySnapshot(
288
+ test("multiple input columns are all expanded", () => {
289
+ const s1 = createReadyLazy(
254
290
  "col1",
255
291
  createSpec("c1", [createAxis("sample"), createAxis("gene")]),
256
292
  1,
@@ -259,7 +295,7 @@ describe("expandByPartition", () => {
259
295
  { key: ["s2"], value: {} },
260
296
  ],
261
297
  );
262
- const s2 = createReadySnapshot(
298
+ const s2 = createReadyLazy(
263
299
  "col2",
264
300
  createSpec("c2", [createAxis("sample"), createAxis("gene")]),
265
301
  1,
@@ -271,13 +307,13 @@ describe("expandByPartition", () => {
271
307
  );
272
308
 
273
309
  const result = expandByPartition([s1, s2], [{ idx: 0 }]);
274
- expect(result.complete).toBe(true);
310
+ expect(result).toBeDefined();
275
311
  // s1: 2 unique + s2: 3 unique = 5 total
276
- expect(result.items).toHaveLength(5);
312
+ expect(result).toHaveLength(5);
277
313
  });
278
314
 
279
315
  test("throws when split axis exceeds partition key length", () => {
280
- const s = createReadySnapshot(
316
+ const s = createReadyLazy(
281
317
  "col1",
282
318
  createSpec("c", [createAxis("a"), createAxis("b"), createAxis("c")]),
283
319
  1, // only 1 partition key