@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,245 @@
|
|
|
1
|
+
import { ColumnOverriddenRecipe } from "./column_recipes/column_overrided_recipe.js";
|
|
2
|
+
import { getCtxProviders } from "./column_providers/index.js";
|
|
3
|
+
import { ColumnRegistry, createGlobalPObjectId, isPColumn, isPlRef } from "@milaboratories/pl-model-common";
|
|
4
|
+
import { isNil } from "es-toolkit";
|
|
5
|
+
import { LRUCache } from "lru-cache";
|
|
6
|
+
//#region src/columns/column_lazy.ts
|
|
7
|
+
/**
|
|
8
|
+
* Thrown by leaf-recipe factories when the requested column is provably
|
|
9
|
+
* absent in the active render ctx — i.e. every relevant accessor reports
|
|
10
|
+
* `inputsLocked` and the column did not appear. Distinct from the
|
|
11
|
+
* `undefined` return that the factories still use for the "resolving" case
|
|
12
|
+
* (the column may still appear later).
|
|
13
|
+
*
|
|
14
|
+
* Catch at the boundary (resolver / filter+sort wiring / data-table assembly)
|
|
15
|
+
* when partial absence should be surfaced to the user rather than silently
|
|
16
|
+
* producing an empty result.
|
|
17
|
+
*/
|
|
18
|
+
var ColumnAbsentError = class extends Error {
|
|
19
|
+
id;
|
|
20
|
+
constructor(id) {
|
|
21
|
+
super(`Column is absent in the active render ctx and will not appear: ${id}`);
|
|
22
|
+
this.id = id;
|
|
23
|
+
this.name = "ColumnAbsentError";
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* ColumnLazy is the leaf-recipe building block: a {@link ColumnRecipe} whose
|
|
28
|
+
* `id` is a bare {@link PObjectId} and whose readers are bound to a single
|
|
29
|
+
* tree-accessor leaf. Layered encodings (Overridden / Discovered / Filtered)
|
|
30
|
+
* are reified through their dedicated recipe classes and reference leaf
|
|
31
|
+
* columns by id.
|
|
32
|
+
*/
|
|
33
|
+
var ColumnLazyImpl = class ColumnLazyImpl {
|
|
34
|
+
id;
|
|
35
|
+
options;
|
|
36
|
+
specCache;
|
|
37
|
+
dataCache;
|
|
38
|
+
dataStatusCache;
|
|
39
|
+
constructor(id, options) {
|
|
40
|
+
this.id = id;
|
|
41
|
+
this.options = options;
|
|
42
|
+
}
|
|
43
|
+
/** A leaf-recipe references exactly one column — its own id. */
|
|
44
|
+
getReferencedIds() {
|
|
45
|
+
return [this.id];
|
|
46
|
+
}
|
|
47
|
+
getSpec() {
|
|
48
|
+
if (this.specCache === void 0) this.specCache = { value: this.options.getSpec() };
|
|
49
|
+
return this.specCache.value;
|
|
50
|
+
}
|
|
51
|
+
/** Leaf-shaped — points straight at `this.id`. */
|
|
52
|
+
getQuery() {
|
|
53
|
+
return {
|
|
54
|
+
type: "column",
|
|
55
|
+
column: this.id
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** Leaf-only: not on the recipe interface — only the leaf can read data directly. */
|
|
59
|
+
getData() {
|
|
60
|
+
if (this.dataCache === void 0) this.dataCache = { value: this.options.getData() };
|
|
61
|
+
return this.dataCache.value;
|
|
62
|
+
}
|
|
63
|
+
getDataStatus() {
|
|
64
|
+
if (this.dataStatusCache === void 0) this.dataStatusCache = { value: this.options.getDataStatus() };
|
|
65
|
+
return this.dataStatusCache.value;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Overlay overrides → produces a {@link ColumnOverriddenRecipe} wrapping
|
|
69
|
+
* this leaf. ColumnLazy itself stays bare (id remains a plain PObjectId);
|
|
70
|
+
* layering lives entirely in the recipe wrappers.
|
|
71
|
+
*/
|
|
72
|
+
withSpecs(overrides) {
|
|
73
|
+
return ColumnOverriddenRecipe.wrap(this, overrides);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Resolve via the ambient {@link ColumnRegistry}. Spec is resolved eagerly:
|
|
77
|
+
* returns `undefined` if the leaf isn't reachable yet (resolving). Throws
|
|
78
|
+
* {@link ColumnAbsentError} when every relevant accessor is `inputsLocked`
|
|
79
|
+
* and the column did not appear — the column will not exist in this ctx.
|
|
80
|
+
* Data and dataStatus stay lazy.
|
|
81
|
+
*/
|
|
82
|
+
static fromId(id, { ctx } = {}) {
|
|
83
|
+
const registry = new ColumnRegistry(getCtxProviders({ ctx }));
|
|
84
|
+
const leaf = registry.resolve(id);
|
|
85
|
+
if (isNil(leaf)) {
|
|
86
|
+
if (registry.isFinal()) throw new ColumnAbsentError(id);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const spec = readSpecAccessor(leaf);
|
|
90
|
+
if (isNil(spec)) {
|
|
91
|
+
if (leaf.accessor.getInputsLocked()) throw new ColumnAbsentError(id);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (!spec.hasData()) return void 0;
|
|
95
|
+
return new ColumnLazyImpl(id, {
|
|
96
|
+
getSpec: () => spec.getDataAsJson(),
|
|
97
|
+
getData: () => readDataAccessor(leaf),
|
|
98
|
+
getDataStatus: () => readDataStatus(leaf)
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/** {@link PlRef} wrapper over {@link fromId}. */
|
|
102
|
+
static fromPlRef(ref) {
|
|
103
|
+
return ColumnLazyImpl.fromId(createGlobalPObjectId(ref.blockId, ref.name));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Bind directly to an accessor-backed {@link LeafEntry} — no registry.
|
|
107
|
+
* Throws {@link ColumnAbsentError} if the leaf has no spec field and its
|
|
108
|
+
* accessor is `inputsLocked`. Returns `undefined` while still resolving.
|
|
109
|
+
*/
|
|
110
|
+
static fromAccessor(entry) {
|
|
111
|
+
const spec = readSpecAccessor(entry);
|
|
112
|
+
if (isNil(spec)) {
|
|
113
|
+
if (entry.accessor.getInputsLocked()) throw new ColumnAbsentError(entry.id);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (!spec.hasData()) return void 0;
|
|
117
|
+
return new ColumnLazyImpl(entry.id, {
|
|
118
|
+
getSpec: () => spec.getDataAsJson(),
|
|
119
|
+
getData: () => readDataAccessor(entry),
|
|
120
|
+
getDataStatus: () => readDataStatus(entry)
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Wrap a materialised {@link PColumn}. If the input is already a
|
|
125
|
+
* {@link ColumnLazy} it is returned as-is.
|
|
126
|
+
*/
|
|
127
|
+
static fromColumn(column) {
|
|
128
|
+
if (column instanceof ColumnLazyImpl) return column;
|
|
129
|
+
return new ColumnLazyImpl(column.id, {
|
|
130
|
+
getSpec: () => column.spec,
|
|
131
|
+
getData: () => column.data,
|
|
132
|
+
getDataStatus: () => "present"
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Distinguishes `present` / `resolving` / `absent` for a {@link PObjectId}
|
|
137
|
+
* in the active render ctx. Falls back to the registry's `isFinal()`
|
|
138
|
+
* when the id has no entry — only then we can say `absent` instead of
|
|
139
|
+
* `resolving`.
|
|
140
|
+
*/
|
|
141
|
+
static getStatusById(id, { ctx } = {}) {
|
|
142
|
+
const registry = new ColumnRegistry(getCtxProviders({ ctx }));
|
|
143
|
+
const leaf = registry.resolve(id);
|
|
144
|
+
if (isNil(leaf)) return registry.isFinal() ? "absent" : "resolving";
|
|
145
|
+
return getLeafEntryStatus(leaf);
|
|
146
|
+
}
|
|
147
|
+
/** {@link PlRef} wrapper over {@link getStatusById}. */
|
|
148
|
+
static getStatusByPlRef(ref, opts = {}) {
|
|
149
|
+
return ColumnLazyImpl.getStatusById(createGlobalPObjectId(ref.blockId, ref.name), opts);
|
|
150
|
+
}
|
|
151
|
+
/** No registry — reads straight off the entry's accessor. */
|
|
152
|
+
static getStatusByAccessor(entry) {
|
|
153
|
+
return getLeafEntryStatus(entry);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Unified dispatcher — picks the right `ColumnLazyImpl.fromX` by source
|
|
158
|
+
* shape. For ambiguous inputs callers can still use the explicit factories
|
|
159
|
+
* (also attached as properties: `ColumnLazy.fromId`, `.fromPlRef`,
|
|
160
|
+
* `.fromAccessor`, `.fromColumn`).
|
|
161
|
+
*/
|
|
162
|
+
function ColumnLazyDispatch(source, opts = {}) {
|
|
163
|
+
if (typeof source === "string") return ColumnLazyImpl.fromId(source, opts);
|
|
164
|
+
if (source instanceof ColumnLazyImpl) return source;
|
|
165
|
+
if ("accessor" in source) return ColumnLazyImpl.fromAccessor(source);
|
|
166
|
+
if (isPlRef(source)) return ColumnLazyImpl.fromPlRef(source);
|
|
167
|
+
if (isPColumn(source)) return ColumnLazyImpl.fromColumn(source);
|
|
168
|
+
throw new Error("ColumnLazy: unknown source shape");
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Polymorphic counterpart to {@link ColumnLazyDispatch}: returns the
|
|
172
|
+
* {@link ColumnResolutionStatus} for any factory input without constructing
|
|
173
|
+
* the recipe. For already-materialised sources ({@link PColumn} value,
|
|
174
|
+
* existing {@link ColumnLazy}) status is `present` by construction.
|
|
175
|
+
*/
|
|
176
|
+
function ColumnLazyGetStatus(source, opts = {}) {
|
|
177
|
+
if (typeof source === "string") return ColumnLazyImpl.getStatusById(source, opts);
|
|
178
|
+
if (source instanceof ColumnLazyImpl) return "present";
|
|
179
|
+
if ("accessor" in source) return ColumnLazyImpl.getStatusByAccessor(source);
|
|
180
|
+
if (isPlRef(source)) return ColumnLazyImpl.getStatusByPlRef(source, opts);
|
|
181
|
+
if (isPColumn(source)) return "present";
|
|
182
|
+
throw new Error("ColumnLazy.getStatus: unknown source shape");
|
|
183
|
+
}
|
|
184
|
+
const ColumnLazy = Object.assign(ColumnLazyDispatch, {
|
|
185
|
+
fromId: ColumnLazyImpl.fromId,
|
|
186
|
+
fromPlRef: ColumnLazyImpl.fromPlRef,
|
|
187
|
+
fromAccessor: ColumnLazyImpl.fromAccessor,
|
|
188
|
+
fromColumn: ColumnLazyImpl.fromColumn,
|
|
189
|
+
getStatus: ColumnLazyGetStatus,
|
|
190
|
+
getStatusById: ColumnLazyImpl.getStatusById,
|
|
191
|
+
getStatusByPlRef: ColumnLazyImpl.getStatusByPlRef,
|
|
192
|
+
getStatusByAccessor: ColumnLazyImpl.getStatusByAccessor
|
|
193
|
+
});
|
|
194
|
+
/**
|
|
195
|
+
* Type-guard narrowing to the leaf recipe. Prefer this over
|
|
196
|
+
* `instanceof ColumnLazyImpl` — `ColumnLazy` (the value) is the dispatcher
|
|
197
|
+
* with statics, not the class, so `instanceof` requires the impl symbol.
|
|
198
|
+
*/
|
|
199
|
+
function isColumnLazy(value) {
|
|
200
|
+
return value instanceof ColumnLazyImpl;
|
|
201
|
+
}
|
|
202
|
+
const readSpecAccessor = memoizeByEntry(({ accessor, name }) => accessor.traverse({
|
|
203
|
+
field: `${name}.spec`,
|
|
204
|
+
assertFieldType: "Input",
|
|
205
|
+
ignoreError: true
|
|
206
|
+
}));
|
|
207
|
+
/**
|
|
208
|
+
* Per-entry counterpart to {@link readDataStatus}: tells whether the leaf's
|
|
209
|
+
* **spec** can be read in this ctx, and — for the negative cases —
|
|
210
|
+
* distinguishes `resolving` from `absent` via `getInputsLocked()`.
|
|
211
|
+
*
|
|
212
|
+
* - spec field not yet on the entry's accessor + inputs locked → `absent`
|
|
213
|
+
* - spec field not yet on the entry's accessor + still resolving → `resolving`
|
|
214
|
+
* - spec resource present but bytes not yet written → `resolving`
|
|
215
|
+
* (transient — the spec resource is connected, just unfilled)
|
|
216
|
+
* - spec resource present and `hasData()` → `present`
|
|
217
|
+
*/
|
|
218
|
+
function getLeafEntryStatus(entry) {
|
|
219
|
+
const spec = readSpecAccessor(entry);
|
|
220
|
+
if (isNil(spec)) return entry.accessor.getInputsLocked() ? "absent" : "resolving";
|
|
221
|
+
if (!spec.hasData()) return "resolving";
|
|
222
|
+
return "present";
|
|
223
|
+
}
|
|
224
|
+
const readDataAccessor = memoizeByEntry(({ accessor, name }) => accessor.traverse({
|
|
225
|
+
field: `${name}.data`,
|
|
226
|
+
assertFieldType: "Input",
|
|
227
|
+
ignoreError: true
|
|
228
|
+
}));
|
|
229
|
+
const readDataStatus = memoizeByEntry(({ accessor, name }) => {
|
|
230
|
+
if (accessor.listInputFields().includes(`${name}.data`)) return "present";
|
|
231
|
+
return accessor.getInputsLocked() ? "absent" : "resolving";
|
|
232
|
+
});
|
|
233
|
+
function memoizeByEntry(fn) {
|
|
234
|
+
const cache = new LRUCache({ max: 1e3 });
|
|
235
|
+
return (entry) => {
|
|
236
|
+
const key = `${entry.accessor.handle}:${entry.name}`;
|
|
237
|
+
let hit = cache.get(key);
|
|
238
|
+
if (!hit) cache.set(key, hit = { value: fn(entry) });
|
|
239
|
+
return hit.value;
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
//#endregion
|
|
243
|
+
export { ColumnAbsentError, ColumnLazy, ColumnLazyImpl, isColumnLazy };
|
|
244
|
+
|
|
245
|
+
//# sourceMappingURL=column_lazy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column_lazy.js","names":[],"sources":["../../src/columns/column_lazy.ts"],"sourcesContent":["import {\n ColumnRegistry,\n createGlobalPObjectId,\n isPColumn,\n isPlRef,\n PlRef,\n PObjectId,\n type ColumnUniversalId,\n type LeafEntry,\n type PColumn,\n type PColumnSpec,\n type SpecOverrides,\n type SpecQuery,\n} from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx, PColumnDataUniversal } from \"../render/internal\";\nimport { getCtxProviders } from \"./column_providers\";\nimport { isNil } from \"es-toolkit\";\nimport { LRUCache } from \"lru-cache\";\nimport { TreeNodeAccessor } from \"../render\";\nimport type {\n ColumnFieldStatus,\n ColumnRecipe,\n ColumnResolutionStatus,\n} from \"./column_recipes/types\";\nimport { ColumnOverriddenRecipe } from \"./column_recipes/column_overrided_recipe\";\n\nexport type ColumnLazyId = PObjectId;\nexport type ColumnLazyData = undefined | PColumnDataUniversal;\nexport type { ColumnFieldStatus, ColumnResolutionStatus } from \"./column_recipes/types\";\n\n/**\n * Thrown by leaf-recipe factories when the requested column is provably\n * absent in the active render ctx — i.e. every relevant accessor reports\n * `inputsLocked` and the column did not appear. Distinct from the\n * `undefined` return that the factories still use for the \"resolving\" case\n * (the column may still appear later).\n *\n * Catch at the boundary (resolver / filter+sort wiring / data-table assembly)\n * when partial absence should be surfaced to the user rather than silently\n * producing an empty result.\n */\nexport class ColumnAbsentError extends Error {\n constructor(public readonly id: ColumnUniversalId) {\n super(`Column is absent in the active render ctx and will not appear: ${id}`);\n this.name = \"ColumnAbsentError\";\n }\n}\n\n/**\n * ColumnLazy is the leaf-recipe building block: a {@link ColumnRecipe} whose\n * `id` is a bare {@link PObjectId} and whose readers are bound to a single\n * tree-accessor leaf. Layered encodings (Overridden / Discovered / Filtered)\n * are reified through their dedicated recipe classes and reference leaf\n * columns by id.\n */\nexport class ColumnLazyImpl implements ColumnRecipe<PObjectId> {\n private specCache?: { readonly value: PColumnSpec };\n private dataCache?: { readonly value: ColumnLazyData };\n private dataStatusCache?: { readonly value: ColumnFieldStatus };\n\n private constructor(\n public readonly id: PObjectId,\n private readonly options: {\n getSpec: () => PColumnSpec;\n getData: () => ColumnLazyData;\n getDataStatus: () => ColumnFieldStatus;\n },\n ) {}\n\n /** A leaf-recipe references exactly one column — its own id. */\n getReferencedIds(): PObjectId[] {\n return [this.id];\n }\n\n getSpec(): PColumnSpec {\n if (this.specCache === undefined) {\n this.specCache = { value: this.options.getSpec() };\n }\n return this.specCache.value;\n }\n\n /** Leaf-shaped — points straight at `this.id`. */\n getQuery(): SpecQuery {\n return { type: \"column\", column: this.id } as SpecQuery;\n }\n\n /** Leaf-only: not on the recipe interface — only the leaf can read data directly. */\n getData(): ColumnLazyData {\n if (this.dataCache === undefined) this.dataCache = { value: this.options.getData() };\n return this.dataCache.value;\n }\n\n getDataStatus(): ColumnFieldStatus {\n if (this.dataStatusCache === undefined) {\n this.dataStatusCache = { value: this.options.getDataStatus() };\n }\n return this.dataStatusCache.value;\n }\n\n /**\n * Overlay overrides → produces a {@link ColumnOverriddenRecipe} wrapping\n * this leaf. ColumnLazy itself stays bare (id remains a plain PObjectId);\n * layering lives entirely in the recipe wrappers.\n */\n withSpecs(overrides: SpecOverrides): ColumnRecipe {\n return ColumnOverriddenRecipe.wrap(this, overrides);\n }\n\n /**\n * Resolve via the ambient {@link ColumnRegistry}. Spec is resolved eagerly:\n * returns `undefined` if the leaf isn't reachable yet (resolving). Throws\n * {@link ColumnAbsentError} when every relevant accessor is `inputsLocked`\n * and the column did not appear — the column will not exist in this ctx.\n * Data and dataStatus stay lazy.\n */\n static fromId(id: PObjectId, { ctx }: { ctx?: GlobalCfgRenderCtx } = {}): undefined | ColumnLazy {\n const registry = new ColumnRegistry(getCtxProviders({ ctx }));\n const leaf = registry.resolve(id);\n if (isNil(leaf)) {\n if (registry.isFinal()) throw new ColumnAbsentError(id);\n return undefined;\n }\n const spec = readSpecAccessor(leaf);\n if (isNil(spec)) {\n if (leaf.accessor.getInputsLocked()) throw new ColumnAbsentError(id);\n return undefined;\n }\n if (!spec.hasData()) return undefined;\n return new ColumnLazyImpl(id, {\n getSpec: () => spec.getDataAsJson<PColumnSpec>(),\n getData: () => readDataAccessor(leaf),\n getDataStatus: () => readDataStatus(leaf),\n });\n }\n\n /** {@link PlRef} wrapper over {@link fromId}. */\n static fromPlRef(ref: PlRef): undefined | ColumnLazy {\n return ColumnLazyImpl.fromId(createGlobalPObjectId(ref.blockId, ref.name));\n }\n\n /**\n * Bind directly to an accessor-backed {@link LeafEntry} — no registry.\n * Throws {@link ColumnAbsentError} if the leaf has no spec field and its\n * accessor is `inputsLocked`. Returns `undefined` while still resolving.\n */\n static fromAccessor(entry: LeafEntry<TreeNodeAccessor>): undefined | ColumnLazy {\n const spec = readSpecAccessor(entry);\n if (isNil(spec)) {\n if (entry.accessor.getInputsLocked()) throw new ColumnAbsentError(entry.id);\n return undefined;\n }\n if (!spec.hasData()) return undefined;\n return new ColumnLazyImpl(entry.id, {\n getSpec: () => spec.getDataAsJson<PColumnSpec>(),\n getData: () => readDataAccessor(entry),\n getDataStatus: () => readDataStatus(entry),\n });\n }\n\n /**\n * Wrap a materialised {@link PColumn}. If the input is already a\n * {@link ColumnLazy} it is returned as-is.\n */\n static fromColumn(column: PColumn<ColumnLazyData> | ColumnLazy): ColumnLazy {\n if (column instanceof ColumnLazyImpl) return column;\n return new ColumnLazyImpl(column.id, {\n getSpec: () => column.spec,\n getData: () => column.data,\n getDataStatus: () => \"present\",\n });\n }\n\n /**\n * Distinguishes `present` / `resolving` / `absent` for a {@link PObjectId}\n * in the active render ctx. Falls back to the registry's `isFinal()`\n * when the id has no entry — only then we can say `absent` instead of\n * `resolving`.\n */\n static getStatusById(\n id: PObjectId,\n { ctx }: { ctx?: GlobalCfgRenderCtx } = {},\n ): ColumnResolutionStatus {\n const registry = new ColumnRegistry(getCtxProviders({ ctx }));\n const leaf = registry.resolve(id);\n if (isNil(leaf)) return registry.isFinal() ? \"absent\" : \"resolving\";\n return getLeafEntryStatus(leaf);\n }\n\n /** {@link PlRef} wrapper over {@link getStatusById}. */\n static getStatusByPlRef(\n ref: PlRef,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n ): ColumnResolutionStatus {\n return ColumnLazyImpl.getStatusById(createGlobalPObjectId(ref.blockId, ref.name), opts);\n }\n\n /** No registry — reads straight off the entry's accessor. */\n static getStatusByAccessor(entry: LeafEntry<TreeNodeAccessor>): ColumnResolutionStatus {\n return getLeafEntryStatus(entry);\n }\n}\n\n/**\n * Public type alias — `ColumnLazy` (the type) refers to the underlying\n * {@link ColumnLazyImpl} class instance. `ColumnLazy` (the value) is the\n * callable below with the static factories attached.\n */\nexport type ColumnLazy = ColumnLazyImpl;\n\n/**\n * Unified dispatcher — picks the right `ColumnLazyImpl.fromX` by source\n * shape. For ambiguous inputs callers can still use the explicit factories\n * (also attached as properties: `ColumnLazy.fromId`, `.fromPlRef`,\n * `.fromAccessor`, `.fromColumn`).\n */\nfunction ColumnLazyDispatch(\n source: PObjectId | PlRef | LeafEntry<TreeNodeAccessor> | PColumn<ColumnLazyData> | ColumnLazy,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): undefined | ColumnLazy {\n if (typeof source === \"string\") return ColumnLazyImpl.fromId(source, opts);\n if (source instanceof ColumnLazyImpl) return source;\n if (\"accessor\" in source) return ColumnLazyImpl.fromAccessor(source);\n if (isPlRef(source)) return ColumnLazyImpl.fromPlRef(source);\n if (isPColumn(source)) return ColumnLazyImpl.fromColumn(source);\n throw new Error(\"ColumnLazy: unknown source shape\");\n}\n\n/**\n * Polymorphic counterpart to {@link ColumnLazyDispatch}: returns the\n * {@link ColumnResolutionStatus} for any factory input without constructing\n * the recipe. For already-materialised sources ({@link PColumn} value,\n * existing {@link ColumnLazy}) status is `present` by construction.\n */\nfunction ColumnLazyGetStatus(\n source: PObjectId | PlRef | LeafEntry<TreeNodeAccessor> | PColumn<ColumnLazyData> | ColumnLazy,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): ColumnResolutionStatus {\n if (typeof source === \"string\") return ColumnLazyImpl.getStatusById(source, opts);\n if (source instanceof ColumnLazyImpl) return \"present\";\n if (\"accessor\" in source) return ColumnLazyImpl.getStatusByAccessor(source);\n if (isPlRef(source)) return ColumnLazyImpl.getStatusByPlRef(source, opts);\n if (isPColumn(source)) return \"present\";\n throw new Error(\"ColumnLazy.getStatus: unknown source shape\");\n}\n\nexport const ColumnLazy = Object.assign(ColumnLazyDispatch, {\n fromId: ColumnLazyImpl.fromId,\n fromPlRef: ColumnLazyImpl.fromPlRef,\n fromAccessor: ColumnLazyImpl.fromAccessor,\n fromColumn: ColumnLazyImpl.fromColumn,\n getStatus: ColumnLazyGetStatus,\n getStatusById: ColumnLazyImpl.getStatusById,\n getStatusByPlRef: ColumnLazyImpl.getStatusByPlRef,\n getStatusByAccessor: ColumnLazyImpl.getStatusByAccessor,\n});\n\n/**\n * Type-guard narrowing to the leaf recipe. Prefer this over\n * `instanceof ColumnLazyImpl` — `ColumnLazy` (the value) is the dispatcher\n * with statics, not the class, so `instanceof` requires the impl symbol.\n */\nexport function isColumnLazy(value: unknown): value is ColumnLazy {\n return value instanceof ColumnLazyImpl;\n}\n\nconst readSpecAccessor = memoizeByEntry(\n ({ accessor, name }: LeafEntry<TreeNodeAccessor>): undefined | TreeNodeAccessor =>\n accessor.traverse({ field: `${name}.spec`, assertFieldType: \"Input\", ignoreError: true }),\n);\n\n/**\n * Per-entry counterpart to {@link readDataStatus}: tells whether the leaf's\n * **spec** can be read in this ctx, and — for the negative cases —\n * distinguishes `resolving` from `absent` via `getInputsLocked()`.\n *\n * - spec field not yet on the entry's accessor + inputs locked → `absent`\n * - spec field not yet on the entry's accessor + still resolving → `resolving`\n * - spec resource present but bytes not yet written → `resolving`\n * (transient — the spec resource is connected, just unfilled)\n * - spec resource present and `hasData()` → `present`\n */\nfunction getLeafEntryStatus(entry: LeafEntry<TreeNodeAccessor>): ColumnResolutionStatus {\n const spec = readSpecAccessor(entry);\n if (isNil(spec)) return entry.accessor.getInputsLocked() ? \"absent\" : \"resolving\";\n if (!spec.hasData()) return \"resolving\";\n return \"present\";\n}\n\nconst readDataAccessor = memoizeByEntry(\n ({ accessor, name }: LeafEntry<TreeNodeAccessor>): undefined | TreeNodeAccessor =>\n accessor.traverse({ field: `${name}.data`, assertFieldType: \"Input\", ignoreError: true }),\n);\n\nconst readDataStatus = memoizeByEntry(\n ({ accessor, name }: LeafEntry<TreeNodeAccessor>): ColumnFieldStatus => {\n if (accessor.listInputFields().includes(`${name}.data`)) return \"present\";\n return accessor.getInputsLocked() ? \"absent\" : \"resolving\";\n },\n);\n\nfunction memoizeByEntry<R>(\n fn: (entry: LeafEntry<TreeNodeAccessor>) => R,\n): (entry: LeafEntry<TreeNodeAccessor>) => R {\n const cache = new LRUCache<string, { value: R }>({ max: 1000 });\n return (entry) => {\n const key = `${entry.accessor.handle}:${entry.name}`;\n let hit = cache.get(key);\n if (!hit) cache.set(key, (hit = { value: fn(entry) }));\n return hit.value;\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const require_internal = require("../../internal.cjs");
|
|
2
|
+
const require_accessor = require("../../render/accessor.cjs");
|
|
3
|
+
const require_internal$1 = require("../../render/internal.cjs");
|
|
4
|
+
const require_providers = require("./providers.cjs");
|
|
5
|
+
//#region src/columns/column_providers/index.ts
|
|
6
|
+
/**
|
|
7
|
+
* Build the default set of ColumnsProviders for the ambient render ctx:
|
|
8
|
+
* - `AccessorColumnsProvider` over `outputs` (if present)
|
|
9
|
+
* - `AccessorColumnsProvider` over `prerun` (if present)
|
|
10
|
+
* - `ResultPoolColumnsProvider` over `rawResultPool`
|
|
11
|
+
*
|
|
12
|
+
* Pulls handles directly from the ambient `cfgRenderCtx`. Returns `[]` when
|
|
13
|
+
* called outside a render context.
|
|
14
|
+
*
|
|
15
|
+
* Result is memoised per-ctx (WeakMap → array). Repeated calls within the
|
|
16
|
+
* same render cycle return the same provider triplet — inner providers are
|
|
17
|
+
* also LRU-memoised by their content keys, so even a cache miss here doesn't
|
|
18
|
+
* re-walk the trees.
|
|
19
|
+
*/
|
|
20
|
+
const _ctxProvidersCache = /* @__PURE__ */ new WeakMap();
|
|
21
|
+
function getCtxProviders(deps) {
|
|
22
|
+
const ctx = deps?.ctx ?? require_internal.getCfgRenderCtx();
|
|
23
|
+
const cached = _ctxProvidersCache.get(ctx);
|
|
24
|
+
if (cached !== void 0) return cached;
|
|
25
|
+
const providers = [];
|
|
26
|
+
const outputs = ctx.getAccessorHandleByName(require_internal$1.MainAccessorName);
|
|
27
|
+
if (outputs !== void 0) providers.push(require_providers.ColumnsProvider(new require_accessor.TreeNodeAccessor(outputs, [require_internal$1.MainAccessorName])));
|
|
28
|
+
const prerun = ctx.getAccessorHandleByName(require_internal$1.StagingAccessorName);
|
|
29
|
+
if (prerun !== void 0) providers.push(require_providers.ColumnsProvider(new require_accessor.TreeNodeAccessor(prerun, [require_internal$1.StagingAccessorName])));
|
|
30
|
+
providers.push(require_providers.ColumnsProvider(ctx.getUpstreamBlockCtx()));
|
|
31
|
+
_ctxProvidersCache.set(ctx, providers);
|
|
32
|
+
return providers;
|
|
33
|
+
}
|
|
34
|
+
function isColumnProvider(source) {
|
|
35
|
+
if (typeof source !== "object" || source === null) return false;
|
|
36
|
+
const p = source;
|
|
37
|
+
return typeof p.getColumns === "function" && typeof p.isFinal === "function";
|
|
38
|
+
}
|
|
39
|
+
function toColumnProvider(source) {
|
|
40
|
+
if (isColumnArray(source)) return new require_providers.ArrayColumnsProvider(source.columns, source.isFinal);
|
|
41
|
+
if (isColumnProvider(source)) return source;
|
|
42
|
+
if (source instanceof require_accessor.TreeNodeAccessor) return require_providers.ColumnsProvider(source);
|
|
43
|
+
throw new Error("Unknown ColumnsSource type");
|
|
44
|
+
}
|
|
45
|
+
function isColumnArray(source) {
|
|
46
|
+
if (typeof source !== "object" || source === null) return false;
|
|
47
|
+
const s = source;
|
|
48
|
+
return Array.isArray(s.columns) && typeof s.isFinal === "boolean";
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
exports.AccessorColumnsProvider = require_providers.AccessorColumnsProvider;
|
|
52
|
+
exports.AccessorColumnsProviderImpl = require_providers.AccessorColumnsProviderImpl;
|
|
53
|
+
exports.ArrayColumnsProvider = require_providers.ArrayColumnsProvider;
|
|
54
|
+
exports.ColumnsProvider = require_providers.ColumnsProvider;
|
|
55
|
+
exports.ResultPoolColumnsProvider = require_providers.ResultPoolColumnsProvider;
|
|
56
|
+
exports.ResultPoolColumnsProviderImpl = require_providers.ResultPoolColumnsProviderImpl;
|
|
57
|
+
exports._ctxProvidersCache = _ctxProvidersCache;
|
|
58
|
+
exports.getCtxProviders = getCtxProviders;
|
|
59
|
+
exports.isColumnProvider = isColumnProvider;
|
|
60
|
+
exports.toColumnProvider = toColumnProvider;
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["getCfgRenderCtx","MainAccessorName","ColumnsProvider","TreeNodeAccessor","StagingAccessorName","ArrayColumnsProvider"],"sources":["../../../src/columns/column_providers/index.ts"],"sourcesContent":["import { PColumn, type ColumnEntriesProvider } from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx, PColumnDataUniversal } from \"../../render/internal\";\nimport { getCfgRenderCtx } from \"../../internal\";\nimport { MainAccessorName, StagingAccessorName } from \"../../render/internal\";\nimport { TreeNodeAccessor } from \"../../render/accessor\";\nimport { ColumnLazy } from \"../column_lazy\";\nimport type { ColumnsSource } from \"./types\";\nimport { ArrayColumnsProvider, ColumnsProvider } from \"./providers\";\n\nexport * from \"./types\";\nexport * from \"./providers\";\n\n/**\n * Build the default set of ColumnsProviders for the ambient render ctx:\n * - `AccessorColumnsProvider` over `outputs` (if present)\n * - `AccessorColumnsProvider` over `prerun` (if present)\n * - `ResultPoolColumnsProvider` over `rawResultPool`\n *\n * Pulls handles directly from the ambient `cfgRenderCtx`. Returns `[]` when\n * called outside a render context.\n *\n * Result is memoised per-ctx (WeakMap → array). Repeated calls within the\n * same render cycle return the same provider triplet — inner providers are\n * also LRU-memoised by their content keys, so even a cache miss here doesn't\n * re-walk the trees.\n */\nexport const _ctxProvidersCache = new WeakMap<\n GlobalCfgRenderCtx,\n (ColumnEntriesProvider<TreeNodeAccessor> & ColumnsProvider)[]\n>();\n\nexport function getCtxProviders(deps?: {\n ctx?: GlobalCfgRenderCtx;\n}): (ColumnEntriesProvider<TreeNodeAccessor> & ColumnsProvider)[] {\n const ctx = deps?.ctx ?? getCfgRenderCtx();\n\n const cached = _ctxProvidersCache.get(ctx);\n if (cached !== undefined) return cached;\n\n const providers: (ColumnEntriesProvider<TreeNodeAccessor> & ColumnsProvider)[] = [];\n\n const outputs = ctx.getAccessorHandleByName(MainAccessorName);\n if (outputs !== undefined) {\n providers.push(ColumnsProvider(new TreeNodeAccessor(outputs, [MainAccessorName])));\n }\n\n const prerun = ctx.getAccessorHandleByName(StagingAccessorName);\n if (prerun !== undefined) {\n providers.push(ColumnsProvider(new TreeNodeAccessor(prerun, [StagingAccessorName])));\n }\n\n providers.push(ColumnsProvider(ctx.getUpstreamBlockCtx()));\n\n _ctxProvidersCache.set(ctx, providers);\n return providers;\n}\n\nexport function isColumnProvider(source: unknown): source is ColumnsProvider {\n if (typeof source !== \"object\" || source === null) return false;\n const p = source as ColumnsProvider;\n return typeof p.getColumns === \"function\" && typeof p.isFinal === \"function\";\n}\n\nexport function toColumnProvider(source: ColumnsSource): ColumnsProvider {\n if (isColumnArray(source)) return new ArrayColumnsProvider(source.columns, source.isFinal);\n if (isColumnProvider(source)) return source;\n if (source instanceof TreeNodeAccessor) return ColumnsProvider(source);\n throw new Error(\"Unknown ColumnsSource type\");\n}\n\nfunction isColumnArray(source: unknown): source is {\n readonly columns: ReadonlyArray<PColumn<undefined | PColumnDataUniversal> | ColumnLazy>;\n readonly isFinal: boolean;\n} {\n if (typeof source !== \"object\" || source === null) return false;\n const s = source as { columns?: unknown; isFinal?: unknown };\n return Array.isArray(s.columns) && typeof s.isFinal === \"boolean\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA0BA,MAAa,qCAAqB,IAAI,QAGpC;AAEF,SAAgB,gBAAgB,MAEkC;CAChE,MAAM,MAAM,MAAM,OAAOA,iBAAAA,gBAAgB;CAEzC,MAAM,SAAS,mBAAmB,IAAI,GAAG;CACzC,IAAI,WAAW,KAAA,GAAW,OAAO;CAEjC,MAAM,YAA2E,CAAC;CAElF,MAAM,UAAU,IAAI,wBAAwBC,mBAAAA,gBAAgB;CAC5D,IAAI,YAAY,KAAA,GACd,UAAU,KAAKC,kBAAAA,gBAAgB,IAAIC,iBAAAA,iBAAiB,SAAS,CAACF,mBAAAA,gBAAgB,CAAC,CAAC,CAAC;CAGnF,MAAM,SAAS,IAAI,wBAAwBG,mBAAAA,mBAAmB;CAC9D,IAAI,WAAW,KAAA,GACb,UAAU,KAAKF,kBAAAA,gBAAgB,IAAIC,iBAAAA,iBAAiB,QAAQ,CAACC,mBAAAA,mBAAmB,CAAC,CAAC,CAAC;CAGrF,UAAU,KAAKF,kBAAAA,gBAAgB,IAAI,oBAAoB,CAAC,CAAC;CAEzD,mBAAmB,IAAI,KAAK,SAAS;CACrC,OAAO;AACT;AAEA,SAAgB,iBAAiB,QAA4C;CAC3E,IAAI,OAAO,WAAW,YAAY,WAAW,MAAM,OAAO;CAC1D,MAAM,IAAI;CACV,OAAO,OAAO,EAAE,eAAe,cAAc,OAAO,EAAE,YAAY;AACpE;AAEA,SAAgB,iBAAiB,QAAwC;CACvE,IAAI,cAAc,MAAM,GAAG,OAAO,IAAIG,kBAAAA,qBAAqB,OAAO,SAAS,OAAO,OAAO;CACzF,IAAI,iBAAiB,MAAM,GAAG,OAAO;CACrC,IAAI,kBAAkBF,iBAAAA,kBAAkB,OAAOD,kBAAAA,gBAAgB,MAAM;CACrE,MAAM,IAAI,MAAM,4BAA4B;AAC9C;AAEA,SAAS,cAAc,QAGrB;CACA,IAAI,OAAO,WAAW,YAAY,WAAW,MAAM,OAAO;CAC1D,MAAM,IAAI;CACV,OAAO,MAAM,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE,YAAY;AAC1D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { GlobalCfgRenderCtx } from "../../render/internal.js";
|
|
2
|
+
import { TreeNodeAccessor } from "../../render/accessor.js";
|
|
3
|
+
import { AccessorColumnsProvider, AccessorColumnsProviderImpl, ArrayColumnsProvider, ColumnsProvider, ResultPoolColumnsProvider, ResultPoolColumnsProviderImpl } from "./providers.js";
|
|
4
|
+
import { ColumnsSource } from "./types.js";
|
|
5
|
+
import { ColumnEntriesProvider } from "@milaboratories/pl-model-common";
|
|
6
|
+
|
|
7
|
+
//#region src/columns/column_providers/index.d.ts
|
|
8
|
+
/**
|
|
9
|
+
* Build the default set of ColumnsProviders for the ambient render ctx:
|
|
10
|
+
* - `AccessorColumnsProvider` over `outputs` (if present)
|
|
11
|
+
* - `AccessorColumnsProvider` over `prerun` (if present)
|
|
12
|
+
* - `ResultPoolColumnsProvider` over `rawResultPool`
|
|
13
|
+
*
|
|
14
|
+
* Pulls handles directly from the ambient `cfgRenderCtx`. Returns `[]` when
|
|
15
|
+
* called outside a render context.
|
|
16
|
+
*
|
|
17
|
+
* Result is memoised per-ctx (WeakMap → array). Repeated calls within the
|
|
18
|
+
* same render cycle return the same provider triplet — inner providers are
|
|
19
|
+
* also LRU-memoised by their content keys, so even a cache miss here doesn't
|
|
20
|
+
* re-walk the trees.
|
|
21
|
+
*/
|
|
22
|
+
declare const _ctxProvidersCache: WeakMap<GlobalCfgRenderCtx, (ColumnEntriesProvider<TreeNodeAccessor> & ColumnsProvider)[]>;
|
|
23
|
+
declare function getCtxProviders(deps?: {
|
|
24
|
+
ctx?: GlobalCfgRenderCtx;
|
|
25
|
+
}): (ColumnEntriesProvider<TreeNodeAccessor> & ColumnsProvider)[];
|
|
26
|
+
declare function isColumnProvider(source: unknown): source is ColumnsProvider;
|
|
27
|
+
declare function toColumnProvider(source: ColumnsSource): ColumnsProvider;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { AccessorColumnsProvider, AccessorColumnsProviderImpl, ArrayColumnsProvider, ColumnsProvider, ColumnsSource, ResultPoolColumnsProvider, ResultPoolColumnsProviderImpl, _ctxProvidersCache, getCtxProviders, isColumnProvider, toColumnProvider };
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/columns/column_providers/index.ts"],"mappings":";;;;;;;AA0BA;;;;;;;;;;;;;;AAAA,cAAa,kBAAA,EAAkB,OAAA,CAAA,kBAAA,GAAA,qBAAA,CAAA,gBAAA,IAAA,eAAA;AAAA,iBAKf,eAAA,CAAgB,IAAA;EAC9B,GAAA,GAAM,kBAAA;AAAA,KACH,qBAAA,CAAsB,gBAAA,IAAoB,eAAA;AAAA,iBAwB/B,gBAAA,CAAiB,MAAA,YAAkB,MAAA,IAAU,eAAe;AAAA,iBAM5D,gBAAA,CAAiB,MAAA,EAAQ,aAAA,GAAgB,eAAe"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { getCfgRenderCtx } from "../../internal.js";
|
|
2
|
+
import { TreeNodeAccessor } from "../../render/accessor.js";
|
|
3
|
+
import { MainAccessorName, StagingAccessorName } from "../../render/internal.js";
|
|
4
|
+
import { AccessorColumnsProvider, AccessorColumnsProviderImpl, ArrayColumnsProvider, ColumnsProvider, ResultPoolColumnsProvider, ResultPoolColumnsProviderImpl } from "./providers.js";
|
|
5
|
+
//#region src/columns/column_providers/index.ts
|
|
6
|
+
/**
|
|
7
|
+
* Build the default set of ColumnsProviders for the ambient render ctx:
|
|
8
|
+
* - `AccessorColumnsProvider` over `outputs` (if present)
|
|
9
|
+
* - `AccessorColumnsProvider` over `prerun` (if present)
|
|
10
|
+
* - `ResultPoolColumnsProvider` over `rawResultPool`
|
|
11
|
+
*
|
|
12
|
+
* Pulls handles directly from the ambient `cfgRenderCtx`. Returns `[]` when
|
|
13
|
+
* called outside a render context.
|
|
14
|
+
*
|
|
15
|
+
* Result is memoised per-ctx (WeakMap → array). Repeated calls within the
|
|
16
|
+
* same render cycle return the same provider triplet — inner providers are
|
|
17
|
+
* also LRU-memoised by their content keys, so even a cache miss here doesn't
|
|
18
|
+
* re-walk the trees.
|
|
19
|
+
*/
|
|
20
|
+
const _ctxProvidersCache = /* @__PURE__ */ new WeakMap();
|
|
21
|
+
function getCtxProviders(deps) {
|
|
22
|
+
const ctx = deps?.ctx ?? getCfgRenderCtx();
|
|
23
|
+
const cached = _ctxProvidersCache.get(ctx);
|
|
24
|
+
if (cached !== void 0) return cached;
|
|
25
|
+
const providers = [];
|
|
26
|
+
const outputs = ctx.getAccessorHandleByName(MainAccessorName);
|
|
27
|
+
if (outputs !== void 0) providers.push(ColumnsProvider(new TreeNodeAccessor(outputs, [MainAccessorName])));
|
|
28
|
+
const prerun = ctx.getAccessorHandleByName(StagingAccessorName);
|
|
29
|
+
if (prerun !== void 0) providers.push(ColumnsProvider(new TreeNodeAccessor(prerun, [StagingAccessorName])));
|
|
30
|
+
providers.push(ColumnsProvider(ctx.getUpstreamBlockCtx()));
|
|
31
|
+
_ctxProvidersCache.set(ctx, providers);
|
|
32
|
+
return providers;
|
|
33
|
+
}
|
|
34
|
+
function isColumnProvider(source) {
|
|
35
|
+
if (typeof source !== "object" || source === null) return false;
|
|
36
|
+
const p = source;
|
|
37
|
+
return typeof p.getColumns === "function" && typeof p.isFinal === "function";
|
|
38
|
+
}
|
|
39
|
+
function toColumnProvider(source) {
|
|
40
|
+
if (isColumnArray(source)) return new ArrayColumnsProvider(source.columns, source.isFinal);
|
|
41
|
+
if (isColumnProvider(source)) return source;
|
|
42
|
+
if (source instanceof TreeNodeAccessor) return ColumnsProvider(source);
|
|
43
|
+
throw new Error("Unknown ColumnsSource type");
|
|
44
|
+
}
|
|
45
|
+
function isColumnArray(source) {
|
|
46
|
+
if (typeof source !== "object" || source === null) return false;
|
|
47
|
+
const s = source;
|
|
48
|
+
return Array.isArray(s.columns) && typeof s.isFinal === "boolean";
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { AccessorColumnsProvider, AccessorColumnsProviderImpl, ArrayColumnsProvider, ColumnsProvider, ResultPoolColumnsProvider, ResultPoolColumnsProviderImpl, _ctxProvidersCache, getCtxProviders, isColumnProvider, toColumnProvider };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/columns/column_providers/index.ts"],"sourcesContent":["import { PColumn, type ColumnEntriesProvider } from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx, PColumnDataUniversal } from \"../../render/internal\";\nimport { getCfgRenderCtx } from \"../../internal\";\nimport { MainAccessorName, StagingAccessorName } from \"../../render/internal\";\nimport { TreeNodeAccessor } from \"../../render/accessor\";\nimport { ColumnLazy } from \"../column_lazy\";\nimport type { ColumnsSource } from \"./types\";\nimport { ArrayColumnsProvider, ColumnsProvider } from \"./providers\";\n\nexport * from \"./types\";\nexport * from \"./providers\";\n\n/**\n * Build the default set of ColumnsProviders for the ambient render ctx:\n * - `AccessorColumnsProvider` over `outputs` (if present)\n * - `AccessorColumnsProvider` over `prerun` (if present)\n * - `ResultPoolColumnsProvider` over `rawResultPool`\n *\n * Pulls handles directly from the ambient `cfgRenderCtx`. Returns `[]` when\n * called outside a render context.\n *\n * Result is memoised per-ctx (WeakMap → array). Repeated calls within the\n * same render cycle return the same provider triplet — inner providers are\n * also LRU-memoised by their content keys, so even a cache miss here doesn't\n * re-walk the trees.\n */\nexport const _ctxProvidersCache = new WeakMap<\n GlobalCfgRenderCtx,\n (ColumnEntriesProvider<TreeNodeAccessor> & ColumnsProvider)[]\n>();\n\nexport function getCtxProviders(deps?: {\n ctx?: GlobalCfgRenderCtx;\n}): (ColumnEntriesProvider<TreeNodeAccessor> & ColumnsProvider)[] {\n const ctx = deps?.ctx ?? getCfgRenderCtx();\n\n const cached = _ctxProvidersCache.get(ctx);\n if (cached !== undefined) return cached;\n\n const providers: (ColumnEntriesProvider<TreeNodeAccessor> & ColumnsProvider)[] = [];\n\n const outputs = ctx.getAccessorHandleByName(MainAccessorName);\n if (outputs !== undefined) {\n providers.push(ColumnsProvider(new TreeNodeAccessor(outputs, [MainAccessorName])));\n }\n\n const prerun = ctx.getAccessorHandleByName(StagingAccessorName);\n if (prerun !== undefined) {\n providers.push(ColumnsProvider(new TreeNodeAccessor(prerun, [StagingAccessorName])));\n }\n\n providers.push(ColumnsProvider(ctx.getUpstreamBlockCtx()));\n\n _ctxProvidersCache.set(ctx, providers);\n return providers;\n}\n\nexport function isColumnProvider(source: unknown): source is ColumnsProvider {\n if (typeof source !== \"object\" || source === null) return false;\n const p = source as ColumnsProvider;\n return typeof p.getColumns === \"function\" && typeof p.isFinal === \"function\";\n}\n\nexport function toColumnProvider(source: ColumnsSource): ColumnsProvider {\n if (isColumnArray(source)) return new ArrayColumnsProvider(source.columns, source.isFinal);\n if (isColumnProvider(source)) return source;\n if (source instanceof TreeNodeAccessor) return ColumnsProvider(source);\n throw new Error(\"Unknown ColumnsSource type\");\n}\n\nfunction isColumnArray(source: unknown): source is {\n readonly columns: ReadonlyArray<PColumn<undefined | PColumnDataUniversal> | ColumnLazy>;\n readonly isFinal: boolean;\n} {\n if (typeof source !== \"object\" || source === null) return false;\n const s = source as { columns?: unknown; isFinal?: unknown };\n return Array.isArray(s.columns) && typeof s.isFinal === \"boolean\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA0BA,MAAa,qCAAqB,IAAI,QAGpC;AAEF,SAAgB,gBAAgB,MAEkC;CAChE,MAAM,MAAM,MAAM,OAAO,gBAAgB;CAEzC,MAAM,SAAS,mBAAmB,IAAI,GAAG;CACzC,IAAI,WAAW,KAAA,GAAW,OAAO;CAEjC,MAAM,YAA2E,CAAC;CAElF,MAAM,UAAU,IAAI,wBAAwB,gBAAgB;CAC5D,IAAI,YAAY,KAAA,GACd,UAAU,KAAK,gBAAgB,IAAI,iBAAiB,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;CAGnF,MAAM,SAAS,IAAI,wBAAwB,mBAAmB;CAC9D,IAAI,WAAW,KAAA,GACb,UAAU,KAAK,gBAAgB,IAAI,iBAAiB,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;CAGrF,UAAU,KAAK,gBAAgB,IAAI,oBAAoB,CAAC,CAAC;CAEzD,mBAAmB,IAAI,KAAK,SAAS;CACrC,OAAO;AACT;AAEA,SAAgB,iBAAiB,QAA4C;CAC3E,IAAI,OAAO,WAAW,YAAY,WAAW,MAAM,OAAO;CAC1D,MAAM,IAAI;CACV,OAAO,OAAO,EAAE,eAAe,cAAc,OAAO,EAAE,YAAY;AACpE;AAEA,SAAgB,iBAAiB,QAAwC;CACvE,IAAI,cAAc,MAAM,GAAG,OAAO,IAAI,qBAAqB,OAAO,SAAS,OAAO,OAAO;CACzF,IAAI,iBAAiB,MAAM,GAAG,OAAO;CACrC,IAAI,kBAAkB,kBAAkB,OAAO,gBAAgB,MAAM;CACrE,MAAM,IAAI,MAAM,4BAA4B;AAC9C;AAEA,SAAS,cAAc,QAGrB;CACA,IAAI,OAAO,WAAW,YAAY,WAAW,MAAM,OAAO;CAC1D,MAAM,IAAI;CACV,OAAO,MAAM,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE,YAAY;AAC1D"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
const require_internal = require("../../internal.cjs");
|
|
2
|
+
const require_accessor = require("../../render/accessor.cjs");
|
|
3
|
+
require("../../render/index.cjs");
|
|
4
|
+
const require_column_lazy = require("../column_lazy.cjs");
|
|
5
|
+
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
6
|
+
let es_toolkit = require("es-toolkit");
|
|
7
|
+
let lru_cache = require("lru-cache");
|
|
8
|
+
//#region src/columns/column_providers/providers.ts
|
|
9
|
+
/**
|
|
10
|
+
* Unified memoised factory dispatching to the right provider flavour by the
|
|
11
|
+
* source shape:
|
|
12
|
+
* - `TreeNodeAccessor` → {@link AccessorColumnsProvider}
|
|
13
|
+
* (indexed by `root.handle`, walks the accessor tree once per root).
|
|
14
|
+
* - `UpstreamBlockCtx<AccessorHandle>[]` (or omitted — pulled from the
|
|
15
|
+
* ambient ctx) → {@link ResultPoolColumnsProvider}
|
|
16
|
+
* (indexed by a content-hash of the block list).
|
|
17
|
+
*
|
|
18
|
+
* Both branches return cached instances within their LRU window, so repeated
|
|
19
|
+
* calls with the same source skip re-walking / re-hashing.
|
|
20
|
+
*/
|
|
21
|
+
function ColumnsProvider(source) {
|
|
22
|
+
if ((0, es_toolkit.isNil)(source) || Array.isArray(source)) return ResultPoolColumnsProvider(source);
|
|
23
|
+
else if (source instanceof require_accessor.TreeNodeAccessor) return AccessorColumnsProvider(source);
|
|
24
|
+
else throw new Error("Unknown columns provider source");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Memoised constructor — same `root.handle` returns the same
|
|
28
|
+
* {@link AccessorColumnsProviderImpl}, so `indexAccessorRoot` runs once per
|
|
29
|
+
* accessor root (within the LRU window).
|
|
30
|
+
*/
|
|
31
|
+
const _accessorProviderCache = new lru_cache.LRUCache({ max: 64 });
|
|
32
|
+
function AccessorColumnsProvider(root) {
|
|
33
|
+
let provider = _accessorProviderCache.get(root.handle);
|
|
34
|
+
if (provider === void 0) {
|
|
35
|
+
provider = new AccessorColumnsProviderImpl(root);
|
|
36
|
+
_accessorProviderCache.set(root.handle, provider);
|
|
37
|
+
}
|
|
38
|
+
return provider;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Memoised constructor — same `rawPool` content returns the same
|
|
42
|
+
* {@link ResultPoolColumnsProviderImpl}, so `indexPoolBlock` runs once per
|
|
43
|
+
* pool snapshot (within the LRU window).
|
|
44
|
+
*/
|
|
45
|
+
const _resultPoolProviderCache = new lru_cache.LRUCache({ max: 4 });
|
|
46
|
+
function ResultPoolColumnsProvider(rawPool = require_internal.getCfgRenderCtx().getUpstreamBlockCtx()) {
|
|
47
|
+
const key = hashRawPool(rawPool);
|
|
48
|
+
let provider = _resultPoolProviderCache.get(key);
|
|
49
|
+
if (provider === void 0) {
|
|
50
|
+
provider = new ResultPoolColumnsProviderImpl(rawPool);
|
|
51
|
+
_resultPoolProviderCache.set(key, provider);
|
|
52
|
+
}
|
|
53
|
+
return provider;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Simple provider wrapping an array of PColumns. Sandbox-only —
|
|
57
|
+
* implements {@link ColumnsProvider} (lazy-view enumeration). It is *not* an
|
|
58
|
+
* id-index source — `ColumnRegistry` does not consume it.
|
|
59
|
+
*/
|
|
60
|
+
var ArrayColumnsProvider = class {
|
|
61
|
+
_isFinal;
|
|
62
|
+
columns;
|
|
63
|
+
constructor(columns, _isFinal) {
|
|
64
|
+
this._isFinal = _isFinal;
|
|
65
|
+
this.columns = columns.map((c) => require_column_lazy.ColumnLazyImpl.fromColumn(c));
|
|
66
|
+
}
|
|
67
|
+
getColumns() {
|
|
68
|
+
return this.columns;
|
|
69
|
+
}
|
|
70
|
+
isFinal() {
|
|
71
|
+
return this._isFinal;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Sandbox-specific provider over a {@link TreeNodeAccessor} root. Uses the
|
|
76
|
+
* accessor's own `resolvePath` as the canonical root path for id construction,
|
|
77
|
+
* and adds `getColumns()` returning {@link ColumnLazy}s on top of the generic
|
|
78
|
+
* entries index.
|
|
79
|
+
*/
|
|
80
|
+
var AccessorColumnsProviderImpl = class extends _milaboratories_pl_model_common.AccessorEntriesProvider {
|
|
81
|
+
cachedColumns;
|
|
82
|
+
constructor(root) {
|
|
83
|
+
super(root, root.resolvePath);
|
|
84
|
+
}
|
|
85
|
+
getColumns() {
|
|
86
|
+
if (this.cachedColumns !== void 0) return this.cachedColumns;
|
|
87
|
+
return this.cachedColumns = Array.from(this.entries.values()).map((e) => require_column_lazy.ColumnLazyImpl.fromAccessor(e)).filter((v) => !(0, es_toolkit.isNil)(v));
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Sandbox-specific result-pool provider. Accepts the raw handle-shaped blocks
|
|
92
|
+
* returned by {@link GlobalCfgRenderCtxMethods.getUpstreamBlockCtx} and
|
|
93
|
+
* wraps them into {@link TreeNodeAccessor}s, then adds `getColumns()`.
|
|
94
|
+
*/
|
|
95
|
+
var ResultPoolColumnsProviderImpl = class extends _milaboratories_pl_model_common.ResultPoolEntriesProvider {
|
|
96
|
+
cachedColumns;
|
|
97
|
+
constructor(rawPool = require_internal.getCfgRenderCtx().getUpstreamBlockCtx()) {
|
|
98
|
+
const blocks = rawPool.map((b) => ({
|
|
99
|
+
blockId: b.blockId,
|
|
100
|
+
prodCtx: b.prodCtx !== void 0 ? new require_accessor.TreeNodeAccessor(b.prodCtx, [b.blockId, "prodCtx"]) : void 0,
|
|
101
|
+
stagingCtx: b.stagingCtx !== void 0 ? new require_accessor.TreeNodeAccessor(b.stagingCtx, [b.blockId, "stagingCtx"]) : void 0,
|
|
102
|
+
prodIncomplete: b.prodIncomplete,
|
|
103
|
+
stagingIncomplete: b.stagingIncomplete
|
|
104
|
+
}));
|
|
105
|
+
super(blocks);
|
|
106
|
+
}
|
|
107
|
+
getColumns() {
|
|
108
|
+
if (this.cachedColumns !== void 0) return this.cachedColumns;
|
|
109
|
+
return this.cachedColumns = Array.from(this.getPObjectEntries().values()).map((e) => require_column_lazy.ColumnLazyImpl.fromAccessor(e)).filter((v) => !(0, es_toolkit.isNil)(v));
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
function hashRawPool(rawPool) {
|
|
113
|
+
return rawPool.map((b) => `${b.blockId}\x1f${b.prodCtx ?? ""}\x1f${b.stagingCtx ?? ""}\x1f${b.prodIncomplete ? 1 : 0}\x1f${b.stagingIncomplete ? 1 : 0}`).join("");
|
|
114
|
+
}
|
|
115
|
+
//#endregion
|
|
116
|
+
exports.AccessorColumnsProvider = AccessorColumnsProvider;
|
|
117
|
+
exports.AccessorColumnsProviderImpl = AccessorColumnsProviderImpl;
|
|
118
|
+
exports.ArrayColumnsProvider = ArrayColumnsProvider;
|
|
119
|
+
exports.ColumnsProvider = ColumnsProvider;
|
|
120
|
+
exports.ResultPoolColumnsProvider = ResultPoolColumnsProvider;
|
|
121
|
+
exports.ResultPoolColumnsProviderImpl = ResultPoolColumnsProviderImpl;
|
|
122
|
+
|
|
123
|
+
//# sourceMappingURL=providers.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.cjs","names":["TreeNodeAccessor","LRUCache","getCfgRenderCtx","ColumnLazyImpl","AccessorEntriesProvider","ResultPoolEntriesProvider"],"sources":["../../../src/columns/column_providers/providers.ts"],"sourcesContent":["import {\n AccessorEntriesProvider,\n ResultPoolEntriesProvider,\n type PColumn,\n type UpstreamBlockCtx,\n} from \"@milaboratories/pl-model-common\";\nimport { AccessorHandle, PColumnDataUniversal, TreeNodeAccessor } from \"../../render\";\nimport { ColumnLazy, ColumnLazyImpl } from \"../column_lazy\";\nimport { getCfgRenderCtx } from \"../../internal\";\nimport { isNil } from \"es-toolkit\";\nimport { LRUCache } from \"lru-cache\";\n\n/**\n * Data source for sandbox column-list builders. Has nothing to say about\n * id-resolution — `ColumnRegistry` (in `@milaboratories/pl-model-common`)\n * consumes the separate `ColumnEntriesProvider` interface for that.\n *\n * Same name as the factory function below — they merge into one TS\n * declaration: `ColumnsProvider` is callable AND the interface type.\n */\nexport interface ColumnsProvider {\n /** Returns all currently known PColumn columns as lazy views. */\n getColumns(): ColumnLazy[];\n /** Whether the provider has finished enumerating all its columns. */\n isFinal(): boolean;\n}\n\n/**\n * Unified memoised factory dispatching to the right provider flavour by the\n * source shape:\n * - `TreeNodeAccessor` → {@link AccessorColumnsProvider}\n * (indexed by `root.handle`, walks the accessor tree once per root).\n * - `UpstreamBlockCtx<AccessorHandle>[]` (or omitted — pulled from the\n * ambient ctx) → {@link ResultPoolColumnsProvider}\n * (indexed by a content-hash of the block list).\n *\n * Both branches return cached instances within their LRU window, so repeated\n * calls with the same source skip re-walking / re-hashing.\n */\nexport function ColumnsProvider(\n source?: TreeNodeAccessor | ReadonlyArray<UpstreamBlockCtx<AccessorHandle>>,\n) {\n if (isNil(source) || Array.isArray(source)) {\n return ResultPoolColumnsProvider(source);\n } else if (source instanceof TreeNodeAccessor) {\n return AccessorColumnsProvider(source);\n } else {\n throw new Error(\"Unknown columns provider source\");\n }\n}\n\n/**\n * Memoised constructor — same `root.handle` returns the same\n * {@link AccessorColumnsProviderImpl}, so `indexAccessorRoot` runs once per\n * accessor root (within the LRU window).\n */\nconst _accessorProviderCache = new LRUCache<AccessorHandle, AccessorColumnsProviderImpl>({\n max: 64,\n});\nexport function AccessorColumnsProvider(root: TreeNodeAccessor): AccessorColumnsProvider {\n let provider = _accessorProviderCache.get(root.handle);\n if (provider === undefined) {\n provider = new AccessorColumnsProviderImpl(root);\n _accessorProviderCache.set(root.handle, provider);\n }\n return provider;\n}\n\n/**\n * Memoised constructor — same `rawPool` content returns the same\n * {@link ResultPoolColumnsProviderImpl}, so `indexPoolBlock` runs once per\n * pool snapshot (within the LRU window).\n */\nconst _resultPoolProviderCache = new LRUCache<string, ResultPoolColumnsProviderImpl>({ max: 4 });\nexport function ResultPoolColumnsProvider(\n rawPool: ReadonlyArray<\n UpstreamBlockCtx<AccessorHandle>\n > = getCfgRenderCtx().getUpstreamBlockCtx(),\n): ResultPoolColumnsProvider {\n const key = hashRawPool(rawPool);\n let provider = _resultPoolProviderCache.get(key);\n if (provider === undefined) {\n provider = new ResultPoolColumnsProviderImpl(rawPool);\n _resultPoolProviderCache.set(key, provider);\n }\n return provider;\n}\n\n/**\n * Simple provider wrapping an array of PColumns. Sandbox-only —\n * implements {@link ColumnsProvider} (lazy-view enumeration). It is *not* an\n * id-index source — `ColumnRegistry` does not consume it.\n */\nexport class ArrayColumnsProvider implements ColumnsProvider {\n private readonly columns: ColumnLazy[];\n\n constructor(\n columns: ReadonlyArray<PColumn<undefined | PColumnDataUniversal> | ColumnLazy>,\n private readonly _isFinal: boolean,\n ) {\n this.columns = columns.map((c) => ColumnLazyImpl.fromColumn(c));\n }\n\n getColumns(): ColumnLazy[] {\n return this.columns;\n }\n\n isFinal(): boolean {\n return this._isFinal;\n }\n}\n\n/**\n * Sandbox-specific provider over a {@link TreeNodeAccessor} root. Uses the\n * accessor's own `resolvePath` as the canonical root path for id construction,\n * and adds `getColumns()` returning {@link ColumnLazy}s on top of the generic\n * entries index.\n */\nexport class AccessorColumnsProviderImpl\n extends AccessorEntriesProvider<TreeNodeAccessor>\n implements ColumnsProvider\n{\n private cachedColumns?: ColumnLazy[];\n\n constructor(root: TreeNodeAccessor) {\n super(root, root.resolvePath);\n }\n\n getColumns(): ColumnLazy[] {\n if (this.cachedColumns !== undefined) return this.cachedColumns;\n return (this.cachedColumns = Array.from(this.entries.values())\n .map((e) => ColumnLazyImpl.fromAccessor(e))\n .filter((v): v is ColumnLazy => !isNil(v)));\n }\n}\n\n/** Public type alias — value of the same name is the memoised factory above. */\nexport type AccessorColumnsProvider = AccessorColumnsProviderImpl;\n\n/**\n * Sandbox-specific result-pool provider. Accepts the raw handle-shaped blocks\n * returned by {@link GlobalCfgRenderCtxMethods.getUpstreamBlockCtx} and\n * wraps them into {@link TreeNodeAccessor}s, then adds `getColumns()`.\n */\nexport class ResultPoolColumnsProviderImpl\n extends ResultPoolEntriesProvider<TreeNodeAccessor>\n implements ColumnsProvider\n{\n private cachedColumns?: ColumnLazy[];\n\n constructor(\n rawPool: ReadonlyArray<\n UpstreamBlockCtx<AccessorHandle>\n > = getCfgRenderCtx().getUpstreamBlockCtx(),\n ) {\n const blocks = rawPool.map((b) => ({\n blockId: b.blockId,\n prodCtx:\n b.prodCtx !== undefined\n ? new TreeNodeAccessor(b.prodCtx, [b.blockId, \"prodCtx\"])\n : undefined,\n stagingCtx:\n b.stagingCtx !== undefined\n ? new TreeNodeAccessor(b.stagingCtx, [b.blockId, \"stagingCtx\"])\n : undefined,\n prodIncomplete: b.prodIncomplete,\n stagingIncomplete: b.stagingIncomplete,\n }));\n\n super(blocks);\n }\n\n getColumns(): ColumnLazy[] {\n if (this.cachedColumns !== undefined) return this.cachedColumns;\n return (this.cachedColumns = Array.from(this.getPObjectEntries().values())\n .map((e) => ColumnLazyImpl.fromAccessor(e))\n .filter((v): v is ColumnLazy => !isNil(v)));\n }\n}\n\n/** Public type alias — value of the same name is the memoised factory above. */\nexport type ResultPoolColumnsProvider = ResultPoolColumnsProviderImpl;\n\nfunction hashRawPool(rawPool: ReadonlyArray<UpstreamBlockCtx<AccessorHandle>>): string {\n return rawPool\n .map(\n (b) =>\n `${b.blockId}\\x1f${b.prodCtx ?? \"\"}\\x1f${b.stagingCtx ?? \"\"}\\x1f${\n b.prodIncomplete ? 1 : 0\n }\\x1f${b.stagingIncomplete ? 1 : 0}`,\n )\n .join(\"\\x1e\");\n}\n"],"mappings":"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"}
|