@platforma-sdk/model 1.79.24 → 1.80.0
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 +9 -7
- 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,184 @@
|
|
|
1
|
+
import {
|
|
2
|
+
applyAxisFilters,
|
|
3
|
+
stringifyColumnFilteredId,
|
|
4
|
+
type AxisFilterByIdx,
|
|
5
|
+
type AxisSpec,
|
|
6
|
+
type ColumnFilteredId,
|
|
7
|
+
type ColumnFilteredKey,
|
|
8
|
+
type PColumnSpec,
|
|
9
|
+
type PObjectId,
|
|
10
|
+
type SingleAxisSelector,
|
|
11
|
+
type SpecOverrides,
|
|
12
|
+
type SpecQuery,
|
|
13
|
+
} from "@milaboratories/pl-model-common";
|
|
14
|
+
import type { GlobalCfgRenderCtx } from "../../render/internal";
|
|
15
|
+
import type { ColumnFieldStatus, ColumnResolutionStatus } from "./types";
|
|
16
|
+
import { ColumnRecipe } from "./index";
|
|
17
|
+
import { ColumnOverriddenRecipe } from "./column_overrided_recipe";
|
|
18
|
+
import { rebrandLeafId } from "./leaf_rebrand";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Recipe wrapper that fixes the values of selected axes of an inner recipe
|
|
22
|
+
* (axis slicing). The id is `FilteredPColumnId { source: inner.id,
|
|
23
|
+
* axisFilters }`.
|
|
24
|
+
*
|
|
25
|
+
* Flat-merge invariant: `inner` is never another {@link ColumnFilteredRecipe}.
|
|
26
|
+
* Repeated {@link wrap} concatenates `axisFilters` at the current level.
|
|
27
|
+
*
|
|
28
|
+
* Layering: `withSpecs` on a Filtered recipe yields
|
|
29
|
+
* `Overridden<Filtered<inner>>` — Overridden is always the outermost layer.
|
|
30
|
+
* The reverse layering (`Filtered<Overridden<...>>`) is not reachable via
|
|
31
|
+
* the public interface.
|
|
32
|
+
*/
|
|
33
|
+
export class ColumnFilteredRecipe implements ColumnRecipe<ColumnFilteredId> {
|
|
34
|
+
/**
|
|
35
|
+
* Wrap any recipe with axis filters. If `inner` is already a
|
|
36
|
+
* {@link ColumnFilteredRecipe}, concatenates `axisFilters` and returns a
|
|
37
|
+
* new Filtered sharing the original `inner`.
|
|
38
|
+
*
|
|
39
|
+
* Validates every axis index against `inner.getSpec().axesSpec` at
|
|
40
|
+
* construction — throws on an out-of-range index. After {@link wrap}, the
|
|
41
|
+
* recipe is guaranteed to be spec-complete.
|
|
42
|
+
*
|
|
43
|
+
* Order semantics: new filters are appended after existing ones, preserving
|
|
44
|
+
* their relative order. AND composition is otherwise commutative; order
|
|
45
|
+
* only affects canonicalize/equality.
|
|
46
|
+
*/
|
|
47
|
+
static wrap(col: ColumnRecipe, axisFilters: AxisFilterByIdx[]): ColumnFilteredRecipe {
|
|
48
|
+
const combined =
|
|
49
|
+
col instanceof ColumnFilteredRecipe ? [...col.axisFilters, ...axisFilters] : axisFilters;
|
|
50
|
+
const base = col instanceof ColumnFilteredRecipe ? col.inner : col;
|
|
51
|
+
|
|
52
|
+
if (combined.length === 0) {
|
|
53
|
+
throw new Error("ColumnFilteredRecipe.wrap: at least one axis filter must be provided");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const innerSpec = base.getSpec();
|
|
57
|
+
const fixed = new Set<number>();
|
|
58
|
+
for (const [idx] of combined) {
|
|
59
|
+
if (innerSpec.axesSpec[idx] === undefined) {
|
|
60
|
+
throw new Error(
|
|
61
|
+
`ColumnFilteredRecipe.wrap: axis index ${idx} out of range (inner has ${innerSpec.axesSpec.length} axes)`,
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
fixed.add(idx);
|
|
65
|
+
}
|
|
66
|
+
if (fixed.size >= innerSpec.axesSpec.length) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
`ColumnFilteredRecipe.wrap: filters fix all ${innerSpec.axesSpec.length} axes — at least one axis must remain`,
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return new ColumnFilteredRecipe(base, combined);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Static counterpart to {@link wrap}: returns the resolution status of a
|
|
77
|
+
* {@link ColumnFilteredKey} without constructing the recipe. Axis filters
|
|
78
|
+
* do not add references — status collapses to the source's status.
|
|
79
|
+
*/
|
|
80
|
+
static getStatusByKey(
|
|
81
|
+
key: ColumnFilteredKey,
|
|
82
|
+
opts: { ctx?: GlobalCfgRenderCtx } = {},
|
|
83
|
+
): ColumnResolutionStatus {
|
|
84
|
+
if (typeof key.source !== "string") {
|
|
85
|
+
throw new Error(
|
|
86
|
+
"ColumnFilteredRecipe.getStatusByKey: filtered column with non-string source",
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
return ColumnRecipe.getStatus(key.source, opts);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
readonly id: ColumnFilteredId;
|
|
93
|
+
private specCache?: { readonly value: PColumnSpec };
|
|
94
|
+
private queryCache?: { readonly value: SpecQuery };
|
|
95
|
+
private dataStatusCache?: { readonly value: ColumnFieldStatus };
|
|
96
|
+
|
|
97
|
+
private constructor(
|
|
98
|
+
private readonly inner: ColumnRecipe,
|
|
99
|
+
private readonly axisFilters: AxisFilterByIdx[],
|
|
100
|
+
) {
|
|
101
|
+
this.id = stringifyColumnFilteredId({
|
|
102
|
+
source: inner.id,
|
|
103
|
+
axisFilters,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Wrapped recipe — exposed so external walkers can descend. */
|
|
108
|
+
getInner(): ColumnRecipe {
|
|
109
|
+
return this.inner;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Axis filters do not introduce references to other columns. */
|
|
113
|
+
getReferencedIds(): PObjectId[] {
|
|
114
|
+
return this.inner.getReferencedIds();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
getDataStatus(): ColumnFieldStatus {
|
|
118
|
+
if (this.dataStatusCache === undefined) {
|
|
119
|
+
this.dataStatusCache = { value: this.inner.getDataStatus() };
|
|
120
|
+
}
|
|
121
|
+
return this.dataStatusCache.value;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Final spec — the inner spec with fixed axes removed. Indices in
|
|
126
|
+
* `axisFilters` are positional against `inner.getSpec().axesSpec` and were
|
|
127
|
+
* validated at {@link wrap} time.
|
|
128
|
+
*/
|
|
129
|
+
getSpec(): PColumnSpec {
|
|
130
|
+
if (this.specCache === undefined) {
|
|
131
|
+
this.specCache = { value: applyAxisFilters(this.inner.getSpec(), this.axisFilters) };
|
|
132
|
+
}
|
|
133
|
+
return this.specCache.value;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Wraps the inner query in `SpecQuerySliceAxes`. Index→selector resolution
|
|
138
|
+
* goes through the inner spec — guaranteed available since {@link wrap}
|
|
139
|
+
* validated all indices at construction.
|
|
140
|
+
*/
|
|
141
|
+
getQuery(): SpecQuery {
|
|
142
|
+
if (this.queryCache === undefined) {
|
|
143
|
+
const innerQuery = this.inner.getQuery();
|
|
144
|
+
if (this.axisFilters.length === 0) {
|
|
145
|
+
// Pass-through (no filters): rebrand the inner leaf to this.id so
|
|
146
|
+
// wrappers in the chain don't reintroduce the inner's id at the
|
|
147
|
+
// leaf — keeps the resolver/leaf-id contract uniform.
|
|
148
|
+
this.queryCache = { value: rebrandLeafId(innerQuery, this.inner.id, this.id) };
|
|
149
|
+
} else {
|
|
150
|
+
const innerSpec = this.inner.getSpec();
|
|
151
|
+
this.queryCache = {
|
|
152
|
+
value: {
|
|
153
|
+
type: "sliceAxes",
|
|
154
|
+
input: rebrandLeafId(innerQuery, this.inner.id, this.id),
|
|
155
|
+
axisFilters: this.axisFilters.map(([idx, value]) => ({
|
|
156
|
+
axisSelector: toAxisSelector(innerSpec.axesSpec[idx]),
|
|
157
|
+
constant: value,
|
|
158
|
+
})),
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return this.queryCache.value;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Filtered + overrides → Overridden<Filtered>. Overridden is always the
|
|
168
|
+
* outermost layer.
|
|
169
|
+
*/
|
|
170
|
+
withSpecs(overrides: SpecOverrides): ColumnRecipe {
|
|
171
|
+
return ColumnOverriddenRecipe.wrap(this, overrides);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function toAxisSelector(axis: AxisSpec): SingleAxisSelector {
|
|
176
|
+
const selector: SingleAxisSelector = { name: axis.name, type: axis.type };
|
|
177
|
+
if (axis.domain !== undefined && Object.keys(axis.domain).length > 0) {
|
|
178
|
+
selector.domain = axis.domain;
|
|
179
|
+
}
|
|
180
|
+
if (axis.contextDomain !== undefined && Object.keys(axis.contextDomain).length > 0) {
|
|
181
|
+
selector.contextDomain = axis.contextDomain;
|
|
182
|
+
}
|
|
183
|
+
return selector;
|
|
184
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import {
|
|
2
|
+
applySpecOverrides,
|
|
3
|
+
createColumnOverriddenId,
|
|
4
|
+
mergeSpecOverrides,
|
|
5
|
+
type ColumnOverriddenId,
|
|
6
|
+
type ColumnOverriddenKey,
|
|
7
|
+
type ColumnUniversalId,
|
|
8
|
+
type PColumnSpec,
|
|
9
|
+
type PObjectId,
|
|
10
|
+
type SpecOverrides,
|
|
11
|
+
type SpecQuery,
|
|
12
|
+
} from "@milaboratories/pl-model-common";
|
|
13
|
+
import type { GlobalCfgRenderCtx } from "../../render/internal";
|
|
14
|
+
import type { ColumnFieldStatus, ColumnResolutionStatus } from "./types";
|
|
15
|
+
import { ColumnRecipe } from "./index";
|
|
16
|
+
import { Column } from "../column";
|
|
17
|
+
import { rebrandLeafId } from "./leaf_rebrand";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A recipe whose id is not an Overridden wrap — valid `source` for Overridden.
|
|
21
|
+
* Mirrors the spec-level invariant on {@link ColumnOverriddenKey.source}.
|
|
22
|
+
*/
|
|
23
|
+
type NonOverriddenColumn = Column<Exclude<ColumnUniversalId, ColumnOverriddenId>>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Recipe wrapper that overlays {@link SpecOverrides} on top of any other
|
|
27
|
+
* recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.
|
|
28
|
+
*
|
|
29
|
+
* Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.
|
|
30
|
+
* Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge
|
|
31
|
+
* `specOverrides` at the current level and keep wrapper depth constant.
|
|
32
|
+
*
|
|
33
|
+
* This invariant matches the one enforced inside `unwrapOverrides` from
|
|
34
|
+
* pl-model-common: it explicitly throws on a nested override-wrap.
|
|
35
|
+
*/
|
|
36
|
+
export class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {
|
|
37
|
+
/**
|
|
38
|
+
* Wrap any recipe with overrides. If `inner` is already a
|
|
39
|
+
* {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones
|
|
40
|
+
* and returns a new Overridden sharing the original `inner`. No
|
|
41
|
+
* `Overridden<Overridden<X>>` is produced.
|
|
42
|
+
*/
|
|
43
|
+
static wrap(col: Column, overrides: SpecOverrides): ColumnOverriddenRecipe {
|
|
44
|
+
if (col instanceof ColumnOverriddenRecipe) {
|
|
45
|
+
return new ColumnOverriddenRecipe(col.inner, mergeSpecOverrides(col.overrides, overrides));
|
|
46
|
+
}
|
|
47
|
+
// `inner` is not an Overridden wrap (the `instanceof` branch above handles
|
|
48
|
+
// that). Narrow the id union here so the constructor parameter stays
|
|
49
|
+
// honest with `ColumnOverriddenKey.source`.
|
|
50
|
+
return new ColumnOverriddenRecipe(col as NonOverriddenColumn, overrides);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Static counterpart to {@link wrap}: returns the resolution status of a
|
|
55
|
+
* {@link ColumnOverriddenKey} without constructing the recipe. Overrides
|
|
56
|
+
* do not add references — status collapses to the source's status.
|
|
57
|
+
*/
|
|
58
|
+
static getStatusByKey(
|
|
59
|
+
key: ColumnOverriddenKey,
|
|
60
|
+
opts: { ctx?: GlobalCfgRenderCtx } = {},
|
|
61
|
+
): ColumnResolutionStatus {
|
|
62
|
+
return ColumnRecipe.getStatus(key.source, opts);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
readonly id: ColumnOverriddenId;
|
|
66
|
+
private specCache?: { readonly value: PColumnSpec };
|
|
67
|
+
private queryCache?: { readonly value: SpecQuery };
|
|
68
|
+
private dataStatusCache?: { readonly value: ColumnFieldStatus };
|
|
69
|
+
|
|
70
|
+
private constructor(
|
|
71
|
+
private readonly inner: NonOverriddenColumn,
|
|
72
|
+
private readonly overrides: SpecOverrides,
|
|
73
|
+
) {
|
|
74
|
+
this.id = createColumnOverriddenId({
|
|
75
|
+
source: inner.id,
|
|
76
|
+
specOverrides: overrides,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Wrapped recipe — exposed so external walkers can descend. */
|
|
81
|
+
getInner(): Column {
|
|
82
|
+
return this.inner;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* `inner` owns all references; overrides are a pure spec patch and do not
|
|
87
|
+
* introduce new column refs.
|
|
88
|
+
*/
|
|
89
|
+
getReferencedIds(): PObjectId[] {
|
|
90
|
+
return this.inner.getReferencedIds();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
getDataStatus(): ColumnFieldStatus {
|
|
94
|
+
if (this.dataStatusCache === undefined) {
|
|
95
|
+
this.dataStatusCache = { value: this.inner.getDataStatus() };
|
|
96
|
+
}
|
|
97
|
+
return this.dataStatusCache.value;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Take the inner spec and overlay our overrides. `applySpecOverrides`
|
|
102
|
+
* extracts the overrides from `this.id` itself.
|
|
103
|
+
*/
|
|
104
|
+
getSpec(): PColumnSpec {
|
|
105
|
+
if (this.specCache === undefined) {
|
|
106
|
+
this.specCache = { value: applySpecOverrides(this.inner.getSpec(), this.id) };
|
|
107
|
+
}
|
|
108
|
+
return this.specCache.value;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Emit a client-side `specOverride` node wrapping the inner query.
|
|
113
|
+
*
|
|
114
|
+
* This is a structural-but-collapsible node: it carries the override
|
|
115
|
+
* patch through the query tree so consumers see the full recipe shape,
|
|
116
|
+
* but it is collapsed at the host boundary (`resolvePColumn`) before
|
|
117
|
+
* the query reaches pframe-engine. The engine never sees this node.
|
|
118
|
+
*
|
|
119
|
+
* Overrides do not change query topology — they are a pure spec patch.
|
|
120
|
+
*/
|
|
121
|
+
getQuery(): SpecQuery {
|
|
122
|
+
if (this.queryCache === undefined) {
|
|
123
|
+
// Rebrand the inner column leaf to this.id (rich Overridden id) so
|
|
124
|
+
// filter/sort references emitted with this recipe's id match the
|
|
125
|
+
// leaf the engine sees. The specOverride node still wraps the leaf
|
|
126
|
+
// and is collapsed at the host boundary into a spec patch on the
|
|
127
|
+
// resolved PColumn.
|
|
128
|
+
this.queryCache = {
|
|
129
|
+
value: {
|
|
130
|
+
type: "specOverride",
|
|
131
|
+
input: rebrandLeafId(this.inner.getQuery(), this.inner.id, this.id),
|
|
132
|
+
override: this.overrides,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return this.queryCache.value;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Flat merge: new overrides merge with existing ones; `inner` is unchanged.
|
|
141
|
+
* The result is an Overridden of the same depth.
|
|
142
|
+
*/
|
|
143
|
+
withSpecs(overrides: SpecOverrides): Column {
|
|
144
|
+
return ColumnOverriddenRecipe.wrap(this, overrides);
|
|
145
|
+
}
|
|
146
|
+
}
|