@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
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ColumnsProvider } from "../../columns/column_providers/providers.js";
|
|
2
|
+
import { getCtxProviders } from "../../columns/column_providers/index.js";
|
|
3
|
+
import "../../columns/index.js";
|
|
3
4
|
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./filter_discovery.js";
|
|
4
5
|
import { enrichmentVariantsToRefs, findEnrichmentColumns } from "./enrichment_discovery.js";
|
|
5
6
|
import { multiColumnSelectorsToPredicate } from "@milaboratories/pl-model-common";
|
|
@@ -20,44 +21,36 @@ function buildDatasetOptions(ctx, opts) {
|
|
|
20
21
|
const options = ctx.resultPool.getOptions(primaryPredicate, { refsWithEnrichments: true });
|
|
21
22
|
if (options.length === 0) return [];
|
|
22
23
|
const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);
|
|
23
|
-
const pframeSpec = ctx.getService("pframeSpec");
|
|
24
24
|
const withEnrichments = opts?.withEnrichments ?? false;
|
|
25
|
-
const filterSource =
|
|
26
|
-
const enrichmentSources = withEnrichments ?
|
|
25
|
+
const filterSource = ColumnsProvider(ctx.ctx.getUpstreamBlockCtx());
|
|
26
|
+
const enrichmentSources = withEnrichments ? getCtxProviders(ctx) : void 0;
|
|
27
27
|
return options.map((primary) => {
|
|
28
28
|
const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);
|
|
29
29
|
if (!datasetSpec) return { primary };
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
const filterMatches = findFilterColumns({
|
|
31
|
+
sources: [filterSource],
|
|
32
|
+
anchorSpec: datasetSpec
|
|
33
|
+
}).filter((m) => filterPredicate(m.getSpec()));
|
|
34
|
+
const filters = filterMatches.length === 0 ? void 0 : filterMatchesToOptions(filterMatches, {
|
|
35
|
+
refsByObjectId: refMap,
|
|
36
|
+
datasetSpec,
|
|
37
|
+
labelOptions: opts?.labelOptions
|
|
38
|
+
});
|
|
39
|
+
let enrichments;
|
|
40
|
+
if (enrichmentSources && withEnrichments) {
|
|
41
|
+
const enrichmentVariants = findEnrichmentColumns({
|
|
42
|
+
sources: enrichmentSources,
|
|
43
|
+
anchorSpec: datasetSpec,
|
|
44
|
+
maxHops: opts?.enrichmentMaxHops,
|
|
45
|
+
...typeof withEnrichments === "function" ? { predicate: withEnrichments } : { include: withEnrichments }
|
|
36
46
|
});
|
|
37
|
-
|
|
38
|
-
const filterMatches = findFilterColumns(filterCollection).filter((m) => filterPredicate(m.column.spec));
|
|
39
|
-
const filters = filterMatches.length === 0 ? void 0 : filterMatchesToOptions(filterMatches, {
|
|
40
|
-
refsByObjectId: refMap,
|
|
41
|
-
datasetSpec,
|
|
42
|
-
labelOptions: opts?.labelOptions
|
|
43
|
-
});
|
|
44
|
-
let enrichments;
|
|
45
|
-
if (enrichmentCollection && withEnrichments) {
|
|
46
|
-
const enrichmentVariants = findEnrichmentColumns(enrichmentCollection, {
|
|
47
|
-
maxHops: opts?.enrichmentMaxHops,
|
|
48
|
-
...typeof withEnrichments === "function" ? { predicate: withEnrichments } : { include: withEnrichments }
|
|
49
|
-
});
|
|
50
|
-
if (enrichmentVariants.length > 0) enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);
|
|
51
|
-
}
|
|
52
|
-
return {
|
|
53
|
-
primary,
|
|
54
|
-
...filters !== void 0 && filters.length > 0 ? { filters } : {},
|
|
55
|
-
...enrichments !== void 0 && enrichments.length > 0 ? { enrichments } : {}
|
|
56
|
-
};
|
|
57
|
-
} finally {
|
|
58
|
-
filterCollection?.dispose();
|
|
59
|
-
enrichmentCollection?.dispose();
|
|
47
|
+
if (enrichmentVariants.length > 0) enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);
|
|
60
48
|
}
|
|
49
|
+
return {
|
|
50
|
+
primary,
|
|
51
|
+
...filters !== void 0 && filters.length > 0 ? { filters } : {},
|
|
52
|
+
...enrichments !== void 0 && enrichments.length > 0 ? { enrichments } : {}
|
|
53
|
+
};
|
|
61
54
|
});
|
|
62
55
|
}
|
|
63
56
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build_dataset_options.js","names":[],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type { MultiColumnSelector, Option, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport { multiColumnSelectorsToPredicate } from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type {
|
|
1
|
+
{"version":3,"file":"build_dataset_options.js","names":[],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type { MultiColumnSelector, Option, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport { multiColumnSelectorsToPredicate } from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { DatasetOption } from \"./dataset_selection\";\nimport { buildRefMap, filterMatchesToOptions, findFilterColumns } from \"./filter_discovery\";\nimport { enrichmentVariantsToRefs, findEnrichmentColumns } from \"./enrichment_discovery\";\nimport { ColumnsProvider, getCtxProviders } from \"../../columns\";\n\ntype SpecPredicateOption =\n | MultiColumnSelector\n | MultiColumnSelector[]\n | ((spec: PObjectSpec) => boolean);\n\nfunction toPredicate(opt: SpecPredicateOption | undefined): (spec: PObjectSpec) => boolean {\n if (opt === undefined) return () => true;\n return typeof opt === \"function\" ? opt : multiColumnSelectorsToPredicate(opt);\n}\n\nexport type BuildDatasetOptions = {\n /** Which result pool columns qualify as datasets. Defaults to all. */\n primary?: SpecPredicateOption;\n /**\n * Restricts which result pool columns are considered as filters. Intersected\n * with the built-in `pl7.app/isSubset: \"true\"` constraint. Defaults to\n * accept-all.\n */\n filter?: SpecPredicateOption;\n /**\n * Formatting options forwarded to label derivation for both filter and\n * enrichment rows. `formatters.native` on the filter path is overridden\n * — see `FilterMatchOptions.labelOptions`.\n */\n labelOptions?: DeriveLabelsOptions;\n /**\n * Enables enrichment discovery and filters hits attached to\n * `DatasetOption.enrichments`. Use `() => true` to accept all; omit to disable.\n */\n withEnrichments?: SpecPredicateOption;\n /** Maximum linker hops considered. Only used when `withEnrichments` is set. */\n enrichmentMaxHops?: number;\n};\n\n/**\n * Usage:\n * ```ts\n * .output(\"datasetOptions\", (ctx) => buildDatasetOptions(ctx))\n * ```\n */\nexport function buildDatasetOptions(\n ctx: RenderCtxBase,\n opts?: BuildDatasetOptions,\n): DatasetOption[] | undefined {\n const primaryPredicate = toPredicate(opts?.primary);\n const filterPredicate = toPredicate(opts?.filter);\n\n const options = ctx.resultPool.getOptions(primaryPredicate, { refsWithEnrichments: true });\n if (options.length === 0) return [];\n\n const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);\n\n const withEnrichments = opts?.withEnrichments ?? false;\n const filterSource = ColumnsProvider(ctx.ctx.getUpstreamBlockCtx());\n // Hoist providers once: getCtxProviders walks the full output tree, so\n // calling it per dataset option would be O(N × tree).\n const enrichmentSources = withEnrichments ? getCtxProviders(ctx) : undefined;\n\n return options.map((primary: Option): DatasetOption => {\n const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);\n if (!datasetSpec) return { primary };\n\n const filterMatches = findFilterColumns({\n sources: [filterSource],\n anchorSpec: datasetSpec,\n }).filter((m) => filterPredicate(m.getSpec()!));\n\n const filters =\n filterMatches.length === 0\n ? undefined\n : filterMatchesToOptions(filterMatches, {\n refsByObjectId: refMap,\n datasetSpec,\n labelOptions: opts?.labelOptions,\n });\n\n let enrichments;\n if (enrichmentSources && withEnrichments) {\n const enrichmentVariants = findEnrichmentColumns({\n sources: enrichmentSources,\n anchorSpec: datasetSpec,\n maxHops: opts?.enrichmentMaxHops,\n ...(typeof withEnrichments === \"function\"\n ? { predicate: withEnrichments }\n : { include: withEnrichments }),\n });\n if (enrichmentVariants.length > 0) {\n enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);\n }\n }\n\n return {\n primary,\n ...(filters !== undefined && filters.length > 0 ? { filters } : {}),\n ...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),\n };\n });\n}\n"],"mappings":";;;;;;;AAcA,SAAS,YAAY,KAAsE;CACzF,IAAI,QAAQ,KAAA,GAAW,aAAa;CACpC,OAAO,OAAO,QAAQ,aAAa,MAAM,gCAAgC,GAAG;AAC9E;;;;;;;AAgCA,SAAgB,oBACd,KACA,MAC6B;CAC7B,MAAM,mBAAmB,YAAY,MAAM,OAAO;CAClD,MAAM,kBAAkB,YAAY,MAAM,MAAM;CAEhD,MAAM,UAAU,IAAI,WAAW,WAAW,kBAAkB,EAAE,qBAAqB,KAAK,CAAC;CACzF,IAAI,QAAQ,WAAW,GAAG,OAAO,CAAC;CAElC,MAAM,SAAS,YAAY,IAAI,WAAW,SAAS,CAAC,CAAC,OAAO;CAE5D,MAAM,kBAAkB,MAAM,mBAAmB;CACjD,MAAM,eAAe,gBAAgB,IAAI,IAAI,oBAAoB,CAAC;CAGlE,MAAM,oBAAoB,kBAAkB,gBAAgB,GAAG,IAAI,KAAA;CAEnE,OAAO,QAAQ,KAAK,YAAmC;EACrD,MAAM,cAAc,IAAI,WAAW,oBAAoB,QAAQ,GAAG;EAClE,IAAI,CAAC,aAAa,OAAO,EAAE,QAAQ;EAEnC,MAAM,gBAAgB,kBAAkB;GACtC,SAAS,CAAC,YAAY;GACtB,YAAY;EACd,CAAC,CAAC,CAAC,QAAQ,MAAM,gBAAgB,EAAE,QAAQ,CAAE,CAAC;EAE9C,MAAM,UACJ,cAAc,WAAW,IACrB,KAAA,IACA,uBAAuB,eAAe;GACpC,gBAAgB;GAChB;GACA,cAAc,MAAM;EACtB,CAAC;EAEP,IAAI;EACJ,IAAI,qBAAqB,iBAAiB;GACxC,MAAM,qBAAqB,sBAAsB;IAC/C,SAAS;IACT,YAAY;IACZ,SAAS,MAAM;IACf,GAAI,OAAO,oBAAoB,aAC3B,EAAE,WAAW,gBAAgB,IAC7B,EAAE,SAAS,gBAAgB;GACjC,CAAC;GACD,IAAI,mBAAmB,SAAS,GAC9B,cAAc,yBAAyB,oBAAoB,MAAM,YAAY;EAEjF;EAEA,OAAO;GACL;GACA,GAAI,YAAY,KAAA,KAAa,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;GACjE,GAAI,gBAAgB,KAAA,KAAa,YAAY,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;EAC/E;CACF,CAAC;AACH"}
|
|
@@ -1,43 +1,33 @@
|
|
|
1
1
|
const require_derive_distinct_labels = require("../../labels/derive_distinct_labels.cjs");
|
|
2
|
+
const require_columns_collection = require("../../columns/columns_collection.cjs");
|
|
3
|
+
const require_utils = require("../../columns/utils.cjs");
|
|
4
|
+
require("../../columns/index.cjs");
|
|
2
5
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
3
6
|
//#region src/components/PlDatasetSelector/enrichment_discovery.ts
|
|
4
7
|
/**
|
|
5
|
-
* True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —
|
|
6
|
-
* which the workflow can resolve via bquery. Local-form ids (`resolvePath`)
|
|
7
|
-
* fail this check and are excluded from auto-discovery; prerun/outputs hops
|
|
8
|
-
* must be supplied as resolved `{spec, data}` instead.
|
|
9
|
-
*/
|
|
10
|
-
function isGloballyAddressable(id) {
|
|
11
|
-
try {
|
|
12
|
-
const decoded = JSON.parse(id);
|
|
13
|
-
return typeof decoded === "object" && decoded !== null && decoded.__isRef === true && typeof decoded.blockId === "string" && typeof decoded.name === "string";
|
|
14
|
-
} catch {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
8
|
* Linker-reached hits attached to the anchor primary. Drops zero-hop variants
|
|
20
9
|
* (filters / the primary itself) and structural hits (subset, linker, label
|
|
21
10
|
* columns). Narrow further with `include` selectors or a `predicate`.
|
|
22
11
|
*/
|
|
23
|
-
function findEnrichmentColumns(
|
|
24
|
-
const include = options
|
|
25
|
-
const
|
|
12
|
+
function findEnrichmentColumns(options) {
|
|
13
|
+
const include = options.include === void 0 ? void 0 : Array.isArray(options.include) ? options.include : [options.include];
|
|
14
|
+
const columns = require_columns_collection.ColumnsCollection([...options.sources], { driver: options.driver }).discover({
|
|
15
|
+
anchors: { main: options.anchorSpec },
|
|
26
16
|
mode: "enrichment",
|
|
27
|
-
maxHops: options
|
|
17
|
+
maxHops: options.maxHops ?? 4,
|
|
28
18
|
include,
|
|
29
19
|
exclude: [
|
|
30
20
|
{ annotations: { [_milaboratories_pl_model_common.Annotation.IsSubset]: "true" } },
|
|
31
21
|
{ annotations: { [_milaboratories_pl_model_common.Annotation.IsLinkerColumn]: "true" } },
|
|
32
22
|
{ name: _milaboratories_pl_model_common.Annotation.Label }
|
|
33
23
|
]
|
|
34
|
-
});
|
|
35
|
-
const predicate = options
|
|
36
|
-
return
|
|
37
|
-
if ((v
|
|
38
|
-
if (predicate !== void 0 && !predicate(v.
|
|
39
|
-
if (!
|
|
40
|
-
if (v.
|
|
24
|
+
}).getColumns();
|
|
25
|
+
const predicate = options.predicate;
|
|
26
|
+
return columns.filter((v) => {
|
|
27
|
+
if (require_utils.isLeafColumn(v)) return false;
|
|
28
|
+
if (predicate !== void 0 && !predicate(v.getSpec())) return false;
|
|
29
|
+
if (!(0, _milaboratories_pl_model_common.isGlobalPObjectId)((0, _milaboratories_pl_model_common.extractPObjectId)(v.id))) return false;
|
|
30
|
+
if (require_utils.collectLinkerIds(v).some((id) => !(0, _milaboratories_pl_model_common.isGlobalPObjectId)(id))) return false;
|
|
41
31
|
return true;
|
|
42
32
|
});
|
|
43
33
|
}
|
|
@@ -48,20 +38,25 @@ function findEnrichmentColumns(collection, options) {
|
|
|
48
38
|
*/
|
|
49
39
|
function enrichmentVariantsToRefs(variants, labelOptions) {
|
|
50
40
|
if (variants.length === 0) return [];
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
41
|
+
const linkerIdsByVariant = variants.map((v) => require_utils.collectLinkerIds(v));
|
|
42
|
+
const hitQualsByVariant = variants.map((v) => [...require_utils.hitQualifications(v)]);
|
|
43
|
+
const labels = require_derive_distinct_labels.deriveDistinctLabels(variants.map((variant, i) => ({
|
|
44
|
+
spec: variant.getSpec(),
|
|
45
|
+
linkerPath: require_utils.collectLinkerColumns(variant).map((linker) => ({ spec: linker.getSpec() })),
|
|
46
|
+
qualifications: {
|
|
47
|
+
forHit: hitQualsByVariant[i],
|
|
48
|
+
forQueries: require_utils.queriesQualifications(variant)
|
|
49
|
+
}
|
|
55
50
|
})), labelOptions);
|
|
56
51
|
return variants.map((variant, i) => {
|
|
57
|
-
const path =
|
|
52
|
+
const path = linkerIdsByVariant[i].length === 0 ? void 0 : linkerIdsByVariant[i].map((id) => ({
|
|
58
53
|
type: "linker",
|
|
59
|
-
linker:
|
|
54
|
+
linker: id
|
|
60
55
|
}));
|
|
61
56
|
return {
|
|
62
|
-
ref: (0, _milaboratories_pl_model_common.createEnrichmentRef)(variant.
|
|
57
|
+
ref: (0, _milaboratories_pl_model_common.createEnrichmentRef)((0, _milaboratories_pl_model_common.extractPObjectId)(variant.id), {
|
|
63
58
|
path,
|
|
64
|
-
qualifications:
|
|
59
|
+
qualifications: hitQualsByVariant[i]
|
|
65
60
|
}),
|
|
66
61
|
label: labels[i]
|
|
67
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrichment_discovery.cjs","names":["Annotation","deriveDistinctLabels"],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"enrichment_discovery.cjs","names":["ColumnsCollection","Annotation","isLeafColumn","collectLinkerIds","hitQualifications","deriveDistinctLabels","collectLinkerColumns","queriesQualifications"],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import {\n Annotation,\n createEnrichmentRef,\n extractPObjectId,\n isGlobalPObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n ColumnsCollectionDriverModel,\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PColumnSpec,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type { ColumnRecipe, ColumnsSource } from \"../../columns\";\nimport {\n isLeafColumn,\n ColumnsCollection,\n collectLinkerIds,\n hitQualifications,\n collectLinkerColumns,\n queriesQualifications,\n} from \"../../columns\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\nexport interface FindEnrichmentColumnsOptions {\n sources: ReadonlyArray<ColumnsSource>;\n anchorSpec: PColumnSpec;\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n /** Override the resolved `columnsCollection` service (primarily for tests). */\n driver?: ColumnsCollectionDriverModel;\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(options: FindEnrichmentColumnsOptions): ColumnRecipe[] {\n const include =\n options.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n\n const columns = ColumnsCollection([...options.sources], { driver: options.driver })\n .discover({\n anchors: { main: options.anchorSpec },\n mode: \"enrichment\",\n maxHops: options.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n })\n .getColumns();\n\n const predicate = options.predicate;\n return columns.filter((v) => {\n if (isLeafColumn(v)) return false;\n if (predicate !== undefined && !predicate(v.getSpec())) return false;\n if (!isGlobalPObjectId(extractPObjectId(v.id))) return false;\n if (collectLinkerIds(v).some((id) => !isGlobalPObjectId(id))) return false;\n return true;\n });\n}\n\n/**\n * Pair each variant with a path-disambiguated label (so export headers stay\n * unique) and carry hit/linker `PObjectId`s through verbatim. Propagates\n * `qualifications.forHit`; `forQueries` is re-derived by the table builder.\n */\nexport function enrichmentVariantsToRefs(\n variants: ColumnRecipe[],\n labelOptions?: DeriveLabelsOptions,\n): LabeledEnrichmentRefs {\n if (variants.length === 0) return [];\n\n const linkerIdsByVariant = variants.map((v) => collectLinkerIds(v));\n const hitQualsByVariant = variants.map((v) => [...hitQualifications(v)]);\n\n const entries: Entry[] = variants.map((variant, i) => ({\n spec: variant.getSpec(),\n linkerPath: collectLinkerColumns(variant).map((linker) => ({ spec: linker.getSpec() })),\n qualifications: {\n forHit: hitQualsByVariant[i],\n forQueries: queriesQualifications(variant),\n },\n }));\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return variants.map((variant, i): LabeledEnrichmentRef => {\n const path: undefined | EnrichmentStep[] =\n linkerIdsByVariant[i].length === 0\n ? undefined\n : linkerIdsByVariant[i].map((id) => ({ type: \"linker\", linker: id }));\n return {\n ref: createEnrichmentRef(extractPObjectId(variant.id), {\n path,\n qualifications: hitQualsByVariant[i],\n }),\n label: labels[i],\n };\n });\n}\n"],"mappings":";;;;;;;;;;;AA6CA,SAAgB,sBAAsB,SAAuD;CAC3F,MAAM,UACJ,QAAQ,YAAY,KAAA,IAChB,KAAA,IACA,MAAM,QAAQ,QAAQ,OAAO,IAC3B,QAAQ,UACR,CAAC,QAAQ,OAAO;CAExB,MAAM,UAAUA,2BAAAA,kBAAkB,CAAC,GAAG,QAAQ,OAAO,GAAG,EAAE,QAAQ,QAAQ,OAAO,CAAC,CAAC,CAChF,SAAS;EACR,SAAS,EAAE,MAAM,QAAQ,WAAW;EACpC,MAAM;EACN,SAAS,QAAQ,WAAW;EAC5B;EACA,SAAS;GACP,EAAE,aAAa,GAAGC,gCAAAA,WAAW,WAAW,OAAO,EAAE;GACjD,EAAE,aAAa,GAAGA,gCAAAA,WAAW,iBAAiB,OAAO,EAAE;GACvD,EAAE,MAAMA,gCAAAA,WAAW,MAAM;EAC3B;CACF,CAAC,CAAC,CACD,WAAW;CAEd,MAAM,YAAY,QAAQ;CAC1B,OAAO,QAAQ,QAAQ,MAAM;EAC3B,IAAIC,cAAAA,aAAa,CAAC,GAAG,OAAO;EAC5B,IAAI,cAAc,KAAA,KAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,OAAO;EAC/D,IAAI,EAAA,GAAA,gCAAA,kBAAA,EAAA,GAAA,gCAAA,iBAAA,CAAoC,EAAE,EAAE,CAAC,GAAG,OAAO;EACvD,IAAIC,cAAAA,iBAAiB,CAAC,CAAC,CAAC,MAAM,OAAO,EAAA,GAAA,gCAAA,kBAAA,CAAmB,EAAE,CAAC,GAAG,OAAO;EACrE,OAAO;CACT,CAAC;AACH;;;;;;AAOA,SAAgB,yBACd,UACA,cACuB;CACvB,IAAI,SAAS,WAAW,GAAG,OAAO,CAAC;CAEnC,MAAM,qBAAqB,SAAS,KAAK,MAAMA,cAAAA,iBAAiB,CAAC,CAAC;CAClE,MAAM,oBAAoB,SAAS,KAAK,MAAM,CAAC,GAAGC,cAAAA,kBAAkB,CAAC,CAAC,CAAC;CAUvE,MAAM,SAASC,+BAAAA,qBARU,SAAS,KAAK,SAAS,OAAO;EACrD,MAAM,QAAQ,QAAQ;EACtB,YAAYC,cAAAA,qBAAqB,OAAO,CAAC,CAAC,KAAK,YAAY,EAAE,MAAM,OAAO,QAAQ,EAAE,EAAE;EACtF,gBAAgB;GACd,QAAQ,kBAAkB;GAC1B,YAAYC,cAAAA,sBAAsB,OAAO;EAC3C;CACF,EAC0C,GAAG,YAAY;CAEzD,OAAO,SAAS,KAAK,SAAS,MAA4B;EACxD,MAAM,OACJ,mBAAmB,EAAE,CAAC,WAAW,IAC7B,KAAA,IACA,mBAAmB,EAAE,CAAC,KAAK,QAAQ;GAAE,MAAM;GAAU,QAAQ;EAAG,EAAE;EACxE,OAAO;GACL,MAAA,GAAA,gCAAA,oBAAA,EAAA,GAAA,gCAAA,iBAAA,CAA0C,QAAQ,EAAE,GAAG;IACrD;IACA,gBAAgB,kBAAkB;GACpC,CAAC;GACD,OAAO,OAAO;EAChB;CACF,CAAC;AACH"}
|
|
@@ -1,43 +1,33 @@
|
|
|
1
1
|
import { deriveDistinctLabels } from "../../labels/derive_distinct_labels.js";
|
|
2
|
-
import {
|
|
2
|
+
import { ColumnsCollection } from "../../columns/columns_collection.js";
|
|
3
|
+
import { collectLinkerColumns, collectLinkerIds, hitQualifications, isLeafColumn, queriesQualifications } from "../../columns/utils.js";
|
|
4
|
+
import "../../columns/index.js";
|
|
5
|
+
import { Annotation, createEnrichmentRef, extractPObjectId, isGlobalPObjectId } from "@milaboratories/pl-model-common";
|
|
3
6
|
//#region src/components/PlDatasetSelector/enrichment_discovery.ts
|
|
4
7
|
/**
|
|
5
|
-
* True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —
|
|
6
|
-
* which the workflow can resolve via bquery. Local-form ids (`resolvePath`)
|
|
7
|
-
* fail this check and are excluded from auto-discovery; prerun/outputs hops
|
|
8
|
-
* must be supplied as resolved `{spec, data}` instead.
|
|
9
|
-
*/
|
|
10
|
-
function isGloballyAddressable(id) {
|
|
11
|
-
try {
|
|
12
|
-
const decoded = JSON.parse(id);
|
|
13
|
-
return typeof decoded === "object" && decoded !== null && decoded.__isRef === true && typeof decoded.blockId === "string" && typeof decoded.name === "string";
|
|
14
|
-
} catch {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
8
|
* Linker-reached hits attached to the anchor primary. Drops zero-hop variants
|
|
20
9
|
* (filters / the primary itself) and structural hits (subset, linker, label
|
|
21
10
|
* columns). Narrow further with `include` selectors or a `predicate`.
|
|
22
11
|
*/
|
|
23
|
-
function findEnrichmentColumns(
|
|
24
|
-
const include = options
|
|
25
|
-
const
|
|
12
|
+
function findEnrichmentColumns(options) {
|
|
13
|
+
const include = options.include === void 0 ? void 0 : Array.isArray(options.include) ? options.include : [options.include];
|
|
14
|
+
const columns = ColumnsCollection([...options.sources], { driver: options.driver }).discover({
|
|
15
|
+
anchors: { main: options.anchorSpec },
|
|
26
16
|
mode: "enrichment",
|
|
27
|
-
maxHops: options
|
|
17
|
+
maxHops: options.maxHops ?? 4,
|
|
28
18
|
include,
|
|
29
19
|
exclude: [
|
|
30
20
|
{ annotations: { [Annotation.IsSubset]: "true" } },
|
|
31
21
|
{ annotations: { [Annotation.IsLinkerColumn]: "true" } },
|
|
32
22
|
{ name: Annotation.Label }
|
|
33
23
|
]
|
|
34
|
-
});
|
|
35
|
-
const predicate = options
|
|
36
|
-
return
|
|
37
|
-
if ((v
|
|
38
|
-
if (predicate !== void 0 && !predicate(v.
|
|
39
|
-
if (!
|
|
40
|
-
if (v.
|
|
24
|
+
}).getColumns();
|
|
25
|
+
const predicate = options.predicate;
|
|
26
|
+
return columns.filter((v) => {
|
|
27
|
+
if (isLeafColumn(v)) return false;
|
|
28
|
+
if (predicate !== void 0 && !predicate(v.getSpec())) return false;
|
|
29
|
+
if (!isGlobalPObjectId(extractPObjectId(v.id))) return false;
|
|
30
|
+
if (collectLinkerIds(v).some((id) => !isGlobalPObjectId(id))) return false;
|
|
41
31
|
return true;
|
|
42
32
|
});
|
|
43
33
|
}
|
|
@@ -48,20 +38,25 @@ function findEnrichmentColumns(collection, options) {
|
|
|
48
38
|
*/
|
|
49
39
|
function enrichmentVariantsToRefs(variants, labelOptions) {
|
|
50
40
|
if (variants.length === 0) return [];
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
41
|
+
const linkerIdsByVariant = variants.map((v) => collectLinkerIds(v));
|
|
42
|
+
const hitQualsByVariant = variants.map((v) => [...hitQualifications(v)]);
|
|
43
|
+
const labels = deriveDistinctLabels(variants.map((variant, i) => ({
|
|
44
|
+
spec: variant.getSpec(),
|
|
45
|
+
linkerPath: collectLinkerColumns(variant).map((linker) => ({ spec: linker.getSpec() })),
|
|
46
|
+
qualifications: {
|
|
47
|
+
forHit: hitQualsByVariant[i],
|
|
48
|
+
forQueries: queriesQualifications(variant)
|
|
49
|
+
}
|
|
55
50
|
})), labelOptions);
|
|
56
51
|
return variants.map((variant, i) => {
|
|
57
|
-
const path =
|
|
52
|
+
const path = linkerIdsByVariant[i].length === 0 ? void 0 : linkerIdsByVariant[i].map((id) => ({
|
|
58
53
|
type: "linker",
|
|
59
|
-
linker:
|
|
54
|
+
linker: id
|
|
60
55
|
}));
|
|
61
56
|
return {
|
|
62
|
-
ref: createEnrichmentRef(variant.
|
|
57
|
+
ref: createEnrichmentRef(extractPObjectId(variant.id), {
|
|
63
58
|
path,
|
|
64
|
-
qualifications:
|
|
59
|
+
qualifications: hitQualsByVariant[i]
|
|
65
60
|
}),
|
|
66
61
|
label: labels[i]
|
|
67
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrichment_discovery.js","names":[],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"enrichment_discovery.js","names":[],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import {\n Annotation,\n createEnrichmentRef,\n extractPObjectId,\n isGlobalPObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n ColumnsCollectionDriverModel,\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PColumnSpec,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type { ColumnRecipe, ColumnsSource } from \"../../columns\";\nimport {\n isLeafColumn,\n ColumnsCollection,\n collectLinkerIds,\n hitQualifications,\n collectLinkerColumns,\n queriesQualifications,\n} from \"../../columns\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\nexport interface FindEnrichmentColumnsOptions {\n sources: ReadonlyArray<ColumnsSource>;\n anchorSpec: PColumnSpec;\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n /** Override the resolved `columnsCollection` service (primarily for tests). */\n driver?: ColumnsCollectionDriverModel;\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(options: FindEnrichmentColumnsOptions): ColumnRecipe[] {\n const include =\n options.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n\n const columns = ColumnsCollection([...options.sources], { driver: options.driver })\n .discover({\n anchors: { main: options.anchorSpec },\n mode: \"enrichment\",\n maxHops: options.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n })\n .getColumns();\n\n const predicate = options.predicate;\n return columns.filter((v) => {\n if (isLeafColumn(v)) return false;\n if (predicate !== undefined && !predicate(v.getSpec())) return false;\n if (!isGlobalPObjectId(extractPObjectId(v.id))) return false;\n if (collectLinkerIds(v).some((id) => !isGlobalPObjectId(id))) return false;\n return true;\n });\n}\n\n/**\n * Pair each variant with a path-disambiguated label (so export headers stay\n * unique) and carry hit/linker `PObjectId`s through verbatim. Propagates\n * `qualifications.forHit`; `forQueries` is re-derived by the table builder.\n */\nexport function enrichmentVariantsToRefs(\n variants: ColumnRecipe[],\n labelOptions?: DeriveLabelsOptions,\n): LabeledEnrichmentRefs {\n if (variants.length === 0) return [];\n\n const linkerIdsByVariant = variants.map((v) => collectLinkerIds(v));\n const hitQualsByVariant = variants.map((v) => [...hitQualifications(v)]);\n\n const entries: Entry[] = variants.map((variant, i) => ({\n spec: variant.getSpec(),\n linkerPath: collectLinkerColumns(variant).map((linker) => ({ spec: linker.getSpec() })),\n qualifications: {\n forHit: hitQualsByVariant[i],\n forQueries: queriesQualifications(variant),\n },\n }));\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return variants.map((variant, i): LabeledEnrichmentRef => {\n const path: undefined | EnrichmentStep[] =\n linkerIdsByVariant[i].length === 0\n ? undefined\n : linkerIdsByVariant[i].map((id) => ({ type: \"linker\", linker: id }));\n return {\n ref: createEnrichmentRef(extractPObjectId(variant.id), {\n path,\n qualifications: hitQualsByVariant[i],\n }),\n label: labels[i],\n };\n });\n}\n"],"mappings":";;;;;;;;;;;AA6CA,SAAgB,sBAAsB,SAAuD;CAC3F,MAAM,UACJ,QAAQ,YAAY,KAAA,IAChB,KAAA,IACA,MAAM,QAAQ,QAAQ,OAAO,IAC3B,QAAQ,UACR,CAAC,QAAQ,OAAO;CAExB,MAAM,UAAU,kBAAkB,CAAC,GAAG,QAAQ,OAAO,GAAG,EAAE,QAAQ,QAAQ,OAAO,CAAC,CAAC,CAChF,SAAS;EACR,SAAS,EAAE,MAAM,QAAQ,WAAW;EACpC,MAAM;EACN,SAAS,QAAQ,WAAW;EAC5B;EACA,SAAS;GACP,EAAE,aAAa,GAAG,WAAW,WAAW,OAAO,EAAE;GACjD,EAAE,aAAa,GAAG,WAAW,iBAAiB,OAAO,EAAE;GACvD,EAAE,MAAM,WAAW,MAAM;EAC3B;CACF,CAAC,CAAC,CACD,WAAW;CAEd,MAAM,YAAY,QAAQ;CAC1B,OAAO,QAAQ,QAAQ,MAAM;EAC3B,IAAI,aAAa,CAAC,GAAG,OAAO;EAC5B,IAAI,cAAc,KAAA,KAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,OAAO;EAC/D,IAAI,CAAC,kBAAkB,iBAAiB,EAAE,EAAE,CAAC,GAAG,OAAO;EACvD,IAAI,iBAAiB,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,OAAO;EACrE,OAAO;CACT,CAAC;AACH;;;;;;AAOA,SAAgB,yBACd,UACA,cACuB;CACvB,IAAI,SAAS,WAAW,GAAG,OAAO,CAAC;CAEnC,MAAM,qBAAqB,SAAS,KAAK,MAAM,iBAAiB,CAAC,CAAC;CAClE,MAAM,oBAAoB,SAAS,KAAK,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;CAUvE,MAAM,SAAS,qBARU,SAAS,KAAK,SAAS,OAAO;EACrD,MAAM,QAAQ,QAAQ;EACtB,YAAY,qBAAqB,OAAO,CAAC,CAAC,KAAK,YAAY,EAAE,MAAM,OAAO,QAAQ,EAAE,EAAE;EACtF,gBAAgB;GACd,QAAQ,kBAAkB;GAC1B,YAAY,sBAAsB,OAAO;EAC3C;CACF,EAC0C,GAAG,YAAY;CAEzD,OAAO,SAAS,KAAK,SAAS,MAA4B;EACxD,MAAM,OACJ,mBAAmB,EAAE,CAAC,WAAW,IAC7B,KAAA,IACA,mBAAmB,EAAE,CAAC,KAAK,QAAQ;GAAE,MAAM;GAAU,QAAQ;EAAG,EAAE;EACxE,OAAO;GACL,KAAK,oBAAoB,iBAAiB,QAAQ,EAAE,GAAG;IACrD;IACA,gBAAgB,kBAAkB;GACpC,CAAC;GACD,OAAO,OAAO;EAChB;CACF,CAAC;AACH"}
|
|
@@ -1,35 +1,45 @@
|
|
|
1
1
|
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
2
|
const require_derive_distinct_labels = require("../../labels/derive_distinct_labels.cjs");
|
|
3
|
+
const require_columns_collection = require("../../columns/columns_collection.cjs");
|
|
4
|
+
const require_utils = require("../../columns/utils.cjs");
|
|
5
|
+
require("../../columns/index.cjs");
|
|
3
6
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
4
7
|
let canonicalize = require("canonicalize");
|
|
5
8
|
canonicalize = require_runtime.__toESM(canonicalize, 1);
|
|
6
9
|
//#region src/components/PlDatasetSelector/filter_discovery.ts
|
|
7
10
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
11
|
+
* Matches columns annotated `pl7.app/isSubset: "true"` whose axes ⊆ anchor axes.
|
|
12
|
+
*
|
|
13
|
+
* Filter-intent: only the dataset's own direct subset columns, no linker
|
|
14
|
+
* traversal — so this uses `.filter()` (pins `maxHops: 0`), not `.discover()`
|
|
15
|
+
* (which would default to 4 hops and surface subset columns from other,
|
|
16
|
+
* linker-reachable datasets). `.filter()` still applies the default
|
|
17
|
+
* `enrichment` matching mode (`allowFloatingHitAxes: false`), which enforces
|
|
18
|
+
* the axes-subset constraint. See `matchingModeToConstraints()`.
|
|
10
19
|
*/
|
|
11
|
-
function findFilterColumns(
|
|
12
|
-
return
|
|
13
|
-
|
|
20
|
+
function findFilterColumns(options) {
|
|
21
|
+
return require_columns_collection.ColumnsCollection([...options.sources], { driver: options.driver }).filter({
|
|
22
|
+
anchors: { main: options.anchorSpec },
|
|
14
23
|
include: { annotations: { [_milaboratories_pl_model_common.Annotation.IsSubset]: "true" } }
|
|
15
|
-
});
|
|
24
|
+
}).getColumns();
|
|
16
25
|
}
|
|
17
26
|
/**
|
|
18
|
-
* Derive
|
|
19
|
-
*
|
|
20
|
-
*
|
|
27
|
+
* Derive labeled options from filter column variants, for use in DatasetOption.filters.
|
|
28
|
+
*
|
|
29
|
+
* Entries whose column id has no PlRef in `refsByObjectId` are silently
|
|
30
|
+
* skipped — they cannot be exposed as user-selectable options.
|
|
21
31
|
*/
|
|
22
|
-
function filterMatchesToOptions(
|
|
23
|
-
if (
|
|
32
|
+
function filterMatchesToOptions(variants, options) {
|
|
33
|
+
if (variants.length === 0) return [];
|
|
24
34
|
const { refsByObjectId, datasetSpec, labelOptions } = options;
|
|
25
|
-
const entries =
|
|
26
|
-
const ref = refsByObjectId.get(
|
|
35
|
+
const entries = variants.flatMap((variant) => {
|
|
36
|
+
const ref = refsByObjectId.get((0, _milaboratories_pl_model_common.extractPObjectId)(variant.id));
|
|
27
37
|
if (ref === void 0) return [];
|
|
28
|
-
return
|
|
38
|
+
return [{
|
|
29
39
|
ref,
|
|
30
|
-
spec:
|
|
31
|
-
linkerPath: variant.
|
|
32
|
-
}
|
|
40
|
+
spec: variant.getSpec(),
|
|
41
|
+
linkerPath: require_utils.collectLinkerColumns(variant).map((linker) => ({ spec: linker.getSpec() }))
|
|
42
|
+
}];
|
|
33
43
|
});
|
|
34
44
|
const labels = require_derive_distinct_labels.deriveDistinctLabels([...entries, { spec: datasetSpec }], {
|
|
35
45
|
...labelOptions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_discovery.cjs","names":["Annotation","deriveDistinctLabels"],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"sourcesContent":["import { Annotation } from \"@milaboratories/pl-model-common\";\nimport type {
|
|
1
|
+
{"version":3,"file":"filter_discovery.cjs","names":["ColumnsCollection","Annotation","collectLinkerColumns","deriveDistinctLabels"],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"sourcesContent":["import { Annotation, extractPObjectId } from \"@milaboratories/pl-model-common\";\nimport type {\n ColumnsCollectionDriverModel,\n Option,\n PColumnSpec,\n PlRef,\n PObjectId,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport canonicalize from \"canonicalize\";\nimport type { ColumnRecipe, ColumnsSource } from \"../../columns\";\nimport { ColumnsCollection, collectLinkerColumns } from \"../../columns\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\nexport interface FindFilterColumnsOptions {\n sources: ReadonlyArray<ColumnsSource>;\n anchorSpec: PColumnSpec;\n /** Override the resolved `columnsCollection` service (primarily for tests). */\n driver?: ColumnsCollectionDriverModel;\n}\n\n/**\n * Matches columns annotated `pl7.app/isSubset: \"true\"` whose axes ⊆ anchor axes.\n *\n * Filter-intent: only the dataset's own direct subset columns, no linker\n * traversal — so this uses `.filter()` (pins `maxHops: 0`), not `.discover()`\n * (which would default to 4 hops and surface subset columns from other,\n * linker-reachable datasets). `.filter()` still applies the default\n * `enrichment` matching mode (`allowFloatingHitAxes: false`), which enforces\n * the axes-subset constraint. See `matchingModeToConstraints()`.\n */\nexport function findFilterColumns(options: FindFilterColumnsOptions): ColumnRecipe[] {\n return ColumnsCollection([...options.sources], { driver: options.driver })\n .filter({\n anchors: { main: options.anchorSpec },\n include: { annotations: { [Annotation.IsSubset]: \"true\" } },\n })\n .getColumns();\n}\n\nexport type FilterMatchOptions = {\n /** Maps result-pool column id back to its source PlRef (see {@link buildRefMap}). */\n refsByObjectId: ReadonlyMap<PObjectId, PlRef>;\n /** Spec of the dataset the filters are subsets of. */\n datasetSpec: PObjectSpec;\n /**\n * Forwarded to `deriveDistinctLabels`. Any `formatters.native` caller\n * sets is silently overridden — the function relies on a no-op native\n * formatter to keep the algorithm from short-circuiting on filters'\n * inherited `pl7.app/label`.\n */\n labelOptions?: DeriveLabelsOptions;\n};\n\n/**\n * Derive labeled options from filter column variants, for use in DatasetOption.filters.\n *\n * Entries whose column id has no PlRef in `refsByObjectId` are silently\n * skipped — they cannot be exposed as user-selectable options.\n */\nexport function filterMatchesToOptions(\n variants: ColumnRecipe[],\n options: FilterMatchOptions,\n): Option[] {\n if (variants.length === 0) return [];\n\n const { refsByObjectId, datasetSpec, labelOptions } = options;\n\n // One Option per variant — `deriveDistinctLabels` disambiguates labels by\n // path. All variants of the same column share a terminal PObjectId, so the\n // ref lookup happens once per variant.\n const entries: (Entry & { ref: PlRef })[] = variants.flatMap((variant) => {\n const ref = refsByObjectId.get(extractPObjectId(variant.id));\n if (ref === undefined) return [];\n return [\n {\n ref,\n spec: variant.getSpec(),\n linkerPath: collectLinkerColumns(variant).map((linker) => ({ spec: linker.getSpec() })),\n },\n ];\n });\n\n // Appending the dataset forces a discriminating trace step into every\n // filter label (yielding e.g. \"Bulk / Top 10\"); the dataset's own label\n // is dropped because we only zip `entries`. Native label is force-\n // suppressed (the override sits after caller's spread) — filters\n // inherit the dataset's `pl7.app/label` and would otherwise satisfy\n // uniqueness before any trace step is consulted.\n const labels = deriveDistinctLabels([...entries, { spec: datasetSpec }], {\n ...labelOptions,\n formatters: { ...labelOptions?.formatters, native: () => undefined },\n });\n\n return entries.map(({ ref }, i) => ({ ref, label: labels[i] }));\n}\n\n/** Build the `refsByObjectId` map from `ctx.resultPool.getSpecs().entries`. */\nexport function buildRefMap(entries: readonly { readonly ref: PlRef }[]): Map<PObjectId, PlRef> {\n return new Map(entries.map((e) => [canonicalize(e.ref)! as PObjectId, e.ref]));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,kBAAkB,SAAmD;CACnF,OAAOA,2BAAAA,kBAAkB,CAAC,GAAG,QAAQ,OAAO,GAAG,EAAE,QAAQ,QAAQ,OAAO,CAAC,CAAC,CACvE,OAAO;EACN,SAAS,EAAE,MAAM,QAAQ,WAAW;EACpC,SAAS,EAAE,aAAa,GAAGC,gCAAAA,WAAW,WAAW,OAAO,EAAE;CAC5D,CAAC,CAAC,CACD,WAAW;AAChB;;;;;;;AAsBA,SAAgB,uBACd,UACA,SACU;CACV,IAAI,SAAS,WAAW,GAAG,OAAO,CAAC;CAEnC,MAAM,EAAE,gBAAgB,aAAa,iBAAiB;CAKtD,MAAM,UAAsC,SAAS,SAAS,YAAY;EACxE,MAAM,MAAM,eAAe,KAAA,GAAA,gCAAA,iBAAA,CAAqB,QAAQ,EAAE,CAAC;EAC3D,IAAI,QAAQ,KAAA,GAAW,OAAO,CAAC;EAC/B,OAAO,CACL;GACE;GACA,MAAM,QAAQ,QAAQ;GACtB,YAAYC,cAAAA,qBAAqB,OAAO,CAAC,CAAC,KAAK,YAAY,EAAE,MAAM,OAAO,QAAQ,EAAE,EAAE;EACxF,CACF;CACF,CAAC;CAQD,MAAM,SAASC,+BAAAA,qBAAqB,CAAC,GAAG,SAAS,EAAE,MAAM,YAAY,CAAC,GAAG;EACvE,GAAG;EACH,YAAY;GAAE,GAAG,cAAc;GAAY,cAAc,KAAA;EAAU;CACrE,CAAC;CAED,OAAO,QAAQ,KAAK,EAAE,OAAO,OAAO;EAAE;EAAK,OAAO,OAAO;CAAG,EAAE;AAChE;;AAGA,SAAgB,YAAY,SAAoE;CAC9F,OAAO,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAA,GAAA,aAAA,QAAA,CAAc,EAAE,GAAG,GAAiB,EAAE,GAAG,CAAC,CAAC;AAC/E"}
|
|
@@ -1,13 +1,26 @@
|
|
|
1
|
-
import { AnchoredColumnCollection, ColumnMatch } from "../../columns/column_collection_builder.js";
|
|
2
1
|
import { DeriveLabelsOptions } from "../../labels/derive_distinct_labels.js";
|
|
3
|
-
import {
|
|
2
|
+
import { ColumnRecipe } from "../../columns/column_recipes/index.js";
|
|
3
|
+
import { ColumnsSource } from "../../columns/column_providers/types.js";
|
|
4
|
+
import { ColumnsCollectionDriverModel, Option, PColumnSpec, PObjectId, PObjectSpec, PlRef } from "@milaboratories/pl-model-common";
|
|
4
5
|
|
|
5
6
|
//#region src/components/PlDatasetSelector/filter_discovery.d.ts
|
|
7
|
+
interface FindFilterColumnsOptions {
|
|
8
|
+
sources: ReadonlyArray<ColumnsSource>;
|
|
9
|
+
anchorSpec: PColumnSpec;
|
|
10
|
+
/** Override the resolved `columnsCollection` service (primarily for tests). */
|
|
11
|
+
driver?: ColumnsCollectionDriverModel;
|
|
12
|
+
}
|
|
6
13
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
14
|
+
* Matches columns annotated `pl7.app/isSubset: "true"` whose axes ⊆ anchor axes.
|
|
15
|
+
*
|
|
16
|
+
* Filter-intent: only the dataset's own direct subset columns, no linker
|
|
17
|
+
* traversal — so this uses `.filter()` (pins `maxHops: 0`), not `.discover()`
|
|
18
|
+
* (which would default to 4 hops and surface subset columns from other,
|
|
19
|
+
* linker-reachable datasets). `.filter()` still applies the default
|
|
20
|
+
* `enrichment` matching mode (`allowFloatingHitAxes: false`), which enforces
|
|
21
|
+
* the axes-subset constraint. See `matchingModeToConstraints()`.
|
|
9
22
|
*/
|
|
10
|
-
declare function findFilterColumns(
|
|
23
|
+
declare function findFilterColumns(options: FindFilterColumnsOptions): ColumnRecipe[];
|
|
11
24
|
type FilterMatchOptions = {
|
|
12
25
|
/** Maps result-pool column id back to its source PlRef (see {@link buildRefMap}). */refsByObjectId: ReadonlyMap<PObjectId, PlRef>; /** Spec of the dataset the filters are subsets of. */
|
|
13
26
|
datasetSpec: PObjectSpec;
|
|
@@ -20,15 +33,16 @@ type FilterMatchOptions = {
|
|
|
20
33
|
labelOptions?: DeriveLabelsOptions;
|
|
21
34
|
};
|
|
22
35
|
/**
|
|
23
|
-
* Derive
|
|
24
|
-
*
|
|
25
|
-
*
|
|
36
|
+
* Derive labeled options from filter column variants, for use in DatasetOption.filters.
|
|
37
|
+
*
|
|
38
|
+
* Entries whose column id has no PlRef in `refsByObjectId` are silently
|
|
39
|
+
* skipped — they cannot be exposed as user-selectable options.
|
|
26
40
|
*/
|
|
27
|
-
declare function filterMatchesToOptions(
|
|
41
|
+
declare function filterMatchesToOptions(variants: ColumnRecipe[], options: FilterMatchOptions): Option[];
|
|
28
42
|
/** Build the `refsByObjectId` map from `ctx.resultPool.getSpecs().entries`. */
|
|
29
43
|
declare function buildRefMap(entries: readonly {
|
|
30
44
|
readonly ref: PlRef;
|
|
31
45
|
}[]): Map<PObjectId, PlRef>;
|
|
32
46
|
//#endregion
|
|
33
|
-
export { FilterMatchOptions, buildRefMap, filterMatchesToOptions, findFilterColumns };
|
|
47
|
+
export { FilterMatchOptions, FindFilterColumnsOptions, buildRefMap, filterMatchesToOptions, findFilterColumns };
|
|
34
48
|
//# sourceMappingURL=filter_discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_discovery.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter_discovery.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"mappings":";;;;;;UAkBiB,wBAAA;EACf,OAAA,EAAS,aAAA,CAAc,aAAA;EACvB,UAAA,EAAY,WAAA;;EAEZ,MAAA,GAAS,4BAAA;AAAA;;;;;;;;;;;iBAaK,iBAAA,CAAkB,OAAA,EAAS,wBAAA,GAA2B,YAAY;AAAA,KAStE,kBAAA;EAtBV,qFAwBA,cAAA,EAAgB,WAAA,CAAY,SAAA,EAAW,KAAA,GAxBF;EA0BrC,WAAA,EAAa,WAAA;EAbC;;;;;;EAoBd,YAAA,GAAe,mBAAA;AAAA;AApBiE;AASlF;;;;;AATkF,iBA6BlE,sBAAA,CACd,QAAA,EAAU,YAAA,IACV,OAAA,EAAS,kBAAA,GACR,MAAA;;iBAmCa,WAAA,CAAY,OAAA;EAAA,SAA6B,GAAA,EAAK,KAAA;AAAA,MAAY,GAAA,CAAI,SAAA,EAAW,KAAA"}
|
|
@@ -1,33 +1,43 @@
|
|
|
1
1
|
import { deriveDistinctLabels } from "../../labels/derive_distinct_labels.js";
|
|
2
|
-
import {
|
|
2
|
+
import { ColumnsCollection } from "../../columns/columns_collection.js";
|
|
3
|
+
import { collectLinkerColumns } from "../../columns/utils.js";
|
|
4
|
+
import "../../columns/index.js";
|
|
5
|
+
import { Annotation, extractPObjectId } from "@milaboratories/pl-model-common";
|
|
3
6
|
import canonicalize from "canonicalize";
|
|
4
7
|
//#region src/components/PlDatasetSelector/filter_discovery.ts
|
|
5
8
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
9
|
+
* Matches columns annotated `pl7.app/isSubset: "true"` whose axes ⊆ anchor axes.
|
|
10
|
+
*
|
|
11
|
+
* Filter-intent: only the dataset's own direct subset columns, no linker
|
|
12
|
+
* traversal — so this uses `.filter()` (pins `maxHops: 0`), not `.discover()`
|
|
13
|
+
* (which would default to 4 hops and surface subset columns from other,
|
|
14
|
+
* linker-reachable datasets). `.filter()` still applies the default
|
|
15
|
+
* `enrichment` matching mode (`allowFloatingHitAxes: false`), which enforces
|
|
16
|
+
* the axes-subset constraint. See `matchingModeToConstraints()`.
|
|
8
17
|
*/
|
|
9
|
-
function findFilterColumns(
|
|
10
|
-
return
|
|
11
|
-
|
|
18
|
+
function findFilterColumns(options) {
|
|
19
|
+
return ColumnsCollection([...options.sources], { driver: options.driver }).filter({
|
|
20
|
+
anchors: { main: options.anchorSpec },
|
|
12
21
|
include: { annotations: { [Annotation.IsSubset]: "true" } }
|
|
13
|
-
});
|
|
22
|
+
}).getColumns();
|
|
14
23
|
}
|
|
15
24
|
/**
|
|
16
|
-
* Derive
|
|
17
|
-
*
|
|
18
|
-
*
|
|
25
|
+
* Derive labeled options from filter column variants, for use in DatasetOption.filters.
|
|
26
|
+
*
|
|
27
|
+
* Entries whose column id has no PlRef in `refsByObjectId` are silently
|
|
28
|
+
* skipped — they cannot be exposed as user-selectable options.
|
|
19
29
|
*/
|
|
20
|
-
function filterMatchesToOptions(
|
|
21
|
-
if (
|
|
30
|
+
function filterMatchesToOptions(variants, options) {
|
|
31
|
+
if (variants.length === 0) return [];
|
|
22
32
|
const { refsByObjectId, datasetSpec, labelOptions } = options;
|
|
23
|
-
const entries =
|
|
24
|
-
const ref = refsByObjectId.get(
|
|
33
|
+
const entries = variants.flatMap((variant) => {
|
|
34
|
+
const ref = refsByObjectId.get(extractPObjectId(variant.id));
|
|
25
35
|
if (ref === void 0) return [];
|
|
26
|
-
return
|
|
36
|
+
return [{
|
|
27
37
|
ref,
|
|
28
|
-
spec:
|
|
29
|
-
linkerPath: variant.
|
|
30
|
-
}
|
|
38
|
+
spec: variant.getSpec(),
|
|
39
|
+
linkerPath: collectLinkerColumns(variant).map((linker) => ({ spec: linker.getSpec() }))
|
|
40
|
+
}];
|
|
31
41
|
});
|
|
32
42
|
const labels = deriveDistinctLabels([...entries, { spec: datasetSpec }], {
|
|
33
43
|
...labelOptions,
|