@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
@@ -1,484 +0,0 @@
1
- import type { AxisSpec, PColumnSpec, PObjectId } from "@milaboratories/pl-model-common";
2
- import { SpecDriver } from "@milaboratories/pf-spec-driver";
3
-
4
- import { afterEach, describe, expect, test } from "vitest";
5
- import type { ColumnSnapshotProvider } from "./column_snapshot_provider";
6
- import type { ColumnSnapshot } from "./column_snapshot";
7
- import { ColumnCollectionBuilder } from "./column_collection_builder";
8
-
9
- const drivers: SpecDriver[] = [];
10
-
11
- function createSpecFrameCtx() {
12
- const driver = new SpecDriver();
13
- drivers.push(driver);
14
- return driver;
15
- }
16
-
17
- afterEach(async () => {
18
- for (const driver of drivers) await driver.dispose();
19
- drivers.length = 0;
20
- });
21
-
22
- // --- Helpers ---
23
-
24
- /** Default axis used when none specified — WASM requires at least one axis. */
25
- const DEFAULT_AXIS: AxisSpec = { name: "id", type: "String" } as AxisSpec;
26
-
27
- function createSpec(
28
- name: string,
29
- options?: { domain?: Record<string, string>; axesSpec?: AxisSpec[] },
30
- ): PColumnSpec {
31
- return {
32
- kind: "PColumn",
33
- name,
34
- valueType: "Int",
35
- axesSpec: options?.axesSpec ?? [DEFAULT_AXIS],
36
- annotations: {},
37
- ...(options?.domain !== undefined ? { domain: options.domain } : {}),
38
- } as PColumnSpec;
39
- }
40
-
41
- function createSnapshot(
42
- id: string,
43
- spec: PColumnSpec,
44
- dataStatus: "ready" | "computing" | "absent" = "ready",
45
- ): ColumnSnapshot<PObjectId> {
46
- return {
47
- id: id as PObjectId,
48
- spec,
49
- dataStatus,
50
- data:
51
- dataStatus === "absent"
52
- ? undefined
53
- : { get: () => (dataStatus === "ready" ? ({} as never) : undefined) },
54
- };
55
- }
56
-
57
- function createProvider(
58
- snapshots: ColumnSnapshot<PObjectId>[],
59
- complete = true,
60
- ): ColumnSnapshotProvider {
61
- return {
62
- getAllColumns() {
63
- return snapshots;
64
- },
65
- isColumnListComplete() {
66
- return complete;
67
- },
68
- };
69
- }
70
-
71
- function sampleAxis(name: string, type = "String"): AxisSpec {
72
- return { name, type } as AxisSpec;
73
- }
74
-
75
- // --- Tests ---
76
-
77
- describe("ColumnCollectionBuilder", () => {
78
- test("empty builder returns empty collection", () => {
79
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
80
- const collection = builder.build();
81
- expect(collection).toBeDefined();
82
- expect(collection!.findColumns()).toEqual([]);
83
- });
84
-
85
- test("addSource returns this for chaining", () => {
86
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
87
- const result = builder.addSource([]);
88
- expect(result).toBe(builder);
89
- });
90
-
91
- test("build returns undefined when providers are incomplete", () => {
92
- const snap = createSnapshot("id1", createSpec("col1"));
93
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
94
- builder.addSource(createProvider([snap], false));
95
- expect(builder.build()).toBeUndefined();
96
- });
97
-
98
- test("build with allowPartialColumnList returns collection even when incomplete", () => {
99
- const snap = createSnapshot("id1", createSpec("col1"));
100
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
101
- builder.addSource(createProvider([snap], false));
102
-
103
- const collection = builder.build({ allowPartialColumnList: true });
104
- expect(collection).toBeDefined();
105
- expect(collection.findColumns()).toHaveLength(1);
106
- });
107
-
108
- test("allowPartialColumnList with complete providers returns collection", () => {
109
- const snap = createSnapshot("id1", createSpec("col1"));
110
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
111
- builder.addSource(createProvider([snap], true));
112
-
113
- const collection = builder.build({ allowPartialColumnList: true });
114
- expect(collection).toBeDefined();
115
- expect(collection.findColumns()).toHaveLength(1);
116
- });
117
- });
118
-
119
- describe("ColumnCollection lookup by id", () => {
120
- test("findColumns includes snapshot with existing id", () => {
121
- const spec = createSpec("col1");
122
- const snap = createSnapshot("id1", spec);
123
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
124
- builder.addSource([snap]);
125
-
126
- const collection = builder.build()!;
127
- const found = collection.findColumns().find((c) => c.id === ("id1" as PObjectId));
128
- expect(found).toBeDefined();
129
- expect(found!.spec.name).toBe("col1");
130
- });
131
-
132
- test("findColumns does not include missing id", () => {
133
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
134
- builder.addSource([createSnapshot("id1", createSpec("col1"))]);
135
-
136
- const collection = builder.build()!;
137
- const found = collection.findColumns().find((c) => c.id === ("missing" as PObjectId));
138
- expect(found).toBeUndefined();
139
- });
140
- });
141
-
142
- describe("ColumnCollection.findColumns", () => {
143
- test("no options returns all columns", () => {
144
- const s1 = createSnapshot("id1", createSpec("col1"));
145
- const s2 = createSnapshot("id2", createSpec("col2"));
146
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
147
- builder.addSource([s1, s2]);
148
-
149
- const collection = builder.build()!;
150
- expect(collection.findColumns()).toHaveLength(2);
151
- });
152
-
153
- test("exclude filters out matching columns", () => {
154
- const s1 = createSnapshot("id1", createSpec("col1"));
155
- const s2 = createSnapshot("id2", createSpec("col2"));
156
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
157
- builder.addSource([s1, s2]);
158
-
159
- const collection = builder.build()!;
160
- const results = collection.findColumns({ exclude: { name: "col1" } });
161
- expect(results).toHaveLength(1);
162
- expect(results[0].spec.name).toBe("col2");
163
- });
164
-
165
- test("include filters by exact name among disjoint-axis columns", () => {
166
- const vdjAxis = sampleAxis("pl7.app/vdj/clonotypeKey");
167
- const itemAxis = sampleAxis("item");
168
-
169
- const vdjColumns = Array.from({ length: 10 }, (_, i) =>
170
- createSnapshot(`vdj${i}`, createSpec(`pl7.app/vdj/col${i}`, { axesSpec: [vdjAxis] })),
171
- );
172
- const mockScore = createSnapshot("mock", createSpec("mock_score", { axesSpec: [itemAxis] }));
173
-
174
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
175
- builder.addSource([...vdjColumns, mockScore]);
176
-
177
- const collection = builder.build()!;
178
- const results = collection.findColumns({
179
- include: [{ name: [{ type: "exact", value: "mock_score" }] }],
180
- });
181
-
182
- expect(results).toHaveLength(1);
183
- expect(results[0].spec.name).toBe("mock_score");
184
- });
185
- });
186
-
187
- describe("dedup by native ID", () => {
188
- test("first source wins when specs have same native ID", () => {
189
- const spec = createSpec("col1");
190
- const snap1 = createSnapshot("id-first", spec);
191
- const snap2 = createSnapshot("id-second", spec);
192
-
193
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
194
- builder.addSource([snap1]);
195
- builder.addSource([snap2]);
196
-
197
- const collection = builder.build()!;
198
- const all = collection.findColumns();
199
- expect(all).toHaveLength(1);
200
- expect(all[0].id).toBe("id-first");
201
- });
202
-
203
- test("different specs are not deduped", () => {
204
- const snap1 = createSnapshot("id1", createSpec("col1"));
205
- const snap2 = createSnapshot("id2", createSpec("col2"));
206
-
207
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
208
- builder.addSource([snap1]);
209
- builder.addSource([snap2]);
210
-
211
- const collection = builder.build()!;
212
- expect(collection.findColumns()).toHaveLength(2);
213
- });
214
- });
215
-
216
- describe("data status handling", () => {
217
- test("ready column data is accessible", () => {
218
- const data = { someKey: "someValue" };
219
- const snap: ColumnSnapshot<PObjectId> = {
220
- id: "id1" as PObjectId,
221
- spec: createSpec("col1"),
222
- dataStatus: "ready",
223
- data: { get: () => data as never },
224
- };
225
-
226
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
227
- builder.addSource([snap]);
228
- const collection = builder.build()!;
229
-
230
- const found = collection.findColumns().find((c) => c.id === ("id1" as PObjectId))!;
231
- expect(found.dataStatus).toBe("ready");
232
- expect(found.data).toBeDefined();
233
- expect(found.data!.get()).toBe(data);
234
- });
235
-
236
- test("computing column data returns undefined", () => {
237
- const snap = createSnapshot("id1", createSpec("col1"), "computing");
238
-
239
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
240
- builder.addSource([snap]);
241
- const collection = builder.build()!;
242
-
243
- const found = collection.findColumns().find((c) => c.id === ("id1" as PObjectId))!;
244
- expect(found.dataStatus).toBe("computing");
245
- expect(found.data).toBeDefined();
246
-
247
- const result = found.data!.get();
248
- expect(result).toBeUndefined();
249
- });
250
-
251
- test("absent column has no data accessor", () => {
252
- const snap = createSnapshot("id1", createSpec("col1"), "absent");
253
-
254
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
255
- builder.addSource([snap]);
256
- const collection = builder.build()!;
257
-
258
- const found = collection.findColumns().find((c) => c.id === ("id1" as PObjectId))!;
259
- expect(found.dataStatus).toBe("absent");
260
- expect(found.data).toBeUndefined();
261
- });
262
- });
263
-
264
- describe("multiple providers", () => {
265
- test("columns from multiple sources are merged", () => {
266
- const s1 = createSnapshot("id1", createSpec("col1"));
267
- const s2 = createSnapshot("id2", createSpec("col2"));
268
-
269
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
270
- builder.addSource([s1]);
271
- builder.addSource([s2]);
272
-
273
- const collection = builder.build()!;
274
- expect(collection.findColumns()).toHaveLength(2);
275
- });
276
-
277
- test("build returns undefined if any provider is incomplete", () => {
278
- const s1 = createSnapshot("id1", createSpec("col1"));
279
- const s2 = createSnapshot("id2", createSpec("col2"));
280
-
281
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
282
- builder.addSource(createProvider([s1], true));
283
- builder.addSource(createProvider([s2], false));
284
-
285
- expect(builder.build()).toBeUndefined();
286
- });
287
-
288
- test("allowPartialColumnList returns collection when any provider incomplete", () => {
289
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
290
- builder.addSource(createProvider([createSnapshot("id1", createSpec("col1"))], true));
291
- builder.addSource(createProvider([createSnapshot("id2", createSpec("col2"))], false));
292
-
293
- const collection = builder.build({ allowPartialColumnList: true });
294
- expect(collection).toBeDefined();
295
- expect(collection.findColumns()).toHaveLength(2);
296
- });
297
- });
298
-
299
- describe("AnchoredColumnCollection", () => {
300
- // The anchor spec must also exist as a source column — the new implementation
301
- // resolves PColumnSpec anchors by matching native ID in the collected columns.
302
- const anchorSpec = createSpec("anchor-col", {
303
- axesSpec: [sampleAxis("sample"), sampleAxis("gene")],
304
- });
305
- const anchorSnap = createSnapshot("anchor-snap-id", anchorSpec);
306
-
307
- test("build with PColumnSpec anchor returns anchored collection", () => {
308
- const s1 = createSnapshot("id1", createSpec("col1", { axesSpec: [sampleAxis("sample")] }));
309
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
310
- // anchorSnap must be in sources so resolveAnchorMap can find it by native ID
311
- builder.addSource([s1, anchorSnap]);
312
-
313
- const collection = builder.build({ anchors: { main: anchorSpec } });
314
- expect(collection).toBeDefined();
315
- });
316
-
317
- test("build with PObjectId anchor resolves from sources", () => {
318
- const spec = createSpec("col1", { axesSpec: [sampleAxis("sample")] });
319
- const snap = createSnapshot("anchor-id", spec);
320
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
321
- builder.addSource([snap]);
322
-
323
- const collection = builder.build({ anchors: { main: "anchor-id" as PObjectId } });
324
- expect(collection).toBeDefined();
325
- });
326
-
327
- test("build with unknown PObjectId anchor throws", () => {
328
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
329
- builder.addSource([createSnapshot("id1", createSpec("col1"))]);
330
-
331
- expect(() => builder.build({ anchors: { main: "missing" as PObjectId } })).toThrow(
332
- /not found in sources/,
333
- );
334
- });
335
-
336
- test("findColumns surfaces column by original PObjectId", () => {
337
- const spec = createSpec("col1", { axesSpec: [sampleAxis("sample")] });
338
- const snap = createSnapshot("id1", spec);
339
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
340
- builder.addSource([snap, anchorSnap]);
341
-
342
- const collection = builder.build({ anchors: { main: anchorSpec } })!;
343
-
344
- const matches = collection.findColumns();
345
- const found = matches.find((m) => m.column.id === ("id1" as PObjectId));
346
- expect(found).toBeDefined();
347
- expect(found!.column.spec.name).toBe("col1");
348
- });
349
-
350
- test("findColumns does not include unknown id", () => {
351
- const snap = createSnapshot("id1", createSpec("col1", { axesSpec: [sampleAxis("sample")] }));
352
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
353
- builder.addSource([snap, anchorSnap]);
354
-
355
- const collection = builder.build({ anchors: { main: anchorSpec } })!;
356
- const found = collection
357
- .findColumns()
358
- .find((m) => m.column.id === ("not-a-real-id" as PObjectId));
359
- expect(found).toBeUndefined();
360
- });
361
-
362
- test("getAnchors returns resolved anchor map", () => {
363
- const spec = createSpec("col1", { axesSpec: [sampleAxis("sample")] });
364
- const snap = createSnapshot("id1", spec);
365
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
366
- builder.addSource([snap, anchorSnap]);
367
-
368
- const collection = builder.build({ anchors: { main: anchorSpec } })!;
369
- const anchors = collection.getAnchors();
370
- expect(anchors.size).toBe(1);
371
- expect(anchors.get("main")).toBeDefined();
372
- expect(anchors.get("main")!.spec.name).toBe("anchor-col");
373
- });
374
-
375
- test("findColumns returns ColumnMatch with column id and variants", () => {
376
- const spec = createSpec("col1", { axesSpec: [sampleAxis("sample")] });
377
- const snap = createSnapshot("id1", spec);
378
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
379
- // anchorSnap itself also appears in findColumns results (axes ⊆ anchor axes)
380
- builder.addSource([snap, anchorSnap]);
381
-
382
- const collection = builder.build({ anchors: { main: anchorSpec } })!;
383
- const matches = collection.findColumns();
384
-
385
- // col1 + anchor-col are both discovered
386
- expect(matches.length).toBeGreaterThanOrEqual(1);
387
- const col1Match = matches.find((m) => m.column.spec.name === "col1")!;
388
- expect(col1Match).toBeDefined();
389
- expect(col1Match.column.id).toBe("id1");
390
- expect(col1Match.variants).toBeDefined();
391
- });
392
-
393
- test("variants carry forQueries keyed by anchor PObjectId", () => {
394
- const spec = createSpec("col1", { axesSpec: [sampleAxis("sample")] });
395
- const snap = createSnapshot("id1", spec);
396
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
397
- builder.addSource([snap, anchorSnap]);
398
-
399
- const collection = builder.build({ anchors: { main: anchorSpec } })!;
400
- const matches = collection.findColumns();
401
- const col1Match = matches.find((m) => m.column.spec.name === "col1")!;
402
-
403
- expect(col1Match.variants.length).toBeGreaterThan(0);
404
- for (const v of col1Match.variants) {
405
- expect(v.qualifications.forQueries).toBeUndefined();
406
- expect(v.qualifications.forHit).toBeUndefined();
407
- }
408
- });
409
-
410
- test("anchors sharing same axes group produce forQueries entries pointing to same array", () => {
411
- // Two anchors with identical axesSpec share an axes-group bucket in the reverse index.
412
- const sharedAxes = [sampleAxis("sample"), sampleAxis("gene")];
413
- const anchorA = createSpec("anchor-a", { axesSpec: sharedAxes });
414
- const anchorB = createSpec("anchor-b", { axesSpec: sharedAxes });
415
- const anchorASnap = createSnapshot("anchor-a-id", anchorA);
416
- const anchorBSnap = createSnapshot("anchor-b-id", anchorB);
417
-
418
- const colSpec = createSpec("c1", { axesSpec: [sampleAxis("sample")] });
419
- const colSnap = createSnapshot("c1-id", colSpec);
420
-
421
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
422
- builder.addSource([colSnap, anchorASnap, anchorBSnap]);
423
-
424
- const collection = builder.build({ anchors: { a: anchorA, b: anchorB } })!;
425
- const matches = collection.findColumns();
426
- const c1 = matches.find((m) => m.column.spec.name === "c1")!;
427
- expect(c1).toBeDefined();
428
-
429
- for (const v of c1.variants) {
430
- const forQueries = v.qualifications.forQueries;
431
- if (forQueries && anchorASnap.id in forQueries && anchorBSnap.id in forQueries) {
432
- // Shared axes group → equal qualifications for both anchor keys.
433
- expect(forQueries[anchorASnap.id]).toStrictEqual(forQueries[anchorBSnap.id]);
434
- }
435
- }
436
- });
437
-
438
- test("findColumns exclude filters out matching columns", () => {
439
- const snap1 = createSnapshot("id1", createSpec("col1", { axesSpec: [sampleAxis("sample")] }));
440
- const snap2 = createSnapshot("id2", createSpec("col2", { axesSpec: [sampleAxis("sample")] }));
441
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
442
- builder.addSource([snap1, snap2, anchorSnap]);
443
-
444
- const collection = builder.build({ anchors: { main: anchorSpec } })!;
445
- const results = collection.findColumns({ exclude: { name: "col1" } });
446
- expect(results.every((r) => r.column.spec.name !== "col1")).toBe(true);
447
- expect(results.some((r) => r.column.spec.name === "col2")).toBe(true);
448
- });
449
-
450
- test("allowPartialColumnList with anchors returns collection when incomplete", () => {
451
- const snap = createSnapshot("id1", createSpec("col1", { axesSpec: [sampleAxis("sample")] }));
452
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
453
- builder.addSource(createProvider([snap, anchorSnap], false));
454
-
455
- const collection = builder.build({
456
- anchors: { main: anchorSpec },
457
- allowPartialColumnList: true,
458
- });
459
- expect(collection).toBeDefined();
460
- });
461
-
462
- test("build returns undefined with anchors when incomplete and no allowPartial", () => {
463
- const snap = createSnapshot("id1", createSpec("col1", { axesSpec: [sampleAxis("sample")] }));
464
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
465
- builder.addSource(createProvider([snap], false));
466
-
467
- const result = builder.build({ anchors: { main: anchorSpec } });
468
- expect(result).toBeUndefined();
469
- });
470
-
471
- test("data status is preserved through anchored snapshots", () => {
472
- const spec = createSpec("computing-col", { axesSpec: [sampleAxis("sample")] });
473
- const snap = createSnapshot("id1", spec, "computing");
474
-
475
- const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
476
- builder.addSource([snap, anchorSnap]);
477
-
478
- const collection = builder.build({ anchors: { main: anchorSpec } })!;
479
-
480
- const found = collection.findColumns().find((m) => m.column.id === ("id1" as PObjectId))!;
481
- expect(found.column.dataStatus).toBe("computing");
482
- expect(found.column.data!.get()).toBeUndefined();
483
- });
484
- });