@platforma-sdk/model 1.79.27 → 1.80.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/block_model.d.ts +2 -0
- package/dist/block_model.d.ts.map +1 -1
- package/dist/columns/column.cjs +28 -0
- package/dist/columns/column.cjs.map +1 -0
- package/dist/columns/column.d.ts +30 -0
- package/dist/columns/column.d.ts.map +1 -0
- package/dist/columns/column.js +27 -0
- package/dist/columns/column.js.map +1 -0
- package/dist/columns/column_lazy.cjs +248 -0
- package/dist/columns/column_lazy.cjs.map +1 -0
- package/dist/columns/column_lazy.d.ts +137 -0
- package/dist/columns/column_lazy.d.ts.map +1 -0
- package/dist/columns/column_lazy.js +245 -0
- package/dist/columns/column_lazy.js.map +1 -0
- package/dist/columns/column_providers/index.cjs +62 -0
- package/dist/columns/column_providers/index.cjs.map +1 -0
- package/dist/columns/column_providers/index.d.ts +30 -0
- package/dist/columns/column_providers/index.d.ts.map +1 -0
- package/dist/columns/column_providers/index.js +53 -0
- package/dist/columns/column_providers/index.js.map +1 -0
- package/dist/columns/column_providers/providers.cjs +123 -0
- package/dist/columns/column_providers/providers.cjs.map +1 -0
- package/dist/columns/column_providers/providers.d.ts +75 -0
- package/dist/columns/column_providers/providers.d.ts.map +1 -0
- package/dist/columns/column_providers/providers.js +118 -0
- package/dist/columns/column_providers/providers.js.map +1 -0
- package/dist/columns/column_providers/types.d.ts +23 -0
- package/dist/columns/column_providers/types.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.cjs +180 -0
- package/dist/columns/column_recipes/column_discovered_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.d.ts +120 -0
- package/dist/columns/column_recipes/column_discovered_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.js +180 -0
- package/dist/columns/column_recipes/column_discovered_recipe.js.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.cjs +133 -0
- package/dist/columns/column_recipes/column_filtered_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.d.ts +75 -0
- package/dist/columns/column_recipes/column_filtered_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.js +133 -0
- package/dist/columns/column_recipes/column_filtered_recipe.js.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.cjs +101 -0
- package/dist/columns/column_recipes/column_overrided_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts +73 -0
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.js +101 -0
- package/dist/columns/column_recipes/column_overrided_recipe.js.map +1 -0
- package/dist/columns/column_recipes/index.cjs +72 -0
- package/dist/columns/column_recipes/index.cjs.map +1 -0
- package/dist/columns/column_recipes/index.d.ts +52 -0
- package/dist/columns/column_recipes/index.d.ts.map +1 -0
- package/dist/columns/column_recipes/index.js +68 -0
- package/dist/columns/column_recipes/index.js.map +1 -0
- package/dist/columns/column_recipes/leaf_rebrand.cjs +22 -0
- package/dist/columns/column_recipes/leaf_rebrand.cjs.map +1 -0
- package/dist/columns/column_recipes/leaf_rebrand.js +22 -0
- package/dist/columns/column_recipes/leaf_rebrand.js.map +1 -0
- package/dist/columns/column_recipes/types.d.ts +101 -0
- package/dist/columns/column_recipes/types.d.ts.map +1 -0
- package/dist/columns/columns_collection.cjs +124 -0
- package/dist/columns/columns_collection.cjs.map +1 -0
- package/dist/columns/columns_collection.d.ts +64 -0
- package/dist/columns/columns_collection.d.ts.map +1 -0
- package/dist/columns/columns_collection.js +122 -0
- package/dist/columns/columns_collection.js.map +1 -0
- package/dist/columns/derive_axis_values_labels.cjs +76 -0
- package/dist/columns/derive_axis_values_labels.cjs.map +1 -0
- package/dist/columns/derive_axis_values_labels.d.ts +30 -0
- package/dist/columns/derive_axis_values_labels.d.ts.map +1 -0
- package/dist/columns/derive_axis_values_labels.js +76 -0
- package/dist/columns/derive_axis_values_labels.js.map +1 -0
- package/dist/columns/expand_by_partition.cjs +53 -56
- package/dist/columns/expand_by_partition.cjs.map +1 -1
- package/dist/columns/expand_by_partition.d.ts +22 -18
- package/dist/columns/expand_by_partition.d.ts.map +1 -1
- package/dist/columns/expand_by_partition.js +55 -58
- package/dist/columns/expand_by_partition.js.map +1 -1
- package/dist/columns/index.cjs +44 -18
- package/dist/columns/index.d.ts +15 -7
- package/dist/columns/index.js +12 -6
- package/dist/columns/utils.cjs +186 -0
- package/dist/columns/utils.cjs.map +1 -0
- package/dist/columns/utils.d.ts +96 -0
- package/dist/columns/utils.d.ts.map +1 -0
- package/dist/columns/utils.js +179 -0
- package/dist/columns/utils.js.map +1 -0
- package/dist/components/PFrameForGraphs.cjs +1 -0
- package/dist/components/PFrameForGraphs.cjs.map +1 -1
- package/dist/components/PFrameForGraphs.d.ts +1 -1
- package/dist/components/PFrameForGraphs.d.ts.map +1 -1
- package/dist/components/PFrameForGraphs.js +1 -0
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlDataTable/columnResolver.cjs +28 -0
- package/dist/components/PlDataTable/columnResolver.cjs.map +1 -0
- package/dist/components/PlDataTable/columnResolver.js +28 -0
- package/dist/components/PlDataTable/columnResolver.js.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +4 -2
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +4 -2
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +20 -25
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +20 -25
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +58 -26
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +60 -28
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +224 -194
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +13 -16
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +228 -198
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +40 -98
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +17 -8
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +40 -98
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js +2 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs +51 -169
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.js +52 -166
- package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
- package/dist/components/PlDataTable/index.cjs +1 -1
- package/dist/components/PlDataTable/index.d.ts +4 -4
- package/dist/components/PlDataTable/index.js +2 -2
- package/dist/components/PlDataTable/labels.cjs +0 -1
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js +0 -1
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +107 -10
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts +5 -4
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
- package/dist/components/PlDataTable/state-migration.js +107 -10
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV7.d.ts +1 -36
- package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV8.d.ts +123 -0
- package/dist/components/PlDataTable/typesV8.d.ts.map +1 -0
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs +27 -34
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.js +27 -34
- package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +28 -33
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.js +29 -34
- package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs +27 -17
- package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts +24 -10
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.js +28 -18
- package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/index.d.ts +2 -2
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.d.ts +5 -5
- package/dist/components/index.js +2 -2
- package/dist/filters/converters/filterToQuery.cjs +5 -6
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts +12 -3
- package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
- package/dist/filters/converters/filterToQuery.js +5 -6
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/index.d.ts +2 -2
- package/dist/filters/index.d.ts +2 -2
- package/dist/index.cjs +64 -35
- package/dist/index.d.ts +23 -15
- package/dist/index.js +15 -9
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.d.ts +1 -2
- package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
- package/dist/labels/derive_distinct_tooltips.d.ts +6 -3
- package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
- package/dist/labels/derive_distinct_tooltips.js +1 -1
- package/dist/labels/derive_distinct_tooltips.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/dist/pframe_utils/axes.cjs.map +1 -1
- package/dist/pframe_utils/axes.d.ts +2 -2
- package/dist/pframe_utils/axes.d.ts.map +1 -1
- package/dist/pframe_utils/axes.js.map +1 -1
- package/dist/pframe_utils/columns.cjs +6 -10
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts +4 -4
- package/dist/pframe_utils/columns.d.ts.map +1 -1
- package/dist/pframe_utils/columns.js +7 -11
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs.map +1 -1
- package/dist/pframe_utils/index.d.ts +1 -1
- package/dist/pframe_utils/index.d.ts.map +1 -1
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/render/accessor.cjs +15 -16
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts +7 -10
- package/dist/render/accessor.d.ts.map +1 -1
- package/dist/render/accessor.js +15 -16
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +34 -36
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts +30 -20
- package/dist/render/api.d.ts.map +1 -1
- package/dist/render/api.js +35 -38
- package/dist/render/api.js.map +1 -1
- package/dist/render/index.cjs +4 -0
- package/dist/render/index.d.ts +4 -4
- package/dist/render/index.js +3 -2
- package/dist/render/internal.cjs +3 -2
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts +17 -9
- package/dist/render/internal.d.ts.map +1 -1
- package/dist/render/internal.js +3 -2
- package/dist/render/internal.js.map +1 -1
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.js.map +1 -1
- package/dist/render/util/column_collection.cjs +6 -4
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts +9 -9
- package/dist/render/util/column_collection.d.ts.map +1 -1
- package/dist/render/util/column_collection.js +6 -4
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.d.ts +2 -2
- package/dist/render/util/pcolumn_data.cjs +1 -1
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts +3 -3
- package/dist/render/util/pcolumn_data.d.ts.map +1 -1
- package/dist/render/util/pcolumn_data.js +1 -1
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/services/block_services.cjs +2 -1
- package/dist/services/block_services.cjs.map +1 -1
- package/dist/services/block_services.d.ts +1 -0
- package/dist/services/block_services.d.ts.map +1 -1
- package/dist/services/block_services.js +2 -1
- package/dist/services/block_services.js.map +1 -1
- package/dist/services/get_services.cjs +2 -2
- package/dist/services/get_services.cjs.map +1 -1
- package/dist/services/get_services.d.ts +4 -1
- package/dist/services/get_services.d.ts.map +1 -1
- package/dist/services/get_services.js +2 -2
- package/dist/services/get_services.js.map +1 -1
- package/package.json +10 -8
- package/src/columns/__test_helpers__/collection_driver.ts +197 -0
- package/src/columns/__test_helpers__/stub_registry.ts +134 -0
- package/src/columns/column.ts +46 -0
- package/src/columns/column_lazy.test.ts +201 -0
- package/src/columns/column_lazy.ts +311 -0
- package/src/columns/column_providers/index.ts +78 -0
- package/src/columns/column_providers/providers.ts +193 -0
- package/src/columns/column_providers/types.ts +24 -0
- package/src/columns/column_recipes/column_discovered_recipe.ts +231 -0
- package/src/columns/column_recipes/column_filtered_recipe.ts +184 -0
- package/src/columns/column_recipes/column_overrided_recipe.ts +146 -0
- package/src/columns/column_recipes/column_recipes.test.ts +681 -0
- package/src/columns/column_recipes/index.ts +127 -0
- package/src/columns/column_recipes/leaf_rebrand.ts +28 -0
- package/src/columns/column_recipes/types.ts +113 -0
- package/src/columns/columns_collection.test.ts +164 -0
- package/src/columns/columns_collection.ts +170 -0
- package/src/columns/derive_axis_values_labels.ts +98 -0
- package/src/columns/expand_by_partition.test.ts +146 -110
- package/src/columns/expand_by_partition.ts +72 -84
- package/src/columns/index.ts +7 -5
- package/src/columns/utils.test.ts +249 -0
- package/src/columns/utils.ts +226 -0
- package/src/components/PFrameForGraphs.ts +3 -1
- package/src/components/PlAnnotations/filters_ui.test.ts +46 -47
- package/src/components/PlDataTable/columnResolver.test.ts +122 -0
- package/src/components/PlDataTable/columnResolver.ts +57 -0
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +9 -9
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +31 -63
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +85 -58
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +316 -354
- package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +48 -144
- package/src/components/PlDataTable/createPlDataTable/index.ts +2 -2
- package/src/components/PlDataTable/createPlDataTable/utils.test.ts +60 -69
- package/src/components/PlDataTable/createPlDataTable/utils.ts +65 -173
- package/src/components/PlDataTable/createPlDataTableSheet.ts +1 -1
- package/src/components/PlDataTable/index.ts +4 -2
- package/src/components/PlDataTable/labels.ts +4 -33
- package/src/components/PlDataTable/state-migration.ts +151 -22
- package/src/components/PlDataTable/typesV8.ts +188 -0
- package/src/components/PlDatasetSelector/build_dataset_options.ts +35 -60
- package/src/components/PlDatasetSelector/enrichment_discovery.ts +65 -61
- package/src/components/PlDatasetSelector/filter_discovery.test.ts +110 -72
- package/src/components/PlDatasetSelector/filter_discovery.ts +51 -31
- package/src/filters/converters/filterToQuery.test.ts +15 -8
- package/src/filters/converters/filterToQuery.ts +22 -9
- package/src/filters/converters/filterUiToExpressionImpl.test.ts +35 -36
- package/src/labels/derive_distinct_labels.ts +1 -1
- package/src/labels/derive_distinct_tooltips.test.ts +7 -4
- package/src/labels/derive_distinct_tooltips.ts +3 -3
- package/src/pframe_utils/axes.ts +2 -2
- package/src/pframe_utils/columns.ts +14 -23
- package/src/pframe_utils/index.ts +1 -1
- package/src/render/accessor.ts +35 -38
- package/src/render/api.ts +45 -61
- package/src/render/index.ts +2 -1
- package/src/render/internal.ts +43 -10
- package/src/render/util/axis_filtering.ts +0 -1
- package/src/render/util/column_collection.ts +17 -17
- package/src/render/util/pcolumn_data.ts +5 -9
- package/src/services/block_services.ts +1 -0
- package/src/services/get_services.ts +5 -2
- package/dist/columns/column_collection_builder.cjs +0 -241
- package/dist/columns/column_collection_builder.cjs.map +0 -1
- package/dist/columns/column_collection_builder.d.ts +0 -119
- package/dist/columns/column_collection_builder.d.ts.map +0 -1
- package/dist/columns/column_collection_builder.js +0 -241
- package/dist/columns/column_collection_builder.js.map +0 -1
- package/dist/columns/column_selector.cjs +0 -49
- package/dist/columns/column_selector.cjs.map +0 -1
- package/dist/columns/column_selector.d.ts +0 -33
- package/dist/columns/column_selector.d.ts.map +0 -1
- package/dist/columns/column_selector.js +0 -47
- package/dist/columns/column_selector.js.map +0 -1
- package/dist/columns/column_snapshot.cjs +0 -19
- package/dist/columns/column_snapshot.cjs.map +0 -1
- package/dist/columns/column_snapshot.d.ts +0 -39
- package/dist/columns/column_snapshot.d.ts.map +0 -1
- package/dist/columns/column_snapshot.js +0 -18
- package/dist/columns/column_snapshot.js.map +0 -1
- package/dist/columns/column_snapshot_provider.cjs +0 -137
- package/dist/columns/column_snapshot_provider.cjs.map +0 -1
- package/dist/columns/column_snapshot_provider.d.ts +0 -74
- package/dist/columns/column_snapshot_provider.d.ts.map +0 -1
- package/dist/columns/column_snapshot_provider.js +0 -133
- package/dist/columns/column_snapshot_provider.js.map +0 -1
- package/dist/columns/ctx_column_sources.cjs +0 -80
- package/dist/columns/ctx_column_sources.cjs.map +0 -1
- package/dist/columns/ctx_column_sources.d.ts +0 -30
- package/dist/columns/ctx_column_sources.d.ts.map +0 -1
- package/dist/columns/ctx_column_sources.js +0 -79
- package/dist/columns/ctx_column_sources.js.map +0 -1
- package/src/columns/column_collection_builder.test.ts +0 -484
- package/src/columns/column_collection_builder.ts +0 -485
- package/src/columns/column_selector.test.ts +0 -90
- package/src/columns/column_selector.ts +0 -100
- package/src/columns/column_snapshot.ts +0 -58
- package/src/columns/column_snapshot_provider.ts +0 -194
- package/src/columns/ctx_column_sources.ts +0 -99
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
const require_accessor = require("../render/accessor.cjs");
|
|
2
|
-
const require_get_services = require("../services/get_services.cjs");
|
|
3
|
-
require("../services/index.cjs");
|
|
4
|
-
const require_column_snapshot_provider = require("./column_snapshot_provider.cjs");
|
|
5
|
-
const require_column_selector = require("./column_selector.cjs");
|
|
6
|
-
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
7
|
-
let _milaboratories_helpers = require("@milaboratories/helpers");
|
|
8
|
-
//#region src/columns/column_collection_builder.ts
|
|
9
|
-
/**
|
|
10
|
-
* Mutable builder that accumulates column sources, then produces
|
|
11
|
-
* a ColumnCollection (plain) or AnchoredColumnCollection (with anchors).
|
|
12
|
-
*
|
|
13
|
-
* Each output lambda creates its own builder — a constraint of the
|
|
14
|
-
* computable framework where each output tracks its own dependencies.
|
|
15
|
-
*/
|
|
16
|
-
var ColumnCollectionBuilder = class {
|
|
17
|
-
specDriver;
|
|
18
|
-
providers = [];
|
|
19
|
-
constructor(specDriver = require_get_services.getService("pframeSpec")) {
|
|
20
|
-
this.specDriver = specDriver;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Register a column source. Sources added first take precedence for dedup.
|
|
24
|
-
* Does NOT accept undefined — if a source isn't available yet,
|
|
25
|
-
* the caller should return undefined from the output lambda.
|
|
26
|
-
*/
|
|
27
|
-
addSource(source) {
|
|
28
|
-
if (source instanceof require_accessor.TreeNodeAccessor) {
|
|
29
|
-
const columns = source.getPColumns();
|
|
30
|
-
if (columns) this.providers.push(new require_column_snapshot_provider.ArrayColumnProvider(columns));
|
|
31
|
-
} else this.providers.push(require_column_snapshot_provider.toColumnSnapshotProvider(source));
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
addSources(sources) {
|
|
35
|
-
for (const source of sources) this.addSource(source);
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
build(options) {
|
|
39
|
-
const allowPartial = options?.allowPartialColumnList === true;
|
|
40
|
-
if (!this.providers.every((p) => p.isColumnListComplete()) && !allowPartial) return void 0;
|
|
41
|
-
const columns = collectColumns(this.providers);
|
|
42
|
-
if (options !== void 0 && "anchors" in options) return new AnchoredColumnCollectionImpl(this.specDriver, {
|
|
43
|
-
anchors: options.anchors,
|
|
44
|
-
columns
|
|
45
|
-
});
|
|
46
|
-
else return new ColumnCollectionImpl(this.specDriver, { columns });
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
var ColumnCollectionImpl = class {
|
|
50
|
-
specDriver;
|
|
51
|
-
columns;
|
|
52
|
-
specFrameEntry;
|
|
53
|
-
constructor(specDriver, options) {
|
|
54
|
-
this.specDriver = specDriver;
|
|
55
|
-
this.columns = new Map(options.columns.map((col) => [col.id, col]));
|
|
56
|
-
this.specFrameEntry = this.specDriver.createSpecFrame(Object.fromEntries(options.columns.map((col) => [col.id, col.spec])));
|
|
57
|
-
}
|
|
58
|
-
dispose() {
|
|
59
|
-
this.specFrameEntry.unref();
|
|
60
|
-
}
|
|
61
|
-
[Symbol.dispose]() {
|
|
62
|
-
this.dispose();
|
|
63
|
-
}
|
|
64
|
-
findColumns(options) {
|
|
65
|
-
const includeColumns = options?.include ? toMultiColumnSelectors(options.include) : void 0;
|
|
66
|
-
const excludeColumns = options?.exclude ? toMultiColumnSelectors(options.exclude) : void 0;
|
|
67
|
-
return this.specDriver.discoverColumns(this.specFrameEntry.key, {
|
|
68
|
-
includeColumns,
|
|
69
|
-
excludeColumns,
|
|
70
|
-
axes: [],
|
|
71
|
-
maxHops: 0,
|
|
72
|
-
constraints: matchingModeToConstraints("enrichment")
|
|
73
|
-
}).hits.map((hit) => this.columns.get(hit.hit.columnId)).filter((col) => col !== void 0);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
var AnchoredColumnCollectionImpl = class {
|
|
77
|
-
specDriver;
|
|
78
|
-
anchorsMap;
|
|
79
|
-
columnsMap;
|
|
80
|
-
specFrameEntry;
|
|
81
|
-
constructor(specDriver, options) {
|
|
82
|
-
this.specDriver = specDriver;
|
|
83
|
-
this.specFrameEntry = this.specDriver.createSpecFrame(Object.fromEntries(options.columns.map((col) => [col.id, col.spec])));
|
|
84
|
-
this.columnsMap = new Map(options.columns.map((col) => [col.id, col]));
|
|
85
|
-
this.anchorsMap = resolveAnchorMap(options.anchors, options.columns, this.specDriver.discoverColumns.bind(this.specDriver, this.specFrameEntry.key));
|
|
86
|
-
}
|
|
87
|
-
dispose() {
|
|
88
|
-
this.specFrameEntry.unref();
|
|
89
|
-
}
|
|
90
|
-
[Symbol.dispose]() {
|
|
91
|
-
this.dispose();
|
|
92
|
-
}
|
|
93
|
-
getAnchors() {
|
|
94
|
-
return this.anchorsMap;
|
|
95
|
-
}
|
|
96
|
-
findColumns(options) {
|
|
97
|
-
const constraints = matchingModeToConstraints(options?.mode ?? "enrichment");
|
|
98
|
-
const includeColumns = options?.include ? toMultiColumnSelectors(options.include) : void 0;
|
|
99
|
-
const excludeColumns = options?.exclude ? toMultiColumnSelectors(options.exclude) : void 0;
|
|
100
|
-
const anchors = Array.from(this.anchorsMap.values());
|
|
101
|
-
const byColumn = this.specDriver.discoverColumns(this.specFrameEntry.key, {
|
|
102
|
-
includeColumns,
|
|
103
|
-
excludeColumns,
|
|
104
|
-
constraints,
|
|
105
|
-
maxHops: options?.maxHops ?? 4,
|
|
106
|
-
axes: anchors.map((anchor) => ({
|
|
107
|
-
axesSpec: anchor.spec.axesSpec,
|
|
108
|
-
qualifications: []
|
|
109
|
-
}))
|
|
110
|
-
}).hits.reduce((acc, hit) => {
|
|
111
|
-
const origId = hit.hit.columnId;
|
|
112
|
-
const col = this.columnsMap.get(origId) ?? (0, _milaboratories_helpers.throwError)(`Column with id ${origId} not found in collection`);
|
|
113
|
-
const path = hit.path.map((step) => {
|
|
114
|
-
if (step.type !== "linker") throw new Error(`Unexpected discover-columns step type: ${step.type}`);
|
|
115
|
-
return { linker: this.columnsMap.get(step.linker.columnId) ?? (0, _milaboratories_helpers.throwError)(`Linker column with id ${step.linker.columnId} not found in collection`) };
|
|
116
|
-
});
|
|
117
|
-
const variants = hit.mappingVariants.map((v) => ({
|
|
118
|
-
path,
|
|
119
|
-
qualifications: remapFromIdxToId(v.qualifications, anchors)
|
|
120
|
-
}));
|
|
121
|
-
const existing = acc.get(origId);
|
|
122
|
-
return acc.set(origId, existing === void 0 ? {
|
|
123
|
-
column: col,
|
|
124
|
-
variants
|
|
125
|
-
} : {
|
|
126
|
-
...existing,
|
|
127
|
-
variants: [...existing.variants, ...variants]
|
|
128
|
-
});
|
|
129
|
-
}, /* @__PURE__ */ new Map());
|
|
130
|
-
return Array.from(byColumn.values());
|
|
131
|
-
}
|
|
132
|
-
findColumnVariants(options) {
|
|
133
|
-
return this.findColumns(options).flatMap((match) => match.variants.map((variant) => ({
|
|
134
|
-
column: match.column,
|
|
135
|
-
path: variant.path,
|
|
136
|
-
qualifications: variant.qualifications
|
|
137
|
-
})));
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
/**
|
|
141
|
-
* Collect all columns from all providers, dedup by NativePObjectId.
|
|
142
|
-
* First source wins.
|
|
143
|
-
*/
|
|
144
|
-
function collectColumns(providers) {
|
|
145
|
-
const seen = /* @__PURE__ */ new Set();
|
|
146
|
-
const result = [];
|
|
147
|
-
for (const provider of providers) {
|
|
148
|
-
const columns = provider.getAllColumns();
|
|
149
|
-
for (const col of columns) {
|
|
150
|
-
const nativeId = (0, _milaboratories_pl_model_common.deriveNativeId)(col.spec);
|
|
151
|
-
if (seen.has(nativeId)) continue;
|
|
152
|
-
seen.add(nativeId);
|
|
153
|
-
result.push(col);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return result;
|
|
157
|
-
}
|
|
158
|
-
/** Normalize ColumnSelector (relaxed, single or array) to MultiColumnSelector[]. */
|
|
159
|
-
function toMultiColumnSelectors(input) {
|
|
160
|
-
return require_column_selector.convertColumnSelectorToMultiColumnSelector(input);
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Resolve each anchor entry to a ColumnSnapshot from the collected columns.
|
|
164
|
-
* - PObjectId (string): looked up by id in the collected columns
|
|
165
|
-
* - PColumnSpec: matched by deriveNativeId against collected columns
|
|
166
|
-
* - RelaxedColumnSelector: resolved via discoverColumns in "exact" mode;
|
|
167
|
-
* must match exactly one column
|
|
168
|
-
* Throws on unresolved, ambiguous, or duplicated matches. Requires at least one
|
|
169
|
-
* anchor to resolve.
|
|
170
|
-
*/
|
|
171
|
-
function resolveAnchorMap(anchors, columns, discoverColumns) {
|
|
172
|
-
const result = /* @__PURE__ */ new Map();
|
|
173
|
-
const resovedIds = /* @__PURE__ */ new Set();
|
|
174
|
-
const getDuplicateError = (key) => `Anchor "${key}": selector matched a column that was already matched by another anchor; please refine the selector to match a different column`;
|
|
175
|
-
let byId;
|
|
176
|
-
let byNativeId;
|
|
177
|
-
for (const [name, anchor] of Object.entries(anchors)) if (typeof anchor === "string") {
|
|
178
|
-
if (byId === void 0) byId = new Map(columns.map((col) => [col.id, col]));
|
|
179
|
-
const found = byId.get(anchor) ?? (0, _milaboratories_helpers.throwError)(`Anchor "${name}": column with id "${anchor}" not found in sources`);
|
|
180
|
-
if (resovedIds.has(found.id)) (0, _milaboratories_helpers.throwError)(getDuplicateError(name));
|
|
181
|
-
result.set(name, found);
|
|
182
|
-
resovedIds.add(found.id);
|
|
183
|
-
} else if ("kind" in anchor) {
|
|
184
|
-
if (!(0, _milaboratories_pl_model_common.isPColumnSpec)(anchor)) (0, _milaboratories_helpers.throwError)(`Anchor "${name}": invalid PColumnSpec`);
|
|
185
|
-
if (byNativeId === void 0) byNativeId = new Map(columns.map((col) => [(0, _milaboratories_pl_model_common.deriveNativeId)(col.spec), col]));
|
|
186
|
-
const found = byNativeId.get((0, _milaboratories_pl_model_common.deriveNativeId)(anchor)) ?? (0, _milaboratories_helpers.throwError)(`Anchor "${name}": no column matching spec found in sources`);
|
|
187
|
-
if (resovedIds.has(found.id)) (0, _milaboratories_helpers.throwError)(getDuplicateError(name));
|
|
188
|
-
result.set(name, found);
|
|
189
|
-
resovedIds.add(found.id);
|
|
190
|
-
} else {
|
|
191
|
-
const matched = discoverColumns({
|
|
192
|
-
includeColumns: toMultiColumnSelectors(anchor),
|
|
193
|
-
excludeColumns: void 0,
|
|
194
|
-
axes: [],
|
|
195
|
-
maxHops: 0,
|
|
196
|
-
constraints: matchingModeToConstraints("related")
|
|
197
|
-
});
|
|
198
|
-
if (matched.hits.length === 0) (0, _milaboratories_helpers.throwError)(`Anchor "${name}": no columns matched selector`);
|
|
199
|
-
if (matched.hits.length > 1) (0, _milaboratories_helpers.throwError)(`Anchor "${name}": selector is ambiguous and matched multiple columns; please refine the selector to match exactly one column`);
|
|
200
|
-
if (resovedIds.has(matched.hits[0].hit.columnId)) (0, _milaboratories_helpers.throwError)(getDuplicateError(name));
|
|
201
|
-
const id = matched.hits[0].hit.columnId;
|
|
202
|
-
const snap = columns.find((col) => col.id === id) ?? (0, _milaboratories_helpers.throwError)(`Anchor "${name}": matched column with id "${id}" not found in sources`);
|
|
203
|
-
result.set(name, snap);
|
|
204
|
-
resovedIds.add(snap.id);
|
|
205
|
-
}
|
|
206
|
-
if (resovedIds.size === 0) (0, _milaboratories_helpers.throwError)("At least one anchor must be resolved to a valid column");
|
|
207
|
-
return result;
|
|
208
|
-
}
|
|
209
|
-
function remapFromIdxToId(qualifications, anchors) {
|
|
210
|
-
const forQueries = qualifications.forQueries.reduce((acc, qs, i) => anchors[i] && qs.length > 0 ? acc.set(anchors[i].id, qs) : acc, /* @__PURE__ */ new Map());
|
|
211
|
-
return {
|
|
212
|
-
forQueries: forQueries.size > 0 ? Object.fromEntries(forQueries) : void 0,
|
|
213
|
-
forHit: qualifications.forHit.length > 0 ? qualifications.forHit : void 0
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
function matchingModeToConstraints(mode) {
|
|
217
|
-
switch (mode) {
|
|
218
|
-
case "enrichment": return {
|
|
219
|
-
allowFloatingSourceAxes: true,
|
|
220
|
-
allowFloatingHitAxes: false,
|
|
221
|
-
allowSourceQualifications: true,
|
|
222
|
-
allowHitQualifications: true
|
|
223
|
-
};
|
|
224
|
-
case "related": return {
|
|
225
|
-
allowFloatingSourceAxes: true,
|
|
226
|
-
allowFloatingHitAxes: true,
|
|
227
|
-
allowSourceQualifications: true,
|
|
228
|
-
allowHitQualifications: true
|
|
229
|
-
};
|
|
230
|
-
case "exact": return {
|
|
231
|
-
allowFloatingSourceAxes: false,
|
|
232
|
-
allowFloatingHitAxes: false,
|
|
233
|
-
allowSourceQualifications: false,
|
|
234
|
-
allowHitQualifications: false
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
//#endregion
|
|
239
|
-
exports.ColumnCollectionBuilder = ColumnCollectionBuilder;
|
|
240
|
-
|
|
241
|
-
//# sourceMappingURL=column_collection_builder.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column_collection_builder.cjs","names":["getService","TreeNodeAccessor","ArrayColumnProvider","toColumnSnapshotProvider","convertColumnSelectorToMultiColumnSelector"],"sources":["../../src/columns/column_collection_builder.ts"],"sourcesContent":["import type {\n AxisQualification,\n DiscoverColumnsConstraints,\n DiscoverColumnsRequest,\n DiscoverColumnsResponse,\n MultiColumnSelector,\n NativePObjectId,\n PColumnSpec,\n PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport { deriveNativeId, isPColumnSpec } from \"@milaboratories/pl-model-common\";\nimport type { ColumnSelector, RelaxedColumnSelector } from \"./column_selector\";\nimport { convertColumnSelectorToMultiColumnSelector } from \"./column_selector\";\nimport { TreeNodeAccessor } from \"../render/accessor\";\nimport type { ColumnSnapshot } from \"./column_snapshot\";\nimport type { ColumnSnapshotProvider, ColumnSource } from \"./column_snapshot_provider\";\nimport { ArrayColumnProvider, toColumnSnapshotProvider } from \"./column_snapshot_provider\";\n\nimport type { PFrameSpecDriver, PoolEntry, SpecFrameHandle } from \"@milaboratories/pl-model-common\";\nimport { throwError } from \"@milaboratories/helpers\";\nimport { getService } from \"../services\";\n\n/** Options for plain collection findColumns. */\nexport interface FindColumnsOptions {\n /** Include columns matching these selectors. If omitted, includes all columns. */\n include?: ColumnSelector;\n /** Exclude columns matching these selectors. */\n exclude?: ColumnSelector;\n}\n\n/** Plain collection — no axis context, selector-based filtering only. */\nexport interface ColumnCollection extends Disposable {\n /** Release the underlying spec frame WASM resource. */\n dispose(): void;\n\n /** Find columns matching selectors. Returns flat list of snapshots.\n * No axis compatibility matching, no linker traversal.\n * Never returns undefined — the \"not ready\" state was absorbed by the builder. */\n findColumns(options?: FindColumnsOptions): ColumnSnapshot<PObjectId>[];\n}\n\n/** Axis-aware column collection with anchored identity derivation. */\nexport interface AnchoredColumnCollection extends Disposable {\n /** Release the underlying spec frame WASM resource. */\n dispose(): void;\n\n /** List of anchors used for discovery, with their resolved specs. */\n getAnchors(): Map<string, ColumnSnapshot<PObjectId>>;\n\n /** Axis-aware column discovery. */\n findColumns(options?: AnchoredFindColumnsOptions): ColumnMatch[];\n\n /** Variant discovery with detailed mapping info for each hit. */\n findColumnVariants(options?: AnchoredFindColumnsOptions): ColumnVariant[];\n}\n\n/** Controls axis matching behavior for anchored discovery. */\nexport type MatchingMode = \"enrichment\" | \"related\" | \"exact\";\n\n/** Options for anchored collection findColumns. */\nexport interface AnchoredFindColumnsOptions extends FindColumnsOptions {\n /** Controls axis matching behavior. Default: 'enrichment'. */\n mode?: MatchingMode;\n /** Maximum linker hops for cross-domain discovery (0 = direct only, default: 4). */\n maxHops?: number;\n}\n\n/** Result of anchored discovery — column snapshot + routing info. */\nexport interface ColumnMatch {\n /** Column snapshot with anchored SUniversalPColumnId. */\n readonly column: ColumnSnapshot<PObjectId>;\n /** Match variants — different ways (paths/qualifications) to reach this column. */\n readonly variants: MatchVariant[];\n}\n\nexport interface ColumnVariant<Id extends PObjectId = PObjectId> {\n /** Column snapshot with anchored SUniversalPColumnId. */\n readonly column: ColumnSnapshot<Id>;\n /** Linker steps traversed to reach this hit; empty for direct matches. */\n readonly path?: { linker: ColumnSnapshot<PObjectId> }[];\n /** Full qualifications needed for integration. */\n readonly qualifications?: MatchQualifications;\n}\n\n/** A single mapping variant describing how a hit column can be integrated. */\nexport interface MatchVariant {\n /** Full qualifications needed for integration. */\n readonly qualifications: MatchQualifications;\n /** Linker steps traversed to reach this hit; empty for direct matches. */\n readonly path: { linker: ColumnSnapshot<PObjectId> }[];\n}\n\n/** Qualifications needed for both already-integrated anchor columns and the hit column. */\nexport interface MatchQualifications {\n /** Qualifications for already-integrated anchor columns */\n readonly forQueries?: Record<PObjectId, AxisQualification[]>;\n /** Qualifications for the hit column. */\n readonly forHit?: AxisQualification[];\n}\n\nexport interface BuildOptions {\n allowPartialColumnList?: true;\n}\n\nexport type AnchorEntry = PObjectId | PColumnSpec | RelaxedColumnSelector;\n\nexport interface AnchoredBuildOptions extends BuildOptions {\n anchors: Record<string, AnchorEntry>;\n}\n\n/**\n * Mutable builder that accumulates column sources, then produces\n * a ColumnCollection (plain) or AnchoredColumnCollection (with anchors).\n *\n * Each output lambda creates its own builder — a constraint of the\n * computable framework where each output tracks its own dependencies.\n */\nexport class ColumnCollectionBuilder {\n private readonly providers: ColumnSnapshotProvider[] = [];\n\n constructor(private readonly specDriver: PFrameSpecDriver = getService(\"pframeSpec\")) {}\n\n /**\n * Register a column source. Sources added first take precedence for dedup.\n * Does NOT accept undefined — if a source isn't available yet,\n * the caller should return undefined from the output lambda.\n */\n addSource(source: ColumnSource | TreeNodeAccessor): this {\n if (source instanceof TreeNodeAccessor) {\n const columns = source.getPColumns();\n if (columns) this.providers.push(new ArrayColumnProvider(columns));\n } else {\n this.providers.push(toColumnSnapshotProvider(source));\n }\n return this;\n }\n\n addSources(sources: (ColumnSource | TreeNodeAccessor)[]): this {\n for (const source of sources) {\n this.addSource(source);\n }\n return this;\n }\n\n /** Plain collection — selector-based filtering, PObjectId namespace. */\n build(): undefined | ColumnCollection;\n build(options: {\n allowPartialColumnList: true;\n }): ColumnCollection & { readonly columnListComplete: boolean };\n /** Anchored collection — axis-aware discovery, SUniversalPColumnId namespace. */\n build(\n options: AnchoredBuildOptions & { allowPartialColumnList: true },\n ): AnchoredColumnCollection & { readonly columnListComplete: boolean };\n build(options: AnchoredBuildOptions): undefined | AnchoredColumnCollection;\n build(\n options?: BuildOptions | AnchoredBuildOptions,\n ):\n | undefined\n | ColumnCollection\n | AnchoredColumnCollection\n | (ColumnCollection & { readonly columnListComplete: boolean })\n | (AnchoredColumnCollection & { readonly columnListComplete: boolean }) {\n const allowPartial = options?.allowPartialColumnList === true;\n\n // Check column list completeness\n const allComplete = this.providers.every((p) => p.isColumnListComplete());\n if (!allComplete && !allowPartial) return undefined;\n\n // Collect all columns, dedup by native ID (first source wins)\n const columns = collectColumns(this.providers);\n const hasAnchors = options !== undefined && \"anchors\" in options;\n\n if (hasAnchors) {\n return new AnchoredColumnCollectionImpl(this.specDriver, {\n anchors: options.anchors,\n columns,\n });\n } else {\n return new ColumnCollectionImpl(this.specDriver, {\n columns,\n });\n }\n }\n}\n\ninterface ColumnCollectionImplOptions {\n readonly columns: ColumnSnapshot<PObjectId>[];\n}\n\nclass ColumnCollectionImpl implements ColumnCollection, Disposable {\n private readonly columns: Map<PObjectId, ColumnSnapshot<PObjectId>>;\n private readonly specFrameEntry: PoolEntry<SpecFrameHandle>;\n\n constructor(\n private readonly specDriver: PFrameSpecDriver,\n options: ColumnCollectionImplOptions,\n ) {\n this.columns = new Map(options.columns.map((col) => [col.id, col]));\n this.specFrameEntry = this.specDriver.createSpecFrame(\n Object.fromEntries(options.columns.map((col) => [col.id, col.spec])),\n );\n }\n\n dispose(): void {\n this.specFrameEntry.unref();\n }\n\n [Symbol.dispose](): void {\n this.dispose();\n }\n\n findColumns(options?: FindColumnsOptions): ColumnSnapshot<PObjectId>[] {\n const includeColumns = options?.include ? toMultiColumnSelectors(options.include) : undefined;\n const excludeColumns = options?.exclude ? toMultiColumnSelectors(options.exclude) : undefined;\n\n const response = this.specDriver.discoverColumns(this.specFrameEntry.key, {\n includeColumns,\n excludeColumns,\n axes: [],\n maxHops: 0,\n constraints: matchingModeToConstraints(\"enrichment\"),\n });\n\n // Map hits back to snapshots\n const results = response.hits\n .map((hit) => this.columns.get(hit.hit.columnId as PObjectId))\n .filter((col): col is ColumnSnapshot<PObjectId> => col !== undefined);\n\n return results;\n }\n}\n\ninterface AnchoredColumnCollectionImplOptions extends ColumnCollectionImplOptions {\n readonly anchors: Record<string, AnchorEntry>;\n}\n\nclass AnchoredColumnCollectionImpl implements AnchoredColumnCollection, Disposable {\n private readonly anchorsMap: Map<string, ColumnSnapshot<PObjectId>>;\n private readonly columnsMap: Map<PObjectId, ColumnSnapshot<PObjectId>>;\n private readonly specFrameEntry: PoolEntry<SpecFrameHandle>;\n\n constructor(\n private readonly specDriver: PFrameSpecDriver,\n options: AnchoredColumnCollectionImplOptions,\n ) {\n // Create spec frame from all collected columns\n this.specFrameEntry = this.specDriver.createSpecFrame(\n Object.fromEntries(options.columns.map((col) => [col.id, col.spec])),\n );\n this.columnsMap = new Map(options.columns.map((col) => [col.id, col]));\n this.anchorsMap = resolveAnchorMap(\n options.anchors,\n options.columns,\n this.specDriver.discoverColumns.bind(this.specDriver, this.specFrameEntry.key),\n );\n }\n\n dispose(): void {\n this.specFrameEntry.unref();\n }\n\n [Symbol.dispose](): void {\n this.dispose();\n }\n\n getAnchors(): Map<string, ColumnSnapshot<PObjectId>> {\n return this.anchorsMap;\n }\n\n findColumns(options?: AnchoredFindColumnsOptions): ColumnMatch[] {\n const mode = options?.mode ?? \"enrichment\";\n const constraints = matchingModeToConstraints(mode);\n const includeColumns = options?.include ? toMultiColumnSelectors(options.include) : undefined;\n const excludeColumns = options?.exclude ? toMultiColumnSelectors(options.exclude) : undefined;\n const anchors = Array.from(this.anchorsMap.values());\n const response = this.specDriver.discoverColumns(this.specFrameEntry.key, {\n includeColumns,\n excludeColumns,\n constraints,\n maxHops: options?.maxHops ?? 4,\n axes: anchors.map((anchor) => ({\n axesSpec: anchor.spec.axesSpec,\n qualifications: [],\n })),\n });\n\n const byColumn = response.hits.reduce<Map<PObjectId, ColumnMatch>>((acc, hit) => {\n const origId = hit.hit.columnId as PObjectId;\n const col =\n this.columnsMap.get(origId) ??\n throwError(`Column with id ${origId} not found in collection`);\n\n const path = hit.path.map((step) => {\n if (step.type !== \"linker\") {\n throw new Error(`Unexpected discover-columns step type: ${step.type}`);\n }\n\n return {\n linker:\n this.columnsMap.get(step.linker.columnId) ??\n throwError(`Linker column with id ${step.linker.columnId} not found in collection`),\n };\n });\n const variants: MatchVariant[] = hit.mappingVariants.map((v) => ({\n path,\n qualifications: remapFromIdxToId(v.qualifications, anchors),\n }));\n const existing = acc.get(origId);\n return acc.set(\n origId,\n existing === undefined\n ? { column: col, variants }\n : { ...existing, variants: [...existing.variants, ...variants] },\n );\n }, new Map());\n\n return Array.from(byColumn.values());\n }\n\n findColumnVariants(options?: AnchoredFindColumnsOptions): ColumnVariant[] {\n const matches = this.findColumns(options);\n return matches.flatMap((match) =>\n match.variants.map((variant) => ({\n column: match.column,\n path: variant.path,\n qualifications: variant.qualifications,\n })),\n );\n }\n}\n\n/**\n * Collect all columns from all providers, dedup by NativePObjectId.\n * First source wins.\n */\nfunction collectColumns(providers: ColumnSnapshotProvider[]): ColumnSnapshot<PObjectId>[] {\n const seen = new Set<NativePObjectId>();\n const result: ColumnSnapshot<PObjectId>[] = [];\n\n for (const provider of providers) {\n const columns = provider.getAllColumns();\n for (const col of columns) {\n const nativeId = deriveNativeId(col.spec);\n if (seen.has(nativeId)) continue;\n seen.add(nativeId);\n result.push(col);\n }\n }\n\n return result;\n}\n\n/** Normalize ColumnSelector (relaxed, single or array) to MultiColumnSelector[]. */\nfunction toMultiColumnSelectors(input: ColumnSelector): MultiColumnSelector[] {\n return convertColumnSelectorToMultiColumnSelector(input);\n}\n\n/**\n * Resolve each anchor entry to a ColumnSnapshot from the collected columns.\n * - PObjectId (string): looked up by id in the collected columns\n * - PColumnSpec: matched by deriveNativeId against collected columns\n * - RelaxedColumnSelector: resolved via discoverColumns in \"exact\" mode;\n * must match exactly one column\n * Throws on unresolved, ambiguous, or duplicated matches. Requires at least one\n * anchor to resolve.\n */\nfunction resolveAnchorMap(\n anchors: Record<string, AnchorEntry>,\n columns: ColumnSnapshot<PObjectId>[],\n discoverColumns: (request: DiscoverColumnsRequest) => DiscoverColumnsResponse,\n): Map<string, ColumnSnapshot<PObjectId>> {\n const result = new Map<string, ColumnSnapshot<PObjectId>>();\n const resovedIds = new Set<PObjectId>();\n const getDuplicateError = (key: string) =>\n `Anchor \"${key}\": selector matched a column that was already matched by another anchor; please refine the selector to match a different column`;\n\n // O(1) lookup maps built lazily — only when an anchor of the matching kind is\n // encountered. Avoids O(anchors × columns) `deriveNativeId` calls, which were\n // tripping the QuickJS interrupt deadline on tables with many anchors.\n let byId: Map<PObjectId, ColumnSnapshot<PObjectId>> | undefined;\n let byNativeId: Map<NativePObjectId, ColumnSnapshot<PObjectId>> | undefined;\n\n for (const [name, anchor] of Object.entries(anchors)) {\n if (typeof anchor === \"string\") {\n if (byId === undefined) byId = new Map(columns.map((col) => [col.id, col]));\n const found =\n byId.get(anchor) ??\n throwError(`Anchor \"${name}\": column with id \"${anchor}\" not found in sources`);\n if (resovedIds.has(found.id)) {\n throwError(getDuplicateError(name));\n }\n result.set(name, found);\n resovedIds.add(found.id);\n } else if (\"kind\" in anchor) {\n if (!isPColumnSpec(anchor)) throwError(`Anchor \"${name}\": invalid PColumnSpec`);\n if (byNativeId === undefined) {\n byNativeId = new Map(columns.map((col) => [deriveNativeId(col.spec), col]));\n }\n const found =\n byNativeId.get(deriveNativeId(anchor)) ??\n throwError(`Anchor \"${name}\": no column matching spec found in sources`);\n if (resovedIds.has(found.id)) {\n throwError(getDuplicateError(name));\n }\n result.set(name, found);\n resovedIds.add(found.id);\n } else {\n const matched = discoverColumns({\n includeColumns: toMultiColumnSelectors(anchor),\n excludeColumns: undefined,\n axes: [],\n maxHops: 0,\n constraints: matchingModeToConstraints(\"related\"),\n });\n\n if (matched.hits.length === 0) {\n throwError(`Anchor \"${name}\": no columns matched selector`);\n }\n if (matched.hits.length > 1) {\n throwError(\n `Anchor \"${name}\": selector is ambiguous and matched multiple columns; please refine the selector to match exactly one column`,\n );\n }\n if (resovedIds.has(matched.hits[0].hit.columnId as PObjectId)) {\n throwError(getDuplicateError(name));\n }\n\n const id = matched.hits[0].hit.columnId as PObjectId;\n const snap =\n columns.find((col) => col.id === id) ??\n throwError(`Anchor \"${name}\": matched column with id \"${id}\" not found in sources`);\n result.set(name, snap);\n resovedIds.add(snap.id);\n }\n }\n\n if (resovedIds.size === 0) {\n throwError(\"At least one anchor must be resolved to a valid column\");\n }\n\n return result;\n}\n\nfunction remapFromIdxToId(\n qualifications: {\n forQueries: AxisQualification[][];\n forHit: AxisQualification[];\n },\n anchors: ColumnSnapshot<PObjectId>[],\n): MatchQualifications {\n const forQueries = qualifications.forQueries.reduce(\n (acc, qs, i) => (anchors[i] && qs.length > 0 ? acc.set(anchors[i].id, qs) : acc),\n new Map<PObjectId, AxisQualification[]>(),\n );\n return {\n forQueries: forQueries.size > 0 ? Object.fromEntries(forQueries) : undefined,\n forHit: qualifications.forHit.length > 0 ? qualifications.forHit : undefined,\n };\n}\n\nfunction matchingModeToConstraints(mode: MatchingMode): DiscoverColumnsConstraints {\n switch (mode) {\n case \"enrichment\":\n return {\n allowFloatingSourceAxes: true,\n allowFloatingHitAxes: false,\n allowSourceQualifications: true,\n allowHitQualifications: true,\n };\n case \"related\":\n return {\n allowFloatingSourceAxes: true,\n allowFloatingHitAxes: true,\n allowSourceQualifications: true,\n allowHitQualifications: true,\n };\n case \"exact\":\n return {\n allowFloatingSourceAxes: false,\n allowFloatingHitAxes: false,\n allowSourceQualifications: false,\n allowHitQualifications: false,\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { TreeNodeAccessor } from "../render/accessor.js";
|
|
2
|
-
import { ColumnSelector, RelaxedColumnSelector } from "./column_selector.js";
|
|
3
|
-
import { ColumnSnapshot } from "./column_snapshot.js";
|
|
4
|
-
import { ColumnSource } from "./column_snapshot_provider.js";
|
|
5
|
-
import { AxisQualification, PColumnSpec, PFrameSpecDriver, PObjectId } from "@milaboratories/pl-model-common";
|
|
6
|
-
|
|
7
|
-
//#region src/columns/column_collection_builder.d.ts
|
|
8
|
-
/** Options for plain collection findColumns. */
|
|
9
|
-
interface FindColumnsOptions {
|
|
10
|
-
/** Include columns matching these selectors. If omitted, includes all columns. */
|
|
11
|
-
include?: ColumnSelector;
|
|
12
|
-
/** Exclude columns matching these selectors. */
|
|
13
|
-
exclude?: ColumnSelector;
|
|
14
|
-
}
|
|
15
|
-
/** Plain collection — no axis context, selector-based filtering only. */
|
|
16
|
-
interface ColumnCollection extends Disposable {
|
|
17
|
-
/** Release the underlying spec frame WASM resource. */
|
|
18
|
-
dispose(): void;
|
|
19
|
-
/** Find columns matching selectors. Returns flat list of snapshots.
|
|
20
|
-
* No axis compatibility matching, no linker traversal.
|
|
21
|
-
* Never returns undefined — the "not ready" state was absorbed by the builder. */
|
|
22
|
-
findColumns(options?: FindColumnsOptions): ColumnSnapshot<PObjectId>[];
|
|
23
|
-
}
|
|
24
|
-
/** Axis-aware column collection with anchored identity derivation. */
|
|
25
|
-
interface AnchoredColumnCollection extends Disposable {
|
|
26
|
-
/** Release the underlying spec frame WASM resource. */
|
|
27
|
-
dispose(): void;
|
|
28
|
-
/** List of anchors used for discovery, with their resolved specs. */
|
|
29
|
-
getAnchors(): Map<string, ColumnSnapshot<PObjectId>>;
|
|
30
|
-
/** Axis-aware column discovery. */
|
|
31
|
-
findColumns(options?: AnchoredFindColumnsOptions): ColumnMatch[];
|
|
32
|
-
/** Variant discovery with detailed mapping info for each hit. */
|
|
33
|
-
findColumnVariants(options?: AnchoredFindColumnsOptions): ColumnVariant[];
|
|
34
|
-
}
|
|
35
|
-
/** Controls axis matching behavior for anchored discovery. */
|
|
36
|
-
type MatchingMode = "enrichment" | "related" | "exact";
|
|
37
|
-
/** Options for anchored collection findColumns. */
|
|
38
|
-
interface AnchoredFindColumnsOptions extends FindColumnsOptions {
|
|
39
|
-
/** Controls axis matching behavior. Default: 'enrichment'. */
|
|
40
|
-
mode?: MatchingMode;
|
|
41
|
-
/** Maximum linker hops for cross-domain discovery (0 = direct only, default: 4). */
|
|
42
|
-
maxHops?: number;
|
|
43
|
-
}
|
|
44
|
-
/** Result of anchored discovery — column snapshot + routing info. */
|
|
45
|
-
interface ColumnMatch {
|
|
46
|
-
/** Column snapshot with anchored SUniversalPColumnId. */
|
|
47
|
-
readonly column: ColumnSnapshot<PObjectId>;
|
|
48
|
-
/** Match variants — different ways (paths/qualifications) to reach this column. */
|
|
49
|
-
readonly variants: MatchVariant[];
|
|
50
|
-
}
|
|
51
|
-
interface ColumnVariant<Id extends PObjectId = PObjectId> {
|
|
52
|
-
/** Column snapshot with anchored SUniversalPColumnId. */
|
|
53
|
-
readonly column: ColumnSnapshot<Id>;
|
|
54
|
-
/** Linker steps traversed to reach this hit; empty for direct matches. */
|
|
55
|
-
readonly path?: {
|
|
56
|
-
linker: ColumnSnapshot<PObjectId>;
|
|
57
|
-
}[];
|
|
58
|
-
/** Full qualifications needed for integration. */
|
|
59
|
-
readonly qualifications?: MatchQualifications;
|
|
60
|
-
}
|
|
61
|
-
/** A single mapping variant describing how a hit column can be integrated. */
|
|
62
|
-
interface MatchVariant {
|
|
63
|
-
/** Full qualifications needed for integration. */
|
|
64
|
-
readonly qualifications: MatchQualifications;
|
|
65
|
-
/** Linker steps traversed to reach this hit; empty for direct matches. */
|
|
66
|
-
readonly path: {
|
|
67
|
-
linker: ColumnSnapshot<PObjectId>;
|
|
68
|
-
}[];
|
|
69
|
-
}
|
|
70
|
-
/** Qualifications needed for both already-integrated anchor columns and the hit column. */
|
|
71
|
-
interface MatchQualifications {
|
|
72
|
-
/** Qualifications for already-integrated anchor columns */
|
|
73
|
-
readonly forQueries?: Record<PObjectId, AxisQualification[]>;
|
|
74
|
-
/** Qualifications for the hit column. */
|
|
75
|
-
readonly forHit?: AxisQualification[];
|
|
76
|
-
}
|
|
77
|
-
interface BuildOptions {
|
|
78
|
-
allowPartialColumnList?: true;
|
|
79
|
-
}
|
|
80
|
-
type AnchorEntry = PObjectId | PColumnSpec | RelaxedColumnSelector;
|
|
81
|
-
interface AnchoredBuildOptions extends BuildOptions {
|
|
82
|
-
anchors: Record<string, AnchorEntry>;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Mutable builder that accumulates column sources, then produces
|
|
86
|
-
* a ColumnCollection (plain) or AnchoredColumnCollection (with anchors).
|
|
87
|
-
*
|
|
88
|
-
* Each output lambda creates its own builder — a constraint of the
|
|
89
|
-
* computable framework where each output tracks its own dependencies.
|
|
90
|
-
*/
|
|
91
|
-
declare class ColumnCollectionBuilder {
|
|
92
|
-
private readonly specDriver;
|
|
93
|
-
private readonly providers;
|
|
94
|
-
constructor(specDriver?: PFrameSpecDriver);
|
|
95
|
-
/**
|
|
96
|
-
* Register a column source. Sources added first take precedence for dedup.
|
|
97
|
-
* Does NOT accept undefined — if a source isn't available yet,
|
|
98
|
-
* the caller should return undefined from the output lambda.
|
|
99
|
-
*/
|
|
100
|
-
addSource(source: ColumnSource | TreeNodeAccessor): this;
|
|
101
|
-
addSources(sources: (ColumnSource | TreeNodeAccessor)[]): this;
|
|
102
|
-
/** Plain collection — selector-based filtering, PObjectId namespace. */
|
|
103
|
-
build(): undefined | ColumnCollection;
|
|
104
|
-
build(options: {
|
|
105
|
-
allowPartialColumnList: true;
|
|
106
|
-
}): ColumnCollection & {
|
|
107
|
-
readonly columnListComplete: boolean;
|
|
108
|
-
};
|
|
109
|
-
/** Anchored collection — axis-aware discovery, SUniversalPColumnId namespace. */
|
|
110
|
-
build(options: AnchoredBuildOptions & {
|
|
111
|
-
allowPartialColumnList: true;
|
|
112
|
-
}): AnchoredColumnCollection & {
|
|
113
|
-
readonly columnListComplete: boolean;
|
|
114
|
-
};
|
|
115
|
-
build(options: AnchoredBuildOptions): undefined | AnchoredColumnCollection;
|
|
116
|
-
}
|
|
117
|
-
//#endregion
|
|
118
|
-
export { AnchorEntry, AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, BuildOptions, ColumnCollection, ColumnCollectionBuilder, ColumnMatch, ColumnVariant, FindColumnsOptions, MatchQualifications, MatchVariant, MatchingMode };
|
|
119
|
-
//# sourceMappingURL=column_collection_builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column_collection_builder.d.ts","names":[],"sources":["../../src/columns/column_collection_builder.ts"],"mappings":";;;;;;;;UAuBiB,kBAAA;EAAkB;EAEjC,OAAA,GAAU,cAAA;EAEc;EAAxB,OAAA,GAAU,cAAc;AAAA;;UAIT,gBAAA,SAAyB,UAAA;EAJhB;EAMxB,OAAA;EAFe;;;EAOf,WAAA,CAAY,OAAA,GAAU,kBAAA,GAAqB,cAAA,CAAe,SAAA;AAAA;;UAI3C,wBAAA,SAAiC,UAAA;EAXE;EAalD,OAAA;EAbwC;EAgBxC,UAAA,IAAc,GAAA,SAAY,cAAA,CAAe,SAAA;EATzC;EAYA,WAAA,CAAY,OAAA,GAAU,0BAAA,GAA6B,WAAA;EAZvC;EAeZ,kBAAA,CAAmB,OAAA,GAAU,0BAAA,GAA6B,aAAA;AAAA;;KAIhD,YAAA;AAfZ;AAAA,UAkBiB,0BAAA,SAAmC,kBAAkB;;EAEpE,IAAA,GAAO,YAAA;EAfmB;EAiB1B,OAAA;AAAA;;UAIe,WAAA;EAf2C;EAAA,SAiBjD,MAAA,EAAQ,cAAA,CAAe,SAAA;EA5B0B;EAAA,SA8BjD,QAAA,EAAU,YAAA;AAAA;AAAA,UAGJ,aAAA,YAAyB,SAAA,GAAY,SAAA;EA5BpD;EAAA,SA8BS,MAAA,EAAQ,cAAA,CAAe,EAAA;EA9BN;EAAA,SAgCjB,IAAA;IAAS,MAAA,EAAQ,cAAA,CAAe,SAAA;EAAA;EA7B7B;EAAA,SA+BH,cAAA,GAAiB,mBAAA;AAAA;;UAIX,YAAA;EAhC2C;EAAA,SAkCjD,cAAA,EAAgB,mBAAA;EAlC8C;EAAA,SAoC9D,IAAA;IAAQ,MAAA,EAAQ,cAAA,CAAe,SAAA;EAAA;AAAA;AAhClB;AAAA,UAoCP,mBAAA;EAjC2B;EAAA,SAmCjC,UAAA,GAAa,MAAA,CAAO,SAAA,EAAW,iBAAA;EAnC4B;EAAA,SAqC3D,MAAA,GAAS,iBAAA;AAAA;AAAA,UAGH,YAAA;EACf,sBAAsB;AAAA;AAAA,KAGZ,WAAA,GAAc,SAAA,GAAY,WAAA,GAAc,qBAAA;AAAA,UAEnC,oBAAA,SAA6B,YAAA;EAC5C,OAAA,EAAS,MAAA,SAAe,WAAA;AAAA;;;;;;;;cAUb,uBAAA;EAAA,iBAGkB,UAAA;EAAA,iBAFZ,SAAA;cAEY,UAAA,GAAY,gBAAA;EAhDV;AAGjC;;;;EAoDE,SAAA,CAAU,MAAA,EAAQ,YAAA,GAAe,gBAAA;EAUjC,UAAA,CAAW,OAAA,GAAU,YAAA,GAAe,gBAAA;EA5DnB;EAoEjB,KAAA,gBAAqB,gBAAA;EACrB,KAAA,CAAM,OAAA;IACJ,sBAAA;EAAA,IACE,gBAAA;IAAA,SAA8B,kBAAA;EAAA;EAzEM;EA2ExC,KAAA,CACE,OAAA,EAAS,oBAAA;IAAyB,sBAAA;EAAA,IACjC,wBAAA;IAAA,SAAsC,kBAAA;EAAA;EACzC,KAAA,CAAM,OAAA,EAAS,oBAAA,eAAmC,wBAAA;AAAA"}
|
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import { TreeNodeAccessor } from "../render/accessor.js";
|
|
2
|
-
import { getService } from "../services/get_services.js";
|
|
3
|
-
import "../services/index.js";
|
|
4
|
-
import { ArrayColumnProvider, toColumnSnapshotProvider } from "./column_snapshot_provider.js";
|
|
5
|
-
import { convertColumnSelectorToMultiColumnSelector } from "./column_selector.js";
|
|
6
|
-
import { deriveNativeId, isPColumnSpec } from "@milaboratories/pl-model-common";
|
|
7
|
-
import { throwError } from "@milaboratories/helpers";
|
|
8
|
-
//#region src/columns/column_collection_builder.ts
|
|
9
|
-
/**
|
|
10
|
-
* Mutable builder that accumulates column sources, then produces
|
|
11
|
-
* a ColumnCollection (plain) or AnchoredColumnCollection (with anchors).
|
|
12
|
-
*
|
|
13
|
-
* Each output lambda creates its own builder — a constraint of the
|
|
14
|
-
* computable framework where each output tracks its own dependencies.
|
|
15
|
-
*/
|
|
16
|
-
var ColumnCollectionBuilder = class {
|
|
17
|
-
specDriver;
|
|
18
|
-
providers = [];
|
|
19
|
-
constructor(specDriver = getService("pframeSpec")) {
|
|
20
|
-
this.specDriver = specDriver;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Register a column source. Sources added first take precedence for dedup.
|
|
24
|
-
* Does NOT accept undefined — if a source isn't available yet,
|
|
25
|
-
* the caller should return undefined from the output lambda.
|
|
26
|
-
*/
|
|
27
|
-
addSource(source) {
|
|
28
|
-
if (source instanceof TreeNodeAccessor) {
|
|
29
|
-
const columns = source.getPColumns();
|
|
30
|
-
if (columns) this.providers.push(new ArrayColumnProvider(columns));
|
|
31
|
-
} else this.providers.push(toColumnSnapshotProvider(source));
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
addSources(sources) {
|
|
35
|
-
for (const source of sources) this.addSource(source);
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
build(options) {
|
|
39
|
-
const allowPartial = options?.allowPartialColumnList === true;
|
|
40
|
-
if (!this.providers.every((p) => p.isColumnListComplete()) && !allowPartial) return void 0;
|
|
41
|
-
const columns = collectColumns(this.providers);
|
|
42
|
-
if (options !== void 0 && "anchors" in options) return new AnchoredColumnCollectionImpl(this.specDriver, {
|
|
43
|
-
anchors: options.anchors,
|
|
44
|
-
columns
|
|
45
|
-
});
|
|
46
|
-
else return new ColumnCollectionImpl(this.specDriver, { columns });
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
var ColumnCollectionImpl = class {
|
|
50
|
-
specDriver;
|
|
51
|
-
columns;
|
|
52
|
-
specFrameEntry;
|
|
53
|
-
constructor(specDriver, options) {
|
|
54
|
-
this.specDriver = specDriver;
|
|
55
|
-
this.columns = new Map(options.columns.map((col) => [col.id, col]));
|
|
56
|
-
this.specFrameEntry = this.specDriver.createSpecFrame(Object.fromEntries(options.columns.map((col) => [col.id, col.spec])));
|
|
57
|
-
}
|
|
58
|
-
dispose() {
|
|
59
|
-
this.specFrameEntry.unref();
|
|
60
|
-
}
|
|
61
|
-
[Symbol.dispose]() {
|
|
62
|
-
this.dispose();
|
|
63
|
-
}
|
|
64
|
-
findColumns(options) {
|
|
65
|
-
const includeColumns = options?.include ? toMultiColumnSelectors(options.include) : void 0;
|
|
66
|
-
const excludeColumns = options?.exclude ? toMultiColumnSelectors(options.exclude) : void 0;
|
|
67
|
-
return this.specDriver.discoverColumns(this.specFrameEntry.key, {
|
|
68
|
-
includeColumns,
|
|
69
|
-
excludeColumns,
|
|
70
|
-
axes: [],
|
|
71
|
-
maxHops: 0,
|
|
72
|
-
constraints: matchingModeToConstraints("enrichment")
|
|
73
|
-
}).hits.map((hit) => this.columns.get(hit.hit.columnId)).filter((col) => col !== void 0);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
var AnchoredColumnCollectionImpl = class {
|
|
77
|
-
specDriver;
|
|
78
|
-
anchorsMap;
|
|
79
|
-
columnsMap;
|
|
80
|
-
specFrameEntry;
|
|
81
|
-
constructor(specDriver, options) {
|
|
82
|
-
this.specDriver = specDriver;
|
|
83
|
-
this.specFrameEntry = this.specDriver.createSpecFrame(Object.fromEntries(options.columns.map((col) => [col.id, col.spec])));
|
|
84
|
-
this.columnsMap = new Map(options.columns.map((col) => [col.id, col]));
|
|
85
|
-
this.anchorsMap = resolveAnchorMap(options.anchors, options.columns, this.specDriver.discoverColumns.bind(this.specDriver, this.specFrameEntry.key));
|
|
86
|
-
}
|
|
87
|
-
dispose() {
|
|
88
|
-
this.specFrameEntry.unref();
|
|
89
|
-
}
|
|
90
|
-
[Symbol.dispose]() {
|
|
91
|
-
this.dispose();
|
|
92
|
-
}
|
|
93
|
-
getAnchors() {
|
|
94
|
-
return this.anchorsMap;
|
|
95
|
-
}
|
|
96
|
-
findColumns(options) {
|
|
97
|
-
const constraints = matchingModeToConstraints(options?.mode ?? "enrichment");
|
|
98
|
-
const includeColumns = options?.include ? toMultiColumnSelectors(options.include) : void 0;
|
|
99
|
-
const excludeColumns = options?.exclude ? toMultiColumnSelectors(options.exclude) : void 0;
|
|
100
|
-
const anchors = Array.from(this.anchorsMap.values());
|
|
101
|
-
const byColumn = this.specDriver.discoverColumns(this.specFrameEntry.key, {
|
|
102
|
-
includeColumns,
|
|
103
|
-
excludeColumns,
|
|
104
|
-
constraints,
|
|
105
|
-
maxHops: options?.maxHops ?? 4,
|
|
106
|
-
axes: anchors.map((anchor) => ({
|
|
107
|
-
axesSpec: anchor.spec.axesSpec,
|
|
108
|
-
qualifications: []
|
|
109
|
-
}))
|
|
110
|
-
}).hits.reduce((acc, hit) => {
|
|
111
|
-
const origId = hit.hit.columnId;
|
|
112
|
-
const col = this.columnsMap.get(origId) ?? throwError(`Column with id ${origId} not found in collection`);
|
|
113
|
-
const path = hit.path.map((step) => {
|
|
114
|
-
if (step.type !== "linker") throw new Error(`Unexpected discover-columns step type: ${step.type}`);
|
|
115
|
-
return { linker: this.columnsMap.get(step.linker.columnId) ?? throwError(`Linker column with id ${step.linker.columnId} not found in collection`) };
|
|
116
|
-
});
|
|
117
|
-
const variants = hit.mappingVariants.map((v) => ({
|
|
118
|
-
path,
|
|
119
|
-
qualifications: remapFromIdxToId(v.qualifications, anchors)
|
|
120
|
-
}));
|
|
121
|
-
const existing = acc.get(origId);
|
|
122
|
-
return acc.set(origId, existing === void 0 ? {
|
|
123
|
-
column: col,
|
|
124
|
-
variants
|
|
125
|
-
} : {
|
|
126
|
-
...existing,
|
|
127
|
-
variants: [...existing.variants, ...variants]
|
|
128
|
-
});
|
|
129
|
-
}, /* @__PURE__ */ new Map());
|
|
130
|
-
return Array.from(byColumn.values());
|
|
131
|
-
}
|
|
132
|
-
findColumnVariants(options) {
|
|
133
|
-
return this.findColumns(options).flatMap((match) => match.variants.map((variant) => ({
|
|
134
|
-
column: match.column,
|
|
135
|
-
path: variant.path,
|
|
136
|
-
qualifications: variant.qualifications
|
|
137
|
-
})));
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
/**
|
|
141
|
-
* Collect all columns from all providers, dedup by NativePObjectId.
|
|
142
|
-
* First source wins.
|
|
143
|
-
*/
|
|
144
|
-
function collectColumns(providers) {
|
|
145
|
-
const seen = /* @__PURE__ */ new Set();
|
|
146
|
-
const result = [];
|
|
147
|
-
for (const provider of providers) {
|
|
148
|
-
const columns = provider.getAllColumns();
|
|
149
|
-
for (const col of columns) {
|
|
150
|
-
const nativeId = deriveNativeId(col.spec);
|
|
151
|
-
if (seen.has(nativeId)) continue;
|
|
152
|
-
seen.add(nativeId);
|
|
153
|
-
result.push(col);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return result;
|
|
157
|
-
}
|
|
158
|
-
/** Normalize ColumnSelector (relaxed, single or array) to MultiColumnSelector[]. */
|
|
159
|
-
function toMultiColumnSelectors(input) {
|
|
160
|
-
return convertColumnSelectorToMultiColumnSelector(input);
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Resolve each anchor entry to a ColumnSnapshot from the collected columns.
|
|
164
|
-
* - PObjectId (string): looked up by id in the collected columns
|
|
165
|
-
* - PColumnSpec: matched by deriveNativeId against collected columns
|
|
166
|
-
* - RelaxedColumnSelector: resolved via discoverColumns in "exact" mode;
|
|
167
|
-
* must match exactly one column
|
|
168
|
-
* Throws on unresolved, ambiguous, or duplicated matches. Requires at least one
|
|
169
|
-
* anchor to resolve.
|
|
170
|
-
*/
|
|
171
|
-
function resolveAnchorMap(anchors, columns, discoverColumns) {
|
|
172
|
-
const result = /* @__PURE__ */ new Map();
|
|
173
|
-
const resovedIds = /* @__PURE__ */ new Set();
|
|
174
|
-
const getDuplicateError = (key) => `Anchor "${key}": selector matched a column that was already matched by another anchor; please refine the selector to match a different column`;
|
|
175
|
-
let byId;
|
|
176
|
-
let byNativeId;
|
|
177
|
-
for (const [name, anchor] of Object.entries(anchors)) if (typeof anchor === "string") {
|
|
178
|
-
if (byId === void 0) byId = new Map(columns.map((col) => [col.id, col]));
|
|
179
|
-
const found = byId.get(anchor) ?? throwError(`Anchor "${name}": column with id "${anchor}" not found in sources`);
|
|
180
|
-
if (resovedIds.has(found.id)) throwError(getDuplicateError(name));
|
|
181
|
-
result.set(name, found);
|
|
182
|
-
resovedIds.add(found.id);
|
|
183
|
-
} else if ("kind" in anchor) {
|
|
184
|
-
if (!isPColumnSpec(anchor)) throwError(`Anchor "${name}": invalid PColumnSpec`);
|
|
185
|
-
if (byNativeId === void 0) byNativeId = new Map(columns.map((col) => [deriveNativeId(col.spec), col]));
|
|
186
|
-
const found = byNativeId.get(deriveNativeId(anchor)) ?? throwError(`Anchor "${name}": no column matching spec found in sources`);
|
|
187
|
-
if (resovedIds.has(found.id)) throwError(getDuplicateError(name));
|
|
188
|
-
result.set(name, found);
|
|
189
|
-
resovedIds.add(found.id);
|
|
190
|
-
} else {
|
|
191
|
-
const matched = discoverColumns({
|
|
192
|
-
includeColumns: toMultiColumnSelectors(anchor),
|
|
193
|
-
excludeColumns: void 0,
|
|
194
|
-
axes: [],
|
|
195
|
-
maxHops: 0,
|
|
196
|
-
constraints: matchingModeToConstraints("related")
|
|
197
|
-
});
|
|
198
|
-
if (matched.hits.length === 0) throwError(`Anchor "${name}": no columns matched selector`);
|
|
199
|
-
if (matched.hits.length > 1) throwError(`Anchor "${name}": selector is ambiguous and matched multiple columns; please refine the selector to match exactly one column`);
|
|
200
|
-
if (resovedIds.has(matched.hits[0].hit.columnId)) throwError(getDuplicateError(name));
|
|
201
|
-
const id = matched.hits[0].hit.columnId;
|
|
202
|
-
const snap = columns.find((col) => col.id === id) ?? throwError(`Anchor "${name}": matched column with id "${id}" not found in sources`);
|
|
203
|
-
result.set(name, snap);
|
|
204
|
-
resovedIds.add(snap.id);
|
|
205
|
-
}
|
|
206
|
-
if (resovedIds.size === 0) throwError("At least one anchor must be resolved to a valid column");
|
|
207
|
-
return result;
|
|
208
|
-
}
|
|
209
|
-
function remapFromIdxToId(qualifications, anchors) {
|
|
210
|
-
const forQueries = qualifications.forQueries.reduce((acc, qs, i) => anchors[i] && qs.length > 0 ? acc.set(anchors[i].id, qs) : acc, /* @__PURE__ */ new Map());
|
|
211
|
-
return {
|
|
212
|
-
forQueries: forQueries.size > 0 ? Object.fromEntries(forQueries) : void 0,
|
|
213
|
-
forHit: qualifications.forHit.length > 0 ? qualifications.forHit : void 0
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
function matchingModeToConstraints(mode) {
|
|
217
|
-
switch (mode) {
|
|
218
|
-
case "enrichment": return {
|
|
219
|
-
allowFloatingSourceAxes: true,
|
|
220
|
-
allowFloatingHitAxes: false,
|
|
221
|
-
allowSourceQualifications: true,
|
|
222
|
-
allowHitQualifications: true
|
|
223
|
-
};
|
|
224
|
-
case "related": return {
|
|
225
|
-
allowFloatingSourceAxes: true,
|
|
226
|
-
allowFloatingHitAxes: true,
|
|
227
|
-
allowSourceQualifications: true,
|
|
228
|
-
allowHitQualifications: true
|
|
229
|
-
};
|
|
230
|
-
case "exact": return {
|
|
231
|
-
allowFloatingSourceAxes: false,
|
|
232
|
-
allowFloatingHitAxes: false,
|
|
233
|
-
allowSourceQualifications: false,
|
|
234
|
-
allowHitQualifications: false
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
//#endregion
|
|
239
|
-
export { ColumnCollectionBuilder };
|
|
240
|
-
|
|
241
|
-
//# sourceMappingURL=column_collection_builder.js.map
|