@platforma-sdk/model 1.58.5 → 1.58.9

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 (365) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +43 -0
  2. package/dist/_virtual/_rolldown/runtime.js +18 -0
  3. package/dist/annotations/converter.cjs +15 -20
  4. package/dist/annotations/converter.cjs.map +1 -1
  5. package/dist/annotations/converter.d.ts +6 -2
  6. package/dist/annotations/converter.js +14 -18
  7. package/dist/annotations/converter.js.map +1 -1
  8. package/dist/annotations/index.cjs +1 -0
  9. package/dist/annotations/index.d.ts +2 -3
  10. package/dist/annotations/index.js +1 -0
  11. package/dist/annotations/types.d.ts +21 -16
  12. package/dist/bconfig/index.cjs +2 -0
  13. package/dist/bconfig/index.d.ts +5 -6
  14. package/dist/bconfig/index.js +2 -0
  15. package/dist/bconfig/lambdas.d.ts +52 -52
  16. package/dist/bconfig/normalization.cjs +13 -18
  17. package/dist/bconfig/normalization.cjs.map +1 -1
  18. package/dist/bconfig/normalization.d.ts +10 -6
  19. package/dist/bconfig/normalization.js +12 -16
  20. package/dist/bconfig/normalization.js.map +1 -1
  21. package/dist/bconfig/types.cjs +4 -3
  22. package/dist/bconfig/types.cjs.map +1 -1
  23. package/dist/bconfig/types.d.ts +10 -5
  24. package/dist/bconfig/types.js +4 -2
  25. package/dist/bconfig/types.js.map +1 -1
  26. package/dist/bconfig/util.d.ts +7 -4
  27. package/dist/bconfig/v3.d.ts +10 -6
  28. package/dist/block_api_v1.d.ts +62 -58
  29. package/dist/block_api_v2.d.ts +51 -47
  30. package/dist/block_api_v3.d.ts +33 -29
  31. package/dist/block_migrations.cjs +481 -413
  32. package/dist/block_migrations.cjs.map +1 -1
  33. package/dist/block_migrations.d.ts +258 -204
  34. package/dist/block_migrations.js +482 -408
  35. package/dist/block_migrations.js.map +1 -1
  36. package/dist/block_model.cjs +312 -343
  37. package/dist/block_model.cjs.map +1 -1
  38. package/dist/block_model.d.ts +143 -147
  39. package/dist/block_model.js +312 -341
  40. package/dist/block_model.js.map +1 -1
  41. package/dist/block_model_legacy.cjs +231 -255
  42. package/dist/block_model_legacy.cjs.map +1 -1
  43. package/dist/block_model_legacy.d.ts +108 -106
  44. package/dist/block_model_legacy.js +231 -253
  45. package/dist/block_model_legacy.js.map +1 -1
  46. package/dist/block_state_patch.d.ts +10 -10
  47. package/dist/block_state_util.cjs +15 -19
  48. package/dist/block_state_util.cjs.map +1 -1
  49. package/dist/block_state_util.d.ts +14 -13
  50. package/dist/block_state_util.js +15 -18
  51. package/dist/block_state_util.js.map +1 -1
  52. package/dist/block_storage.cjs +233 -238
  53. package/dist/block_storage.cjs.map +1 -1
  54. package/dist/block_storage.d.ts +62 -78
  55. package/dist/block_storage.js +234 -237
  56. package/dist/block_storage.js.map +1 -1
  57. package/dist/block_storage_callbacks.cjs +156 -195
  58. package/dist/block_storage_callbacks.cjs.map +1 -1
  59. package/dist/block_storage_callbacks.js +156 -192
  60. package/dist/block_storage_callbacks.js.map +1 -1
  61. package/dist/block_storage_facade.cjs +29 -85
  62. package/dist/block_storage_facade.cjs.map +1 -1
  63. package/dist/block_storage_facade.d.ts +83 -126
  64. package/dist/block_storage_facade.js +29 -83
  65. package/dist/block_storage_facade.js.map +1 -1
  66. package/dist/components/PFrameForGraphs.cjs +26 -24
  67. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  68. package/dist/components/PFrameForGraphs.d.ts +12 -7
  69. package/dist/components/PFrameForGraphs.js +25 -22
  70. package/dist/components/PFrameForGraphs.js.map +1 -1
  71. package/dist/components/PlAnnotations/filter.d.ts +62 -79
  72. package/dist/components/PlAnnotations/filters_ui.cjs +135 -171
  73. package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
  74. package/dist/components/PlAnnotations/filters_ui.d.ts +48 -46
  75. package/dist/components/PlAnnotations/filters_ui.js +135 -170
  76. package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
  77. package/dist/components/PlAnnotations/index.d.ts +2 -3
  78. package/dist/components/PlDataTable/index.cjs +2 -0
  79. package/dist/components/PlDataTable/index.d.ts +3 -5
  80. package/dist/components/PlDataTable/index.js +2 -0
  81. package/dist/components/PlDataTable/labels.cjs +59 -81
  82. package/dist/components/PlDataTable/labels.cjs.map +1 -1
  83. package/dist/components/PlDataTable/labels.js +58 -79
  84. package/dist/components/PlDataTable/labels.js.map +1 -1
  85. package/dist/components/PlDataTable/state-migration.cjs +186 -144
  86. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  87. package/dist/components/PlDataTable/state-migration.d.ts +85 -82
  88. package/dist/components/PlDataTable/state-migration.js +185 -142
  89. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  90. package/dist/components/PlDataTable/table.cjs +172 -194
  91. package/dist/components/PlDataTable/table.cjs.map +1 -1
  92. package/dist/components/PlDataTable/table.d.ts +16 -12
  93. package/dist/components/PlDataTable/table.js +171 -192
  94. package/dist/components/PlDataTable/table.js.map +1 -1
  95. package/dist/components/PlDataTable/v4.d.ts +84 -119
  96. package/dist/components/PlDataTable/v5.d.ts +80 -103
  97. package/dist/components/PlMultiSequenceAlignment.cjs +27 -29
  98. package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
  99. package/dist/components/PlMultiSequenceAlignment.d.ts +36 -27
  100. package/dist/components/PlMultiSequenceAlignment.js +26 -27
  101. package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
  102. package/dist/components/PlSelectionModel.cjs +7 -6
  103. package/dist/components/PlSelectionModel.cjs.map +1 -1
  104. package/dist/components/PlSelectionModel.d.ts +10 -8
  105. package/dist/components/PlSelectionModel.js +7 -5
  106. package/dist/components/PlSelectionModel.js.map +1 -1
  107. package/dist/components/index.cjs +8 -0
  108. package/dist/components/index.d.ts +11 -6
  109. package/dist/components/index.js +8 -0
  110. package/dist/config/actions.cjs +138 -171
  111. package/dist/config/actions.cjs.map +1 -1
  112. package/dist/config/actions.d.ts +47 -47
  113. package/dist/config/actions.js +146 -178
  114. package/dist/config/actions.js.map +1 -1
  115. package/dist/config/actions_kinds.d.ts +114 -121
  116. package/dist/config/index.cjs +1 -0
  117. package/dist/config/index.d.ts +6 -7
  118. package/dist/config/index.js +1 -0
  119. package/dist/config/model.d.ts +131 -127
  120. package/dist/config/model_meta.d.ts +4 -1
  121. package/dist/config/type_engine.d.ts +22 -21
  122. package/dist/config/type_util.d.ts +12 -10
  123. package/dist/env_value.cjs +5 -6
  124. package/dist/env_value.cjs.map +1 -1
  125. package/dist/env_value.d.ts +4 -1
  126. package/dist/env_value.js +5 -5
  127. package/dist/env_value.js.map +1 -1
  128. package/dist/filters/converters/filterToQuery.cjs +273 -239
  129. package/dist/filters/converters/filterToQuery.cjs.map +1 -1
  130. package/dist/filters/converters/filterToQuery.d.ts +6 -2
  131. package/dist/filters/converters/filterToQuery.js +272 -237
  132. package/dist/filters/converters/filterToQuery.js.map +1 -1
  133. package/dist/filters/converters/filterUiToExpressionImpl.cjs +56 -85
  134. package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
  135. package/dist/filters/converters/filterUiToExpressionImpl.d.ts +8 -4
  136. package/dist/filters/converters/filterUiToExpressionImpl.js +55 -83
  137. package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
  138. package/dist/filters/converters/index.cjs +2 -0
  139. package/dist/filters/converters/index.d.ts +2 -3
  140. package/dist/filters/converters/index.js +2 -0
  141. package/dist/filters/distill.cjs +59 -60
  142. package/dist/filters/distill.cjs.map +1 -1
  143. package/dist/filters/distill.d.ts +6 -3
  144. package/dist/filters/distill.js +58 -58
  145. package/dist/filters/distill.js.map +1 -1
  146. package/dist/filters/index.cjs +4 -0
  147. package/dist/filters/index.d.ts +5 -4
  148. package/dist/filters/index.js +4 -0
  149. package/dist/filters/traverse.cjs +31 -40
  150. package/dist/filters/traverse.cjs.map +1 -1
  151. package/dist/filters/traverse.js +31 -39
  152. package/dist/filters/traverse.js.map +1 -1
  153. package/dist/filters/types.d.ts +10 -7
  154. package/dist/index.cjs +193 -187
  155. package/dist/index.d.ts +61 -28
  156. package/dist/index.js +49 -41
  157. package/dist/internal.cjs +48 -62
  158. package/dist/internal.cjs.map +1 -1
  159. package/dist/internal.js +49 -60
  160. package/dist/internal.js.map +1 -1
  161. package/dist/package.cjs +12 -0
  162. package/dist/package.cjs.map +1 -0
  163. package/dist/package.js +6 -0
  164. package/dist/package.js.map +1 -0
  165. package/dist/pframe.cjs +32 -37
  166. package/dist/pframe.cjs.map +1 -1
  167. package/dist/pframe.d.ts +14 -10
  168. package/dist/pframe.js +32 -35
  169. package/dist/pframe.js.map +1 -1
  170. package/dist/pframe_utils/axes.cjs +81 -114
  171. package/dist/pframe_utils/axes.cjs.map +1 -1
  172. package/dist/pframe_utils/axes.d.ts +10 -13
  173. package/dist/pframe_utils/axes.js +80 -112
  174. package/dist/pframe_utils/axes.js.map +1 -1
  175. package/dist/pframe_utils/columns.cjs +61 -81
  176. package/dist/pframe_utils/columns.cjs.map +1 -1
  177. package/dist/pframe_utils/columns.d.ts +15 -6
  178. package/dist/pframe_utils/columns.js +60 -79
  179. package/dist/pframe_utils/columns.js.map +1 -1
  180. package/dist/pframe_utils/index.cjs +232 -253
  181. package/dist/pframe_utils/index.cjs.map +1 -1
  182. package/dist/pframe_utils/index.d.ts +39 -35
  183. package/dist/pframe_utils/index.js +231 -251
  184. package/dist/pframe_utils/index.js.map +1 -1
  185. package/dist/platforma.d.ts +48 -46
  186. package/dist/plugin_handle.cjs +6 -14
  187. package/dist/plugin_handle.cjs.map +1 -1
  188. package/dist/plugin_handle.d.ts +20 -25
  189. package/dist/plugin_handle.js +6 -13
  190. package/dist/plugin_handle.js.map +1 -1
  191. package/dist/plugin_model.cjs +364 -163
  192. package/dist/plugin_model.cjs.map +1 -1
  193. package/dist/plugin_model.d.ts +280 -129
  194. package/dist/plugin_model.js +362 -163
  195. package/dist/plugin_model.js.map +1 -1
  196. package/dist/raw_globals.cjs +10 -22
  197. package/dist/raw_globals.cjs.map +1 -1
  198. package/dist/raw_globals.d.ts +8 -5
  199. package/dist/raw_globals.js +10 -20
  200. package/dist/raw_globals.js.map +1 -1
  201. package/dist/ref_util.cjs +14 -13
  202. package/dist/ref_util.cjs.map +1 -1
  203. package/dist/ref_util.d.ts +18 -12
  204. package/dist/ref_util.js +14 -11
  205. package/dist/ref_util.js.map +1 -1
  206. package/dist/render/accessor.cjs +213 -226
  207. package/dist/render/accessor.cjs.map +1 -1
  208. package/dist/render/accessor.d.ts +115 -120
  209. package/dist/render/accessor.js +212 -224
  210. package/dist/render/accessor.js.map +1 -1
  211. package/dist/render/api.cjs +478 -580
  212. package/dist/render/api.cjs.map +1 -1
  213. package/dist/render/api.d.ts +207 -209
  214. package/dist/render/api.js +476 -578
  215. package/dist/render/api.js.map +1 -1
  216. package/dist/render/future.cjs +28 -32
  217. package/dist/render/future.cjs.map +1 -1
  218. package/dist/render/future.d.ts +15 -11
  219. package/dist/render/future.js +28 -30
  220. package/dist/render/future.js.map +1 -1
  221. package/dist/render/index.cjs +8 -0
  222. package/dist/render/index.d.ts +10 -8
  223. package/dist/render/index.js +8 -0
  224. package/dist/render/internal.cjs +33 -29
  225. package/dist/render/internal.cjs.map +1 -1
  226. package/dist/render/internal.d.ts +78 -72
  227. package/dist/render/internal.js +29 -26
  228. package/dist/render/internal.js.map +1 -1
  229. package/dist/render/traversal_ops.d.ts +42 -43
  230. package/dist/render/util/axis_filtering.cjs +63 -86
  231. package/dist/render/util/axis_filtering.cjs.map +1 -1
  232. package/dist/render/util/axis_filtering.d.ts +10 -7
  233. package/dist/render/util/axis_filtering.js +63 -85
  234. package/dist/render/util/axis_filtering.js.map +1 -1
  235. package/dist/render/util/column_collection.cjs +266 -321
  236. package/dist/render/util/column_collection.cjs.map +1 -1
  237. package/dist/render/util/column_collection.d.ts +47 -47
  238. package/dist/render/util/column_collection.js +264 -319
  239. package/dist/render/util/column_collection.js.map +1 -1
  240. package/dist/render/util/index.cjs +4 -0
  241. package/dist/render/util/index.d.ts +4 -5
  242. package/dist/render/util/index.js +4 -0
  243. package/dist/render/util/label.cjs +129 -163
  244. package/dist/render/util/label.cjs.map +1 -1
  245. package/dist/render/util/label.d.ts +45 -46
  246. package/dist/render/util/label.js +128 -161
  247. package/dist/render/util/label.js.map +1 -1
  248. package/dist/render/util/pcolumn_data.cjs +315 -375
  249. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  250. package/dist/render/util/pcolumn_data.d.ts +33 -32
  251. package/dist/render/util/pcolumn_data.js +314 -373
  252. package/dist/render/util/pcolumn_data.js.map +1 -1
  253. package/dist/render/util/pframe_upgraders.cjs +37 -42
  254. package/dist/render/util/pframe_upgraders.cjs.map +1 -1
  255. package/dist/render/util/pframe_upgraders.js +37 -41
  256. package/dist/render/util/pframe_upgraders.js.map +1 -1
  257. package/dist/render/util/split_selectors.d.ts +13 -9
  258. package/dist/version.cjs +6 -8
  259. package/dist/version.cjs.map +1 -1
  260. package/dist/version.d.ts +7 -4
  261. package/dist/version.js +5 -5
  262. package/dist/version.js.map +1 -1
  263. package/package.json +10 -4
  264. package/src/block_migrations.test.ts +184 -14
  265. package/src/block_migrations.ts +185 -30
  266. package/src/block_model.ts +111 -66
  267. package/src/block_storage.test.ts +147 -3
  268. package/src/block_storage.ts +43 -8
  269. package/src/block_storage_callbacks.ts +9 -4
  270. package/src/env_value.ts +0 -2
  271. package/src/index.ts +12 -11
  272. package/src/internal.ts +0 -1
  273. package/src/platforma.ts +4 -4
  274. package/src/plugin_handle.ts +1 -1
  275. package/src/plugin_model.test.ts +217 -21
  276. package/src/plugin_model.ts +450 -55
  277. package/src/raw_globals.ts +0 -1
  278. package/dist/annotations/converter.d.ts.map +0 -1
  279. package/dist/annotations/index.d.ts.map +0 -1
  280. package/dist/annotations/types.d.ts.map +0 -1
  281. package/dist/bconfig/index.d.ts.map +0 -1
  282. package/dist/bconfig/lambdas.d.ts.map +0 -1
  283. package/dist/bconfig/normalization.d.ts.map +0 -1
  284. package/dist/bconfig/types.d.ts.map +0 -1
  285. package/dist/bconfig/util.d.ts.map +0 -1
  286. package/dist/bconfig/v3.d.ts.map +0 -1
  287. package/dist/block_api_v1.d.ts.map +0 -1
  288. package/dist/block_api_v2.d.ts.map +0 -1
  289. package/dist/block_api_v3.d.ts.map +0 -1
  290. package/dist/block_migrations.d.ts.map +0 -1
  291. package/dist/block_model.d.ts.map +0 -1
  292. package/dist/block_model_legacy.d.ts.map +0 -1
  293. package/dist/block_state_patch.d.ts.map +0 -1
  294. package/dist/block_state_util.d.ts.map +0 -1
  295. package/dist/block_storage.d.ts.map +0 -1
  296. package/dist/block_storage_callbacks.d.ts +0 -115
  297. package/dist/block_storage_callbacks.d.ts.map +0 -1
  298. package/dist/block_storage_facade.d.ts.map +0 -1
  299. package/dist/components/PFrameForGraphs.d.ts.map +0 -1
  300. package/dist/components/PlAnnotations/filter.d.ts.map +0 -1
  301. package/dist/components/PlAnnotations/filters_ui.d.ts.map +0 -1
  302. package/dist/components/PlAnnotations/index.d.ts.map +0 -1
  303. package/dist/components/PlAnnotations/types.d.ts +0 -3
  304. package/dist/components/PlAnnotations/types.d.ts.map +0 -1
  305. package/dist/components/PlDataTable/index.d.ts.map +0 -1
  306. package/dist/components/PlDataTable/labels.d.ts +0 -7
  307. package/dist/components/PlDataTable/labels.d.ts.map +0 -1
  308. package/dist/components/PlDataTable/state-migration.d.ts.map +0 -1
  309. package/dist/components/PlDataTable/table.d.ts.map +0 -1
  310. package/dist/components/PlDataTable/v4.d.ts.map +0 -1
  311. package/dist/components/PlDataTable/v5.d.ts.map +0 -1
  312. package/dist/components/PlMultiSequenceAlignment.d.ts.map +0 -1
  313. package/dist/components/PlSelectionModel.d.ts.map +0 -1
  314. package/dist/components/index.d.ts.map +0 -1
  315. package/dist/config/actions.d.ts.map +0 -1
  316. package/dist/config/actions_kinds.d.ts.map +0 -1
  317. package/dist/config/index.d.ts.map +0 -1
  318. package/dist/config/model.d.ts.map +0 -1
  319. package/dist/config/model_meta.d.ts.map +0 -1
  320. package/dist/config/type_engine.d.ts.map +0 -1
  321. package/dist/config/type_util.d.ts.map +0 -1
  322. package/dist/env_value.d.ts.map +0 -1
  323. package/dist/filters/converters/filterToQuery.d.ts.map +0 -1
  324. package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +0 -1
  325. package/dist/filters/converters/index.d.ts.map +0 -1
  326. package/dist/filters/distill.d.ts.map +0 -1
  327. package/dist/filters/index.d.ts.map +0 -1
  328. package/dist/filters/traverse.d.ts +0 -27
  329. package/dist/filters/traverse.d.ts.map +0 -1
  330. package/dist/filters/types.d.ts.map +0 -1
  331. package/dist/index.cjs.map +0 -1
  332. package/dist/index.d.ts.map +0 -1
  333. package/dist/index.js.map +0 -1
  334. package/dist/internal.d.ts +0 -36
  335. package/dist/internal.d.ts.map +0 -1
  336. package/dist/package.json.cjs +0 -6
  337. package/dist/package.json.cjs.map +0 -1
  338. package/dist/package.json.js +0 -4
  339. package/dist/package.json.js.map +0 -1
  340. package/dist/pframe.d.ts.map +0 -1
  341. package/dist/pframe_utils/axes.d.ts.map +0 -1
  342. package/dist/pframe_utils/columns.d.ts.map +0 -1
  343. package/dist/pframe_utils/index.d.ts.map +0 -1
  344. package/dist/pframe_utils/querySpec.d.ts +0 -2
  345. package/dist/pframe_utils/querySpec.d.ts.map +0 -1
  346. package/dist/platforma.d.ts.map +0 -1
  347. package/dist/plugin_handle.d.ts.map +0 -1
  348. package/dist/plugin_model.d.ts.map +0 -1
  349. package/dist/raw_globals.d.ts.map +0 -1
  350. package/dist/ref_util.d.ts.map +0 -1
  351. package/dist/render/accessor.d.ts.map +0 -1
  352. package/dist/render/api.d.ts.map +0 -1
  353. package/dist/render/future.d.ts.map +0 -1
  354. package/dist/render/index.d.ts.map +0 -1
  355. package/dist/render/internal.d.ts.map +0 -1
  356. package/dist/render/traversal_ops.d.ts.map +0 -1
  357. package/dist/render/util/axis_filtering.d.ts.map +0 -1
  358. package/dist/render/util/column_collection.d.ts.map +0 -1
  359. package/dist/render/util/index.d.ts.map +0 -1
  360. package/dist/render/util/label.d.ts.map +0 -1
  361. package/dist/render/util/pcolumn_data.d.ts.map +0 -1
  362. package/dist/render/util/pframe_upgraders.d.ts +0 -3
  363. package/dist/render/util/pframe_upgraders.d.ts.map +0 -1
  364. package/dist/render/util/split_selectors.d.ts.map +0 -1
  365. package/dist/version.d.ts.map +0 -1
@@ -1,290 +1,269 @@
1
- 'use strict';
1
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
+ const require_columns = require('./columns.cjs');
3
+ let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
4
+ let es_toolkit = require("es-toolkit");
2
5
 
3
- var esToolkit = require('es-toolkit');
4
- var plModelCommon = require('@milaboratories/pl-model-common');
5
- require('canonicalize');
6
- require('../render/util/label.cjs');
7
-
8
- // Constants
9
- const UNIQUE_VALUES_LIMIT = 1000000;
10
- // Helper functions
6
+ //#region src/pframe_utils/index.ts
7
+ const UNIQUE_VALUES_LIMIT = 1e6;
11
8
  const sortValuesPredicate = (a, b) => a.label.localeCompare(b.label, "en", { numeric: true });
12
9
  function convertColumnData(type, response, absentValue = null) {
13
- if (type === "String") {
14
- return response.data;
15
- }
16
- const res = new Array(response.data.length);
17
- for (let i = 0; i < response.data.length; i++) {
18
- res[i] = plModelCommon.pTableValue(response, i, { absent: absentValue, na: null });
19
- }
20
- return res;
10
+ if (type === "String") return response.data;
11
+ const res = new Array(response.data.length);
12
+ for (let i = 0; i < response.data.length; i++) res[i] = (0, _milaboratories_pl_model_common.pTableValue)(response, i, {
13
+ absent: absentValue,
14
+ na: null
15
+ });
16
+ return res;
21
17
  }
22
18
  function createSearchFilter(columnId, substring) {
23
- return {
24
- type: "bySingleColumnV2",
25
- column: {
26
- type: "column",
27
- id: columnId,
28
- },
29
- predicate: {
30
- operator: "StringIContains",
31
- substring,
32
- },
33
- };
19
+ return {
20
+ type: "bySingleColumnV2",
21
+ column: {
22
+ type: "column",
23
+ id: columnId
24
+ },
25
+ predicate: {
26
+ operator: "StringIContains",
27
+ substring
28
+ }
29
+ };
34
30
  }
35
31
  function createAxisSearchFilter(axisSpec, substring) {
36
- return {
37
- type: "bySingleColumnV2",
38
- column: {
39
- type: "axis",
40
- id: {
41
- type: axisSpec.type,
42
- name: axisSpec.name,
43
- },
44
- },
45
- predicate: {
46
- operator: "StringIContains",
47
- substring,
48
- },
49
- };
32
+ return {
33
+ type: "bySingleColumnV2",
34
+ column: {
35
+ type: "axis",
36
+ id: {
37
+ type: axisSpec.type,
38
+ name: axisSpec.name
39
+ }
40
+ },
41
+ predicate: {
42
+ operator: "StringIContains",
43
+ substring
44
+ }
45
+ };
50
46
  }
51
47
  function mapValuesToSuggestions(values) {
52
- return values.map((v) => ({ value: String(v), label: String(v) })).sort(sortValuesPredicate);
48
+ return values.map((v) => ({
49
+ value: String(v),
50
+ label: String(v)
51
+ })).sort(sortValuesPredicate);
53
52
  }
54
53
  function getPFrameDriver() {
55
- if (typeof platforma === "undefined") {
56
- throw new Error("Platforma instance is not available");
57
- }
58
- if (typeof platforma.pFrameDriver === "undefined") {
59
- throw new Error("PFrame driver is not available in the current Platforma instance");
60
- }
61
- return platforma.pFrameDriver;
54
+ if (typeof platforma === "undefined") throw new Error("Platforma instance is not available");
55
+ if (typeof platforma.pFrameDriver === "undefined") throw new Error("PFrame driver is not available in the current Platforma instance");
56
+ return platforma.pFrameDriver;
62
57
  }
63
- // Core functions
64
58
  async function getColumnSpecById(handle, id) {
65
- try {
66
- const response = await getPFrameDriver().getColumnSpec(handle, id);
67
- return response ?? null;
68
- }
69
- catch (err) {
70
- console.error("PFrame: get single column error", err);
71
- return null;
72
- }
59
+ try {
60
+ return await getPFrameDriver().getColumnSpec(handle, id) ?? null;
61
+ } catch (err) {
62
+ console.error("PFrame: get single column error", err);
63
+ return null;
64
+ }
73
65
  }
74
66
  async function getSingleColumnData(handle, id, filters = []) {
75
- try {
76
- const response = await getPFrameDriver().calculateTableData(handle, {
77
- src: {
78
- type: "column",
79
- column: id,
80
- },
81
- filters,
82
- sorting: [],
83
- });
84
- const axes = response.filter((item) => item.spec.type === "axis");
85
- const columns = response.filter((item) => item.spec.type === "column");
86
- return {
87
- axesData: axes.reduce((res, item) => {
88
- const id = plModelCommon.getAxisId(item.spec.spec);
89
- res[plModelCommon.canonicalizeAxisId(id)] = convertColumnData(id.type, item.data);
90
- return res;
91
- }, {}),
92
- data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : [],
93
- };
94
- }
95
- catch (err) {
96
- console.error("PFrame: calculateTableData error");
97
- throw err;
98
- }
67
+ try {
68
+ const response = await getPFrameDriver().calculateTableData(handle, {
69
+ src: {
70
+ type: "column",
71
+ column: id
72
+ },
73
+ filters,
74
+ sorting: []
75
+ });
76
+ const axes = response.filter((item) => item.spec.type === "axis");
77
+ const columns = response.filter((item) => item.spec.type === "column");
78
+ return {
79
+ axesData: axes.reduce((res, item) => {
80
+ const id = (0, _milaboratories_pl_model_common.getAxisId)(item.spec.spec);
81
+ res[(0, _milaboratories_pl_model_common.canonicalizeAxisId)(id)] = convertColumnData(id.type, item.data);
82
+ return res;
83
+ }, {}),
84
+ data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : []
85
+ };
86
+ } catch (err) {
87
+ console.error("PFrame: calculateTableData error");
88
+ throw err;
89
+ }
99
90
  }
100
91
  async function getColumnUniqueValues(handle, id, limit = UNIQUE_VALUES_LIMIT, filters = []) {
101
- const request = {
102
- columnId: id,
103
- filters,
104
- limit,
105
- };
106
- try {
107
- const response = await getPFrameDriver().getUniqueValues(handle, request);
108
- if (response.overflow) {
109
- console.warn(`More than ${limit} values for ${id} column`);
110
- }
111
- return {
112
- values: Array.from(response.values.data).map(String),
113
- overflow: response.overflow,
114
- };
115
- }
116
- catch (err) {
117
- console.error("PFrame: getUniqueValues for column error");
118
- throw err;
119
- }
92
+ const request = {
93
+ columnId: id,
94
+ filters,
95
+ limit
96
+ };
97
+ try {
98
+ const response = await getPFrameDriver().getUniqueValues(handle, request);
99
+ if (response.overflow) console.warn(`More than ${limit} values for ${id} column`);
100
+ return {
101
+ values: Array.from(response.values.data).map(String),
102
+ overflow: response.overflow
103
+ };
104
+ } catch (err) {
105
+ console.error("PFrame: getUniqueValues for column error");
106
+ throw err;
107
+ }
120
108
  }
121
109
  async function getAxisUniqueValues(handle, params) {
122
- const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;
123
- const strAxisId = plModelCommon.canonicalizeAxisId(axisId);
124
- const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p))))
125
- .flatMap((spec, i) => spec != null && spec.kind === "PColumn" ? [[parentColumnIds[i], spec]] : [])
126
- .filter(([_, spec]) => spec.axesSpec.some((axisSpec) => plModelCommon.canonicalizeAxisId(plModelCommon.getAxisId(axisSpec)) === strAxisId));
127
- if (parentsSpecs.length === 0) {
128
- console.warn("Axis unique values requested without parent columns");
129
- return { values: [], overflow: false };
130
- }
131
- try {
132
- const responses = await Promise.all(parentsSpecs.map(([id]) => getPFrameDriver().getUniqueValues(handle, {
133
- columnId: id,
134
- axis: axisId,
135
- filters,
136
- limit,
137
- })));
138
- const overflow = responses.some((r) => r.overflow);
139
- return {
140
- values: esToolkit.uniq(esToolkit.flatten(responses.map((r) => Array.from(r.values.data).map(String)))),
141
- overflow,
142
- };
143
- }
144
- catch (err) {
145
- console.error("PFrame: getUniqueValues for axis error", err);
146
- return { values: [], overflow: false };
147
- }
110
+ const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;
111
+ const strAxisId = (0, _milaboratories_pl_model_common.canonicalizeAxisId)(axisId);
112
+ const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p)))).flatMap((spec, i) => spec != null && spec.kind === "PColumn" ? [[parentColumnIds[i], spec]] : []).filter(([_, spec]) => spec.axesSpec.some((axisSpec) => (0, _milaboratories_pl_model_common.canonicalizeAxisId)((0, _milaboratories_pl_model_common.getAxisId)(axisSpec)) === strAxisId));
113
+ if (parentsSpecs.length === 0) {
114
+ console.warn("Axis unique values requested without parent columns");
115
+ return {
116
+ values: [],
117
+ overflow: false
118
+ };
119
+ }
120
+ try {
121
+ const responses = await Promise.all(parentsSpecs.map(([id]) => getPFrameDriver().getUniqueValues(handle, {
122
+ columnId: id,
123
+ axis: axisId,
124
+ filters,
125
+ limit
126
+ })));
127
+ const overflow = responses.some((r) => r.overflow);
128
+ return {
129
+ values: (0, es_toolkit.uniq)((0, es_toolkit.flatten)(responses.map((r) => Array.from(r.values.data).map(String)))),
130
+ overflow
131
+ };
132
+ } catch (err) {
133
+ console.error("PFrame: getUniqueValues for axis error", err);
134
+ return {
135
+ values: [],
136
+ overflow: false
137
+ };
138
+ }
148
139
  }
149
140
  async function getRequestColumnsFromSelectedSources(handle, sources) {
150
- const result = [];
151
- for (const item of sources) {
152
- const spec = await getColumnSpecById(handle, item);
153
- if (spec?.kind === "PColumn") {
154
- result.push(...spec.axesSpec.map((spec) => plModelCommon.getAxisId(spec)));
155
- }
156
- }
157
- return result;
141
+ const result = [];
142
+ for (const item of sources) {
143
+ const spec = await getColumnSpecById(handle, item);
144
+ if (spec?.kind === "PColumn") result.push(...spec.axesSpec.map((spec) => (0, _milaboratories_pl_model_common.getAxisId)(spec)));
145
+ }
146
+ return result;
158
147
  }
159
148
  async function getColumnsFull(handle, params) {
160
- const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } = params;
161
- try {
162
- const request = {
163
- columnFilter: {
164
- type: types,
165
- name: names,
166
- annotationValue: annotations,
167
- annotationPattern: annotationsNotEmpty?.reduce((res, v) => {
168
- res[v] = ".+";
169
- return res;
170
- }, {}),
171
- },
172
- compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),
173
- strictlyCompatible,
174
- };
175
- const response = await getPFrameDriver().findColumns(handle, request);
176
- return response.hits;
177
- }
178
- catch (err) {
179
- console.error("PFrame: findColumns error");
180
- throw err;
181
- }
149
+ const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } = params;
150
+ try {
151
+ const request = {
152
+ columnFilter: {
153
+ type: types,
154
+ name: names,
155
+ annotationValue: annotations,
156
+ annotationPattern: annotationsNotEmpty?.reduce((res, v) => {
157
+ res[v] = ".+";
158
+ return res;
159
+ }, {})
160
+ },
161
+ compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),
162
+ strictlyCompatible
163
+ };
164
+ return (await getPFrameDriver().findColumns(handle, request)).hits;
165
+ } catch (err) {
166
+ console.error("PFrame: findColumns error");
167
+ throw err;
168
+ }
182
169
  }
183
170
  async function getColumnOrAxisValueLabelsId(handle, strAxisId) {
184
- const labelColumns = await getColumnsFull(handle, {
185
- selectedSources: [],
186
- strictlyCompatible: false,
187
- names: [plModelCommon.PColumnName.Label],
188
- });
189
- const labelColumn = labelColumns.find(({ spec }) => {
190
- return spec && spec.axesSpec.length === 1 && plModelCommon.canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;
191
- });
192
- return labelColumn?.columnId;
171
+ return (await getColumnsFull(handle, {
172
+ selectedSources: [],
173
+ strictlyCompatible: false,
174
+ names: [_milaboratories_pl_model_common.PColumnName.Label]
175
+ })).find(({ spec }) => {
176
+ return spec && spec.axesSpec.length === 1 && (0, _milaboratories_pl_model_common.canonicalizeAxisId)(spec.axesSpec[0]) === strAxisId;
177
+ })?.columnId;
193
178
  }
194
179
  function getDiscreteValuesFromAnnotation(columnSpec) {
195
- const discreteValuesStr = plModelCommon.readAnnotation(columnSpec, plModelCommon.Annotation.DiscreteValues);
196
- if (!discreteValuesStr) {
197
- return undefined;
198
- }
199
- try {
200
- const discreteValues = JSON.parse(discreteValuesStr).map((v) => String(v));
201
- const values = discreteValues.map((v) => ({ value: v, label: v })).sort(sortValuesPredicate);
202
- return { values, overflow: false };
203
- }
204
- catch {
205
- console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);
206
- return undefined;
207
- }
180
+ const discreteValuesStr = (0, _milaboratories_pl_model_common.readAnnotation)(columnSpec, _milaboratories_pl_model_common.Annotation.DiscreteValues);
181
+ if (!discreteValuesStr) return;
182
+ try {
183
+ return {
184
+ values: JSON.parse(discreteValuesStr).map((v) => String(v)).map((v) => ({
185
+ value: v,
186
+ label: v
187
+ })).sort(sortValuesPredicate),
188
+ overflow: false
189
+ };
190
+ } catch {
191
+ console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);
192
+ return;
193
+ }
208
194
  }
209
195
  async function getAxisValuesWithLabels(handle, params) {
210
- const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;
211
- const strAxisId = plModelCommon.canonicalizeAxisId(plModelCommon.getAxisId(axisSpec));
212
- let filters = [];
213
- if (labelsColumnId) {
214
- if (searchQuery) {
215
- filters = [createSearchFilter(labelsColumnId, searchQuery)];
216
- }
217
- if (searchQueryValue) {
218
- filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];
219
- }
220
- const { data: dataValues, axesData } = await getSingleColumnData(handle, labelsColumnId, filters);
221
- const axisKeys = axesData[strAxisId];
222
- const values = [];
223
- for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {
224
- values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });
225
- }
226
- values.sort(sortValuesPredicate);
227
- return { values, overflow: !(limit === undefined || axisKeys.length < limit) };
228
- }
229
- else {
230
- const searchInLabelsOrValue = searchQuery ?? searchQueryValue;
231
- if (searchInLabelsOrValue) {
232
- filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];
233
- }
234
- const response = await getAxisUniqueValues(handle, {
235
- axisId: plModelCommon.getAxisId(axisSpec),
236
- parentColumnIds: [columnId],
237
- limit,
238
- filters,
239
- });
240
- const values = mapValuesToSuggestions(response.values);
241
- return { values, overflow: response.overflow };
242
- }
196
+ const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;
197
+ const strAxisId = (0, _milaboratories_pl_model_common.canonicalizeAxisId)((0, _milaboratories_pl_model_common.getAxisId)(axisSpec));
198
+ let filters = [];
199
+ if (labelsColumnId) {
200
+ if (searchQuery) filters = [createSearchFilter(labelsColumnId, searchQuery)];
201
+ if (searchQueryValue) filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];
202
+ const { data: dataValues, axesData } = await getSingleColumnData(handle, labelsColumnId, filters);
203
+ const axisKeys = axesData[strAxisId];
204
+ const values = [];
205
+ for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) values.push({
206
+ value: String(axisKeys[i]),
207
+ label: String(dataValues[i])
208
+ });
209
+ values.sort(sortValuesPredicate);
210
+ return {
211
+ values,
212
+ overflow: !(limit === void 0 || axisKeys.length < limit)
213
+ };
214
+ } else {
215
+ const searchInLabelsOrValue = searchQuery ?? searchQueryValue;
216
+ if (searchInLabelsOrValue) filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];
217
+ const response = await getAxisUniqueValues(handle, {
218
+ axisId: (0, _milaboratories_pl_model_common.getAxisId)(axisSpec),
219
+ parentColumnIds: [columnId],
220
+ limit,
221
+ filters
222
+ });
223
+ return {
224
+ values: mapValuesToSuggestions(response.values),
225
+ overflow: response.overflow
226
+ };
227
+ }
243
228
  }
244
229
  async function getColumnValuesWithLabels(handle, params) {
245
- const { columnId, limit, searchQuery, searchQueryValue } = params;
246
- const searchInLabelsOrValue = searchQuery ?? searchQueryValue;
247
- const filters = searchInLabelsOrValue
248
- ? [createSearchFilter(columnId, searchInLabelsOrValue)]
249
- : [];
250
- const response = await getColumnUniqueValues(handle, columnId, limit, filters);
251
- const values = mapValuesToSuggestions(response.values);
252
- return { values, overflow: response.overflow };
230
+ const { columnId, limit, searchQuery, searchQueryValue } = params;
231
+ const searchInLabelsOrValue = searchQuery ?? searchQueryValue;
232
+ const response = await getColumnUniqueValues(handle, columnId, limit, searchInLabelsOrValue ? [createSearchFilter(columnId, searchInLabelsOrValue)] : []);
233
+ return {
234
+ values: mapValuesToSuggestions(response.values),
235
+ overflow: response.overflow
236
+ };
253
237
  }
254
238
  async function getUniqueSourceValuesWithLabels(handle, params) {
255
- const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;
256
- const selectedSourceSpec = await getColumnSpecById(handle, columnId);
257
- if (selectedSourceSpec == null || selectedSourceSpec.kind !== "PColumn") {
258
- return { values: [], overflow: false };
259
- }
260
- // Try to get discrete values from annotation
261
- const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);
262
- if (discreteValues != null) {
263
- return discreteValues;
264
- }
265
- // Handle axis values
266
- if (axisIdx != null) {
267
- const axisSpec = selectedSourceSpec.axesSpec[axisIdx];
268
- const strAxisId = plModelCommon.canonicalizeAxisId(plModelCommon.getAxisId(axisSpec));
269
- const labelsColumnId = await getColumnOrAxisValueLabelsId(handle, strAxisId);
270
- return getAxisValuesWithLabels(handle, {
271
- columnId,
272
- axisSpec,
273
- labelsColumnId,
274
- limit,
275
- searchQuery,
276
- searchQueryValue,
277
- });
278
- }
279
- // Handle column values
280
- return getColumnValuesWithLabels(handle, {
281
- columnId,
282
- limit,
283
- searchQuery,
284
- searchQueryValue,
285
- });
239
+ const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;
240
+ const selectedSourceSpec = await getColumnSpecById(handle, columnId);
241
+ if (selectedSourceSpec == null || selectedSourceSpec.kind !== "PColumn") return {
242
+ values: [],
243
+ overflow: false
244
+ };
245
+ const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);
246
+ if (discreteValues != null) return discreteValues;
247
+ if (axisIdx != null) {
248
+ const axisSpec = selectedSourceSpec.axesSpec[axisIdx];
249
+ return getAxisValuesWithLabels(handle, {
250
+ columnId,
251
+ axisSpec,
252
+ labelsColumnId: await getColumnOrAxisValueLabelsId(handle, (0, _milaboratories_pl_model_common.canonicalizeAxisId)((0, _milaboratories_pl_model_common.getAxisId)(axisSpec))),
253
+ limit,
254
+ searchQuery,
255
+ searchQueryValue
256
+ });
257
+ }
258
+ return getColumnValuesWithLabels(handle, {
259
+ columnId,
260
+ limit,
261
+ searchQuery,
262
+ searchQueryValue
263
+ });
286
264
  }
287
265
 
266
+ //#endregion
288
267
  exports.getAxisUniqueValues = getAxisUniqueValues;
289
268
  exports.getColumnOrAxisValueLabelsId = getColumnOrAxisValueLabelsId;
290
269
  exports.getColumnSpecById = getColumnSpecById;
@@ -293,4 +272,4 @@ exports.getColumnsFull = getColumnsFull;
293
272
  exports.getRequestColumnsFromSelectedSources = getRequestColumnsFromSelectedSources;
294
273
  exports.getSingleColumnData = getSingleColumnData;
295
274
  exports.getUniqueSourceValuesWithLabels = getUniqueSourceValuesWithLabels;
296
- //# sourceMappingURL=index.cjs.map
275
+ //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/pframe_utils/index.ts"],"sourcesContent":["import { flatten, uniq } from \"es-toolkit\";\n\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n PColumnSpec,\n PFrameHandle,\n PTableVector,\n UniqueValuesRequest,\n AxisId,\n CanonicalizedJson,\n FindColumnsRequest,\n FindColumnsResponse,\n FullPTableColumnData,\n PColumnIdAndSpec,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n ValueType,\n} from \"@milaboratories/pl-model-common\";\nimport {\n pTableValue,\n Annotation,\n canonicalizeAxisId,\n getAxisId,\n readAnnotation,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\n\nexport * from \"./columns\";\n\n// Types\ntype PValue = string | number | null;\n\ntype SuggestionResponse = {\n values: {\n value: string;\n label: string;\n }[];\n overflow: boolean;\n};\n\ntype SingleColumnData = {\n axesData: Record<string, PValue[]>;\n data: PValue[];\n};\n\ntype UniqueValuesResponse = {\n values: string[];\n overflow: boolean;\n};\n\ntype GetUniqueSourceValuesParams = {\n columnId: PObjectId;\n axisIdx?: number;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n};\n\ntype GetAxisUniqueValuesParams = {\n axisId: AxisId;\n parentColumnIds: PObjectId[];\n limit?: number;\n filters?: PTableRecordSingleValueFilterV2[];\n};\n\ntype GetColumnsFullParams = {\n selectedSources: PObjectId[];\n strictlyCompatible: boolean;\n types?: ValueType[];\n names?: string[];\n annotations?: FindColumnsRequest[\"columnFilter\"][\"annotationValue\"];\n annotationsNotEmpty?: string[];\n};\n\n// Constants\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\n// Helper functions\nconst sortValuesPredicate = (a: { label: string }, b: { label: string }) =>\n a.label.localeCompare(b.label, \"en\", { numeric: true });\n\nfunction convertColumnData(\n type: ValueType,\n response: PTableVector,\n absentValue: number | null = null,\n): PValue[] {\n if (type === \"String\") {\n return response.data as PValue[];\n }\n const res: PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, { absent: absentValue, na: null }) as PValue;\n }\n return res;\n}\n\nfunction createSearchFilter(\n columnId: PObjectId,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: \"bySingleColumnV2\",\n column: {\n type: \"column\",\n id: columnId,\n },\n predicate: {\n operator: \"StringIContains\",\n substring,\n },\n };\n}\n\nfunction createAxisSearchFilter(\n axisSpec: AxisSpec,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: \"bySingleColumnV2\",\n column: {\n type: \"axis\",\n id: {\n type: axisSpec.type,\n name: axisSpec.name,\n },\n },\n predicate: {\n operator: \"StringIContains\",\n substring,\n },\n };\n}\n\nfunction mapValuesToSuggestions(values: string[]): { value: string; label: string }[] {\n return values.map((v) => ({ value: String(v), label: String(v) })).sort(sortValuesPredicate);\n}\n\nfunction getPFrameDriver() {\n if (typeof platforma === \"undefined\") {\n throw new Error(\"Platforma instance is not available\");\n }\n if (typeof platforma.pFrameDriver === \"undefined\") {\n throw new Error(\"PFrame driver is not available in the current Platforma instance\");\n }\n return platforma.pFrameDriver;\n}\n\n// Core functions\nexport async function getColumnSpecById(\n handle: PFrameHandle,\n id: PObjectId,\n): Promise<PColumnSpec | null> {\n try {\n const response = await getPFrameDriver().getColumnSpec(handle, id);\n return response ?? null;\n } catch (err) {\n console.error(\"PFrame: get single column error\", err);\n return null;\n }\n}\n\nexport async function getSingleColumnData(\n handle: PFrameHandle,\n id: PObjectId,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<SingleColumnData> {\n try {\n const response: FullPTableColumnData[] = await getPFrameDriver().calculateTableData(handle, {\n src: {\n type: \"column\",\n column: id,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n\n const axes = response.filter((item) => item.spec.type === \"axis\");\n const columns = response.filter((item) => item.spec.type === \"column\");\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = getAxisId(item.spec.spec as AxisSpec);\n res[canonicalizeAxisId(id)] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error(\"PFrame: calculateTableData error\");\n throw err;\n }\n}\n\nexport async function getColumnUniqueValues(\n handle: PFrameHandle,\n id: PObjectId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<UniqueValuesResponse> {\n const request: UniqueValuesRequest = {\n columnId: id,\n filters,\n limit,\n };\n\n try {\n const response = await getPFrameDriver().getUniqueValues(handle, request);\n if (response.overflow) {\n console.warn(`More than ${limit} values for ${id} column`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow: response.overflow,\n };\n } catch (err) {\n console.error(\"PFrame: getUniqueValues for column error\");\n throw err;\n }\n}\n\nexport async function getAxisUniqueValues(\n handle: PFrameHandle,\n params: GetAxisUniqueValuesParams,\n): Promise<UniqueValuesResponse> {\n const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;\n const strAxisId = canonicalizeAxisId(axisId);\n\n const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p))))\n .flatMap((spec, i): [PObjectId, PColumnSpec][] =>\n spec != null && spec.kind === \"PColumn\" ? [[parentColumnIds[i], spec]] : [],\n )\n .filter(([_, spec]) =>\n spec.axesSpec.some((axisSpec) => canonicalizeAxisId(getAxisId(axisSpec)) === strAxisId),\n );\n\n if (parentsSpecs.length === 0) {\n console.warn(\"Axis unique values requested without parent columns\");\n return { values: [], overflow: false };\n }\n\n try {\n const responses = await Promise.all(\n parentsSpecs.map(([id]) =>\n getPFrameDriver().getUniqueValues(handle, {\n columnId: id,\n axis: axisId,\n filters,\n limit,\n }),\n ),\n );\n\n const overflow = responses.some((r) => r.overflow);\n return {\n values: uniq(\n flatten(responses.map((r) => Array.from(r.values.data as ArrayLike<unknown>).map(String))),\n ),\n overflow,\n };\n } catch (err) {\n console.error(\"PFrame: getUniqueValues for axis error\", err);\n return { values: [], overflow: false };\n }\n}\n\nexport async function getRequestColumnsFromSelectedSources(\n handle: PFrameHandle,\n sources: PObjectId[],\n): Promise<AxisId[]> {\n const result: AxisId[] = [];\n for (const item of sources) {\n const spec = await getColumnSpecById(handle, item);\n if (spec?.kind === \"PColumn\") {\n result.push(...spec.axesSpec.map((spec) => getAxisId(spec)));\n }\n }\n return result;\n}\n\nexport async function getColumnsFull(\n handle: PFrameHandle,\n params: GetColumnsFullParams,\n): Promise<PColumnIdAndSpec[]> {\n const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } =\n params;\n\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n annotationPattern: annotationsNotEmpty?.reduce(\n (res, v) => {\n res[v] = \".+\";\n return res;\n },\n {} as Record<string, string>,\n ),\n },\n compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),\n strictlyCompatible,\n };\n\n const response: FindColumnsResponse = await getPFrameDriver().findColumns(handle, request);\n return response.hits;\n } catch (err) {\n console.error(\"PFrame: findColumns error\");\n throw err;\n }\n}\n\nexport async function getColumnOrAxisValueLabelsId(\n handle: PFrameHandle,\n strAxisId: CanonicalizedJson<AxisId>,\n): Promise<PObjectId | undefined> {\n const labelColumns = await getColumnsFull(handle, {\n selectedSources: [],\n strictlyCompatible: false,\n names: [PColumnName.Label],\n });\n\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;\n });\n\n return labelColumn?.columnId;\n}\n\nfunction getDiscreteValuesFromAnnotation(columnSpec: PColumnSpec): undefined | SuggestionResponse {\n const discreteValuesStr = readAnnotation(columnSpec, Annotation.DiscreteValues);\n if (!discreteValuesStr) {\n return undefined;\n }\n\n try {\n const discreteValues: string[] = (JSON.parse(discreteValuesStr) as (string | number)[]).map(\n (v) => String(v),\n );\n const values = discreteValues.map((v) => ({ value: v, label: v })).sort(sortValuesPredicate);\n return { values, overflow: false };\n } catch {\n console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);\n return undefined;\n }\n}\n\nasync function getAxisValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n axisSpec: AxisSpec;\n labelsColumnId: PObjectId | undefined;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n\n let filters: PTableRecordSingleValueFilterV2[] = [];\n\n if (labelsColumnId) {\n if (searchQuery) {\n filters = [createSearchFilter(labelsColumnId, searchQuery)];\n }\n if (searchQueryValue) {\n filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];\n }\n\n const { data: dataValues, axesData } = await getSingleColumnData(\n handle,\n labelsColumnId,\n filters,\n );\n const axisKeys = axesData[strAxisId];\n const values: { value: string; label: string }[] = [];\n\n for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {\n values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });\n }\n\n values.sort(sortValuesPredicate);\n return { values, overflow: !(limit === undefined || axisKeys.length < limit) };\n } else {\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n if (searchInLabelsOrValue) {\n filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];\n }\n\n const response = await getAxisUniqueValues(handle, {\n axisId: getAxisId(axisSpec),\n parentColumnIds: [columnId],\n limit,\n filters,\n });\n\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n }\n}\n\nasync function getColumnValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, limit, searchQuery, searchQueryValue } = params;\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n\n const filters: PTableRecordSingleValueFilterV2[] = searchInLabelsOrValue\n ? [createSearchFilter(columnId, searchInLabelsOrValue)]\n : [];\n\n const response = await getColumnUniqueValues(handle, columnId, limit, filters);\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n}\n\nexport async function getUniqueSourceValuesWithLabels(\n handle: PFrameHandle,\n params: GetUniqueSourceValuesParams,\n): Promise<SuggestionResponse> {\n const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;\n\n const selectedSourceSpec = await getColumnSpecById(handle, columnId);\n if (selectedSourceSpec == null || selectedSourceSpec.kind !== \"PColumn\") {\n return { values: [], overflow: false };\n }\n\n // Try to get discrete values from annotation\n const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);\n if (discreteValues != null) {\n return discreteValues;\n }\n\n // Handle axis values\n if (axisIdx != null) {\n const axisSpec = selectedSourceSpec.axesSpec[axisIdx];\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n const labelsColumnId = await getColumnOrAxisValueLabelsId(handle, strAxisId);\n\n return getAxisValuesWithLabels(handle, {\n columnId,\n axisSpec,\n labelsColumnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n }\n\n // Handle column values\n return getColumnValuesWithLabels(handle, {\n columnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n}\n"],"names":["pTableValue","getAxisId","canonicalizeAxisId","uniq","flatten","PColumnName","readAnnotation","Annotation"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["PColumnName","Annotation"],"sources":["../../src/pframe_utils/index.ts"],"sourcesContent":["import { flatten, uniq } from \"es-toolkit\";\n\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n PColumnSpec,\n PFrameHandle,\n PTableVector,\n UniqueValuesRequest,\n AxisId,\n CanonicalizedJson,\n FindColumnsRequest,\n FindColumnsResponse,\n FullPTableColumnData,\n PColumnIdAndSpec,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n ValueType,\n} from \"@milaboratories/pl-model-common\";\nimport {\n pTableValue,\n Annotation,\n canonicalizeAxisId,\n getAxisId,\n readAnnotation,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\n\nexport * from \"./columns\";\n\n// Types\ntype PValue = string | number | null;\n\ntype SuggestionResponse = {\n values: {\n value: string;\n label: string;\n }[];\n overflow: boolean;\n};\n\ntype SingleColumnData = {\n axesData: Record<string, PValue[]>;\n data: PValue[];\n};\n\ntype UniqueValuesResponse = {\n values: string[];\n overflow: boolean;\n};\n\ntype GetUniqueSourceValuesParams = {\n columnId: PObjectId;\n axisIdx?: number;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n};\n\ntype GetAxisUniqueValuesParams = {\n axisId: AxisId;\n parentColumnIds: PObjectId[];\n limit?: number;\n filters?: PTableRecordSingleValueFilterV2[];\n};\n\ntype GetColumnsFullParams = {\n selectedSources: PObjectId[];\n strictlyCompatible: boolean;\n types?: ValueType[];\n names?: string[];\n annotations?: FindColumnsRequest[\"columnFilter\"][\"annotationValue\"];\n annotationsNotEmpty?: string[];\n};\n\n// Constants\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\n// Helper functions\nconst sortValuesPredicate = (a: { label: string }, b: { label: string }) =>\n a.label.localeCompare(b.label, \"en\", { numeric: true });\n\nfunction convertColumnData(\n type: ValueType,\n response: PTableVector,\n absentValue: number | null = null,\n): PValue[] {\n if (type === \"String\") {\n return response.data as PValue[];\n }\n const res: PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, { absent: absentValue, na: null }) as PValue;\n }\n return res;\n}\n\nfunction createSearchFilter(\n columnId: PObjectId,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: \"bySingleColumnV2\",\n column: {\n type: \"column\",\n id: columnId,\n },\n predicate: {\n operator: \"StringIContains\",\n substring,\n },\n };\n}\n\nfunction createAxisSearchFilter(\n axisSpec: AxisSpec,\n substring: string,\n): PTableRecordSingleValueFilterV2 {\n return {\n type: \"bySingleColumnV2\",\n column: {\n type: \"axis\",\n id: {\n type: axisSpec.type,\n name: axisSpec.name,\n },\n },\n predicate: {\n operator: \"StringIContains\",\n substring,\n },\n };\n}\n\nfunction mapValuesToSuggestions(values: string[]): { value: string; label: string }[] {\n return values.map((v) => ({ value: String(v), label: String(v) })).sort(sortValuesPredicate);\n}\n\nfunction getPFrameDriver() {\n if (typeof platforma === \"undefined\") {\n throw new Error(\"Platforma instance is not available\");\n }\n if (typeof platforma.pFrameDriver === \"undefined\") {\n throw new Error(\"PFrame driver is not available in the current Platforma instance\");\n }\n return platforma.pFrameDriver;\n}\n\n// Core functions\nexport async function getColumnSpecById(\n handle: PFrameHandle,\n id: PObjectId,\n): Promise<PColumnSpec | null> {\n try {\n const response = await getPFrameDriver().getColumnSpec(handle, id);\n return response ?? null;\n } catch (err) {\n console.error(\"PFrame: get single column error\", err);\n return null;\n }\n}\n\nexport async function getSingleColumnData(\n handle: PFrameHandle,\n id: PObjectId,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<SingleColumnData> {\n try {\n const response: FullPTableColumnData[] = await getPFrameDriver().calculateTableData(handle, {\n src: {\n type: \"column\",\n column: id,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n\n const axes = response.filter((item) => item.spec.type === \"axis\");\n const columns = response.filter((item) => item.spec.type === \"column\");\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = getAxisId(item.spec.spec as AxisSpec);\n res[canonicalizeAxisId(id)] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(columns[0].data.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error(\"PFrame: calculateTableData error\");\n throw err;\n }\n}\n\nexport async function getColumnUniqueValues(\n handle: PFrameHandle,\n id: PObjectId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = [],\n): Promise<UniqueValuesResponse> {\n const request: UniqueValuesRequest = {\n columnId: id,\n filters,\n limit,\n };\n\n try {\n const response = await getPFrameDriver().getUniqueValues(handle, request);\n if (response.overflow) {\n console.warn(`More than ${limit} values for ${id} column`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow: response.overflow,\n };\n } catch (err) {\n console.error(\"PFrame: getUniqueValues for column error\");\n throw err;\n }\n}\n\nexport async function getAxisUniqueValues(\n handle: PFrameHandle,\n params: GetAxisUniqueValuesParams,\n): Promise<UniqueValuesResponse> {\n const { axisId, parentColumnIds, limit = UNIQUE_VALUES_LIMIT, filters = [] } = params;\n const strAxisId = canonicalizeAxisId(axisId);\n\n const parentsSpecs = (await Promise.all(parentColumnIds.map((p) => getColumnSpecById(handle, p))))\n .flatMap((spec, i): [PObjectId, PColumnSpec][] =>\n spec != null && spec.kind === \"PColumn\" ? [[parentColumnIds[i], spec]] : [],\n )\n .filter(([_, spec]) =>\n spec.axesSpec.some((axisSpec) => canonicalizeAxisId(getAxisId(axisSpec)) === strAxisId),\n );\n\n if (parentsSpecs.length === 0) {\n console.warn(\"Axis unique values requested without parent columns\");\n return { values: [], overflow: false };\n }\n\n try {\n const responses = await Promise.all(\n parentsSpecs.map(([id]) =>\n getPFrameDriver().getUniqueValues(handle, {\n columnId: id,\n axis: axisId,\n filters,\n limit,\n }),\n ),\n );\n\n const overflow = responses.some((r) => r.overflow);\n return {\n values: uniq(\n flatten(responses.map((r) => Array.from(r.values.data as ArrayLike<unknown>).map(String))),\n ),\n overflow,\n };\n } catch (err) {\n console.error(\"PFrame: getUniqueValues for axis error\", err);\n return { values: [], overflow: false };\n }\n}\n\nexport async function getRequestColumnsFromSelectedSources(\n handle: PFrameHandle,\n sources: PObjectId[],\n): Promise<AxisId[]> {\n const result: AxisId[] = [];\n for (const item of sources) {\n const spec = await getColumnSpecById(handle, item);\n if (spec?.kind === \"PColumn\") {\n result.push(...spec.axesSpec.map((spec) => getAxisId(spec)));\n }\n }\n return result;\n}\n\nexport async function getColumnsFull(\n handle: PFrameHandle,\n params: GetColumnsFullParams,\n): Promise<PColumnIdAndSpec[]> {\n const { selectedSources, strictlyCompatible, types, names, annotations, annotationsNotEmpty } =\n params;\n\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n annotationPattern: annotationsNotEmpty?.reduce(\n (res, v) => {\n res[v] = \".+\";\n return res;\n },\n {} as Record<string, string>,\n ),\n },\n compatibleWith: await getRequestColumnsFromSelectedSources(handle, selectedSources),\n strictlyCompatible,\n };\n\n const response: FindColumnsResponse = await getPFrameDriver().findColumns(handle, request);\n return response.hits;\n } catch (err) {\n console.error(\"PFrame: findColumns error\");\n throw err;\n }\n}\n\nexport async function getColumnOrAxisValueLabelsId(\n handle: PFrameHandle,\n strAxisId: CanonicalizedJson<AxisId>,\n): Promise<PObjectId | undefined> {\n const labelColumns = await getColumnsFull(handle, {\n selectedSources: [],\n strictlyCompatible: false,\n names: [PColumnName.Label],\n });\n\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && canonicalizeAxisId(spec.axesSpec[0]) === strAxisId;\n });\n\n return labelColumn?.columnId;\n}\n\nfunction getDiscreteValuesFromAnnotation(columnSpec: PColumnSpec): undefined | SuggestionResponse {\n const discreteValuesStr = readAnnotation(columnSpec, Annotation.DiscreteValues);\n if (!discreteValuesStr) {\n return undefined;\n }\n\n try {\n const discreteValues: string[] = (JSON.parse(discreteValuesStr) as (string | number)[]).map(\n (v) => String(v),\n );\n const values = discreteValues.map((v) => ({ value: v, label: v })).sort(sortValuesPredicate);\n return { values, overflow: false };\n } catch {\n console.error(`Parsing error: discrete values annotation ${discreteValuesStr}`);\n return undefined;\n }\n}\n\nasync function getAxisValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n axisSpec: AxisSpec;\n labelsColumnId: PObjectId | undefined;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, axisSpec, labelsColumnId, limit, searchQuery, searchQueryValue } = params;\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n\n let filters: PTableRecordSingleValueFilterV2[] = [];\n\n if (labelsColumnId) {\n if (searchQuery) {\n filters = [createSearchFilter(labelsColumnId, searchQuery)];\n }\n if (searchQueryValue) {\n filters = [createAxisSearchFilter(axisSpec, searchQueryValue)];\n }\n\n const { data: dataValues, axesData } = await getSingleColumnData(\n handle,\n labelsColumnId,\n filters,\n );\n const axisKeys = axesData[strAxisId];\n const values: { value: string; label: string }[] = [];\n\n for (let i = 0; i < Math.min(axisKeys.length, limit ?? axisKeys.length); i++) {\n values.push({ value: String(axisKeys[i]), label: String(dataValues[i]) });\n }\n\n values.sort(sortValuesPredicate);\n return { values, overflow: !(limit === undefined || axisKeys.length < limit) };\n } else {\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n if (searchInLabelsOrValue) {\n filters = [createAxisSearchFilter(axisSpec, searchInLabelsOrValue)];\n }\n\n const response = await getAxisUniqueValues(handle, {\n axisId: getAxisId(axisSpec),\n parentColumnIds: [columnId],\n limit,\n filters,\n });\n\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n }\n}\n\nasync function getColumnValuesWithLabels(\n handle: PFrameHandle,\n params: {\n columnId: PObjectId;\n limit?: number;\n searchQuery?: string;\n searchQueryValue?: string;\n },\n): Promise<SuggestionResponse> {\n const { columnId, limit, searchQuery, searchQueryValue } = params;\n const searchInLabelsOrValue = searchQuery ?? searchQueryValue;\n\n const filters: PTableRecordSingleValueFilterV2[] = searchInLabelsOrValue\n ? [createSearchFilter(columnId, searchInLabelsOrValue)]\n : [];\n\n const response = await getColumnUniqueValues(handle, columnId, limit, filters);\n const values = mapValuesToSuggestions(response.values);\n return { values, overflow: response.overflow };\n}\n\nexport async function getUniqueSourceValuesWithLabels(\n handle: PFrameHandle,\n params: GetUniqueSourceValuesParams,\n): Promise<SuggestionResponse> {\n const { columnId, axisIdx, limit, searchQuery, searchQueryValue } = params;\n\n const selectedSourceSpec = await getColumnSpecById(handle, columnId);\n if (selectedSourceSpec == null || selectedSourceSpec.kind !== \"PColumn\") {\n return { values: [], overflow: false };\n }\n\n // Try to get discrete values from annotation\n const discreteValues = getDiscreteValuesFromAnnotation(selectedSourceSpec);\n if (discreteValues != null) {\n return discreteValues;\n }\n\n // Handle axis values\n if (axisIdx != null) {\n const axisSpec = selectedSourceSpec.axesSpec[axisIdx];\n const strAxisId = canonicalizeAxisId(getAxisId(axisSpec));\n const labelsColumnId = await getColumnOrAxisValueLabelsId(handle, strAxisId);\n\n return getAxisValuesWithLabels(handle, {\n columnId,\n axisSpec,\n labelsColumnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n }\n\n // Handle column values\n return getColumnValuesWithLabels(handle, {\n columnId,\n limit,\n searchQuery,\n searchQueryValue,\n });\n}\n"],"mappings":"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"}