@platforma-sdk/model 1.63.1 → 1.63.12

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 (334) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +12 -22
  2. package/dist/_virtual/_rolldown/runtime.js +6 -11
  3. package/dist/annotations/converter.cjs +4 -5
  4. package/dist/annotations/converter.cjs.map +1 -1
  5. package/dist/annotations/converter.d.ts.map +1 -0
  6. package/dist/annotations/converter.js +1 -2
  7. package/dist/annotations/converter.js.map +1 -1
  8. package/dist/annotations/index.cjs +1 -1
  9. package/dist/annotations/index.js +1 -1
  10. package/dist/annotations/types.d.ts +0 -1
  11. package/dist/annotations/types.d.ts.map +1 -0
  12. package/dist/bconfig/index.cjs +2 -2
  13. package/dist/bconfig/index.js +2 -2
  14. package/dist/bconfig/lambdas.d.ts +0 -1
  15. package/dist/bconfig/lambdas.d.ts.map +1 -0
  16. package/dist/bconfig/normalization.cjs +4 -5
  17. package/dist/bconfig/normalization.cjs.map +1 -1
  18. package/dist/bconfig/normalization.d.ts.map +1 -0
  19. package/dist/bconfig/normalization.js +1 -2
  20. package/dist/bconfig/normalization.js.map +1 -1
  21. package/dist/bconfig/types.cjs +1 -2
  22. package/dist/bconfig/types.cjs.map +1 -1
  23. package/dist/bconfig/types.d.ts +0 -1
  24. package/dist/bconfig/types.d.ts.map +1 -0
  25. package/dist/bconfig/types.js +1 -1
  26. package/dist/bconfig/util.d.ts.map +1 -0
  27. package/dist/bconfig/v3.d.ts.map +1 -0
  28. package/dist/block_api_v1.d.ts.map +1 -0
  29. package/dist/block_api_v2.d.ts.map +1 -0
  30. package/dist/block_api_v3.d.ts.map +1 -0
  31. package/dist/block_migrations.cjs +2 -3
  32. package/dist/block_migrations.cjs.map +1 -1
  33. package/dist/block_migrations.d.ts.map +1 -0
  34. package/dist/block_migrations.js +1 -2
  35. package/dist/block_migrations.js.map +1 -1
  36. package/dist/block_model.cjs +16 -17
  37. package/dist/block_model.cjs.map +1 -1
  38. package/dist/block_model.d.ts +0 -2
  39. package/dist/block_model.d.ts.map +1 -0
  40. package/dist/block_model.js +4 -5
  41. package/dist/block_model.js.map +1 -1
  42. package/dist/block_model_legacy.cjs +10 -11
  43. package/dist/block_model_legacy.cjs.map +1 -1
  44. package/dist/block_model_legacy.d.ts +0 -3
  45. package/dist/block_model_legacy.d.ts.map +1 -0
  46. package/dist/block_model_legacy.js +1 -2
  47. package/dist/block_model_legacy.js.map +1 -1
  48. package/dist/block_state_patch.d.ts.map +1 -0
  49. package/dist/block_state_util.cjs +1 -2
  50. package/dist/block_state_util.cjs.map +1 -1
  51. package/dist/block_state_util.d.ts.map +1 -0
  52. package/dist/block_state_util.js +1 -1
  53. package/dist/block_state_util.js.map +1 -1
  54. package/dist/block_storage.cjs +5 -12
  55. package/dist/block_storage.cjs.map +1 -1
  56. package/dist/block_storage.d.ts.map +1 -0
  57. package/dist/block_storage.js +5 -11
  58. package/dist/block_storage.js.map +1 -1
  59. package/dist/block_storage_callbacks.cjs +4 -5
  60. package/dist/block_storage_callbacks.cjs.map +1 -1
  61. package/dist/block_storage_callbacks.js +3 -4
  62. package/dist/block_storage_callbacks.js.map +1 -1
  63. package/dist/block_storage_facade.cjs +2 -3
  64. package/dist/block_storage_facade.cjs.map +1 -1
  65. package/dist/block_storage_facade.d.ts +0 -1
  66. package/dist/block_storage_facade.d.ts.map +1 -0
  67. package/dist/block_storage_facade.js +1 -2
  68. package/dist/block_storage_facade.js.map +1 -1
  69. package/dist/columns/column_collection_builder.cjs +6 -7
  70. package/dist/columns/column_collection_builder.cjs.map +1 -1
  71. package/dist/columns/column_collection_builder.d.ts.map +1 -0
  72. package/dist/columns/column_collection_builder.js +1 -2
  73. package/dist/columns/column_collection_builder.js.map +1 -1
  74. package/dist/columns/column_selector.cjs +1 -2
  75. package/dist/columns/column_selector.cjs.map +1 -1
  76. package/dist/columns/column_selector.d.ts.map +1 -0
  77. package/dist/columns/column_selector.js +1 -1
  78. package/dist/columns/column_selector.js.map +1 -1
  79. package/dist/columns/column_snapshot.cjs +1 -2
  80. package/dist/columns/column_snapshot.cjs.map +1 -1
  81. package/dist/columns/column_snapshot.d.ts.map +1 -0
  82. package/dist/columns/column_snapshot.js +1 -1
  83. package/dist/columns/column_snapshot_provider.cjs +1 -2
  84. package/dist/columns/column_snapshot_provider.cjs.map +1 -1
  85. package/dist/columns/column_snapshot_provider.d.ts.map +1 -0
  86. package/dist/columns/column_snapshot_provider.js +1 -1
  87. package/dist/columns/column_snapshot_provider.js.map +1 -1
  88. package/dist/columns/ctx_column_sources.cjs +3 -4
  89. package/dist/columns/ctx_column_sources.cjs.map +1 -1
  90. package/dist/columns/ctx_column_sources.d.ts +0 -1
  91. package/dist/columns/ctx_column_sources.d.ts.map +1 -0
  92. package/dist/columns/ctx_column_sources.js +1 -2
  93. package/dist/columns/ctx_column_sources.js.map +1 -1
  94. package/dist/columns/index.cjs +5 -5
  95. package/dist/columns/index.js +5 -5
  96. package/dist/components/PFrameForGraphs.cjs +4 -5
  97. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  98. package/dist/components/PFrameForGraphs.d.ts +0 -1
  99. package/dist/components/PFrameForGraphs.d.ts.map +1 -0
  100. package/dist/components/PFrameForGraphs.js +2 -3
  101. package/dist/components/PFrameForGraphs.js.map +1 -1
  102. package/dist/components/PlAnnotations/filter.d.ts.map +1 -0
  103. package/dist/components/PlAnnotations/filters_ui.cjs +1 -2
  104. package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
  105. package/dist/components/PlAnnotations/filters_ui.d.ts +0 -2
  106. package/dist/components/PlAnnotations/filters_ui.d.ts.map +1 -0
  107. package/dist/components/PlAnnotations/filters_ui.js +1 -1
  108. package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
  109. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +9 -10
  110. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
  111. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +0 -1
  112. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -0
  113. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +1 -2
  114. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
  115. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +14 -15
  116. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
  117. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +0 -2
  118. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -0
  119. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +1 -2
  120. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
  121. package/dist/components/PlDataTable/createPlDataTable/index.cjs +3 -4
  122. package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
  123. package/dist/components/PlDataTable/createPlDataTable/index.d.ts +0 -1
  124. package/dist/components/PlDataTable/createPlDataTable/index.d.ts.map +1 -0
  125. package/dist/components/PlDataTable/createPlDataTable/index.js +1 -2
  126. package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
  127. package/dist/components/PlDataTable/createPlDataTableSheet.cjs +1 -2
  128. package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
  129. package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +0 -1
  130. package/dist/components/PlDataTable/createPlDataTableSheet.d.ts.map +1 -0
  131. package/dist/components/PlDataTable/createPlDataTableSheet.js +1 -1
  132. package/dist/components/PlDataTable/index.cjs +5 -5
  133. package/dist/components/PlDataTable/index.js +5 -5
  134. package/dist/components/PlDataTable/labels.cjs +4 -5
  135. package/dist/components/PlDataTable/labels.cjs.map +1 -1
  136. package/dist/components/PlDataTable/labels.js +1 -2
  137. package/dist/components/PlDataTable/labels.js.map +1 -1
  138. package/dist/components/PlDataTable/state-migration.cjs +4 -5
  139. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  140. package/dist/components/PlDataTable/state-migration.d.ts.map +1 -0
  141. package/dist/components/PlDataTable/state-migration.js +1 -2
  142. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  143. package/dist/components/PlDataTable/typesV4.d.ts.map +1 -0
  144. package/dist/components/PlDataTable/typesV5.d.ts +0 -1
  145. package/dist/components/PlDataTable/typesV5.d.ts.map +1 -0
  146. package/dist/components/PlMultiSequenceAlignment.cjs +2 -3
  147. package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
  148. package/dist/components/PlMultiSequenceAlignment.d.ts.map +1 -0
  149. package/dist/components/PlMultiSequenceAlignment.js +1 -2
  150. package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
  151. package/dist/components/PlSelectionModel.cjs +1 -2
  152. package/dist/components/PlSelectionModel.cjs.map +1 -1
  153. package/dist/components/PlSelectionModel.d.ts.map +1 -0
  154. package/dist/components/PlSelectionModel.js +1 -1
  155. package/dist/components/index.cjs +11 -11
  156. package/dist/components/index.d.ts +0 -2
  157. package/dist/components/index.js +10 -10
  158. package/dist/config/actions.cjs +1 -2
  159. package/dist/config/actions.cjs.map +1 -1
  160. package/dist/config/actions.d.ts.map +1 -0
  161. package/dist/config/actions.js +1 -1
  162. package/dist/config/actions_kinds.d.ts.map +1 -0
  163. package/dist/config/index.cjs +1 -1
  164. package/dist/config/index.js +1 -1
  165. package/dist/config/model.d.ts.map +1 -0
  166. package/dist/config/model_meta.d.ts.map +1 -0
  167. package/dist/config/type_engine.d.ts.map +1 -0
  168. package/dist/config/type_util.d.ts.map +1 -0
  169. package/dist/env_value.cjs +1 -2
  170. package/dist/env_value.cjs.map +1 -1
  171. package/dist/env_value.d.ts.map +1 -0
  172. package/dist/env_value.js +1 -1
  173. package/dist/env_value.js.map +1 -1
  174. package/dist/filters/converters/filterToQuery.cjs +3 -4
  175. package/dist/filters/converters/filterToQuery.cjs.map +1 -1
  176. package/dist/filters/converters/filterToQuery.d.ts.map +1 -0
  177. package/dist/filters/converters/filterToQuery.js +1 -2
  178. package/dist/filters/converters/filterToQuery.js.map +1 -1
  179. package/dist/filters/converters/filterUiToExpressionImpl.cjs +3 -4
  180. package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
  181. package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +1 -0
  182. package/dist/filters/converters/filterUiToExpressionImpl.js +1 -2
  183. package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
  184. package/dist/filters/converters/index.cjs +2 -2
  185. package/dist/filters/converters/index.js +2 -2
  186. package/dist/filters/distill.cjs +3 -4
  187. package/dist/filters/distill.cjs.map +1 -1
  188. package/dist/filters/distill.d.ts.map +1 -0
  189. package/dist/filters/distill.js +1 -2
  190. package/dist/filters/distill.js.map +1 -1
  191. package/dist/filters/index.cjs +4 -4
  192. package/dist/filters/index.d.ts +0 -1
  193. package/dist/filters/index.js +3 -3
  194. package/dist/filters/traverse.cjs +1 -2
  195. package/dist/filters/traverse.cjs.map +1 -1
  196. package/dist/filters/traverse.js +1 -1
  197. package/dist/filters/traverse.js.map +1 -1
  198. package/dist/filters/types.d.ts.map +1 -0
  199. package/dist/index.cjs +78 -76
  200. package/dist/index.d.ts +0 -9
  201. package/dist/index.js +3 -6
  202. package/dist/internal.cjs +1 -2
  203. package/dist/internal.cjs.map +1 -1
  204. package/dist/internal.js +1 -1
  205. package/dist/internal.js.map +1 -1
  206. package/dist/labels/derive_distinct_labels.cjs +2 -3
  207. package/dist/labels/derive_distinct_labels.cjs.map +1 -1
  208. package/dist/labels/derive_distinct_labels.d.ts.map +1 -0
  209. package/dist/labels/derive_distinct_labels.js +1 -2
  210. package/dist/labels/derive_distinct_labels.js.map +1 -1
  211. package/dist/labels/index.cjs +2 -2
  212. package/dist/labels/index.js +2 -2
  213. package/dist/labels/write_labels_to_specs.cjs +2 -3
  214. package/dist/labels/write_labels_to_specs.cjs.map +1 -1
  215. package/dist/labels/write_labels_to_specs.d.ts +0 -2
  216. package/dist/labels/write_labels_to_specs.d.ts.map +1 -0
  217. package/dist/labels/write_labels_to_specs.js +1 -2
  218. package/dist/labels/write_labels_to_specs.js.map +1 -1
  219. package/dist/package.cjs +7 -8
  220. package/dist/package.js +2 -2
  221. package/dist/pframe.cjs +2 -3
  222. package/dist/pframe.cjs.map +1 -1
  223. package/dist/pframe.d.ts.map +1 -0
  224. package/dist/pframe.js +1 -2
  225. package/dist/pframe.js.map +1 -1
  226. package/dist/pframe_utils/axes.cjs +2 -3
  227. package/dist/pframe_utils/axes.cjs.map +1 -1
  228. package/dist/pframe_utils/axes.d.ts +0 -1
  229. package/dist/pframe_utils/axes.d.ts.map +1 -0
  230. package/dist/pframe_utils/axes.js +1 -2
  231. package/dist/pframe_utils/axes.js.map +1 -1
  232. package/dist/pframe_utils/columns.cjs +5 -6
  233. package/dist/pframe_utils/columns.cjs.map +1 -1
  234. package/dist/pframe_utils/columns.d.ts +0 -1
  235. package/dist/pframe_utils/columns.d.ts.map +1 -0
  236. package/dist/pframe_utils/columns.js +1 -2
  237. package/dist/pframe_utils/columns.js.map +1 -1
  238. package/dist/pframe_utils/index.cjs +3 -4
  239. package/dist/pframe_utils/index.cjs.map +1 -1
  240. package/dist/pframe_utils/index.d.ts.map +1 -0
  241. package/dist/pframe_utils/index.js +2 -3
  242. package/dist/pframe_utils/index.js.map +1 -1
  243. package/dist/platforma.d.ts.map +1 -0
  244. package/dist/plugin_handle.cjs +1 -2
  245. package/dist/plugin_handle.cjs.map +1 -1
  246. package/dist/plugin_handle.d.ts.map +1 -0
  247. package/dist/plugin_handle.js +1 -1
  248. package/dist/plugin_model.cjs +3 -4
  249. package/dist/plugin_model.cjs.map +1 -1
  250. package/dist/plugin_model.d.ts +0 -1
  251. package/dist/plugin_model.d.ts.map +1 -0
  252. package/dist/plugin_model.js +1 -2
  253. package/dist/plugin_model.js.map +1 -1
  254. package/dist/raw_globals.cjs +3 -4
  255. package/dist/raw_globals.cjs.map +1 -1
  256. package/dist/raw_globals.d.ts.map +1 -0
  257. package/dist/raw_globals.js +1 -2
  258. package/dist/raw_globals.js.map +1 -1
  259. package/dist/ref_util.cjs +3 -4
  260. package/dist/ref_util.cjs.map +1 -1
  261. package/dist/ref_util.d.ts +0 -2
  262. package/dist/ref_util.d.ts.map +1 -0
  263. package/dist/ref_util.js +1 -2
  264. package/dist/ref_util.js.map +1 -1
  265. package/dist/render/accessor.cjs +4 -5
  266. package/dist/render/accessor.cjs.map +1 -1
  267. package/dist/render/accessor.d.ts.map +1 -0
  268. package/dist/render/accessor.js +1 -2
  269. package/dist/render/accessor.js.map +1 -1
  270. package/dist/render/api.cjs +10 -11
  271. package/dist/render/api.cjs.map +1 -1
  272. package/dist/render/api.d.ts +0 -1
  273. package/dist/render/api.d.ts.map +1 -0
  274. package/dist/render/api.js +1 -2
  275. package/dist/render/api.js.map +1 -1
  276. package/dist/render/future.cjs +2 -3
  277. package/dist/render/future.cjs.map +1 -1
  278. package/dist/render/future.d.ts.map +1 -0
  279. package/dist/render/future.js +1 -2
  280. package/dist/render/future.js.map +1 -1
  281. package/dist/render/index.cjs +8 -8
  282. package/dist/render/index.d.ts +1 -2
  283. package/dist/render/index.js +7 -7
  284. package/dist/render/internal.cjs +7 -9
  285. package/dist/render/internal.cjs.map +1 -1
  286. package/dist/render/internal.d.ts.map +1 -0
  287. package/dist/render/internal.js +1 -2
  288. package/dist/render/internal.js.map +1 -1
  289. package/dist/render/traversal_ops.d.ts.map +1 -0
  290. package/dist/render/util/axis_filtering.cjs +1 -2
  291. package/dist/render/util/axis_filtering.cjs.map +1 -1
  292. package/dist/render/util/axis_filtering.d.ts.map +1 -0
  293. package/dist/render/util/axis_filtering.js +1 -1
  294. package/dist/render/util/column_collection.cjs +5 -6
  295. package/dist/render/util/column_collection.cjs.map +1 -1
  296. package/dist/render/util/column_collection.d.ts +0 -1
  297. package/dist/render/util/column_collection.d.ts.map +1 -0
  298. package/dist/render/util/column_collection.js +1 -2
  299. package/dist/render/util/column_collection.js.map +1 -1
  300. package/dist/render/util/index.cjs +4 -4
  301. package/dist/render/util/index.js +4 -4
  302. package/dist/render/util/label.cjs +2 -3
  303. package/dist/render/util/label.cjs.map +1 -1
  304. package/dist/render/util/label.d.ts.map +1 -0
  305. package/dist/render/util/label.js +1 -2
  306. package/dist/render/util/label.js.map +1 -1
  307. package/dist/render/util/pcolumn_data.cjs +9 -10
  308. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  309. package/dist/render/util/pcolumn_data.d.ts.map +1 -0
  310. package/dist/render/util/pcolumn_data.js +7 -8
  311. package/dist/render/util/pcolumn_data.js.map +1 -1
  312. package/dist/render/util/pframe_upgraders.cjs +1 -2
  313. package/dist/render/util/pframe_upgraders.cjs.map +1 -1
  314. package/dist/render/util/pframe_upgraders.js +1 -1
  315. package/dist/render/util/split_selectors.d.ts.map +1 -0
  316. package/dist/services/block_services.cjs +2 -3
  317. package/dist/services/block_services.cjs.map +1 -1
  318. package/dist/services/block_services.d.ts +2 -2
  319. package/dist/services/block_services.d.ts.map +1 -0
  320. package/dist/services/block_services.js +1 -2
  321. package/dist/services/block_services.js.map +1 -1
  322. package/dist/services/index.cjs +2 -2
  323. package/dist/services/index.js +2 -2
  324. package/dist/services/service_bridge.cjs +1 -2
  325. package/dist/services/service_bridge.cjs.map +1 -1
  326. package/dist/services/service_bridge.d.ts.map +1 -0
  327. package/dist/services/service_bridge.js +1 -1
  328. package/dist/services/service_resolve.d.ts.map +1 -0
  329. package/dist/version.cjs +2 -4
  330. package/dist/version.cjs.map +1 -1
  331. package/dist/version.d.ts.map +1 -0
  332. package/dist/version.js +1 -2
  333. package/dist/version.js.map +1 -1
  334. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"internal.cjs","names":[],"sources":["../../src/render/internal.ts"],"sourcesContent":["import type { Optional } from \"utility-types\";\nimport type { Branded, StringifiedJson } from \"@milaboratories/pl-model-common\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\nimport type {\n ArchiveFormat,\n AnyFunction,\n Option,\n PColumn,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectSpec,\n PSpecPredicate,\n PTableDef,\n PTableDefV2,\n PTableHandle,\n ResultCollection,\n ValueOrError,\n DataInfo,\n RangeBytes,\n} from \"@milaboratories/pl-model-common\";\nimport type { TreeNodeAccessor } from \"./accessor\";\nimport type { ServiceDispatch } from \"@milaboratories/pl-model-common\";\n\nexport const StagingAccessorName = \"staging\";\nexport const MainAccessorName = \"main\";\n\nexport type AccessorHandle = Branded<string, \"AccessorHandle\">;\nexport type FutureHandle = Branded<string, \"FutureHandle\">;\n\nexport type PColumnDataUniversal<TreeEntry = TreeNodeAccessor> =\n | TreeEntry\n | DataInfo<TreeEntry>\n | PColumnValues;\n\nexport interface GlobalCfgRenderCtxMethods<AHandle = AccessorHandle, FHandle = FutureHandle> {\n //\n // Root accessor creation\n //\n\n getAccessorHandleByName(name: string): AHandle | undefined;\n\n //\n // Basic resource accessor actions\n //\n\n resolveWithCommon(\n handle: AHandle,\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): AHandle | undefined;\n\n getResourceType(handle: AHandle): ResourceType;\n\n getInputsLocked(handle: AHandle): boolean;\n\n getOutputsLocked(handle: AHandle): boolean;\n\n getIsReadyOrError(handle: AHandle): boolean;\n\n getIsFinal(handle: AHandle): boolean;\n\n getError(handle: AHandle): AHandle | undefined;\n\n listInputFields(handle: AHandle): string[];\n\n listOutputFields(handle: AHandle): string[];\n\n listDynamicFields(handle: AHandle): string[];\n\n getKeyValueBase64(handle: AHandle, key: string): string | undefined;\n\n getKeyValueAsString(handle: AHandle, key: string): string | undefined;\n\n getDataBase64(handle: AHandle): string | undefined;\n\n getDataAsString(handle: AHandle): string | undefined;\n\n /** If not final returns undefined */\n parsePObjectCollection(\n handle: AHandle,\n errorOnUnknownField: boolean,\n prefix: string,\n ...resolvePath: string[]\n ): Record<string, PObject<AHandle>> | undefined;\n\n //\n // Blob\n //\n\n getBlobContentAsBase64(handle: AHandle, range?: RangeBytes): FHandle; // string | undefined\n\n getBlobContentAsString(handle: AHandle, range?: RangeBytes): FHandle; // string | undefined\n\n getDownloadedBlobContentHandle(handle: AHandle): FHandle; // LocalBlobHandleAndSize | undefined;\n\n getOnDemandBlobContentHandle(handle: AHandle): FHandle; // RemoteBlobHandleAndSize | undefined;\n\n //\n // Blobs to URLs\n //\n\n extractArchiveAndGetURL(handle: AHandle, format: ArchiveFormat): FHandle;\n\n //\n // Import progress\n //\n\n getImportProgress(handle: AHandle): FHandle; // ImportProgress;\n\n //\n // Logs\n //\n\n getLastLogs(handle: AHandle, nLines: number): FHandle; // string | undefined;\n\n getProgressLog(handle: AHandle, patternToSearch: string): FHandle; // string | undefined;\n\n getProgressLogWithInfo(handle: AHandle, patternToSearch: string): FHandle; // ProgressLogWithInfo | undefined;\n\n getLogHandle(handle: AHandle): FHandle; // AnyLogHandle | undefined;\n\n //\n // Blocks\n //\n\n /** @deprecated at some point will stop working and will return dummy values */\n getBlockLabel(blockId: string): string;\n\n //\n // Result Pool\n //\n\n getDataFromResultPool(): ResultCollection<PObject<AHandle>>;\n\n getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<AHandle, Error>>, \"id\">\n >;\n\n getSpecsFromResultPool(): ResultCollection<PObjectSpec>;\n\n getSpecFromResultPoolByRef(blockId: string, exportName: string): PObjectSpec | undefined;\n\n getDataFromResultPoolByRef(blockId: string, exportName: string): PObject<AHandle> | undefined;\n\n calculateOptions(predicate: PSpecPredicate): Option[];\n\n //\n // PFrame / PTable\n //\n\n createPFrame(def: PFrameDef<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>): PFrameHandle;\n\n createPTable(def: PTableDef<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>): PTableHandle;\n\n createPTableV2(\n def: PTableDefV2<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>,\n ): PTableHandle;\n\n //\n // Computable\n //\n\n getCurrentUnstableMarker(): string | undefined;\n\n //\n // Logging\n //\n\n logInfo(message: string): void;\n\n logWarn(message: string): void;\n\n logError(message: string): void;\n}\n\nexport const GlobalCfgRenderCtxFeatureFlags = {\n explicitColumnsSupport: true as const,\n inlineColumnsSupport: true as const,\n activeArgs: true as const,\n pTablePartitionFiltersSupport: true as const,\n pFrameInSetFilterSupport: true as const,\n};\n\nexport interface GlobalCfgRenderCtx extends GlobalCfgRenderCtxMethods, ServiceDispatch {\n //\n // State: Args, UI State, Active Args\n //\n // Old runtime injects these values as strings, new runtime injects them as functions\n // that return strings, if block declares supportsLazyState flag.\n // If function not called in lazy state API, then resulting output will not depend on these values,\n // and thus will not be recalculated on corresponding state change.\n //\n\n readonly args: string | (() => string);\n /** @deprecated Use `data` instead. Optional for backward compatibility - falls back to `data` if not injected. */\n readonly uiState?: string | (() => string);\n readonly data: string | (() => string);\n readonly activeArgs: undefined | string | (() => string | undefined);\n\n readonly blockStorage: () => StringifiedJson;\n\n // Note: strings below are used because, anyway, using strings is the only way\n // to get data inside the QuickJS context, as it is implemented now. With this\n // approach deserialization can be lazily postponed until it is actually needed.\n readonly callbackRegistry: Record<string, AnyFunction>;\n readonly featureFlags?: typeof GlobalCfgRenderCtxFeatureFlags;\n}\n\nexport type FutureAwait = {\n __awaited_futures__: FutureHandle[];\n};\n\nexport function isFutureAwait(obj: unknown): obj is FutureAwait {\n return typeof obj === \"object\" && obj !== null && \"__awaited_futures__\" in obj;\n}\n\nfunction addAllFutureAwaits(set: Set<string>, visited: Set<unknown>, node: unknown) {\n if (visited.has(node)) return;\n visited.add(node);\n\n const type = typeof node;\n if (type === \"object\") {\n if (isFutureAwait(node)) node.__awaited_futures__.forEach((a) => set.add(a));\n else if (Array.isArray(node))\n for (const nested of node) addAllFutureAwaits(set, visited, nested);\n else\n for (const [, nested] of Object.entries(node as object))\n if (nested !== node) addAllFutureAwaits(set, visited, nested);\n }\n}\n\nexport function getAllFutureAwaits(obj: unknown): Set<string> {\n const set = new Set<string>();\n addAllFutureAwaits(set, new Set(), obj);\n return set;\n}\n"],"mappings":";;;;;;;;;;AAyBA,MAAa,sBAAsB;AACnC,MAAa,mBAAmB;AAuJhC,MAAa,iCAAiC;CAC5C,wBAAwB;CACxB,sBAAsB;CACtB,YAAY;CACZ,+BAA+B;CAC/B,0BAA0B;CAC3B;AA+BD,SAAgB,cAAc,KAAkC;AAC9D,QAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,yBAAyB;;AAG7E,SAAS,mBAAmB,KAAkB,SAAuB,MAAe;AAClF,KAAI,QAAQ,IAAI,KAAK,CAAE;AACvB,SAAQ,IAAI,KAAK;AAGjB,KADa,OAAO,SACP,UACX;MAAI,cAAc,KAAK,CAAE,MAAK,oBAAoB,SAAS,MAAM,IAAI,IAAI,EAAE,CAAC;WACnE,MAAM,QAAQ,KAAK,CAC1B,MAAK,MAAM,UAAU,KAAM,oBAAmB,KAAK,SAAS,OAAO;MAEnE,MAAK,MAAM,GAAG,WAAW,OAAO,QAAQ,KAAe,CACrD,KAAI,WAAW,KAAM,oBAAmB,KAAK,SAAS,OAAO;;;AAIrE,SAAgB,mBAAmB,KAA2B;CAC5D,MAAM,sBAAM,IAAI,KAAa;AAC7B,oBAAmB,qBAAK,IAAI,KAAK,EAAE,IAAI;AACvC,QAAO"}
1
+ {"version":3,"file":"internal.cjs","names":[],"sources":["../../src/render/internal.ts"],"sourcesContent":["import type { Optional } from \"utility-types\";\nimport type { Branded, StringifiedJson } from \"@milaboratories/pl-model-common\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\nimport type {\n ArchiveFormat,\n AnyFunction,\n Option,\n PColumn,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectSpec,\n PSpecPredicate,\n PTableDef,\n PTableDefV2,\n PTableHandle,\n ResultCollection,\n ValueOrError,\n DataInfo,\n RangeBytes,\n} from \"@milaboratories/pl-model-common\";\nimport type { TreeNodeAccessor } from \"./accessor\";\nimport type { ServiceDispatch } from \"@milaboratories/pl-model-common\";\n\nexport const StagingAccessorName = \"staging\";\nexport const MainAccessorName = \"main\";\n\nexport type AccessorHandle = Branded<string, \"AccessorHandle\">;\nexport type FutureHandle = Branded<string, \"FutureHandle\">;\n\nexport type PColumnDataUniversal<TreeEntry = TreeNodeAccessor> =\n | TreeEntry\n | DataInfo<TreeEntry>\n | PColumnValues;\n\nexport interface GlobalCfgRenderCtxMethods<AHandle = AccessorHandle, FHandle = FutureHandle> {\n //\n // Root accessor creation\n //\n\n getAccessorHandleByName(name: string): AHandle | undefined;\n\n //\n // Basic resource accessor actions\n //\n\n resolveWithCommon(\n handle: AHandle,\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): AHandle | undefined;\n\n getResourceType(handle: AHandle): ResourceType;\n\n getInputsLocked(handle: AHandle): boolean;\n\n getOutputsLocked(handle: AHandle): boolean;\n\n getIsReadyOrError(handle: AHandle): boolean;\n\n getIsFinal(handle: AHandle): boolean;\n\n getError(handle: AHandle): AHandle | undefined;\n\n listInputFields(handle: AHandle): string[];\n\n listOutputFields(handle: AHandle): string[];\n\n listDynamicFields(handle: AHandle): string[];\n\n getKeyValueBase64(handle: AHandle, key: string): string | undefined;\n\n getKeyValueAsString(handle: AHandle, key: string): string | undefined;\n\n getDataBase64(handle: AHandle): string | undefined;\n\n getDataAsString(handle: AHandle): string | undefined;\n\n /** If not final returns undefined */\n parsePObjectCollection(\n handle: AHandle,\n errorOnUnknownField: boolean,\n prefix: string,\n ...resolvePath: string[]\n ): Record<string, PObject<AHandle>> | undefined;\n\n //\n // Blob\n //\n\n getBlobContentAsBase64(handle: AHandle, range?: RangeBytes): FHandle; // string | undefined\n\n getBlobContentAsString(handle: AHandle, range?: RangeBytes): FHandle; // string | undefined\n\n getDownloadedBlobContentHandle(handle: AHandle): FHandle; // LocalBlobHandleAndSize | undefined;\n\n getOnDemandBlobContentHandle(handle: AHandle): FHandle; // RemoteBlobHandleAndSize | undefined;\n\n //\n // Blobs to URLs\n //\n\n extractArchiveAndGetURL(handle: AHandle, format: ArchiveFormat): FHandle;\n\n //\n // Import progress\n //\n\n getImportProgress(handle: AHandle): FHandle; // ImportProgress;\n\n //\n // Logs\n //\n\n getLastLogs(handle: AHandle, nLines: number): FHandle; // string | undefined;\n\n getProgressLog(handle: AHandle, patternToSearch: string): FHandle; // string | undefined;\n\n getProgressLogWithInfo(handle: AHandle, patternToSearch: string): FHandle; // ProgressLogWithInfo | undefined;\n\n getLogHandle(handle: AHandle): FHandle; // AnyLogHandle | undefined;\n\n //\n // Blocks\n //\n\n /** @deprecated at some point will stop working and will return dummy values */\n getBlockLabel(blockId: string): string;\n\n //\n // Result Pool\n //\n\n getDataFromResultPool(): ResultCollection<PObject<AHandle>>;\n\n getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<AHandle, Error>>, \"id\">\n >;\n\n getSpecsFromResultPool(): ResultCollection<PObjectSpec>;\n\n getSpecFromResultPoolByRef(blockId: string, exportName: string): PObjectSpec | undefined;\n\n getDataFromResultPoolByRef(blockId: string, exportName: string): PObject<AHandle> | undefined;\n\n calculateOptions(predicate: PSpecPredicate): Option[];\n\n //\n // PFrame / PTable\n //\n\n createPFrame(def: PFrameDef<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>): PFrameHandle;\n\n createPTable(def: PTableDef<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>): PTableHandle;\n\n createPTableV2(\n def: PTableDefV2<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>,\n ): PTableHandle;\n\n //\n // Computable\n //\n\n getCurrentUnstableMarker(): string | undefined;\n\n //\n // Logging\n //\n\n logInfo(message: string): void;\n\n logWarn(message: string): void;\n\n logError(message: string): void;\n}\n\nexport const GlobalCfgRenderCtxFeatureFlags = {\n explicitColumnsSupport: true as const,\n inlineColumnsSupport: true as const,\n activeArgs: true as const,\n pTablePartitionFiltersSupport: true as const,\n pFrameInSetFilterSupport: true as const,\n};\n\nexport interface GlobalCfgRenderCtx extends GlobalCfgRenderCtxMethods, ServiceDispatch {\n //\n // State: Args, UI State, Active Args\n //\n // Old runtime injects these values as strings, new runtime injects them as functions\n // that return strings, if block declares supportsLazyState flag.\n // If function not called in lazy state API, then resulting output will not depend on these values,\n // and thus will not be recalculated on corresponding state change.\n //\n\n readonly args: string | (() => string);\n /** @deprecated Use `data` instead. Optional for backward compatibility - falls back to `data` if not injected. */\n readonly uiState?: string | (() => string);\n readonly data: string | (() => string);\n readonly activeArgs: undefined | string | (() => string | undefined);\n\n readonly blockStorage: () => StringifiedJson;\n\n // Note: strings below are used because, anyway, using strings is the only way\n // to get data inside the QuickJS context, as it is implemented now. With this\n // approach deserialization can be lazily postponed until it is actually needed.\n readonly callbackRegistry: Record<string, AnyFunction>;\n readonly featureFlags?: typeof GlobalCfgRenderCtxFeatureFlags;\n}\n\nexport type FutureAwait = {\n __awaited_futures__: FutureHandle[];\n};\n\nexport function isFutureAwait(obj: unknown): obj is FutureAwait {\n return typeof obj === \"object\" && obj !== null && \"__awaited_futures__\" in obj;\n}\n\nfunction addAllFutureAwaits(set: Set<string>, visited: Set<unknown>, node: unknown) {\n if (visited.has(node)) return;\n visited.add(node);\n\n const type = typeof node;\n if (type === \"object\") {\n if (isFutureAwait(node)) node.__awaited_futures__.forEach((a) => set.add(a));\n else if (Array.isArray(node))\n for (const nested of node) addAllFutureAwaits(set, visited, nested);\n else\n for (const [, nested] of Object.entries(node as object))\n if (nested !== node) addAllFutureAwaits(set, visited, nested);\n }\n}\n\nexport function getAllFutureAwaits(obj: unknown): Set<string> {\n const set = new Set<string>();\n addAllFutureAwaits(set, new Set(), obj);\n return set;\n}\n"],"mappings":";;;;;;;;AAyBA,MAAa,sBAAsB;AACnC,MAAa,mBAAmB;AAuJhC,MAAa,iCAAiC;CAC5C,wBAAwB;CACxB,sBAAsB;CACtB,YAAY;CACZ,+BAA+B;CAC/B,0BAA0B;CAC3B;AA+BD,SAAgB,cAAc,KAAkC;AAC9D,QAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,yBAAyB;;AAG7E,SAAS,mBAAmB,KAAkB,SAAuB,MAAe;AAClF,KAAI,QAAQ,IAAI,KAAK,CAAE;AACvB,SAAQ,IAAI,KAAK;AAGjB,KADa,OAAO,SACP;MACP,cAAc,KAAK,CAAE,MAAK,oBAAoB,SAAS,MAAM,IAAI,IAAI,EAAE,CAAC;WACnE,MAAM,QAAQ,KAAK,CAC1B,MAAK,MAAM,UAAU,KAAM,oBAAmB,KAAK,SAAS,OAAO;MAEnE,MAAK,MAAM,GAAG,WAAW,OAAO,QAAQ,KAAe,CACrD,KAAI,WAAW,KAAM,oBAAmB,KAAK,SAAS,OAAO;;;AAIrE,SAAgB,mBAAmB,KAA2B;CAC5D,MAAM,sBAAM,IAAI,KAAa;AAC7B,oBAAmB,qBAAK,IAAI,KAAK,EAAE,IAAI;AACvC,QAAO"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","names":[],"sources":["../../src/render/internal.ts"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
-
3
2
  //#region src/render/internal.ts
4
3
  var internal_exports = /* @__PURE__ */ __exportAll({
5
4
  GlobalCfgRenderCtxFeatureFlags: () => GlobalCfgRenderCtxFeatureFlags,
@@ -34,7 +33,7 @@ function getAllFutureAwaits(obj) {
34
33
  addAllFutureAwaits(set, /* @__PURE__ */ new Set(), obj);
35
34
  return set;
36
35
  }
37
-
38
36
  //#endregion
39
37
  export { MainAccessorName, StagingAccessorName, internal_exports };
38
+
40
39
  //# sourceMappingURL=internal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","names":[],"sources":["../../src/render/internal.ts"],"sourcesContent":["import type { Optional } from \"utility-types\";\nimport type { Branded, StringifiedJson } from \"@milaboratories/pl-model-common\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\nimport type {\n ArchiveFormat,\n AnyFunction,\n Option,\n PColumn,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectSpec,\n PSpecPredicate,\n PTableDef,\n PTableDefV2,\n PTableHandle,\n ResultCollection,\n ValueOrError,\n DataInfo,\n RangeBytes,\n} from \"@milaboratories/pl-model-common\";\nimport type { TreeNodeAccessor } from \"./accessor\";\nimport type { ServiceDispatch } from \"@milaboratories/pl-model-common\";\n\nexport const StagingAccessorName = \"staging\";\nexport const MainAccessorName = \"main\";\n\nexport type AccessorHandle = Branded<string, \"AccessorHandle\">;\nexport type FutureHandle = Branded<string, \"FutureHandle\">;\n\nexport type PColumnDataUniversal<TreeEntry = TreeNodeAccessor> =\n | TreeEntry\n | DataInfo<TreeEntry>\n | PColumnValues;\n\nexport interface GlobalCfgRenderCtxMethods<AHandle = AccessorHandle, FHandle = FutureHandle> {\n //\n // Root accessor creation\n //\n\n getAccessorHandleByName(name: string): AHandle | undefined;\n\n //\n // Basic resource accessor actions\n //\n\n resolveWithCommon(\n handle: AHandle,\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): AHandle | undefined;\n\n getResourceType(handle: AHandle): ResourceType;\n\n getInputsLocked(handle: AHandle): boolean;\n\n getOutputsLocked(handle: AHandle): boolean;\n\n getIsReadyOrError(handle: AHandle): boolean;\n\n getIsFinal(handle: AHandle): boolean;\n\n getError(handle: AHandle): AHandle | undefined;\n\n listInputFields(handle: AHandle): string[];\n\n listOutputFields(handle: AHandle): string[];\n\n listDynamicFields(handle: AHandle): string[];\n\n getKeyValueBase64(handle: AHandle, key: string): string | undefined;\n\n getKeyValueAsString(handle: AHandle, key: string): string | undefined;\n\n getDataBase64(handle: AHandle): string | undefined;\n\n getDataAsString(handle: AHandle): string | undefined;\n\n /** If not final returns undefined */\n parsePObjectCollection(\n handle: AHandle,\n errorOnUnknownField: boolean,\n prefix: string,\n ...resolvePath: string[]\n ): Record<string, PObject<AHandle>> | undefined;\n\n //\n // Blob\n //\n\n getBlobContentAsBase64(handle: AHandle, range?: RangeBytes): FHandle; // string | undefined\n\n getBlobContentAsString(handle: AHandle, range?: RangeBytes): FHandle; // string | undefined\n\n getDownloadedBlobContentHandle(handle: AHandle): FHandle; // LocalBlobHandleAndSize | undefined;\n\n getOnDemandBlobContentHandle(handle: AHandle): FHandle; // RemoteBlobHandleAndSize | undefined;\n\n //\n // Blobs to URLs\n //\n\n extractArchiveAndGetURL(handle: AHandle, format: ArchiveFormat): FHandle;\n\n //\n // Import progress\n //\n\n getImportProgress(handle: AHandle): FHandle; // ImportProgress;\n\n //\n // Logs\n //\n\n getLastLogs(handle: AHandle, nLines: number): FHandle; // string | undefined;\n\n getProgressLog(handle: AHandle, patternToSearch: string): FHandle; // string | undefined;\n\n getProgressLogWithInfo(handle: AHandle, patternToSearch: string): FHandle; // ProgressLogWithInfo | undefined;\n\n getLogHandle(handle: AHandle): FHandle; // AnyLogHandle | undefined;\n\n //\n // Blocks\n //\n\n /** @deprecated at some point will stop working and will return dummy values */\n getBlockLabel(blockId: string): string;\n\n //\n // Result Pool\n //\n\n getDataFromResultPool(): ResultCollection<PObject<AHandle>>;\n\n getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<AHandle, Error>>, \"id\">\n >;\n\n getSpecsFromResultPool(): ResultCollection<PObjectSpec>;\n\n getSpecFromResultPoolByRef(blockId: string, exportName: string): PObjectSpec | undefined;\n\n getDataFromResultPoolByRef(blockId: string, exportName: string): PObject<AHandle> | undefined;\n\n calculateOptions(predicate: PSpecPredicate): Option[];\n\n //\n // PFrame / PTable\n //\n\n createPFrame(def: PFrameDef<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>): PFrameHandle;\n\n createPTable(def: PTableDef<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>): PTableHandle;\n\n createPTableV2(\n def: PTableDefV2<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>,\n ): PTableHandle;\n\n //\n // Computable\n //\n\n getCurrentUnstableMarker(): string | undefined;\n\n //\n // Logging\n //\n\n logInfo(message: string): void;\n\n logWarn(message: string): void;\n\n logError(message: string): void;\n}\n\nexport const GlobalCfgRenderCtxFeatureFlags = {\n explicitColumnsSupport: true as const,\n inlineColumnsSupport: true as const,\n activeArgs: true as const,\n pTablePartitionFiltersSupport: true as const,\n pFrameInSetFilterSupport: true as const,\n};\n\nexport interface GlobalCfgRenderCtx extends GlobalCfgRenderCtxMethods, ServiceDispatch {\n //\n // State: Args, UI State, Active Args\n //\n // Old runtime injects these values as strings, new runtime injects them as functions\n // that return strings, if block declares supportsLazyState flag.\n // If function not called in lazy state API, then resulting output will not depend on these values,\n // and thus will not be recalculated on corresponding state change.\n //\n\n readonly args: string | (() => string);\n /** @deprecated Use `data` instead. Optional for backward compatibility - falls back to `data` if not injected. */\n readonly uiState?: string | (() => string);\n readonly data: string | (() => string);\n readonly activeArgs: undefined | string | (() => string | undefined);\n\n readonly blockStorage: () => StringifiedJson;\n\n // Note: strings below are used because, anyway, using strings is the only way\n // to get data inside the QuickJS context, as it is implemented now. With this\n // approach deserialization can be lazily postponed until it is actually needed.\n readonly callbackRegistry: Record<string, AnyFunction>;\n readonly featureFlags?: typeof GlobalCfgRenderCtxFeatureFlags;\n}\n\nexport type FutureAwait = {\n __awaited_futures__: FutureHandle[];\n};\n\nexport function isFutureAwait(obj: unknown): obj is FutureAwait {\n return typeof obj === \"object\" && obj !== null && \"__awaited_futures__\" in obj;\n}\n\nfunction addAllFutureAwaits(set: Set<string>, visited: Set<unknown>, node: unknown) {\n if (visited.has(node)) return;\n visited.add(node);\n\n const type = typeof node;\n if (type === \"object\") {\n if (isFutureAwait(node)) node.__awaited_futures__.forEach((a) => set.add(a));\n else if (Array.isArray(node))\n for (const nested of node) addAllFutureAwaits(set, visited, nested);\n else\n for (const [, nested] of Object.entries(node as object))\n if (nested !== node) addAllFutureAwaits(set, visited, nested);\n }\n}\n\nexport function getAllFutureAwaits(obj: unknown): Set<string> {\n const set = new Set<string>();\n addAllFutureAwaits(set, new Set(), obj);\n return set;\n}\n"],"mappings":";;;;;;;;;;AAyBA,MAAa,sBAAsB;AACnC,MAAa,mBAAmB;AAuJhC,MAAa,iCAAiC;CAC5C,wBAAwB;CACxB,sBAAsB;CACtB,YAAY;CACZ,+BAA+B;CAC/B,0BAA0B;CAC3B;AA+BD,SAAgB,cAAc,KAAkC;AAC9D,QAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,yBAAyB;;AAG7E,SAAS,mBAAmB,KAAkB,SAAuB,MAAe;AAClF,KAAI,QAAQ,IAAI,KAAK,CAAE;AACvB,SAAQ,IAAI,KAAK;AAGjB,KADa,OAAO,SACP,UACX;MAAI,cAAc,KAAK,CAAE,MAAK,oBAAoB,SAAS,MAAM,IAAI,IAAI,EAAE,CAAC;WACnE,MAAM,QAAQ,KAAK,CAC1B,MAAK,MAAM,UAAU,KAAM,oBAAmB,KAAK,SAAS,OAAO;MAEnE,MAAK,MAAM,GAAG,WAAW,OAAO,QAAQ,KAAe,CACrD,KAAI,WAAW,KAAM,oBAAmB,KAAK,SAAS,OAAO;;;AAIrE,SAAgB,mBAAmB,KAA2B;CAC5D,MAAM,sBAAM,IAAI,KAAa;AAC7B,oBAAmB,qBAAK,IAAI,KAAK,EAAE,IAAI;AACvC,QAAO"}
1
+ {"version":3,"file":"internal.js","names":[],"sources":["../../src/render/internal.ts"],"sourcesContent":["import type { Optional } from \"utility-types\";\nimport type { Branded, StringifiedJson } from \"@milaboratories/pl-model-common\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\nimport type {\n ArchiveFormat,\n AnyFunction,\n Option,\n PColumn,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectSpec,\n PSpecPredicate,\n PTableDef,\n PTableDefV2,\n PTableHandle,\n ResultCollection,\n ValueOrError,\n DataInfo,\n RangeBytes,\n} from \"@milaboratories/pl-model-common\";\nimport type { TreeNodeAccessor } from \"./accessor\";\nimport type { ServiceDispatch } from \"@milaboratories/pl-model-common\";\n\nexport const StagingAccessorName = \"staging\";\nexport const MainAccessorName = \"main\";\n\nexport type AccessorHandle = Branded<string, \"AccessorHandle\">;\nexport type FutureHandle = Branded<string, \"FutureHandle\">;\n\nexport type PColumnDataUniversal<TreeEntry = TreeNodeAccessor> =\n | TreeEntry\n | DataInfo<TreeEntry>\n | PColumnValues;\n\nexport interface GlobalCfgRenderCtxMethods<AHandle = AccessorHandle, FHandle = FutureHandle> {\n //\n // Root accessor creation\n //\n\n getAccessorHandleByName(name: string): AHandle | undefined;\n\n //\n // Basic resource accessor actions\n //\n\n resolveWithCommon(\n handle: AHandle,\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): AHandle | undefined;\n\n getResourceType(handle: AHandle): ResourceType;\n\n getInputsLocked(handle: AHandle): boolean;\n\n getOutputsLocked(handle: AHandle): boolean;\n\n getIsReadyOrError(handle: AHandle): boolean;\n\n getIsFinal(handle: AHandle): boolean;\n\n getError(handle: AHandle): AHandle | undefined;\n\n listInputFields(handle: AHandle): string[];\n\n listOutputFields(handle: AHandle): string[];\n\n listDynamicFields(handle: AHandle): string[];\n\n getKeyValueBase64(handle: AHandle, key: string): string | undefined;\n\n getKeyValueAsString(handle: AHandle, key: string): string | undefined;\n\n getDataBase64(handle: AHandle): string | undefined;\n\n getDataAsString(handle: AHandle): string | undefined;\n\n /** If not final returns undefined */\n parsePObjectCollection(\n handle: AHandle,\n errorOnUnknownField: boolean,\n prefix: string,\n ...resolvePath: string[]\n ): Record<string, PObject<AHandle>> | undefined;\n\n //\n // Blob\n //\n\n getBlobContentAsBase64(handle: AHandle, range?: RangeBytes): FHandle; // string | undefined\n\n getBlobContentAsString(handle: AHandle, range?: RangeBytes): FHandle; // string | undefined\n\n getDownloadedBlobContentHandle(handle: AHandle): FHandle; // LocalBlobHandleAndSize | undefined;\n\n getOnDemandBlobContentHandle(handle: AHandle): FHandle; // RemoteBlobHandleAndSize | undefined;\n\n //\n // Blobs to URLs\n //\n\n extractArchiveAndGetURL(handle: AHandle, format: ArchiveFormat): FHandle;\n\n //\n // Import progress\n //\n\n getImportProgress(handle: AHandle): FHandle; // ImportProgress;\n\n //\n // Logs\n //\n\n getLastLogs(handle: AHandle, nLines: number): FHandle; // string | undefined;\n\n getProgressLog(handle: AHandle, patternToSearch: string): FHandle; // string | undefined;\n\n getProgressLogWithInfo(handle: AHandle, patternToSearch: string): FHandle; // ProgressLogWithInfo | undefined;\n\n getLogHandle(handle: AHandle): FHandle; // AnyLogHandle | undefined;\n\n //\n // Blocks\n //\n\n /** @deprecated at some point will stop working and will return dummy values */\n getBlockLabel(blockId: string): string;\n\n //\n // Result Pool\n //\n\n getDataFromResultPool(): ResultCollection<PObject<AHandle>>;\n\n getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<AHandle, Error>>, \"id\">\n >;\n\n getSpecsFromResultPool(): ResultCollection<PObjectSpec>;\n\n getSpecFromResultPoolByRef(blockId: string, exportName: string): PObjectSpec | undefined;\n\n getDataFromResultPoolByRef(blockId: string, exportName: string): PObject<AHandle> | undefined;\n\n calculateOptions(predicate: PSpecPredicate): Option[];\n\n //\n // PFrame / PTable\n //\n\n createPFrame(def: PFrameDef<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>): PFrameHandle;\n\n createPTable(def: PTableDef<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>): PTableHandle;\n\n createPTableV2(\n def: PTableDefV2<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>,\n ): PTableHandle;\n\n //\n // Computable\n //\n\n getCurrentUnstableMarker(): string | undefined;\n\n //\n // Logging\n //\n\n logInfo(message: string): void;\n\n logWarn(message: string): void;\n\n logError(message: string): void;\n}\n\nexport const GlobalCfgRenderCtxFeatureFlags = {\n explicitColumnsSupport: true as const,\n inlineColumnsSupport: true as const,\n activeArgs: true as const,\n pTablePartitionFiltersSupport: true as const,\n pFrameInSetFilterSupport: true as const,\n};\n\nexport interface GlobalCfgRenderCtx extends GlobalCfgRenderCtxMethods, ServiceDispatch {\n //\n // State: Args, UI State, Active Args\n //\n // Old runtime injects these values as strings, new runtime injects them as functions\n // that return strings, if block declares supportsLazyState flag.\n // If function not called in lazy state API, then resulting output will not depend on these values,\n // and thus will not be recalculated on corresponding state change.\n //\n\n readonly args: string | (() => string);\n /** @deprecated Use `data` instead. Optional for backward compatibility - falls back to `data` if not injected. */\n readonly uiState?: string | (() => string);\n readonly data: string | (() => string);\n readonly activeArgs: undefined | string | (() => string | undefined);\n\n readonly blockStorage: () => StringifiedJson;\n\n // Note: strings below are used because, anyway, using strings is the only way\n // to get data inside the QuickJS context, as it is implemented now. With this\n // approach deserialization can be lazily postponed until it is actually needed.\n readonly callbackRegistry: Record<string, AnyFunction>;\n readonly featureFlags?: typeof GlobalCfgRenderCtxFeatureFlags;\n}\n\nexport type FutureAwait = {\n __awaited_futures__: FutureHandle[];\n};\n\nexport function isFutureAwait(obj: unknown): obj is FutureAwait {\n return typeof obj === \"object\" && obj !== null && \"__awaited_futures__\" in obj;\n}\n\nfunction addAllFutureAwaits(set: Set<string>, visited: Set<unknown>, node: unknown) {\n if (visited.has(node)) return;\n visited.add(node);\n\n const type = typeof node;\n if (type === \"object\") {\n if (isFutureAwait(node)) node.__awaited_futures__.forEach((a) => set.add(a));\n else if (Array.isArray(node))\n for (const nested of node) addAllFutureAwaits(set, visited, nested);\n else\n for (const [, nested] of Object.entries(node as object))\n if (nested !== node) addAllFutureAwaits(set, visited, nested);\n }\n}\n\nexport function getAllFutureAwaits(obj: unknown): Set<string> {\n const set = new Set<string>();\n addAllFutureAwaits(set, new Set(), obj);\n return set;\n}\n"],"mappings":";;;;;;;;;AAyBA,MAAa,sBAAsB;AACnC,MAAa,mBAAmB;AAuJhC,MAAa,iCAAiC;CAC5C,wBAAwB;CACxB,sBAAsB;CACtB,YAAY;CACZ,+BAA+B;CAC/B,0BAA0B;CAC3B;AA+BD,SAAgB,cAAc,KAAkC;AAC9D,QAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,yBAAyB;;AAG7E,SAAS,mBAAmB,KAAkB,SAAuB,MAAe;AAClF,KAAI,QAAQ,IAAI,KAAK,CAAE;AACvB,SAAQ,IAAI,KAAK;AAGjB,KADa,OAAO,SACP;MACP,cAAc,KAAK,CAAE,MAAK,oBAAoB,SAAS,MAAM,IAAI,IAAI,EAAE,CAAC;WACnE,MAAM,QAAQ,KAAK,CAC1B,MAAK,MAAM,UAAU,KAAM,oBAAmB,KAAK,SAAS,OAAO;MAEnE,MAAK,MAAM,GAAG,WAAW,OAAO,QAAQ,KAAe,CACrD,KAAI,WAAW,KAAM,oBAAmB,KAAK,SAAS,OAAO;;;AAIrE,SAAgB,mBAAmB,KAA2B;CAC5D,MAAM,sBAAM,IAAI,KAAa;AAC7B,oBAAmB,qBAAK,IAAI,KAAK,EAAE,IAAI;AACvC,QAAO"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traversal_ops.d.ts","names":[],"sources":["../../src/render/traversal_ops.ts"],"mappings":";KAAY,kBAAA;EAAA;;;;;AAUZ;EAHE,WAAA;AAAA;AAAA,KAGU,sBAAA;EASM;AAGlB;;;;EANE,qBAAA,SAQe;EALf,gBAAA;AAAA;AAAA,KAGU,SAAA;AAAA,UAEK,YAAA;EAAA,SACN,IAAA;EAAA,SACA,OAAA;AAAA;AAAA,KAGC,oBAAA,GAAuB,kBAAA;EAKZ;;;;EAArB,kBAAA,GAAqB,YAAA,GAAe,YAAA;AAAA;AAAA,KAG1B,YAAA,GAAe,sBAAA;EAHW,iBAKpC,KAAA,UALgD;EAQhD,oBAAA,SALsB;EAQtB,kBAAA;EAS2B;;;;;;;EAA3B,eAAA,GAAkB,SAAA;AAAA;AAAA,KAGR,kBAAA,GAAqB,YAAA,GAAe,oBAAA"}
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/render/util/axis_filtering.ts
3
2
  function filterDataInfoEntries(dataInfoEntries, axisFilters) {
4
3
  const sortedFilters = [...axisFilters].sort((a, b) => b[0] - a[0]);
@@ -62,7 +61,7 @@ function filterDataInfoEntries(dataInfoEntries, axisFilters) {
62
61
  };
63
62
  }
64
63
  }
65
-
66
64
  //#endregion
67
65
  exports.filterDataInfoEntries = filterDataInfoEntries;
66
+
68
67
  //# sourceMappingURL=axis_filtering.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"axis_filtering.cjs","names":[],"sources":["../../../src/render/util/axis_filtering.ts"],"sourcesContent":["import type {\n BinaryChunk,\n DataInfoEntries,\n PColumnDataEntry,\n PColumnKey,\n PColumnValue,\n JsonDataInfoEntries,\n JsonPartitionedDataInfoEntries,\n BinaryPartitionedDataInfoEntries,\n ParquetPartitionedDataInfoEntries,\n PartitionedDataInfoEntries,\n} from \"@milaboratories/pl-model-common\";\nimport type { AxisFilterByIdx } from \"@milaboratories/pl-model-common\";\n\n/**\n * Filters DataInfoEntries using axis filters, removing specified axes from keys and\n * only keeping entries that match the filter values.\n *\n * @param dataInfoEntries - The data info object to filter\n * @param axisFilters - Array of axis filters (index, value pairs)\n * @throws Error if any filter axis is outside the partitioning axes or data axes for Json data\n */\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: ParquetPartitionedDataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): ParquetPartitionedDataInfoEntries<Blob>;\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: BinaryPartitionedDataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): BinaryPartitionedDataInfoEntries<Blob>;\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: JsonPartitionedDataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): JsonPartitionedDataInfoEntries<Blob>;\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: PartitionedDataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): PartitionedDataInfoEntries<Blob>;\nexport function filterDataInfoEntries(\n dataInfoEntries: JsonDataInfoEntries,\n axisFilters: AxisFilterByIdx[],\n): JsonDataInfoEntries;\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: DataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): DataInfoEntries<Blob> {\n // Sort filters by axis index in descending order to safely remove elements from arrays\n const sortedFilters = [...axisFilters].sort((a, b) => b[0] - a[0]);\n\n // Check for invalid filter axes\n const { type } = dataInfoEntries;\n switch (type) {\n case \"Json\": {\n const { keyLength } = dataInfoEntries;\n for (const [axisIdx] of axisFilters)\n if (axisIdx >= keyLength)\n throw new Error(`Can't filter on non-data axis ${axisIdx}. Must be >= ${keyLength}`);\n break;\n }\n case \"JsonPartitioned\":\n case \"BinaryPartitioned\":\n case \"ParquetPartitioned\": {\n const { partitionKeyLength } = dataInfoEntries;\n for (const [axisIdx] of axisFilters)\n if (axisIdx >= partitionKeyLength)\n throw new Error(\n `Can't filter on non-partitioned axis ${axisIdx}. Must be >= ${partitionKeyLength}`,\n );\n break;\n }\n default:\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Unsupported data info type: ${type satisfies never}`);\n }\n\n const keyMatchesFilters = (key: PColumnKey): boolean => {\n for (const [axisIdx, axisValue] of sortedFilters) if (key[axisIdx] !== axisValue) return false;\n return true;\n };\n\n const removeFilteredAxes = (key: PColumnKey): PColumnKey => {\n const newKey = [...key];\n\n // Remove axes in descending order to maintain correct indices\n for (const [axisIdx] of sortedFilters) newKey.splice(axisIdx, 1);\n\n return newKey;\n };\n\n switch (dataInfoEntries.type) {\n case \"Json\":\n return {\n type: \"Json\",\n keyLength: dataInfoEntries.keyLength - axisFilters.length,\n data: dataInfoEntries.data\n .filter((entry) => keyMatchesFilters(entry.key))\n .map(\n (entry) =>\n ({\n key: removeFilteredAxes(entry.key),\n value: entry.value,\n }) satisfies PColumnDataEntry<PColumnValue>,\n ),\n };\n case \"JsonPartitioned\":\n return {\n type: \"JsonPartitioned\",\n partitionKeyLength: dataInfoEntries.partitionKeyLength - axisFilters.length,\n parts: dataInfoEntries.parts\n .filter((entry) => keyMatchesFilters(entry.key))\n .map(\n (entry) =>\n ({\n key: removeFilteredAxes(entry.key),\n value: entry.value,\n }) satisfies PColumnDataEntry<Blob>,\n ),\n };\n case \"BinaryPartitioned\":\n return {\n type: \"BinaryPartitioned\",\n partitionKeyLength: dataInfoEntries.partitionKeyLength - axisFilters.length,\n parts: dataInfoEntries.parts\n .filter((entry) => keyMatchesFilters(entry.key))\n .map(\n (entry) =>\n ({\n key: removeFilteredAxes(entry.key),\n value: entry.value,\n }) satisfies PColumnDataEntry<BinaryChunk<Blob>>,\n ),\n };\n case \"ParquetPartitioned\":\n return {\n type: \"ParquetPartitioned\",\n partitionKeyLength: dataInfoEntries.partitionKeyLength - axisFilters.length,\n parts: dataInfoEntries.parts\n .filter((entry) => keyMatchesFilters(entry.key))\n .map(\n (entry) =>\n ({\n key: removeFilteredAxes(entry.key),\n value: entry.value,\n }) satisfies PColumnDataEntry<Blob>,\n ),\n };\n }\n}\n"],"mappings":";;AA0CA,SAAgB,sBACd,iBACA,aACuB;CAEvB,MAAM,gBAAgB,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG;CAGlE,MAAM,EAAE,SAAS;AACjB,SAAQ,MAAR;EACE,KAAK,QAAQ;GACX,MAAM,EAAE,cAAc;AACtB,QAAK,MAAM,CAAC,YAAY,YACtB,KAAI,WAAW,UACb,OAAM,IAAI,MAAM,iCAAiC,QAAQ,eAAe,YAAY;AACxF;;EAEF,KAAK;EACL,KAAK;EACL,KAAK,sBAAsB;GACzB,MAAM,EAAE,uBAAuB;AAC/B,QAAK,MAAM,CAAC,YAAY,YACtB,KAAI,WAAW,mBACb,OAAM,IAAI,MACR,wCAAwC,QAAQ,eAAe,qBAChE;AACL;;EAEF,QAEE,OAAM,IAAI,MAAM,+BAA+B,OAAuB;;CAG1E,MAAM,qBAAqB,QAA6B;AACtD,OAAK,MAAM,CAAC,SAAS,cAAc,cAAe,KAAI,IAAI,aAAa,UAAW,QAAO;AACzF,SAAO;;CAGT,MAAM,sBAAsB,QAAgC;EAC1D,MAAM,SAAS,CAAC,GAAG,IAAI;AAGvB,OAAK,MAAM,CAAC,YAAY,cAAe,QAAO,OAAO,SAAS,EAAE;AAEhE,SAAO;;AAGT,SAAQ,gBAAgB,MAAxB;EACE,KAAK,OACH,QAAO;GACL,MAAM;GACN,WAAW,gBAAgB,YAAY,YAAY;GACnD,MAAM,gBAAgB,KACnB,QAAQ,UAAU,kBAAkB,MAAM,IAAI,CAAC,CAC/C,KACE,WACE;IACC,KAAK,mBAAmB,MAAM,IAAI;IAClC,OAAO,MAAM;IACd,EACJ;GACJ;EACH,KAAK,kBACH,QAAO;GACL,MAAM;GACN,oBAAoB,gBAAgB,qBAAqB,YAAY;GACrE,OAAO,gBAAgB,MACpB,QAAQ,UAAU,kBAAkB,MAAM,IAAI,CAAC,CAC/C,KACE,WACE;IACC,KAAK,mBAAmB,MAAM,IAAI;IAClC,OAAO,MAAM;IACd,EACJ;GACJ;EACH,KAAK,oBACH,QAAO;GACL,MAAM;GACN,oBAAoB,gBAAgB,qBAAqB,YAAY;GACrE,OAAO,gBAAgB,MACpB,QAAQ,UAAU,kBAAkB,MAAM,IAAI,CAAC,CAC/C,KACE,WACE;IACC,KAAK,mBAAmB,MAAM,IAAI;IAClC,OAAO,MAAM;IACd,EACJ;GACJ;EACH,KAAK,qBACH,QAAO;GACL,MAAM;GACN,oBAAoB,gBAAgB,qBAAqB,YAAY;GACrE,OAAO,gBAAgB,MACpB,QAAQ,UAAU,kBAAkB,MAAM,IAAI,CAAC,CAC/C,KACE,WACE;IACC,KAAK,mBAAmB,MAAM,IAAI;IAClC,OAAO,MAAM;IACd,EACJ;GACJ"}
1
+ {"version":3,"file":"axis_filtering.cjs","names":[],"sources":["../../../src/render/util/axis_filtering.ts"],"sourcesContent":["import type {\n BinaryChunk,\n DataInfoEntries,\n PColumnDataEntry,\n PColumnKey,\n PColumnValue,\n JsonDataInfoEntries,\n JsonPartitionedDataInfoEntries,\n BinaryPartitionedDataInfoEntries,\n ParquetPartitionedDataInfoEntries,\n PartitionedDataInfoEntries,\n} from \"@milaboratories/pl-model-common\";\nimport type { AxisFilterByIdx } from \"@milaboratories/pl-model-common\";\n\n/**\n * Filters DataInfoEntries using axis filters, removing specified axes from keys and\n * only keeping entries that match the filter values.\n *\n * @param dataInfoEntries - The data info object to filter\n * @param axisFilters - Array of axis filters (index, value pairs)\n * @throws Error if any filter axis is outside the partitioning axes or data axes for Json data\n */\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: ParquetPartitionedDataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): ParquetPartitionedDataInfoEntries<Blob>;\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: BinaryPartitionedDataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): BinaryPartitionedDataInfoEntries<Blob>;\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: JsonPartitionedDataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): JsonPartitionedDataInfoEntries<Blob>;\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: PartitionedDataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): PartitionedDataInfoEntries<Blob>;\nexport function filterDataInfoEntries(\n dataInfoEntries: JsonDataInfoEntries,\n axisFilters: AxisFilterByIdx[],\n): JsonDataInfoEntries;\nexport function filterDataInfoEntries<Blob>(\n dataInfoEntries: DataInfoEntries<Blob>,\n axisFilters: AxisFilterByIdx[],\n): DataInfoEntries<Blob> {\n // Sort filters by axis index in descending order to safely remove elements from arrays\n const sortedFilters = [...axisFilters].sort((a, b) => b[0] - a[0]);\n\n // Check for invalid filter axes\n const { type } = dataInfoEntries;\n switch (type) {\n case \"Json\": {\n const { keyLength } = dataInfoEntries;\n for (const [axisIdx] of axisFilters)\n if (axisIdx >= keyLength)\n throw new Error(`Can't filter on non-data axis ${axisIdx}. Must be >= ${keyLength}`);\n break;\n }\n case \"JsonPartitioned\":\n case \"BinaryPartitioned\":\n case \"ParquetPartitioned\": {\n const { partitionKeyLength } = dataInfoEntries;\n for (const [axisIdx] of axisFilters)\n if (axisIdx >= partitionKeyLength)\n throw new Error(\n `Can't filter on non-partitioned axis ${axisIdx}. Must be >= ${partitionKeyLength}`,\n );\n break;\n }\n default:\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Unsupported data info type: ${type satisfies never}`);\n }\n\n const keyMatchesFilters = (key: PColumnKey): boolean => {\n for (const [axisIdx, axisValue] of sortedFilters) if (key[axisIdx] !== axisValue) return false;\n return true;\n };\n\n const removeFilteredAxes = (key: PColumnKey): PColumnKey => {\n const newKey = [...key];\n\n // Remove axes in descending order to maintain correct indices\n for (const [axisIdx] of sortedFilters) newKey.splice(axisIdx, 1);\n\n return newKey;\n };\n\n switch (dataInfoEntries.type) {\n case \"Json\":\n return {\n type: \"Json\",\n keyLength: dataInfoEntries.keyLength - axisFilters.length,\n data: dataInfoEntries.data\n .filter((entry) => keyMatchesFilters(entry.key))\n .map(\n (entry) =>\n ({\n key: removeFilteredAxes(entry.key),\n value: entry.value,\n }) satisfies PColumnDataEntry<PColumnValue>,\n ),\n };\n case \"JsonPartitioned\":\n return {\n type: \"JsonPartitioned\",\n partitionKeyLength: dataInfoEntries.partitionKeyLength - axisFilters.length,\n parts: dataInfoEntries.parts\n .filter((entry) => keyMatchesFilters(entry.key))\n .map(\n (entry) =>\n ({\n key: removeFilteredAxes(entry.key),\n value: entry.value,\n }) satisfies PColumnDataEntry<Blob>,\n ),\n };\n case \"BinaryPartitioned\":\n return {\n type: \"BinaryPartitioned\",\n partitionKeyLength: dataInfoEntries.partitionKeyLength - axisFilters.length,\n parts: dataInfoEntries.parts\n .filter((entry) => keyMatchesFilters(entry.key))\n .map(\n (entry) =>\n ({\n key: removeFilteredAxes(entry.key),\n value: entry.value,\n }) satisfies PColumnDataEntry<BinaryChunk<Blob>>,\n ),\n };\n case \"ParquetPartitioned\":\n return {\n type: \"ParquetPartitioned\",\n partitionKeyLength: dataInfoEntries.partitionKeyLength - axisFilters.length,\n parts: dataInfoEntries.parts\n .filter((entry) => keyMatchesFilters(entry.key))\n .map(\n (entry) =>\n ({\n key: removeFilteredAxes(entry.key),\n value: entry.value,\n }) satisfies PColumnDataEntry<Blob>,\n ),\n };\n }\n}\n"],"mappings":";AA0CA,SAAgB,sBACd,iBACA,aACuB;CAEvB,MAAM,gBAAgB,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG;CAGlE,MAAM,EAAE,SAAS;AACjB,SAAQ,MAAR;EACE,KAAK,QAAQ;GACX,MAAM,EAAE,cAAc;AACtB,QAAK,MAAM,CAAC,YAAY,YACtB,KAAI,WAAW,UACb,OAAM,IAAI,MAAM,iCAAiC,QAAQ,eAAe,YAAY;AACxF;;EAEF,KAAK;EACL,KAAK;EACL,KAAK,sBAAsB;GACzB,MAAM,EAAE,uBAAuB;AAC/B,QAAK,MAAM,CAAC,YAAY,YACtB,KAAI,WAAW,mBACb,OAAM,IAAI,MACR,wCAAwC,QAAQ,eAAe,qBAChE;AACL;;EAEF,QAEE,OAAM,IAAI,MAAM,+BAA+B,OAAuB;;CAG1E,MAAM,qBAAqB,QAA6B;AACtD,OAAK,MAAM,CAAC,SAAS,cAAc,cAAe,KAAI,IAAI,aAAa,UAAW,QAAO;AACzF,SAAO;;CAGT,MAAM,sBAAsB,QAAgC;EAC1D,MAAM,SAAS,CAAC,GAAG,IAAI;AAGvB,OAAK,MAAM,CAAC,YAAY,cAAe,QAAO,OAAO,SAAS,EAAE;AAEhE,SAAO;;AAGT,SAAQ,gBAAgB,MAAxB;EACE,KAAK,OACH,QAAO;GACL,MAAM;GACN,WAAW,gBAAgB,YAAY,YAAY;GACnD,MAAM,gBAAgB,KACnB,QAAQ,UAAU,kBAAkB,MAAM,IAAI,CAAC,CAC/C,KACE,WACE;IACC,KAAK,mBAAmB,MAAM,IAAI;IAClC,OAAO,MAAM;IACd,EACJ;GACJ;EACH,KAAK,kBACH,QAAO;GACL,MAAM;GACN,oBAAoB,gBAAgB,qBAAqB,YAAY;GACrE,OAAO,gBAAgB,MACpB,QAAQ,UAAU,kBAAkB,MAAM,IAAI,CAAC,CAC/C,KACE,WACE;IACC,KAAK,mBAAmB,MAAM,IAAI;IAClC,OAAO,MAAM;IACd,EACJ;GACJ;EACH,KAAK,oBACH,QAAO;GACL,MAAM;GACN,oBAAoB,gBAAgB,qBAAqB,YAAY;GACrE,OAAO,gBAAgB,MACpB,QAAQ,UAAU,kBAAkB,MAAM,IAAI,CAAC,CAC/C,KACE,WACE;IACC,KAAK,mBAAmB,MAAM,IAAI;IAClC,OAAO,MAAM;IACd,EACJ;GACJ;EACH,KAAK,qBACH,QAAO;GACL,MAAM;GACN,oBAAoB,gBAAgB,qBAAqB,YAAY;GACrE,OAAO,gBAAgB,MACpB,QAAQ,UAAU,kBAAkB,MAAM,IAAI,CAAC,CAC/C,KACE,WACE;IACC,KAAK,mBAAmB,MAAM,IAAI;IAClC,OAAO,MAAM;IACd,EACJ;GACJ"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axis_filtering.d.ts","names":[],"sources":["../../../src/render/util/axis_filtering.ts"],"mappings":";;;;AAsBA;;;;;;;iBAAgB,qBAAA,MAAA,CACd,eAAA,EAAiB,iCAAA,CAAkC,IAAA,GACnD,WAAA,EAAa,eAAA,KACZ,iCAAA,CAAkC,IAAA;AAAA,iBACrB,qBAAA,MAAA,CACd,eAAA,EAAiB,gCAAA,CAAiC,IAAA,GAClD,WAAA,EAAa,eAAA,KACZ,gCAAA,CAAiC,IAAA;AAAA,iBACpB,qBAAA,MAAA,CACd,eAAA,EAAiB,8BAAA,CAA+B,IAAA,GAChD,WAAA,EAAa,eAAA,KACZ,8BAAA,CAA+B,IAAA;AAAA,iBAClB,qBAAA,MAAA,CACd,eAAA,EAAiB,0BAAA,CAA2B,IAAA,GAC5C,WAAA,EAAa,eAAA,KACZ,0BAAA,CAA2B,IAAA;AAAA,iBACd,qBAAA,CACd,eAAA,EAAiB,mBAAA,EACjB,WAAA,EAAa,eAAA,KACZ,mBAAA"}
@@ -61,7 +61,7 @@ function filterDataInfoEntries(dataInfoEntries, axisFilters) {
61
61
  };
62
62
  }
63
63
  }
64
-
65
64
  //#endregion
66
65
  export { filterDataInfoEntries };
66
+
67
67
  //# sourceMappingURL=axis_filtering.js.map
@@ -1,11 +1,10 @@
1
- const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
2
- const require_axis_filtering = require('./axis_filtering.cjs');
3
- const require_label = require('./label.cjs');
4
- const require_pcolumn_data = require('./pcolumn_data.cjs');
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_axis_filtering = require("./axis_filtering.cjs");
3
+ const require_label = require("./label.cjs");
4
+ const require_pcolumn_data = require("./pcolumn_data.cjs");
5
5
  let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
6
6
  let canonicalize = require("canonicalize");
7
7
  canonicalize = require_runtime.__toESM(canonicalize);
8
-
9
8
  //#region src/render/util/column_collection.ts
10
9
  function isPColumnValues(value) {
11
10
  if (!Array.isArray(value)) return false;
@@ -280,7 +279,7 @@ var PColumnCollection = class {
280
279
  return columns;
281
280
  }
282
281
  };
283
-
284
282
  //#endregion
285
283
  exports.PColumnCollection = PColumnCollection;
284
+
286
285
  //# sourceMappingURL=column_collection.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"column_collection.cjs","names":["convertOrParsePColumnData","getUniquePartitionKeys","deriveLabels","Annotation","filterDataInfoEntries","LinkerMap","getColumnIdAndSpec"],"sources":["../../../src/render/util/column_collection.ts"],"sourcesContent":["import type {\n AnchoredIdDeriver,\n AnchoredPColumnSelector,\n AxisFilterByIdx,\n AxisFilterValue,\n AxisId,\n NativePObjectId,\n PartitionedDataInfoEntries,\n PColumn,\n PColumnLazy,\n PColumnSelector,\n PColumnSpec,\n PColumnValues,\n PObjectId,\n ResolveAnchorsOptions,\n SUniversalPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeAxisId,\n deriveNativeId,\n entriesToDataInfo,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n isPartitionedDataInfoEntries,\n isPColumnSpec,\n legacyColumnSelectorsToPredicate,\n LinkerMap,\n matchAxisId,\n resolveAnchors,\n} from \"@milaboratories/pl-model-common\";\nimport canonicalize from \"canonicalize\";\nimport type { Optional } from \"utility-types\";\nimport type { TreeNodeAccessor } from \"../accessor\";\nimport type { PColumnDataUniversal } from \"../internal\";\nimport { filterDataInfoEntries } from \"./axis_filtering\";\nimport type { LabelDerivationOps } from \"./label\";\nimport { deriveLabels } from \"./label\";\nimport { convertOrParsePColumnData, getUniquePartitionKeys } from \"./pcolumn_data\";\nimport type { APColumnSelectorWithSplit, PColumnSelectorWithSplit } from \"./split_selectors\";\n\nfunction isPColumnValues(value: unknown): value is PColumnValues {\n if (!Array.isArray(value)) return false;\n if (value.length === 0) return true;\n const first = value[0];\n return typeof first === \"object\" && first !== null && \"key\" in first && \"val\" in first;\n}\n\nexport interface ColumnProvider {\n selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<PColumnDataUniversal | undefined>[];\n}\n\nexport interface AxisLabelProvider {\n findLabels(axis: AxisId): Record<string | number, string> | undefined;\n}\n\n/**\n * A simple implementation of {@link ColumnProvider} backed by a pre-defined array of columns.\n */\nclass ArrayColumnProvider implements ColumnProvider {\n constructor(private readonly columns: PColumn<PColumnDataUniversal | undefined>[]) {}\n\n selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<PColumnDataUniversal | undefined>[] {\n const predicate =\n typeof selectors === \"function\" ? selectors : legacyColumnSelectorsToPredicate(selectors);\n // Filter based on spec, ignoring data type for now\n return this.columns.filter((column): column is PColumn<PColumnDataUniversal | undefined> =>\n predicate(column.spec),\n );\n }\n}\n\n/** Lazy calculates the data, returns undefined if data is not ready. */\nexport type PColumnLazyWithLabel<T> = PColumnLazy<T> & {\n label: string;\n};\n\n/** Universal column is a column that uses a universal column id, and always have label. */\nexport type PColumnLazyUniversal<T> = PColumnLazyWithLabel<T> & {\n id: SUniversalPColumnId;\n};\n\n/** @deprecated Use PColumnLazyWithLabel instead. */\nexport type PColumnEntryWithLabel = PColumnLazy<undefined | PColumnDataUniversal> & {\n label: string;\n};\n\n/** @deprecated Use PColumnLazyUniversal instead. */\nexport type PColumnEntryUniversal = PColumnEntryWithLabel & {\n id: SUniversalPColumnId;\n};\n\n// Helper types similar to those in api.ts\ntype AxisFilterInfo = {\n axisIdx: number;\n axisId: AxisId;\n value: AxisFilterValue;\n label: string;\n};\n\n// Intermediate representation for columns requiring splitting\ntype IntermediateSplitEntry = {\n type: \"split\";\n originalColumn: PColumn<PColumnDataUniversal | undefined>;\n spec: PColumnSpec;\n /** With splitting axes removed */\n adjustedSpec: PColumnSpec;\n dataEntries: PartitionedDataInfoEntries<TreeNodeAccessor>;\n axisFilters: AxisFilterInfo[];\n};\n\n// Intermediate representation for columns NOT requiring splitting\ntype IntermediateDirectEntry = {\n type: \"direct\";\n originalColumn: PColumn<PColumnDataUniversal | undefined>;\n spec: PColumnSpec;\n /** The same as `spec` */\n adjustedSpec: PColumnSpec;\n};\n\n// Union type for intermediate processing\ntype IntermediateColumnEntry = IntermediateSplitEntry | IntermediateDirectEntry;\n\nfunction splitFiltersToTrace(splitFilters?: AxisFilterInfo[]) {\n if (!splitFilters) return undefined;\n return splitFilters.map((filter) => ({\n type: `split:${canonicalizeAxisId(filter.axisId)}`,\n label: filter.label,\n importance: 1_000_000, // High importance for split filters in labels\n }));\n}\n\nfunction splitFiltersToAxisFilter(splitFilters?: AxisFilterInfo[]): AxisFilterByIdx[] | undefined {\n if (!splitFilters) return undefined;\n return splitFilters.map((filter): AxisFilterByIdx => [filter.axisIdx, filter.value]);\n}\n\nfunction fallbackIdDeriver(originalId: PObjectId, axisFilters?: AxisFilterByIdx[]): PObjectId {\n if (!axisFilters || axisFilters.length === 0) return originalId;\n const filtersToCanonicalize = [...axisFilters].sort((a, b) => a[0] - b[0]);\n return canonicalize({ id: originalId, axisFilters: filtersToCanonicalize })! as PObjectId;\n}\n\n/** Checks if a selector object uses any anchor properties */\nfunction hasAnchors(selector: unknown): selector is AnchoredPColumnSelector {\n if (!selector || typeof selector !== \"object\") return false;\n const potentialAnchored = selector as Record<string, any>;\n const hasAnchorValues = (obj: unknown) =>\n obj &&\n typeof obj === \"object\" &&\n Object.values(obj).some((v: unknown) => typeof v === \"object\" && v !== null && \"anchor\" in v);\n const domainHasAnchors = hasAnchorValues(potentialAnchored[\"domain\"]);\n const contextDomainHasAnchors = hasAnchorValues(potentialAnchored[\"contextDomain\"]);\n const axesHaveAnchors =\n potentialAnchored[\"axes\"] &&\n Array.isArray(potentialAnchored[\"axes\"]) &&\n potentialAnchored[\"axes\"].some(\n (a: unknown) => typeof a === \"object\" && a !== null && \"anchor\" in a,\n );\n return (\n !!potentialAnchored[\"domainAnchor\"] ||\n !!potentialAnchored[\"contextDomainAnchor\"] ||\n domainHasAnchors ||\n contextDomainHasAnchors ||\n axesHaveAnchors\n );\n}\n\n/**\n * Derives the indices of axes marked for splitting based on the selector.\n * Throws an error if splitting is requested alongside `partialAxesMatch`.\n */\nfunction getSplitAxisIndices(\n selector: APColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean),\n): number[] {\n if (typeof selector !== \"object\" || !(\"axes\" in selector) || selector.axes === undefined) {\n return []; // No axes specified or not an object selector, no splitting\n }\n\n const splitIndices = selector.axes\n .map((axis, index) =>\n typeof axis === \"object\" && \"split\" in axis && axis.split === true ? index : -1,\n )\n .filter((index) => index !== -1);\n\n if (splitIndices.length > 0 && selector.partialAxesMatch !== undefined) {\n throw new Error(\"Axis splitting is not supported when `partialAxesMatch` is defined.\");\n }\n\n splitIndices.sort((a, b) => a - b);\n return splitIndices;\n}\n\ntype UniversalPColumnOptsNoDeriver = {\n /** If provided, columns matching the provided selectors will be excluded from the result. */\n exclude?: AnchoredPColumnSelector | AnchoredPColumnSelector[];\n labelOps?: LabelDerivationOps;\n /** If true, incomplete data will cause the column to be skipped instead of returning undefined for the whole request. */\n dontWaitAllData?: boolean;\n /**\n * If true, the derived label will override the 'pl7.app/label' annotation\n * in the resulting PColumnSpec. It also forces `includeNativeLabel` in `labelOps` to true,\n * unless `labelOps.includeNativeLabel` is explicitly set to false.\n * Default value in getUniversalEntries is false, in getColumns it is true.\n */\n overrideLabelAnnotation?: boolean;\n /** If true, resulting columns will be enriched by other columns considering linker columns. Default is false. */\n enrichByLinkers?: boolean;\n};\n\ntype UniversalPColumnOpts = UniversalPColumnOptsNoDeriver & {\n anchorCtx: AnchoredIdDeriver;\n} & ResolveAnchorsOptions;\n\nexport class PColumnCollection {\n private readonly defaultProviderStore: PColumn<PColumnDataUniversal | undefined>[] = [];\n private readonly providers: ColumnProvider[] = [\n new ArrayColumnProvider(this.defaultProviderStore),\n ];\n private readonly axisLabelProviders: AxisLabelProvider[] = [];\n\n constructor() {}\n\n public addColumnProvider(provider: ColumnProvider): this {\n this.providers.push(provider);\n return this;\n }\n\n public addAxisLabelProvider(provider: AxisLabelProvider): this {\n this.axisLabelProviders.push(provider);\n return this;\n }\n\n public addColumns(columns: PColumn<PColumnDataUniversal | undefined>[]): this {\n this.defaultProviderStore.push(...columns);\n return this;\n }\n\n public addColumn(column: PColumn<PColumnDataUniversal | undefined>): this {\n this.defaultProviderStore.push(column);\n return this;\n }\n\n /** Fetches labels for a given axis from the registered providers */\n private findLabels(axis: AxisId): Record<string | number, string> | undefined {\n for (const provider of this.axisLabelProviders) {\n const labels = provider.findLabels(axis);\n if (labels) return labels; // First provider wins\n }\n return undefined;\n }\n\n // Overload signatures updated to return PColumnEntry types\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts: UniversalPColumnOpts,\n ): PColumnEntryUniversal[] | undefined;\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | PColumnSelectorWithSplit\n | PColumnSelectorWithSplit[],\n opts?: UniversalPColumnOptsNoDeriver,\n ): PColumnEntryWithLabel[] | undefined;\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts?: Optional<UniversalPColumnOpts, \"anchorCtx\">,\n ): (PColumnEntryWithLabel | PColumnEntryUniversal)[] | undefined {\n const {\n anchorCtx,\n labelOps: rawLabelOps,\n dontWaitAllData = false,\n overrideLabelAnnotation = false,\n exclude,\n enrichByLinkers = false,\n } = opts ?? {};\n\n const labelOps: LabelDerivationOps = {\n ...(overrideLabelAnnotation && rawLabelOps?.includeNativeLabel !== false\n ? { includeNativeLabel: true }\n : {}),\n ...rawLabelOps,\n };\n\n let excludePredicate: (spec: PColumnSpec) => boolean = () => false;\n if (exclude) {\n const excludePredicartes = (Array.isArray(exclude) ? exclude : [exclude]).map((selector) => {\n if (hasAnchors(selector)) {\n if (!anchorCtx)\n throw new Error(\n \"Anchored selectors in exclude require an AnchoredIdDeriver to be provided in options.\",\n );\n return legacyColumnSelectorsToPredicate(\n resolveAnchors(anchorCtx.anchors, selector, opts),\n );\n } else return legacyColumnSelectorsToPredicate(selector);\n });\n excludePredicate = (spec) => excludePredicartes.some((predicate) => predicate(spec));\n }\n\n const selectorsArray =\n typeof predicateOrSelectors === \"function\"\n ? [predicateOrSelectors]\n : Array.isArray(predicateOrSelectors)\n ? predicateOrSelectors\n : [predicateOrSelectors];\n\n const intermediateResults: IntermediateColumnEntry[] = [];\n const selectedNativeIds = new Set<NativePObjectId>();\n\n for (const rawSelector of selectorsArray) {\n const usesAnchors = hasAnchors(rawSelector);\n\n let currentSelector: PColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean);\n if (usesAnchors) {\n if (!anchorCtx)\n throw new Error(\n \"Anchored selectors require an AnchoredIdDeriver to be provided in options.\",\n );\n currentSelector = resolveAnchors(\n anchorCtx.anchors,\n rawSelector as AnchoredPColumnSelector,\n opts,\n );\n } else\n currentSelector = rawSelector as\n | PColumnSelectorWithSplit\n | ((spec: PColumnSpec) => boolean);\n\n const selectedIds = new Set<PObjectId>();\n const selectedColumns: PColumn<PColumnDataUniversal | undefined>[] = [];\n for (const provider of this.providers) {\n const providerColumns = provider.selectColumns(currentSelector);\n for (const col of providerColumns) {\n if (excludePredicate(col.spec)) continue;\n if (selectedIds.has(col.id))\n throw new Error(\n `Duplicate column id ${col.id} in provider ${provider.constructor.name}`,\n );\n const nativeId = deriveNativeId(col.spec);\n if (selectedNativeIds.has(nativeId)) continue;\n selectedIds.add(col.id);\n selectedNativeIds.add(nativeId);\n selectedColumns.push(col);\n }\n }\n\n if (selectedColumns.length === 0) continue;\n\n const splitAxisIdxs = getSplitAxisIndices(rawSelector);\n const needsSplitting = splitAxisIdxs.length > 0;\n\n for (const column of selectedColumns) {\n if (!isPColumnSpec(column.spec)) continue;\n\n const originalSpec = column.spec;\n\n if (needsSplitting) {\n if (isPColumnValues(column.data))\n throw new Error(\n `Splitting is not supported for PColumns with PColumnValues data format. Column id: ${column.id}`,\n );\n const dataEntries = convertOrParsePColumnData(column.data);\n\n if (!dataEntries) {\n if (dontWaitAllData) continue;\n return undefined;\n }\n\n if (!isPartitionedDataInfoEntries(dataEntries))\n throw new Error(\n `Splitting requires Partitioned DataInfoEntries, but parsing resulted in ${dataEntries.type} for column ${column.id}`,\n );\n\n const uniqueKeys = getUniquePartitionKeys(dataEntries);\n\n const maxSplitIdx = splitAxisIdxs[splitAxisIdxs.length - 1];\n if (maxSplitIdx >= dataEntries.partitionKeyLength)\n throw new Error(\n `Not enough partition keys (${dataEntries.partitionKeyLength}) for requested split axes (max index ${maxSplitIdx}) in column ${originalSpec.name}`,\n );\n\n const axesLabels: (Record<string | number, string> | undefined)[] = splitAxisIdxs.map(\n (idx) => this.findLabels(getAxisId(originalSpec.axesSpec[idx])),\n );\n\n const keyCombinations: (string | number)[][] = [];\n const generateCombinations = (currentCombo: (string | number)[], sAxisIdx: number) => {\n if (sAxisIdx >= splitAxisIdxs.length) {\n keyCombinations.push([...currentCombo]);\n if (keyCombinations.length > 10000)\n throw new Error(\"Too many key combinations, aborting.\");\n return;\n }\n const axisIdx = splitAxisIdxs[sAxisIdx];\n if (axisIdx >= uniqueKeys.length)\n throw new Error(\n `Axis index ${axisIdx} out of bounds for unique keys array (length ${uniqueKeys.length}) during split key generation for column ${column.id}`,\n );\n const axisValues = uniqueKeys[axisIdx];\n if (!axisValues || axisValues.length === 0) {\n keyCombinations.length = 0; // No combinations possible if one axis has no keys\n return;\n }\n for (const val of axisValues) {\n currentCombo.push(val);\n generateCombinations(currentCombo, sAxisIdx + 1);\n currentCombo.pop();\n }\n };\n\n generateCombinations([], 0);\n\n if (keyCombinations.length === 0) continue;\n\n const newAxesSpec = [...originalSpec.axesSpec];\n const splitAxisOriginalIdxs = splitAxisIdxs.map((idx) => idx); // Keep original indices for axisId lookup\n // Remove axes in reverse order to maintain correct indices during removal\n for (let i = splitAxisIdxs.length - 1; i >= 0; i--) {\n newAxesSpec.splice(splitAxisIdxs[i], 1);\n }\n const adjustedSpec = { ...originalSpec, axesSpec: newAxesSpec };\n\n for (const keyCombo of keyCombinations) {\n const splitFilters: AxisFilterInfo[] = keyCombo.map((value, sAxisIdx) => {\n const axisIdx = splitAxisOriginalIdxs[sAxisIdx]; // Use original index for lookup\n const axisId = getAxisId(originalSpec.axesSpec[axisIdx]);\n const axisLabelMap = axesLabels[sAxisIdx];\n const label = axisLabelMap?.[value] ?? String(value);\n return { axisIdx, axisId, value: value as AxisFilterValue, label };\n });\n\n intermediateResults.push({\n type: \"split\",\n originalColumn: column,\n spec: originalSpec,\n adjustedSpec,\n dataEntries,\n axisFilters: splitFilters,\n });\n }\n } else {\n intermediateResults.push({\n type: \"direct\",\n originalColumn: column,\n spec: originalSpec,\n adjustedSpec: originalSpec,\n });\n }\n }\n }\n\n if (intermediateResults.length === 0) return [];\n\n const labeledResults = deriveLabels(\n intermediateResults,\n (entry) => ({\n spec: entry.spec,\n suffixTrace: entry.type === \"split\" ? splitFiltersToTrace(entry.axisFilters) : undefined,\n }),\n labelOps,\n );\n\n const result: (PColumnEntryWithLabel | PColumnEntryUniversal)[] = [];\n\n for (const { value: entry, label } of labeledResults) {\n const { originalColumn, spec: originalSpec } = entry;\n\n const axisFilters = entry.type === \"split\" ? entry.axisFilters : undefined;\n const axisFiltersTuple = splitFiltersToAxisFilter(axisFilters);\n\n let finalId: SUniversalPColumnId | PObjectId;\n if (anchorCtx) finalId = anchorCtx.deriveS(originalSpec, axisFiltersTuple);\n else finalId = fallbackIdDeriver(originalColumn.id, axisFiltersTuple);\n\n let finalSpec = { ...entry.adjustedSpec };\n\n if (overrideLabelAnnotation) {\n finalSpec = {\n ...finalSpec,\n annotations: {\n ...finalSpec.annotations,\n [Annotation.Label]: label,\n } satisfies Annotation,\n };\n }\n\n result.push({\n id: finalId,\n spec: finalSpec,\n data: () =>\n entry.type === \"split\"\n ? entriesToDataInfo(filterDataInfoEntries(entry.dataEntries, axisFiltersTuple!))\n : entry.originalColumn.data,\n label: label,\n });\n }\n\n const ids = new Set(result.map((entry) => entry.id));\n\n if (enrichByLinkers && anchorCtx) {\n const linkers = result.filter((entry) => isLinkerColumn(entry.spec));\n if (linkers.length === 0) {\n return result;\n }\n\n const anchorAxes = Object.values(anchorCtx.anchors).flatMap((anchor) => anchor.axesSpec);\n const linkerMap = LinkerMap.fromColumns(linkers.map(getColumnIdAndSpec));\n\n // loose way of matching\n function matchAxisIdFn(linkerKeyId: AxisId, sourceAxisId: AxisId): boolean {\n return matchAxisId(linkerKeyId, sourceAxisId) || matchAxisId(sourceAxisId, linkerKeyId);\n }\n // search all axes that can be reached by linkers from anchor axes; anchor axes are not in this list;\n const availableByLinkersAxes = linkerMap.getReachableByLinkersAxesFromAxes(\n anchorAxes,\n matchAxisIdFn,\n );\n\n // search all columns that includes at least one of additional axes;\n const availableByLinkersColumns = this.getUniversalEntries(\n (spec) =>\n !isLinkerColumn(spec) &&\n spec.axesSpec.some((columnAxisSpec) => {\n const columnAxisId = getAxisId(columnAxisSpec);\n return availableByLinkersAxes.some((axis) =>\n matchAxisIdFn(getAxisId(axis), columnAxisId),\n );\n }),\n { anchorCtx, labelOps, dontWaitAllData, overrideLabelAnnotation, exclude },\n );\n if (availableByLinkersColumns) {\n result.push(...availableByLinkersColumns.filter((entry) => !ids.has(entry.id)));\n }\n }\n\n return result;\n }\n\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts: UniversalPColumnOpts,\n ): PColumn<PColumnDataUniversal>[] | undefined;\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | PColumnSelectorWithSplit\n | PColumnSelectorWithSplit[],\n opts?: UniversalPColumnOptsNoDeriver,\n ): PColumn<PColumnDataUniversal>[] | undefined;\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts?: Optional<UniversalPColumnOpts, \"anchorCtx\">,\n ): PColumn<PColumnDataUniversal>[] | undefined {\n const entries = this.getUniversalEntries(predicateOrSelectors, {\n overrideLabelAnnotation: true, // default for getColumns\n ...opts,\n } as UniversalPColumnOpts);\n if (!entries) return undefined;\n\n const columns: PColumn<PColumnDataUniversal>[] = [];\n for (const entry of entries) {\n const data = entry.data();\n if (!data) {\n if (opts?.dontWaitAllData) continue;\n return undefined;\n }\n columns.push({\n id: entry.id,\n spec: entry.spec,\n data,\n });\n }\n\n return columns;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"column_collection.cjs","names":["convertOrParsePColumnData","getUniquePartitionKeys","deriveLabels","Annotation","filterDataInfoEntries","LinkerMap","getColumnIdAndSpec"],"sources":["../../../src/render/util/column_collection.ts"],"sourcesContent":["import type {\n AnchoredIdDeriver,\n AnchoredPColumnSelector,\n AxisFilterByIdx,\n AxisFilterValue,\n AxisId,\n NativePObjectId,\n PartitionedDataInfoEntries,\n PColumn,\n PColumnLazy,\n PColumnSelector,\n PColumnSpec,\n PColumnValues,\n PObjectId,\n ResolveAnchorsOptions,\n SUniversalPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeAxisId,\n deriveNativeId,\n entriesToDataInfo,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n isPartitionedDataInfoEntries,\n isPColumnSpec,\n legacyColumnSelectorsToPredicate,\n LinkerMap,\n matchAxisId,\n resolveAnchors,\n} from \"@milaboratories/pl-model-common\";\nimport canonicalize from \"canonicalize\";\nimport type { Optional } from \"utility-types\";\nimport type { TreeNodeAccessor } from \"../accessor\";\nimport type { PColumnDataUniversal } from \"../internal\";\nimport { filterDataInfoEntries } from \"./axis_filtering\";\nimport type { LabelDerivationOps } from \"./label\";\nimport { deriveLabels } from \"./label\";\nimport { convertOrParsePColumnData, getUniquePartitionKeys } from \"./pcolumn_data\";\nimport type { APColumnSelectorWithSplit, PColumnSelectorWithSplit } from \"./split_selectors\";\n\nfunction isPColumnValues(value: unknown): value is PColumnValues {\n if (!Array.isArray(value)) return false;\n if (value.length === 0) return true;\n const first = value[0];\n return typeof first === \"object\" && first !== null && \"key\" in first && \"val\" in first;\n}\n\nexport interface ColumnProvider {\n selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<PColumnDataUniversal | undefined>[];\n}\n\nexport interface AxisLabelProvider {\n findLabels(axis: AxisId): Record<string | number, string> | undefined;\n}\n\n/**\n * A simple implementation of {@link ColumnProvider} backed by a pre-defined array of columns.\n */\nclass ArrayColumnProvider implements ColumnProvider {\n constructor(private readonly columns: PColumn<PColumnDataUniversal | undefined>[]) {}\n\n selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<PColumnDataUniversal | undefined>[] {\n const predicate =\n typeof selectors === \"function\" ? selectors : legacyColumnSelectorsToPredicate(selectors);\n // Filter based on spec, ignoring data type for now\n return this.columns.filter((column): column is PColumn<PColumnDataUniversal | undefined> =>\n predicate(column.spec),\n );\n }\n}\n\n/** Lazy calculates the data, returns undefined if data is not ready. */\nexport type PColumnLazyWithLabel<T> = PColumnLazy<T> & {\n label: string;\n};\n\n/** Universal column is a column that uses a universal column id, and always have label. */\nexport type PColumnLazyUniversal<T> = PColumnLazyWithLabel<T> & {\n id: SUniversalPColumnId;\n};\n\n/** @deprecated Use PColumnLazyWithLabel instead. */\nexport type PColumnEntryWithLabel = PColumnLazy<undefined | PColumnDataUniversal> & {\n label: string;\n};\n\n/** @deprecated Use PColumnLazyUniversal instead. */\nexport type PColumnEntryUniversal = PColumnEntryWithLabel & {\n id: SUniversalPColumnId;\n};\n\n// Helper types similar to those in api.ts\ntype AxisFilterInfo = {\n axisIdx: number;\n axisId: AxisId;\n value: AxisFilterValue;\n label: string;\n};\n\n// Intermediate representation for columns requiring splitting\ntype IntermediateSplitEntry = {\n type: \"split\";\n originalColumn: PColumn<PColumnDataUniversal | undefined>;\n spec: PColumnSpec;\n /** With splitting axes removed */\n adjustedSpec: PColumnSpec;\n dataEntries: PartitionedDataInfoEntries<TreeNodeAccessor>;\n axisFilters: AxisFilterInfo[];\n};\n\n// Intermediate representation for columns NOT requiring splitting\ntype IntermediateDirectEntry = {\n type: \"direct\";\n originalColumn: PColumn<PColumnDataUniversal | undefined>;\n spec: PColumnSpec;\n /** The same as `spec` */\n adjustedSpec: PColumnSpec;\n};\n\n// Union type for intermediate processing\ntype IntermediateColumnEntry = IntermediateSplitEntry | IntermediateDirectEntry;\n\nfunction splitFiltersToTrace(splitFilters?: AxisFilterInfo[]) {\n if (!splitFilters) return undefined;\n return splitFilters.map((filter) => ({\n type: `split:${canonicalizeAxisId(filter.axisId)}`,\n label: filter.label,\n importance: 1_000_000, // High importance for split filters in labels\n }));\n}\n\nfunction splitFiltersToAxisFilter(splitFilters?: AxisFilterInfo[]): AxisFilterByIdx[] | undefined {\n if (!splitFilters) return undefined;\n return splitFilters.map((filter): AxisFilterByIdx => [filter.axisIdx, filter.value]);\n}\n\nfunction fallbackIdDeriver(originalId: PObjectId, axisFilters?: AxisFilterByIdx[]): PObjectId {\n if (!axisFilters || axisFilters.length === 0) return originalId;\n const filtersToCanonicalize = [...axisFilters].sort((a, b) => a[0] - b[0]);\n return canonicalize({ id: originalId, axisFilters: filtersToCanonicalize })! as PObjectId;\n}\n\n/** Checks if a selector object uses any anchor properties */\nfunction hasAnchors(selector: unknown): selector is AnchoredPColumnSelector {\n if (!selector || typeof selector !== \"object\") return false;\n const potentialAnchored = selector as Record<string, any>;\n const hasAnchorValues = (obj: unknown) =>\n obj &&\n typeof obj === \"object\" &&\n Object.values(obj).some((v: unknown) => typeof v === \"object\" && v !== null && \"anchor\" in v);\n const domainHasAnchors = hasAnchorValues(potentialAnchored[\"domain\"]);\n const contextDomainHasAnchors = hasAnchorValues(potentialAnchored[\"contextDomain\"]);\n const axesHaveAnchors =\n potentialAnchored[\"axes\"] &&\n Array.isArray(potentialAnchored[\"axes\"]) &&\n potentialAnchored[\"axes\"].some(\n (a: unknown) => typeof a === \"object\" && a !== null && \"anchor\" in a,\n );\n return (\n !!potentialAnchored[\"domainAnchor\"] ||\n !!potentialAnchored[\"contextDomainAnchor\"] ||\n domainHasAnchors ||\n contextDomainHasAnchors ||\n axesHaveAnchors\n );\n}\n\n/**\n * Derives the indices of axes marked for splitting based on the selector.\n * Throws an error if splitting is requested alongside `partialAxesMatch`.\n */\nfunction getSplitAxisIndices(\n selector: APColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean),\n): number[] {\n if (typeof selector !== \"object\" || !(\"axes\" in selector) || selector.axes === undefined) {\n return []; // No axes specified or not an object selector, no splitting\n }\n\n const splitIndices = selector.axes\n .map((axis, index) =>\n typeof axis === \"object\" && \"split\" in axis && axis.split === true ? index : -1,\n )\n .filter((index) => index !== -1);\n\n if (splitIndices.length > 0 && selector.partialAxesMatch !== undefined) {\n throw new Error(\"Axis splitting is not supported when `partialAxesMatch` is defined.\");\n }\n\n splitIndices.sort((a, b) => a - b);\n return splitIndices;\n}\n\ntype UniversalPColumnOptsNoDeriver = {\n /** If provided, columns matching the provided selectors will be excluded from the result. */\n exclude?: AnchoredPColumnSelector | AnchoredPColumnSelector[];\n labelOps?: LabelDerivationOps;\n /** If true, incomplete data will cause the column to be skipped instead of returning undefined for the whole request. */\n dontWaitAllData?: boolean;\n /**\n * If true, the derived label will override the 'pl7.app/label' annotation\n * in the resulting PColumnSpec. It also forces `includeNativeLabel` in `labelOps` to true,\n * unless `labelOps.includeNativeLabel` is explicitly set to false.\n * Default value in getUniversalEntries is false, in getColumns it is true.\n */\n overrideLabelAnnotation?: boolean;\n /** If true, resulting columns will be enriched by other columns considering linker columns. Default is false. */\n enrichByLinkers?: boolean;\n};\n\ntype UniversalPColumnOpts = UniversalPColumnOptsNoDeriver & {\n anchorCtx: AnchoredIdDeriver;\n} & ResolveAnchorsOptions;\n\nexport class PColumnCollection {\n private readonly defaultProviderStore: PColumn<PColumnDataUniversal | undefined>[] = [];\n private readonly providers: ColumnProvider[] = [\n new ArrayColumnProvider(this.defaultProviderStore),\n ];\n private readonly axisLabelProviders: AxisLabelProvider[] = [];\n\n constructor() {}\n\n public addColumnProvider(provider: ColumnProvider): this {\n this.providers.push(provider);\n return this;\n }\n\n public addAxisLabelProvider(provider: AxisLabelProvider): this {\n this.axisLabelProviders.push(provider);\n return this;\n }\n\n public addColumns(columns: PColumn<PColumnDataUniversal | undefined>[]): this {\n this.defaultProviderStore.push(...columns);\n return this;\n }\n\n public addColumn(column: PColumn<PColumnDataUniversal | undefined>): this {\n this.defaultProviderStore.push(column);\n return this;\n }\n\n /** Fetches labels for a given axis from the registered providers */\n private findLabels(axis: AxisId): Record<string | number, string> | undefined {\n for (const provider of this.axisLabelProviders) {\n const labels = provider.findLabels(axis);\n if (labels) return labels; // First provider wins\n }\n return undefined;\n }\n\n // Overload signatures updated to return PColumnEntry types\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts: UniversalPColumnOpts,\n ): PColumnEntryUniversal[] | undefined;\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | PColumnSelectorWithSplit\n | PColumnSelectorWithSplit[],\n opts?: UniversalPColumnOptsNoDeriver,\n ): PColumnEntryWithLabel[] | undefined;\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts?: Optional<UniversalPColumnOpts, \"anchorCtx\">,\n ): (PColumnEntryWithLabel | PColumnEntryUniversal)[] | undefined {\n const {\n anchorCtx,\n labelOps: rawLabelOps,\n dontWaitAllData = false,\n overrideLabelAnnotation = false,\n exclude,\n enrichByLinkers = false,\n } = opts ?? {};\n\n const labelOps: LabelDerivationOps = {\n ...(overrideLabelAnnotation && rawLabelOps?.includeNativeLabel !== false\n ? { includeNativeLabel: true }\n : {}),\n ...rawLabelOps,\n };\n\n let excludePredicate: (spec: PColumnSpec) => boolean = () => false;\n if (exclude) {\n const excludePredicartes = (Array.isArray(exclude) ? exclude : [exclude]).map((selector) => {\n if (hasAnchors(selector)) {\n if (!anchorCtx)\n throw new Error(\n \"Anchored selectors in exclude require an AnchoredIdDeriver to be provided in options.\",\n );\n return legacyColumnSelectorsToPredicate(\n resolveAnchors(anchorCtx.anchors, selector, opts),\n );\n } else return legacyColumnSelectorsToPredicate(selector);\n });\n excludePredicate = (spec) => excludePredicartes.some((predicate) => predicate(spec));\n }\n\n const selectorsArray =\n typeof predicateOrSelectors === \"function\"\n ? [predicateOrSelectors]\n : Array.isArray(predicateOrSelectors)\n ? predicateOrSelectors\n : [predicateOrSelectors];\n\n const intermediateResults: IntermediateColumnEntry[] = [];\n const selectedNativeIds = new Set<NativePObjectId>();\n\n for (const rawSelector of selectorsArray) {\n const usesAnchors = hasAnchors(rawSelector);\n\n let currentSelector: PColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean);\n if (usesAnchors) {\n if (!anchorCtx)\n throw new Error(\n \"Anchored selectors require an AnchoredIdDeriver to be provided in options.\",\n );\n currentSelector = resolveAnchors(\n anchorCtx.anchors,\n rawSelector as AnchoredPColumnSelector,\n opts,\n );\n } else\n currentSelector = rawSelector as\n | PColumnSelectorWithSplit\n | ((spec: PColumnSpec) => boolean);\n\n const selectedIds = new Set<PObjectId>();\n const selectedColumns: PColumn<PColumnDataUniversal | undefined>[] = [];\n for (const provider of this.providers) {\n const providerColumns = provider.selectColumns(currentSelector);\n for (const col of providerColumns) {\n if (excludePredicate(col.spec)) continue;\n if (selectedIds.has(col.id))\n throw new Error(\n `Duplicate column id ${col.id} in provider ${provider.constructor.name}`,\n );\n const nativeId = deriveNativeId(col.spec);\n if (selectedNativeIds.has(nativeId)) continue;\n selectedIds.add(col.id);\n selectedNativeIds.add(nativeId);\n selectedColumns.push(col);\n }\n }\n\n if (selectedColumns.length === 0) continue;\n\n const splitAxisIdxs = getSplitAxisIndices(rawSelector);\n const needsSplitting = splitAxisIdxs.length > 0;\n\n for (const column of selectedColumns) {\n if (!isPColumnSpec(column.spec)) continue;\n\n const originalSpec = column.spec;\n\n if (needsSplitting) {\n if (isPColumnValues(column.data))\n throw new Error(\n `Splitting is not supported for PColumns with PColumnValues data format. Column id: ${column.id}`,\n );\n const dataEntries = convertOrParsePColumnData(column.data);\n\n if (!dataEntries) {\n if (dontWaitAllData) continue;\n return undefined;\n }\n\n if (!isPartitionedDataInfoEntries(dataEntries))\n throw new Error(\n `Splitting requires Partitioned DataInfoEntries, but parsing resulted in ${dataEntries.type} for column ${column.id}`,\n );\n\n const uniqueKeys = getUniquePartitionKeys(dataEntries);\n\n const maxSplitIdx = splitAxisIdxs[splitAxisIdxs.length - 1];\n if (maxSplitIdx >= dataEntries.partitionKeyLength)\n throw new Error(\n `Not enough partition keys (${dataEntries.partitionKeyLength}) for requested split axes (max index ${maxSplitIdx}) in column ${originalSpec.name}`,\n );\n\n const axesLabels: (Record<string | number, string> | undefined)[] = splitAxisIdxs.map(\n (idx) => this.findLabels(getAxisId(originalSpec.axesSpec[idx])),\n );\n\n const keyCombinations: (string | number)[][] = [];\n const generateCombinations = (currentCombo: (string | number)[], sAxisIdx: number) => {\n if (sAxisIdx >= splitAxisIdxs.length) {\n keyCombinations.push([...currentCombo]);\n if (keyCombinations.length > 10000)\n throw new Error(\"Too many key combinations, aborting.\");\n return;\n }\n const axisIdx = splitAxisIdxs[sAxisIdx];\n if (axisIdx >= uniqueKeys.length)\n throw new Error(\n `Axis index ${axisIdx} out of bounds for unique keys array (length ${uniqueKeys.length}) during split key generation for column ${column.id}`,\n );\n const axisValues = uniqueKeys[axisIdx];\n if (!axisValues || axisValues.length === 0) {\n keyCombinations.length = 0; // No combinations possible if one axis has no keys\n return;\n }\n for (const val of axisValues) {\n currentCombo.push(val);\n generateCombinations(currentCombo, sAxisIdx + 1);\n currentCombo.pop();\n }\n };\n\n generateCombinations([], 0);\n\n if (keyCombinations.length === 0) continue;\n\n const newAxesSpec = [...originalSpec.axesSpec];\n const splitAxisOriginalIdxs = splitAxisIdxs.map((idx) => idx); // Keep original indices for axisId lookup\n // Remove axes in reverse order to maintain correct indices during removal\n for (let i = splitAxisIdxs.length - 1; i >= 0; i--) {\n newAxesSpec.splice(splitAxisIdxs[i], 1);\n }\n const adjustedSpec = { ...originalSpec, axesSpec: newAxesSpec };\n\n for (const keyCombo of keyCombinations) {\n const splitFilters: AxisFilterInfo[] = keyCombo.map((value, sAxisIdx) => {\n const axisIdx = splitAxisOriginalIdxs[sAxisIdx]; // Use original index for lookup\n const axisId = getAxisId(originalSpec.axesSpec[axisIdx]);\n const axisLabelMap = axesLabels[sAxisIdx];\n const label = axisLabelMap?.[value] ?? String(value);\n return { axisIdx, axisId, value: value as AxisFilterValue, label };\n });\n\n intermediateResults.push({\n type: \"split\",\n originalColumn: column,\n spec: originalSpec,\n adjustedSpec,\n dataEntries,\n axisFilters: splitFilters,\n });\n }\n } else {\n intermediateResults.push({\n type: \"direct\",\n originalColumn: column,\n spec: originalSpec,\n adjustedSpec: originalSpec,\n });\n }\n }\n }\n\n if (intermediateResults.length === 0) return [];\n\n const labeledResults = deriveLabels(\n intermediateResults,\n (entry) => ({\n spec: entry.spec,\n suffixTrace: entry.type === \"split\" ? splitFiltersToTrace(entry.axisFilters) : undefined,\n }),\n labelOps,\n );\n\n const result: (PColumnEntryWithLabel | PColumnEntryUniversal)[] = [];\n\n for (const { value: entry, label } of labeledResults) {\n const { originalColumn, spec: originalSpec } = entry;\n\n const axisFilters = entry.type === \"split\" ? entry.axisFilters : undefined;\n const axisFiltersTuple = splitFiltersToAxisFilter(axisFilters);\n\n let finalId: SUniversalPColumnId | PObjectId;\n if (anchorCtx) finalId = anchorCtx.deriveS(originalSpec, axisFiltersTuple);\n else finalId = fallbackIdDeriver(originalColumn.id, axisFiltersTuple);\n\n let finalSpec = { ...entry.adjustedSpec };\n\n if (overrideLabelAnnotation) {\n finalSpec = {\n ...finalSpec,\n annotations: {\n ...finalSpec.annotations,\n [Annotation.Label]: label,\n } satisfies Annotation,\n };\n }\n\n result.push({\n id: finalId,\n spec: finalSpec,\n data: () =>\n entry.type === \"split\"\n ? entriesToDataInfo(filterDataInfoEntries(entry.dataEntries, axisFiltersTuple!))\n : entry.originalColumn.data,\n label: label,\n });\n }\n\n const ids = new Set(result.map((entry) => entry.id));\n\n if (enrichByLinkers && anchorCtx) {\n const linkers = result.filter((entry) => isLinkerColumn(entry.spec));\n if (linkers.length === 0) {\n return result;\n }\n\n const anchorAxes = Object.values(anchorCtx.anchors).flatMap((anchor) => anchor.axesSpec);\n const linkerMap = LinkerMap.fromColumns(linkers.map(getColumnIdAndSpec));\n\n // loose way of matching\n function matchAxisIdFn(linkerKeyId: AxisId, sourceAxisId: AxisId): boolean {\n return matchAxisId(linkerKeyId, sourceAxisId) || matchAxisId(sourceAxisId, linkerKeyId);\n }\n // search all axes that can be reached by linkers from anchor axes; anchor axes are not in this list;\n const availableByLinkersAxes = linkerMap.getReachableByLinkersAxesFromAxes(\n anchorAxes,\n matchAxisIdFn,\n );\n\n // search all columns that includes at least one of additional axes;\n const availableByLinkersColumns = this.getUniversalEntries(\n (spec) =>\n !isLinkerColumn(spec) &&\n spec.axesSpec.some((columnAxisSpec) => {\n const columnAxisId = getAxisId(columnAxisSpec);\n return availableByLinkersAxes.some((axis) =>\n matchAxisIdFn(getAxisId(axis), columnAxisId),\n );\n }),\n { anchorCtx, labelOps, dontWaitAllData, overrideLabelAnnotation, exclude },\n );\n if (availableByLinkersColumns) {\n result.push(...availableByLinkersColumns.filter((entry) => !ids.has(entry.id)));\n }\n }\n\n return result;\n }\n\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts: UniversalPColumnOpts,\n ): PColumn<PColumnDataUniversal>[] | undefined;\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | PColumnSelectorWithSplit\n | PColumnSelectorWithSplit[],\n opts?: UniversalPColumnOptsNoDeriver,\n ): PColumn<PColumnDataUniversal>[] | undefined;\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts?: Optional<UniversalPColumnOpts, \"anchorCtx\">,\n ): PColumn<PColumnDataUniversal>[] | undefined {\n const entries = this.getUniversalEntries(predicateOrSelectors, {\n overrideLabelAnnotation: true, // default for getColumns\n ...opts,\n } as UniversalPColumnOpts);\n if (!entries) return undefined;\n\n const columns: PColumn<PColumnDataUniversal>[] = [];\n for (const entry of entries) {\n const data = entry.data();\n if (!data) {\n if (opts?.dontWaitAllData) continue;\n return undefined;\n }\n columns.push({\n id: entry.id,\n spec: entry.spec,\n data,\n });\n }\n\n return columns;\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { PColumnDataUniversal } from "../internal.js";
2
2
  import { DeriveLabelsOptions } from "../../labels/derive_distinct_labels.js";
3
- import "./label.js";
4
3
  import { APColumnSelectorWithSplit, PColumnSelectorWithSplit } from "./split_selectors.js";
5
4
  import { AnchoredIdDeriver, AnchoredPColumnSelector, AxisId, PColumn, PColumnLazy, PColumnSelector, PColumnSpec, ResolveAnchorsOptions, SUniversalPColumnId } from "@milaboratories/pl-model-common";
6
5
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column_collection.d.ts","names":[],"sources":["../../../src/render/util/column_collection.ts"],"mappings":";;;;;;UAiDiB,cAAA;EACf,aAAA,CACE,SAAA,IAAa,IAAA,EAAM,WAAA,gBAA2B,eAAA,GAAkB,eAAA,KAC/D,OAAA,CAAQ,oBAAA;AAAA;AAAA,UAGI,iBAAA;EACf,UAAA,CAAW,IAAA,EAAM,MAAA,GAAS,MAAA;AAAA;;KAsBhB,oBAAA,MAA0B,WAAA,CAAY,CAAA;EAChD,KAAA;AAAA;;KAIU,oBAAA,MAA0B,oBAAA,CAAqB,CAAA;EACzD,EAAA,EAAI,mBAAA;AAAA;;KAIM,qBAAA,GAAwB,WAAA,aAAwB,oBAAA;EAC1D,KAAA;AAAA;;KAIU,qBAAA,GAAwB,qBAAA;EAClC,EAAA,EAAI,mBAAA;AAAA;AAAA,KAwGD,6BAAA;EA/IY,6FAiJf,OAAA,GAAU,uBAAA,GAA0B,uBAAA;EACpC,QAAA,GAAW,mBAAA,EAjJqB;EAmJhC,eAAA;EAnJiB;;;;;AAsBnB;EAoIE,uBAAA,YApI8B;EAsI9B,eAAA;AAAA;AAAA,KAGG,oBAAA,GAAuB,6BAAA;EAC1B,SAAA,EAAW,iBAAA;AAAA,IACT,qBAAA;AAAA,cAES,iBAAA;EAAA,iBACM,oBAAA;EAAA,iBACA,SAAA;EAAA,iBAGA,kBAAA;;EAIV,iBAAA,CAAkB,QAAA,EAAU,cAAA;EAK5B,oBAAA,CAAqB,QAAA,EAAU,iBAAA;EAK/B,UAAA,CAAW,OAAA,EAAS,OAAA,CAAQ,oBAAA;EAK5B,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,oBAAA;EA/JV;EAAA,QAqKf,UAAA;EASD,mBAAA,CACL,oBAAA,IACM,IAAA,EAAM,WAAA,gBACR,yBAAA,GACA,yBAAA,IACJ,IAAA,EAAM,oBAAA,GACL,qBAAA;EACI,mBAAA,CACL,oBAAA,IACM,IAAA,EAAM,WAAA,gBACR,wBAAA,GACA,wBAAA,IACJ,IAAA,GAAO,6BAAA,GACN,qBAAA;EAuRI,UAAA,CACL,oBAAA,IACM,IAAA,EAAM,WAAA,gBACR,yBAAA,GACA,yBAAA,IACJ,IAAA,EAAM,oBAAA,GACL,OAAA,CAAQ,oBAAA;EACJ,UAAA,CACL,oBAAA,IACM,IAAA,EAAM,WAAA,gBACR,wBAAA,GACA,wBAAA,IACJ,IAAA,GAAO,6BAAA,GACN,OAAA,CAAQ,oBAAA;AAAA"}
@@ -3,7 +3,6 @@ import { deriveLabels } from "./label.js";
3
3
  import { convertOrParsePColumnData, getUniquePartitionKeys } from "./pcolumn_data.js";
4
4
  import { Annotation, LinkerMap, canonicalizeAxisId, deriveNativeId, entriesToDataInfo, getAxisId, getColumnIdAndSpec, isLinkerColumn, isPColumnSpec, isPartitionedDataInfoEntries, legacyColumnSelectorsToPredicate, matchAxisId, resolveAnchors } from "@milaboratories/pl-model-common";
5
5
  import canonicalize from "canonicalize";
6
-
7
6
  //#region src/render/util/column_collection.ts
8
7
  function isPColumnValues(value) {
9
8
  if (!Array.isArray(value)) return false;
@@ -278,7 +277,7 @@ var PColumnCollection = class {
278
277
  return columns;
279
278
  }
280
279
  };
281
-
282
280
  //#endregion
283
281
  export { PColumnCollection };
282
+
284
283
  //# sourceMappingURL=column_collection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"column_collection.js","names":[],"sources":["../../../src/render/util/column_collection.ts"],"sourcesContent":["import type {\n AnchoredIdDeriver,\n AnchoredPColumnSelector,\n AxisFilterByIdx,\n AxisFilterValue,\n AxisId,\n NativePObjectId,\n PartitionedDataInfoEntries,\n PColumn,\n PColumnLazy,\n PColumnSelector,\n PColumnSpec,\n PColumnValues,\n PObjectId,\n ResolveAnchorsOptions,\n SUniversalPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeAxisId,\n deriveNativeId,\n entriesToDataInfo,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n isPartitionedDataInfoEntries,\n isPColumnSpec,\n legacyColumnSelectorsToPredicate,\n LinkerMap,\n matchAxisId,\n resolveAnchors,\n} from \"@milaboratories/pl-model-common\";\nimport canonicalize from \"canonicalize\";\nimport type { Optional } from \"utility-types\";\nimport type { TreeNodeAccessor } from \"../accessor\";\nimport type { PColumnDataUniversal } from \"../internal\";\nimport { filterDataInfoEntries } from \"./axis_filtering\";\nimport type { LabelDerivationOps } from \"./label\";\nimport { deriveLabels } from \"./label\";\nimport { convertOrParsePColumnData, getUniquePartitionKeys } from \"./pcolumn_data\";\nimport type { APColumnSelectorWithSplit, PColumnSelectorWithSplit } from \"./split_selectors\";\n\nfunction isPColumnValues(value: unknown): value is PColumnValues {\n if (!Array.isArray(value)) return false;\n if (value.length === 0) return true;\n const first = value[0];\n return typeof first === \"object\" && first !== null && \"key\" in first && \"val\" in first;\n}\n\nexport interface ColumnProvider {\n selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<PColumnDataUniversal | undefined>[];\n}\n\nexport interface AxisLabelProvider {\n findLabels(axis: AxisId): Record<string | number, string> | undefined;\n}\n\n/**\n * A simple implementation of {@link ColumnProvider} backed by a pre-defined array of columns.\n */\nclass ArrayColumnProvider implements ColumnProvider {\n constructor(private readonly columns: PColumn<PColumnDataUniversal | undefined>[]) {}\n\n selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<PColumnDataUniversal | undefined>[] {\n const predicate =\n typeof selectors === \"function\" ? selectors : legacyColumnSelectorsToPredicate(selectors);\n // Filter based on spec, ignoring data type for now\n return this.columns.filter((column): column is PColumn<PColumnDataUniversal | undefined> =>\n predicate(column.spec),\n );\n }\n}\n\n/** Lazy calculates the data, returns undefined if data is not ready. */\nexport type PColumnLazyWithLabel<T> = PColumnLazy<T> & {\n label: string;\n};\n\n/** Universal column is a column that uses a universal column id, and always have label. */\nexport type PColumnLazyUniversal<T> = PColumnLazyWithLabel<T> & {\n id: SUniversalPColumnId;\n};\n\n/** @deprecated Use PColumnLazyWithLabel instead. */\nexport type PColumnEntryWithLabel = PColumnLazy<undefined | PColumnDataUniversal> & {\n label: string;\n};\n\n/** @deprecated Use PColumnLazyUniversal instead. */\nexport type PColumnEntryUniversal = PColumnEntryWithLabel & {\n id: SUniversalPColumnId;\n};\n\n// Helper types similar to those in api.ts\ntype AxisFilterInfo = {\n axisIdx: number;\n axisId: AxisId;\n value: AxisFilterValue;\n label: string;\n};\n\n// Intermediate representation for columns requiring splitting\ntype IntermediateSplitEntry = {\n type: \"split\";\n originalColumn: PColumn<PColumnDataUniversal | undefined>;\n spec: PColumnSpec;\n /** With splitting axes removed */\n adjustedSpec: PColumnSpec;\n dataEntries: PartitionedDataInfoEntries<TreeNodeAccessor>;\n axisFilters: AxisFilterInfo[];\n};\n\n// Intermediate representation for columns NOT requiring splitting\ntype IntermediateDirectEntry = {\n type: \"direct\";\n originalColumn: PColumn<PColumnDataUniversal | undefined>;\n spec: PColumnSpec;\n /** The same as `spec` */\n adjustedSpec: PColumnSpec;\n};\n\n// Union type for intermediate processing\ntype IntermediateColumnEntry = IntermediateSplitEntry | IntermediateDirectEntry;\n\nfunction splitFiltersToTrace(splitFilters?: AxisFilterInfo[]) {\n if (!splitFilters) return undefined;\n return splitFilters.map((filter) => ({\n type: `split:${canonicalizeAxisId(filter.axisId)}`,\n label: filter.label,\n importance: 1_000_000, // High importance for split filters in labels\n }));\n}\n\nfunction splitFiltersToAxisFilter(splitFilters?: AxisFilterInfo[]): AxisFilterByIdx[] | undefined {\n if (!splitFilters) return undefined;\n return splitFilters.map((filter): AxisFilterByIdx => [filter.axisIdx, filter.value]);\n}\n\nfunction fallbackIdDeriver(originalId: PObjectId, axisFilters?: AxisFilterByIdx[]): PObjectId {\n if (!axisFilters || axisFilters.length === 0) return originalId;\n const filtersToCanonicalize = [...axisFilters].sort((a, b) => a[0] - b[0]);\n return canonicalize({ id: originalId, axisFilters: filtersToCanonicalize })! as PObjectId;\n}\n\n/** Checks if a selector object uses any anchor properties */\nfunction hasAnchors(selector: unknown): selector is AnchoredPColumnSelector {\n if (!selector || typeof selector !== \"object\") return false;\n const potentialAnchored = selector as Record<string, any>;\n const hasAnchorValues = (obj: unknown) =>\n obj &&\n typeof obj === \"object\" &&\n Object.values(obj).some((v: unknown) => typeof v === \"object\" && v !== null && \"anchor\" in v);\n const domainHasAnchors = hasAnchorValues(potentialAnchored[\"domain\"]);\n const contextDomainHasAnchors = hasAnchorValues(potentialAnchored[\"contextDomain\"]);\n const axesHaveAnchors =\n potentialAnchored[\"axes\"] &&\n Array.isArray(potentialAnchored[\"axes\"]) &&\n potentialAnchored[\"axes\"].some(\n (a: unknown) => typeof a === \"object\" && a !== null && \"anchor\" in a,\n );\n return (\n !!potentialAnchored[\"domainAnchor\"] ||\n !!potentialAnchored[\"contextDomainAnchor\"] ||\n domainHasAnchors ||\n contextDomainHasAnchors ||\n axesHaveAnchors\n );\n}\n\n/**\n * Derives the indices of axes marked for splitting based on the selector.\n * Throws an error if splitting is requested alongside `partialAxesMatch`.\n */\nfunction getSplitAxisIndices(\n selector: APColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean),\n): number[] {\n if (typeof selector !== \"object\" || !(\"axes\" in selector) || selector.axes === undefined) {\n return []; // No axes specified or not an object selector, no splitting\n }\n\n const splitIndices = selector.axes\n .map((axis, index) =>\n typeof axis === \"object\" && \"split\" in axis && axis.split === true ? index : -1,\n )\n .filter((index) => index !== -1);\n\n if (splitIndices.length > 0 && selector.partialAxesMatch !== undefined) {\n throw new Error(\"Axis splitting is not supported when `partialAxesMatch` is defined.\");\n }\n\n splitIndices.sort((a, b) => a - b);\n return splitIndices;\n}\n\ntype UniversalPColumnOptsNoDeriver = {\n /** If provided, columns matching the provided selectors will be excluded from the result. */\n exclude?: AnchoredPColumnSelector | AnchoredPColumnSelector[];\n labelOps?: LabelDerivationOps;\n /** If true, incomplete data will cause the column to be skipped instead of returning undefined for the whole request. */\n dontWaitAllData?: boolean;\n /**\n * If true, the derived label will override the 'pl7.app/label' annotation\n * in the resulting PColumnSpec. It also forces `includeNativeLabel` in `labelOps` to true,\n * unless `labelOps.includeNativeLabel` is explicitly set to false.\n * Default value in getUniversalEntries is false, in getColumns it is true.\n */\n overrideLabelAnnotation?: boolean;\n /** If true, resulting columns will be enriched by other columns considering linker columns. Default is false. */\n enrichByLinkers?: boolean;\n};\n\ntype UniversalPColumnOpts = UniversalPColumnOptsNoDeriver & {\n anchorCtx: AnchoredIdDeriver;\n} & ResolveAnchorsOptions;\n\nexport class PColumnCollection {\n private readonly defaultProviderStore: PColumn<PColumnDataUniversal | undefined>[] = [];\n private readonly providers: ColumnProvider[] = [\n new ArrayColumnProvider(this.defaultProviderStore),\n ];\n private readonly axisLabelProviders: AxisLabelProvider[] = [];\n\n constructor() {}\n\n public addColumnProvider(provider: ColumnProvider): this {\n this.providers.push(provider);\n return this;\n }\n\n public addAxisLabelProvider(provider: AxisLabelProvider): this {\n this.axisLabelProviders.push(provider);\n return this;\n }\n\n public addColumns(columns: PColumn<PColumnDataUniversal | undefined>[]): this {\n this.defaultProviderStore.push(...columns);\n return this;\n }\n\n public addColumn(column: PColumn<PColumnDataUniversal | undefined>): this {\n this.defaultProviderStore.push(column);\n return this;\n }\n\n /** Fetches labels for a given axis from the registered providers */\n private findLabels(axis: AxisId): Record<string | number, string> | undefined {\n for (const provider of this.axisLabelProviders) {\n const labels = provider.findLabels(axis);\n if (labels) return labels; // First provider wins\n }\n return undefined;\n }\n\n // Overload signatures updated to return PColumnEntry types\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts: UniversalPColumnOpts,\n ): PColumnEntryUniversal[] | undefined;\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | PColumnSelectorWithSplit\n | PColumnSelectorWithSplit[],\n opts?: UniversalPColumnOptsNoDeriver,\n ): PColumnEntryWithLabel[] | undefined;\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts?: Optional<UniversalPColumnOpts, \"anchorCtx\">,\n ): (PColumnEntryWithLabel | PColumnEntryUniversal)[] | undefined {\n const {\n anchorCtx,\n labelOps: rawLabelOps,\n dontWaitAllData = false,\n overrideLabelAnnotation = false,\n exclude,\n enrichByLinkers = false,\n } = opts ?? {};\n\n const labelOps: LabelDerivationOps = {\n ...(overrideLabelAnnotation && rawLabelOps?.includeNativeLabel !== false\n ? { includeNativeLabel: true }\n : {}),\n ...rawLabelOps,\n };\n\n let excludePredicate: (spec: PColumnSpec) => boolean = () => false;\n if (exclude) {\n const excludePredicartes = (Array.isArray(exclude) ? exclude : [exclude]).map((selector) => {\n if (hasAnchors(selector)) {\n if (!anchorCtx)\n throw new Error(\n \"Anchored selectors in exclude require an AnchoredIdDeriver to be provided in options.\",\n );\n return legacyColumnSelectorsToPredicate(\n resolveAnchors(anchorCtx.anchors, selector, opts),\n );\n } else return legacyColumnSelectorsToPredicate(selector);\n });\n excludePredicate = (spec) => excludePredicartes.some((predicate) => predicate(spec));\n }\n\n const selectorsArray =\n typeof predicateOrSelectors === \"function\"\n ? [predicateOrSelectors]\n : Array.isArray(predicateOrSelectors)\n ? predicateOrSelectors\n : [predicateOrSelectors];\n\n const intermediateResults: IntermediateColumnEntry[] = [];\n const selectedNativeIds = new Set<NativePObjectId>();\n\n for (const rawSelector of selectorsArray) {\n const usesAnchors = hasAnchors(rawSelector);\n\n let currentSelector: PColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean);\n if (usesAnchors) {\n if (!anchorCtx)\n throw new Error(\n \"Anchored selectors require an AnchoredIdDeriver to be provided in options.\",\n );\n currentSelector = resolveAnchors(\n anchorCtx.anchors,\n rawSelector as AnchoredPColumnSelector,\n opts,\n );\n } else\n currentSelector = rawSelector as\n | PColumnSelectorWithSplit\n | ((spec: PColumnSpec) => boolean);\n\n const selectedIds = new Set<PObjectId>();\n const selectedColumns: PColumn<PColumnDataUniversal | undefined>[] = [];\n for (const provider of this.providers) {\n const providerColumns = provider.selectColumns(currentSelector);\n for (const col of providerColumns) {\n if (excludePredicate(col.spec)) continue;\n if (selectedIds.has(col.id))\n throw new Error(\n `Duplicate column id ${col.id} in provider ${provider.constructor.name}`,\n );\n const nativeId = deriveNativeId(col.spec);\n if (selectedNativeIds.has(nativeId)) continue;\n selectedIds.add(col.id);\n selectedNativeIds.add(nativeId);\n selectedColumns.push(col);\n }\n }\n\n if (selectedColumns.length === 0) continue;\n\n const splitAxisIdxs = getSplitAxisIndices(rawSelector);\n const needsSplitting = splitAxisIdxs.length > 0;\n\n for (const column of selectedColumns) {\n if (!isPColumnSpec(column.spec)) continue;\n\n const originalSpec = column.spec;\n\n if (needsSplitting) {\n if (isPColumnValues(column.data))\n throw new Error(\n `Splitting is not supported for PColumns with PColumnValues data format. Column id: ${column.id}`,\n );\n const dataEntries = convertOrParsePColumnData(column.data);\n\n if (!dataEntries) {\n if (dontWaitAllData) continue;\n return undefined;\n }\n\n if (!isPartitionedDataInfoEntries(dataEntries))\n throw new Error(\n `Splitting requires Partitioned DataInfoEntries, but parsing resulted in ${dataEntries.type} for column ${column.id}`,\n );\n\n const uniqueKeys = getUniquePartitionKeys(dataEntries);\n\n const maxSplitIdx = splitAxisIdxs[splitAxisIdxs.length - 1];\n if (maxSplitIdx >= dataEntries.partitionKeyLength)\n throw new Error(\n `Not enough partition keys (${dataEntries.partitionKeyLength}) for requested split axes (max index ${maxSplitIdx}) in column ${originalSpec.name}`,\n );\n\n const axesLabels: (Record<string | number, string> | undefined)[] = splitAxisIdxs.map(\n (idx) => this.findLabels(getAxisId(originalSpec.axesSpec[idx])),\n );\n\n const keyCombinations: (string | number)[][] = [];\n const generateCombinations = (currentCombo: (string | number)[], sAxisIdx: number) => {\n if (sAxisIdx >= splitAxisIdxs.length) {\n keyCombinations.push([...currentCombo]);\n if (keyCombinations.length > 10000)\n throw new Error(\"Too many key combinations, aborting.\");\n return;\n }\n const axisIdx = splitAxisIdxs[sAxisIdx];\n if (axisIdx >= uniqueKeys.length)\n throw new Error(\n `Axis index ${axisIdx} out of bounds for unique keys array (length ${uniqueKeys.length}) during split key generation for column ${column.id}`,\n );\n const axisValues = uniqueKeys[axisIdx];\n if (!axisValues || axisValues.length === 0) {\n keyCombinations.length = 0; // No combinations possible if one axis has no keys\n return;\n }\n for (const val of axisValues) {\n currentCombo.push(val);\n generateCombinations(currentCombo, sAxisIdx + 1);\n currentCombo.pop();\n }\n };\n\n generateCombinations([], 0);\n\n if (keyCombinations.length === 0) continue;\n\n const newAxesSpec = [...originalSpec.axesSpec];\n const splitAxisOriginalIdxs = splitAxisIdxs.map((idx) => idx); // Keep original indices for axisId lookup\n // Remove axes in reverse order to maintain correct indices during removal\n for (let i = splitAxisIdxs.length - 1; i >= 0; i--) {\n newAxesSpec.splice(splitAxisIdxs[i], 1);\n }\n const adjustedSpec = { ...originalSpec, axesSpec: newAxesSpec };\n\n for (const keyCombo of keyCombinations) {\n const splitFilters: AxisFilterInfo[] = keyCombo.map((value, sAxisIdx) => {\n const axisIdx = splitAxisOriginalIdxs[sAxisIdx]; // Use original index for lookup\n const axisId = getAxisId(originalSpec.axesSpec[axisIdx]);\n const axisLabelMap = axesLabels[sAxisIdx];\n const label = axisLabelMap?.[value] ?? String(value);\n return { axisIdx, axisId, value: value as AxisFilterValue, label };\n });\n\n intermediateResults.push({\n type: \"split\",\n originalColumn: column,\n spec: originalSpec,\n adjustedSpec,\n dataEntries,\n axisFilters: splitFilters,\n });\n }\n } else {\n intermediateResults.push({\n type: \"direct\",\n originalColumn: column,\n spec: originalSpec,\n adjustedSpec: originalSpec,\n });\n }\n }\n }\n\n if (intermediateResults.length === 0) return [];\n\n const labeledResults = deriveLabels(\n intermediateResults,\n (entry) => ({\n spec: entry.spec,\n suffixTrace: entry.type === \"split\" ? splitFiltersToTrace(entry.axisFilters) : undefined,\n }),\n labelOps,\n );\n\n const result: (PColumnEntryWithLabel | PColumnEntryUniversal)[] = [];\n\n for (const { value: entry, label } of labeledResults) {\n const { originalColumn, spec: originalSpec } = entry;\n\n const axisFilters = entry.type === \"split\" ? entry.axisFilters : undefined;\n const axisFiltersTuple = splitFiltersToAxisFilter(axisFilters);\n\n let finalId: SUniversalPColumnId | PObjectId;\n if (anchorCtx) finalId = anchorCtx.deriveS(originalSpec, axisFiltersTuple);\n else finalId = fallbackIdDeriver(originalColumn.id, axisFiltersTuple);\n\n let finalSpec = { ...entry.adjustedSpec };\n\n if (overrideLabelAnnotation) {\n finalSpec = {\n ...finalSpec,\n annotations: {\n ...finalSpec.annotations,\n [Annotation.Label]: label,\n } satisfies Annotation,\n };\n }\n\n result.push({\n id: finalId,\n spec: finalSpec,\n data: () =>\n entry.type === \"split\"\n ? entriesToDataInfo(filterDataInfoEntries(entry.dataEntries, axisFiltersTuple!))\n : entry.originalColumn.data,\n label: label,\n });\n }\n\n const ids = new Set(result.map((entry) => entry.id));\n\n if (enrichByLinkers && anchorCtx) {\n const linkers = result.filter((entry) => isLinkerColumn(entry.spec));\n if (linkers.length === 0) {\n return result;\n }\n\n const anchorAxes = Object.values(anchorCtx.anchors).flatMap((anchor) => anchor.axesSpec);\n const linkerMap = LinkerMap.fromColumns(linkers.map(getColumnIdAndSpec));\n\n // loose way of matching\n function matchAxisIdFn(linkerKeyId: AxisId, sourceAxisId: AxisId): boolean {\n return matchAxisId(linkerKeyId, sourceAxisId) || matchAxisId(sourceAxisId, linkerKeyId);\n }\n // search all axes that can be reached by linkers from anchor axes; anchor axes are not in this list;\n const availableByLinkersAxes = linkerMap.getReachableByLinkersAxesFromAxes(\n anchorAxes,\n matchAxisIdFn,\n );\n\n // search all columns that includes at least one of additional axes;\n const availableByLinkersColumns = this.getUniversalEntries(\n (spec) =>\n !isLinkerColumn(spec) &&\n spec.axesSpec.some((columnAxisSpec) => {\n const columnAxisId = getAxisId(columnAxisSpec);\n return availableByLinkersAxes.some((axis) =>\n matchAxisIdFn(getAxisId(axis), columnAxisId),\n );\n }),\n { anchorCtx, labelOps, dontWaitAllData, overrideLabelAnnotation, exclude },\n );\n if (availableByLinkersColumns) {\n result.push(...availableByLinkersColumns.filter((entry) => !ids.has(entry.id)));\n }\n }\n\n return result;\n }\n\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts: UniversalPColumnOpts,\n ): PColumn<PColumnDataUniversal>[] | undefined;\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | PColumnSelectorWithSplit\n | PColumnSelectorWithSplit[],\n opts?: UniversalPColumnOptsNoDeriver,\n ): PColumn<PColumnDataUniversal>[] | undefined;\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts?: Optional<UniversalPColumnOpts, \"anchorCtx\">,\n ): PColumn<PColumnDataUniversal>[] | undefined {\n const entries = this.getUniversalEntries(predicateOrSelectors, {\n overrideLabelAnnotation: true, // default for getColumns\n ...opts,\n } as UniversalPColumnOpts);\n if (!entries) return undefined;\n\n const columns: PColumn<PColumnDataUniversal>[] = [];\n for (const entry of entries) {\n const data = entry.data();\n if (!data) {\n if (opts?.dontWaitAllData) continue;\n return undefined;\n }\n columns.push({\n id: entry.id,\n spec: entry.spec,\n data,\n });\n }\n\n return columns;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"column_collection.js","names":[],"sources":["../../../src/render/util/column_collection.ts"],"sourcesContent":["import type {\n AnchoredIdDeriver,\n AnchoredPColumnSelector,\n AxisFilterByIdx,\n AxisFilterValue,\n AxisId,\n NativePObjectId,\n PartitionedDataInfoEntries,\n PColumn,\n PColumnLazy,\n PColumnSelector,\n PColumnSpec,\n PColumnValues,\n PObjectId,\n ResolveAnchorsOptions,\n SUniversalPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeAxisId,\n deriveNativeId,\n entriesToDataInfo,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n isPartitionedDataInfoEntries,\n isPColumnSpec,\n legacyColumnSelectorsToPredicate,\n LinkerMap,\n matchAxisId,\n resolveAnchors,\n} from \"@milaboratories/pl-model-common\";\nimport canonicalize from \"canonicalize\";\nimport type { Optional } from \"utility-types\";\nimport type { TreeNodeAccessor } from \"../accessor\";\nimport type { PColumnDataUniversal } from \"../internal\";\nimport { filterDataInfoEntries } from \"./axis_filtering\";\nimport type { LabelDerivationOps } from \"./label\";\nimport { deriveLabels } from \"./label\";\nimport { convertOrParsePColumnData, getUniquePartitionKeys } from \"./pcolumn_data\";\nimport type { APColumnSelectorWithSplit, PColumnSelectorWithSplit } from \"./split_selectors\";\n\nfunction isPColumnValues(value: unknown): value is PColumnValues {\n if (!Array.isArray(value)) return false;\n if (value.length === 0) return true;\n const first = value[0];\n return typeof first === \"object\" && first !== null && \"key\" in first && \"val\" in first;\n}\n\nexport interface ColumnProvider {\n selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<PColumnDataUniversal | undefined>[];\n}\n\nexport interface AxisLabelProvider {\n findLabels(axis: AxisId): Record<string | number, string> | undefined;\n}\n\n/**\n * A simple implementation of {@link ColumnProvider} backed by a pre-defined array of columns.\n */\nclass ArrayColumnProvider implements ColumnProvider {\n constructor(private readonly columns: PColumn<PColumnDataUniversal | undefined>[]) {}\n\n selectColumns(\n selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],\n ): PColumn<PColumnDataUniversal | undefined>[] {\n const predicate =\n typeof selectors === \"function\" ? selectors : legacyColumnSelectorsToPredicate(selectors);\n // Filter based on spec, ignoring data type for now\n return this.columns.filter((column): column is PColumn<PColumnDataUniversal | undefined> =>\n predicate(column.spec),\n );\n }\n}\n\n/** Lazy calculates the data, returns undefined if data is not ready. */\nexport type PColumnLazyWithLabel<T> = PColumnLazy<T> & {\n label: string;\n};\n\n/** Universal column is a column that uses a universal column id, and always have label. */\nexport type PColumnLazyUniversal<T> = PColumnLazyWithLabel<T> & {\n id: SUniversalPColumnId;\n};\n\n/** @deprecated Use PColumnLazyWithLabel instead. */\nexport type PColumnEntryWithLabel = PColumnLazy<undefined | PColumnDataUniversal> & {\n label: string;\n};\n\n/** @deprecated Use PColumnLazyUniversal instead. */\nexport type PColumnEntryUniversal = PColumnEntryWithLabel & {\n id: SUniversalPColumnId;\n};\n\n// Helper types similar to those in api.ts\ntype AxisFilterInfo = {\n axisIdx: number;\n axisId: AxisId;\n value: AxisFilterValue;\n label: string;\n};\n\n// Intermediate representation for columns requiring splitting\ntype IntermediateSplitEntry = {\n type: \"split\";\n originalColumn: PColumn<PColumnDataUniversal | undefined>;\n spec: PColumnSpec;\n /** With splitting axes removed */\n adjustedSpec: PColumnSpec;\n dataEntries: PartitionedDataInfoEntries<TreeNodeAccessor>;\n axisFilters: AxisFilterInfo[];\n};\n\n// Intermediate representation for columns NOT requiring splitting\ntype IntermediateDirectEntry = {\n type: \"direct\";\n originalColumn: PColumn<PColumnDataUniversal | undefined>;\n spec: PColumnSpec;\n /** The same as `spec` */\n adjustedSpec: PColumnSpec;\n};\n\n// Union type for intermediate processing\ntype IntermediateColumnEntry = IntermediateSplitEntry | IntermediateDirectEntry;\n\nfunction splitFiltersToTrace(splitFilters?: AxisFilterInfo[]) {\n if (!splitFilters) return undefined;\n return splitFilters.map((filter) => ({\n type: `split:${canonicalizeAxisId(filter.axisId)}`,\n label: filter.label,\n importance: 1_000_000, // High importance for split filters in labels\n }));\n}\n\nfunction splitFiltersToAxisFilter(splitFilters?: AxisFilterInfo[]): AxisFilterByIdx[] | undefined {\n if (!splitFilters) return undefined;\n return splitFilters.map((filter): AxisFilterByIdx => [filter.axisIdx, filter.value]);\n}\n\nfunction fallbackIdDeriver(originalId: PObjectId, axisFilters?: AxisFilterByIdx[]): PObjectId {\n if (!axisFilters || axisFilters.length === 0) return originalId;\n const filtersToCanonicalize = [...axisFilters].sort((a, b) => a[0] - b[0]);\n return canonicalize({ id: originalId, axisFilters: filtersToCanonicalize })! as PObjectId;\n}\n\n/** Checks if a selector object uses any anchor properties */\nfunction hasAnchors(selector: unknown): selector is AnchoredPColumnSelector {\n if (!selector || typeof selector !== \"object\") return false;\n const potentialAnchored = selector as Record<string, any>;\n const hasAnchorValues = (obj: unknown) =>\n obj &&\n typeof obj === \"object\" &&\n Object.values(obj).some((v: unknown) => typeof v === \"object\" && v !== null && \"anchor\" in v);\n const domainHasAnchors = hasAnchorValues(potentialAnchored[\"domain\"]);\n const contextDomainHasAnchors = hasAnchorValues(potentialAnchored[\"contextDomain\"]);\n const axesHaveAnchors =\n potentialAnchored[\"axes\"] &&\n Array.isArray(potentialAnchored[\"axes\"]) &&\n potentialAnchored[\"axes\"].some(\n (a: unknown) => typeof a === \"object\" && a !== null && \"anchor\" in a,\n );\n return (\n !!potentialAnchored[\"domainAnchor\"] ||\n !!potentialAnchored[\"contextDomainAnchor\"] ||\n domainHasAnchors ||\n contextDomainHasAnchors ||\n axesHaveAnchors\n );\n}\n\n/**\n * Derives the indices of axes marked for splitting based on the selector.\n * Throws an error if splitting is requested alongside `partialAxesMatch`.\n */\nfunction getSplitAxisIndices(\n selector: APColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean),\n): number[] {\n if (typeof selector !== \"object\" || !(\"axes\" in selector) || selector.axes === undefined) {\n return []; // No axes specified or not an object selector, no splitting\n }\n\n const splitIndices = selector.axes\n .map((axis, index) =>\n typeof axis === \"object\" && \"split\" in axis && axis.split === true ? index : -1,\n )\n .filter((index) => index !== -1);\n\n if (splitIndices.length > 0 && selector.partialAxesMatch !== undefined) {\n throw new Error(\"Axis splitting is not supported when `partialAxesMatch` is defined.\");\n }\n\n splitIndices.sort((a, b) => a - b);\n return splitIndices;\n}\n\ntype UniversalPColumnOptsNoDeriver = {\n /** If provided, columns matching the provided selectors will be excluded from the result. */\n exclude?: AnchoredPColumnSelector | AnchoredPColumnSelector[];\n labelOps?: LabelDerivationOps;\n /** If true, incomplete data will cause the column to be skipped instead of returning undefined for the whole request. */\n dontWaitAllData?: boolean;\n /**\n * If true, the derived label will override the 'pl7.app/label' annotation\n * in the resulting PColumnSpec. It also forces `includeNativeLabel` in `labelOps` to true,\n * unless `labelOps.includeNativeLabel` is explicitly set to false.\n * Default value in getUniversalEntries is false, in getColumns it is true.\n */\n overrideLabelAnnotation?: boolean;\n /** If true, resulting columns will be enriched by other columns considering linker columns. Default is false. */\n enrichByLinkers?: boolean;\n};\n\ntype UniversalPColumnOpts = UniversalPColumnOptsNoDeriver & {\n anchorCtx: AnchoredIdDeriver;\n} & ResolveAnchorsOptions;\n\nexport class PColumnCollection {\n private readonly defaultProviderStore: PColumn<PColumnDataUniversal | undefined>[] = [];\n private readonly providers: ColumnProvider[] = [\n new ArrayColumnProvider(this.defaultProviderStore),\n ];\n private readonly axisLabelProviders: AxisLabelProvider[] = [];\n\n constructor() {}\n\n public addColumnProvider(provider: ColumnProvider): this {\n this.providers.push(provider);\n return this;\n }\n\n public addAxisLabelProvider(provider: AxisLabelProvider): this {\n this.axisLabelProviders.push(provider);\n return this;\n }\n\n public addColumns(columns: PColumn<PColumnDataUniversal | undefined>[]): this {\n this.defaultProviderStore.push(...columns);\n return this;\n }\n\n public addColumn(column: PColumn<PColumnDataUniversal | undefined>): this {\n this.defaultProviderStore.push(column);\n return this;\n }\n\n /** Fetches labels for a given axis from the registered providers */\n private findLabels(axis: AxisId): Record<string | number, string> | undefined {\n for (const provider of this.axisLabelProviders) {\n const labels = provider.findLabels(axis);\n if (labels) return labels; // First provider wins\n }\n return undefined;\n }\n\n // Overload signatures updated to return PColumnEntry types\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts: UniversalPColumnOpts,\n ): PColumnEntryUniversal[] | undefined;\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | PColumnSelectorWithSplit\n | PColumnSelectorWithSplit[],\n opts?: UniversalPColumnOptsNoDeriver,\n ): PColumnEntryWithLabel[] | undefined;\n public getUniversalEntries(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts?: Optional<UniversalPColumnOpts, \"anchorCtx\">,\n ): (PColumnEntryWithLabel | PColumnEntryUniversal)[] | undefined {\n const {\n anchorCtx,\n labelOps: rawLabelOps,\n dontWaitAllData = false,\n overrideLabelAnnotation = false,\n exclude,\n enrichByLinkers = false,\n } = opts ?? {};\n\n const labelOps: LabelDerivationOps = {\n ...(overrideLabelAnnotation && rawLabelOps?.includeNativeLabel !== false\n ? { includeNativeLabel: true }\n : {}),\n ...rawLabelOps,\n };\n\n let excludePredicate: (spec: PColumnSpec) => boolean = () => false;\n if (exclude) {\n const excludePredicartes = (Array.isArray(exclude) ? exclude : [exclude]).map((selector) => {\n if (hasAnchors(selector)) {\n if (!anchorCtx)\n throw new Error(\n \"Anchored selectors in exclude require an AnchoredIdDeriver to be provided in options.\",\n );\n return legacyColumnSelectorsToPredicate(\n resolveAnchors(anchorCtx.anchors, selector, opts),\n );\n } else return legacyColumnSelectorsToPredicate(selector);\n });\n excludePredicate = (spec) => excludePredicartes.some((predicate) => predicate(spec));\n }\n\n const selectorsArray =\n typeof predicateOrSelectors === \"function\"\n ? [predicateOrSelectors]\n : Array.isArray(predicateOrSelectors)\n ? predicateOrSelectors\n : [predicateOrSelectors];\n\n const intermediateResults: IntermediateColumnEntry[] = [];\n const selectedNativeIds = new Set<NativePObjectId>();\n\n for (const rawSelector of selectorsArray) {\n const usesAnchors = hasAnchors(rawSelector);\n\n let currentSelector: PColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean);\n if (usesAnchors) {\n if (!anchorCtx)\n throw new Error(\n \"Anchored selectors require an AnchoredIdDeriver to be provided in options.\",\n );\n currentSelector = resolveAnchors(\n anchorCtx.anchors,\n rawSelector as AnchoredPColumnSelector,\n opts,\n );\n } else\n currentSelector = rawSelector as\n | PColumnSelectorWithSplit\n | ((spec: PColumnSpec) => boolean);\n\n const selectedIds = new Set<PObjectId>();\n const selectedColumns: PColumn<PColumnDataUniversal | undefined>[] = [];\n for (const provider of this.providers) {\n const providerColumns = provider.selectColumns(currentSelector);\n for (const col of providerColumns) {\n if (excludePredicate(col.spec)) continue;\n if (selectedIds.has(col.id))\n throw new Error(\n `Duplicate column id ${col.id} in provider ${provider.constructor.name}`,\n );\n const nativeId = deriveNativeId(col.spec);\n if (selectedNativeIds.has(nativeId)) continue;\n selectedIds.add(col.id);\n selectedNativeIds.add(nativeId);\n selectedColumns.push(col);\n }\n }\n\n if (selectedColumns.length === 0) continue;\n\n const splitAxisIdxs = getSplitAxisIndices(rawSelector);\n const needsSplitting = splitAxisIdxs.length > 0;\n\n for (const column of selectedColumns) {\n if (!isPColumnSpec(column.spec)) continue;\n\n const originalSpec = column.spec;\n\n if (needsSplitting) {\n if (isPColumnValues(column.data))\n throw new Error(\n `Splitting is not supported for PColumns with PColumnValues data format. Column id: ${column.id}`,\n );\n const dataEntries = convertOrParsePColumnData(column.data);\n\n if (!dataEntries) {\n if (dontWaitAllData) continue;\n return undefined;\n }\n\n if (!isPartitionedDataInfoEntries(dataEntries))\n throw new Error(\n `Splitting requires Partitioned DataInfoEntries, but parsing resulted in ${dataEntries.type} for column ${column.id}`,\n );\n\n const uniqueKeys = getUniquePartitionKeys(dataEntries);\n\n const maxSplitIdx = splitAxisIdxs[splitAxisIdxs.length - 1];\n if (maxSplitIdx >= dataEntries.partitionKeyLength)\n throw new Error(\n `Not enough partition keys (${dataEntries.partitionKeyLength}) for requested split axes (max index ${maxSplitIdx}) in column ${originalSpec.name}`,\n );\n\n const axesLabels: (Record<string | number, string> | undefined)[] = splitAxisIdxs.map(\n (idx) => this.findLabels(getAxisId(originalSpec.axesSpec[idx])),\n );\n\n const keyCombinations: (string | number)[][] = [];\n const generateCombinations = (currentCombo: (string | number)[], sAxisIdx: number) => {\n if (sAxisIdx >= splitAxisIdxs.length) {\n keyCombinations.push([...currentCombo]);\n if (keyCombinations.length > 10000)\n throw new Error(\"Too many key combinations, aborting.\");\n return;\n }\n const axisIdx = splitAxisIdxs[sAxisIdx];\n if (axisIdx >= uniqueKeys.length)\n throw new Error(\n `Axis index ${axisIdx} out of bounds for unique keys array (length ${uniqueKeys.length}) during split key generation for column ${column.id}`,\n );\n const axisValues = uniqueKeys[axisIdx];\n if (!axisValues || axisValues.length === 0) {\n keyCombinations.length = 0; // No combinations possible if one axis has no keys\n return;\n }\n for (const val of axisValues) {\n currentCombo.push(val);\n generateCombinations(currentCombo, sAxisIdx + 1);\n currentCombo.pop();\n }\n };\n\n generateCombinations([], 0);\n\n if (keyCombinations.length === 0) continue;\n\n const newAxesSpec = [...originalSpec.axesSpec];\n const splitAxisOriginalIdxs = splitAxisIdxs.map((idx) => idx); // Keep original indices for axisId lookup\n // Remove axes in reverse order to maintain correct indices during removal\n for (let i = splitAxisIdxs.length - 1; i >= 0; i--) {\n newAxesSpec.splice(splitAxisIdxs[i], 1);\n }\n const adjustedSpec = { ...originalSpec, axesSpec: newAxesSpec };\n\n for (const keyCombo of keyCombinations) {\n const splitFilters: AxisFilterInfo[] = keyCombo.map((value, sAxisIdx) => {\n const axisIdx = splitAxisOriginalIdxs[sAxisIdx]; // Use original index for lookup\n const axisId = getAxisId(originalSpec.axesSpec[axisIdx]);\n const axisLabelMap = axesLabels[sAxisIdx];\n const label = axisLabelMap?.[value] ?? String(value);\n return { axisIdx, axisId, value: value as AxisFilterValue, label };\n });\n\n intermediateResults.push({\n type: \"split\",\n originalColumn: column,\n spec: originalSpec,\n adjustedSpec,\n dataEntries,\n axisFilters: splitFilters,\n });\n }\n } else {\n intermediateResults.push({\n type: \"direct\",\n originalColumn: column,\n spec: originalSpec,\n adjustedSpec: originalSpec,\n });\n }\n }\n }\n\n if (intermediateResults.length === 0) return [];\n\n const labeledResults = deriveLabels(\n intermediateResults,\n (entry) => ({\n spec: entry.spec,\n suffixTrace: entry.type === \"split\" ? splitFiltersToTrace(entry.axisFilters) : undefined,\n }),\n labelOps,\n );\n\n const result: (PColumnEntryWithLabel | PColumnEntryUniversal)[] = [];\n\n for (const { value: entry, label } of labeledResults) {\n const { originalColumn, spec: originalSpec } = entry;\n\n const axisFilters = entry.type === \"split\" ? entry.axisFilters : undefined;\n const axisFiltersTuple = splitFiltersToAxisFilter(axisFilters);\n\n let finalId: SUniversalPColumnId | PObjectId;\n if (anchorCtx) finalId = anchorCtx.deriveS(originalSpec, axisFiltersTuple);\n else finalId = fallbackIdDeriver(originalColumn.id, axisFiltersTuple);\n\n let finalSpec = { ...entry.adjustedSpec };\n\n if (overrideLabelAnnotation) {\n finalSpec = {\n ...finalSpec,\n annotations: {\n ...finalSpec.annotations,\n [Annotation.Label]: label,\n } satisfies Annotation,\n };\n }\n\n result.push({\n id: finalId,\n spec: finalSpec,\n data: () =>\n entry.type === \"split\"\n ? entriesToDataInfo(filterDataInfoEntries(entry.dataEntries, axisFiltersTuple!))\n : entry.originalColumn.data,\n label: label,\n });\n }\n\n const ids = new Set(result.map((entry) => entry.id));\n\n if (enrichByLinkers && anchorCtx) {\n const linkers = result.filter((entry) => isLinkerColumn(entry.spec));\n if (linkers.length === 0) {\n return result;\n }\n\n const anchorAxes = Object.values(anchorCtx.anchors).flatMap((anchor) => anchor.axesSpec);\n const linkerMap = LinkerMap.fromColumns(linkers.map(getColumnIdAndSpec));\n\n // loose way of matching\n function matchAxisIdFn(linkerKeyId: AxisId, sourceAxisId: AxisId): boolean {\n return matchAxisId(linkerKeyId, sourceAxisId) || matchAxisId(sourceAxisId, linkerKeyId);\n }\n // search all axes that can be reached by linkers from anchor axes; anchor axes are not in this list;\n const availableByLinkersAxes = linkerMap.getReachableByLinkersAxesFromAxes(\n anchorAxes,\n matchAxisIdFn,\n );\n\n // search all columns that includes at least one of additional axes;\n const availableByLinkersColumns = this.getUniversalEntries(\n (spec) =>\n !isLinkerColumn(spec) &&\n spec.axesSpec.some((columnAxisSpec) => {\n const columnAxisId = getAxisId(columnAxisSpec);\n return availableByLinkersAxes.some((axis) =>\n matchAxisIdFn(getAxisId(axis), columnAxisId),\n );\n }),\n { anchorCtx, labelOps, dontWaitAllData, overrideLabelAnnotation, exclude },\n );\n if (availableByLinkersColumns) {\n result.push(...availableByLinkersColumns.filter((entry) => !ids.has(entry.id)));\n }\n }\n\n return result;\n }\n\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts: UniversalPColumnOpts,\n ): PColumn<PColumnDataUniversal>[] | undefined;\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | PColumnSelectorWithSplit\n | PColumnSelectorWithSplit[],\n opts?: UniversalPColumnOptsNoDeriver,\n ): PColumn<PColumnDataUniversal>[] | undefined;\n public getColumns(\n predicateOrSelectors:\n | ((spec: PColumnSpec) => boolean)\n | APColumnSelectorWithSplit\n | APColumnSelectorWithSplit[],\n opts?: Optional<UniversalPColumnOpts, \"anchorCtx\">,\n ): PColumn<PColumnDataUniversal>[] | undefined {\n const entries = this.getUniversalEntries(predicateOrSelectors, {\n overrideLabelAnnotation: true, // default for getColumns\n ...opts,\n } as UniversalPColumnOpts);\n if (!entries) return undefined;\n\n const columns: PColumn<PColumnDataUniversal>[] = [];\n for (const entry of entries) {\n const data = entry.data();\n if (!data) {\n if (opts?.dontWaitAllData) continue;\n return undefined;\n }\n columns.push({\n id: entry.id,\n spec: entry.spec,\n data,\n });\n }\n\n return columns;\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const require_axis_filtering = require('./axis_filtering.cjs');
2
- const require_label = require('./label.cjs');
3
- const require_pcolumn_data = require('./pcolumn_data.cjs');
4
- const require_column_collection = require('./column_collection.cjs');
1
+ require("./axis_filtering.cjs");
2
+ require("./label.cjs");
3
+ require("./pcolumn_data.cjs");
4
+ require("./column_collection.cjs");
@@ -1,4 +1,4 @@
1
- import { filterDataInfoEntries } from "./axis_filtering.js";
2
- import { deriveLabels } from "./label.js";
3
- import { RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, allPColumnsReady, convertOrParsePColumnData, getPartitionKeysList, getUniquePartitionKeys, isPColumnReady, parsePColumnData, parseResourceMap } from "./pcolumn_data.js";
4
- import { PColumnCollection } from "./column_collection.js";
1
+ import "./axis_filtering.js";
2
+ import "./label.js";
3
+ import "./pcolumn_data.js";
4
+ import "./column_collection.js";
@@ -1,5 +1,4 @@
1
- const require_derive_distinct_labels = require('../../labels/derive_distinct_labels.cjs');
2
-
1
+ const require_derive_distinct_labels = require("../../labels/derive_distinct_labels.cjs");
3
2
  //#region src/render/util/label.ts
4
3
  /** @deprecated Use deriveDistinctLabels */
5
4
  function deriveLabels(values, getSpec, options = {}) {
@@ -8,7 +7,7 @@ function deriveLabels(values, getSpec, options = {}) {
8
7
  label: l.label
9
8
  }));
10
9
  }
11
-
12
10
  //#endregion
13
11
  exports.deriveLabels = deriveLabels;
12
+
14
13
  //# sourceMappingURL=label.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"label.cjs","names":["deriveDistinctLabels"],"sources":["../../../src/render/util/label.ts"],"sourcesContent":["export {\n type Trace,\n type DeriveLabelsOptions as LabelDerivationOps,\n type Entry as SpecExtractorResult,\n} from \"../../labels/derive_distinct_labels\";\n\n// Backward-compatible wrapper: old API accepted a getSpec callback\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\ntype WithLabel<T> = { value: T; label: string };\n\n/** @deprecated Use deriveDistinctLabels */\nexport function deriveLabels<T>(\n values: T[],\n getSpec: (obj: T) => Entry,\n options: DeriveLabelsOptions = {},\n): WithLabel<T>[] {\n const specs = values.map(getSpec);\n const labeled = deriveDistinctLabels(specs, options);\n return labeled.map((l, i) => ({ value: values[i], label: l.label }));\n}\n"],"mappings":";;;;AAgBA,SAAgB,aACd,QACA,SACA,UAA+B,EAAE,EACjB;AAGhB,QADgBA,oDADF,OAAO,IAAI,QAAQ,EACW,QAAQ,CACrC,KAAK,GAAG,OAAO;EAAE,OAAO,OAAO;EAAI,OAAO,EAAE;EAAO,EAAE"}
1
+ {"version":3,"file":"label.cjs","names":["deriveDistinctLabels"],"sources":["../../../src/render/util/label.ts"],"sourcesContent":["export {\n type Trace,\n type DeriveLabelsOptions as LabelDerivationOps,\n type Entry as SpecExtractorResult,\n} from \"../../labels/derive_distinct_labels\";\n\n// Backward-compatible wrapper: old API accepted a getSpec callback\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\ntype WithLabel<T> = { value: T; label: string };\n\n/** @deprecated Use deriveDistinctLabels */\nexport function deriveLabels<T>(\n values: T[],\n getSpec: (obj: T) => Entry,\n options: DeriveLabelsOptions = {},\n): WithLabel<T>[] {\n const specs = values.map(getSpec);\n const labeled = deriveDistinctLabels(specs, options);\n return labeled.map((l, i) => ({ value: values[i], label: l.label }));\n}\n"],"mappings":";;;AAgBA,SAAgB,aACd,QACA,SACA,UAA+B,EAAE,EACjB;AAGhB,QADgBA,+BAAAA,qBADF,OAAO,IAAI,QAAQ,EACW,QAAQ,CACrC,KAAK,GAAG,OAAO;EAAE,OAAO,OAAO;EAAI,OAAO,EAAE;EAAO,EAAE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","names":[],"sources":["../../../src/render/util/label.ts"],"mappings":";;;KAaK,SAAA;EAAiB,KAAA,EAAO,CAAA;EAAG,KAAA;AAAA;;iBAGhB,YAAA,GAAA,CACd,MAAA,EAAQ,CAAA,IACR,OAAA,GAAU,GAAA,EAAK,CAAA,KAAM,KAAA,EACrB,OAAA,GAAS,mBAAA,GACR,SAAA,CAAU,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { deriveDistinctLabels } from "../../labels/derive_distinct_labels.js";
2
-
3
2
  //#region src/render/util/label.ts
4
3
  /** @deprecated Use deriveDistinctLabels */
5
4
  function deriveLabels(values, getSpec, options = {}) {
@@ -8,7 +7,7 @@ function deriveLabels(values, getSpec, options = {}) {
8
7
  label: l.label
9
8
  }));
10
9
  }
11
-
12
10
  //#endregion
13
11
  export { deriveLabels };
12
+
14
13
  //# sourceMappingURL=label.js.map