@platforma-sdk/model 1.79.27 → 1.80.2
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/block_model.d.ts +2 -0
- package/dist/block_model.d.ts.map +1 -1
- package/dist/columns/column.cjs +28 -0
- package/dist/columns/column.cjs.map +1 -0
- package/dist/columns/column.d.ts +30 -0
- package/dist/columns/column.d.ts.map +1 -0
- package/dist/columns/column.js +27 -0
- package/dist/columns/column.js.map +1 -0
- package/dist/columns/column_lazy.cjs +248 -0
- package/dist/columns/column_lazy.cjs.map +1 -0
- package/dist/columns/column_lazy.d.ts +137 -0
- package/dist/columns/column_lazy.d.ts.map +1 -0
- package/dist/columns/column_lazy.js +245 -0
- package/dist/columns/column_lazy.js.map +1 -0
- package/dist/columns/column_providers/index.cjs +62 -0
- package/dist/columns/column_providers/index.cjs.map +1 -0
- package/dist/columns/column_providers/index.d.ts +30 -0
- package/dist/columns/column_providers/index.d.ts.map +1 -0
- package/dist/columns/column_providers/index.js +53 -0
- package/dist/columns/column_providers/index.js.map +1 -0
- package/dist/columns/column_providers/providers.cjs +123 -0
- package/dist/columns/column_providers/providers.cjs.map +1 -0
- package/dist/columns/column_providers/providers.d.ts +75 -0
- package/dist/columns/column_providers/providers.d.ts.map +1 -0
- package/dist/columns/column_providers/providers.js +118 -0
- package/dist/columns/column_providers/providers.js.map +1 -0
- package/dist/columns/column_providers/types.d.ts +23 -0
- package/dist/columns/column_providers/types.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.cjs +180 -0
- package/dist/columns/column_recipes/column_discovered_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.d.ts +120 -0
- package/dist/columns/column_recipes/column_discovered_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.js +180 -0
- package/dist/columns/column_recipes/column_discovered_recipe.js.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.cjs +133 -0
- package/dist/columns/column_recipes/column_filtered_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.d.ts +75 -0
- package/dist/columns/column_recipes/column_filtered_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.js +133 -0
- package/dist/columns/column_recipes/column_filtered_recipe.js.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.cjs +101 -0
- package/dist/columns/column_recipes/column_overrided_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts +73 -0
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.js +101 -0
- package/dist/columns/column_recipes/column_overrided_recipe.js.map +1 -0
- package/dist/columns/column_recipes/index.cjs +72 -0
- package/dist/columns/column_recipes/index.cjs.map +1 -0
- package/dist/columns/column_recipes/index.d.ts +52 -0
- package/dist/columns/column_recipes/index.d.ts.map +1 -0
- package/dist/columns/column_recipes/index.js +68 -0
- package/dist/columns/column_recipes/index.js.map +1 -0
- package/dist/columns/column_recipes/leaf_rebrand.cjs +22 -0
- package/dist/columns/column_recipes/leaf_rebrand.cjs.map +1 -0
- package/dist/columns/column_recipes/leaf_rebrand.js +22 -0
- package/dist/columns/column_recipes/leaf_rebrand.js.map +1 -0
- package/dist/columns/column_recipes/types.d.ts +101 -0
- package/dist/columns/column_recipes/types.d.ts.map +1 -0
- package/dist/columns/columns_collection.cjs +124 -0
- package/dist/columns/columns_collection.cjs.map +1 -0
- package/dist/columns/columns_collection.d.ts +64 -0
- package/dist/columns/columns_collection.d.ts.map +1 -0
- package/dist/columns/columns_collection.js +122 -0
- package/dist/columns/columns_collection.js.map +1 -0
- package/dist/columns/derive_axis_values_labels.cjs +76 -0
- package/dist/columns/derive_axis_values_labels.cjs.map +1 -0
- package/dist/columns/derive_axis_values_labels.d.ts +30 -0
- package/dist/columns/derive_axis_values_labels.d.ts.map +1 -0
- package/dist/columns/derive_axis_values_labels.js +76 -0
- package/dist/columns/derive_axis_values_labels.js.map +1 -0
- package/dist/columns/expand_by_partition.cjs +53 -56
- package/dist/columns/expand_by_partition.cjs.map +1 -1
- package/dist/columns/expand_by_partition.d.ts +22 -18
- package/dist/columns/expand_by_partition.d.ts.map +1 -1
- package/dist/columns/expand_by_partition.js +55 -58
- package/dist/columns/expand_by_partition.js.map +1 -1
- package/dist/columns/index.cjs +44 -18
- package/dist/columns/index.d.ts +15 -7
- package/dist/columns/index.js +12 -6
- package/dist/columns/utils.cjs +186 -0
- package/dist/columns/utils.cjs.map +1 -0
- package/dist/columns/utils.d.ts +96 -0
- package/dist/columns/utils.d.ts.map +1 -0
- package/dist/columns/utils.js +179 -0
- package/dist/columns/utils.js.map +1 -0
- package/dist/components/PFrameForGraphs.cjs +1 -0
- package/dist/components/PFrameForGraphs.cjs.map +1 -1
- package/dist/components/PFrameForGraphs.d.ts +1 -1
- package/dist/components/PFrameForGraphs.d.ts.map +1 -1
- package/dist/components/PFrameForGraphs.js +1 -0
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlDataTable/columnResolver.cjs +28 -0
- package/dist/components/PlDataTable/columnResolver.cjs.map +1 -0
- package/dist/components/PlDataTable/columnResolver.js +28 -0
- package/dist/components/PlDataTable/columnResolver.js.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +4 -2
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +4 -2
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +20 -25
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +20 -25
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +58 -26
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +60 -28
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +224 -194
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +13 -16
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +228 -198
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +40 -98
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +17 -8
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +40 -98
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js +2 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs +51 -169
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.js +52 -166
- package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
- package/dist/components/PlDataTable/index.cjs +1 -1
- package/dist/components/PlDataTable/index.d.ts +4 -4
- package/dist/components/PlDataTable/index.js +2 -2
- package/dist/components/PlDataTable/labels.cjs +0 -1
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js +0 -1
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +107 -10
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts +5 -4
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
- package/dist/components/PlDataTable/state-migration.js +107 -10
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV7.d.ts +1 -36
- package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV8.d.ts +123 -0
- package/dist/components/PlDataTable/typesV8.d.ts.map +1 -0
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs +27 -34
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.js +27 -34
- package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +28 -33
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.js +29 -34
- package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs +27 -17
- package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts +24 -10
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.js +28 -18
- package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/index.d.ts +2 -2
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.d.ts +5 -5
- package/dist/components/index.js +2 -2
- package/dist/filters/converters/filterToQuery.cjs +5 -6
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts +12 -3
- package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
- package/dist/filters/converters/filterToQuery.js +5 -6
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/index.d.ts +2 -2
- package/dist/filters/index.d.ts +2 -2
- package/dist/index.cjs +64 -35
- package/dist/index.d.ts +23 -15
- package/dist/index.js +15 -9
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.d.ts +1 -2
- package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
- package/dist/labels/derive_distinct_tooltips.d.ts +6 -3
- package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
- package/dist/labels/derive_distinct_tooltips.js +1 -1
- package/dist/labels/derive_distinct_tooltips.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/dist/pframe_utils/axes.cjs.map +1 -1
- package/dist/pframe_utils/axes.d.ts +2 -2
- package/dist/pframe_utils/axes.d.ts.map +1 -1
- package/dist/pframe_utils/axes.js.map +1 -1
- package/dist/pframe_utils/columns.cjs +6 -10
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts +4 -4
- package/dist/pframe_utils/columns.d.ts.map +1 -1
- package/dist/pframe_utils/columns.js +7 -11
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs.map +1 -1
- package/dist/pframe_utils/index.d.ts +1 -1
- package/dist/pframe_utils/index.d.ts.map +1 -1
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/render/accessor.cjs +15 -16
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts +7 -10
- package/dist/render/accessor.d.ts.map +1 -1
- package/dist/render/accessor.js +15 -16
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +34 -36
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts +30 -20
- package/dist/render/api.d.ts.map +1 -1
- package/dist/render/api.js +35 -38
- package/dist/render/api.js.map +1 -1
- package/dist/render/index.cjs +4 -0
- package/dist/render/index.d.ts +4 -4
- package/dist/render/index.js +3 -2
- package/dist/render/internal.cjs +3 -2
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts +17 -9
- package/dist/render/internal.d.ts.map +1 -1
- package/dist/render/internal.js +3 -2
- package/dist/render/internal.js.map +1 -1
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.js.map +1 -1
- package/dist/render/util/column_collection.cjs +6 -4
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts +9 -9
- package/dist/render/util/column_collection.d.ts.map +1 -1
- package/dist/render/util/column_collection.js +6 -4
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.d.ts +2 -2
- package/dist/render/util/pcolumn_data.cjs +1 -1
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts +3 -3
- package/dist/render/util/pcolumn_data.d.ts.map +1 -1
- package/dist/render/util/pcolumn_data.js +1 -1
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/services/block_services.cjs +2 -1
- package/dist/services/block_services.cjs.map +1 -1
- package/dist/services/block_services.d.ts +1 -0
- package/dist/services/block_services.d.ts.map +1 -1
- package/dist/services/block_services.js +2 -1
- package/dist/services/block_services.js.map +1 -1
- package/dist/services/get_services.cjs +2 -2
- package/dist/services/get_services.cjs.map +1 -1
- package/dist/services/get_services.d.ts +4 -1
- package/dist/services/get_services.d.ts.map +1 -1
- package/dist/services/get_services.js +2 -2
- package/dist/services/get_services.js.map +1 -1
- package/package.json +10 -8
- package/src/columns/__test_helpers__/collection_driver.ts +197 -0
- package/src/columns/__test_helpers__/stub_registry.ts +134 -0
- package/src/columns/column.ts +46 -0
- package/src/columns/column_lazy.test.ts +201 -0
- package/src/columns/column_lazy.ts +311 -0
- package/src/columns/column_providers/index.ts +78 -0
- package/src/columns/column_providers/providers.ts +193 -0
- package/src/columns/column_providers/types.ts +24 -0
- package/src/columns/column_recipes/column_discovered_recipe.ts +231 -0
- package/src/columns/column_recipes/column_filtered_recipe.ts +184 -0
- package/src/columns/column_recipes/column_overrided_recipe.ts +146 -0
- package/src/columns/column_recipes/column_recipes.test.ts +681 -0
- package/src/columns/column_recipes/index.ts +127 -0
- package/src/columns/column_recipes/leaf_rebrand.ts +28 -0
- package/src/columns/column_recipes/types.ts +113 -0
- package/src/columns/columns_collection.test.ts +164 -0
- package/src/columns/columns_collection.ts +170 -0
- package/src/columns/derive_axis_values_labels.ts +98 -0
- package/src/columns/expand_by_partition.test.ts +146 -110
- package/src/columns/expand_by_partition.ts +72 -84
- package/src/columns/index.ts +7 -5
- package/src/columns/utils.test.ts +249 -0
- package/src/columns/utils.ts +226 -0
- package/src/components/PFrameForGraphs.ts +3 -1
- package/src/components/PlAnnotations/filters_ui.test.ts +46 -47
- package/src/components/PlDataTable/columnResolver.test.ts +122 -0
- package/src/components/PlDataTable/columnResolver.ts +57 -0
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +9 -9
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +31 -63
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +85 -58
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +316 -354
- package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +48 -144
- package/src/components/PlDataTable/createPlDataTable/index.ts +2 -2
- package/src/components/PlDataTable/createPlDataTable/utils.test.ts +60 -69
- package/src/components/PlDataTable/createPlDataTable/utils.ts +65 -173
- package/src/components/PlDataTable/createPlDataTableSheet.ts +1 -1
- package/src/components/PlDataTable/index.ts +4 -2
- package/src/components/PlDataTable/labels.ts +4 -33
- package/src/components/PlDataTable/state-migration.ts +151 -22
- package/src/components/PlDataTable/typesV8.ts +188 -0
- package/src/components/PlDatasetSelector/build_dataset_options.ts +35 -60
- package/src/components/PlDatasetSelector/enrichment_discovery.ts +65 -61
- package/src/components/PlDatasetSelector/filter_discovery.test.ts +110 -72
- package/src/components/PlDatasetSelector/filter_discovery.ts +51 -31
- package/src/filters/converters/filterToQuery.test.ts +15 -8
- package/src/filters/converters/filterToQuery.ts +22 -9
- package/src/filters/converters/filterUiToExpressionImpl.test.ts +35 -36
- package/src/labels/derive_distinct_labels.ts +1 -1
- package/src/labels/derive_distinct_tooltips.test.ts +7 -4
- package/src/labels/derive_distinct_tooltips.ts +3 -3
- package/src/pframe_utils/axes.ts +2 -2
- package/src/pframe_utils/columns.ts +14 -23
- package/src/pframe_utils/index.ts +1 -1
- package/src/render/accessor.ts +35 -38
- package/src/render/api.ts +45 -61
- package/src/render/index.ts +2 -1
- package/src/render/internal.ts +43 -10
- package/src/render/util/axis_filtering.ts +0 -1
- package/src/render/util/column_collection.ts +17 -17
- package/src/render/util/pcolumn_data.ts +5 -9
- package/src/services/block_services.ts +1 -0
- package/src/services/get_services.ts +5 -2
- package/dist/columns/column_collection_builder.cjs +0 -241
- package/dist/columns/column_collection_builder.cjs.map +0 -1
- package/dist/columns/column_collection_builder.d.ts +0 -119
- package/dist/columns/column_collection_builder.d.ts.map +0 -1
- package/dist/columns/column_collection_builder.js +0 -241
- package/dist/columns/column_collection_builder.js.map +0 -1
- package/dist/columns/column_selector.cjs +0 -49
- package/dist/columns/column_selector.cjs.map +0 -1
- package/dist/columns/column_selector.d.ts +0 -33
- package/dist/columns/column_selector.d.ts.map +0 -1
- package/dist/columns/column_selector.js +0 -47
- package/dist/columns/column_selector.js.map +0 -1
- package/dist/columns/column_snapshot.cjs +0 -19
- package/dist/columns/column_snapshot.cjs.map +0 -1
- package/dist/columns/column_snapshot.d.ts +0 -39
- package/dist/columns/column_snapshot.d.ts.map +0 -1
- package/dist/columns/column_snapshot.js +0 -18
- package/dist/columns/column_snapshot.js.map +0 -1
- package/dist/columns/column_snapshot_provider.cjs +0 -137
- package/dist/columns/column_snapshot_provider.cjs.map +0 -1
- package/dist/columns/column_snapshot_provider.d.ts +0 -74
- package/dist/columns/column_snapshot_provider.d.ts.map +0 -1
- package/dist/columns/column_snapshot_provider.js +0 -133
- package/dist/columns/column_snapshot_provider.js.map +0 -1
- package/dist/columns/ctx_column_sources.cjs +0 -80
- package/dist/columns/ctx_column_sources.cjs.map +0 -1
- package/dist/columns/ctx_column_sources.d.ts +0 -30
- package/dist/columns/ctx_column_sources.d.ts.map +0 -1
- package/dist/columns/ctx_column_sources.js +0 -79
- package/dist/columns/ctx_column_sources.js.map +0 -1
- package/src/columns/column_collection_builder.test.ts +0 -484
- package/src/columns/column_collection_builder.ts +0 -485
- package/src/columns/column_selector.test.ts +0 -90
- package/src/columns/column_selector.ts +0 -100
- package/src/columns/column_snapshot.ts +0 -58
- package/src/columns/column_snapshot_provider.ts +0 -194
- package/src/columns/ctx_column_sources.ts +0 -99
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { AxisId } from "@milaboratories/pl-model-common";
|
|
2
|
+
import { canonicalizeAxisId, getAxisId, PColumnName } from "@milaboratories/pl-model-common";
|
|
3
|
+
import type { ColumnsSource } from "./column_providers";
|
|
4
|
+
import { ColumnsCollection, isColumnsCollection } from "./columns_collection";
|
|
5
|
+
import type { GlobalCfgRenderCtx } from "../render/internal";
|
|
6
|
+
import { TreeNodeAccessor } from "../render";
|
|
7
|
+
import { isColumnLazy } from "./column_lazy";
|
|
8
|
+
|
|
9
|
+
const RT_JSON = "PColumnData/Json";
|
|
10
|
+
const RT_JSON_PARTITIONED = "PColumnData/JsonPartitioned";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Build an `axisValuesLabels` callback by discovering `pl7.app/label` columns
|
|
14
|
+
* from the given source, eagerly materialising their value→label maps, and
|
|
15
|
+
* keying them by canonical axis id.
|
|
16
|
+
*
|
|
17
|
+
* Modern replacement for `ctx.resultPool.findLabels` — uses the new
|
|
18
|
+
* column-access mechanism (filtered {@link ColumnsCollection}) instead of
|
|
19
|
+
* walking the raw result pool.
|
|
20
|
+
*
|
|
21
|
+
* Pair with {@link expandByPartition} (or any consumer expecting the
|
|
22
|
+
* `(axisId) => Record<axisValue, label>` shape).
|
|
23
|
+
*
|
|
24
|
+
* Skips:
|
|
25
|
+
* - non-leaf recipes (only direct `ColumnLazy` data is read);
|
|
26
|
+
* - label columns whose `axesSpec.length !== 1`;
|
|
27
|
+
* - label columns whose data resource type isn't `PColumnData/Json` /
|
|
28
|
+
* `PColumnData/JsonPartitioned`.
|
|
29
|
+
*/
|
|
30
|
+
export function deriveAxisValuesLabels(
|
|
31
|
+
source?: ColumnsCollection | (ColumnsCollection | ColumnsSource)[],
|
|
32
|
+
opts?: { ctx?: GlobalCfgRenderCtx },
|
|
33
|
+
): (axisId: AxisId) => Record<string | number, string> | undefined {
|
|
34
|
+
const collection =
|
|
35
|
+
source === undefined
|
|
36
|
+
? ColumnsCollection(undefined, opts)
|
|
37
|
+
: isColumnsCollection(source)
|
|
38
|
+
? source
|
|
39
|
+
: ColumnsCollection(source, opts);
|
|
40
|
+
|
|
41
|
+
const labelCols = collection
|
|
42
|
+
.filter({ include: { name: [{ type: "exact", value: PColumnName.Label }] } })
|
|
43
|
+
.getColumns();
|
|
44
|
+
|
|
45
|
+
const byAxis = labelCols.reduce<Map<string, Record<string | number, string>>>((map, col) => {
|
|
46
|
+
if (!isColumnLazy(col)) return map;
|
|
47
|
+
const spec = col.getSpec();
|
|
48
|
+
if (spec.axesSpec.length !== 1) return map;
|
|
49
|
+
|
|
50
|
+
const data = col.getData();
|
|
51
|
+
if (!(data instanceof TreeNodeAccessor)) return map;
|
|
52
|
+
|
|
53
|
+
const labelMap = readLabelMap(data);
|
|
54
|
+
if (!labelMap) return map;
|
|
55
|
+
|
|
56
|
+
map.set(canonicalizeAxisId(getAxisId(spec.axesSpec[0])), labelMap);
|
|
57
|
+
return map;
|
|
58
|
+
}, new Map());
|
|
59
|
+
|
|
60
|
+
return (axisId) => byAxis.get(canonicalizeAxisId(axisId));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function readLabelMap(acc: TreeNodeAccessor): undefined | Record<string | number, string> {
|
|
64
|
+
const rt = acc.resourceType.name;
|
|
65
|
+
|
|
66
|
+
if (rt === RT_JSON) {
|
|
67
|
+
const json = acc.getDataAsJson<{ data?: Record<string, string> }>();
|
|
68
|
+
return json?.data ? parseLabelKeys(json.data) : undefined;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (rt === RT_JSON_PARTITIONED) {
|
|
72
|
+
return acc.listInputFields().reduce<Record<string | number, string>>((merged, partKey) => {
|
|
73
|
+
const part = acc.resolve({
|
|
74
|
+
field: partKey,
|
|
75
|
+
assertFieldType: "Input",
|
|
76
|
+
ignoreError: true,
|
|
77
|
+
});
|
|
78
|
+
if (!part) return merged;
|
|
79
|
+
const json = part.getDataAsJson<{ data?: Record<string, string> }>();
|
|
80
|
+
if (!json?.data) return merged;
|
|
81
|
+
return Object.assign(merged, parseLabelKeys(json.data));
|
|
82
|
+
}, {});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function parseLabelKeys(raw: Record<string, string>): Record<string | number, string> {
|
|
89
|
+
return Object.entries(raw).reduce<Record<string | number, string>>((acc, [k, v]) => {
|
|
90
|
+
try {
|
|
91
|
+
const parsed = JSON.parse(k);
|
|
92
|
+
acc[Array.isArray(parsed) ? parsed[0] : parsed] = v;
|
|
93
|
+
} catch {
|
|
94
|
+
acc[k] = v;
|
|
95
|
+
}
|
|
96
|
+
return acc;
|
|
97
|
+
}, {});
|
|
98
|
+
}
|
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import {
|
|
2
|
+
Annotation,
|
|
3
|
+
canonicalizeAxisId,
|
|
4
|
+
getAxisId,
|
|
5
|
+
isColumnFilteredKey,
|
|
6
|
+
isColumnOverriddenKey,
|
|
7
|
+
parseColumnIdSafely,
|
|
8
|
+
parseColumnOverriddenId,
|
|
9
|
+
type AxisSpec,
|
|
10
|
+
type JsonPartitionedDataInfoEntries,
|
|
11
|
+
type PColumnSpec,
|
|
12
|
+
type PObjectId,
|
|
6
13
|
} from "@milaboratories/pl-model-common";
|
|
7
|
-
import { canonicalizeAxisId, getAxisId } from "@milaboratories/pl-model-common";
|
|
8
14
|
import { describe, expect, test } from "vitest";
|
|
9
15
|
import type { PColumnDataUniversal } from "../render/internal";
|
|
10
|
-
import type {
|
|
16
|
+
import type { ColumnLazy } from "./column_lazy";
|
|
17
|
+
import { ColumnLazyImpl } from "./column_lazy";
|
|
11
18
|
import { expandByPartition } from "./expand_by_partition";
|
|
12
19
|
|
|
13
20
|
// --- Helpers ---
|
|
@@ -26,74 +33,62 @@ function createSpec(name: string, axes: AxisSpec[]): PColumnSpec {
|
|
|
26
33
|
} as PColumnSpec;
|
|
27
34
|
}
|
|
28
35
|
|
|
29
|
-
/**
|
|
30
|
-
function
|
|
36
|
+
/** Build a synthetic ColumnLazy whose data is a JsonPartitioned DataInfoEntries. */
|
|
37
|
+
function createReadyLazy(
|
|
31
38
|
id: string,
|
|
32
|
-
|
|
39
|
+
spec: PColumnSpec,
|
|
33
40
|
partitionKeyLength: number,
|
|
34
41
|
parts: { key: (string | number)[]; value: unknown }[],
|
|
35
|
-
):
|
|
42
|
+
): ColumnLazy {
|
|
36
43
|
const dataEntries: JsonPartitionedDataInfoEntries<unknown> = {
|
|
37
44
|
type: "JsonPartitioned",
|
|
38
45
|
partitionKeyLength,
|
|
39
46
|
parts,
|
|
40
47
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// convertOrParsePColumnData checks isDataInfoEntries first (duck-type),
|
|
46
|
-
// so this works at runtime despite the PColumnDataUniversal type
|
|
47
|
-
data: { get: () => dataEntries as unknown as PColumnDataUniversal },
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function createComputingSnapshot(id: string, columnSpec: PColumnSpec): ColumnSnapshot<PObjectId> {
|
|
52
|
-
return {
|
|
48
|
+
// `data` is typed `PColumnDataUniversal` but `getUniquePartitionKeys`
|
|
49
|
+
// duck-types DataInfoEntries via `isDataInfoEntries`, so the JsonPartitioned
|
|
50
|
+
// payload works at runtime.
|
|
51
|
+
return ColumnLazyImpl.fromColumn({
|
|
53
52
|
id: id as PObjectId,
|
|
54
|
-
spec
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
get: () => undefined,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
53
|
+
spec,
|
|
54
|
+
data: dataEntries as unknown as PColumnDataUniversal,
|
|
55
|
+
});
|
|
60
56
|
}
|
|
61
57
|
|
|
62
|
-
function
|
|
63
|
-
return {
|
|
58
|
+
function createComputingLazy(id: string, spec: PColumnSpec): ColumnLazy {
|
|
59
|
+
return ColumnLazyImpl.fromColumn({
|
|
64
60
|
id: id as PObjectId,
|
|
65
|
-
spec
|
|
66
|
-
dataStatus: "absent",
|
|
61
|
+
spec,
|
|
67
62
|
data: undefined,
|
|
68
|
-
};
|
|
63
|
+
});
|
|
69
64
|
}
|
|
70
65
|
|
|
71
66
|
interface Trace {
|
|
72
67
|
type: string;
|
|
73
68
|
label: string;
|
|
74
|
-
importance
|
|
69
|
+
importance?: number;
|
|
75
70
|
}
|
|
76
71
|
|
|
77
|
-
function extractTrace(
|
|
78
|
-
const raw =
|
|
72
|
+
function extractTrace(recipe: { getSpec(): PColumnSpec }): Trace[] {
|
|
73
|
+
const raw = recipe.getSpec().annotations?.[Annotation.Trace];
|
|
79
74
|
return raw ? (JSON.parse(raw) as Trace[]) : [];
|
|
80
75
|
}
|
|
81
76
|
|
|
82
77
|
// --- Tests ---
|
|
83
78
|
|
|
84
79
|
describe("expandByPartition", () => {
|
|
85
|
-
test("no split axes returns
|
|
86
|
-
const s =
|
|
80
|
+
test("no split axes returns inputs unchanged", () => {
|
|
81
|
+
const s = createReadyLazy("col1", createSpec("c", [createAxis("a")]), 1, [
|
|
87
82
|
{ key: ["x"], value: {} },
|
|
88
83
|
]);
|
|
89
84
|
const result = expandByPartition([s], []);
|
|
90
|
-
expect(result
|
|
91
|
-
expect(result
|
|
92
|
-
expect(result
|
|
85
|
+
expect(result).toBeDefined();
|
|
86
|
+
expect(result).toHaveLength(1);
|
|
87
|
+
expect(result![0]).toBe(s); // same reference
|
|
93
88
|
});
|
|
94
89
|
|
|
95
|
-
test("single axis split produces K
|
|
96
|
-
const s =
|
|
90
|
+
test("single axis split produces K recipes", () => {
|
|
91
|
+
const s = createReadyLazy(
|
|
97
92
|
"col1",
|
|
98
93
|
createSpec("c", [createAxis("sample"), createAxis("gene")]),
|
|
99
94
|
2,
|
|
@@ -105,20 +100,20 @@ describe("expandByPartition", () => {
|
|
|
105
100
|
);
|
|
106
101
|
|
|
107
102
|
const result = expandByPartition([s], [{ idx: 0 }]);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
expect(
|
|
116
|
-
expect(
|
|
103
|
+
expect(result).toBeDefined();
|
|
104
|
+
// unique values on axis 0: s1, s2 → 2 recipes
|
|
105
|
+
expect(result).toHaveLength(2);
|
|
106
|
+
|
|
107
|
+
// split axis removed from axesSpec on each recipe
|
|
108
|
+
for (const recipe of result!) {
|
|
109
|
+
const spec = recipe.getSpec();
|
|
110
|
+
expect(spec.axesSpec).toHaveLength(1);
|
|
111
|
+
expect(spec.axesSpec[0].name).toBe("gene");
|
|
117
112
|
}
|
|
118
113
|
});
|
|
119
114
|
|
|
120
|
-
test("multi-axis split produces K1 x K2
|
|
121
|
-
const s =
|
|
115
|
+
test("multi-axis split produces K1 x K2 recipes", () => {
|
|
116
|
+
const s = createReadyLazy(
|
|
122
117
|
"col1",
|
|
123
118
|
createSpec("c", [createAxis("a"), createAxis("b"), createAxis("value")]),
|
|
124
119
|
2,
|
|
@@ -130,20 +125,20 @@ describe("expandByPartition", () => {
|
|
|
130
125
|
);
|
|
131
126
|
|
|
132
127
|
const result = expandByPartition([s], [{ idx: 0 }, { idx: 1 }]);
|
|
133
|
-
|
|
134
|
-
expect(result.complete).toBe(true);
|
|
128
|
+
expect(result).toBeDefined();
|
|
135
129
|
// a: a1, a2 (2) × b: b1, b2 (2) = 4
|
|
136
|
-
expect(result
|
|
130
|
+
expect(result).toHaveLength(4);
|
|
137
131
|
|
|
138
132
|
// both split axes removed, only "value" remains
|
|
139
|
-
for (const
|
|
140
|
-
|
|
141
|
-
expect(
|
|
133
|
+
for (const recipe of result!) {
|
|
134
|
+
const spec = recipe.getSpec();
|
|
135
|
+
expect(spec.axesSpec).toHaveLength(1);
|
|
136
|
+
expect(spec.axesSpec[0].name).toBe("value");
|
|
142
137
|
}
|
|
143
138
|
});
|
|
144
139
|
|
|
145
|
-
test("trace annotations include split info", () => {
|
|
146
|
-
const s =
|
|
140
|
+
test("trace annotations include split info appended to base trace", () => {
|
|
141
|
+
const s = createReadyLazy(
|
|
147
142
|
"col1",
|
|
148
143
|
createSpec("c", [createAxis("sample"), createAxis("gene")]),
|
|
149
144
|
1,
|
|
@@ -154,31 +149,53 @@ describe("expandByPartition", () => {
|
|
|
154
149
|
);
|
|
155
150
|
|
|
156
151
|
const result = expandByPartition([s], [{ idx: 0 }]);
|
|
157
|
-
expect(result
|
|
158
|
-
expect(result
|
|
152
|
+
expect(result).toBeDefined();
|
|
153
|
+
expect(result).toHaveLength(2);
|
|
159
154
|
|
|
160
|
-
const
|
|
155
|
+
const expectedType = `split:${canonicalizeAxisId(getAxisId(createAxis("sample")))}`;
|
|
156
|
+
|
|
157
|
+
const trace0 = extractTrace(result![0]);
|
|
161
158
|
expect(trace0).toEqual([
|
|
162
159
|
{
|
|
163
|
-
type:
|
|
160
|
+
type: expectedType,
|
|
164
161
|
label: "s1",
|
|
165
162
|
importance: 1_000_000,
|
|
166
163
|
},
|
|
167
164
|
]);
|
|
168
165
|
|
|
169
|
-
const trace1 = extractTrace(result
|
|
166
|
+
const trace1 = extractTrace(result![1]);
|
|
170
167
|
expect(trace1).toEqual([
|
|
171
168
|
{
|
|
172
|
-
type:
|
|
169
|
+
type: expectedType,
|
|
173
170
|
label: "s2",
|
|
174
171
|
importance: 1_000_000,
|
|
175
172
|
},
|
|
176
173
|
]);
|
|
177
174
|
});
|
|
178
175
|
|
|
179
|
-
test("
|
|
176
|
+
test("existing trace is preserved and split entry is appended", () => {
|
|
177
|
+
const baseTrace = [{ type: "ingest", label: "Input" }];
|
|
178
|
+
const spec: PColumnSpec = {
|
|
179
|
+
...createSpec("c", [createAxis("sample"), createAxis("gene")]),
|
|
180
|
+
annotations: {
|
|
181
|
+
[Annotation.Trace]: JSON.stringify(baseTrace),
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
const s = createReadyLazy("col1", spec, 1, [{ key: ["s1"], value: {} }]);
|
|
185
|
+
|
|
186
|
+
const result = expandByPartition([s], [{ idx: 0 }]);
|
|
187
|
+
expect(result).toBeDefined();
|
|
188
|
+
expect(result).toHaveLength(1);
|
|
189
|
+
|
|
190
|
+
const trace0 = extractTrace(result![0]);
|
|
191
|
+
expect(trace0[0]).toEqual({ type: "ingest", label: "Input" });
|
|
192
|
+
expect(trace0[1].type).toBe(`split:${canonicalizeAxisId(getAxisId(createAxis("sample")))}`);
|
|
193
|
+
expect(trace0[1].label).toBe("s1");
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
test("axisValuesLabels option resolves labels in trace entries", () => {
|
|
180
197
|
const sampleAxis = createAxis("sample");
|
|
181
|
-
const s =
|
|
198
|
+
const s = createReadyLazy("col1", createSpec("c", [sampleAxis, createAxis("gene")]), 1, [
|
|
182
199
|
{ key: ["s1"], value: {} },
|
|
183
200
|
{ key: ["s2"], value: {} },
|
|
184
201
|
]);
|
|
@@ -189,32 +206,22 @@ describe("expandByPartition", () => {
|
|
|
189
206
|
};
|
|
190
207
|
|
|
191
208
|
const result = expandByPartition([s], [{ idx: 0 }], {
|
|
192
|
-
|
|
209
|
+
axisValuesLabels: () => labels,
|
|
193
210
|
});
|
|
194
211
|
|
|
195
|
-
expect(result
|
|
196
|
-
|
|
197
|
-
expect(
|
|
198
|
-
const trace1 = extractTrace(result.items[1]);
|
|
199
|
-
expect(trace1[0].label).toBe("Sample Two");
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
test("computing snapshot returns incomplete", () => {
|
|
203
|
-
const s = createComputingSnapshot("col1", createSpec("c", [createAxis("a")]));
|
|
204
|
-
const result = expandByPartition([s], [{ idx: 0 }]);
|
|
205
|
-
expect(result.complete).toBe(false);
|
|
206
|
-
expect(result.items).toHaveLength(0);
|
|
212
|
+
expect(result).toBeDefined();
|
|
213
|
+
expect(extractTrace(result![0])[0].label).toBe("Sample One");
|
|
214
|
+
expect(extractTrace(result![1])[0].label).toBe("Sample Two");
|
|
207
215
|
});
|
|
208
216
|
|
|
209
|
-
test("
|
|
210
|
-
const s =
|
|
217
|
+
test("computing input (data undefined) returns undefined", () => {
|
|
218
|
+
const s = createComputingLazy("col1", createSpec("c", [createAxis("a")]));
|
|
211
219
|
const result = expandByPartition([s], [{ idx: 0 }]);
|
|
212
|
-
expect(result
|
|
213
|
-
expect(result.items).toHaveLength(0);
|
|
220
|
+
expect(result).toBeUndefined();
|
|
214
221
|
});
|
|
215
222
|
|
|
216
|
-
test("empty unique keys for an axis produces no
|
|
217
|
-
const s =
|
|
223
|
+
test("empty unique keys for an axis produces no recipes for that column", () => {
|
|
224
|
+
const s = createReadyLazy(
|
|
218
225
|
"col1",
|
|
219
226
|
createSpec("c", [createAxis("a"), createAxis("b")]),
|
|
220
227
|
2,
|
|
@@ -222,35 +229,64 @@ describe("expandByPartition", () => {
|
|
|
222
229
|
);
|
|
223
230
|
|
|
224
231
|
const result = expandByPartition([s], [{ idx: 0 }]);
|
|
225
|
-
expect(result
|
|
226
|
-
expect(result
|
|
232
|
+
expect(result).toBeDefined();
|
|
233
|
+
expect(result).toHaveLength(0);
|
|
227
234
|
});
|
|
228
235
|
|
|
229
|
-
test("
|
|
230
|
-
const s =
|
|
236
|
+
test("recipe ids are canonical Overridden<Filtered<inner>>", () => {
|
|
237
|
+
const s = createReadyLazy(
|
|
231
238
|
"col1",
|
|
232
239
|
createSpec("c", [createAxis("sample"), createAxis("gene")]),
|
|
233
240
|
1,
|
|
234
241
|
[
|
|
235
|
-
{ key: ["s1"], value: {
|
|
236
|
-
{ key: ["s2"], value: {
|
|
242
|
+
{ key: ["s1"], value: {} },
|
|
243
|
+
{ key: ["s2"], value: {} },
|
|
237
244
|
],
|
|
238
245
|
);
|
|
239
246
|
|
|
240
247
|
const result = expandByPartition([s], [{ idx: 0 }]);
|
|
241
|
-
expect(result
|
|
242
|
-
expect(result
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
248
|
+
expect(result).toBeDefined();
|
|
249
|
+
expect(result).toHaveLength(2);
|
|
250
|
+
|
|
251
|
+
for (const recipe of result!) {
|
|
252
|
+
// Outer wrap is Overridden
|
|
253
|
+
const overridedKey = parseColumnOverriddenId(recipe.id);
|
|
254
|
+
expect(isColumnOverriddenKey(overridedKey)).toBe(true);
|
|
255
|
+
// Inner is a stringified Filtered id
|
|
256
|
+
expect(typeof overridedKey.source).toBe("string");
|
|
257
|
+
const innerParsed = parseColumnIdSafely(overridedKey.source);
|
|
258
|
+
expect(isColumnFilteredKey(innerParsed)).toBe(true);
|
|
249
259
|
}
|
|
260
|
+
|
|
261
|
+
// Each recipe's id is distinct
|
|
262
|
+
const ids = new Set(result!.map((r) => r.id));
|
|
263
|
+
expect(ids.size).toBe(2);
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
test("domain override carries axis name → value", () => {
|
|
267
|
+
const s = createReadyLazy(
|
|
268
|
+
"col1",
|
|
269
|
+
createSpec("c", [createAxis("sample"), createAxis("gene")]),
|
|
270
|
+
1,
|
|
271
|
+
[
|
|
272
|
+
{ key: ["s1"], value: {} },
|
|
273
|
+
{ key: ["s2"], value: {} },
|
|
274
|
+
],
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
const result = expandByPartition([s], [{ idx: 0 }]);
|
|
278
|
+
expect(result).toBeDefined();
|
|
279
|
+
expect(result).toHaveLength(2);
|
|
280
|
+
|
|
281
|
+
const overrided0 = parseColumnOverriddenId(result![0].id);
|
|
282
|
+
expect(overrided0.specOverrides.domain).toEqual({ sample: "s1" });
|
|
283
|
+
|
|
284
|
+
const overrided1 = parseColumnOverriddenId(result![1].id);
|
|
285
|
+
expect(overrided1.specOverrides.domain).toEqual({ sample: "s2" });
|
|
250
286
|
});
|
|
251
287
|
|
|
252
|
-
test("multiple input
|
|
253
|
-
const s1 =
|
|
288
|
+
test("multiple input columns are all expanded", () => {
|
|
289
|
+
const s1 = createReadyLazy(
|
|
254
290
|
"col1",
|
|
255
291
|
createSpec("c1", [createAxis("sample"), createAxis("gene")]),
|
|
256
292
|
1,
|
|
@@ -259,7 +295,7 @@ describe("expandByPartition", () => {
|
|
|
259
295
|
{ key: ["s2"], value: {} },
|
|
260
296
|
],
|
|
261
297
|
);
|
|
262
|
-
const s2 =
|
|
298
|
+
const s2 = createReadyLazy(
|
|
263
299
|
"col2",
|
|
264
300
|
createSpec("c2", [createAxis("sample"), createAxis("gene")]),
|
|
265
301
|
1,
|
|
@@ -271,13 +307,13 @@ describe("expandByPartition", () => {
|
|
|
271
307
|
);
|
|
272
308
|
|
|
273
309
|
const result = expandByPartition([s1, s2], [{ idx: 0 }]);
|
|
274
|
-
expect(result
|
|
310
|
+
expect(result).toBeDefined();
|
|
275
311
|
// s1: 2 unique + s2: 3 unique = 5 total
|
|
276
|
-
expect(result
|
|
312
|
+
expect(result).toHaveLength(5);
|
|
277
313
|
});
|
|
278
314
|
|
|
279
315
|
test("throws when split axis exceeds partition key length", () => {
|
|
280
|
-
const s =
|
|
316
|
+
const s = createReadyLazy(
|
|
281
317
|
"col1",
|
|
282
318
|
createSpec("c", [createAxis("a"), createAxis("b"), createAxis("c")]),
|
|
283
319
|
1, // only 1 partition key
|