@platforma-sdk/model 1.79.27 → 1.80.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/block_model.d.ts +2 -0
- package/dist/block_model.d.ts.map +1 -1
- package/dist/columns/column.cjs +28 -0
- package/dist/columns/column.cjs.map +1 -0
- package/dist/columns/column.d.ts +30 -0
- package/dist/columns/column.d.ts.map +1 -0
- package/dist/columns/column.js +27 -0
- package/dist/columns/column.js.map +1 -0
- package/dist/columns/column_lazy.cjs +248 -0
- package/dist/columns/column_lazy.cjs.map +1 -0
- package/dist/columns/column_lazy.d.ts +137 -0
- package/dist/columns/column_lazy.d.ts.map +1 -0
- package/dist/columns/column_lazy.js +245 -0
- package/dist/columns/column_lazy.js.map +1 -0
- package/dist/columns/column_providers/index.cjs +62 -0
- package/dist/columns/column_providers/index.cjs.map +1 -0
- package/dist/columns/column_providers/index.d.ts +30 -0
- package/dist/columns/column_providers/index.d.ts.map +1 -0
- package/dist/columns/column_providers/index.js +53 -0
- package/dist/columns/column_providers/index.js.map +1 -0
- package/dist/columns/column_providers/providers.cjs +123 -0
- package/dist/columns/column_providers/providers.cjs.map +1 -0
- package/dist/columns/column_providers/providers.d.ts +75 -0
- package/dist/columns/column_providers/providers.d.ts.map +1 -0
- package/dist/columns/column_providers/providers.js +118 -0
- package/dist/columns/column_providers/providers.js.map +1 -0
- package/dist/columns/column_providers/types.d.ts +23 -0
- package/dist/columns/column_providers/types.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.cjs +180 -0
- package/dist/columns/column_recipes/column_discovered_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.d.ts +120 -0
- package/dist/columns/column_recipes/column_discovered_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.js +180 -0
- package/dist/columns/column_recipes/column_discovered_recipe.js.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.cjs +133 -0
- package/dist/columns/column_recipes/column_filtered_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.d.ts +75 -0
- package/dist/columns/column_recipes/column_filtered_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.js +133 -0
- package/dist/columns/column_recipes/column_filtered_recipe.js.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.cjs +101 -0
- package/dist/columns/column_recipes/column_overrided_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts +73 -0
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.js +101 -0
- package/dist/columns/column_recipes/column_overrided_recipe.js.map +1 -0
- package/dist/columns/column_recipes/index.cjs +72 -0
- package/dist/columns/column_recipes/index.cjs.map +1 -0
- package/dist/columns/column_recipes/index.d.ts +52 -0
- package/dist/columns/column_recipes/index.d.ts.map +1 -0
- package/dist/columns/column_recipes/index.js +68 -0
- package/dist/columns/column_recipes/index.js.map +1 -0
- package/dist/columns/column_recipes/leaf_rebrand.cjs +22 -0
- package/dist/columns/column_recipes/leaf_rebrand.cjs.map +1 -0
- package/dist/columns/column_recipes/leaf_rebrand.js +22 -0
- package/dist/columns/column_recipes/leaf_rebrand.js.map +1 -0
- package/dist/columns/column_recipes/types.d.ts +101 -0
- package/dist/columns/column_recipes/types.d.ts.map +1 -0
- package/dist/columns/columns_collection.cjs +124 -0
- package/dist/columns/columns_collection.cjs.map +1 -0
- package/dist/columns/columns_collection.d.ts +64 -0
- package/dist/columns/columns_collection.d.ts.map +1 -0
- package/dist/columns/columns_collection.js +122 -0
- package/dist/columns/columns_collection.js.map +1 -0
- package/dist/columns/derive_axis_values_labels.cjs +76 -0
- package/dist/columns/derive_axis_values_labels.cjs.map +1 -0
- package/dist/columns/derive_axis_values_labels.d.ts +30 -0
- package/dist/columns/derive_axis_values_labels.d.ts.map +1 -0
- package/dist/columns/derive_axis_values_labels.js +76 -0
- package/dist/columns/derive_axis_values_labels.js.map +1 -0
- package/dist/columns/expand_by_partition.cjs +53 -56
- package/dist/columns/expand_by_partition.cjs.map +1 -1
- package/dist/columns/expand_by_partition.d.ts +22 -18
- package/dist/columns/expand_by_partition.d.ts.map +1 -1
- package/dist/columns/expand_by_partition.js +55 -58
- package/dist/columns/expand_by_partition.js.map +1 -1
- package/dist/columns/index.cjs +44 -18
- package/dist/columns/index.d.ts +15 -7
- package/dist/columns/index.js +12 -6
- package/dist/columns/utils.cjs +186 -0
- package/dist/columns/utils.cjs.map +1 -0
- package/dist/columns/utils.d.ts +96 -0
- package/dist/columns/utils.d.ts.map +1 -0
- package/dist/columns/utils.js +179 -0
- package/dist/columns/utils.js.map +1 -0
- package/dist/components/PFrameForGraphs.cjs +1 -0
- package/dist/components/PFrameForGraphs.cjs.map +1 -1
- package/dist/components/PFrameForGraphs.d.ts +1 -1
- package/dist/components/PFrameForGraphs.d.ts.map +1 -1
- package/dist/components/PFrameForGraphs.js +1 -0
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlDataTable/columnResolver.cjs +28 -0
- package/dist/components/PlDataTable/columnResolver.cjs.map +1 -0
- package/dist/components/PlDataTable/columnResolver.js +28 -0
- package/dist/components/PlDataTable/columnResolver.js.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +4 -2
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +4 -2
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +20 -25
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +20 -25
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +58 -26
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +60 -28
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +224 -194
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +13 -16
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +228 -198
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +40 -98
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +17 -8
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +40 -98
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js +2 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs +51 -169
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.js +52 -166
- package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
- package/dist/components/PlDataTable/index.cjs +1 -1
- package/dist/components/PlDataTable/index.d.ts +4 -4
- package/dist/components/PlDataTable/index.js +2 -2
- package/dist/components/PlDataTable/labels.cjs +0 -1
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js +0 -1
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +107 -10
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts +5 -4
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
- package/dist/components/PlDataTable/state-migration.js +107 -10
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV7.d.ts +1 -36
- package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV8.d.ts +123 -0
- package/dist/components/PlDataTable/typesV8.d.ts.map +1 -0
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs +27 -34
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.js +27 -34
- package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +28 -33
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.js +29 -34
- package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs +27 -17
- package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts +24 -10
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.js +28 -18
- package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/index.d.ts +2 -2
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.d.ts +5 -5
- package/dist/components/index.js +2 -2
- package/dist/filters/converters/filterToQuery.cjs +5 -6
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts +12 -3
- package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
- package/dist/filters/converters/filterToQuery.js +5 -6
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/index.d.ts +2 -2
- package/dist/filters/index.d.ts +2 -2
- package/dist/index.cjs +64 -35
- package/dist/index.d.ts +23 -15
- package/dist/index.js +15 -9
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.d.ts +1 -2
- package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
- package/dist/labels/derive_distinct_tooltips.d.ts +6 -3
- package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
- package/dist/labels/derive_distinct_tooltips.js +1 -1
- package/dist/labels/derive_distinct_tooltips.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/dist/pframe_utils/axes.cjs.map +1 -1
- package/dist/pframe_utils/axes.d.ts +2 -2
- package/dist/pframe_utils/axes.d.ts.map +1 -1
- package/dist/pframe_utils/axes.js.map +1 -1
- package/dist/pframe_utils/columns.cjs +6 -10
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts +4 -4
- package/dist/pframe_utils/columns.d.ts.map +1 -1
- package/dist/pframe_utils/columns.js +7 -11
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs.map +1 -1
- package/dist/pframe_utils/index.d.ts +1 -1
- package/dist/pframe_utils/index.d.ts.map +1 -1
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/render/accessor.cjs +15 -16
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts +7 -10
- package/dist/render/accessor.d.ts.map +1 -1
- package/dist/render/accessor.js +15 -16
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +34 -36
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts +30 -20
- package/dist/render/api.d.ts.map +1 -1
- package/dist/render/api.js +35 -38
- package/dist/render/api.js.map +1 -1
- package/dist/render/index.cjs +4 -0
- package/dist/render/index.d.ts +4 -4
- package/dist/render/index.js +3 -2
- package/dist/render/internal.cjs +3 -2
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts +17 -9
- package/dist/render/internal.d.ts.map +1 -1
- package/dist/render/internal.js +3 -2
- package/dist/render/internal.js.map +1 -1
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.js.map +1 -1
- package/dist/render/util/column_collection.cjs +6 -4
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts +9 -9
- package/dist/render/util/column_collection.d.ts.map +1 -1
- package/dist/render/util/column_collection.js +6 -4
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.d.ts +2 -2
- package/dist/render/util/pcolumn_data.cjs +1 -1
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts +3 -3
- package/dist/render/util/pcolumn_data.d.ts.map +1 -1
- package/dist/render/util/pcolumn_data.js +1 -1
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/services/block_services.cjs +2 -1
- package/dist/services/block_services.cjs.map +1 -1
- package/dist/services/block_services.d.ts +1 -0
- package/dist/services/block_services.d.ts.map +1 -1
- package/dist/services/block_services.js +2 -1
- package/dist/services/block_services.js.map +1 -1
- package/dist/services/get_services.cjs +2 -2
- package/dist/services/get_services.cjs.map +1 -1
- package/dist/services/get_services.d.ts +4 -1
- package/dist/services/get_services.d.ts.map +1 -1
- package/dist/services/get_services.js +2 -2
- package/dist/services/get_services.js.map +1 -1
- package/package.json +10 -8
- package/src/columns/__test_helpers__/collection_driver.ts +197 -0
- package/src/columns/__test_helpers__/stub_registry.ts +134 -0
- package/src/columns/column.ts +46 -0
- package/src/columns/column_lazy.test.ts +201 -0
- package/src/columns/column_lazy.ts +311 -0
- package/src/columns/column_providers/index.ts +78 -0
- package/src/columns/column_providers/providers.ts +193 -0
- package/src/columns/column_providers/types.ts +24 -0
- package/src/columns/column_recipes/column_discovered_recipe.ts +231 -0
- package/src/columns/column_recipes/column_filtered_recipe.ts +184 -0
- package/src/columns/column_recipes/column_overrided_recipe.ts +146 -0
- package/src/columns/column_recipes/column_recipes.test.ts +681 -0
- package/src/columns/column_recipes/index.ts +127 -0
- package/src/columns/column_recipes/leaf_rebrand.ts +28 -0
- package/src/columns/column_recipes/types.ts +113 -0
- package/src/columns/columns_collection.test.ts +164 -0
- package/src/columns/columns_collection.ts +170 -0
- package/src/columns/derive_axis_values_labels.ts +98 -0
- package/src/columns/expand_by_partition.test.ts +146 -110
- package/src/columns/expand_by_partition.ts +72 -84
- package/src/columns/index.ts +7 -5
- package/src/columns/utils.test.ts +249 -0
- package/src/columns/utils.ts +226 -0
- package/src/components/PFrameForGraphs.ts +3 -1
- package/src/components/PlAnnotations/filters_ui.test.ts +46 -47
- package/src/components/PlDataTable/columnResolver.test.ts +122 -0
- package/src/components/PlDataTable/columnResolver.ts +57 -0
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +9 -9
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +31 -63
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +85 -58
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +316 -354
- package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +48 -144
- package/src/components/PlDataTable/createPlDataTable/index.ts +2 -2
- package/src/components/PlDataTable/createPlDataTable/utils.test.ts +60 -69
- package/src/components/PlDataTable/createPlDataTable/utils.ts +65 -173
- package/src/components/PlDataTable/createPlDataTableSheet.ts +1 -1
- package/src/components/PlDataTable/index.ts +4 -2
- package/src/components/PlDataTable/labels.ts +4 -33
- package/src/components/PlDataTable/state-migration.ts +151 -22
- package/src/components/PlDataTable/typesV8.ts +188 -0
- package/src/components/PlDatasetSelector/build_dataset_options.ts +35 -60
- package/src/components/PlDatasetSelector/enrichment_discovery.ts +65 -61
- package/src/components/PlDatasetSelector/filter_discovery.test.ts +110 -72
- package/src/components/PlDatasetSelector/filter_discovery.ts +51 -31
- package/src/filters/converters/filterToQuery.test.ts +15 -8
- package/src/filters/converters/filterToQuery.ts +22 -9
- package/src/filters/converters/filterUiToExpressionImpl.test.ts +35 -36
- package/src/labels/derive_distinct_labels.ts +1 -1
- package/src/labels/derive_distinct_tooltips.test.ts +7 -4
- package/src/labels/derive_distinct_tooltips.ts +3 -3
- package/src/pframe_utils/axes.ts +2 -2
- package/src/pframe_utils/columns.ts +14 -23
- package/src/pframe_utils/index.ts +1 -1
- package/src/render/accessor.ts +35 -38
- package/src/render/api.ts +45 -61
- package/src/render/index.ts +2 -1
- package/src/render/internal.ts +43 -10
- package/src/render/util/axis_filtering.ts +0 -1
- package/src/render/util/column_collection.ts +17 -17
- package/src/render/util/pcolumn_data.ts +5 -9
- package/src/services/block_services.ts +1 -0
- package/src/services/get_services.ts +5 -2
- package/dist/columns/column_collection_builder.cjs +0 -241
- package/dist/columns/column_collection_builder.cjs.map +0 -1
- package/dist/columns/column_collection_builder.d.ts +0 -119
- package/dist/columns/column_collection_builder.d.ts.map +0 -1
- package/dist/columns/column_collection_builder.js +0 -241
- package/dist/columns/column_collection_builder.js.map +0 -1
- package/dist/columns/column_selector.cjs +0 -49
- package/dist/columns/column_selector.cjs.map +0 -1
- package/dist/columns/column_selector.d.ts +0 -33
- package/dist/columns/column_selector.d.ts.map +0 -1
- package/dist/columns/column_selector.js +0 -47
- package/dist/columns/column_selector.js.map +0 -1
- package/dist/columns/column_snapshot.cjs +0 -19
- package/dist/columns/column_snapshot.cjs.map +0 -1
- package/dist/columns/column_snapshot.d.ts +0 -39
- package/dist/columns/column_snapshot.d.ts.map +0 -1
- package/dist/columns/column_snapshot.js +0 -18
- package/dist/columns/column_snapshot.js.map +0 -1
- package/dist/columns/column_snapshot_provider.cjs +0 -137
- package/dist/columns/column_snapshot_provider.cjs.map +0 -1
- package/dist/columns/column_snapshot_provider.d.ts +0 -74
- package/dist/columns/column_snapshot_provider.d.ts.map +0 -1
- package/dist/columns/column_snapshot_provider.js +0 -133
- package/dist/columns/column_snapshot_provider.js.map +0 -1
- package/dist/columns/ctx_column_sources.cjs +0 -80
- package/dist/columns/ctx_column_sources.cjs.map +0 -1
- package/dist/columns/ctx_column_sources.d.ts +0 -30
- package/dist/columns/ctx_column_sources.d.ts.map +0 -1
- package/dist/columns/ctx_column_sources.js +0 -79
- package/dist/columns/ctx_column_sources.js.map +0 -1
- package/src/columns/column_collection_builder.test.ts +0 -484
- package/src/columns/column_collection_builder.ts +0 -485
- package/src/columns/column_selector.test.ts +0 -90
- package/src/columns/column_selector.ts +0 -100
- package/src/columns/column_snapshot.ts +0 -58
- package/src/columns/column_snapshot_provider.ts +0 -194
- package/src/columns/ctx_column_sources.ts +0 -99
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const require_leaf_rebrand = require("./leaf_rebrand.cjs");
|
|
2
|
+
const require_index = require("./index.cjs");
|
|
3
|
+
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
4
|
+
//#region src/columns/column_recipes/column_overrided_recipe.ts
|
|
5
|
+
/**
|
|
6
|
+
* Recipe wrapper that overlays {@link SpecOverrides} on top of any other
|
|
7
|
+
* recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.
|
|
8
|
+
*
|
|
9
|
+
* Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.
|
|
10
|
+
* Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge
|
|
11
|
+
* `specOverrides` at the current level and keep wrapper depth constant.
|
|
12
|
+
*
|
|
13
|
+
* This invariant matches the one enforced inside `unwrapOverrides` from
|
|
14
|
+
* pl-model-common: it explicitly throws on a nested override-wrap.
|
|
15
|
+
*/
|
|
16
|
+
var ColumnOverriddenRecipe = class ColumnOverriddenRecipe {
|
|
17
|
+
inner;
|
|
18
|
+
overrides;
|
|
19
|
+
/**
|
|
20
|
+
* Wrap any recipe with overrides. If `inner` is already a
|
|
21
|
+
* {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones
|
|
22
|
+
* and returns a new Overridden sharing the original `inner`. No
|
|
23
|
+
* `Overridden<Overridden<X>>` is produced.
|
|
24
|
+
*/
|
|
25
|
+
static wrap(col, overrides) {
|
|
26
|
+
if (col instanceof ColumnOverriddenRecipe) return new ColumnOverriddenRecipe(col.inner, (0, _milaboratories_pl_model_common.mergeSpecOverrides)(col.overrides, overrides));
|
|
27
|
+
return new ColumnOverriddenRecipe(col, overrides);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Static counterpart to {@link wrap}: returns the resolution status of a
|
|
31
|
+
* {@link ColumnOverriddenKey} without constructing the recipe. Overrides
|
|
32
|
+
* do not add references — status collapses to the source's status.
|
|
33
|
+
*/
|
|
34
|
+
static getStatusByKey(key, opts = {}) {
|
|
35
|
+
return require_index.ColumnRecipe.getStatus(key.source, opts);
|
|
36
|
+
}
|
|
37
|
+
id;
|
|
38
|
+
specCache;
|
|
39
|
+
queryCache;
|
|
40
|
+
dataStatusCache;
|
|
41
|
+
constructor(inner, overrides) {
|
|
42
|
+
this.inner = inner;
|
|
43
|
+
this.overrides = overrides;
|
|
44
|
+
this.id = (0, _milaboratories_pl_model_common.createColumnOverriddenId)({
|
|
45
|
+
source: inner.id,
|
|
46
|
+
specOverrides: overrides
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** Wrapped recipe — exposed so external walkers can descend. */
|
|
50
|
+
getInner() {
|
|
51
|
+
return this.inner;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* `inner` owns all references; overrides are a pure spec patch and do not
|
|
55
|
+
* introduce new column refs.
|
|
56
|
+
*/
|
|
57
|
+
getReferencedIds() {
|
|
58
|
+
return this.inner.getReferencedIds();
|
|
59
|
+
}
|
|
60
|
+
getDataStatus() {
|
|
61
|
+
if (this.dataStatusCache === void 0) this.dataStatusCache = { value: this.inner.getDataStatus() };
|
|
62
|
+
return this.dataStatusCache.value;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Take the inner spec and overlay our overrides. `applySpecOverrides`
|
|
66
|
+
* extracts the overrides from `this.id` itself.
|
|
67
|
+
*/
|
|
68
|
+
getSpec() {
|
|
69
|
+
if (this.specCache === void 0) this.specCache = { value: (0, _milaboratories_pl_model_common.applySpecOverrides)(this.inner.getSpec(), this.id) };
|
|
70
|
+
return this.specCache.value;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Emit a client-side `specOverride` node wrapping the inner query.
|
|
74
|
+
*
|
|
75
|
+
* This is a structural-but-collapsible node: it carries the override
|
|
76
|
+
* patch through the query tree so consumers see the full recipe shape,
|
|
77
|
+
* but it is collapsed at the host boundary (`resolvePColumn`) before
|
|
78
|
+
* the query reaches pframe-engine. The engine never sees this node.
|
|
79
|
+
*
|
|
80
|
+
* Overrides do not change query topology — they are a pure spec patch.
|
|
81
|
+
*/
|
|
82
|
+
getQuery() {
|
|
83
|
+
if (this.queryCache === void 0) this.queryCache = { value: {
|
|
84
|
+
type: "specOverride",
|
|
85
|
+
input: require_leaf_rebrand.rebrandLeafId(this.inner.getQuery(), this.inner.id, this.id),
|
|
86
|
+
override: this.overrides
|
|
87
|
+
} };
|
|
88
|
+
return this.queryCache.value;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Flat merge: new overrides merge with existing ones; `inner` is unchanged.
|
|
92
|
+
* The result is an Overridden of the same depth.
|
|
93
|
+
*/
|
|
94
|
+
withSpecs(overrides) {
|
|
95
|
+
return ColumnOverriddenRecipe.wrap(this, overrides);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
//#endregion
|
|
99
|
+
exports.ColumnOverriddenRecipe = ColumnOverriddenRecipe;
|
|
100
|
+
|
|
101
|
+
//# sourceMappingURL=column_overrided_recipe.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column_overrided_recipe.cjs","names":["ColumnRecipe","rebrandLeafId"],"sources":["../../../src/columns/column_recipes/column_overrided_recipe.ts"],"sourcesContent":["import {\n applySpecOverrides,\n createColumnOverriddenId,\n mergeSpecOverrides,\n type ColumnOverriddenId,\n type ColumnOverriddenKey,\n type ColumnUniversalId,\n type PColumnSpec,\n type PObjectId,\n type SpecOverrides,\n type SpecQuery,\n} from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx } from \"../../render/internal\";\nimport type { ColumnFieldStatus, ColumnResolutionStatus } from \"./types\";\nimport { ColumnRecipe } from \"./index\";\nimport { Column } from \"../column\";\nimport { rebrandLeafId } from \"./leaf_rebrand\";\n\n/**\n * A recipe whose id is not an Overridden wrap — valid `source` for Overridden.\n * Mirrors the spec-level invariant on {@link ColumnOverriddenKey.source}.\n */\ntype NonOverriddenColumn = Column<Exclude<ColumnUniversalId, ColumnOverriddenId>>;\n\n/**\n * Recipe wrapper that overlays {@link SpecOverrides} on top of any other\n * recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.\n *\n * Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.\n * Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge\n * `specOverrides` at the current level and keep wrapper depth constant.\n *\n * This invariant matches the one enforced inside `unwrapOverrides` from\n * pl-model-common: it explicitly throws on a nested override-wrap.\n */\nexport class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {\n /**\n * Wrap any recipe with overrides. If `inner` is already a\n * {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones\n * and returns a new Overridden sharing the original `inner`. No\n * `Overridden<Overridden<X>>` is produced.\n */\n static wrap(col: Column, overrides: SpecOverrides): ColumnOverriddenRecipe {\n if (col instanceof ColumnOverriddenRecipe) {\n return new ColumnOverriddenRecipe(col.inner, mergeSpecOverrides(col.overrides, overrides));\n }\n // `inner` is not an Overridden wrap (the `instanceof` branch above handles\n // that). Narrow the id union here so the constructor parameter stays\n // honest with `ColumnOverriddenKey.source`.\n return new ColumnOverriddenRecipe(col as NonOverriddenColumn, overrides);\n }\n\n /**\n * Static counterpart to {@link wrap}: returns the resolution status of a\n * {@link ColumnOverriddenKey} without constructing the recipe. Overrides\n * do not add references — status collapses to the source's status.\n */\n static getStatusByKey(\n key: ColumnOverriddenKey,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n ): ColumnResolutionStatus {\n return ColumnRecipe.getStatus(key.source, opts);\n }\n\n readonly id: ColumnOverriddenId;\n private specCache?: { readonly value: PColumnSpec };\n private queryCache?: { readonly value: SpecQuery };\n private dataStatusCache?: { readonly value: ColumnFieldStatus };\n\n private constructor(\n private readonly inner: NonOverriddenColumn,\n private readonly overrides: SpecOverrides,\n ) {\n this.id = createColumnOverriddenId({\n source: inner.id,\n specOverrides: overrides,\n });\n }\n\n /** Wrapped recipe — exposed so external walkers can descend. */\n getInner(): Column {\n return this.inner;\n }\n\n /**\n * `inner` owns all references; overrides are a pure spec patch and do not\n * introduce new column refs.\n */\n getReferencedIds(): PObjectId[] {\n return this.inner.getReferencedIds();\n }\n\n getDataStatus(): ColumnFieldStatus {\n if (this.dataStatusCache === undefined) {\n this.dataStatusCache = { value: this.inner.getDataStatus() };\n }\n return this.dataStatusCache.value;\n }\n\n /**\n * Take the inner spec and overlay our overrides. `applySpecOverrides`\n * extracts the overrides from `this.id` itself.\n */\n getSpec(): PColumnSpec {\n if (this.specCache === undefined) {\n this.specCache = { value: applySpecOverrides(this.inner.getSpec(), this.id) };\n }\n return this.specCache.value;\n }\n\n /**\n * Emit a client-side `specOverride` node wrapping the inner query.\n *\n * This is a structural-but-collapsible node: it carries the override\n * patch through the query tree so consumers see the full recipe shape,\n * but it is collapsed at the host boundary (`resolvePColumn`) before\n * the query reaches pframe-engine. The engine never sees this node.\n *\n * Overrides do not change query topology — they are a pure spec patch.\n */\n getQuery(): SpecQuery {\n if (this.queryCache === undefined) {\n // Rebrand the inner column leaf to this.id (rich Overridden id) so\n // filter/sort references emitted with this recipe's id match the\n // leaf the engine sees. The specOverride node still wraps the leaf\n // and is collapsed at the host boundary into a spec patch on the\n // resolved PColumn.\n this.queryCache = {\n value: {\n type: \"specOverride\",\n input: rebrandLeafId(this.inner.getQuery(), this.inner.id, this.id),\n override: this.overrides,\n },\n };\n }\n return this.queryCache.value;\n }\n\n /**\n * Flat merge: new overrides merge with existing ones; `inner` is unchanged.\n * The result is an Overridden of the same depth.\n */\n withSpecs(overrides: SpecOverrides): Column {\n return ColumnOverriddenRecipe.wrap(this, overrides);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmCA,IAAa,yBAAb,MAAa,uBAA6D;CAmCrD;CACA;;;;;;;CA7BnB,OAAO,KAAK,KAAa,WAAkD;EACzE,IAAI,eAAe,wBACjB,OAAO,IAAI,uBAAuB,IAAI,QAAA,GAAA,gCAAA,mBAAA,CAA0B,IAAI,WAAW,SAAS,CAAC;EAK3F,OAAO,IAAI,uBAAuB,KAA4B,SAAS;CACzE;;;;;;CAOA,OAAO,eACL,KACA,OAAqC,CAAC,GACd;EACxB,OAAOA,cAAAA,aAAa,UAAU,IAAI,QAAQ,IAAI;CAChD;CAEA;CACA;CACA;CACA;CAEA,YACE,OACA,WACA;EAFiB,KAAA,QAAA;EACA,KAAA,YAAA;EAEjB,KAAK,MAAA,GAAA,gCAAA,yBAAA,CAA8B;GACjC,QAAQ,MAAM;GACd,eAAe;EACjB,CAAC;CACH;;CAGA,WAAmB;EACjB,OAAO,KAAK;CACd;;;;;CAMA,mBAAgC;EAC9B,OAAO,KAAK,MAAM,iBAAiB;CACrC;CAEA,gBAAmC;EACjC,IAAI,KAAK,oBAAoB,KAAA,GAC3B,KAAK,kBAAkB,EAAE,OAAO,KAAK,MAAM,cAAc,EAAE;EAE7D,OAAO,KAAK,gBAAgB;CAC9B;;;;;CAMA,UAAuB;EACrB,IAAI,KAAK,cAAc,KAAA,GACrB,KAAK,YAAY,EAAE,QAAA,GAAA,gCAAA,mBAAA,CAA0B,KAAK,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAE;EAE9E,OAAO,KAAK,UAAU;CACxB;;;;;;;;;;;CAYA,WAAsB;EACpB,IAAI,KAAK,eAAe,KAAA,GAMtB,KAAK,aAAa,EAChB,OAAO;GACL,MAAM;GACN,OAAOC,qBAAAA,cAAc,KAAK,MAAM,SAAS,GAAG,KAAK,MAAM,IAAI,KAAK,EAAE;GAClE,UAAU,KAAK;EACjB,EACF;EAEF,OAAO,KAAK,WAAW;CACzB;;;;;CAMA,UAAU,WAAkC;EAC1C,OAAO,uBAAuB,KAAK,MAAM,SAAS;CACpD;AACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { GlobalCfgRenderCtx } from "../../render/internal.js";
|
|
2
|
+
import { ColumnFieldStatus, ColumnResolutionStatus } from "./types.js";
|
|
3
|
+
import { Column } from "../column.js";
|
|
4
|
+
import { ColumnOverriddenId, ColumnOverriddenKey, PColumnSpec, PObjectId, SpecOverrides, SpecQuery } from "@milaboratories/pl-model-common";
|
|
5
|
+
|
|
6
|
+
//#region src/columns/column_recipes/column_overrided_recipe.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Recipe wrapper that overlays {@link SpecOverrides} on top of any other
|
|
9
|
+
* recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.
|
|
10
|
+
*
|
|
11
|
+
* Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.
|
|
12
|
+
* Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge
|
|
13
|
+
* `specOverrides` at the current level and keep wrapper depth constant.
|
|
14
|
+
*
|
|
15
|
+
* This invariant matches the one enforced inside `unwrapOverrides` from
|
|
16
|
+
* pl-model-common: it explicitly throws on a nested override-wrap.
|
|
17
|
+
*/
|
|
18
|
+
declare class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {
|
|
19
|
+
private readonly inner;
|
|
20
|
+
private readonly overrides;
|
|
21
|
+
/**
|
|
22
|
+
* Wrap any recipe with overrides. If `inner` is already a
|
|
23
|
+
* {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones
|
|
24
|
+
* and returns a new Overridden sharing the original `inner`. No
|
|
25
|
+
* `Overridden<Overridden<X>>` is produced.
|
|
26
|
+
*/
|
|
27
|
+
static wrap(col: Column, overrides: SpecOverrides): ColumnOverriddenRecipe;
|
|
28
|
+
/**
|
|
29
|
+
* Static counterpart to {@link wrap}: returns the resolution status of a
|
|
30
|
+
* {@link ColumnOverriddenKey} without constructing the recipe. Overrides
|
|
31
|
+
* do not add references — status collapses to the source's status.
|
|
32
|
+
*/
|
|
33
|
+
static getStatusByKey(key: ColumnOverriddenKey, opts?: {
|
|
34
|
+
ctx?: GlobalCfgRenderCtx;
|
|
35
|
+
}): ColumnResolutionStatus;
|
|
36
|
+
readonly id: ColumnOverriddenId;
|
|
37
|
+
private specCache?;
|
|
38
|
+
private queryCache?;
|
|
39
|
+
private dataStatusCache?;
|
|
40
|
+
private constructor();
|
|
41
|
+
/** Wrapped recipe — exposed so external walkers can descend. */
|
|
42
|
+
getInner(): Column;
|
|
43
|
+
/**
|
|
44
|
+
* `inner` owns all references; overrides are a pure spec patch and do not
|
|
45
|
+
* introduce new column refs.
|
|
46
|
+
*/
|
|
47
|
+
getReferencedIds(): PObjectId[];
|
|
48
|
+
getDataStatus(): ColumnFieldStatus;
|
|
49
|
+
/**
|
|
50
|
+
* Take the inner spec and overlay our overrides. `applySpecOverrides`
|
|
51
|
+
* extracts the overrides from `this.id` itself.
|
|
52
|
+
*/
|
|
53
|
+
getSpec(): PColumnSpec;
|
|
54
|
+
/**
|
|
55
|
+
* Emit a client-side `specOverride` node wrapping the inner query.
|
|
56
|
+
*
|
|
57
|
+
* This is a structural-but-collapsible node: it carries the override
|
|
58
|
+
* patch through the query tree so consumers see the full recipe shape,
|
|
59
|
+
* but it is collapsed at the host boundary (`resolvePColumn`) before
|
|
60
|
+
* the query reaches pframe-engine. The engine never sees this node.
|
|
61
|
+
*
|
|
62
|
+
* Overrides do not change query topology — they are a pure spec patch.
|
|
63
|
+
*/
|
|
64
|
+
getQuery(): SpecQuery;
|
|
65
|
+
/**
|
|
66
|
+
* Flat merge: new overrides merge with existing ones; `inner` is unchanged.
|
|
67
|
+
* The result is an Overridden of the same depth.
|
|
68
|
+
*/
|
|
69
|
+
withSpecs(overrides: SpecOverrides): Column;
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { ColumnOverriddenRecipe };
|
|
73
|
+
//# sourceMappingURL=column_overrided_recipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column_overrided_recipe.d.ts","names":[],"sources":["../../../src/columns/column_recipes/column_overrided_recipe.ts"],"mappings":";;;;;;;;AAmCA;;;;;;;;;cAAa,sBAAA,YAAkC,MAAA,CAAO,kBAAA;EAAA,iBAmCjC,KAAA;EAAA,iBACA,SAAA;EAiBC;;;;;;EAAA,OA9Cb,IAAA,CAAK,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,aAAA,GAAgB,sBAAA;EAPD;;;;;EAAA,OAsB5C,cAAA,CACL,GAAA,EAAK,mBAAA,EACL,IAAA;IAAQ,GAAA,GAAM,kBAAA;EAAA,IACb,sBAAA;EAAA,SAIM,EAAA,EAAI,kBAAA;EAAA,QACL,SAAA;EAAA,QACA,UAAA;EAAA,QACA,eAAA;EAAA,QAED,WAAA;EAXA;EAsBP,QAAA,IAAY,MAAA;EArBF;;;;EA6BV,gBAAA,IAAoB,SAAA;EAIpB,aAAA,IAAiB,iBAAA;EA3BT;;;;EAsCR,OAAA,IAAW,WAAA;EAvBC;;;;;;;;;;EAwCZ,QAAA,IAAY,SAAA;EAsBF;;;AAAiC;EAA3C,SAAA,CAAU,SAAA,EAAW,aAAA,GAAgB,MAAA;AAAA"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { rebrandLeafId } from "./leaf_rebrand.js";
|
|
2
|
+
import { ColumnRecipe } from "./index.js";
|
|
3
|
+
import { applySpecOverrides, createColumnOverriddenId, mergeSpecOverrides } from "@milaboratories/pl-model-common";
|
|
4
|
+
//#region src/columns/column_recipes/column_overrided_recipe.ts
|
|
5
|
+
/**
|
|
6
|
+
* Recipe wrapper that overlays {@link SpecOverrides} on top of any other
|
|
7
|
+
* recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.
|
|
8
|
+
*
|
|
9
|
+
* Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.
|
|
10
|
+
* Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge
|
|
11
|
+
* `specOverrides` at the current level and keep wrapper depth constant.
|
|
12
|
+
*
|
|
13
|
+
* This invariant matches the one enforced inside `unwrapOverrides` from
|
|
14
|
+
* pl-model-common: it explicitly throws on a nested override-wrap.
|
|
15
|
+
*/
|
|
16
|
+
var ColumnOverriddenRecipe = class ColumnOverriddenRecipe {
|
|
17
|
+
inner;
|
|
18
|
+
overrides;
|
|
19
|
+
/**
|
|
20
|
+
* Wrap any recipe with overrides. If `inner` is already a
|
|
21
|
+
* {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones
|
|
22
|
+
* and returns a new Overridden sharing the original `inner`. No
|
|
23
|
+
* `Overridden<Overridden<X>>` is produced.
|
|
24
|
+
*/
|
|
25
|
+
static wrap(col, overrides) {
|
|
26
|
+
if (col instanceof ColumnOverriddenRecipe) return new ColumnOverriddenRecipe(col.inner, mergeSpecOverrides(col.overrides, overrides));
|
|
27
|
+
return new ColumnOverriddenRecipe(col, overrides);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Static counterpart to {@link wrap}: returns the resolution status of a
|
|
31
|
+
* {@link ColumnOverriddenKey} without constructing the recipe. Overrides
|
|
32
|
+
* do not add references — status collapses to the source's status.
|
|
33
|
+
*/
|
|
34
|
+
static getStatusByKey(key, opts = {}) {
|
|
35
|
+
return ColumnRecipe.getStatus(key.source, opts);
|
|
36
|
+
}
|
|
37
|
+
id;
|
|
38
|
+
specCache;
|
|
39
|
+
queryCache;
|
|
40
|
+
dataStatusCache;
|
|
41
|
+
constructor(inner, overrides) {
|
|
42
|
+
this.inner = inner;
|
|
43
|
+
this.overrides = overrides;
|
|
44
|
+
this.id = createColumnOverriddenId({
|
|
45
|
+
source: inner.id,
|
|
46
|
+
specOverrides: overrides
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** Wrapped recipe — exposed so external walkers can descend. */
|
|
50
|
+
getInner() {
|
|
51
|
+
return this.inner;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* `inner` owns all references; overrides are a pure spec patch and do not
|
|
55
|
+
* introduce new column refs.
|
|
56
|
+
*/
|
|
57
|
+
getReferencedIds() {
|
|
58
|
+
return this.inner.getReferencedIds();
|
|
59
|
+
}
|
|
60
|
+
getDataStatus() {
|
|
61
|
+
if (this.dataStatusCache === void 0) this.dataStatusCache = { value: this.inner.getDataStatus() };
|
|
62
|
+
return this.dataStatusCache.value;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Take the inner spec and overlay our overrides. `applySpecOverrides`
|
|
66
|
+
* extracts the overrides from `this.id` itself.
|
|
67
|
+
*/
|
|
68
|
+
getSpec() {
|
|
69
|
+
if (this.specCache === void 0) this.specCache = { value: applySpecOverrides(this.inner.getSpec(), this.id) };
|
|
70
|
+
return this.specCache.value;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Emit a client-side `specOverride` node wrapping the inner query.
|
|
74
|
+
*
|
|
75
|
+
* This is a structural-but-collapsible node: it carries the override
|
|
76
|
+
* patch through the query tree so consumers see the full recipe shape,
|
|
77
|
+
* but it is collapsed at the host boundary (`resolvePColumn`) before
|
|
78
|
+
* the query reaches pframe-engine. The engine never sees this node.
|
|
79
|
+
*
|
|
80
|
+
* Overrides do not change query topology — they are a pure spec patch.
|
|
81
|
+
*/
|
|
82
|
+
getQuery() {
|
|
83
|
+
if (this.queryCache === void 0) this.queryCache = { value: {
|
|
84
|
+
type: "specOverride",
|
|
85
|
+
input: rebrandLeafId(this.inner.getQuery(), this.inner.id, this.id),
|
|
86
|
+
override: this.overrides
|
|
87
|
+
} };
|
|
88
|
+
return this.queryCache.value;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Flat merge: new overrides merge with existing ones; `inner` is unchanged.
|
|
92
|
+
* The result is an Overridden of the same depth.
|
|
93
|
+
*/
|
|
94
|
+
withSpecs(overrides) {
|
|
95
|
+
return ColumnOverriddenRecipe.wrap(this, overrides);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
//#endregion
|
|
99
|
+
export { ColumnOverriddenRecipe };
|
|
100
|
+
|
|
101
|
+
//# sourceMappingURL=column_overrided_recipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column_overrided_recipe.js","names":[],"sources":["../../../src/columns/column_recipes/column_overrided_recipe.ts"],"sourcesContent":["import {\n applySpecOverrides,\n createColumnOverriddenId,\n mergeSpecOverrides,\n type ColumnOverriddenId,\n type ColumnOverriddenKey,\n type ColumnUniversalId,\n type PColumnSpec,\n type PObjectId,\n type SpecOverrides,\n type SpecQuery,\n} from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx } from \"../../render/internal\";\nimport type { ColumnFieldStatus, ColumnResolutionStatus } from \"./types\";\nimport { ColumnRecipe } from \"./index\";\nimport { Column } from \"../column\";\nimport { rebrandLeafId } from \"./leaf_rebrand\";\n\n/**\n * A recipe whose id is not an Overridden wrap — valid `source` for Overridden.\n * Mirrors the spec-level invariant on {@link ColumnOverriddenKey.source}.\n */\ntype NonOverriddenColumn = Column<Exclude<ColumnUniversalId, ColumnOverriddenId>>;\n\n/**\n * Recipe wrapper that overlays {@link SpecOverrides} on top of any other\n * recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.\n *\n * Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.\n * Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge\n * `specOverrides` at the current level and keep wrapper depth constant.\n *\n * This invariant matches the one enforced inside `unwrapOverrides` from\n * pl-model-common: it explicitly throws on a nested override-wrap.\n */\nexport class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {\n /**\n * Wrap any recipe with overrides. If `inner` is already a\n * {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones\n * and returns a new Overridden sharing the original `inner`. No\n * `Overridden<Overridden<X>>` is produced.\n */\n static wrap(col: Column, overrides: SpecOverrides): ColumnOverriddenRecipe {\n if (col instanceof ColumnOverriddenRecipe) {\n return new ColumnOverriddenRecipe(col.inner, mergeSpecOverrides(col.overrides, overrides));\n }\n // `inner` is not an Overridden wrap (the `instanceof` branch above handles\n // that). Narrow the id union here so the constructor parameter stays\n // honest with `ColumnOverriddenKey.source`.\n return new ColumnOverriddenRecipe(col as NonOverriddenColumn, overrides);\n }\n\n /**\n * Static counterpart to {@link wrap}: returns the resolution status of a\n * {@link ColumnOverriddenKey} without constructing the recipe. Overrides\n * do not add references — status collapses to the source's status.\n */\n static getStatusByKey(\n key: ColumnOverriddenKey,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n ): ColumnResolutionStatus {\n return ColumnRecipe.getStatus(key.source, opts);\n }\n\n readonly id: ColumnOverriddenId;\n private specCache?: { readonly value: PColumnSpec };\n private queryCache?: { readonly value: SpecQuery };\n private dataStatusCache?: { readonly value: ColumnFieldStatus };\n\n private constructor(\n private readonly inner: NonOverriddenColumn,\n private readonly overrides: SpecOverrides,\n ) {\n this.id = createColumnOverriddenId({\n source: inner.id,\n specOverrides: overrides,\n });\n }\n\n /** Wrapped recipe — exposed so external walkers can descend. */\n getInner(): Column {\n return this.inner;\n }\n\n /**\n * `inner` owns all references; overrides are a pure spec patch and do not\n * introduce new column refs.\n */\n getReferencedIds(): PObjectId[] {\n return this.inner.getReferencedIds();\n }\n\n getDataStatus(): ColumnFieldStatus {\n if (this.dataStatusCache === undefined) {\n this.dataStatusCache = { value: this.inner.getDataStatus() };\n }\n return this.dataStatusCache.value;\n }\n\n /**\n * Take the inner spec and overlay our overrides. `applySpecOverrides`\n * extracts the overrides from `this.id` itself.\n */\n getSpec(): PColumnSpec {\n if (this.specCache === undefined) {\n this.specCache = { value: applySpecOverrides(this.inner.getSpec(), this.id) };\n }\n return this.specCache.value;\n }\n\n /**\n * Emit a client-side `specOverride` node wrapping the inner query.\n *\n * This is a structural-but-collapsible node: it carries the override\n * patch through the query tree so consumers see the full recipe shape,\n * but it is collapsed at the host boundary (`resolvePColumn`) before\n * the query reaches pframe-engine. The engine never sees this node.\n *\n * Overrides do not change query topology — they are a pure spec patch.\n */\n getQuery(): SpecQuery {\n if (this.queryCache === undefined) {\n // Rebrand the inner column leaf to this.id (rich Overridden id) so\n // filter/sort references emitted with this recipe's id match the\n // leaf the engine sees. The specOverride node still wraps the leaf\n // and is collapsed at the host boundary into a spec patch on the\n // resolved PColumn.\n this.queryCache = {\n value: {\n type: \"specOverride\",\n input: rebrandLeafId(this.inner.getQuery(), this.inner.id, this.id),\n override: this.overrides,\n },\n };\n }\n return this.queryCache.value;\n }\n\n /**\n * Flat merge: new overrides merge with existing ones; `inner` is unchanged.\n * The result is an Overridden of the same depth.\n */\n withSpecs(overrides: SpecOverrides): Column {\n return ColumnOverriddenRecipe.wrap(this, overrides);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmCA,IAAa,yBAAb,MAAa,uBAA6D;CAmCrD;CACA;;;;;;;CA7BnB,OAAO,KAAK,KAAa,WAAkD;EACzE,IAAI,eAAe,wBACjB,OAAO,IAAI,uBAAuB,IAAI,OAAO,mBAAmB,IAAI,WAAW,SAAS,CAAC;EAK3F,OAAO,IAAI,uBAAuB,KAA4B,SAAS;CACzE;;;;;;CAOA,OAAO,eACL,KACA,OAAqC,CAAC,GACd;EACxB,OAAO,aAAa,UAAU,IAAI,QAAQ,IAAI;CAChD;CAEA;CACA;CACA;CACA;CAEA,YACE,OACA,WACA;EAFiB,KAAA,QAAA;EACA,KAAA,YAAA;EAEjB,KAAK,KAAK,yBAAyB;GACjC,QAAQ,MAAM;GACd,eAAe;EACjB,CAAC;CACH;;CAGA,WAAmB;EACjB,OAAO,KAAK;CACd;;;;;CAMA,mBAAgC;EAC9B,OAAO,KAAK,MAAM,iBAAiB;CACrC;CAEA,gBAAmC;EACjC,IAAI,KAAK,oBAAoB,KAAA,GAC3B,KAAK,kBAAkB,EAAE,OAAO,KAAK,MAAM,cAAc,EAAE;EAE7D,OAAO,KAAK,gBAAgB;CAC9B;;;;;CAMA,UAAuB;EACrB,IAAI,KAAK,cAAc,KAAA,GACrB,KAAK,YAAY,EAAE,OAAO,mBAAmB,KAAK,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAE;EAE9E,OAAO,KAAK,UAAU;CACxB;;;;;;;;;;;CAYA,WAAsB;EACpB,IAAI,KAAK,eAAe,KAAA,GAMtB,KAAK,aAAa,EAChB,OAAO;GACL,MAAM;GACN,OAAO,cAAc,KAAK,MAAM,SAAS,GAAG,KAAK,MAAM,IAAI,KAAK,EAAE;GAClE,UAAU,KAAK;EACjB,EACF;EAEF,OAAO,KAAK,WAAW;CACzB;;;;;CAMA,UAAU,WAAkC;EAC1C,OAAO,uBAAuB,KAAK,MAAM,SAAS;CACpD;AACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
const require_column_discovered_recipe = require("./column_discovered_recipe.cjs");
|
|
2
|
+
const require_column_filtered_recipe = require("./column_filtered_recipe.cjs");
|
|
3
|
+
const require_column_overrided_recipe = require("./column_overrided_recipe.cjs");
|
|
4
|
+
const require_column_lazy = require("../column_lazy.cjs");
|
|
5
|
+
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
6
|
+
//#region src/columns/column_recipes/index.ts
|
|
7
|
+
/**
|
|
8
|
+
* Build a `ColumnRecipe` from a stringified id. Dispatches to the matching
|
|
9
|
+
* concrete recipe variant based on the id's encoding and recurses on
|
|
10
|
+
* wrappers' inner `source`:
|
|
11
|
+
*
|
|
12
|
+
* - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`
|
|
13
|
+
* - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}
|
|
14
|
+
* - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,
|
|
15
|
+
* then {@link ColumnOverriddenRecipe.wrap}
|
|
16
|
+
* - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,
|
|
17
|
+
* then {@link ColumnFilteredRecipe.wrap}
|
|
18
|
+
*
|
|
19
|
+
* Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,
|
|
20
|
+
* which needs an anchor map to resolve) or when a nested source itself
|
|
21
|
+
* cannot be built.
|
|
22
|
+
*/
|
|
23
|
+
function ColumnRecipeBuild(id, opts = {}) {
|
|
24
|
+
const parsed = (0, _milaboratories_pl_model_common.parseColumnIdSafely)(id);
|
|
25
|
+
if ((0, _milaboratories_pl_model_common.isPObjectKey)(parsed)) return require_column_lazy.ColumnLazyImpl.fromId(id, opts);
|
|
26
|
+
if ((0, _milaboratories_pl_model_common.isColumnDiscoveredKey)(parsed)) return require_column_discovered_recipe.ColumnDiscoveredRecipe.fromKey(parsed, opts);
|
|
27
|
+
if ((0, _milaboratories_pl_model_common.isColumnOverriddenKey)(parsed)) {
|
|
28
|
+
const inner = ColumnRecipe(parsed.source, opts);
|
|
29
|
+
if (inner === void 0) return void 0;
|
|
30
|
+
return require_column_overrided_recipe.ColumnOverriddenRecipe.wrap(inner, parsed.specOverrides);
|
|
31
|
+
}
|
|
32
|
+
if ((0, _milaboratories_pl_model_common.isColumnFilteredKey)(parsed)) {
|
|
33
|
+
if (typeof parsed.source !== "string") throw new Error(`Unsupported ColumnRecipe id variant: filtered column with non-string source (${JSON.stringify(parsed.source)})`);
|
|
34
|
+
const inner = ColumnRecipe(parsed.source, opts);
|
|
35
|
+
if (inner === void 0) return void 0;
|
|
36
|
+
return require_column_filtered_recipe.ColumnFilteredRecipe.wrap(inner, parsed.axisFilters);
|
|
37
|
+
}
|
|
38
|
+
throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on
|
|
42
|
+
* the parsed id shape to the matching `getStatusBy*` static — never
|
|
43
|
+
* constructs the recipe. Use this at boundaries (resolver, filter/sort
|
|
44
|
+
* targets) to throw early on `absent` instead of silently producing an empty
|
|
45
|
+
* recipe via {@link ColumnRecipeBuild}.
|
|
46
|
+
*/
|
|
47
|
+
function ColumnRecipeGetStatus(id, opts = {}) {
|
|
48
|
+
const parsed = (0, _milaboratories_pl_model_common.parseColumnIdSafely)(id);
|
|
49
|
+
if ((0, _milaboratories_pl_model_common.isPObjectKey)(parsed)) return require_column_lazy.ColumnLazyImpl.getStatusById(id, opts);
|
|
50
|
+
if ((0, _milaboratories_pl_model_common.isColumnDiscoveredKey)(parsed)) return require_column_discovered_recipe.ColumnDiscoveredRecipe.getStatusByKey(parsed, opts);
|
|
51
|
+
if ((0, _milaboratories_pl_model_common.isColumnOverriddenKey)(parsed)) return require_column_overrided_recipe.ColumnOverriddenRecipe.getStatusByKey(parsed, opts);
|
|
52
|
+
if ((0, _milaboratories_pl_model_common.isColumnFilteredKey)(parsed)) return require_column_filtered_recipe.ColumnFilteredRecipe.getStatusByKey(parsed, opts);
|
|
53
|
+
throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);
|
|
54
|
+
}
|
|
55
|
+
const ColumnRecipe = Object.assign(ColumnRecipeBuild, { getStatus: ColumnRecipeGetStatus });
|
|
56
|
+
/**
|
|
57
|
+
* Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the
|
|
58
|
+
* wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},
|
|
59
|
+
* {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,
|
|
60
|
+
* or a recipe and you want to branch on the recipe case.
|
|
61
|
+
*/
|
|
62
|
+
function isColumnRecipe(value) {
|
|
63
|
+
return value instanceof require_column_lazy.ColumnLazyImpl || value instanceof require_column_discovered_recipe.ColumnDiscoveredRecipe || value instanceof require_column_filtered_recipe.ColumnFilteredRecipe || value instanceof require_column_overrided_recipe.ColumnOverriddenRecipe;
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
exports.ColumnDiscoveredRecipe = require_column_discovered_recipe.ColumnDiscoveredRecipe;
|
|
67
|
+
exports.ColumnFilteredRecipe = require_column_filtered_recipe.ColumnFilteredRecipe;
|
|
68
|
+
exports.ColumnOverriddenRecipe = require_column_overrided_recipe.ColumnOverriddenRecipe;
|
|
69
|
+
exports.ColumnRecipe = ColumnRecipe;
|
|
70
|
+
exports.isColumnRecipe = isColumnRecipe;
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["ColumnLazyImpl","ColumnDiscoveredRecipe","ColumnOverriddenRecipe","ColumnFilteredRecipe"],"sources":["../../../src/columns/column_recipes/index.ts"],"sourcesContent":["import {\n isColumnDiscoveredKey,\n isColumnOverriddenKey,\n parseColumnIdSafely,\n type ColumnUniversalId,\n type PObjectId,\n isPObjectKey,\n isColumnFilteredKey,\n} from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx } from \"../../render/internal\";\nimport { ColumnLazyImpl } from \"../column_lazy\";\nimport { ColumnDiscoveredRecipe } from \"./column_discovered_recipe\";\nimport { ColumnFilteredRecipe } from \"./column_filtered_recipe\";\nimport { ColumnOverriddenRecipe } from \"./column_overrided_recipe\";\nimport type {\n ColumnRecipe as ColumnRecipeBase,\n ColumnRecipeId,\n ColumnResolutionStatus,\n} from \"./types\";\n\nexport type { ColumnFieldStatus, ColumnRecipeId, ColumnResolutionStatus, SpecQuery } from \"./types\";\nexport { ColumnAbsentError } from \"../column_lazy\";\nexport { ColumnDiscoveredRecipe } from \"./column_discovered_recipe\";\nexport { ColumnFilteredRecipe } from \"./column_filtered_recipe\";\nexport { ColumnOverriddenRecipe } from \"./column_overrided_recipe\";\n\n// Re-declare the interface locally so the name can merge with the dispatcher\n// value declared below: a single name `ColumnRecipe` resolves to the\n// interface in type position and to the factory function (`Object.assign`d\n// with `.getStatus`) in value position.\n// (Type-only re-exports do not participate in TS declaration merging.)\nexport interface ColumnRecipe<\n ID extends ColumnRecipeId = ColumnRecipeId,\n> extends ColumnRecipeBase<ID> {}\n\n/**\n * Build a `ColumnRecipe` from a stringified id. Dispatches to the matching\n * concrete recipe variant based on the id's encoding and recurses on\n * wrappers' inner `source`:\n *\n * - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`\n * - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}\n * - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,\n * then {@link ColumnOverriddenRecipe.wrap}\n * - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,\n * then {@link ColumnFilteredRecipe.wrap}\n *\n * Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,\n * which needs an anchor map to resolve) or when a nested source itself\n * cannot be built.\n */\nfunction ColumnRecipeBuild(\n id: ColumnUniversalId,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): undefined | ColumnRecipe {\n const parsed = parseColumnIdSafely(id);\n\n if (isPObjectKey(parsed)) {\n return ColumnLazyImpl.fromId(id as PObjectId, opts);\n }\n\n if (isColumnDiscoveredKey(parsed)) {\n return ColumnDiscoveredRecipe.fromKey(parsed, opts);\n }\n\n if (isColumnOverriddenKey(parsed)) {\n const inner = ColumnRecipe(parsed.source, opts);\n if (inner === undefined) return undefined;\n return ColumnOverriddenRecipe.wrap(inner, parsed.specOverrides);\n }\n\n if (isColumnFilteredKey(parsed)) {\n // ColumnFilteredKey.source is a stringified ColumnUniversalId (leaf or\n // any nested wrapper). Legacy `FilteredPColumnId` with an AnchoredPColumnId\n // (object) source is not supported here — guard against it explicitly.\n if (typeof parsed.source !== \"string\") {\n throw new Error(\n `Unsupported ColumnRecipe id variant: filtered column with non-string source (${JSON.stringify(parsed.source)})`,\n );\n }\n const inner = ColumnRecipe(parsed.source, opts);\n if (inner === undefined) return undefined;\n return ColumnFilteredRecipe.wrap(inner, parsed.axisFilters);\n }\n\n throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);\n}\n\n/**\n * Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on\n * the parsed id shape to the matching `getStatusBy*` static — never\n * constructs the recipe. Use this at boundaries (resolver, filter/sort\n * targets) to throw early on `absent` instead of silently producing an empty\n * recipe via {@link ColumnRecipeBuild}.\n */\nfunction ColumnRecipeGetStatus(\n id: ColumnUniversalId,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): ColumnResolutionStatus {\n const parsed = parseColumnIdSafely(id);\n if (isPObjectKey(parsed)) return ColumnLazyImpl.getStatusById(id as PObjectId, opts);\n if (isColumnDiscoveredKey(parsed)) return ColumnDiscoveredRecipe.getStatusByKey(parsed, opts);\n if (isColumnOverriddenKey(parsed)) return ColumnOverriddenRecipe.getStatusByKey(parsed, opts);\n if (isColumnFilteredKey(parsed)) return ColumnFilteredRecipe.getStatusByKey(parsed, opts);\n throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);\n}\n\nexport const ColumnRecipe: typeof ColumnRecipeBuild & {\n readonly getStatus: typeof ColumnRecipeGetStatus;\n} = Object.assign(ColumnRecipeBuild, {\n getStatus: ColumnRecipeGetStatus,\n});\n\n/**\n * Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the\n * wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},\n * {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,\n * or a recipe and you want to branch on the recipe case.\n */\nexport function isColumnRecipe(value: unknown): value is ColumnRecipe {\n return (\n value instanceof ColumnLazyImpl ||\n value instanceof ColumnDiscoveredRecipe ||\n value instanceof ColumnFilteredRecipe ||\n value instanceof ColumnOverriddenRecipe\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmDA,SAAS,kBACP,IACA,OAAqC,CAAC,GACZ;CAC1B,MAAM,UAAA,GAAA,gCAAA,oBAAA,CAA6B,EAAE;CAErC,KAAA,GAAA,gCAAA,aAAA,CAAiB,MAAM,GACrB,OAAOA,oBAAAA,eAAe,OAAO,IAAiB,IAAI;CAGpD,KAAA,GAAA,gCAAA,sBAAA,CAA0B,MAAM,GAC9B,OAAOC,iCAAAA,uBAAuB,QAAQ,QAAQ,IAAI;CAGpD,KAAA,GAAA,gCAAA,sBAAA,CAA0B,MAAM,GAAG;EACjC,MAAM,QAAQ,aAAa,OAAO,QAAQ,IAAI;EAC9C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,OAAOC,gCAAAA,uBAAuB,KAAK,OAAO,OAAO,aAAa;CAChE;CAEA,KAAA,GAAA,gCAAA,oBAAA,CAAwB,MAAM,GAAG;EAI/B,IAAI,OAAO,OAAO,WAAW,UAC3B,MAAM,IAAI,MACR,gFAAgF,KAAK,UAAU,OAAO,MAAM,EAAE,EAChH;EAEF,MAAM,QAAQ,aAAa,OAAO,QAAQ,IAAI;EAC9C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,OAAOC,+BAAAA,qBAAqB,KAAK,OAAO,OAAO,WAAW;CAC5D;CAEA,MAAM,IAAI,MAAM,wCAAwC,IAAI;AAC9D;;;;;;;;AASA,SAAS,sBACP,IACA,OAAqC,CAAC,GACd;CACxB,MAAM,UAAA,GAAA,gCAAA,oBAAA,CAA6B,EAAE;CACrC,KAAA,GAAA,gCAAA,aAAA,CAAiB,MAAM,GAAG,OAAOH,oBAAAA,eAAe,cAAc,IAAiB,IAAI;CACnF,KAAA,GAAA,gCAAA,sBAAA,CAA0B,MAAM,GAAG,OAAOC,iCAAAA,uBAAuB,eAAe,QAAQ,IAAI;CAC5F,KAAA,GAAA,gCAAA,sBAAA,CAA0B,MAAM,GAAG,OAAOC,gCAAAA,uBAAuB,eAAe,QAAQ,IAAI;CAC5F,KAAA,GAAA,gCAAA,oBAAA,CAAwB,MAAM,GAAG,OAAOC,+BAAAA,qBAAqB,eAAe,QAAQ,IAAI;CACxF,MAAM,IAAI,MAAM,wCAAwC,IAAI;AAC9D;AAEA,MAAa,eAET,OAAO,OAAO,mBAAmB,EACnC,WAAW,sBACb,CAAC;;;;;;;AAQD,SAAgB,eAAe,OAAuC;CACpE,OACE,iBAAiBH,oBAAAA,kBACjB,iBAAiBC,iCAAAA,0BACjB,iBAAiBE,+BAAAA,wBACjB,iBAAiBD,gCAAAA;AAErB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { GlobalCfgRenderCtx } from "../../render/internal.js";
|
|
2
|
+
import { ColumnFieldStatus, ColumnRecipe as ColumnRecipe$1, ColumnRecipeId, ColumnResolutionStatus, SpecQuery as SpecQuery$1 } from "./types.js";
|
|
3
|
+
import { ColumnAbsentError } from "../column_lazy.js";
|
|
4
|
+
import { ColumnDiscoveredRecipe } from "./column_discovered_recipe.js";
|
|
5
|
+
import { ColumnFilteredRecipe } from "./column_filtered_recipe.js";
|
|
6
|
+
import { ColumnOverriddenRecipe } from "./column_overrided_recipe.js";
|
|
7
|
+
import { ColumnUniversalId } from "@milaboratories/pl-model-common";
|
|
8
|
+
|
|
9
|
+
//#region src/columns/column_recipes/index.d.ts
|
|
10
|
+
interface ColumnRecipe<ID extends ColumnRecipeId = ColumnRecipeId> extends ColumnRecipe$1<ID> {}
|
|
11
|
+
/**
|
|
12
|
+
* Build a `ColumnRecipe` from a stringified id. Dispatches to the matching
|
|
13
|
+
* concrete recipe variant based on the id's encoding and recurses on
|
|
14
|
+
* wrappers' inner `source`:
|
|
15
|
+
*
|
|
16
|
+
* - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`
|
|
17
|
+
* - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}
|
|
18
|
+
* - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,
|
|
19
|
+
* then {@link ColumnOverriddenRecipe.wrap}
|
|
20
|
+
* - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,
|
|
21
|
+
* then {@link ColumnFilteredRecipe.wrap}
|
|
22
|
+
*
|
|
23
|
+
* Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,
|
|
24
|
+
* which needs an anchor map to resolve) or when a nested source itself
|
|
25
|
+
* cannot be built.
|
|
26
|
+
*/
|
|
27
|
+
declare function ColumnRecipeBuild(id: ColumnUniversalId, opts?: {
|
|
28
|
+
ctx?: GlobalCfgRenderCtx;
|
|
29
|
+
}): undefined | ColumnRecipe;
|
|
30
|
+
/**
|
|
31
|
+
* Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on
|
|
32
|
+
* the parsed id shape to the matching `getStatusBy*` static — never
|
|
33
|
+
* constructs the recipe. Use this at boundaries (resolver, filter/sort
|
|
34
|
+
* targets) to throw early on `absent` instead of silently producing an empty
|
|
35
|
+
* recipe via {@link ColumnRecipeBuild}.
|
|
36
|
+
*/
|
|
37
|
+
declare function ColumnRecipeGetStatus(id: ColumnUniversalId, opts?: {
|
|
38
|
+
ctx?: GlobalCfgRenderCtx;
|
|
39
|
+
}): ColumnResolutionStatus;
|
|
40
|
+
declare const ColumnRecipe: typeof ColumnRecipeBuild & {
|
|
41
|
+
readonly getStatus: typeof ColumnRecipeGetStatus;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the
|
|
45
|
+
* wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},
|
|
46
|
+
* {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,
|
|
47
|
+
* or a recipe and you want to branch on the recipe case.
|
|
48
|
+
*/
|
|
49
|
+
declare function isColumnRecipe(value: unknown): value is ColumnRecipe;
|
|
50
|
+
//#endregion
|
|
51
|
+
export { ColumnDiscoveredRecipe, ColumnFilteredRecipe, ColumnOverriddenRecipe, ColumnRecipe, type ColumnRecipeId, type SpecQuery$1 as SpecQuery, isColumnRecipe };
|
|
52
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/columns/column_recipes/index.ts"],"mappings":";;;;;;;;;UA+BiB,YAAA,YACJ,cAAA,GAAiB,cAAA,UACpB,cAAA,CAAiB,EAAA;;;;;;;;;;;;;;;AAAE;AAAI;iBAkBxB,iBAAA,CACP,EAAA,EAAI,iBAAA,EACJ,IAAA;EAAQ,GAAA,GAAM,kBAAA;AAAA,gBACD,YAAA;;;;;;;;iBAyCN,qBAAA,CACP,EAAA,EAAI,iBAAA,EACJ,IAAA;EAAQ,GAAA,GAAM,kBAAA;AAAA,IACb,sBAAA;AAAA,cASU,YAAA,SAAqB,iBAAA;EAAA,SACvB,SAAA,SAAkB,qBAAqB;AAAA;;;;;;;iBAWlC,cAAA,CAAe,KAAA,YAAiB,KAAA,IAAS,YAAY"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ColumnDiscoveredRecipe } from "./column_discovered_recipe.js";
|
|
2
|
+
import { ColumnFilteredRecipe } from "./column_filtered_recipe.js";
|
|
3
|
+
import { ColumnOverriddenRecipe } from "./column_overrided_recipe.js";
|
|
4
|
+
import { ColumnLazyImpl } from "../column_lazy.js";
|
|
5
|
+
import { isColumnDiscoveredKey, isColumnFilteredKey, isColumnOverriddenKey, isPObjectKey, parseColumnIdSafely } from "@milaboratories/pl-model-common";
|
|
6
|
+
//#region src/columns/column_recipes/index.ts
|
|
7
|
+
/**
|
|
8
|
+
* Build a `ColumnRecipe` from a stringified id. Dispatches to the matching
|
|
9
|
+
* concrete recipe variant based on the id's encoding and recurses on
|
|
10
|
+
* wrappers' inner `source`:
|
|
11
|
+
*
|
|
12
|
+
* - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`
|
|
13
|
+
* - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}
|
|
14
|
+
* - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,
|
|
15
|
+
* then {@link ColumnOverriddenRecipe.wrap}
|
|
16
|
+
* - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,
|
|
17
|
+
* then {@link ColumnFilteredRecipe.wrap}
|
|
18
|
+
*
|
|
19
|
+
* Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,
|
|
20
|
+
* which needs an anchor map to resolve) or when a nested source itself
|
|
21
|
+
* cannot be built.
|
|
22
|
+
*/
|
|
23
|
+
function ColumnRecipeBuild(id, opts = {}) {
|
|
24
|
+
const parsed = parseColumnIdSafely(id);
|
|
25
|
+
if (isPObjectKey(parsed)) return ColumnLazyImpl.fromId(id, opts);
|
|
26
|
+
if (isColumnDiscoveredKey(parsed)) return ColumnDiscoveredRecipe.fromKey(parsed, opts);
|
|
27
|
+
if (isColumnOverriddenKey(parsed)) {
|
|
28
|
+
const inner = ColumnRecipe(parsed.source, opts);
|
|
29
|
+
if (inner === void 0) return void 0;
|
|
30
|
+
return ColumnOverriddenRecipe.wrap(inner, parsed.specOverrides);
|
|
31
|
+
}
|
|
32
|
+
if (isColumnFilteredKey(parsed)) {
|
|
33
|
+
if (typeof parsed.source !== "string") throw new Error(`Unsupported ColumnRecipe id variant: filtered column with non-string source (${JSON.stringify(parsed.source)})`);
|
|
34
|
+
const inner = ColumnRecipe(parsed.source, opts);
|
|
35
|
+
if (inner === void 0) return void 0;
|
|
36
|
+
return ColumnFilteredRecipe.wrap(inner, parsed.axisFilters);
|
|
37
|
+
}
|
|
38
|
+
throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on
|
|
42
|
+
* the parsed id shape to the matching `getStatusBy*` static — never
|
|
43
|
+
* constructs the recipe. Use this at boundaries (resolver, filter/sort
|
|
44
|
+
* targets) to throw early on `absent` instead of silently producing an empty
|
|
45
|
+
* recipe via {@link ColumnRecipeBuild}.
|
|
46
|
+
*/
|
|
47
|
+
function ColumnRecipeGetStatus(id, opts = {}) {
|
|
48
|
+
const parsed = parseColumnIdSafely(id);
|
|
49
|
+
if (isPObjectKey(parsed)) return ColumnLazyImpl.getStatusById(id, opts);
|
|
50
|
+
if (isColumnDiscoveredKey(parsed)) return ColumnDiscoveredRecipe.getStatusByKey(parsed, opts);
|
|
51
|
+
if (isColumnOverriddenKey(parsed)) return ColumnOverriddenRecipe.getStatusByKey(parsed, opts);
|
|
52
|
+
if (isColumnFilteredKey(parsed)) return ColumnFilteredRecipe.getStatusByKey(parsed, opts);
|
|
53
|
+
throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);
|
|
54
|
+
}
|
|
55
|
+
const ColumnRecipe = Object.assign(ColumnRecipeBuild, { getStatus: ColumnRecipeGetStatus });
|
|
56
|
+
/**
|
|
57
|
+
* Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the
|
|
58
|
+
* wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},
|
|
59
|
+
* {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,
|
|
60
|
+
* or a recipe and you want to branch on the recipe case.
|
|
61
|
+
*/
|
|
62
|
+
function isColumnRecipe(value) {
|
|
63
|
+
return value instanceof ColumnLazyImpl || value instanceof ColumnDiscoveredRecipe || value instanceof ColumnFilteredRecipe || value instanceof ColumnOverriddenRecipe;
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
export { ColumnDiscoveredRecipe, ColumnFilteredRecipe, ColumnOverriddenRecipe, ColumnRecipe, isColumnRecipe };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/columns/column_recipes/index.ts"],"sourcesContent":["import {\n isColumnDiscoveredKey,\n isColumnOverriddenKey,\n parseColumnIdSafely,\n type ColumnUniversalId,\n type PObjectId,\n isPObjectKey,\n isColumnFilteredKey,\n} from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx } from \"../../render/internal\";\nimport { ColumnLazyImpl } from \"../column_lazy\";\nimport { ColumnDiscoveredRecipe } from \"./column_discovered_recipe\";\nimport { ColumnFilteredRecipe } from \"./column_filtered_recipe\";\nimport { ColumnOverriddenRecipe } from \"./column_overrided_recipe\";\nimport type {\n ColumnRecipe as ColumnRecipeBase,\n ColumnRecipeId,\n ColumnResolutionStatus,\n} from \"./types\";\n\nexport type { ColumnFieldStatus, ColumnRecipeId, ColumnResolutionStatus, SpecQuery } from \"./types\";\nexport { ColumnAbsentError } from \"../column_lazy\";\nexport { ColumnDiscoveredRecipe } from \"./column_discovered_recipe\";\nexport { ColumnFilteredRecipe } from \"./column_filtered_recipe\";\nexport { ColumnOverriddenRecipe } from \"./column_overrided_recipe\";\n\n// Re-declare the interface locally so the name can merge with the dispatcher\n// value declared below: a single name `ColumnRecipe` resolves to the\n// interface in type position and to the factory function (`Object.assign`d\n// with `.getStatus`) in value position.\n// (Type-only re-exports do not participate in TS declaration merging.)\nexport interface ColumnRecipe<\n ID extends ColumnRecipeId = ColumnRecipeId,\n> extends ColumnRecipeBase<ID> {}\n\n/**\n * Build a `ColumnRecipe` from a stringified id. Dispatches to the matching\n * concrete recipe variant based on the id's encoding and recurses on\n * wrappers' inner `source`:\n *\n * - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`\n * - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}\n * - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,\n * then {@link ColumnOverriddenRecipe.wrap}\n * - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,\n * then {@link ColumnFilteredRecipe.wrap}\n *\n * Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,\n * which needs an anchor map to resolve) or when a nested source itself\n * cannot be built.\n */\nfunction ColumnRecipeBuild(\n id: ColumnUniversalId,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): undefined | ColumnRecipe {\n const parsed = parseColumnIdSafely(id);\n\n if (isPObjectKey(parsed)) {\n return ColumnLazyImpl.fromId(id as PObjectId, opts);\n }\n\n if (isColumnDiscoveredKey(parsed)) {\n return ColumnDiscoveredRecipe.fromKey(parsed, opts);\n }\n\n if (isColumnOverriddenKey(parsed)) {\n const inner = ColumnRecipe(parsed.source, opts);\n if (inner === undefined) return undefined;\n return ColumnOverriddenRecipe.wrap(inner, parsed.specOverrides);\n }\n\n if (isColumnFilteredKey(parsed)) {\n // ColumnFilteredKey.source is a stringified ColumnUniversalId (leaf or\n // any nested wrapper). Legacy `FilteredPColumnId` with an AnchoredPColumnId\n // (object) source is not supported here — guard against it explicitly.\n if (typeof parsed.source !== \"string\") {\n throw new Error(\n `Unsupported ColumnRecipe id variant: filtered column with non-string source (${JSON.stringify(parsed.source)})`,\n );\n }\n const inner = ColumnRecipe(parsed.source, opts);\n if (inner === undefined) return undefined;\n return ColumnFilteredRecipe.wrap(inner, parsed.axisFilters);\n }\n\n throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);\n}\n\n/**\n * Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on\n * the parsed id shape to the matching `getStatusBy*` static — never\n * constructs the recipe. Use this at boundaries (resolver, filter/sort\n * targets) to throw early on `absent` instead of silently producing an empty\n * recipe via {@link ColumnRecipeBuild}.\n */\nfunction ColumnRecipeGetStatus(\n id: ColumnUniversalId,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): ColumnResolutionStatus {\n const parsed = parseColumnIdSafely(id);\n if (isPObjectKey(parsed)) return ColumnLazyImpl.getStatusById(id as PObjectId, opts);\n if (isColumnDiscoveredKey(parsed)) return ColumnDiscoveredRecipe.getStatusByKey(parsed, opts);\n if (isColumnOverriddenKey(parsed)) return ColumnOverriddenRecipe.getStatusByKey(parsed, opts);\n if (isColumnFilteredKey(parsed)) return ColumnFilteredRecipe.getStatusByKey(parsed, opts);\n throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);\n}\n\nexport const ColumnRecipe: typeof ColumnRecipeBuild & {\n readonly getStatus: typeof ColumnRecipeGetStatus;\n} = Object.assign(ColumnRecipeBuild, {\n getStatus: ColumnRecipeGetStatus,\n});\n\n/**\n * Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the\n * wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},\n * {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,\n * or a recipe and you want to branch on the recipe case.\n */\nexport function isColumnRecipe(value: unknown): value is ColumnRecipe {\n return (\n value instanceof ColumnLazyImpl ||\n value instanceof ColumnDiscoveredRecipe ||\n value instanceof ColumnFilteredRecipe ||\n value instanceof ColumnOverriddenRecipe\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmDA,SAAS,kBACP,IACA,OAAqC,CAAC,GACZ;CAC1B,MAAM,SAAS,oBAAoB,EAAE;CAErC,IAAI,aAAa,MAAM,GACrB,OAAO,eAAe,OAAO,IAAiB,IAAI;CAGpD,IAAI,sBAAsB,MAAM,GAC9B,OAAO,uBAAuB,QAAQ,QAAQ,IAAI;CAGpD,IAAI,sBAAsB,MAAM,GAAG;EACjC,MAAM,QAAQ,aAAa,OAAO,QAAQ,IAAI;EAC9C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,OAAO,uBAAuB,KAAK,OAAO,OAAO,aAAa;CAChE;CAEA,IAAI,oBAAoB,MAAM,GAAG;EAI/B,IAAI,OAAO,OAAO,WAAW,UAC3B,MAAM,IAAI,MACR,gFAAgF,KAAK,UAAU,OAAO,MAAM,EAAE,EAChH;EAEF,MAAM,QAAQ,aAAa,OAAO,QAAQ,IAAI;EAC9C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,OAAO,qBAAqB,KAAK,OAAO,OAAO,WAAW;CAC5D;CAEA,MAAM,IAAI,MAAM,wCAAwC,IAAI;AAC9D;;;;;;;;AASA,SAAS,sBACP,IACA,OAAqC,CAAC,GACd;CACxB,MAAM,SAAS,oBAAoB,EAAE;CACrC,IAAI,aAAa,MAAM,GAAG,OAAO,eAAe,cAAc,IAAiB,IAAI;CACnF,IAAI,sBAAsB,MAAM,GAAG,OAAO,uBAAuB,eAAe,QAAQ,IAAI;CAC5F,IAAI,sBAAsB,MAAM,GAAG,OAAO,uBAAuB,eAAe,QAAQ,IAAI;CAC5F,IAAI,oBAAoB,MAAM,GAAG,OAAO,qBAAqB,eAAe,QAAQ,IAAI;CACxF,MAAM,IAAI,MAAM,wCAAwC,IAAI;AAC9D;AAEA,MAAa,eAET,OAAO,OAAO,mBAAmB,EACnC,WAAW,sBACb,CAAC;;;;;;;AAQD,SAAgB,eAAe,OAAuC;CACpE,OACE,iBAAiB,kBACjB,iBAAiB,0BACjB,iBAAiB,wBACjB,iBAAiB;AAErB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
2
|
+
//#region src/columns/column_recipes/leaf_rebrand.ts
|
|
3
|
+
/**
|
|
4
|
+
* Replace every column leaf whose id equals `fromId` with `toId`, leaving
|
|
5
|
+
* other column refs (linkers, sub-anchors) intact. Wrapper recipes
|
|
6
|
+
* (Overridden / Filtered) and Discovered use this to lift their own id onto
|
|
7
|
+
* the hit leaf, so per-variant uniqueness propagates to the engine and
|
|
8
|
+
* resolver-emitted ids match leaves in the emitted SpecQuery.
|
|
9
|
+
*
|
|
10
|
+
* Generic over all SpecQuery node shapes — including `linkerJoin`, which
|
|
11
|
+
* occurs when a wrapper sits over a {@link ColumnDiscoveredRecipe}: only
|
|
12
|
+
* the deepest hit leaf carries `fromId`, every linker leaf has a different
|
|
13
|
+
* id and is left untouched.
|
|
14
|
+
*/
|
|
15
|
+
function rebrandLeafId(node, fromId, toId) {
|
|
16
|
+
if (fromId === toId) return node;
|
|
17
|
+
return (0, _milaboratories_pl_model_common.mapSpecQueryColumns)(node, { column: (id) => id === fromId ? toId : id });
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
exports.rebrandLeafId = rebrandLeafId;
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=leaf_rebrand.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaf_rebrand.cjs","names":[],"sources":["../../../src/columns/column_recipes/leaf_rebrand.ts"],"sourcesContent":["import {\n mapSpecQueryColumns,\n type ColumnUniversalId,\n type SpecQuery,\n} from \"@milaboratories/pl-model-common\";\n\n/**\n * Replace every column leaf whose id equals `fromId` with `toId`, leaving\n * other column refs (linkers, sub-anchors) intact. Wrapper recipes\n * (Overridden / Filtered) and Discovered use this to lift their own id onto\n * the hit leaf, so per-variant uniqueness propagates to the engine and\n * resolver-emitted ids match leaves in the emitted SpecQuery.\n *\n * Generic over all SpecQuery node shapes — including `linkerJoin`, which\n * occurs when a wrapper sits over a {@link ColumnDiscoveredRecipe}: only\n * the deepest hit leaf carries `fromId`, every linker leaf has a different\n * id and is left untouched.\n */\nexport function rebrandLeafId(\n node: SpecQuery,\n fromId: ColumnUniversalId,\n toId: ColumnUniversalId,\n): SpecQuery {\n if (fromId === toId) return node;\n return mapSpecQueryColumns(node, {\n column: (id) => (id === fromId ? toId : id),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,SAAgB,cACd,MACA,QACA,MACW;CACX,IAAI,WAAW,MAAM,OAAO;CAC5B,QAAA,GAAA,gCAAA,oBAAA,CAA2B,MAAM,EAC/B,SAAS,OAAQ,OAAO,SAAS,OAAO,GAC1C,CAAC;AACH"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { mapSpecQueryColumns } from "@milaboratories/pl-model-common";
|
|
2
|
+
//#region src/columns/column_recipes/leaf_rebrand.ts
|
|
3
|
+
/**
|
|
4
|
+
* Replace every column leaf whose id equals `fromId` with `toId`, leaving
|
|
5
|
+
* other column refs (linkers, sub-anchors) intact. Wrapper recipes
|
|
6
|
+
* (Overridden / Filtered) and Discovered use this to lift their own id onto
|
|
7
|
+
* the hit leaf, so per-variant uniqueness propagates to the engine and
|
|
8
|
+
* resolver-emitted ids match leaves in the emitted SpecQuery.
|
|
9
|
+
*
|
|
10
|
+
* Generic over all SpecQuery node shapes — including `linkerJoin`, which
|
|
11
|
+
* occurs when a wrapper sits over a {@link ColumnDiscoveredRecipe}: only
|
|
12
|
+
* the deepest hit leaf carries `fromId`, every linker leaf has a different
|
|
13
|
+
* id and is left untouched.
|
|
14
|
+
*/
|
|
15
|
+
function rebrandLeafId(node, fromId, toId) {
|
|
16
|
+
if (fromId === toId) return node;
|
|
17
|
+
return mapSpecQueryColumns(node, { column: (id) => id === fromId ? toId : id });
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { rebrandLeafId };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=leaf_rebrand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaf_rebrand.js","names":[],"sources":["../../../src/columns/column_recipes/leaf_rebrand.ts"],"sourcesContent":["import {\n mapSpecQueryColumns,\n type ColumnUniversalId,\n type SpecQuery,\n} from \"@milaboratories/pl-model-common\";\n\n/**\n * Replace every column leaf whose id equals `fromId` with `toId`, leaving\n * other column refs (linkers, sub-anchors) intact. Wrapper recipes\n * (Overridden / Filtered) and Discovered use this to lift their own id onto\n * the hit leaf, so per-variant uniqueness propagates to the engine and\n * resolver-emitted ids match leaves in the emitted SpecQuery.\n *\n * Generic over all SpecQuery node shapes — including `linkerJoin`, which\n * occurs when a wrapper sits over a {@link ColumnDiscoveredRecipe}: only\n * the deepest hit leaf carries `fromId`, every linker leaf has a different\n * id and is left untouched.\n */\nexport function rebrandLeafId(\n node: SpecQuery,\n fromId: ColumnUniversalId,\n toId: ColumnUniversalId,\n): SpecQuery {\n if (fromId === toId) return node;\n return mapSpecQueryColumns(node, {\n column: (id) => (id === fromId ? toId : id),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,SAAgB,cACd,MACA,QACA,MACW;CACX,IAAI,WAAW,MAAM,OAAO;CAC5B,OAAO,oBAAoB,MAAM,EAC/B,SAAS,OAAQ,OAAO,SAAS,OAAO,GAC1C,CAAC;AACH"}
|