@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
package/dist/render/accessor.cjs
CHANGED
|
@@ -47,7 +47,7 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
47
47
|
}));
|
|
48
48
|
return this.resolveWithCommon({}, ...transformedSteps);
|
|
49
49
|
}
|
|
50
|
-
|
|
50
|
+
traverse(...steps) {
|
|
51
51
|
return this.resolveWithCommon({}, ...steps);
|
|
52
52
|
}
|
|
53
53
|
resolveWithCommon(commonOptions, ...steps) {
|
|
@@ -93,6 +93,9 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
93
93
|
if (content == void 0) throw new Error("Resource has no content.");
|
|
94
94
|
return JSON.parse(content);
|
|
95
95
|
}
|
|
96
|
+
hasData() {
|
|
97
|
+
return require_internal.getCfgRenderCtx().hasData(this.handle);
|
|
98
|
+
}
|
|
96
99
|
getDataBase64() {
|
|
97
100
|
return require_internal.getCfgRenderCtx().getDataBase64(this.handle);
|
|
98
101
|
}
|
|
@@ -129,9 +132,16 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
129
132
|
}
|
|
130
133
|
return this.getDataAsJson();
|
|
131
134
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
+
getFileContentAsBase64(range) {
|
|
136
|
+
return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));
|
|
137
|
+
}
|
|
138
|
+
getFileContentAsString(range) {
|
|
139
|
+
return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsString(this.handle, range));
|
|
140
|
+
}
|
|
141
|
+
getFileContentAsJson(range) {
|
|
142
|
+
return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsString(this.handle, range)).mapDefined((v) => JSON.parse(v));
|
|
143
|
+
}
|
|
144
|
+
/** @deprecated */
|
|
135
145
|
getPColumns(errorOnUnknownField = false, prefix = "") {
|
|
136
146
|
const result = this.parsePObjectCollection(errorOnUnknownField, prefix);
|
|
137
147
|
if (result === void 0) return void 0;
|
|
@@ -140,9 +150,7 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
140
150
|
return obj;
|
|
141
151
|
});
|
|
142
152
|
}
|
|
143
|
-
/**
|
|
144
|
-
*
|
|
145
|
-
*/
|
|
153
|
+
/** @deprecated */
|
|
146
154
|
parsePObjectCollection(errorOnUnknownField = false, prefix = "") {
|
|
147
155
|
const pObjects = require_internal.getCfgRenderCtx().parsePObjectCollection(this.handle, errorOnUnknownField, prefix, ...this.resolvePath);
|
|
148
156
|
if (pObjects === void 0) return void 0;
|
|
@@ -153,15 +161,6 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
153
161
|
}
|
|
154
162
|
return result;
|
|
155
163
|
}
|
|
156
|
-
getFileContentAsBase64(range) {
|
|
157
|
-
return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));
|
|
158
|
-
}
|
|
159
|
-
getFileContentAsString(range) {
|
|
160
|
-
return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsString(this.handle, range));
|
|
161
|
-
}
|
|
162
|
-
getFileContentAsJson(range) {
|
|
163
|
-
return new require_future.FutureRef(require_internal.getCfgRenderCtx().getBlobContentAsString(this.handle, range)).mapDefined((v) => JSON.parse(v));
|
|
164
|
-
}
|
|
165
164
|
/**
|
|
166
165
|
* @deprecated use getFileContentAsBase64
|
|
167
166
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessor.cjs","names":["getCfgRenderCtx","FutureRef"],"sources":["../../src/render/accessor.ts"],"sourcesContent":["import type {\n AnyLogHandle,\n ImportProgress,\n LocalBlobHandleAndSize,\n PColumn,\n PObject,\n RemoteBlobHandleAndSize,\n FolderURL,\n ArchiveFormat,\n ProgressLogWithInfo,\n RangeBytes,\n} from \"@milaboratories/pl-model-common\";\nimport { isPColumn, mapPObjectData } from \"@milaboratories/pl-model-common\";\nimport { getCfgRenderCtx } from \"../internal\";\nimport { FutureRef } from \"./future\";\nimport type { AccessorHandle } from \"./internal\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\n\nexport function ifDef<T, R>(value: T | undefined, cb: (value: T) => R): R | undefined {\n return value === undefined ? undefined : cb(value);\n}\n\n/**\n * Decode an error node's content into a display message. The backend serializes\n * a resource error as `{\"message\": \"...\"}` (`ResourceError`); unwrap that to the\n * human-readable message. Falls back to the raw string when the content is not\n * that envelope (e.g. plain text, or an unexpected shape).\n */\nfunction decodeErrorMessage(raw: string): string {\n try {\n const parsed = JSON.parse(raw) as { message?: unknown };\n if (typeof parsed?.message === \"string\") return parsed.message;\n } catch {\n // Not JSON — surface the raw content.\n }\n return raw;\n}\n\ntype FieldMapOps = {\n /**\n * Type of fields to iterate over.\n * (default 'Input')\n * */\n readonly fieldType?: \"Input\" | \"Output\" | \"Dynamic\";\n /**\n * If not locked, `undefined` value will be returned. Do nothing if mapping `Dynamic` fields.\n * (default true)\n * */\n readonly requireLocked?: boolean;\n /**\n * Will skip unresolved fields.\n * (default false)\n * */\n readonly skipUnresolved?: boolean;\n};\n\n/** Represent resource tree node accessor */\nexport class TreeNodeAccessor {\n constructor(\n public readonly handle: AccessorHandle,\n public readonly resolvePath: string[],\n ) {}\n\n /** Shortcut for {@link resolveInput} */\n public resolve(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** Shortcut for {@link resolveInput} */\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Output\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n public resolveAny(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n public resolveAny(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveAny(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n return this.resolveWithCommon({}, ...steps);\n }\n\n public resolveWithCommon(\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): TreeNodeAccessor | undefined {\n const resolvePath = [\n ...this.resolvePath,\n ...steps.map((step) => (typeof step === \"string\" ? step : step.field)),\n ];\n return ifDef(\n getCfgRenderCtx().resolveWithCommon(this.handle, commonOptions, ...steps),\n (accessor) => new TreeNodeAccessor(accessor, resolvePath),\n );\n }\n\n public get resourceType(): ResourceType {\n return getCfgRenderCtx().getResourceType(this.handle);\n }\n\n public getInputsLocked(): boolean {\n return getCfgRenderCtx().getInputsLocked(this.handle);\n }\n\n public getOutputsLocked(): boolean {\n return getCfgRenderCtx().getOutputsLocked(this.handle);\n }\n\n public getIsReadyOrError(): boolean {\n return getCfgRenderCtx().getIsReadyOrError(this.handle);\n }\n\n public getIsFinal(): boolean {\n return getCfgRenderCtx().getIsFinal(this.handle);\n }\n\n public getError(): TreeNodeAccessor | undefined {\n const resolvePath = [...this.resolvePath, \"error\"];\n return ifDef(\n getCfgRenderCtx().getError(this.handle),\n (accsessor) => new TreeNodeAccessor(accsessor, resolvePath),\n );\n }\n\n public listInputFields(): string[] {\n return getCfgRenderCtx().listInputFields(this.handle);\n }\n\n public listOutputFields(): string[] {\n return getCfgRenderCtx().listOutputFields(this.handle);\n }\n\n public listDynamicFields(): string[] {\n return getCfgRenderCtx().listDynamicFields(this.handle);\n }\n\n public getKeyValueBase64(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueBase64(this.handle, key);\n }\n\n public getKeyValueAsString(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueAsString(this.handle, key);\n }\n\n public getKeyValueAsJson<T>(key: string): T {\n const content = this.getKeyValueAsString(key);\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n public getDataBase64(): string | undefined {\n return getCfgRenderCtx().getDataBase64(this.handle);\n }\n\n public getDataAsString(): string | undefined {\n return getCfgRenderCtx().getDataAsString(this.handle);\n }\n\n public getDataAsJson<T>(): T {\n const content = this.getDataAsString();\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n /**\n * Like {@link getDataAsJson}, but does not throw while the resource is still\n * computing. Three states:\n *\n * - **Not ready** → returns `undefined` (loading).\n * - **Errored** → throws the resource's error.\n * - **Ready** → returns the parsed content.\n *\n * Prefer this over {@link getDataAsJson} in reactive output lambdas: a field\n * that resolves before its resource is ready (routine on remote backends)\n * makes {@link getDataAsJson} throw \"Resource has no content.\" mid-calculation,\n * flashing a transient \"Some outputs have errors\" banner that clears when the\n * resource finishes (MILAB-6318).\n */\n public getDataAsJsonOrUndefined<T>(): T | undefined {\n // Not ready → undefined (loading). getIsReadyOrError() registers the\n // readiness dependency, so the lambda re-runs once the resource finishes.\n if (!this.getIsReadyOrError()) return undefined;\n // Errored → throw the actual error, decoded from the error node and tagged\n // with the resolve path for debugging context. Beats getDataAsJson's\n // generic \"Resource has no content.\"\n const error = this.getError();\n if (error !== undefined) {\n const raw = error.getDataAsString();\n const message = raw === undefined ? \"Resource computation failed.\" : decodeErrorMessage(raw);\n const path = this.resolvePath.join(\".\");\n throw new Error(path ? `${message} (at ${path})` : message);\n }\n // Ready → parse the content.\n return this.getDataAsJson<T>();\n }\n\n /**\n *\n */\n public getPColumns(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): PColumn<TreeNodeAccessor>[] | undefined {\n const result = this.parsePObjectCollection(errorOnUnknownField, prefix);\n if (result === undefined) return undefined;\n\n const pf = Object.entries(result).map(([, obj]) => {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n });\n\n return pf;\n }\n\n /**\n *\n */\n public parsePObjectCollection(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): Record<string, PObject<TreeNodeAccessor>> | undefined {\n const pObjects = getCfgRenderCtx().parsePObjectCollection(\n this.handle,\n errorOnUnknownField,\n prefix,\n ...this.resolvePath,\n );\n if (pObjects === undefined) return undefined;\n const result: Record<string, PObject<TreeNodeAccessor>> = {};\n for (const [key, value] of Object.entries(pObjects)) {\n const resolvePath = [...this.resolvePath, key];\n result[key] = mapPObjectData(value, (c) => new TreeNodeAccessor(c, resolvePath));\n }\n return result;\n }\n\n public getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));\n }\n\n public getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));\n }\n\n public getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined> {\n return new FutureRef<string | undefined>(\n getCfgRenderCtx().getBlobContentAsString(this.handle, range),\n ).mapDefined((v) => JSON.parse(v) as T);\n }\n\n /**\n * @deprecated use getFileContentAsBase64\n */\n public getBlobContentAsBase64(): FutureRef<string | undefined> {\n return this.getFileContentAsBase64();\n }\n\n /**\n * @deprecated use getFileContentAsString\n */\n public getBlobContentAsString(): FutureRef<string | undefined> {\n return this.getFileContentAsString();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getFileHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getDownloadedBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getFileHandle\n */\n public getDownloadedBlobHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return this.getFileHandle();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getRemoteFileHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getOnDemandBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getRemoteFileHandle\n */\n public getOnDemandBlobHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return this.getRemoteFileHandle();\n }\n\n /**\n * @returns the url to the extracted folder\n */\n public extractArchiveAndGetURL(format: ArchiveFormat): FutureRef<FolderURL | undefined> {\n return new FutureRef(getCfgRenderCtx().extractArchiveAndGetURL(this.handle, format));\n }\n\n public getImportProgress(): FutureRef<ImportProgress> {\n return new FutureRef(getCfgRenderCtx().getImportProgress(this.handle));\n }\n\n public getLastLogs(nLines: number): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getLastLogs(this.handle, nLines));\n }\n\n public getProgressLog(patternToSearch: string): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLog(this.handle, patternToSearch));\n }\n\n public getProgressLogWithInfo(\n patternToSearch: string,\n ): FutureRef<ProgressLogWithInfo | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLogWithInfo(this.handle, patternToSearch));\n }\n\n public getLogHandle(): FutureRef<AnyLogHandle | undefined> {\n return new FutureRef(getCfgRenderCtx().getLogHandle(this.handle));\n }\n\n public allFieldsResolved(fieldType: \"Input\" | \"Output\" = \"Input\"): boolean {\n switch (fieldType) {\n case \"Input\":\n return (\n this.getInputsLocked() &&\n this.listInputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Input\" }) !== undefined,\n )\n );\n case \"Output\":\n return (\n this.getOutputsLocked() &&\n this.listOutputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Output\" }) !== undefined,\n )\n );\n }\n }\n\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops: FieldMapOps & { skipUnresolved: true },\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor | undefined) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined {\n const { fieldType, requireLocked, skipUnresolved } = {\n fieldType: \"Input\" as const,\n requireLocked: true,\n skipUnresolved: false,\n ..._ops,\n };\n const mapping = _mapping as (name: string, value: TreeNodeAccessor | undefined) => T;\n if (requireLocked) {\n if (fieldType === \"Input\" && !this.getInputsLocked()) return undefined;\n if (fieldType === \"Output\" && !this.getOutputsLocked()) return undefined;\n }\n const fieldList =\n fieldType === \"Input\"\n ? this.listInputFields()\n : fieldType === \"Output\"\n ? this.listOutputFields()\n : this.listDynamicFields();\n let fieldEntries = fieldList.map(\n (field) => [field, this.resolve({ field, assertFieldType: fieldType })] as const,\n );\n if (skipUnresolved) fieldEntries = fieldEntries.filter((e) => e[1] !== undefined);\n return fieldEntries.map(([name, value]) => mapping(name, value));\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accessor.cjs","names":["getCfgRenderCtx","FutureRef"],"sources":["../../src/render/accessor.ts"],"sourcesContent":["import {\n type AnyLogHandle,\n type ImportProgress,\n type LocalBlobHandleAndSize,\n type RemoteBlobHandleAndSize,\n type FolderURL,\n type ArchiveFormat,\n type ProgressLogWithInfo,\n type RangeBytes,\n isPColumn,\n mapPObjectData,\n PColumn,\n PObject,\n} from \"@milaboratories/pl-model-common\";\nimport { getCfgRenderCtx } from \"../internal\";\nimport { FutureRef } from \"./future\";\nimport type { AccessorHandle } from \"./internal\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\n\nexport function ifDef<T, R>(value: T | undefined, cb: (value: T) => R): R | undefined {\n return value === undefined ? undefined : cb(value);\n}\n\n/**\n * Decode an error node's content into a display message. The backend serializes\n * a resource error as `{\"message\": \"...\"}` (`ResourceError`); unwrap that to the\n * human-readable message. Falls back to the raw string when the content is not\n * that envelope (e.g. plain text, or an unexpected shape).\n */\nfunction decodeErrorMessage(raw: string): string {\n try {\n const parsed = JSON.parse(raw) as { message?: unknown };\n if (typeof parsed?.message === \"string\") return parsed.message;\n } catch {\n // Not JSON — surface the raw content.\n }\n return raw;\n}\n\ntype FieldMapOps = {\n /**\n * Type of fields to iterate over.\n * (default 'Input')\n * */\n readonly fieldType?: \"Input\" | \"Output\" | \"Dynamic\";\n /**\n * If not locked, `undefined` value will be returned. Do nothing if mapping `Dynamic` fields.\n * (default true)\n * */\n readonly requireLocked?: boolean;\n /**\n * Will skip unresolved fields.\n * (default false)\n * */\n readonly skipUnresolved?: boolean;\n};\n\n/** Represent resource tree node accessor */\nexport class TreeNodeAccessor {\n constructor(\n public readonly handle: AccessorHandle,\n public readonly resolvePath: string[],\n ) {}\n\n /** Shortcut for {@link resolveInput} */\n public resolve(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** Shortcut for {@link resolveInput} */\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Output\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n public traverse(\n ...steps: [Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & { errorIfFieldNotAssigned: true }]\n ): TreeNodeAccessor;\n public traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n return this.resolveWithCommon({}, ...steps);\n }\n\n public resolveWithCommon(\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): TreeNodeAccessor | undefined {\n const resolvePath = [\n ...this.resolvePath,\n ...steps.map((step) => (typeof step === \"string\" ? step : step.field)),\n ];\n return ifDef(\n getCfgRenderCtx().resolveWithCommon(this.handle, commonOptions, ...steps),\n (accessor) => new TreeNodeAccessor(accessor, resolvePath),\n );\n }\n\n public get resourceType(): ResourceType {\n return getCfgRenderCtx().getResourceType(this.handle);\n }\n\n public getInputsLocked(): boolean {\n return getCfgRenderCtx().getInputsLocked(this.handle);\n }\n\n public getOutputsLocked(): boolean {\n return getCfgRenderCtx().getOutputsLocked(this.handle);\n }\n\n public getIsReadyOrError(): boolean {\n return getCfgRenderCtx().getIsReadyOrError(this.handle);\n }\n\n public getIsFinal(): boolean {\n return getCfgRenderCtx().getIsFinal(this.handle);\n }\n\n public getError(): TreeNodeAccessor | undefined {\n const resolvePath = [...this.resolvePath, \"error\"];\n return ifDef(\n getCfgRenderCtx().getError(this.handle),\n (accsessor) => new TreeNodeAccessor(accsessor, resolvePath),\n );\n }\n\n public listInputFields(): string[] {\n return getCfgRenderCtx().listInputFields(this.handle);\n }\n\n public listOutputFields(): string[] {\n return getCfgRenderCtx().listOutputFields(this.handle);\n }\n\n public listDynamicFields(): string[] {\n return getCfgRenderCtx().listDynamicFields(this.handle);\n }\n\n public getKeyValueBase64(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueBase64(this.handle, key);\n }\n\n public getKeyValueAsString(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueAsString(this.handle, key);\n }\n\n public getKeyValueAsJson<T>(key: string): T {\n const content = this.getKeyValueAsString(key);\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n public hasData(): boolean {\n return getCfgRenderCtx().hasData(this.handle);\n }\n\n public getDataBase64(): string | undefined {\n return getCfgRenderCtx().getDataBase64(this.handle);\n }\n\n public getDataAsString(): string | undefined {\n return getCfgRenderCtx().getDataAsString(this.handle);\n }\n\n public getDataAsJson<T>(): T {\n const content = this.getDataAsString();\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n /**\n * Like {@link getDataAsJson}, but does not throw while the resource is still\n * computing. Three states:\n *\n * - **Not ready** → returns `undefined` (loading).\n * - **Errored** → throws the resource's error.\n * - **Ready** → returns the parsed content.\n *\n * Prefer this over {@link getDataAsJson} in reactive output lambdas: a field\n * that resolves before its resource is ready (routine on remote backends)\n * makes {@link getDataAsJson} throw \"Resource has no content.\" mid-calculation,\n * flashing a transient \"Some outputs have errors\" banner that clears when the\n * resource finishes (MILAB-6318).\n */\n public getDataAsJsonOrUndefined<T>(): T | undefined {\n // Not ready → undefined (loading). getIsReadyOrError() registers the\n // readiness dependency, so the lambda re-runs once the resource finishes.\n if (!this.getIsReadyOrError()) return undefined;\n // Errored → throw the actual error, decoded from the error node and tagged\n // with the resolve path for debugging context. Beats getDataAsJson's\n // generic \"Resource has no content.\"\n const error = this.getError();\n if (error !== undefined) {\n const raw = error.getDataAsString();\n const message = raw === undefined ? \"Resource computation failed.\" : decodeErrorMessage(raw);\n const path = this.resolvePath.join(\".\");\n throw new Error(path ? `${message} (at ${path})` : message);\n }\n // Ready → parse the content.\n return this.getDataAsJson<T>();\n }\n\n public getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));\n }\n\n public getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));\n }\n\n public getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined> {\n return new FutureRef<string | undefined>(\n getCfgRenderCtx().getBlobContentAsString(this.handle, range),\n ).mapDefined((v) => JSON.parse(v) as T);\n }\n\n /** @deprecated */\n public getPColumns(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): PColumn<TreeNodeAccessor>[] | undefined {\n const result = this.parsePObjectCollection(errorOnUnknownField, prefix);\n if (result === undefined) return undefined;\n\n const pf = Object.entries(result).map(([, obj]) => {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n });\n\n return pf;\n }\n\n /** @deprecated */\n public parsePObjectCollection(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): Record<string, PObject<TreeNodeAccessor>> | undefined {\n const pObjects = getCfgRenderCtx().parsePObjectCollection(\n this.handle,\n errorOnUnknownField,\n prefix,\n ...this.resolvePath,\n );\n if (pObjects === undefined) return undefined;\n const result: Record<string, PObject<TreeNodeAccessor>> = {};\n for (const [key, value] of Object.entries(pObjects)) {\n const resolvePath = [...this.resolvePath, key];\n result[key] = mapPObjectData(value, (c) => new TreeNodeAccessor(c, resolvePath));\n }\n return result;\n }\n\n /**\n * @deprecated use getFileContentAsBase64\n */\n public getBlobContentAsBase64(): FutureRef<string | undefined> {\n return this.getFileContentAsBase64();\n }\n\n /**\n * @deprecated use getFileContentAsString\n */\n public getBlobContentAsString(): FutureRef<string | undefined> {\n return this.getFileContentAsString();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getFileHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getDownloadedBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getFileHandle\n */\n public getDownloadedBlobHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return this.getFileHandle();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getRemoteFileHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getOnDemandBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getRemoteFileHandle\n */\n public getOnDemandBlobHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return this.getRemoteFileHandle();\n }\n\n /**\n * @returns the url to the extracted folder\n */\n public extractArchiveAndGetURL(format: ArchiveFormat): FutureRef<FolderURL | undefined> {\n return new FutureRef(getCfgRenderCtx().extractArchiveAndGetURL(this.handle, format));\n }\n\n public getImportProgress(): FutureRef<ImportProgress> {\n return new FutureRef(getCfgRenderCtx().getImportProgress(this.handle));\n }\n\n public getLastLogs(nLines: number): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getLastLogs(this.handle, nLines));\n }\n\n public getProgressLog(patternToSearch: string): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLog(this.handle, patternToSearch));\n }\n\n public getProgressLogWithInfo(\n patternToSearch: string,\n ): FutureRef<ProgressLogWithInfo | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLogWithInfo(this.handle, patternToSearch));\n }\n\n public getLogHandle(): FutureRef<AnyLogHandle | undefined> {\n return new FutureRef(getCfgRenderCtx().getLogHandle(this.handle));\n }\n\n public allFieldsResolved(fieldType: \"Input\" | \"Output\" = \"Input\"): boolean {\n switch (fieldType) {\n case \"Input\":\n return (\n this.getInputsLocked() &&\n this.listInputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Input\" }) !== undefined,\n )\n );\n case \"Output\":\n return (\n this.getOutputsLocked() &&\n this.listOutputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Output\" }) !== undefined,\n )\n );\n }\n }\n\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops: FieldMapOps & { skipUnresolved: true },\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor | undefined) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined {\n const { fieldType, requireLocked, skipUnresolved } = {\n fieldType: \"Input\" as const,\n requireLocked: true,\n skipUnresolved: false,\n ..._ops,\n };\n const mapping = _mapping as (name: string, value: TreeNodeAccessor | undefined) => T;\n if (requireLocked) {\n if (fieldType === \"Input\" && !this.getInputsLocked()) return undefined;\n if (fieldType === \"Output\" && !this.getOutputsLocked()) return undefined;\n }\n const fieldList =\n fieldType === \"Input\"\n ? this.listInputFields()\n : fieldType === \"Output\"\n ? this.listOutputFields()\n : this.listDynamicFields();\n let fieldEntries = fieldList.map(\n (field) => [field, this.resolve({ field, assertFieldType: fieldType })] as const,\n );\n if (skipUnresolved) fieldEntries = fieldEntries.filter((e) => e[1] !== undefined);\n return fieldEntries.map(([name, value]) => mapping(name, value));\n }\n}\n"],"mappings":"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"}
|
|
@@ -45,10 +45,10 @@ declare class TreeNodeAccessor {
|
|
|
45
45
|
}]): TreeNodeAccessor;
|
|
46
46
|
/** If field type assertion is not specified for the step, default is Input. */
|
|
47
47
|
resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;
|
|
48
|
-
|
|
48
|
+
traverse(...steps: [Omit<FieldTraversalStep, "errorIfFieldNotSet"> & {
|
|
49
49
|
errorIfFieldNotAssigned: true;
|
|
50
50
|
}]): TreeNodeAccessor;
|
|
51
|
-
|
|
51
|
+
traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;
|
|
52
52
|
resolveWithCommon(commonOptions: CommonFieldTraverseOps, ...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;
|
|
53
53
|
get resourceType(): ResourceType;
|
|
54
54
|
getInputsLocked(): boolean;
|
|
@@ -62,6 +62,7 @@ declare class TreeNodeAccessor {
|
|
|
62
62
|
getKeyValueBase64(key: string): string | undefined;
|
|
63
63
|
getKeyValueAsString(key: string): string | undefined;
|
|
64
64
|
getKeyValueAsJson<T>(key: string): T;
|
|
65
|
+
hasData(): boolean;
|
|
65
66
|
getDataBase64(): string | undefined;
|
|
66
67
|
getDataAsString(): string | undefined;
|
|
67
68
|
getDataAsJson<T>(): T;
|
|
@@ -80,17 +81,13 @@ declare class TreeNodeAccessor {
|
|
|
80
81
|
* resource finishes (MILAB-6318).
|
|
81
82
|
*/
|
|
82
83
|
getDataAsJsonOrUndefined<T>(): T | undefined;
|
|
83
|
-
/**
|
|
84
|
-
*
|
|
85
|
-
*/
|
|
86
|
-
getPColumns(errorOnUnknownField?: boolean, prefix?: string): PColumn<TreeNodeAccessor>[] | undefined;
|
|
87
|
-
/**
|
|
88
|
-
*
|
|
89
|
-
*/
|
|
90
|
-
parsePObjectCollection(errorOnUnknownField?: boolean, prefix?: string): Record<string, PObject<TreeNodeAccessor>> | undefined;
|
|
91
84
|
getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined>;
|
|
92
85
|
getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined>;
|
|
93
86
|
getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined>;
|
|
87
|
+
/** @deprecated */
|
|
88
|
+
getPColumns(errorOnUnknownField?: boolean, prefix?: string): PColumn<TreeNodeAccessor>[] | undefined;
|
|
89
|
+
/** @deprecated */
|
|
90
|
+
parsePObjectCollection(errorOnUnknownField?: boolean, prefix?: string): Record<string, PObject<TreeNodeAccessor>> | undefined;
|
|
94
91
|
/**
|
|
95
92
|
* @deprecated use getFileContentAsBase64
|
|
96
93
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessor.d.ts","names":[],"sources":["../../src/render/accessor.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"accessor.d.ts","names":[],"sources":["../../src/render/accessor.ts"],"mappings":"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"}
|
package/dist/render/accessor.js
CHANGED
|
@@ -47,7 +47,7 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
47
47
|
}));
|
|
48
48
|
return this.resolveWithCommon({}, ...transformedSteps);
|
|
49
49
|
}
|
|
50
|
-
|
|
50
|
+
traverse(...steps) {
|
|
51
51
|
return this.resolveWithCommon({}, ...steps);
|
|
52
52
|
}
|
|
53
53
|
resolveWithCommon(commonOptions, ...steps) {
|
|
@@ -93,6 +93,9 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
93
93
|
if (content == void 0) throw new Error("Resource has no content.");
|
|
94
94
|
return JSON.parse(content);
|
|
95
95
|
}
|
|
96
|
+
hasData() {
|
|
97
|
+
return getCfgRenderCtx().hasData(this.handle);
|
|
98
|
+
}
|
|
96
99
|
getDataBase64() {
|
|
97
100
|
return getCfgRenderCtx().getDataBase64(this.handle);
|
|
98
101
|
}
|
|
@@ -129,9 +132,16 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
129
132
|
}
|
|
130
133
|
return this.getDataAsJson();
|
|
131
134
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
+
getFileContentAsBase64(range) {
|
|
136
|
+
return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));
|
|
137
|
+
}
|
|
138
|
+
getFileContentAsString(range) {
|
|
139
|
+
return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));
|
|
140
|
+
}
|
|
141
|
+
getFileContentAsJson(range) {
|
|
142
|
+
return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range)).mapDefined((v) => JSON.parse(v));
|
|
143
|
+
}
|
|
144
|
+
/** @deprecated */
|
|
135
145
|
getPColumns(errorOnUnknownField = false, prefix = "") {
|
|
136
146
|
const result = this.parsePObjectCollection(errorOnUnknownField, prefix);
|
|
137
147
|
if (result === void 0) return void 0;
|
|
@@ -140,9 +150,7 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
140
150
|
return obj;
|
|
141
151
|
});
|
|
142
152
|
}
|
|
143
|
-
/**
|
|
144
|
-
*
|
|
145
|
-
*/
|
|
153
|
+
/** @deprecated */
|
|
146
154
|
parsePObjectCollection(errorOnUnknownField = false, prefix = "") {
|
|
147
155
|
const pObjects = getCfgRenderCtx().parsePObjectCollection(this.handle, errorOnUnknownField, prefix, ...this.resolvePath);
|
|
148
156
|
if (pObjects === void 0) return void 0;
|
|
@@ -153,15 +161,6 @@ var TreeNodeAccessor = class TreeNodeAccessor {
|
|
|
153
161
|
}
|
|
154
162
|
return result;
|
|
155
163
|
}
|
|
156
|
-
getFileContentAsBase64(range) {
|
|
157
|
-
return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));
|
|
158
|
-
}
|
|
159
|
-
getFileContentAsString(range) {
|
|
160
|
-
return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));
|
|
161
|
-
}
|
|
162
|
-
getFileContentAsJson(range) {
|
|
163
|
-
return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range)).mapDefined((v) => JSON.parse(v));
|
|
164
|
-
}
|
|
165
164
|
/**
|
|
166
165
|
* @deprecated use getFileContentAsBase64
|
|
167
166
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessor.js","names":[],"sources":["../../src/render/accessor.ts"],"sourcesContent":["import type {\n AnyLogHandle,\n ImportProgress,\n LocalBlobHandleAndSize,\n PColumn,\n PObject,\n RemoteBlobHandleAndSize,\n FolderURL,\n ArchiveFormat,\n ProgressLogWithInfo,\n RangeBytes,\n} from \"@milaboratories/pl-model-common\";\nimport { isPColumn, mapPObjectData } from \"@milaboratories/pl-model-common\";\nimport { getCfgRenderCtx } from \"../internal\";\nimport { FutureRef } from \"./future\";\nimport type { AccessorHandle } from \"./internal\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\n\nexport function ifDef<T, R>(value: T | undefined, cb: (value: T) => R): R | undefined {\n return value === undefined ? undefined : cb(value);\n}\n\n/**\n * Decode an error node's content into a display message. The backend serializes\n * a resource error as `{\"message\": \"...\"}` (`ResourceError`); unwrap that to the\n * human-readable message. Falls back to the raw string when the content is not\n * that envelope (e.g. plain text, or an unexpected shape).\n */\nfunction decodeErrorMessage(raw: string): string {\n try {\n const parsed = JSON.parse(raw) as { message?: unknown };\n if (typeof parsed?.message === \"string\") return parsed.message;\n } catch {\n // Not JSON — surface the raw content.\n }\n return raw;\n}\n\ntype FieldMapOps = {\n /**\n * Type of fields to iterate over.\n * (default 'Input')\n * */\n readonly fieldType?: \"Input\" | \"Output\" | \"Dynamic\";\n /**\n * If not locked, `undefined` value will be returned. Do nothing if mapping `Dynamic` fields.\n * (default true)\n * */\n readonly requireLocked?: boolean;\n /**\n * Will skip unresolved fields.\n * (default false)\n * */\n readonly skipUnresolved?: boolean;\n};\n\n/** Represent resource tree node accessor */\nexport class TreeNodeAccessor {\n constructor(\n public readonly handle: AccessorHandle,\n public readonly resolvePath: string[],\n ) {}\n\n /** Shortcut for {@link resolveInput} */\n public resolve(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** Shortcut for {@link resolveInput} */\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Output\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n public resolveAny(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n public resolveAny(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveAny(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n return this.resolveWithCommon({}, ...steps);\n }\n\n public resolveWithCommon(\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): TreeNodeAccessor | undefined {\n const resolvePath = [\n ...this.resolvePath,\n ...steps.map((step) => (typeof step === \"string\" ? step : step.field)),\n ];\n return ifDef(\n getCfgRenderCtx().resolveWithCommon(this.handle, commonOptions, ...steps),\n (accessor) => new TreeNodeAccessor(accessor, resolvePath),\n );\n }\n\n public get resourceType(): ResourceType {\n return getCfgRenderCtx().getResourceType(this.handle);\n }\n\n public getInputsLocked(): boolean {\n return getCfgRenderCtx().getInputsLocked(this.handle);\n }\n\n public getOutputsLocked(): boolean {\n return getCfgRenderCtx().getOutputsLocked(this.handle);\n }\n\n public getIsReadyOrError(): boolean {\n return getCfgRenderCtx().getIsReadyOrError(this.handle);\n }\n\n public getIsFinal(): boolean {\n return getCfgRenderCtx().getIsFinal(this.handle);\n }\n\n public getError(): TreeNodeAccessor | undefined {\n const resolvePath = [...this.resolvePath, \"error\"];\n return ifDef(\n getCfgRenderCtx().getError(this.handle),\n (accsessor) => new TreeNodeAccessor(accsessor, resolvePath),\n );\n }\n\n public listInputFields(): string[] {\n return getCfgRenderCtx().listInputFields(this.handle);\n }\n\n public listOutputFields(): string[] {\n return getCfgRenderCtx().listOutputFields(this.handle);\n }\n\n public listDynamicFields(): string[] {\n return getCfgRenderCtx().listDynamicFields(this.handle);\n }\n\n public getKeyValueBase64(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueBase64(this.handle, key);\n }\n\n public getKeyValueAsString(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueAsString(this.handle, key);\n }\n\n public getKeyValueAsJson<T>(key: string): T {\n const content = this.getKeyValueAsString(key);\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n public getDataBase64(): string | undefined {\n return getCfgRenderCtx().getDataBase64(this.handle);\n }\n\n public getDataAsString(): string | undefined {\n return getCfgRenderCtx().getDataAsString(this.handle);\n }\n\n public getDataAsJson<T>(): T {\n const content = this.getDataAsString();\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n /**\n * Like {@link getDataAsJson}, but does not throw while the resource is still\n * computing. Three states:\n *\n * - **Not ready** → returns `undefined` (loading).\n * - **Errored** → throws the resource's error.\n * - **Ready** → returns the parsed content.\n *\n * Prefer this over {@link getDataAsJson} in reactive output lambdas: a field\n * that resolves before its resource is ready (routine on remote backends)\n * makes {@link getDataAsJson} throw \"Resource has no content.\" mid-calculation,\n * flashing a transient \"Some outputs have errors\" banner that clears when the\n * resource finishes (MILAB-6318).\n */\n public getDataAsJsonOrUndefined<T>(): T | undefined {\n // Not ready → undefined (loading). getIsReadyOrError() registers the\n // readiness dependency, so the lambda re-runs once the resource finishes.\n if (!this.getIsReadyOrError()) return undefined;\n // Errored → throw the actual error, decoded from the error node and tagged\n // with the resolve path for debugging context. Beats getDataAsJson's\n // generic \"Resource has no content.\"\n const error = this.getError();\n if (error !== undefined) {\n const raw = error.getDataAsString();\n const message = raw === undefined ? \"Resource computation failed.\" : decodeErrorMessage(raw);\n const path = this.resolvePath.join(\".\");\n throw new Error(path ? `${message} (at ${path})` : message);\n }\n // Ready → parse the content.\n return this.getDataAsJson<T>();\n }\n\n /**\n *\n */\n public getPColumns(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): PColumn<TreeNodeAccessor>[] | undefined {\n const result = this.parsePObjectCollection(errorOnUnknownField, prefix);\n if (result === undefined) return undefined;\n\n const pf = Object.entries(result).map(([, obj]) => {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n });\n\n return pf;\n }\n\n /**\n *\n */\n public parsePObjectCollection(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): Record<string, PObject<TreeNodeAccessor>> | undefined {\n const pObjects = getCfgRenderCtx().parsePObjectCollection(\n this.handle,\n errorOnUnknownField,\n prefix,\n ...this.resolvePath,\n );\n if (pObjects === undefined) return undefined;\n const result: Record<string, PObject<TreeNodeAccessor>> = {};\n for (const [key, value] of Object.entries(pObjects)) {\n const resolvePath = [...this.resolvePath, key];\n result[key] = mapPObjectData(value, (c) => new TreeNodeAccessor(c, resolvePath));\n }\n return result;\n }\n\n public getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));\n }\n\n public getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));\n }\n\n public getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined> {\n return new FutureRef<string | undefined>(\n getCfgRenderCtx().getBlobContentAsString(this.handle, range),\n ).mapDefined((v) => JSON.parse(v) as T);\n }\n\n /**\n * @deprecated use getFileContentAsBase64\n */\n public getBlobContentAsBase64(): FutureRef<string | undefined> {\n return this.getFileContentAsBase64();\n }\n\n /**\n * @deprecated use getFileContentAsString\n */\n public getBlobContentAsString(): FutureRef<string | undefined> {\n return this.getFileContentAsString();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getFileHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getDownloadedBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getFileHandle\n */\n public getDownloadedBlobHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return this.getFileHandle();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getRemoteFileHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getOnDemandBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getRemoteFileHandle\n */\n public getOnDemandBlobHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return this.getRemoteFileHandle();\n }\n\n /**\n * @returns the url to the extracted folder\n */\n public extractArchiveAndGetURL(format: ArchiveFormat): FutureRef<FolderURL | undefined> {\n return new FutureRef(getCfgRenderCtx().extractArchiveAndGetURL(this.handle, format));\n }\n\n public getImportProgress(): FutureRef<ImportProgress> {\n return new FutureRef(getCfgRenderCtx().getImportProgress(this.handle));\n }\n\n public getLastLogs(nLines: number): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getLastLogs(this.handle, nLines));\n }\n\n public getProgressLog(patternToSearch: string): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLog(this.handle, patternToSearch));\n }\n\n public getProgressLogWithInfo(\n patternToSearch: string,\n ): FutureRef<ProgressLogWithInfo | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLogWithInfo(this.handle, patternToSearch));\n }\n\n public getLogHandle(): FutureRef<AnyLogHandle | undefined> {\n return new FutureRef(getCfgRenderCtx().getLogHandle(this.handle));\n }\n\n public allFieldsResolved(fieldType: \"Input\" | \"Output\" = \"Input\"): boolean {\n switch (fieldType) {\n case \"Input\":\n return (\n this.getInputsLocked() &&\n this.listInputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Input\" }) !== undefined,\n )\n );\n case \"Output\":\n return (\n this.getOutputsLocked() &&\n this.listOutputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Output\" }) !== undefined,\n )\n );\n }\n }\n\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops: FieldMapOps & { skipUnresolved: true },\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor | undefined) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined {\n const { fieldType, requireLocked, skipUnresolved } = {\n fieldType: \"Input\" as const,\n requireLocked: true,\n skipUnresolved: false,\n ..._ops,\n };\n const mapping = _mapping as (name: string, value: TreeNodeAccessor | undefined) => T;\n if (requireLocked) {\n if (fieldType === \"Input\" && !this.getInputsLocked()) return undefined;\n if (fieldType === \"Output\" && !this.getOutputsLocked()) return undefined;\n }\n const fieldList =\n fieldType === \"Input\"\n ? this.listInputFields()\n : fieldType === \"Output\"\n ? this.listOutputFields()\n : this.listDynamicFields();\n let fieldEntries = fieldList.map(\n (field) => [field, this.resolve({ field, assertFieldType: fieldType })] as const,\n );\n if (skipUnresolved) fieldEntries = fieldEntries.filter((e) => e[1] !== undefined);\n return fieldEntries.map(([name, value]) => mapping(name, value));\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accessor.js","names":[],"sources":["../../src/render/accessor.ts"],"sourcesContent":["import {\n type AnyLogHandle,\n type ImportProgress,\n type LocalBlobHandleAndSize,\n type RemoteBlobHandleAndSize,\n type FolderURL,\n type ArchiveFormat,\n type ProgressLogWithInfo,\n type RangeBytes,\n isPColumn,\n mapPObjectData,\n PColumn,\n PObject,\n} from \"@milaboratories/pl-model-common\";\nimport { getCfgRenderCtx } from \"../internal\";\nimport { FutureRef } from \"./future\";\nimport type { AccessorHandle } from \"./internal\";\nimport type { CommonFieldTraverseOps, FieldTraversalStep, ResourceType } from \"./traversal_ops\";\n\nexport function ifDef<T, R>(value: T | undefined, cb: (value: T) => R): R | undefined {\n return value === undefined ? undefined : cb(value);\n}\n\n/**\n * Decode an error node's content into a display message. The backend serializes\n * a resource error as `{\"message\": \"...\"}` (`ResourceError`); unwrap that to the\n * human-readable message. Falls back to the raw string when the content is not\n * that envelope (e.g. plain text, or an unexpected shape).\n */\nfunction decodeErrorMessage(raw: string): string {\n try {\n const parsed = JSON.parse(raw) as { message?: unknown };\n if (typeof parsed?.message === \"string\") return parsed.message;\n } catch {\n // Not JSON — surface the raw content.\n }\n return raw;\n}\n\ntype FieldMapOps = {\n /**\n * Type of fields to iterate over.\n * (default 'Input')\n * */\n readonly fieldType?: \"Input\" | \"Output\" | \"Dynamic\";\n /**\n * If not locked, `undefined` value will be returned. Do nothing if mapping `Dynamic` fields.\n * (default true)\n * */\n readonly requireLocked?: boolean;\n /**\n * Will skip unresolved fields.\n * (default false)\n * */\n readonly skipUnresolved?: boolean;\n};\n\n/** Represent resource tree node accessor */\nexport class TreeNodeAccessor {\n constructor(\n public readonly handle: AccessorHandle,\n public readonly resolvePath: string[],\n ) {}\n\n /** Shortcut for {@link resolveInput} */\n public resolve(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** Shortcut for {@link resolveInput} */\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolve(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Output. */\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveOutput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Output\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(\n ...steps: [\n Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & {\n errorIfFieldNotAssigned: true;\n },\n ]\n ): TreeNodeAccessor;\n /** If field type assertion is not specified for the step, default is Input. */\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public resolveInput(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n const transformedSteps = steps.map(\n (s) =>\n ({\n assertFieldType: \"Input\",\n ...(typeof s === \"string\" ? { field: s } : s),\n }) satisfies FieldTraversalStep,\n );\n return this.resolveWithCommon({}, ...transformedSteps);\n }\n\n public traverse(\n ...steps: [Omit<FieldTraversalStep, \"errorIfFieldNotSet\"> & { errorIfFieldNotAssigned: true }]\n ): TreeNodeAccessor;\n public traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined;\n public traverse(...steps: (FieldTraversalStep | string)[]): TreeNodeAccessor | undefined {\n return this.resolveWithCommon({}, ...steps);\n }\n\n public resolveWithCommon(\n commonOptions: CommonFieldTraverseOps,\n ...steps: (FieldTraversalStep | string)[]\n ): TreeNodeAccessor | undefined {\n const resolvePath = [\n ...this.resolvePath,\n ...steps.map((step) => (typeof step === \"string\" ? step : step.field)),\n ];\n return ifDef(\n getCfgRenderCtx().resolveWithCommon(this.handle, commonOptions, ...steps),\n (accessor) => new TreeNodeAccessor(accessor, resolvePath),\n );\n }\n\n public get resourceType(): ResourceType {\n return getCfgRenderCtx().getResourceType(this.handle);\n }\n\n public getInputsLocked(): boolean {\n return getCfgRenderCtx().getInputsLocked(this.handle);\n }\n\n public getOutputsLocked(): boolean {\n return getCfgRenderCtx().getOutputsLocked(this.handle);\n }\n\n public getIsReadyOrError(): boolean {\n return getCfgRenderCtx().getIsReadyOrError(this.handle);\n }\n\n public getIsFinal(): boolean {\n return getCfgRenderCtx().getIsFinal(this.handle);\n }\n\n public getError(): TreeNodeAccessor | undefined {\n const resolvePath = [...this.resolvePath, \"error\"];\n return ifDef(\n getCfgRenderCtx().getError(this.handle),\n (accsessor) => new TreeNodeAccessor(accsessor, resolvePath),\n );\n }\n\n public listInputFields(): string[] {\n return getCfgRenderCtx().listInputFields(this.handle);\n }\n\n public listOutputFields(): string[] {\n return getCfgRenderCtx().listOutputFields(this.handle);\n }\n\n public listDynamicFields(): string[] {\n return getCfgRenderCtx().listDynamicFields(this.handle);\n }\n\n public getKeyValueBase64(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueBase64(this.handle, key);\n }\n\n public getKeyValueAsString(key: string): string | undefined {\n return getCfgRenderCtx().getKeyValueAsString(this.handle, key);\n }\n\n public getKeyValueAsJson<T>(key: string): T {\n const content = this.getKeyValueAsString(key);\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n public hasData(): boolean {\n return getCfgRenderCtx().hasData(this.handle);\n }\n\n public getDataBase64(): string | undefined {\n return getCfgRenderCtx().getDataBase64(this.handle);\n }\n\n public getDataAsString(): string | undefined {\n return getCfgRenderCtx().getDataAsString(this.handle);\n }\n\n public getDataAsJson<T>(): T {\n const content = this.getDataAsString();\n if (content == undefined) throw new Error(\"Resource has no content.\");\n return JSON.parse(content);\n }\n\n /**\n * Like {@link getDataAsJson}, but does not throw while the resource is still\n * computing. Three states:\n *\n * - **Not ready** → returns `undefined` (loading).\n * - **Errored** → throws the resource's error.\n * - **Ready** → returns the parsed content.\n *\n * Prefer this over {@link getDataAsJson} in reactive output lambdas: a field\n * that resolves before its resource is ready (routine on remote backends)\n * makes {@link getDataAsJson} throw \"Resource has no content.\" mid-calculation,\n * flashing a transient \"Some outputs have errors\" banner that clears when the\n * resource finishes (MILAB-6318).\n */\n public getDataAsJsonOrUndefined<T>(): T | undefined {\n // Not ready → undefined (loading). getIsReadyOrError() registers the\n // readiness dependency, so the lambda re-runs once the resource finishes.\n if (!this.getIsReadyOrError()) return undefined;\n // Errored → throw the actual error, decoded from the error node and tagged\n // with the resolve path for debugging context. Beats getDataAsJson's\n // generic \"Resource has no content.\"\n const error = this.getError();\n if (error !== undefined) {\n const raw = error.getDataAsString();\n const message = raw === undefined ? \"Resource computation failed.\" : decodeErrorMessage(raw);\n const path = this.resolvePath.join(\".\");\n throw new Error(path ? `${message} (at ${path})` : message);\n }\n // Ready → parse the content.\n return this.getDataAsJson<T>();\n }\n\n public getFileContentAsBase64(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsBase64(this.handle, range));\n }\n\n public getFileContentAsString(range?: RangeBytes): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getBlobContentAsString(this.handle, range));\n }\n\n public getFileContentAsJson<T>(range?: RangeBytes): FutureRef<T | undefined> {\n return new FutureRef<string | undefined>(\n getCfgRenderCtx().getBlobContentAsString(this.handle, range),\n ).mapDefined((v) => JSON.parse(v) as T);\n }\n\n /** @deprecated */\n public getPColumns(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): PColumn<TreeNodeAccessor>[] | undefined {\n const result = this.parsePObjectCollection(errorOnUnknownField, prefix);\n if (result === undefined) return undefined;\n\n const pf = Object.entries(result).map(([, obj]) => {\n if (!isPColumn(obj)) throw new Error(`not a PColumn (kind = ${obj.spec.kind})`);\n return obj;\n });\n\n return pf;\n }\n\n /** @deprecated */\n public parsePObjectCollection(\n errorOnUnknownField: boolean = false,\n prefix: string = \"\",\n ): Record<string, PObject<TreeNodeAccessor>> | undefined {\n const pObjects = getCfgRenderCtx().parsePObjectCollection(\n this.handle,\n errorOnUnknownField,\n prefix,\n ...this.resolvePath,\n );\n if (pObjects === undefined) return undefined;\n const result: Record<string, PObject<TreeNodeAccessor>> = {};\n for (const [key, value] of Object.entries(pObjects)) {\n const resolvePath = [...this.resolvePath, key];\n result[key] = mapPObjectData(value, (c) => new TreeNodeAccessor(c, resolvePath));\n }\n return result;\n }\n\n /**\n * @deprecated use getFileContentAsBase64\n */\n public getBlobContentAsBase64(): FutureRef<string | undefined> {\n return this.getFileContentAsBase64();\n }\n\n /**\n * @deprecated use getFileContentAsString\n */\n public getBlobContentAsString(): FutureRef<string | undefined> {\n return this.getFileContentAsString();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getFileHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getDownloadedBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getFileHandle\n */\n public getDownloadedBlobHandle(): FutureRef<LocalBlobHandleAndSize | undefined> {\n return this.getFileHandle();\n }\n\n /**\n * @returns downloaded file handle\n */\n public getRemoteFileHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return new FutureRef(getCfgRenderCtx().getOnDemandBlobContentHandle(this.handle));\n }\n\n /**\n * @deprecated use getRemoteFileHandle\n */\n public getOnDemandBlobHandle(): FutureRef<RemoteBlobHandleAndSize | undefined> {\n return this.getRemoteFileHandle();\n }\n\n /**\n * @returns the url to the extracted folder\n */\n public extractArchiveAndGetURL(format: ArchiveFormat): FutureRef<FolderURL | undefined> {\n return new FutureRef(getCfgRenderCtx().extractArchiveAndGetURL(this.handle, format));\n }\n\n public getImportProgress(): FutureRef<ImportProgress> {\n return new FutureRef(getCfgRenderCtx().getImportProgress(this.handle));\n }\n\n public getLastLogs(nLines: number): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getLastLogs(this.handle, nLines));\n }\n\n public getProgressLog(patternToSearch: string): FutureRef<string | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLog(this.handle, patternToSearch));\n }\n\n public getProgressLogWithInfo(\n patternToSearch: string,\n ): FutureRef<ProgressLogWithInfo | undefined> {\n return new FutureRef(getCfgRenderCtx().getProgressLogWithInfo(this.handle, patternToSearch));\n }\n\n public getLogHandle(): FutureRef<AnyLogHandle | undefined> {\n return new FutureRef(getCfgRenderCtx().getLogHandle(this.handle));\n }\n\n public allFieldsResolved(fieldType: \"Input\" | \"Output\" = \"Input\"): boolean {\n switch (fieldType) {\n case \"Input\":\n return (\n this.getInputsLocked() &&\n this.listInputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Input\" }) !== undefined,\n )\n );\n case \"Output\":\n return (\n this.getOutputsLocked() &&\n this.listOutputFields().every(\n (field) => this.resolve({ field, assertFieldType: \"Output\" }) !== undefined,\n )\n );\n }\n }\n\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops: FieldMapOps & { skipUnresolved: true },\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor | undefined) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined;\n public mapFields<T>(\n _mapping: (name: string, value: TreeNodeAccessor) => T,\n _ops?: FieldMapOps,\n ): T[] | undefined {\n const { fieldType, requireLocked, skipUnresolved } = {\n fieldType: \"Input\" as const,\n requireLocked: true,\n skipUnresolved: false,\n ..._ops,\n };\n const mapping = _mapping as (name: string, value: TreeNodeAccessor | undefined) => T;\n if (requireLocked) {\n if (fieldType === \"Input\" && !this.getInputsLocked()) return undefined;\n if (fieldType === \"Output\" && !this.getOutputsLocked()) return undefined;\n }\n const fieldList =\n fieldType === \"Input\"\n ? this.listInputFields()\n : fieldType === \"Output\"\n ? this.listOutputFields()\n : this.listDynamicFields();\n let fieldEntries = fieldList.map(\n (field) => [field, this.resolve({ field, assertFieldType: fieldType })] as const,\n );\n if (skipUnresolved) fieldEntries = fieldEntries.filter((e) => e[1] !== undefined);\n return fieldEntries.map(([name, value]) => mapping(name, value));\n }\n}\n"],"mappings":"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"}
|
package/dist/render/api.cjs
CHANGED
|
@@ -13,6 +13,8 @@ require("./util/index.cjs");
|
|
|
13
13
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
14
14
|
let canonicalize = require("canonicalize");
|
|
15
15
|
canonicalize = require_runtime.__toESM(canonicalize, 1);
|
|
16
|
+
let _milaboratories_helpers = require("@milaboratories/helpers");
|
|
17
|
+
let es_toolkit = require("es-toolkit");
|
|
16
18
|
//#region src/render/api.ts
|
|
17
19
|
/**
|
|
18
20
|
* Helper function to match domain objects
|
|
@@ -28,24 +30,35 @@ function matchDomain(query, target) {
|
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
30
32
|
* Transforms PColumn data into the internal representation expected by the platform
|
|
31
|
-
* @param
|
|
33
|
+
* @param column Data from a PColumn to transform
|
|
32
34
|
* @returns Transformed data compatible with platform API
|
|
33
35
|
*/
|
|
34
|
-
function
|
|
35
|
-
return (0, _milaboratories_pl_model_common.mapPObjectData)(
|
|
36
|
-
if (
|
|
37
|
-
else if ((0, _milaboratories_pl_model_common.isDataInfo)(
|
|
38
|
-
|
|
36
|
+
function finalizePColumnData(column) {
|
|
37
|
+
return (0, _milaboratories_pl_model_common.mapPObjectData)(column, (data) => {
|
|
38
|
+
if (data instanceof require_accessor.TreeNodeAccessor) return data.handle;
|
|
39
|
+
else if ((0, _milaboratories_pl_model_common.isDataInfo)(data)) {
|
|
40
|
+
let ready = true;
|
|
41
|
+
(0, _milaboratories_pl_model_common.visitDataInfo)(data, (accessor) => ready &&= accessor?.getIsReadyOrError() ?? false);
|
|
42
|
+
if (!ready) return [];
|
|
43
|
+
return (0, _milaboratories_pl_model_common.mapDataInfo)(data, (accessor) => accessor?.handle ?? (0, _milaboratories_helpers.throwError)("Accessor handle is undefined"));
|
|
44
|
+
} else return data ?? [];
|
|
39
45
|
});
|
|
40
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* @deprecated use the direct `ctx.*` methods on `RenderCtxBase` instead.
|
|
49
|
+
*
|
|
50
|
+
* Migration map:
|
|
51
|
+
* - `getSpecs` → `ctx.getSpecs`
|
|
52
|
+
* - `getSpecByRef` / `getPColumnSpecByRef` → `ctx.getSpecByRef` / `ctx.getPColumnSpecByRef`
|
|
53
|
+
* - `getDataByRef` / `getPColumnByRef` → `ctx.getDataByRef` / `ctx.getPColumnByRef`
|
|
54
|
+
* - `getOptions` → `ctx.getOptions`
|
|
55
|
+
*
|
|
56
|
+
* Eager methods `selectColumns` / `getData` / `getDataWithErrors` should be
|
|
57
|
+
* replaced by `ctx.getSpecs` + on-demand `ctx.getStatusByRef` /
|
|
58
|
+
* `ctx.getPColumnByRef` so that the data resource is not subscribed up-front.
|
|
59
|
+
*/
|
|
41
60
|
var ResultPool = class {
|
|
42
61
|
ctx = require_internal.getCfgRenderCtx();
|
|
43
|
-
/**
|
|
44
|
-
* @deprecated use getOptions()
|
|
45
|
-
*/
|
|
46
|
-
calculateOptions(predicate) {
|
|
47
|
-
return this.ctx.calculateOptions(predicate);
|
|
48
|
-
}
|
|
49
62
|
getOptions(predicateOrSelector, opts) {
|
|
50
63
|
const predicate = typeof predicateOrSelector === "function" ? predicateOrSelector : (0, _milaboratories_pl_model_common.legacyColumnSelectorsToPredicate)(predicateOrSelector);
|
|
51
64
|
const filtered = this.getSpecs().entries.filter((s) => predicate(s.obj));
|
|
@@ -189,7 +202,6 @@ var ResultPool = class {
|
|
|
189
202
|
* @returns data associated with the ref
|
|
190
203
|
*/
|
|
191
204
|
getDataByRef(ref) {
|
|
192
|
-
if (typeof this.ctx.getDataFromResultPoolByRef === "undefined") return this.getData().entries.find((f) => f.ref.blockId === ref.blockId && f.ref.name === ref.name)?.obj;
|
|
193
205
|
const data = this.ctx.getDataFromResultPoolByRef(ref.blockId, ref.name);
|
|
194
206
|
if (!data) return void 0;
|
|
195
207
|
return (0, _milaboratories_pl_model_common.mapPObjectData)(data, (handle) => new require_accessor.TreeNodeAccessor(handle, [ref.blockId, ref.name]));
|
|
@@ -270,6 +282,9 @@ var ResultPool = class {
|
|
|
270
282
|
*
|
|
271
283
|
* @param selectors - A predicate function, a single selector, or an array of selectors.
|
|
272
284
|
* @returns An array of PColumn objects matching the selectors. Data is loaded on first access.
|
|
285
|
+
* @deprecated use `RenderCtxBase.rawResultPool` + `ResultPoolColumnsProvider` +
|
|
286
|
+
* `discoverColumns` instead. This eager path materializes column data
|
|
287
|
+
* unnecessarily for callers that only filter by spec.
|
|
273
288
|
*/
|
|
274
289
|
selectColumns(selectors) {
|
|
275
290
|
const predicate = typeof selectors === "function" ? selectors : (0, _milaboratories_pl_model_common.legacyColumnSelectorsToPredicate)(selectors);
|
|
@@ -347,20 +362,8 @@ var RenderCtxBase = class {
|
|
|
347
362
|
get outputs() {
|
|
348
363
|
return this.getNamedAccessor(require_internal$1.MainAccessorName);
|
|
349
364
|
}
|
|
365
|
+
/** @deprecated use `rawResultPool` + `ResultPoolColumnsProvider` instead. */
|
|
350
366
|
resultPool = new ResultPool();
|
|
351
|
-
/**
|
|
352
|
-
* Find labels data for a given axis id. It will search for a label column and return its data as a map.
|
|
353
|
-
* @returns a map of axis value => label
|
|
354
|
-
* @deprecated Use resultPool.findLabels instead
|
|
355
|
-
*/
|
|
356
|
-
findLabels(axis) {
|
|
357
|
-
return this.resultPool.findLabels(axis);
|
|
358
|
-
}
|
|
359
|
-
verifyInlineAndExplicitColumnsSupport(columns) {
|
|
360
|
-
const hasInlineColumns = columns.some((c) => !(c.data instanceof require_accessor.TreeNodeAccessor) || (0, _milaboratories_pl_model_common.isDataInfo)(c.data));
|
|
361
|
-
const inlineColumnsSupport = this.ctx.featureFlags?.inlineColumnsSupport === true;
|
|
362
|
-
if (hasInlineColumns && !inlineColumnsSupport) throw Error(`Inline or explicit columns not supported`);
|
|
363
|
-
}
|
|
364
367
|
patchPTableDef(def) {
|
|
365
368
|
if (!this.ctx.featureFlags?.pTablePartitionFiltersSupport) def = {
|
|
366
369
|
...def,
|
|
@@ -375,7 +378,7 @@ var RenderCtxBase = class {
|
|
|
375
378
|
return def;
|
|
376
379
|
}
|
|
377
380
|
createPFrame(def) {
|
|
378
|
-
return this.ctx.createPFrame(def.map((
|
|
381
|
+
return this.ctx.createPFrame(def.map((v) => (0, es_toolkit.isString)(v) ? v : finalizePColumnData(v)));
|
|
379
382
|
}
|
|
380
383
|
createPTable(def) {
|
|
381
384
|
let rawDef;
|
|
@@ -392,17 +395,11 @@ var RenderCtxBase = class {
|
|
|
392
395
|
sorting: def.sorting ?? []
|
|
393
396
|
});
|
|
394
397
|
else rawDef = this.patchPTableDef(def);
|
|
395
|
-
|
|
396
|
-
this.
|
|
397
|
-
if (!require_pcolumn_data.allPColumnsReady(columns)) return void 0;
|
|
398
|
-
return this.ctx.createPTable((0, _milaboratories_pl_model_common.mapPTableDef)(rawDef, (po) => transformPColumnData(po)));
|
|
398
|
+
if (!require_pcolumn_data.allPColumnsReady((0, _milaboratories_pl_model_common.extractAllColumns)(rawDef.src))) return void 0;
|
|
399
|
+
return this.ctx.createPTable((0, _milaboratories_pl_model_common.mapPTableDef)(rawDef, finalizePColumnData));
|
|
399
400
|
}
|
|
400
401
|
createPTableV2(def) {
|
|
401
|
-
return this.ctx.createPTableV2((0, _milaboratories_pl_model_common.mapPTableDefV2)(def, (
|
|
402
|
-
}
|
|
403
|
-
/** @deprecated scheduled for removal from SDK */
|
|
404
|
-
getBlockLabel(blockId) {
|
|
405
|
-
return this.ctx.getBlockLabel(blockId);
|
|
402
|
+
return this.ctx.createPTableV2((0, _milaboratories_pl_model_common.mapPTableDefV2)(def, { column: (v) => (0, es_toolkit.isString)(v) ? v : finalizePColumnData(v) }));
|
|
406
403
|
}
|
|
407
404
|
getCurrentUnstableMarker() {
|
|
408
405
|
return this.ctx.getCurrentUnstableMarker();
|
|
@@ -493,5 +490,6 @@ exports.PluginRenderCtx = PluginRenderCtx;
|
|
|
493
490
|
exports.RenderCtxBase = RenderCtxBase;
|
|
494
491
|
exports.RenderCtxLegacy = RenderCtxLegacy;
|
|
495
492
|
exports.ResultPool = ResultPool;
|
|
493
|
+
exports.finalizePColumnData = finalizePColumnData;
|
|
496
494
|
|
|
497
495
|
//# sourceMappingURL=api.cjs.map
|