@platforma-sdk/model 1.58.5 → 1.58.11
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.
- package/dist/_virtual/_rolldown/runtime.cjs +43 -0
- package/dist/_virtual/_rolldown/runtime.js +18 -0
- package/dist/annotations/converter.cjs +15 -20
- package/dist/annotations/converter.cjs.map +1 -1
- package/dist/annotations/converter.d.ts +6 -2
- package/dist/annotations/converter.js +14 -18
- package/dist/annotations/converter.js.map +1 -1
- package/dist/annotations/index.cjs +1 -0
- package/dist/annotations/index.d.ts +2 -3
- package/dist/annotations/index.js +1 -0
- package/dist/annotations/types.d.ts +21 -16
- package/dist/bconfig/index.cjs +2 -0
- package/dist/bconfig/index.d.ts +5 -6
- package/dist/bconfig/index.js +2 -0
- package/dist/bconfig/lambdas.d.ts +52 -52
- package/dist/bconfig/normalization.cjs +13 -18
- package/dist/bconfig/normalization.cjs.map +1 -1
- package/dist/bconfig/normalization.d.ts +10 -6
- package/dist/bconfig/normalization.js +12 -16
- package/dist/bconfig/normalization.js.map +1 -1
- package/dist/bconfig/types.cjs +4 -3
- package/dist/bconfig/types.cjs.map +1 -1
- package/dist/bconfig/types.d.ts +10 -5
- package/dist/bconfig/types.js +4 -2
- package/dist/bconfig/types.js.map +1 -1
- package/dist/bconfig/util.d.ts +7 -4
- package/dist/bconfig/v3.d.ts +10 -6
- package/dist/block_api_v1.d.ts +62 -58
- package/dist/block_api_v2.d.ts +51 -47
- package/dist/block_api_v3.d.ts +33 -29
- package/dist/block_migrations.cjs +481 -413
- package/dist/block_migrations.cjs.map +1 -1
- package/dist/block_migrations.d.ts +258 -204
- package/dist/block_migrations.js +482 -408
- package/dist/block_migrations.js.map +1 -1
- package/dist/block_model.cjs +312 -343
- package/dist/block_model.cjs.map +1 -1
- package/dist/block_model.d.ts +143 -147
- package/dist/block_model.js +312 -341
- package/dist/block_model.js.map +1 -1
- package/dist/block_model_legacy.cjs +231 -255
- package/dist/block_model_legacy.cjs.map +1 -1
- package/dist/block_model_legacy.d.ts +108 -106
- package/dist/block_model_legacy.js +231 -253
- package/dist/block_model_legacy.js.map +1 -1
- package/dist/block_state_patch.d.ts +10 -10
- package/dist/block_state_util.cjs +15 -19
- package/dist/block_state_util.cjs.map +1 -1
- package/dist/block_state_util.d.ts +14 -13
- package/dist/block_state_util.js +15 -18
- package/dist/block_state_util.js.map +1 -1
- package/dist/block_storage.cjs +233 -238
- package/dist/block_storage.cjs.map +1 -1
- package/dist/block_storage.d.ts +62 -78
- package/dist/block_storage.js +234 -237
- package/dist/block_storage.js.map +1 -1
- package/dist/block_storage_callbacks.cjs +156 -195
- package/dist/block_storage_callbacks.cjs.map +1 -1
- package/dist/block_storage_callbacks.js +156 -192
- package/dist/block_storage_callbacks.js.map +1 -1
- package/dist/block_storage_facade.cjs +29 -85
- package/dist/block_storage_facade.cjs.map +1 -1
- package/dist/block_storage_facade.d.ts +83 -126
- package/dist/block_storage_facade.js +29 -83
- package/dist/block_storage_facade.js.map +1 -1
- package/dist/components/PFrameForGraphs.cjs +26 -24
- package/dist/components/PFrameForGraphs.cjs.map +1 -1
- package/dist/components/PFrameForGraphs.d.ts +12 -7
- package/dist/components/PFrameForGraphs.js +25 -22
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlAnnotations/filter.d.ts +62 -79
- package/dist/components/PlAnnotations/filters_ui.cjs +135 -171
- package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.d.ts +48 -46
- package/dist/components/PlAnnotations/filters_ui.js +135 -170
- package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
- package/dist/components/PlAnnotations/index.d.ts +2 -3
- package/dist/components/PlDataTable/index.cjs +2 -0
- package/dist/components/PlDataTable/index.d.ts +3 -5
- package/dist/components/PlDataTable/index.js +2 -0
- package/dist/components/PlDataTable/labels.cjs +59 -81
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js +58 -79
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +186 -144
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts +85 -82
- package/dist/components/PlDataTable/state-migration.js +185 -142
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/table.cjs +172 -194
- package/dist/components/PlDataTable/table.cjs.map +1 -1
- package/dist/components/PlDataTable/table.d.ts +16 -12
- package/dist/components/PlDataTable/table.js +171 -192
- package/dist/components/PlDataTable/table.js.map +1 -1
- package/dist/components/PlDataTable/v4.d.ts +84 -119
- package/dist/components/PlDataTable/v5.d.ts +80 -103
- package/dist/components/PlMultiSequenceAlignment.cjs +27 -29
- package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
- package/dist/components/PlMultiSequenceAlignment.d.ts +36 -27
- package/dist/components/PlMultiSequenceAlignment.js +26 -27
- package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
- package/dist/components/PlSelectionModel.cjs +7 -6
- package/dist/components/PlSelectionModel.cjs.map +1 -1
- package/dist/components/PlSelectionModel.d.ts +10 -8
- package/dist/components/PlSelectionModel.js +7 -5
- package/dist/components/PlSelectionModel.js.map +1 -1
- package/dist/components/index.cjs +8 -0
- package/dist/components/index.d.ts +11 -6
- package/dist/components/index.js +8 -0
- package/dist/config/actions.cjs +138 -171
- package/dist/config/actions.cjs.map +1 -1
- package/dist/config/actions.d.ts +47 -47
- package/dist/config/actions.js +146 -178
- package/dist/config/actions.js.map +1 -1
- package/dist/config/actions_kinds.d.ts +114 -121
- package/dist/config/index.cjs +1 -0
- package/dist/config/index.d.ts +6 -7
- package/dist/config/index.js +1 -0
- package/dist/config/model.d.ts +131 -127
- package/dist/config/model_meta.d.ts +4 -1
- package/dist/config/type_engine.d.ts +22 -21
- package/dist/config/type_util.d.ts +12 -10
- package/dist/env_value.cjs +5 -6
- package/dist/env_value.cjs.map +1 -1
- package/dist/env_value.d.ts +4 -1
- package/dist/env_value.js +5 -5
- package/dist/env_value.js.map +1 -1
- package/dist/filters/converters/filterToQuery.cjs +273 -239
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts +6 -2
- package/dist/filters/converters/filterToQuery.js +272 -237
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.cjs +56 -85
- package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.d.ts +8 -4
- package/dist/filters/converters/filterUiToExpressionImpl.js +55 -83
- package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
- package/dist/filters/converters/index.cjs +2 -0
- package/dist/filters/converters/index.d.ts +2 -3
- package/dist/filters/converters/index.js +2 -0
- package/dist/filters/distill.cjs +59 -60
- package/dist/filters/distill.cjs.map +1 -1
- package/dist/filters/distill.d.ts +6 -3
- package/dist/filters/distill.js +58 -58
- package/dist/filters/distill.js.map +1 -1
- package/dist/filters/index.cjs +4 -0
- package/dist/filters/index.d.ts +5 -4
- package/dist/filters/index.js +4 -0
- package/dist/filters/traverse.cjs +31 -40
- package/dist/filters/traverse.cjs.map +1 -1
- package/dist/filters/traverse.js +31 -39
- package/dist/filters/traverse.js.map +1 -1
- package/dist/filters/types.d.ts +10 -7
- package/dist/index.cjs +193 -187
- package/dist/index.d.ts +61 -28
- package/dist/index.js +49 -41
- package/dist/internal.cjs +48 -62
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.js +49 -60
- package/dist/internal.js.map +1 -1
- package/dist/package.cjs +12 -0
- package/dist/package.cjs.map +1 -0
- package/dist/package.js +6 -0
- package/dist/package.js.map +1 -0
- package/dist/pframe.cjs +32 -37
- package/dist/pframe.cjs.map +1 -1
- package/dist/pframe.d.ts +14 -10
- package/dist/pframe.js +32 -35
- package/dist/pframe.js.map +1 -1
- package/dist/pframe_utils/axes.cjs +81 -114
- package/dist/pframe_utils/axes.cjs.map +1 -1
- package/dist/pframe_utils/axes.d.ts +10 -13
- package/dist/pframe_utils/axes.js +80 -112
- package/dist/pframe_utils/axes.js.map +1 -1
- package/dist/pframe_utils/columns.cjs +61 -81
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts +15 -6
- package/dist/pframe_utils/columns.js +60 -79
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs +232 -253
- package/dist/pframe_utils/index.cjs.map +1 -1
- package/dist/pframe_utils/index.d.ts +39 -35
- package/dist/pframe_utils/index.js +231 -251
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/platforma.d.ts +48 -46
- package/dist/plugin_handle.cjs +6 -14
- package/dist/plugin_handle.cjs.map +1 -1
- package/dist/plugin_handle.d.ts +20 -25
- package/dist/plugin_handle.js +6 -13
- package/dist/plugin_handle.js.map +1 -1
- package/dist/plugin_model.cjs +364 -163
- package/dist/plugin_model.cjs.map +1 -1
- package/dist/plugin_model.d.ts +280 -129
- package/dist/plugin_model.js +362 -163
- package/dist/plugin_model.js.map +1 -1
- package/dist/raw_globals.cjs +10 -22
- package/dist/raw_globals.cjs.map +1 -1
- package/dist/raw_globals.d.ts +8 -5
- package/dist/raw_globals.js +10 -20
- package/dist/raw_globals.js.map +1 -1
- package/dist/ref_util.cjs +14 -13
- package/dist/ref_util.cjs.map +1 -1
- package/dist/ref_util.d.ts +18 -12
- package/dist/ref_util.js +14 -11
- package/dist/ref_util.js.map +1 -1
- package/dist/render/accessor.cjs +213 -226
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts +115 -120
- package/dist/render/accessor.js +212 -224
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +478 -580
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts +207 -209
- package/dist/render/api.js +476 -578
- package/dist/render/api.js.map +1 -1
- package/dist/render/future.cjs +28 -32
- package/dist/render/future.cjs.map +1 -1
- package/dist/render/future.d.ts +15 -11
- package/dist/render/future.js +28 -30
- package/dist/render/future.js.map +1 -1
- package/dist/render/index.cjs +8 -0
- package/dist/render/index.d.ts +10 -8
- package/dist/render/index.js +8 -0
- package/dist/render/internal.cjs +33 -29
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts +78 -72
- package/dist/render/internal.js +29 -26
- package/dist/render/internal.js.map +1 -1
- package/dist/render/traversal_ops.d.ts +42 -43
- package/dist/render/util/axis_filtering.cjs +63 -86
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.d.ts +10 -7
- package/dist/render/util/axis_filtering.js +63 -85
- package/dist/render/util/axis_filtering.js.map +1 -1
- package/dist/render/util/column_collection.cjs +266 -321
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts +47 -47
- package/dist/render/util/column_collection.js +264 -319
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.cjs +4 -0
- package/dist/render/util/index.d.ts +4 -5
- package/dist/render/util/index.js +4 -0
- package/dist/render/util/label.cjs +129 -163
- package/dist/render/util/label.cjs.map +1 -1
- package/dist/render/util/label.d.ts +45 -46
- package/dist/render/util/label.js +128 -161
- package/dist/render/util/label.js.map +1 -1
- package/dist/render/util/pcolumn_data.cjs +315 -375
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts +33 -32
- package/dist/render/util/pcolumn_data.js +314 -373
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/render/util/pframe_upgraders.cjs +37 -42
- package/dist/render/util/pframe_upgraders.cjs.map +1 -1
- package/dist/render/util/pframe_upgraders.js +37 -41
- package/dist/render/util/pframe_upgraders.js.map +1 -1
- package/dist/render/util/split_selectors.d.ts +13 -9
- package/dist/version.cjs +6 -8
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts +7 -4
- package/dist/version.js +5 -5
- package/dist/version.js.map +1 -1
- package/package.json +15 -9
- package/src/block_migrations.test.ts +184 -14
- package/src/block_migrations.ts +185 -30
- package/src/block_model.ts +111 -66
- package/src/block_storage.test.ts +147 -3
- package/src/block_storage.ts +43 -8
- package/src/block_storage_callbacks.ts +9 -4
- package/src/env_value.ts +0 -2
- package/src/index.ts +12 -11
- package/src/internal.ts +0 -1
- package/src/platforma.ts +4 -4
- package/src/plugin_handle.ts +1 -1
- package/src/plugin_model.test.ts +217 -21
- package/src/plugin_model.ts +450 -55
- package/src/raw_globals.ts +0 -1
- package/dist/annotations/converter.d.ts.map +0 -1
- package/dist/annotations/index.d.ts.map +0 -1
- package/dist/annotations/types.d.ts.map +0 -1
- package/dist/bconfig/index.d.ts.map +0 -1
- package/dist/bconfig/lambdas.d.ts.map +0 -1
- package/dist/bconfig/normalization.d.ts.map +0 -1
- package/dist/bconfig/types.d.ts.map +0 -1
- package/dist/bconfig/util.d.ts.map +0 -1
- package/dist/bconfig/v3.d.ts.map +0 -1
- package/dist/block_api_v1.d.ts.map +0 -1
- package/dist/block_api_v2.d.ts.map +0 -1
- package/dist/block_api_v3.d.ts.map +0 -1
- package/dist/block_migrations.d.ts.map +0 -1
- package/dist/block_model.d.ts.map +0 -1
- package/dist/block_model_legacy.d.ts.map +0 -1
- package/dist/block_state_patch.d.ts.map +0 -1
- package/dist/block_state_util.d.ts.map +0 -1
- package/dist/block_storage.d.ts.map +0 -1
- package/dist/block_storage_callbacks.d.ts +0 -115
- package/dist/block_storage_callbacks.d.ts.map +0 -1
- package/dist/block_storage_facade.d.ts.map +0 -1
- package/dist/components/PFrameForGraphs.d.ts.map +0 -1
- package/dist/components/PlAnnotations/filter.d.ts.map +0 -1
- package/dist/components/PlAnnotations/filters_ui.d.ts.map +0 -1
- package/dist/components/PlAnnotations/index.d.ts.map +0 -1
- package/dist/components/PlAnnotations/types.d.ts +0 -3
- package/dist/components/PlAnnotations/types.d.ts.map +0 -1
- package/dist/components/PlDataTable/index.d.ts.map +0 -1
- package/dist/components/PlDataTable/labels.d.ts +0 -7
- package/dist/components/PlDataTable/labels.d.ts.map +0 -1
- package/dist/components/PlDataTable/state-migration.d.ts.map +0 -1
- package/dist/components/PlDataTable/table.d.ts.map +0 -1
- package/dist/components/PlDataTable/v4.d.ts.map +0 -1
- package/dist/components/PlDataTable/v5.d.ts.map +0 -1
- package/dist/components/PlMultiSequenceAlignment.d.ts.map +0 -1
- package/dist/components/PlSelectionModel.d.ts.map +0 -1
- package/dist/components/index.d.ts.map +0 -1
- package/dist/config/actions.d.ts.map +0 -1
- package/dist/config/actions_kinds.d.ts.map +0 -1
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/model.d.ts.map +0 -1
- package/dist/config/model_meta.d.ts.map +0 -1
- package/dist/config/type_engine.d.ts.map +0 -1
- package/dist/config/type_util.d.ts.map +0 -1
- package/dist/env_value.d.ts.map +0 -1
- package/dist/filters/converters/filterToQuery.d.ts.map +0 -1
- package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +0 -1
- package/dist/filters/converters/index.d.ts.map +0 -1
- package/dist/filters/distill.d.ts.map +0 -1
- package/dist/filters/index.d.ts.map +0 -1
- package/dist/filters/traverse.d.ts +0 -27
- package/dist/filters/traverse.d.ts.map +0 -1
- package/dist/filters/types.d.ts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/internal.d.ts +0 -36
- package/dist/internal.d.ts.map +0 -1
- package/dist/package.json.cjs +0 -6
- package/dist/package.json.cjs.map +0 -1
- package/dist/package.json.js +0 -4
- package/dist/package.json.js.map +0 -1
- package/dist/pframe.d.ts.map +0 -1
- package/dist/pframe_utils/axes.d.ts.map +0 -1
- package/dist/pframe_utils/columns.d.ts.map +0 -1
- package/dist/pframe_utils/index.d.ts.map +0 -1
- package/dist/pframe_utils/querySpec.d.ts +0 -2
- package/dist/pframe_utils/querySpec.d.ts.map +0 -1
- package/dist/platforma.d.ts.map +0 -1
- package/dist/plugin_handle.d.ts.map +0 -1
- package/dist/plugin_model.d.ts.map +0 -1
- package/dist/raw_globals.d.ts.map +0 -1
- package/dist/ref_util.d.ts.map +0 -1
- package/dist/render/accessor.d.ts.map +0 -1
- package/dist/render/api.d.ts.map +0 -1
- package/dist/render/future.d.ts.map +0 -1
- package/dist/render/index.d.ts.map +0 -1
- package/dist/render/internal.d.ts.map +0 -1
- package/dist/render/traversal_ops.d.ts.map +0 -1
- package/dist/render/util/axis_filtering.d.ts.map +0 -1
- package/dist/render/util/column_collection.d.ts.map +0 -1
- package/dist/render/util/index.d.ts.map +0 -1
- package/dist/render/util/label.d.ts.map +0 -1
- package/dist/render/util/pcolumn_data.d.ts.map +0 -1
- package/dist/render/util/pframe_upgraders.d.ts +0 -3
- package/dist/render/util/pframe_upgraders.d.ts.map +0 -1
- package/dist/render/util/split_selectors.d.ts.map +0 -1
- package/dist/version.d.ts.map +0 -1
|
@@ -1,339 +1,284 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
+
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
6
|
+
let canonicalize = require("canonicalize");
|
|
7
|
+
canonicalize = require_runtime.__toESM(canonicalize);
|
|
8
8
|
|
|
9
|
+
//#region src/render/util/column_collection.ts
|
|
9
10
|
function isPColumnValues(value) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const first = value[0];
|
|
15
|
-
return typeof first === "object" && first !== null && "key" in first && "val" in first;
|
|
11
|
+
if (!Array.isArray(value)) return false;
|
|
12
|
+
if (value.length === 0) return true;
|
|
13
|
+
const first = value[0];
|
|
14
|
+
return typeof first === "object" && first !== null && "key" in first && "val" in first;
|
|
16
15
|
}
|
|
17
16
|
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
}
|
|
17
|
+
* A simple implementation of {@link ColumnProvider} backed by a pre-defined array of columns.
|
|
18
|
+
*/
|
|
19
|
+
var ArrayColumnProvider = class {
|
|
20
|
+
constructor(columns) {
|
|
21
|
+
this.columns = columns;
|
|
22
|
+
}
|
|
23
|
+
selectColumns(selectors) {
|
|
24
|
+
const predicate = typeof selectors === "function" ? selectors : (0, _milaboratories_pl_model_common.selectorsToPredicate)(selectors);
|
|
25
|
+
return this.columns.filter((column) => predicate(column.spec));
|
|
26
|
+
}
|
|
27
|
+
};
|
|
31
28
|
function splitFiltersToTrace(splitFilters) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}));
|
|
29
|
+
if (!splitFilters) return void 0;
|
|
30
|
+
return splitFilters.map((filter) => ({
|
|
31
|
+
type: `split:${(0, _milaboratories_pl_model_common.canonicalizeAxisId)(filter.axisId)}`,
|
|
32
|
+
label: filter.label,
|
|
33
|
+
importance: 1e6
|
|
34
|
+
}));
|
|
39
35
|
}
|
|
40
36
|
function splitFiltersToAxisFilter(splitFilters) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return splitFilters.map((filter) => [filter.axisIdx, filter.value]);
|
|
37
|
+
if (!splitFilters) return void 0;
|
|
38
|
+
return splitFilters.map((filter) => [filter.axisIdx, filter.value]);
|
|
44
39
|
}
|
|
45
40
|
function fallbackIdDeriver(originalId, axisFilters) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
41
|
+
if (!axisFilters || axisFilters.length === 0) return originalId;
|
|
42
|
+
return (0, canonicalize.default)({
|
|
43
|
+
id: originalId,
|
|
44
|
+
axisFilters: [...axisFilters].sort((a, b) => a[0] - b[0])
|
|
45
|
+
});
|
|
50
46
|
}
|
|
51
47
|
/** Checks if a selector object uses any anchor properties */
|
|
52
48
|
function hasAnchors(selector) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
Object.values(potentialAnchored["domain"]).some((v) => typeof v === "object" && v !== null && "anchor" in v);
|
|
59
|
-
const axesHaveAnchors = potentialAnchored["axes"] &&
|
|
60
|
-
Array.isArray(potentialAnchored["axes"]) &&
|
|
61
|
-
potentialAnchored["axes"].some((a) => typeof a === "object" && a !== null && "anchor" in a);
|
|
62
|
-
return !!potentialAnchored["domainAnchor"] || domainHasAnchors || axesHaveAnchors;
|
|
49
|
+
if (!selector || typeof selector !== "object") return false;
|
|
50
|
+
const potentialAnchored = selector;
|
|
51
|
+
const domainHasAnchors = potentialAnchored["domain"] && typeof potentialAnchored["domain"] === "object" && Object.values(potentialAnchored["domain"]).some((v) => typeof v === "object" && v !== null && "anchor" in v);
|
|
52
|
+
const axesHaveAnchors = potentialAnchored["axes"] && Array.isArray(potentialAnchored["axes"]) && potentialAnchored["axes"].some((a) => typeof a === "object" && a !== null && "anchor" in a);
|
|
53
|
+
return !!potentialAnchored["domainAnchor"] || domainHasAnchors || axesHaveAnchors;
|
|
63
54
|
}
|
|
64
55
|
/**
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
56
|
+
* Derives the indices of axes marked for splitting based on the selector.
|
|
57
|
+
* Throws an error if splitting is requested alongside `partialAxesMatch`.
|
|
58
|
+
*/
|
|
68
59
|
function getSplitAxisIndices(selector) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
.filter((index) => index !== -1);
|
|
75
|
-
if (splitIndices.length > 0 && selector.partialAxesMatch !== undefined) {
|
|
76
|
-
throw new Error("Axis splitting is not supported when `partialAxesMatch` is defined.");
|
|
77
|
-
}
|
|
78
|
-
splitIndices.sort((a, b) => a - b);
|
|
79
|
-
return splitIndices;
|
|
80
|
-
}
|
|
81
|
-
class PColumnCollection {
|
|
82
|
-
defaultProviderStore = [];
|
|
83
|
-
providers = [
|
|
84
|
-
new ArrayColumnProvider(this.defaultProviderStore),
|
|
85
|
-
];
|
|
86
|
-
axisLabelProviders = [];
|
|
87
|
-
constructor() { }
|
|
88
|
-
addColumnProvider(provider) {
|
|
89
|
-
this.providers.push(provider);
|
|
90
|
-
return this;
|
|
91
|
-
}
|
|
92
|
-
addAxisLabelProvider(provider) {
|
|
93
|
-
this.axisLabelProviders.push(provider);
|
|
94
|
-
return this;
|
|
95
|
-
}
|
|
96
|
-
addColumns(columns) {
|
|
97
|
-
this.defaultProviderStore.push(...columns);
|
|
98
|
-
return this;
|
|
99
|
-
}
|
|
100
|
-
addColumn(column) {
|
|
101
|
-
this.defaultProviderStore.push(column);
|
|
102
|
-
return this;
|
|
103
|
-
}
|
|
104
|
-
/** Fetches labels for a given axis from the registered providers */
|
|
105
|
-
findLabels(axis) {
|
|
106
|
-
for (const provider of this.axisLabelProviders) {
|
|
107
|
-
const labels = provider.findLabels(axis);
|
|
108
|
-
if (labels)
|
|
109
|
-
return labels; // First provider wins
|
|
110
|
-
}
|
|
111
|
-
return undefined;
|
|
112
|
-
}
|
|
113
|
-
getUniversalEntries(predicateOrSelectors, opts) {
|
|
114
|
-
const { anchorCtx, labelOps: rawLabelOps, dontWaitAllData = false, overrideLabelAnnotation = false, exclude, enrichByLinkers = false, } = opts ?? {};
|
|
115
|
-
const labelOps = {
|
|
116
|
-
...(overrideLabelAnnotation && rawLabelOps?.includeNativeLabel !== false
|
|
117
|
-
? { includeNativeLabel: true }
|
|
118
|
-
: {}),
|
|
119
|
-
...rawLabelOps,
|
|
120
|
-
};
|
|
121
|
-
let excludePredicate = () => false;
|
|
122
|
-
if (exclude) {
|
|
123
|
-
const excludePredicartes = (Array.isArray(exclude) ? exclude : [exclude]).map((selector) => {
|
|
124
|
-
if (hasAnchors(selector)) {
|
|
125
|
-
if (!anchorCtx)
|
|
126
|
-
throw new Error("Anchored selectors in exclude require an AnchoredIdDeriver to be provided in options.");
|
|
127
|
-
return plModelCommon.selectorsToPredicate(plModelCommon.resolveAnchors(anchorCtx.anchors, selector, opts));
|
|
128
|
-
}
|
|
129
|
-
else
|
|
130
|
-
return plModelCommon.selectorsToPredicate(selector);
|
|
131
|
-
});
|
|
132
|
-
excludePredicate = (spec) => excludePredicartes.some((predicate) => predicate(spec));
|
|
133
|
-
}
|
|
134
|
-
const selectorsArray = typeof predicateOrSelectors === "function"
|
|
135
|
-
? [predicateOrSelectors]
|
|
136
|
-
: Array.isArray(predicateOrSelectors)
|
|
137
|
-
? predicateOrSelectors
|
|
138
|
-
: [predicateOrSelectors];
|
|
139
|
-
const intermediateResults = [];
|
|
140
|
-
const selectedNativeIds = new Set();
|
|
141
|
-
for (const rawSelector of selectorsArray) {
|
|
142
|
-
const usesAnchors = hasAnchors(rawSelector);
|
|
143
|
-
let currentSelector;
|
|
144
|
-
if (usesAnchors) {
|
|
145
|
-
if (!anchorCtx)
|
|
146
|
-
throw new Error("Anchored selectors require an AnchoredIdDeriver to be provided in options.");
|
|
147
|
-
currentSelector = plModelCommon.resolveAnchors(anchorCtx.anchors, rawSelector, opts);
|
|
148
|
-
}
|
|
149
|
-
else
|
|
150
|
-
currentSelector = rawSelector;
|
|
151
|
-
const selectedIds = new Set();
|
|
152
|
-
const selectedColumns = [];
|
|
153
|
-
for (const provider of this.providers) {
|
|
154
|
-
const providerColumns = provider.selectColumns(currentSelector);
|
|
155
|
-
for (const col of providerColumns) {
|
|
156
|
-
if (excludePredicate(col.spec))
|
|
157
|
-
continue;
|
|
158
|
-
if (selectedIds.has(col.id))
|
|
159
|
-
throw new Error(`Duplicate column id ${col.id} in provider ${provider.constructor.name}`);
|
|
160
|
-
const nativeId = plModelCommon.deriveNativeId(col.spec);
|
|
161
|
-
if (selectedNativeIds.has(nativeId))
|
|
162
|
-
continue;
|
|
163
|
-
selectedIds.add(col.id);
|
|
164
|
-
selectedNativeIds.add(nativeId);
|
|
165
|
-
selectedColumns.push(col);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
if (selectedColumns.length === 0)
|
|
169
|
-
continue;
|
|
170
|
-
const splitAxisIdxs = getSplitAxisIndices(rawSelector);
|
|
171
|
-
const needsSplitting = splitAxisIdxs.length > 0;
|
|
172
|
-
for (const column of selectedColumns) {
|
|
173
|
-
if (!plModelCommon.isPColumnSpec(column.spec))
|
|
174
|
-
continue;
|
|
175
|
-
const originalSpec = column.spec;
|
|
176
|
-
if (needsSplitting) {
|
|
177
|
-
if (isPColumnValues(column.data))
|
|
178
|
-
throw new Error(`Splitting is not supported for PColumns with PColumnValues data format. Column id: ${column.id}`);
|
|
179
|
-
const dataEntries = pcolumn_data.convertOrParsePColumnData(column.data);
|
|
180
|
-
if (!dataEntries) {
|
|
181
|
-
if (dontWaitAllData)
|
|
182
|
-
continue;
|
|
183
|
-
return undefined;
|
|
184
|
-
}
|
|
185
|
-
if (!plModelCommon.isPartitionedDataInfoEntries(dataEntries))
|
|
186
|
-
throw new Error(`Splitting requires Partitioned DataInfoEntries, but parsing resulted in ${dataEntries.type} for column ${column.id}`);
|
|
187
|
-
const uniqueKeys = pcolumn_data.getUniquePartitionKeys(dataEntries);
|
|
188
|
-
const maxSplitIdx = splitAxisIdxs[splitAxisIdxs.length - 1];
|
|
189
|
-
if (maxSplitIdx >= dataEntries.partitionKeyLength)
|
|
190
|
-
throw new Error(`Not enough partition keys (${dataEntries.partitionKeyLength}) for requested split axes (max index ${maxSplitIdx}) in column ${originalSpec.name}`);
|
|
191
|
-
const axesLabels = splitAxisIdxs.map((idx) => this.findLabels(plModelCommon.getAxisId(originalSpec.axesSpec[idx])));
|
|
192
|
-
const keyCombinations = [];
|
|
193
|
-
const generateCombinations = (currentCombo, sAxisIdx) => {
|
|
194
|
-
if (sAxisIdx >= splitAxisIdxs.length) {
|
|
195
|
-
keyCombinations.push([...currentCombo]);
|
|
196
|
-
if (keyCombinations.length > 10000)
|
|
197
|
-
throw new Error("Too many key combinations, aborting.");
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
const axisIdx = splitAxisIdxs[sAxisIdx];
|
|
201
|
-
if (axisIdx >= uniqueKeys.length)
|
|
202
|
-
throw new Error(`Axis index ${axisIdx} out of bounds for unique keys array (length ${uniqueKeys.length}) during split key generation for column ${column.id}`);
|
|
203
|
-
const axisValues = uniqueKeys[axisIdx];
|
|
204
|
-
if (!axisValues || axisValues.length === 0) {
|
|
205
|
-
keyCombinations.length = 0; // No combinations possible if one axis has no keys
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
for (const val of axisValues) {
|
|
209
|
-
currentCombo.push(val);
|
|
210
|
-
generateCombinations(currentCombo, sAxisIdx + 1);
|
|
211
|
-
currentCombo.pop();
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
generateCombinations([], 0);
|
|
215
|
-
if (keyCombinations.length === 0)
|
|
216
|
-
continue;
|
|
217
|
-
const newAxesSpec = [...originalSpec.axesSpec];
|
|
218
|
-
const splitAxisOriginalIdxs = splitAxisIdxs.map((idx) => idx); // Keep original indices for axisId lookup
|
|
219
|
-
// Remove axes in reverse order to maintain correct indices during removal
|
|
220
|
-
for (let i = splitAxisIdxs.length - 1; i >= 0; i--) {
|
|
221
|
-
newAxesSpec.splice(splitAxisIdxs[i], 1);
|
|
222
|
-
}
|
|
223
|
-
const adjustedSpec = { ...originalSpec, axesSpec: newAxesSpec };
|
|
224
|
-
for (const keyCombo of keyCombinations) {
|
|
225
|
-
const splitFilters = keyCombo.map((value, sAxisIdx) => {
|
|
226
|
-
const axisIdx = splitAxisOriginalIdxs[sAxisIdx]; // Use original index for lookup
|
|
227
|
-
const axisId = plModelCommon.getAxisId(originalSpec.axesSpec[axisIdx]);
|
|
228
|
-
const axisLabelMap = axesLabels[sAxisIdx];
|
|
229
|
-
const label = axisLabelMap?.[value] ?? String(value);
|
|
230
|
-
return { axisIdx, axisId, value: value, label };
|
|
231
|
-
});
|
|
232
|
-
intermediateResults.push({
|
|
233
|
-
type: "split",
|
|
234
|
-
originalColumn: column,
|
|
235
|
-
spec: originalSpec,
|
|
236
|
-
adjustedSpec,
|
|
237
|
-
dataEntries,
|
|
238
|
-
axisFilters: splitFilters,
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
intermediateResults.push({
|
|
244
|
-
type: "direct",
|
|
245
|
-
originalColumn: column,
|
|
246
|
-
spec: originalSpec,
|
|
247
|
-
adjustedSpec: originalSpec,
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
if (intermediateResults.length === 0)
|
|
253
|
-
return [];
|
|
254
|
-
const labeledResults = label.deriveLabels(intermediateResults, (entry) => ({
|
|
255
|
-
spec: entry.spec,
|
|
256
|
-
suffixTrace: entry.type === "split" ? splitFiltersToTrace(entry.axisFilters) : undefined,
|
|
257
|
-
}), labelOps);
|
|
258
|
-
const result = [];
|
|
259
|
-
for (const { value: entry, label } of labeledResults) {
|
|
260
|
-
const { originalColumn, spec: originalSpec } = entry;
|
|
261
|
-
const axisFilters = entry.type === "split" ? entry.axisFilters : undefined;
|
|
262
|
-
const axisFiltersTuple = splitFiltersToAxisFilter(axisFilters);
|
|
263
|
-
let finalId;
|
|
264
|
-
if (anchorCtx)
|
|
265
|
-
finalId = anchorCtx.deriveS(originalSpec, axisFiltersTuple);
|
|
266
|
-
else
|
|
267
|
-
finalId = fallbackIdDeriver(originalColumn.id, axisFiltersTuple);
|
|
268
|
-
let finalSpec = { ...entry.adjustedSpec };
|
|
269
|
-
if (overrideLabelAnnotation) {
|
|
270
|
-
finalSpec = {
|
|
271
|
-
...finalSpec,
|
|
272
|
-
annotations: {
|
|
273
|
-
...finalSpec.annotations,
|
|
274
|
-
[plModelCommon.Annotation.Label]: label,
|
|
275
|
-
},
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
result.push({
|
|
279
|
-
id: finalId,
|
|
280
|
-
spec: finalSpec,
|
|
281
|
-
data: () => entry.type === "split"
|
|
282
|
-
? plModelCommon.entriesToDataInfo(axis_filtering.filterDataInfoEntries(entry.dataEntries, axisFiltersTuple))
|
|
283
|
-
: entry.originalColumn.data,
|
|
284
|
-
label: label,
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
const ids = new Set(result.map((entry) => entry.id));
|
|
288
|
-
if (enrichByLinkers && anchorCtx) {
|
|
289
|
-
const linkers = result.filter((entry) => plModelCommon.isLinkerColumn(entry.spec));
|
|
290
|
-
if (linkers.length === 0) {
|
|
291
|
-
return result;
|
|
292
|
-
}
|
|
293
|
-
const anchorAxes = Object.values(anchorCtx.anchors).flatMap((anchor) => anchor.axesSpec);
|
|
294
|
-
const linkerMap = plModelCommon.LinkerMap.fromColumns(linkers.map(plModelCommon.getColumnIdAndSpec));
|
|
295
|
-
// loose way of matching
|
|
296
|
-
function matchAxisIdFn(linkerKeyId, sourceAxisId) {
|
|
297
|
-
return plModelCommon.matchAxisId(linkerKeyId, sourceAxisId) || plModelCommon.matchAxisId(sourceAxisId, linkerKeyId);
|
|
298
|
-
}
|
|
299
|
-
// search all axes that can be reached by linkers from anchor axes; anchor axes are not in this list;
|
|
300
|
-
const availableByLinkersAxes = linkerMap.getReachableByLinkersAxesFromAxes(anchorAxes, matchAxisIdFn);
|
|
301
|
-
// search all columns that includes at least one of additional axes;
|
|
302
|
-
const availableByLinkersColumns = this.getUniversalEntries((spec) => !plModelCommon.isLinkerColumn(spec) &&
|
|
303
|
-
spec.axesSpec.some((columnAxisSpec) => {
|
|
304
|
-
const columnAxisId = plModelCommon.getAxisId(columnAxisSpec);
|
|
305
|
-
return availableByLinkersAxes.some((axis) => matchAxisIdFn(plModelCommon.getAxisId(axis), columnAxisId));
|
|
306
|
-
}), { anchorCtx, labelOps, dontWaitAllData, overrideLabelAnnotation, exclude });
|
|
307
|
-
if (availableByLinkersColumns) {
|
|
308
|
-
result.push(...availableByLinkersColumns.filter((entry) => !ids.has(entry.id)));
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
return result;
|
|
312
|
-
}
|
|
313
|
-
getColumns(predicateOrSelectors, opts) {
|
|
314
|
-
const entries = this.getUniversalEntries(predicateOrSelectors, {
|
|
315
|
-
overrideLabelAnnotation: true, // default for getColumns
|
|
316
|
-
...opts,
|
|
317
|
-
});
|
|
318
|
-
if (!entries)
|
|
319
|
-
return undefined;
|
|
320
|
-
const columns = [];
|
|
321
|
-
for (const entry of entries) {
|
|
322
|
-
const data = entry.data();
|
|
323
|
-
if (!data) {
|
|
324
|
-
if (opts?.dontWaitAllData)
|
|
325
|
-
continue;
|
|
326
|
-
return undefined;
|
|
327
|
-
}
|
|
328
|
-
columns.push({
|
|
329
|
-
id: entry.id,
|
|
330
|
-
spec: entry.spec,
|
|
331
|
-
data,
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
return columns;
|
|
335
|
-
}
|
|
60
|
+
if (typeof selector !== "object" || !("axes" in selector) || selector.axes === void 0) return [];
|
|
61
|
+
const splitIndices = selector.axes.map((axis, index) => typeof axis === "object" && "split" in axis && axis.split === true ? index : -1).filter((index) => index !== -1);
|
|
62
|
+
if (splitIndices.length > 0 && selector.partialAxesMatch !== void 0) throw new Error("Axis splitting is not supported when `partialAxesMatch` is defined.");
|
|
63
|
+
splitIndices.sort((a, b) => a - b);
|
|
64
|
+
return splitIndices;
|
|
336
65
|
}
|
|
66
|
+
var PColumnCollection = class {
|
|
67
|
+
defaultProviderStore = [];
|
|
68
|
+
providers = [new ArrayColumnProvider(this.defaultProviderStore)];
|
|
69
|
+
axisLabelProviders = [];
|
|
70
|
+
constructor() {}
|
|
71
|
+
addColumnProvider(provider) {
|
|
72
|
+
this.providers.push(provider);
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
addAxisLabelProvider(provider) {
|
|
76
|
+
this.axisLabelProviders.push(provider);
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
addColumns(columns) {
|
|
80
|
+
this.defaultProviderStore.push(...columns);
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
addColumn(column) {
|
|
84
|
+
this.defaultProviderStore.push(column);
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
/** Fetches labels for a given axis from the registered providers */
|
|
88
|
+
findLabels(axis) {
|
|
89
|
+
for (const provider of this.axisLabelProviders) {
|
|
90
|
+
const labels = provider.findLabels(axis);
|
|
91
|
+
if (labels) return labels;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
getUniversalEntries(predicateOrSelectors, opts) {
|
|
95
|
+
const { anchorCtx, labelOps: rawLabelOps, dontWaitAllData = false, overrideLabelAnnotation = false, exclude, enrichByLinkers = false } = opts ?? {};
|
|
96
|
+
const labelOps = {
|
|
97
|
+
...overrideLabelAnnotation && rawLabelOps?.includeNativeLabel !== false ? { includeNativeLabel: true } : {},
|
|
98
|
+
...rawLabelOps
|
|
99
|
+
};
|
|
100
|
+
let excludePredicate = () => false;
|
|
101
|
+
if (exclude) {
|
|
102
|
+
const excludePredicartes = (Array.isArray(exclude) ? exclude : [exclude]).map((selector) => {
|
|
103
|
+
if (hasAnchors(selector)) {
|
|
104
|
+
if (!anchorCtx) throw new Error("Anchored selectors in exclude require an AnchoredIdDeriver to be provided in options.");
|
|
105
|
+
return (0, _milaboratories_pl_model_common.selectorsToPredicate)((0, _milaboratories_pl_model_common.resolveAnchors)(anchorCtx.anchors, selector, opts));
|
|
106
|
+
} else return (0, _milaboratories_pl_model_common.selectorsToPredicate)(selector);
|
|
107
|
+
});
|
|
108
|
+
excludePredicate = (spec) => excludePredicartes.some((predicate) => predicate(spec));
|
|
109
|
+
}
|
|
110
|
+
const selectorsArray = typeof predicateOrSelectors === "function" ? [predicateOrSelectors] : Array.isArray(predicateOrSelectors) ? predicateOrSelectors : [predicateOrSelectors];
|
|
111
|
+
const intermediateResults = [];
|
|
112
|
+
const selectedNativeIds = /* @__PURE__ */ new Set();
|
|
113
|
+
for (const rawSelector of selectorsArray) {
|
|
114
|
+
const usesAnchors = hasAnchors(rawSelector);
|
|
115
|
+
let currentSelector;
|
|
116
|
+
if (usesAnchors) {
|
|
117
|
+
if (!anchorCtx) throw new Error("Anchored selectors require an AnchoredIdDeriver to be provided in options.");
|
|
118
|
+
currentSelector = (0, _milaboratories_pl_model_common.resolveAnchors)(anchorCtx.anchors, rawSelector, opts);
|
|
119
|
+
} else currentSelector = rawSelector;
|
|
120
|
+
const selectedIds = /* @__PURE__ */ new Set();
|
|
121
|
+
const selectedColumns = [];
|
|
122
|
+
for (const provider of this.providers) {
|
|
123
|
+
const providerColumns = provider.selectColumns(currentSelector);
|
|
124
|
+
for (const col of providerColumns) {
|
|
125
|
+
if (excludePredicate(col.spec)) continue;
|
|
126
|
+
if (selectedIds.has(col.id)) throw new Error(`Duplicate column id ${col.id} in provider ${provider.constructor.name}`);
|
|
127
|
+
const nativeId = (0, _milaboratories_pl_model_common.deriveNativeId)(col.spec);
|
|
128
|
+
if (selectedNativeIds.has(nativeId)) continue;
|
|
129
|
+
selectedIds.add(col.id);
|
|
130
|
+
selectedNativeIds.add(nativeId);
|
|
131
|
+
selectedColumns.push(col);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (selectedColumns.length === 0) continue;
|
|
135
|
+
const splitAxisIdxs = getSplitAxisIndices(rawSelector);
|
|
136
|
+
const needsSplitting = splitAxisIdxs.length > 0;
|
|
137
|
+
for (const column of selectedColumns) {
|
|
138
|
+
if (!(0, _milaboratories_pl_model_common.isPColumnSpec)(column.spec)) continue;
|
|
139
|
+
const originalSpec = column.spec;
|
|
140
|
+
if (needsSplitting) {
|
|
141
|
+
if (isPColumnValues(column.data)) throw new Error(`Splitting is not supported for PColumns with PColumnValues data format. Column id: ${column.id}`);
|
|
142
|
+
const dataEntries = require_pcolumn_data.convertOrParsePColumnData(column.data);
|
|
143
|
+
if (!dataEntries) {
|
|
144
|
+
if (dontWaitAllData) continue;
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (!(0, _milaboratories_pl_model_common.isPartitionedDataInfoEntries)(dataEntries)) throw new Error(`Splitting requires Partitioned DataInfoEntries, but parsing resulted in ${dataEntries.type} for column ${column.id}`);
|
|
148
|
+
const uniqueKeys = require_pcolumn_data.getUniquePartitionKeys(dataEntries);
|
|
149
|
+
const maxSplitIdx = splitAxisIdxs[splitAxisIdxs.length - 1];
|
|
150
|
+
if (maxSplitIdx >= dataEntries.partitionKeyLength) throw new Error(`Not enough partition keys (${dataEntries.partitionKeyLength}) for requested split axes (max index ${maxSplitIdx}) in column ${originalSpec.name}`);
|
|
151
|
+
const axesLabels = splitAxisIdxs.map((idx) => this.findLabels((0, _milaboratories_pl_model_common.getAxisId)(originalSpec.axesSpec[idx])));
|
|
152
|
+
const keyCombinations = [];
|
|
153
|
+
const generateCombinations = (currentCombo, sAxisIdx) => {
|
|
154
|
+
if (sAxisIdx >= splitAxisIdxs.length) {
|
|
155
|
+
keyCombinations.push([...currentCombo]);
|
|
156
|
+
if (keyCombinations.length > 1e4) throw new Error("Too many key combinations, aborting.");
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const axisIdx = splitAxisIdxs[sAxisIdx];
|
|
160
|
+
if (axisIdx >= uniqueKeys.length) throw new Error(`Axis index ${axisIdx} out of bounds for unique keys array (length ${uniqueKeys.length}) during split key generation for column ${column.id}`);
|
|
161
|
+
const axisValues = uniqueKeys[axisIdx];
|
|
162
|
+
if (!axisValues || axisValues.length === 0) {
|
|
163
|
+
keyCombinations.length = 0;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
for (const val of axisValues) {
|
|
167
|
+
currentCombo.push(val);
|
|
168
|
+
generateCombinations(currentCombo, sAxisIdx + 1);
|
|
169
|
+
currentCombo.pop();
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
generateCombinations([], 0);
|
|
173
|
+
if (keyCombinations.length === 0) continue;
|
|
174
|
+
const newAxesSpec = [...originalSpec.axesSpec];
|
|
175
|
+
const splitAxisOriginalIdxs = splitAxisIdxs.map((idx) => idx);
|
|
176
|
+
for (let i = splitAxisIdxs.length - 1; i >= 0; i--) newAxesSpec.splice(splitAxisIdxs[i], 1);
|
|
177
|
+
const adjustedSpec = {
|
|
178
|
+
...originalSpec,
|
|
179
|
+
axesSpec: newAxesSpec
|
|
180
|
+
};
|
|
181
|
+
for (const keyCombo of keyCombinations) {
|
|
182
|
+
const splitFilters = keyCombo.map((value, sAxisIdx) => {
|
|
183
|
+
const axisIdx = splitAxisOriginalIdxs[sAxisIdx];
|
|
184
|
+
return {
|
|
185
|
+
axisIdx,
|
|
186
|
+
axisId: (0, _milaboratories_pl_model_common.getAxisId)(originalSpec.axesSpec[axisIdx]),
|
|
187
|
+
value,
|
|
188
|
+
label: axesLabels[sAxisIdx]?.[value] ?? String(value)
|
|
189
|
+
};
|
|
190
|
+
});
|
|
191
|
+
intermediateResults.push({
|
|
192
|
+
type: "split",
|
|
193
|
+
originalColumn: column,
|
|
194
|
+
spec: originalSpec,
|
|
195
|
+
adjustedSpec,
|
|
196
|
+
dataEntries,
|
|
197
|
+
axisFilters: splitFilters
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
} else intermediateResults.push({
|
|
201
|
+
type: "direct",
|
|
202
|
+
originalColumn: column,
|
|
203
|
+
spec: originalSpec,
|
|
204
|
+
adjustedSpec: originalSpec
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (intermediateResults.length === 0) return [];
|
|
209
|
+
const labeledResults = require_label.deriveLabels(intermediateResults, (entry) => ({
|
|
210
|
+
spec: entry.spec,
|
|
211
|
+
suffixTrace: entry.type === "split" ? splitFiltersToTrace(entry.axisFilters) : void 0
|
|
212
|
+
}), labelOps);
|
|
213
|
+
const result = [];
|
|
214
|
+
for (const { value: entry, label } of labeledResults) {
|
|
215
|
+
const { originalColumn, spec: originalSpec } = entry;
|
|
216
|
+
const axisFiltersTuple = splitFiltersToAxisFilter(entry.type === "split" ? entry.axisFilters : void 0);
|
|
217
|
+
let finalId;
|
|
218
|
+
if (anchorCtx) finalId = anchorCtx.deriveS(originalSpec, axisFiltersTuple);
|
|
219
|
+
else finalId = fallbackIdDeriver(originalColumn.id, axisFiltersTuple);
|
|
220
|
+
let finalSpec = { ...entry.adjustedSpec };
|
|
221
|
+
if (overrideLabelAnnotation) finalSpec = {
|
|
222
|
+
...finalSpec,
|
|
223
|
+
annotations: {
|
|
224
|
+
...finalSpec.annotations,
|
|
225
|
+
[_milaboratories_pl_model_common.Annotation.Label]: label
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
result.push({
|
|
229
|
+
id: finalId,
|
|
230
|
+
spec: finalSpec,
|
|
231
|
+
data: () => entry.type === "split" ? (0, _milaboratories_pl_model_common.entriesToDataInfo)(require_axis_filtering.filterDataInfoEntries(entry.dataEntries, axisFiltersTuple)) : entry.originalColumn.data,
|
|
232
|
+
label
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
const ids = new Set(result.map((entry) => entry.id));
|
|
236
|
+
if (enrichByLinkers && anchorCtx) {
|
|
237
|
+
const linkers = result.filter((entry) => (0, _milaboratories_pl_model_common.isLinkerColumn)(entry.spec));
|
|
238
|
+
if (linkers.length === 0) return result;
|
|
239
|
+
const anchorAxes = Object.values(anchorCtx.anchors).flatMap((anchor) => anchor.axesSpec);
|
|
240
|
+
const linkerMap = _milaboratories_pl_model_common.LinkerMap.fromColumns(linkers.map(_milaboratories_pl_model_common.getColumnIdAndSpec));
|
|
241
|
+
function matchAxisIdFn(linkerKeyId, sourceAxisId) {
|
|
242
|
+
return (0, _milaboratories_pl_model_common.matchAxisId)(linkerKeyId, sourceAxisId) || (0, _milaboratories_pl_model_common.matchAxisId)(sourceAxisId, linkerKeyId);
|
|
243
|
+
}
|
|
244
|
+
const availableByLinkersAxes = linkerMap.getReachableByLinkersAxesFromAxes(anchorAxes, matchAxisIdFn);
|
|
245
|
+
const availableByLinkersColumns = this.getUniversalEntries((spec) => !(0, _milaboratories_pl_model_common.isLinkerColumn)(spec) && spec.axesSpec.some((columnAxisSpec) => {
|
|
246
|
+
const columnAxisId = (0, _milaboratories_pl_model_common.getAxisId)(columnAxisSpec);
|
|
247
|
+
return availableByLinkersAxes.some((axis) => matchAxisIdFn((0, _milaboratories_pl_model_common.getAxisId)(axis), columnAxisId));
|
|
248
|
+
}), {
|
|
249
|
+
anchorCtx,
|
|
250
|
+
labelOps,
|
|
251
|
+
dontWaitAllData,
|
|
252
|
+
overrideLabelAnnotation,
|
|
253
|
+
exclude
|
|
254
|
+
});
|
|
255
|
+
if (availableByLinkersColumns) result.push(...availableByLinkersColumns.filter((entry) => !ids.has(entry.id)));
|
|
256
|
+
}
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
getColumns(predicateOrSelectors, opts) {
|
|
260
|
+
const entries = this.getUniversalEntries(predicateOrSelectors, {
|
|
261
|
+
overrideLabelAnnotation: true,
|
|
262
|
+
...opts
|
|
263
|
+
});
|
|
264
|
+
if (!entries) return void 0;
|
|
265
|
+
const columns = [];
|
|
266
|
+
for (const entry of entries) {
|
|
267
|
+
const data = entry.data();
|
|
268
|
+
if (!data) {
|
|
269
|
+
if (opts?.dontWaitAllData) continue;
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
columns.push({
|
|
273
|
+
id: entry.id,
|
|
274
|
+
spec: entry.spec,
|
|
275
|
+
data
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
return columns;
|
|
279
|
+
}
|
|
280
|
+
};
|
|
337
281
|
|
|
282
|
+
//#endregion
|
|
338
283
|
exports.PColumnCollection = PColumnCollection;
|
|
339
|
-
//# sourceMappingURL=column_collection.cjs.map
|
|
284
|
+
//# sourceMappingURL=column_collection.cjs.map
|