@platforma-sdk/model 1.53.10 → 1.53.13

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 (288) hide show
  1. package/dist/annotations/converter.cjs +11 -11
  2. package/dist/annotations/converter.cjs.map +1 -1
  3. package/dist/annotations/converter.d.ts +1 -1
  4. package/dist/annotations/converter.d.ts.map +1 -1
  5. package/dist/annotations/converter.js +11 -11
  6. package/dist/annotations/converter.js.map +1 -1
  7. package/dist/annotations/index.d.ts +2 -2
  8. package/dist/annotations/types.d.ts +4 -4
  9. package/dist/bconfig/index.d.ts +5 -5
  10. package/dist/bconfig/lambdas.d.ts +7 -7
  11. package/dist/bconfig/lambdas.d.ts.map +1 -1
  12. package/dist/bconfig/normalization.cjs.map +1 -1
  13. package/dist/bconfig/normalization.d.ts +3 -3
  14. package/dist/bconfig/normalization.js.map +1 -1
  15. package/dist/bconfig/types.cjs.map +1 -1
  16. package/dist/bconfig/types.d.ts +2 -2
  17. package/dist/bconfig/types.d.ts.map +1 -1
  18. package/dist/bconfig/types.js.map +1 -1
  19. package/dist/bconfig/util.d.ts +4 -4
  20. package/dist/bconfig/v3.d.ts +3 -3
  21. package/dist/block_api_v1.d.ts +2 -2
  22. package/dist/block_api_v1.d.ts.map +1 -1
  23. package/dist/block_api_v2.d.ts +2 -2
  24. package/dist/block_api_v2.d.ts.map +1 -1
  25. package/dist/block_api_v3.d.ts +3 -3
  26. package/dist/block_migrations.cjs +10 -10
  27. package/dist/block_migrations.cjs.map +1 -1
  28. package/dist/block_migrations.d.ts.map +1 -1
  29. package/dist/block_migrations.js +10 -10
  30. package/dist/block_migrations.js.map +1 -1
  31. package/dist/block_model.cjs +11 -11
  32. package/dist/block_model.cjs.map +1 -1
  33. package/dist/block_model.d.ts +8 -8
  34. package/dist/block_model.d.ts.map +1 -1
  35. package/dist/block_model.js +11 -11
  36. package/dist/block_model.js.map +1 -1
  37. package/dist/block_state_patch.d.ts +2 -2
  38. package/dist/block_state_util.cjs +1 -1
  39. package/dist/block_state_util.cjs.map +1 -1
  40. package/dist/block_state_util.d.ts +3 -3
  41. package/dist/block_state_util.js +1 -1
  42. package/dist/block_state_util.js.map +1 -1
  43. package/dist/block_storage.cjs +10 -10
  44. package/dist/block_storage.cjs.map +1 -1
  45. package/dist/block_storage.d.ts +2 -2
  46. package/dist/block_storage.d.ts.map +1 -1
  47. package/dist/block_storage.js +10 -10
  48. package/dist/block_storage.js.map +1 -1
  49. package/dist/block_storage_vm.cjs +22 -22
  50. package/dist/block_storage_vm.cjs.map +1 -1
  51. package/dist/block_storage_vm.d.ts +1 -1
  52. package/dist/block_storage_vm.d.ts.map +1 -1
  53. package/dist/block_storage_vm.js +22 -22
  54. package/dist/block_storage_vm.js.map +1 -1
  55. package/dist/builder.cjs +32 -23
  56. package/dist/builder.cjs.map +1 -1
  57. package/dist/builder.d.ts +7 -7
  58. package/dist/builder.d.ts.map +1 -1
  59. package/dist/builder.js +32 -23
  60. package/dist/builder.js.map +1 -1
  61. package/dist/components/PFrameForGraphs.cjs +7 -6
  62. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  63. package/dist/components/PFrameForGraphs.d.ts +4 -4
  64. package/dist/components/PFrameForGraphs.d.ts.map +1 -1
  65. package/dist/components/PFrameForGraphs.js +7 -6
  66. package/dist/components/PFrameForGraphs.js.map +1 -1
  67. package/dist/components/PlAnnotations/filter.d.ts +14 -14
  68. package/dist/components/PlAnnotations/filter.d.ts.map +1 -1
  69. package/dist/components/PlAnnotations/filters_ui.cjs +46 -46
  70. package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
  71. package/dist/components/PlAnnotations/filters_ui.d.ts +10 -34
  72. package/dist/components/PlAnnotations/filters_ui.d.ts.map +1 -1
  73. package/dist/components/PlAnnotations/filters_ui.js +46 -46
  74. package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
  75. package/dist/components/PlAnnotations/index.d.ts +2 -2
  76. package/dist/components/PlAnnotations/types.d.ts +2 -2
  77. package/dist/components/PlDataTable.cjs +19 -20
  78. package/dist/components/PlDataTable.cjs.map +1 -1
  79. package/dist/components/PlDataTable.d.ts +27 -27
  80. package/dist/components/PlDataTable.d.ts.map +1 -1
  81. package/dist/components/PlDataTable.js +19 -20
  82. package/dist/components/PlDataTable.js.map +1 -1
  83. package/dist/components/PlMultiSequenceAlignment.cjs +2 -2
  84. package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
  85. package/dist/components/PlMultiSequenceAlignment.d.ts +6 -6
  86. package/dist/components/PlMultiSequenceAlignment.d.ts.map +1 -1
  87. package/dist/components/PlMultiSequenceAlignment.js +2 -2
  88. package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
  89. package/dist/components/PlSelectionModel.cjs.map +1 -1
  90. package/dist/components/PlSelectionModel.d.ts +1 -1
  91. package/dist/components/PlSelectionModel.js.map +1 -1
  92. package/dist/components/index.d.ts +5 -5
  93. package/dist/config/actions.cjs +39 -39
  94. package/dist/config/actions.cjs.map +1 -1
  95. package/dist/config/actions.d.ts +9 -9
  96. package/dist/config/actions.d.ts.map +1 -1
  97. package/dist/config/actions.js +39 -39
  98. package/dist/config/actions.js.map +1 -1
  99. package/dist/config/actions_kinds.d.ts +30 -30
  100. package/dist/config/actions_kinds.d.ts.map +1 -1
  101. package/dist/config/index.d.ts +6 -6
  102. package/dist/config/model.d.ts +28 -28
  103. package/dist/config/model_meta.d.ts +1 -1
  104. package/dist/config/type_engine.d.ts +3 -3
  105. package/dist/config/type_util.d.ts +2 -2
  106. package/dist/env_value.cjs +1 -1
  107. package/dist/env_value.cjs.map +1 -1
  108. package/dist/env_value.js +1 -1
  109. package/dist/env_value.js.map +1 -1
  110. package/dist/filters/converter.cjs +36 -32
  111. package/dist/filters/converter.cjs.map +1 -1
  112. package/dist/filters/converter.d.ts +2 -2
  113. package/dist/filters/converter.d.ts.map +1 -1
  114. package/dist/filters/converter.js +36 -32
  115. package/dist/filters/converter.js.map +1 -1
  116. package/dist/filters/index.d.ts +2 -2
  117. package/dist/filters/types.d.ts +33 -33
  118. package/dist/filters/types.d.ts.map +1 -1
  119. package/dist/index.d.ts +24 -24
  120. package/dist/internal.cjs +7 -7
  121. package/dist/internal.cjs.map +1 -1
  122. package/dist/internal.d.ts +4 -4
  123. package/dist/internal.d.ts.map +1 -1
  124. package/dist/internal.js +7 -7
  125. package/dist/internal.js.map +1 -1
  126. package/dist/package.json.cjs +1 -1
  127. package/dist/package.json.js +1 -1
  128. package/dist/pframe.cjs +1 -1
  129. package/dist/pframe.cjs.map +1 -1
  130. package/dist/pframe.d.ts +1 -1
  131. package/dist/pframe.js +1 -1
  132. package/dist/pframe.js.map +1 -1
  133. package/dist/pframe_utils/columns.cjs +23 -15
  134. package/dist/pframe_utils/columns.cjs.map +1 -1
  135. package/dist/pframe_utils/columns.d.ts +3 -3
  136. package/dist/pframe_utils/columns.d.ts.map +1 -1
  137. package/dist/pframe_utils/columns.js +23 -15
  138. package/dist/pframe_utils/columns.js.map +1 -1
  139. package/dist/pframe_utils/index.cjs +25 -25
  140. package/dist/pframe_utils/index.cjs.map +1 -1
  141. package/dist/pframe_utils/index.d.ts +3 -3
  142. package/dist/pframe_utils/index.d.ts.map +1 -1
  143. package/dist/pframe_utils/index.js +25 -25
  144. package/dist/pframe_utils/index.js.map +1 -1
  145. package/dist/platforma.d.ts +7 -7
  146. package/dist/platforma.d.ts.map +1 -1
  147. package/dist/raw_globals.cjs +4 -1
  148. package/dist/raw_globals.cjs.map +1 -1
  149. package/dist/raw_globals.d.ts +2 -2
  150. package/dist/raw_globals.d.ts.map +1 -1
  151. package/dist/raw_globals.js +4 -1
  152. package/dist/raw_globals.js.map +1 -1
  153. package/dist/ref_util.cjs +4 -4
  154. package/dist/ref_util.cjs.map +1 -1
  155. package/dist/ref_util.d.ts +1 -1
  156. package/dist/ref_util.js +4 -4
  157. package/dist/ref_util.js.map +1 -1
  158. package/dist/render/accessor.cjs +24 -24
  159. package/dist/render/accessor.cjs.map +1 -1
  160. package/dist/render/accessor.d.ts +10 -10
  161. package/dist/render/accessor.d.ts.map +1 -1
  162. package/dist/render/accessor.js +24 -24
  163. package/dist/render/accessor.js.map +1 -1
  164. package/dist/render/api.cjs +23 -23
  165. package/dist/render/api.cjs.map +1 -1
  166. package/dist/render/api.d.ts +11 -11
  167. package/dist/render/api.d.ts.map +1 -1
  168. package/dist/render/api.js +23 -23
  169. package/dist/render/api.js.map +1 -1
  170. package/dist/render/future.cjs.map +1 -1
  171. package/dist/render/future.d.ts +1 -1
  172. package/dist/render/future.js.map +1 -1
  173. package/dist/render/index.d.ts +6 -6
  174. package/dist/render/internal.cjs +4 -4
  175. package/dist/render/internal.cjs.map +1 -1
  176. package/dist/render/internal.d.ts +7 -7
  177. package/dist/render/internal.d.ts.map +1 -1
  178. package/dist/render/internal.js +4 -4
  179. package/dist/render/internal.js.map +1 -1
  180. package/dist/render/traversal_ops.d.ts +1 -1
  181. package/dist/render/util/axis_filtering.cjs +48 -44
  182. package/dist/render/util/axis_filtering.cjs.map +1 -1
  183. package/dist/render/util/axis_filtering.d.ts +2 -2
  184. package/dist/render/util/axis_filtering.js +48 -44
  185. package/dist/render/util/axis_filtering.js.map +1 -1
  186. package/dist/render/util/column_collection.cjs +42 -35
  187. package/dist/render/util/column_collection.cjs.map +1 -1
  188. package/dist/render/util/column_collection.d.ts +4 -4
  189. package/dist/render/util/column_collection.d.ts.map +1 -1
  190. package/dist/render/util/column_collection.js +42 -35
  191. package/dist/render/util/column_collection.js.map +1 -1
  192. package/dist/render/util/index.d.ts +4 -4
  193. package/dist/render/util/label.cjs +15 -21
  194. package/dist/render/util/label.cjs.map +1 -1
  195. package/dist/render/util/label.d.ts +2 -2
  196. package/dist/render/util/label.d.ts.map +1 -1
  197. package/dist/render/util/label.js +15 -21
  198. package/dist/render/util/label.js.map +1 -1
  199. package/dist/render/util/pcolumn_data.cjs +56 -54
  200. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  201. package/dist/render/util/pcolumn_data.d.ts +5 -5
  202. package/dist/render/util/pcolumn_data.d.ts.map +1 -1
  203. package/dist/render/util/pcolumn_data.js +56 -54
  204. package/dist/render/util/pcolumn_data.js.map +1 -1
  205. package/dist/render/util/pframe_upgraders.cjs +6 -6
  206. package/dist/render/util/pframe_upgraders.cjs.map +1 -1
  207. package/dist/render/util/pframe_upgraders.d.ts +1 -1
  208. package/dist/render/util/pframe_upgraders.d.ts.map +1 -1
  209. package/dist/render/util/pframe_upgraders.js +6 -6
  210. package/dist/render/util/pframe_upgraders.js.map +1 -1
  211. package/dist/render/util/split_selectors.d.ts +1 -1
  212. package/dist/render/util/split_selectors.d.ts.map +1 -1
  213. package/dist/sdk_info.cjs.map +1 -1
  214. package/dist/sdk_info.js.map +1 -1
  215. package/dist/version.cjs.map +1 -1
  216. package/dist/version.js.map +1 -1
  217. package/package.json +23 -21
  218. package/src/annotations/converter.test.ts +98 -101
  219. package/src/annotations/converter.ts +21 -17
  220. package/src/annotations/index.ts +2 -2
  221. package/src/annotations/types.ts +4 -4
  222. package/src/bconfig/index.ts +5 -5
  223. package/src/bconfig/lambdas.ts +10 -12
  224. package/src/bconfig/normalization.ts +5 -5
  225. package/src/bconfig/types.ts +3 -5
  226. package/src/bconfig/util.ts +3 -3
  227. package/src/bconfig/v3.ts +3 -3
  228. package/src/block_api_v1.ts +7 -3
  229. package/src/block_api_v2.ts +7 -3
  230. package/src/block_api_v3.ts +3 -3
  231. package/src/block_migrations.test.ts +66 -67
  232. package/src/block_migrations.ts +16 -16
  233. package/src/block_model.ts +76 -140
  234. package/src/block_state_patch.ts +2 -2
  235. package/src/block_state_util.ts +4 -4
  236. package/src/block_storage.test.ts +106 -99
  237. package/src/block_storage.ts +22 -25
  238. package/src/block_storage_vm.ts +41 -35
  239. package/src/builder.ts +107 -95
  240. package/src/components/PFrameForGraphs.test.ts +261 -255
  241. package/src/components/PFrameForGraphs.ts +35 -22
  242. package/src/components/PlAnnotations/filter.ts +21 -15
  243. package/src/components/PlAnnotations/filters_ui.test.ts +230 -73
  244. package/src/components/PlAnnotations/filters_ui.ts +138 -105
  245. package/src/components/PlAnnotations/index.ts +2 -2
  246. package/src/components/PlAnnotations/types.ts +2 -2
  247. package/src/components/PlDataTable.ts +177 -164
  248. package/src/components/PlMultiSequenceAlignment.ts +11 -18
  249. package/src/components/PlSelectionModel.ts +1 -1
  250. package/src/components/index.ts +5 -5
  251. package/src/config/actions.ts +64 -59
  252. package/src/config/actions_kinds.ts +38 -34
  253. package/src/config/index.ts +6 -6
  254. package/src/config/model.ts +28 -28
  255. package/src/config/model_meta.ts +1 -1
  256. package/src/config/type_engine.ts +3 -3
  257. package/src/config/type_util.ts +2 -2
  258. package/src/env_value.ts +2 -2
  259. package/src/filters/converter.test.ts +185 -144
  260. package/src/filters/converter.ts +47 -35
  261. package/src/filters/index.ts +2 -2
  262. package/src/filters/types.ts +44 -39
  263. package/src/global.d.ts +1 -1
  264. package/src/index.ts +24 -24
  265. package/src/internal.ts +27 -17
  266. package/src/pframe.ts +3 -3
  267. package/src/pframe_utils/columns.ts +81 -31
  268. package/src/pframe_utils/index.ts +65 -43
  269. package/src/platforma.ts +44 -21
  270. package/src/raw_globals.ts +13 -7
  271. package/src/ref_util.ts +6 -6
  272. package/src/render/accessor.ts +43 -44
  273. package/src/render/api.ts +102 -78
  274. package/src/render/future.ts +2 -2
  275. package/src/render/index.ts +6 -6
  276. package/src/render/internal.ts +11 -12
  277. package/src/render/traversal_ops.ts +1 -1
  278. package/src/render/util/axis_filtering.ts +67 -52
  279. package/src/render/util/column_collection.ts +171 -91
  280. package/src/render/util/index.ts +4 -4
  281. package/src/render/util/label.test.ts +139 -139
  282. package/src/render/util/label.ts +42 -33
  283. package/src/render/util/pcolumn_data.ts +111 -75
  284. package/src/render/util/pframe_upgraders.ts +24 -13
  285. package/src/render/util/split_selectors.ts +6 -1
  286. package/src/sdk_info.ts +1 -1
  287. package/src/typing.test.ts +56 -56
  288. package/src/version.ts +1 -1
@@ -14,7 +14,7 @@ import type {
14
14
  PObjectId,
15
15
  ResolveAnchorsOptions,
16
16
  SUniversalPColumnId,
17
- } from '@milaboratories/pl-model-common';
17
+ } from "@milaboratories/pl-model-common";
18
18
  import {
19
19
  Annotation,
20
20
  canonicalizeAxisId,
@@ -29,26 +29,28 @@ import {
29
29
  matchAxisId,
30
30
  resolveAnchors,
31
31
  selectorsToPredicate,
32
- } from '@milaboratories/pl-model-common';
33
- import canonicalize from 'canonicalize';
34
- import type { Optional } from 'utility-types';
35
- import type { TreeNodeAccessor } from '../accessor';
36
- import type { PColumnDataUniversal } from '../api';
37
- import { filterDataInfoEntries } from './axis_filtering';
38
- import type { LabelDerivationOps, TraceEntry } from './label';
39
- import { deriveLabels } from './label';
40
- import { convertOrParsePColumnData, getUniquePartitionKeys } from './pcolumn_data';
41
- import type { APColumnSelectorWithSplit, PColumnSelectorWithSplit } from './split_selectors';
32
+ } from "@milaboratories/pl-model-common";
33
+ import canonicalize from "canonicalize";
34
+ import type { Optional } from "utility-types";
35
+ import type { TreeNodeAccessor } from "../accessor";
36
+ import type { PColumnDataUniversal } from "../api";
37
+ import { filterDataInfoEntries } from "./axis_filtering";
38
+ import type { LabelDerivationOps, TraceEntry } from "./label";
39
+ import { deriveLabels } from "./label";
40
+ import { convertOrParsePColumnData, getUniquePartitionKeys } from "./pcolumn_data";
41
+ import type { APColumnSelectorWithSplit, PColumnSelectorWithSplit } from "./split_selectors";
42
42
 
43
43
  function isPColumnValues(value: unknown): value is PColumnValues {
44
44
  if (!Array.isArray(value)) return false;
45
45
  if (value.length === 0) return true;
46
46
  const first = value[0];
47
- return typeof first === 'object' && first !== null && 'key' in first && 'val' in first;
47
+ return typeof first === "object" && first !== null && "key" in first && "val" in first;
48
48
  }
49
49
 
50
50
  export interface ColumnProvider {
51
- selectColumns(selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[]): PColumn<PColumnDataUniversal | undefined>[];
51
+ selectColumns(
52
+ selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],
53
+ ): PColumn<PColumnDataUniversal | undefined>[];
52
54
  }
53
55
 
54
56
  export interface AxisLabelProvider {
@@ -61,11 +63,14 @@ export interface AxisLabelProvider {
61
63
  class ArrayColumnProvider implements ColumnProvider {
62
64
  constructor(private readonly columns: PColumn<PColumnDataUniversal | undefined>[]) {}
63
65
 
64
- selectColumns(selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[]):
65
- PColumn<PColumnDataUniversal | undefined>[] {
66
- const predicate = typeof selectors === 'function' ? selectors : selectorsToPredicate(selectors);
66
+ selectColumns(
67
+ selectors: ((spec: PColumnSpec) => boolean) | PColumnSelector | PColumnSelector[],
68
+ ): PColumn<PColumnDataUniversal | undefined>[] {
69
+ const predicate = typeof selectors === "function" ? selectors : selectorsToPredicate(selectors);
67
70
  // Filter based on spec, ignoring data type for now
68
- return this.columns.filter((column): column is PColumn<PColumnDataUniversal | undefined> => predicate(column.spec));
71
+ return this.columns.filter((column): column is PColumn<PColumnDataUniversal | undefined> =>
72
+ predicate(column.spec),
73
+ );
69
74
  }
70
75
  }
71
76
 
@@ -99,7 +104,7 @@ type AxisFilterInfo = {
99
104
 
100
105
  // Intermediate representation for columns requiring splitting
101
106
  type IntermediateSplitEntry = {
102
- type: 'split';
107
+ type: "split";
103
108
  originalColumn: PColumn<PColumnDataUniversal | undefined>;
104
109
  spec: PColumnSpec;
105
110
  /** With splitting axes removed */
@@ -110,7 +115,7 @@ type IntermediateSplitEntry = {
110
115
 
111
116
  // Intermediate representation for columns NOT requiring splitting
112
117
  type IntermediateDirectEntry = {
113
- type: 'direct';
118
+ type: "direct";
114
119
  originalColumn: PColumn<PColumnDataUniversal | undefined>;
115
120
  spec: PColumnSpec;
116
121
  /** The same as `spec` */
@@ -142,28 +147,42 @@ function fallbackIdDeriver(originalId: PObjectId, axisFilters?: AxisFilterByIdx[
142
147
 
143
148
  /** Checks if a selector object uses any anchor properties */
144
149
  function hasAnchors(selector: unknown): selector is AnchoredPColumnSelector {
145
- if (!selector || typeof selector !== 'object') return false;
150
+ if (!selector || typeof selector !== "object") return false;
146
151
  const potentialAnchored = selector as Record<string, any>;
147
- const domainHasAnchors = potentialAnchored['domain'] && typeof potentialAnchored['domain'] === 'object' && Object.values(potentialAnchored['domain']).some((v: unknown) => typeof v === 'object' && v !== null && 'anchor' in v);
148
- const axesHaveAnchors = potentialAnchored['axes'] && Array.isArray(potentialAnchored['axes']) && potentialAnchored['axes'].some((a: unknown) => typeof a === 'object' && a !== null && 'anchor' in a);
149
- return !!potentialAnchored['domainAnchor'] || domainHasAnchors || axesHaveAnchors;
152
+ const domainHasAnchors =
153
+ potentialAnchored["domain"] &&
154
+ typeof potentialAnchored["domain"] === "object" &&
155
+ Object.values(potentialAnchored["domain"]).some(
156
+ (v: unknown) => typeof v === "object" && v !== null && "anchor" in v,
157
+ );
158
+ const axesHaveAnchors =
159
+ potentialAnchored["axes"] &&
160
+ Array.isArray(potentialAnchored["axes"]) &&
161
+ potentialAnchored["axes"].some(
162
+ (a: unknown) => typeof a === "object" && a !== null && "anchor" in a,
163
+ );
164
+ return !!potentialAnchored["domainAnchor"] || domainHasAnchors || axesHaveAnchors;
150
165
  }
151
166
 
152
167
  /**
153
- * Derives the indices of axes marked for splitting based on the selector.
154
- * Throws an error if splitting is requested alongside `partialAxesMatch`.
155
- */
156
- function getSplitAxisIndices(selector: APColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean)): number[] {
157
- if (typeof selector !== 'object' || !('axes' in selector) || selector.axes === undefined) {
168
+ * Derives the indices of axes marked for splitting based on the selector.
169
+ * Throws an error if splitting is requested alongside `partialAxesMatch`.
170
+ */
171
+ function getSplitAxisIndices(
172
+ selector: APColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean),
173
+ ): number[] {
174
+ if (typeof selector !== "object" || !("axes" in selector) || selector.axes === undefined) {
158
175
  return []; // No axes specified or not an object selector, no splitting
159
176
  }
160
177
 
161
178
  const splitIndices = selector.axes
162
- .map((axis, index) => (typeof axis === 'object' && 'split' in axis && axis.split === true) ? index : -1)
179
+ .map((axis, index) =>
180
+ typeof axis === "object" && "split" in axis && axis.split === true ? index : -1,
181
+ )
163
182
  .filter((index) => index !== -1);
164
183
 
165
184
  if (splitIndices.length > 0 && selector.partialAxesMatch !== undefined) {
166
- throw new Error('Axis splitting is not supported when `partialAxesMatch` is defined.');
185
+ throw new Error("Axis splitting is not supported when `partialAxesMatch` is defined.");
167
186
  }
168
187
 
169
188
  splitIndices.sort((a, b) => a - b);
@@ -193,7 +212,9 @@ type UniversalPColumnOpts = UniversalPColumnOptsNoDeriver & {
193
212
 
194
213
  export class PColumnCollection {
195
214
  private readonly defaultProviderStore: PColumn<PColumnDataUniversal | undefined>[] = [];
196
- private readonly providers: ColumnProvider[] = [new ArrayColumnProvider(this.defaultProviderStore)];
215
+ private readonly providers: ColumnProvider[] = [
216
+ new ArrayColumnProvider(this.defaultProviderStore),
217
+ ];
197
218
  private readonly axisLabelProviders: AxisLabelProvider[] = [];
198
219
 
199
220
  constructor() {}
@@ -229,40 +250,62 @@ export class PColumnCollection {
229
250
 
230
251
  // Overload signatures updated to return PColumnEntry types
231
252
  public getUniversalEntries(
232
- predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],
233
- opts: UniversalPColumnOpts): PColumnEntryUniversal[] | undefined;
253
+ predicateOrSelectors:
254
+ | ((spec: PColumnSpec) => boolean)
255
+ | APColumnSelectorWithSplit
256
+ | APColumnSelectorWithSplit[],
257
+ opts: UniversalPColumnOpts,
258
+ ): PColumnEntryUniversal[] | undefined;
234
259
  public getUniversalEntries(
235
- predicateOrSelectors: ((spec: PColumnSpec) => boolean) | PColumnSelectorWithSplit | PColumnSelectorWithSplit[],
236
- opts?: UniversalPColumnOptsNoDeriver): PColumnEntryWithLabel[] | undefined;
260
+ predicateOrSelectors:
261
+ | ((spec: PColumnSpec) => boolean)
262
+ | PColumnSelectorWithSplit
263
+ | PColumnSelectorWithSplit[],
264
+ opts?: UniversalPColumnOptsNoDeriver,
265
+ ): PColumnEntryWithLabel[] | undefined;
237
266
  public getUniversalEntries(
238
- predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],
239
- opts?: Optional<UniversalPColumnOpts, 'anchorCtx'>): (PColumnEntryWithLabel | PColumnEntryUniversal)[] | undefined {
240
- const { anchorCtx, labelOps: rawLabelOps, dontWaitAllData = false, overrideLabelAnnotation = false, exclude, enrichByLinkers = false } = opts ?? {};
267
+ predicateOrSelectors:
268
+ | ((spec: PColumnSpec) => boolean)
269
+ | APColumnSelectorWithSplit
270
+ | APColumnSelectorWithSplit[],
271
+ opts?: Optional<UniversalPColumnOpts, "anchorCtx">,
272
+ ): (PColumnEntryWithLabel | PColumnEntryUniversal)[] | undefined {
273
+ const {
274
+ anchorCtx,
275
+ labelOps: rawLabelOps,
276
+ dontWaitAllData = false,
277
+ overrideLabelAnnotation = false,
278
+ exclude,
279
+ enrichByLinkers = false,
280
+ } = opts ?? {};
241
281
 
242
282
  const labelOps: LabelDerivationOps = {
243
- ...(overrideLabelAnnotation && rawLabelOps?.includeNativeLabel !== false ? { includeNativeLabel: true } : {}),
244
- ...(rawLabelOps ?? {}),
283
+ ...(overrideLabelAnnotation && rawLabelOps?.includeNativeLabel !== false
284
+ ? { includeNativeLabel: true }
285
+ : {}),
286
+ ...rawLabelOps,
245
287
  };
246
288
 
247
- let excludePredicate: ((spec: PColumnSpec) => boolean) = () => false;
289
+ let excludePredicate: (spec: PColumnSpec) => boolean = () => false;
248
290
  if (exclude) {
249
- const excludePredicartes = (Array.isArray(exclude) ? exclude : [exclude])
250
- .map((selector) => {
251
- if (hasAnchors(selector)) {
252
- if (!anchorCtx)
253
- throw new Error('Anchored selectors in exclude require an AnchoredIdDeriver to be provided in options.');
254
- return selectorsToPredicate(resolveAnchors(anchorCtx.anchors, selector, opts));
255
- } else
256
- return selectorsToPredicate(selector);
257
- });
291
+ const excludePredicartes = (Array.isArray(exclude) ? exclude : [exclude]).map((selector) => {
292
+ if (hasAnchors(selector)) {
293
+ if (!anchorCtx)
294
+ throw new Error(
295
+ "Anchored selectors in exclude require an AnchoredIdDeriver to be provided in options.",
296
+ );
297
+ return selectorsToPredicate(resolveAnchors(anchorCtx.anchors, selector, opts));
298
+ } else return selectorsToPredicate(selector);
299
+ });
258
300
  excludePredicate = (spec) => excludePredicartes.some((predicate) => predicate(spec));
259
301
  }
260
302
 
261
- const selectorsArray = typeof predicateOrSelectors === 'function'
262
- ? [predicateOrSelectors]
263
- : Array.isArray(predicateOrSelectors)
264
- ? predicateOrSelectors
265
- : [predicateOrSelectors];
303
+ const selectorsArray =
304
+ typeof predicateOrSelectors === "function"
305
+ ? [predicateOrSelectors]
306
+ : Array.isArray(predicateOrSelectors)
307
+ ? predicateOrSelectors
308
+ : [predicateOrSelectors];
266
309
 
267
310
  const intermediateResults: IntermediateColumnEntry[] = [];
268
311
  const selectedNativeIds = new Set<NativePObjectId>();
@@ -273,10 +316,18 @@ export class PColumnCollection {
273
316
  let currentSelector: PColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean);
274
317
  if (usesAnchors) {
275
318
  if (!anchorCtx)
276
- throw new Error('Anchored selectors require an AnchoredIdDeriver to be provided in options.');
277
- currentSelector = resolveAnchors(anchorCtx.anchors, rawSelector as AnchoredPColumnSelector, opts);
319
+ throw new Error(
320
+ "Anchored selectors require an AnchoredIdDeriver to be provided in options.",
321
+ );
322
+ currentSelector = resolveAnchors(
323
+ anchorCtx.anchors,
324
+ rawSelector as AnchoredPColumnSelector,
325
+ opts,
326
+ );
278
327
  } else
279
- currentSelector = rawSelector as PColumnSelectorWithSplit | ((spec: PColumnSpec) => boolean);
328
+ currentSelector = rawSelector as
329
+ | PColumnSelectorWithSplit
330
+ | ((spec: PColumnSpec) => boolean);
280
331
 
281
332
  const selectedIds = new Set<PObjectId>();
282
333
  const selectedColumns: PColumn<PColumnDataUniversal | undefined>[] = [];
@@ -285,10 +336,11 @@ export class PColumnCollection {
285
336
  for (const col of providerColumns) {
286
337
  if (excludePredicate(col.spec)) continue;
287
338
  if (selectedIds.has(col.id))
288
- throw new Error(`Duplicate column id ${col.id} in provider ${provider.constructor.name}`);
339
+ throw new Error(
340
+ `Duplicate column id ${col.id} in provider ${provider.constructor.name}`,
341
+ );
289
342
  const nativeId = deriveNativeId(col.spec);
290
- if (selectedNativeIds.has(nativeId))
291
- continue;
343
+ if (selectedNativeIds.has(nativeId)) continue;
292
344
  selectedIds.add(col.id);
293
345
  selectedNativeIds.add(nativeId);
294
346
  selectedColumns.push(col);
@@ -307,7 +359,9 @@ export class PColumnCollection {
307
359
 
308
360
  if (needsSplitting) {
309
361
  if (isPColumnValues(column.data))
310
- throw new Error(`Splitting is not supported for PColumns with PColumnValues data format. Column id: ${column.id}`);
362
+ throw new Error(
363
+ `Splitting is not supported for PColumns with PColumnValues data format. Column id: ${column.id}`,
364
+ );
311
365
  const dataEntries = convertOrParsePColumnData(column.data);
312
366
 
313
367
  if (!dataEntries) {
@@ -316,28 +370,35 @@ export class PColumnCollection {
316
370
  }
317
371
 
318
372
  if (!isPartitionedDataInfoEntries(dataEntries))
319
- throw new Error(`Splitting requires Partitioned DataInfoEntries, but parsing resulted in ${dataEntries.type} for column ${column.id}`);
373
+ throw new Error(
374
+ `Splitting requires Partitioned DataInfoEntries, but parsing resulted in ${dataEntries.type} for column ${column.id}`,
375
+ );
320
376
 
321
377
  const uniqueKeys = getUniquePartitionKeys(dataEntries);
322
378
 
323
379
  const maxSplitIdx = splitAxisIdxs[splitAxisIdxs.length - 1];
324
380
  if (maxSplitIdx >= dataEntries.partitionKeyLength)
325
- throw new Error(`Not enough partition keys (${dataEntries.partitionKeyLength}) for requested split axes (max index ${maxSplitIdx}) in column ${originalSpec.name}`);
381
+ throw new Error(
382
+ `Not enough partition keys (${dataEntries.partitionKeyLength}) for requested split axes (max index ${maxSplitIdx}) in column ${originalSpec.name}`,
383
+ );
326
384
 
327
- const axesLabels: (Record<string | number, string> | undefined)[] = splitAxisIdxs
328
- .map((idx) => this.findLabels(getAxisId(originalSpec.axesSpec[idx])));
385
+ const axesLabels: (Record<string | number, string> | undefined)[] = splitAxisIdxs.map(
386
+ (idx) => this.findLabels(getAxisId(originalSpec.axesSpec[idx])),
387
+ );
329
388
 
330
389
  const keyCombinations: (string | number)[][] = [];
331
390
  const generateCombinations = (currentCombo: (string | number)[], sAxisIdx: number) => {
332
391
  if (sAxisIdx >= splitAxisIdxs.length) {
333
392
  keyCombinations.push([...currentCombo]);
334
393
  if (keyCombinations.length > 10000)
335
- throw new Error('Too many key combinations, aborting.');
394
+ throw new Error("Too many key combinations, aborting.");
336
395
  return;
337
396
  }
338
397
  const axisIdx = splitAxisIdxs[sAxisIdx];
339
398
  if (axisIdx >= uniqueKeys.length)
340
- throw new Error(`Axis index ${axisIdx} out of bounds for unique keys array (length ${uniqueKeys.length}) during split key generation for column ${column.id}`);
399
+ throw new Error(
400
+ `Axis index ${axisIdx} out of bounds for unique keys array (length ${uniqueKeys.length}) during split key generation for column ${column.id}`,
401
+ );
341
402
  const axisValues = uniqueKeys[axisIdx];
342
403
  if (!axisValues || axisValues.length === 0) {
343
404
  keyCombinations.length = 0; // No combinations possible if one axis has no keys
@@ -352,8 +413,7 @@ export class PColumnCollection {
352
413
 
353
414
  generateCombinations([], 0);
354
415
 
355
- if (keyCombinations.length === 0)
356
- continue;
416
+ if (keyCombinations.length === 0) continue;
357
417
 
358
418
  const newAxesSpec = [...originalSpec.axesSpec];
359
419
  const splitAxisOriginalIdxs = splitAxisIdxs.map((idx) => idx); // Keep original indices for axisId lookup
@@ -373,7 +433,7 @@ export class PColumnCollection {
373
433
  });
374
434
 
375
435
  intermediateResults.push({
376
- type: 'split',
436
+ type: "split",
377
437
  originalColumn: column,
378
438
  spec: originalSpec,
379
439
  adjustedSpec,
@@ -383,7 +443,7 @@ export class PColumnCollection {
383
443
  }
384
444
  } else {
385
445
  intermediateResults.push({
386
- type: 'direct',
446
+ type: "direct",
387
447
  originalColumn: column,
388
448
  spec: originalSpec,
389
449
  adjustedSpec: originalSpec,
@@ -398,7 +458,7 @@ export class PColumnCollection {
398
458
  intermediateResults,
399
459
  (entry) => ({
400
460
  spec: entry.spec,
401
- suffixTrace: entry.type === 'split' ? splitFiltersToTrace(entry.axisFilters) : undefined,
461
+ suffixTrace: entry.type === "split" ? splitFiltersToTrace(entry.axisFilters) : undefined,
402
462
  }),
403
463
  labelOps,
404
464
  );
@@ -408,7 +468,7 @@ export class PColumnCollection {
408
468
  for (const { value: entry, label } of labeledResults) {
409
469
  const { originalColumn, spec: originalSpec } = entry;
410
470
 
411
- const axisFilters = entry.type === 'split' ? entry.axisFilters : undefined;
471
+ const axisFilters = entry.type === "split" ? entry.axisFilters : undefined;
412
472
  const axisFiltersTuple = splitFiltersToAxisFilter(axisFilters);
413
473
 
414
474
  let finalId: SUniversalPColumnId | PObjectId;
@@ -421,7 +481,7 @@ export class PColumnCollection {
421
481
  finalSpec = {
422
482
  ...finalSpec,
423
483
  annotations: {
424
- ...(finalSpec.annotations ?? {}),
484
+ ...finalSpec.annotations,
425
485
  [Annotation.Label]: label,
426
486
  } satisfies Annotation,
427
487
  };
@@ -430,9 +490,10 @@ export class PColumnCollection {
430
490
  result.push({
431
491
  id: finalId,
432
492
  spec: finalSpec,
433
- data: () => entry.type === 'split'
434
- ? entriesToDataInfo(filterDataInfoEntries(entry.dataEntries, axisFiltersTuple!))
435
- : entry.originalColumn.data,
493
+ data: () =>
494
+ entry.type === "split"
495
+ ? entriesToDataInfo(filterDataInfoEntries(entry.dataEntries, axisFiltersTuple!))
496
+ : entry.originalColumn.data,
436
497
  label: label,
437
498
  });
438
499
  }
@@ -443,7 +504,7 @@ export class PColumnCollection {
443
504
  const linkers = result.filter((entry) => isLinkerColumn(entry.spec));
444
505
  if (linkers.length === 0) {
445
506
  return result;
446
- };
507
+ }
447
508
 
448
509
  const anchorAxes = Object.values(anchorCtx.anchors).flatMap((anchor) => anchor.axesSpec);
449
510
  const linkerMap = LinkerMap.fromColumns(linkers.map(getColumnIdAndSpec));
@@ -453,14 +514,21 @@ export class PColumnCollection {
453
514
  return matchAxisId(linkerKeyId, sourceAxisId) || matchAxisId(sourceAxisId, linkerKeyId);
454
515
  }
455
516
  // search all axes that can be reached by linkers from anchor axes; anchor axes are not in this list;
456
- const availableByLinkersAxes = linkerMap.getReachableByLinkersAxesFromAxes(anchorAxes, matchAxisIdFn);
517
+ const availableByLinkersAxes = linkerMap.getReachableByLinkersAxesFromAxes(
518
+ anchorAxes,
519
+ matchAxisIdFn,
520
+ );
457
521
 
458
522
  // search all columns that includes at least one of additional axes;
459
523
  const availableByLinkersColumns = this.getUniversalEntries(
460
- (spec) => !isLinkerColumn(spec) && spec.axesSpec.some((columnAxisSpec) => {
461
- const columnAxisId = getAxisId(columnAxisSpec);
462
- return availableByLinkersAxes.some((axis) => matchAxisIdFn(getAxisId(axis), columnAxisId));
463
- }),
524
+ (spec) =>
525
+ !isLinkerColumn(spec) &&
526
+ spec.axesSpec.some((columnAxisSpec) => {
527
+ const columnAxisId = getAxisId(columnAxisSpec);
528
+ return availableByLinkersAxes.some((axis) =>
529
+ matchAxisIdFn(getAxisId(axis), columnAxisId),
530
+ );
531
+ }),
464
532
  { anchorCtx, labelOps, dontWaitAllData, overrideLabelAnnotation, exclude },
465
533
  );
466
534
  if (availableByLinkersColumns) {
@@ -472,17 +540,29 @@ export class PColumnCollection {
472
540
  }
473
541
 
474
542
  public getColumns(
475
- predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],
476
- opts: UniversalPColumnOpts): PColumn<PColumnDataUniversal>[] | undefined;
543
+ predicateOrSelectors:
544
+ | ((spec: PColumnSpec) => boolean)
545
+ | APColumnSelectorWithSplit
546
+ | APColumnSelectorWithSplit[],
547
+ opts: UniversalPColumnOpts,
548
+ ): PColumn<PColumnDataUniversal>[] | undefined;
477
549
  public getColumns(
478
- predicateOrSelectors: ((spec: PColumnSpec) => boolean) | PColumnSelectorWithSplit | PColumnSelectorWithSplit[],
479
- opts?: UniversalPColumnOptsNoDeriver): PColumn<PColumnDataUniversal>[] | undefined;
550
+ predicateOrSelectors:
551
+ | ((spec: PColumnSpec) => boolean)
552
+ | PColumnSelectorWithSplit
553
+ | PColumnSelectorWithSplit[],
554
+ opts?: UniversalPColumnOptsNoDeriver,
555
+ ): PColumn<PColumnDataUniversal>[] | undefined;
480
556
  public getColumns(
481
- predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelectorWithSplit | APColumnSelectorWithSplit[],
482
- opts?: Optional<UniversalPColumnOpts, 'anchorCtx'>): PColumn<PColumnDataUniversal>[] | undefined {
557
+ predicateOrSelectors:
558
+ | ((spec: PColumnSpec) => boolean)
559
+ | APColumnSelectorWithSplit
560
+ | APColumnSelectorWithSplit[],
561
+ opts?: Optional<UniversalPColumnOpts, "anchorCtx">,
562
+ ): PColumn<PColumnDataUniversal>[] | undefined {
483
563
  const entries = this.getUniversalEntries(predicateOrSelectors, {
484
564
  overrideLabelAnnotation: true, // default for getColumns
485
- ...(opts ?? {}),
565
+ ...opts,
486
566
  } as UniversalPColumnOpts);
487
567
  if (!entries) return undefined;
488
568
 
@@ -1,4 +1,4 @@
1
- export * from './pcolumn_data';
2
- export * from './label';
3
- export * from './axis_filtering';
4
- export * from './column_collection';
1
+ export * from "./pcolumn_data";
2
+ export * from "./label";
3
+ export * from "./axis_filtering";
4
+ export * from "./column_collection";