@platforma-sdk/model 1.80.13 → 1.81.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/columns/column.cjs +9 -6
- package/dist/columns/column.cjs.map +1 -1
- package/dist/columns/column.d.ts +5 -5
- package/dist/columns/column.d.ts.map +1 -1
- package/dist/columns/column.js +10 -7
- package/dist/columns/column.js.map +1 -1
- package/dist/columns/column_providers/index.cjs.map +1 -1
- package/dist/columns/column_providers/index.d.ts.map +1 -1
- package/dist/columns/column_providers/index.js.map +1 -1
- package/dist/columns/column_providers/providers.cjs +5 -5
- package/dist/columns/column_providers/providers.cjs.map +1 -1
- package/dist/columns/column_providers/providers.d.ts +8 -8
- package/dist/columns/column_providers/providers.d.ts.map +1 -1
- package/dist/columns/column_providers/providers.js +5 -5
- package/dist/columns/column_providers/providers.js.map +1 -1
- package/dist/columns/column_providers/types.d.ts +3 -3
- package/dist/columns/column_providers/types.d.ts.map +1 -1
- package/dist/columns/column_recipes/column_discovered_recipe.cjs +1 -1
- package/dist/columns/column_recipes/column_discovered_recipe.cjs.map +1 -1
- package/dist/columns/column_recipes/column_discovered_recipe.d.ts +1 -1
- package/dist/columns/column_recipes/column_discovered_recipe.js +1 -1
- package/dist/columns/column_recipes/column_discovered_recipe.js.map +1 -1
- package/dist/columns/column_recipes/column_overrided_recipe.cjs +47 -2
- package/dist/columns/column_recipes/column_overrided_recipe.cjs.map +1 -1
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts +30 -3
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts.map +1 -1
- package/dist/columns/column_recipes/column_overrided_recipe.js +47 -3
- package/dist/columns/column_recipes/column_overrided_recipe.js.map +1 -1
- package/dist/columns/column_recipes/index.cjs +4 -14
- package/dist/columns/column_recipes/index.cjs.map +1 -1
- package/dist/columns/column_recipes/index.d.ts +3 -10
- package/dist/columns/column_recipes/index.d.ts.map +1 -1
- package/dist/columns/column_recipes/index.js +5 -14
- package/dist/columns/column_recipes/index.js.map +1 -1
- package/dist/columns/{column_lazy.cjs → data_column.cjs} +57 -54
- package/dist/columns/data_column.cjs.map +1 -0
- package/dist/columns/data_column.d.ts +152 -0
- package/dist/columns/data_column.d.ts.map +1 -0
- package/dist/columns/{column_lazy.js → data_column.js} +55 -52
- package/dist/columns/data_column.js.map +1 -0
- package/dist/columns/derive_axis_values_labels.cjs +4 -4
- package/dist/columns/derive_axis_values_labels.cjs.map +1 -1
- package/dist/columns/derive_axis_values_labels.d.ts +2 -2
- package/dist/columns/derive_axis_values_labels.js +4 -4
- package/dist/columns/derive_axis_values_labels.js.map +1 -1
- package/dist/columns/index.cjs +9 -9
- package/dist/columns/index.d.ts +5 -5
- package/dist/columns/index.js +5 -5
- package/dist/columns/{expand_by_partition.cjs → split_by_axes.cjs} +13 -8
- package/dist/columns/split_by_axes.cjs.map +1 -0
- package/dist/columns/{expand_by_partition.d.ts → split_by_axes.d.ts} +18 -8
- package/dist/columns/split_by_axes.d.ts.map +1 -0
- package/dist/columns/{expand_by_partition.js → split_by_axes.js} +14 -9
- package/dist/columns/split_by_axes.js.map +1 -0
- package/dist/columns/utils.cjs +50 -43
- package/dist/columns/utils.cjs.map +1 -1
- package/dist/columns/utils.d.ts +44 -19
- package/dist/columns/utils.d.ts.map +1 -1
- package/dist/columns/utils.js +50 -44
- package/dist/columns/utils.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +3 -3
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +3 -3
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +2 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +2 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +2 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +2 -2
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.js +2 -2
- package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
- package/dist/index.cjs +9 -9
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -5
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/package.json +9 -9
- package/src/columns/__test_helpers__/collection_driver.ts +6 -6
- package/src/columns/__test_helpers__/stub_registry.ts +4 -6
- package/src/columns/column.ts +20 -9
- package/src/columns/column_providers/index.ts +9 -3
- package/src/columns/column_providers/providers.ts +16 -15
- package/src/columns/column_providers/types.ts +3 -3
- package/src/columns/column_recipes/column_discovered_recipe.ts +1 -1
- package/src/columns/column_recipes/column_overrided_recipe.ts +58 -4
- package/src/columns/column_recipes/column_recipes.test.ts +2 -2
- package/src/columns/column_recipes/index.ts +5 -20
- package/src/columns/{column_lazy.test.ts → data_column.test.ts} +19 -19
- package/src/columns/{column_lazy.ts → data_column.ts} +105 -67
- package/src/columns/derive_axis_values_labels.ts +4 -4
- package/src/columns/index.ts +2 -2
- package/src/columns/predicates.test.ts +124 -0
- package/src/columns/{expand_by_partition.test.ts → split_by_axes.test.ts} +29 -21
- package/src/columns/{expand_by_partition.ts → split_by_axes.ts} +22 -9
- package/src/columns/utils.ts +53 -48
- package/src/components/PlDataTable/columnResolver.test.ts +3 -3
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +3 -3
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +2 -2
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +2 -2
- package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +2 -2
- package/src/components/PlDataTable/createPlDataTable/utils.test.ts +3 -3
- package/src/components/PlDatasetSelector/enrichment_discovery.ts +2 -2
- package/dist/columns/column_lazy.cjs.map +0 -1
- package/dist/columns/column_lazy.d.ts +0 -137
- package/dist/columns/column_lazy.d.ts.map +0 -1
- package/dist/columns/column_lazy.js.map +0 -1
- package/dist/columns/expand_by_partition.cjs.map +0 -1
- package/dist/columns/expand_by_partition.d.ts.map +0 -1
- package/dist/columns/expand_by_partition.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -46,19 +46,19 @@ import { convertFilterSpecsToExpressionSpecs } from "./annotations/converter.js"
|
|
|
46
46
|
import { AnnotationScriptUi, AnnotationStepUi, AnyForm, FilterUi, FilterUiOfType, FilterUiType, FormField, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, compileAnnotationScript, compileFilter, compileFilters, unreachable } from "./components/PlAnnotations/filters_ui.js";
|
|
47
47
|
import { DatasetOption, DatasetSelection, createDatasetSelection, isDatasetSelection } from "./components/PlDatasetSelector/dataset_selection.js";
|
|
48
48
|
import { ColumnFieldStatus, ColumnRecipeId, ColumnResolutionStatus, SpecQuery } from "./columns/column_recipes/types.js";
|
|
49
|
-
import { ColumnAbsentError,
|
|
49
|
+
import { ColumnAbsentError, ColumnData, DataColumn, DataColumnId, DataColumnImpl, DataColumnRecipe, DataColumnSource, isDataColumn } from "./columns/data_column.js";
|
|
50
50
|
import { ColumnDiscoveredRecipe } from "./columns/column_recipes/column_discovered_recipe.js";
|
|
51
51
|
import { ColumnFilteredRecipe } from "./columns/column_recipes/column_filtered_recipe.js";
|
|
52
52
|
import { Column, ColumnSource, isColumn } from "./columns/column.js";
|
|
53
53
|
import { ColumnOverriddenRecipe } from "./columns/column_recipes/column_overrided_recipe.js";
|
|
54
|
-
import { ColumnRecipe
|
|
54
|
+
import { ColumnRecipe } from "./columns/column_recipes/index.js";
|
|
55
55
|
import { AccessorColumnsProvider, AccessorColumnsProviderImpl, ArrayColumnsProvider, ColumnsProvider, ResultPoolColumnsProvider, ResultPoolColumnsProviderImpl } from "./columns/column_providers/providers.js";
|
|
56
56
|
import { ColumnsSource } from "./columns/column_providers/types.js";
|
|
57
57
|
import { _ctxProvidersCache, getCtxProviders, isColumnProvider, toColumnProvider } from "./columns/column_providers/index.js";
|
|
58
|
-
import {
|
|
58
|
+
import { SplitAxis, SplitByAxesOpts, splitByAxes } from "./columns/split_by_axes.js";
|
|
59
59
|
import { ColumnsCollection, ColumnsCollectionDeps, ColumnsCollectionImpl, ColumnsSourceShorthand, isColumnsCollection } from "./columns/columns_collection.js";
|
|
60
60
|
import { deriveAxisValuesLabels } from "./columns/derive_axis_values_labels.js";
|
|
61
|
-
import { ColumnOption, collectLinkerColumns, collectLinkerIds, deriveColumnOptions,
|
|
61
|
+
import { ColumnOption, collectLinkerColumns, collectLinkerIds, deriveColumnOptions, hasColumnData, hasReachableData, hasSingleDataColumn, hitQualifications, isLeafColumn, queriesQualifications } from "./columns/utils.js";
|
|
62
62
|
import { FilterMatchOptions, FindFilterColumnsOptions, buildRefMap, filterMatchesToOptions, findFilterColumns } from "./components/PlDatasetSelector/filter_discovery.js";
|
|
63
63
|
import { BuildDatasetOptions, buildDatasetOptions } from "./components/PlDatasetSelector/build_dataset_options.js";
|
|
64
64
|
import { PTableParamsV2, PlDataTableAxisMeta, PlDataTableColumnMeta, PlDataTableColumnsMeta, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnIdJson } from "./components/PlDataTable/typesV8.js";
|
|
@@ -82,4 +82,4 @@ import { getService } from "./services/get_services.js";
|
|
|
82
82
|
import { getEnvironmentValue } from "./env_value.js";
|
|
83
83
|
export * from "@milaboratories/pl-model-common";
|
|
84
84
|
export * from "@milaboratories/pl-error-like";
|
|
85
|
-
export { AccessorColumnsProvider, AccessorColumnsProviderImpl, type AccessorHandle, ActAnd, ActExtractArchiveAndGetURL, ActFlatten, ActGetBlobContent, ActGetBlobContentAsJson, ActGetBlobContentAsString, ActGetDownloadedBlobContent, ActGetField, ActGetFromCtx, ActGetImmediate, ActGetLastLogs, ActGetLogHandle, ActGetOnDemandBlobContent, ActGetProgressLog, ActGetProgressLogWithInfo, ActGetResourceField, ActGetResourceValueAsJson, ActImportProgress, ActIsEmpty, ActIsolate, ActMakeArray, ActMakeObject, ActMapArrayValues, ActMapRecordValues, ActMapResourceFields, ActNot, ActOr, ActionResult, AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationScriptUi, AnnotationSpec, AnnotationSpecUi, AnnotationStep, AnnotationStepUi, AnyForm, Args, ArrayColumnsProvider, type AxesVault, AxisLabelProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockApiV1, BlockApiV2, BlockConfig, BlockConfigV3, BlockConfigV4, BlockDefaultModelServices, BlockDefaultUiServices, BlockModel, BlockModelInfo, BlockModelV3, BlockRenderCtx, BlockServiceFlags, BlockStatePatch, type BlockStorage, BlockStorageFacade, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, type BlockStorageSchemaVersion, BuildDatasetOptions, CancelSubscription, Cfg, CfgAnd, CfgBlobContent, CfgBlobContentAsJson, CfgBlobContentAsString, CfgDownloadedBlobContent, CfgExtractArchiveAndGetURL, CfgFlatten, CfgGetFromCtx, CfgGetJsonField, CfgGetResourceField, CfgImmediate, CfgImportProgress, CfgIsEmpty, CfgIsolate, CfgLastLogs, CfgLogHandle, CfgMakeArray, CfgMakeObject, CfgMapArrayValues, CfgMapRecordValues, CfgMapResourceFields, CfgNot, CfgOnDemandBlobContent, CfgOr, CfgProgressLog, CfgProgressLogWithInfo, CfgRenderingMode, CfgResourceValueAsJson, type Checked, Column, ColumnAbsentError, ColumnDiscoveredRecipe, type ColumnFieldStatus, ColumnFilteredRecipe,
|
|
85
|
+
export { AccessorColumnsProvider, AccessorColumnsProviderImpl, type AccessorHandle, ActAnd, ActExtractArchiveAndGetURL, ActFlatten, ActGetBlobContent, ActGetBlobContentAsJson, ActGetBlobContentAsString, ActGetDownloadedBlobContent, ActGetField, ActGetFromCtx, ActGetImmediate, ActGetLastLogs, ActGetLogHandle, ActGetOnDemandBlobContent, ActGetProgressLog, ActGetProgressLogWithInfo, ActGetResourceField, ActGetResourceValueAsJson, ActImportProgress, ActIsEmpty, ActIsolate, ActMakeArray, ActMakeObject, ActMapArrayValues, ActMapRecordValues, ActMapResourceFields, ActNot, ActOr, ActionResult, AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationScriptUi, AnnotationSpec, AnnotationSpecUi, AnnotationStep, AnnotationStepUi, AnyForm, Args, ArrayColumnsProvider, type AxesVault, AxisLabelProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockApiV1, BlockApiV2, BlockConfig, BlockConfigV3, BlockConfigV4, BlockDefaultModelServices, BlockDefaultUiServices, BlockModel, BlockModelInfo, BlockModelV3, BlockRenderCtx, BlockServiceFlags, BlockStatePatch, type BlockStorage, BlockStorageFacade, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, type BlockStorageSchemaVersion, BuildDatasetOptions, CancelSubscription, Cfg, CfgAnd, CfgBlobContent, CfgBlobContentAsJson, CfgBlobContentAsString, CfgDownloadedBlobContent, CfgExtractArchiveAndGetURL, CfgFlatten, CfgGetFromCtx, CfgGetJsonField, CfgGetResourceField, CfgImmediate, CfgImportProgress, CfgIsEmpty, CfgIsolate, CfgLastLogs, CfgLogHandle, CfgMakeArray, CfgMakeObject, CfgMapArrayValues, CfgMapRecordValues, CfgMapResourceFields, CfgNot, CfgOnDemandBlobContent, CfgOr, CfgProgressLog, CfgProgressLogWithInfo, CfgRenderingMode, CfgResourceValueAsJson, type Checked, Column, ColumnAbsentError, ColumnData, ColumnDiscoveredRecipe, type ColumnFieldStatus, ColumnFilteredRecipe, ColumnOption, type ColumnOrderRule, ColumnOverriddenRecipe, ColumnProvider, ColumnRecipe, type ColumnRecipeId, type ColumnResolutionStatus, ColumnSource, type ColumnVisibilityRule, ColumnsCollection, ColumnsCollectionDeps, ColumnsCollectionImpl, type ColumnsDisplayOptions, ColumnsProvider, type ColumnsSelectorConfig, ColumnsSource, ColumnsSourceShorthand, CommonFieldTraverseOps, CommonTraversalOps, ConfAction, ConfigRenderLambda, ConfigRenderLambdaFlags, ConfigResult, CurrentSdkInfo, DataColumn, DataColumnId, DataColumnImpl, DataColumnRecipe, DataColumnSource, DataModel, DataModelBuilder, DatasetOption, DatasetSelection, DeriveHref, DeriveLabelsFormatters, DeriveLabelsOptions, Entry, ExpressionSpec, ExtractAction, ExtractFunctionHandleReturn, type ExtractFutureRefType, FieldTraversalStep, FieldType, FilterMatchOptions, type FilterSpec, type FilterSpecLeaf, type FilterSpecNode, type FilterSpecOfType, type FilterSpecType, FilterSpecUi, FilterUi, FilterUiOfType, FilterUiType, FindFilterColumnsOptions, FormField, FutureRef, GetFieldStep, InferArgsType, InferBlockState, InferBlockStatePatch, InferDataType, InferFactoryData, InferFactoryModelServices, InferFactoryOutputs, InferFactoryParams, InferFactoryUiServices, InferHrefType, InferOutputType, InferOutputsFromConfigs, InferOutputsFromLambdas, InferOutputsType, InferPluginData, InferPluginHandle, InferPluginNames, InferPluginUiEntries, InferRenderFunctionReturn, InferUiState, InferVarTypeSafe, IsNA, It, internal_d_exports as JsRenderInternal, type DeriveLabelsOptions as LabelDerivationOps, LinkerStep, Log10, MainAccessorName, MainOutputs, type MigrateBlockStorageConfig, type MigrationFailure, type MigrationResult, type MigrationSuccess, type ModelServices, type MutateStoragePayload, NotFilter, NumericalComparisonFilter, OptionalPlResourceEntry, OrFilter, OutputError, PColumnCollection, type PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, PColumnKeyList, PColumnPredicate, PColumnResourceMapData, PColumnResourceMapEntry, PColumnUniversal, PColumnWithLabel, PFrameImpl, POCExtractAction, PTableKey, type PTableParamsV2, type ParamsInput, Patch, PatternFilter, PatternPredicate, PatternPredicateContainSubsequence, PatternPredicateEquals, type PlDataTableAxisMeta, type PlDataTableColumnMeta, type PlDataTableColumnsMeta, type PlDataTableFilterMeta, type PlDataTableFilterSpecLeaf, type PlDataTableFilters, type PlDataTableFiltersWithMeta, type PlDataTableGridStateCore, type PlDataTableModel, type PlDataTableSheet, type PlDataTableSheetState, type PlDataTableStateV2, type PlDataTableStateV2CacheEntry, type PlDataTableStateV2Normalized, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentModel, PlMultiSequenceAlignmentSettings, PlMultiSequenceAlignmentWidget, PlResourceEntry, PlSelectionModel, type PlTableColumnIdJson, Platforma, PlatformaApiVersion, PlatformaExtended, PlatformaFactory, PlatformaSDKVersion, PlatformaV1, PlatformaV2, PlatformaV3, type PluginConfig, type PluginData, PluginDataModel, PluginDataModelBuilder, type PluginDataModelVersions, type PluginFactory, PluginFactoryLike, PluginHandle, PluginInstance, PluginModel, type PluginName, type PluginOutputs, type PluginParams, type PluginPublicOutputs, type PluginRecord, type PluginRegistry, PluginRenderCtx, PrimitiveOrConfig, PrimitiveToCfg, type PublicOutputFieldDef, QueryColumnId, QueryColumnIdAxis, QueryColumnIdColumn, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RenderCtx, RenderCtxBase, RenderCtxLegacy, RenderFunction, RenderFunctionLegacy, ResolveCfgType, ResolveModelServices, ResolveUiServices, ResourceTraversalOps, ResourceType, ResultPool, ResultPoolColumnsProvider, ResultPoolColumnsProviderImpl, SdkInfo, ServiceProxy, SimplifiedPColumnSpec, SimplifiedUniversalPColumnEntry, SortedCumulativeSum, type Entry as SpecExtractorResult, type SpecQuery, SplitAxis, SplitByAxesOpts, StagingAccessorName, StagingOutputs, StdCtx, StdCtxArgsOnly, TooltipEntry, type Trace, type TraceEntry, TransformedColumn, TreeNodeAccessor, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, TypedConfig, TypedConfigOrConfigLambda, TypedConfigOrString, type UiServices, UiState, Unionize, UniversalColumnOption, UnwrapFutureRef, ValueRank, type VersionedData, _ctxProvidersCache, allPColumnsReady, and, blockServiceNames, buildDatasetOptions, buildRefMap, buildServices, collectLinkerColumns, collectLinkerIds, compileAnnotationScript, compileFilter, compileFilters, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, createBlockStorage, createDatasetSelection, createDefaultPTableParams, createPFrameForGraphs, createPlDataTable, type createPlDataTableOptionsV3, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, createPlSelectionModel, createRowSelectionColumn, createServiceProxy, deriveAxisValuesLabels, deriveColumnOptions, deriveDataFromStorage, deriveDistinctLabels, deriveDistinctTooltips, deriveLabels, discoverTableColumns as discoverTableColumnSnaphots, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterMatchesToOptions, filterSpecToSpecQueryExpr, finalizePColumnData, findFilterColumns, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getCtxProviders, getDownloadedBlobContent, getEffectiveVisibility, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getNumberOfRows, getOnDemandBlobContent, getOrderPriority, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getService, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, hasColumnData, hasReachableData, hasSingleDataColumn, hitQualifications, ifDef, isBlockStorage, isColumn, isColumnHidden, isColumnOptional, isColumnProvider, isColumnsCollection, isConfigLambda, isDataColumn, isDatasetSelection, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isLeafColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, migrateBlockStorage, normalizeBlockStorage, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, queriesQualifications, readOutput, registerFacadeCallbacks, splitByAxes, toColumnProvider, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs };
|
package/dist/index.js
CHANGED
|
@@ -30,15 +30,15 @@ import { enrichCompatible, getAvailableWithLinkersAxes } from "./pframe_utils/ax
|
|
|
30
30
|
import { Column, isColumn } from "./columns/column.js";
|
|
31
31
|
import { ColumnDiscoveredRecipe } from "./columns/column_recipes/column_discovered_recipe.js";
|
|
32
32
|
import { ColumnFilteredRecipe } from "./columns/column_recipes/column_filtered_recipe.js";
|
|
33
|
-
import { ColumnRecipe
|
|
33
|
+
import { ColumnRecipe } from "./columns/column_recipes/index.js";
|
|
34
34
|
import { ColumnOverriddenRecipe } from "./columns/column_recipes/column_overrided_recipe.js";
|
|
35
|
-
import { ColumnAbsentError,
|
|
35
|
+
import { ColumnAbsentError, DataColumn, DataColumnImpl, isDataColumn } from "./columns/data_column.js";
|
|
36
36
|
import { AccessorColumnsProvider, AccessorColumnsProviderImpl, ArrayColumnsProvider, ColumnsProvider, ResultPoolColumnsProvider, ResultPoolColumnsProviderImpl } from "./columns/column_providers/providers.js";
|
|
37
37
|
import { _ctxProvidersCache, getCtxProviders, isColumnProvider, toColumnProvider } from "./columns/column_providers/index.js";
|
|
38
38
|
import { ColumnsCollection, ColumnsCollectionImpl, isColumnsCollection } from "./columns/columns_collection.js";
|
|
39
|
-
import { collectLinkerColumns, collectLinkerIds, deriveColumnOptions,
|
|
40
|
-
import { expandByPartition } from "./columns/expand_by_partition.js";
|
|
39
|
+
import { collectLinkerColumns, collectLinkerIds, deriveColumnOptions, hasColumnData, hasReachableData, hasSingleDataColumn, hitQualifications, isLeafColumn, queriesQualifications } from "./columns/utils.js";
|
|
41
40
|
import { deriveAxisValuesLabels } from "./columns/derive_axis_values_labels.js";
|
|
41
|
+
import { splitByAxes } from "./columns/split_by_axes.js";
|
|
42
42
|
import "./columns/index.js";
|
|
43
43
|
import { getAllRelatedColumns, getRelatedColumns } from "./pframe_utils/columns.js";
|
|
44
44
|
import { createPFrameForGraphs, isHiddenFromGraphColumn, isHiddenFromUIColumn } from "./components/PFrameForGraphs.js";
|
|
@@ -71,4 +71,4 @@ import { getAxisUniqueValues, getColumnOrAxisValueLabelsId, getColumnSpecById, g
|
|
|
71
71
|
import { getEnvironmentValue } from "./env_value.js";
|
|
72
72
|
export * from "@milaboratories/pl-model-common";
|
|
73
73
|
export * from "@milaboratories/pl-error-like";
|
|
74
|
-
export { AccessorColumnsProvider, AccessorColumnsProviderImpl, Args, ArrayColumnsProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockModel, BlockModelV3, BlockRenderCtx, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, Column, ColumnAbsentError, ColumnDiscoveredRecipe, ColumnFilteredRecipe,
|
|
74
|
+
export { AccessorColumnsProvider, AccessorColumnsProviderImpl, Args, ArrayColumnsProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockModel, BlockModelV3, BlockRenderCtx, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, Column, ColumnAbsentError, ColumnDiscoveredRecipe, ColumnFilteredRecipe, ColumnOverriddenRecipe, ColumnRecipe, ColumnsCollection, ColumnsCollectionImpl, ColumnsProvider, CurrentSdkInfo, DataColumn, DataColumnImpl, DataModel, DataModelBuilder, FutureRef, It, internal_exports as JsRenderInternal, MainAccessorName, MainOutputs, OutputError, PColumnCollection, PFrameImpl, PlatformaSDKVersion, PluginDataModel, PluginDataModelBuilder, PluginInstance, PluginModel, PluginRenderCtx, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RenderCtxBase, RenderCtxLegacy, ResultPool, ResultPoolColumnsProvider, ResultPoolColumnsProviderImpl, StagingAccessorName, StagingOutputs, TreeNodeAccessor, UiState, _ctxProvidersCache, allPColumnsReady, and, blockServiceNames, buildDatasetOptions, buildRefMap, buildServices, collectLinkerColumns, collectLinkerIds, compileAnnotationScript, compileFilter, compileFilters, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, createBlockStorage, createDatasetSelection, createDefaultPTableParams, createPFrameForGraphs, createPlDataTable, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, createPlSelectionModel, createRowSelectionColumn, createServiceProxy, deriveAxisValuesLabels, deriveColumnOptions, deriveDataFromStorage, deriveDistinctLabels, deriveDistinctTooltips, deriveLabels, discoverTableColumns as discoverTableColumnSnaphots, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterMatchesToOptions, filterSpecToSpecQueryExpr, finalizePColumnData, findFilterColumns, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getCtxProviders, getDownloadedBlobContent, getEffectiveVisibility, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getNumberOfRows, getOnDemandBlobContent, getOrderPriority, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getService, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, hasColumnData, hasReachableData, hasSingleDataColumn, hitQualifications, ifDef, isBlockStorage, isColumn, isColumnHidden, isColumnOptional, isColumnProvider, isColumnsCollection, isConfigLambda, isDataColumn, isDatasetSelection, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isLeafColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, migrateBlockStorage, normalizeBlockStorage, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, queriesQualifications, readOutput, registerFacadeCallbacks, splitByAxes, toColumnProvider, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs };
|
package/dist/package.cjs
CHANGED
package/dist/package.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-sdk/model",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.81.0",
|
|
4
4
|
"description": "Platforma.bio SDK / Block Model",
|
|
5
5
|
"files": [
|
|
6
6
|
"./dist/**/*",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"utility-types": "^3.11.0",
|
|
33
33
|
"zod": "~3.25.76",
|
|
34
34
|
"@milaboratories/helpers": "1.14.5",
|
|
35
|
+
"@milaboratories/pl-model-middle-layer": "1.31.0",
|
|
36
|
+
"@milaboratories/pl-model-common": "1.47.3",
|
|
35
37
|
"@milaboratories/pl-error-like": "1.12.10",
|
|
36
|
-
"@milaboratories/
|
|
37
|
-
"@milaboratories/ptabler-expression-js": "1.2.37",
|
|
38
|
-
"@milaboratories/pl-model-common": "1.47.3"
|
|
38
|
+
"@milaboratories/ptabler-expression-js": "1.2.37"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@vitest/coverage-istanbul": "^4.1.3",
|
|
@@ -43,11 +43,11 @@
|
|
|
43
43
|
"typescript": "~5.9.3",
|
|
44
44
|
"vitest": "^4.1.3",
|
|
45
45
|
"@milaboratories/build-configs": "2.0.0",
|
|
46
|
-
"@milaboratories/
|
|
47
|
-
"@milaboratories/pf-driver": "1.
|
|
48
|
-
"@milaboratories/
|
|
49
|
-
"@milaboratories/ts-configs": "1.
|
|
50
|
-
"@milaboratories/
|
|
46
|
+
"@milaboratories/pf-driver": "1.9.0",
|
|
47
|
+
"@milaboratories/pf-spec-driver": "1.5.0",
|
|
48
|
+
"@milaboratories/ts-builder": "1.6.2",
|
|
49
|
+
"@milaboratories/ts-configs": "1.4.0",
|
|
50
|
+
"@milaboratories/columns-collection-driver": "0.2.3"
|
|
51
51
|
},
|
|
52
52
|
"scripts": {
|
|
53
53
|
"build": "ts-builder build --target node",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* Calling {@link TestCollectionDriverHandle.installAmbientCtx} additionally
|
|
11
11
|
* installs a minimal `globalThis.cfgRenderCtx` AND plants a stub
|
|
12
12
|
* `ColumnEntriesProvider` into the ctx-providers cache so registered specs
|
|
13
|
-
* are reachable via `
|
|
13
|
+
* are reachable via `DataColumnRecipe.fromId` (and therefore via
|
|
14
14
|
* `ColumnsCollection.getColumns()`).
|
|
15
15
|
*/
|
|
16
16
|
import type {
|
|
@@ -29,7 +29,7 @@ import type { GlobalCfgRenderCtx } from "../../render/internal";
|
|
|
29
29
|
import { TreeNodeAccessor } from "../../render/accessor";
|
|
30
30
|
import { _ctxProvidersCache } from "../column_providers";
|
|
31
31
|
import type { ColumnsProvider } from "../column_providers";
|
|
32
|
-
import {
|
|
32
|
+
import { DataColumn, type DataColumnRecipe } from "../data_column";
|
|
33
33
|
|
|
34
34
|
export interface TestCollectionDriverHandle {
|
|
35
35
|
readonly driver: ColumnsCollectionDriverModel;
|
|
@@ -38,7 +38,7 @@ export interface TestCollectionDriverHandle {
|
|
|
38
38
|
/**
|
|
39
39
|
* Install a minimal `globalThis.cfgRenderCtx` so `getService("columnsCollection")`
|
|
40
40
|
* resolves to this driver and registered columns are reachable via
|
|
41
|
-
* `
|
|
41
|
+
* `DataColumnRecipe.fromId`. Call inside `beforeEach` if the code under test uses
|
|
42
42
|
* the ambient ctx instead of an explicit `driver` option.
|
|
43
43
|
*/
|
|
44
44
|
installAmbientCtx(): void;
|
|
@@ -148,7 +148,7 @@ export function createTestCollectionDriver(): TestCollectionDriverHandle {
|
|
|
148
148
|
* Construct a {@link ColumnEntriesProvider} + {@link ColumnsProvider} backed
|
|
149
149
|
* by an `(id → spec)` map. Each entry carries a fake {@link TreeNodeAccessor}
|
|
150
150
|
* whose only contract is the surface `readSpec` / `readData` /
|
|
151
|
-
* `readDataStatus` (in `
|
|
151
|
+
* `readDataStatus` (in `data_column.ts`) actually call:
|
|
152
152
|
* - `traverse({field: `${name}.spec`, ignoreError: true})` →
|
|
153
153
|
* stub-accessor whose `getDataAsJson()` returns the spec.
|
|
154
154
|
* - `traverse({field: `${name}.data`})` → `undefined` (data is not
|
|
@@ -163,9 +163,9 @@ function buildStubProvider(
|
|
|
163
163
|
for (const [id, spec] of specMap) {
|
|
164
164
|
entries.set(id, { accessor: stubAccessorFor(id, spec), name: id, id });
|
|
165
165
|
}
|
|
166
|
-
const columns:
|
|
166
|
+
const columns: DataColumnRecipe<PObjectId>[] = [];
|
|
167
167
|
for (const [id, spec] of specMap) {
|
|
168
|
-
columns.push(
|
|
168
|
+
columns.push(DataColumn.fromColumn({ id, spec, data: undefined as never }));
|
|
169
169
|
}
|
|
170
170
|
return {
|
|
171
171
|
getPObjectEntries: () => entries,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* `ColumnRegistry.resolve(id)` returns a `LeafEntry` whose spec accessor
|
|
4
4
|
* reports `hasData() === true` and `getDataAsJson()` returns the supplied
|
|
5
5
|
* spec. Sufficient for code that goes through
|
|
6
|
-
* `getCtxProviders` / `readLeafSpecAccessor` (e.g. `
|
|
6
|
+
* `getCtxProviders` / `readLeafSpecAccessor` (e.g. `DataColumnRecipe.fromId`,
|
|
7
7
|
* `ColumnDiscoveredRecipe.fromKey`).
|
|
8
8
|
*
|
|
9
9
|
* Two leaf shapes:
|
|
@@ -28,7 +28,7 @@ import type { GlobalCfgRenderCtx } from "../../render/internal";
|
|
|
28
28
|
import type { TreeNodeAccessor } from "../../render/accessor";
|
|
29
29
|
import { _ctxProvidersCache } from "../column_providers";
|
|
30
30
|
import type { ColumnsProvider } from "../column_providers";
|
|
31
|
-
import {
|
|
31
|
+
import { DataColumn, type DataColumnRecipe } from "../data_column";
|
|
32
32
|
|
|
33
33
|
/** Fine-grained per-leaf stub config. Defaults match the shorthand form. */
|
|
34
34
|
export type StubLeafConfig = {
|
|
@@ -64,15 +64,13 @@ function buildStubProvider(
|
|
|
64
64
|
const cfg = normalizeLeafInput(raw);
|
|
65
65
|
acc.entries.set(id, { accessor: stubAccessorFor(id, cfg), name: id, id });
|
|
66
66
|
if (cfg.spec !== undefined && cfg.specHasData) {
|
|
67
|
-
acc.columns.push(
|
|
68
|
-
ColumnLazyImpl.fromColumn({ id, spec: cfg.spec, data: undefined as never }),
|
|
69
|
-
);
|
|
67
|
+
acc.columns.push(DataColumn.fromColumn({ id, spec: cfg.spec, data: undefined as never }));
|
|
70
68
|
}
|
|
71
69
|
return acc;
|
|
72
70
|
},
|
|
73
71
|
{
|
|
74
72
|
entries: new Map<PObjectId, LeafEntry<TreeNodeAccessor>>(),
|
|
75
|
-
columns: [] as
|
|
73
|
+
columns: [] as DataColumnRecipe<PObjectId>[],
|
|
76
74
|
},
|
|
77
75
|
);
|
|
78
76
|
return {
|
package/src/columns/column.ts
CHANGED
|
@@ -7,23 +7,29 @@ import {
|
|
|
7
7
|
} from "@milaboratories/pl-model-common";
|
|
8
8
|
import type { GlobalCfgRenderCtx } from "../render/internal";
|
|
9
9
|
import type { TreeNodeAccessor } from "../render";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { DataColumn, DataColumnRecipe, DataColumnImpl, type ColumnData } from "./data_column";
|
|
11
|
+
import {
|
|
12
|
+
ColumnDiscoveredRecipe,
|
|
13
|
+
ColumnFilteredRecipe,
|
|
14
|
+
ColumnOverriddenRecipe,
|
|
15
|
+
ColumnRecipe,
|
|
16
|
+
ColumnRecipeId,
|
|
17
|
+
} from "./column_recipes";
|
|
12
18
|
|
|
13
19
|
export type ColumnSource =
|
|
14
20
|
| PObjectId
|
|
15
21
|
| ColumnUniversalId
|
|
16
22
|
| PlRef
|
|
17
23
|
| LeafEntry<TreeNodeAccessor>
|
|
18
|
-
| PColumn<
|
|
19
|
-
|
|
|
24
|
+
| PColumn<ColumnData>
|
|
25
|
+
| DataColumnRecipe<PObjectId>;
|
|
20
26
|
|
|
21
27
|
/**
|
|
22
28
|
* Unified entry point — routes between the two top-level dispatchers:
|
|
23
29
|
* - string id (`PObjectId` / `ColumnUniversalId`) → {@link ColumnRecipe}
|
|
24
|
-
* - object source (`PlRef` / `LeafEntry` / `PColumn` / `
|
|
30
|
+
* - object source (`PlRef` / `LeafEntry` / `PColumn` / `DataColumnRecipe`) → {@link DataColumnRecipe}
|
|
25
31
|
*
|
|
26
|
-
* `
|
|
32
|
+
* `DataColumnRecipe` is itself a `ColumnRecipe<PObjectId>`, so the return type is
|
|
27
33
|
* the common `ColumnRecipe`.
|
|
28
34
|
*/
|
|
29
35
|
export function Column(
|
|
@@ -31,7 +37,7 @@ export function Column(
|
|
|
31
37
|
opts?: { ctx?: GlobalCfgRenderCtx },
|
|
32
38
|
): undefined | ColumnRecipe {
|
|
33
39
|
if (typeof source === "string") return ColumnRecipe(source, opts);
|
|
34
|
-
return
|
|
40
|
+
return DataColumn(source, opts);
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
export type Column<ID extends ColumnRecipeId = ColumnRecipeId> = ColumnRecipe<ID>;
|
|
@@ -39,8 +45,13 @@ export type Column<ID extends ColumnRecipeId = ColumnRecipeId> = ColumnRecipe<ID
|
|
|
39
45
|
/**
|
|
40
46
|
* Type-guard for the `Column` type — currently aliased to `ColumnRecipe`, so
|
|
41
47
|
* this is equivalent to {@link isColumnRecipe}. Kept as a separate export to
|
|
42
|
-
* mirror the `Column` / `ColumnRecipe` / `
|
|
48
|
+
* mirror the `Column` / `ColumnRecipe` / `DataColumnRecipe` factory triple.
|
|
43
49
|
*/
|
|
44
50
|
export function isColumn(value: unknown): value is Column {
|
|
45
|
-
return
|
|
51
|
+
return (
|
|
52
|
+
value instanceof DataColumnImpl ||
|
|
53
|
+
value instanceof ColumnFilteredRecipe ||
|
|
54
|
+
value instanceof ColumnDiscoveredRecipe ||
|
|
55
|
+
value instanceof ColumnOverriddenRecipe
|
|
56
|
+
);
|
|
46
57
|
}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
PColumn,
|
|
3
|
+
type ColumnEntriesProvider,
|
|
4
|
+
type PObjectId,
|
|
5
|
+
} from "@milaboratories/pl-model-common";
|
|
2
6
|
import type { GlobalCfgRenderCtx, PColumnDataUniversal } from "../../render/internal";
|
|
3
7
|
import { getCfgRenderCtx } from "../../internal";
|
|
4
8
|
import { MainAccessorName, StagingAccessorName } from "../../render/internal";
|
|
5
9
|
import { TreeNodeAccessor } from "../../render/accessor";
|
|
6
|
-
import {
|
|
10
|
+
import { DataColumnRecipe } from "../data_column";
|
|
7
11
|
import type { ColumnsSource } from "./types";
|
|
8
12
|
import { ArrayColumnsProvider, ColumnsProvider } from "./providers";
|
|
9
13
|
|
|
@@ -69,7 +73,9 @@ export function toColumnProvider(source: ColumnsSource): ColumnsProvider {
|
|
|
69
73
|
}
|
|
70
74
|
|
|
71
75
|
function isColumnArray(source: unknown): source is {
|
|
72
|
-
readonly columns: ReadonlyArray<
|
|
76
|
+
readonly columns: ReadonlyArray<
|
|
77
|
+
PColumn<undefined | PColumnDataUniversal> | DataColumnRecipe<PObjectId>
|
|
78
|
+
>;
|
|
73
79
|
readonly isFinal: boolean;
|
|
74
80
|
} {
|
|
75
81
|
if (typeof source !== "object" || source === null) return false;
|
|
@@ -2,10 +2,11 @@ import {
|
|
|
2
2
|
AccessorEntriesProvider,
|
|
3
3
|
ResultPoolEntriesProvider,
|
|
4
4
|
type PColumn,
|
|
5
|
+
type PObjectId,
|
|
5
6
|
type UpstreamBlockCtx,
|
|
6
7
|
} from "@milaboratories/pl-model-common";
|
|
7
8
|
import { AccessorHandle, PColumnDataUniversal, TreeNodeAccessor } from "../../render";
|
|
8
|
-
import {
|
|
9
|
+
import { DataColumn, DataColumnRecipe } from "../data_column";
|
|
9
10
|
import { getCfgRenderCtx } from "../../internal";
|
|
10
11
|
import { isNil } from "es-toolkit";
|
|
11
12
|
import { LRUCache } from "lru-cache";
|
|
@@ -20,7 +21,7 @@ import { LRUCache } from "lru-cache";
|
|
|
20
21
|
*/
|
|
21
22
|
export interface ColumnsProvider {
|
|
22
23
|
/** Returns all currently known PColumn columns as lazy views. */
|
|
23
|
-
getColumns():
|
|
24
|
+
getColumns(): DataColumnRecipe<PObjectId>[];
|
|
24
25
|
/** Whether the provider has finished enumerating all its columns. */
|
|
25
26
|
isFinal(): boolean;
|
|
26
27
|
}
|
|
@@ -92,16 +93,16 @@ export function ResultPoolColumnsProvider(
|
|
|
92
93
|
* id-index source — `ColumnRegistry` does not consume it.
|
|
93
94
|
*/
|
|
94
95
|
export class ArrayColumnsProvider implements ColumnsProvider {
|
|
95
|
-
private readonly columns:
|
|
96
|
+
private readonly columns: DataColumnRecipe<PObjectId>[];
|
|
96
97
|
|
|
97
98
|
constructor(
|
|
98
|
-
columns: ReadonlyArray<PColumn<undefined | PColumnDataUniversal> |
|
|
99
|
+
columns: ReadonlyArray<PColumn<undefined | PColumnDataUniversal> | DataColumnRecipe<PObjectId>>,
|
|
99
100
|
private readonly _isFinal: boolean,
|
|
100
101
|
) {
|
|
101
|
-
this.columns = columns.map((c) =>
|
|
102
|
+
this.columns = columns.map((c) => DataColumn.fromColumn(c));
|
|
102
103
|
}
|
|
103
104
|
|
|
104
|
-
getColumns():
|
|
105
|
+
getColumns(): DataColumnRecipe<PObjectId>[] {
|
|
105
106
|
return this.columns;
|
|
106
107
|
}
|
|
107
108
|
|
|
@@ -113,24 +114,24 @@ export class ArrayColumnsProvider implements ColumnsProvider {
|
|
|
113
114
|
/**
|
|
114
115
|
* Sandbox-specific provider over a {@link TreeNodeAccessor} root. Uses the
|
|
115
116
|
* accessor's own `resolvePath` as the canonical root path for id construction,
|
|
116
|
-
* and adds `getColumns()` returning {@link
|
|
117
|
+
* and adds `getColumns()` returning {@link DataColumnRecipe<PObjectId>}s on top of the generic
|
|
117
118
|
* entries index.
|
|
118
119
|
*/
|
|
119
120
|
export class AccessorColumnsProviderImpl
|
|
120
121
|
extends AccessorEntriesProvider<TreeNodeAccessor>
|
|
121
122
|
implements ColumnsProvider
|
|
122
123
|
{
|
|
123
|
-
private cachedColumns?:
|
|
124
|
+
private cachedColumns?: DataColumnRecipe<PObjectId>[];
|
|
124
125
|
|
|
125
126
|
constructor(root: TreeNodeAccessor) {
|
|
126
127
|
super(root, root.resolvePath);
|
|
127
128
|
}
|
|
128
129
|
|
|
129
|
-
getColumns():
|
|
130
|
+
getColumns(): DataColumnRecipe<PObjectId>[] {
|
|
130
131
|
if (this.cachedColumns !== undefined) return this.cachedColumns;
|
|
131
132
|
return (this.cachedColumns = Array.from(this.entries.values())
|
|
132
|
-
.map((e) =>
|
|
133
|
-
.filter((v): v is
|
|
133
|
+
.map((e) => DataColumn.fromAccessor(e))
|
|
134
|
+
.filter((v): v is DataColumnRecipe<PObjectId> => !isNil(v)));
|
|
134
135
|
}
|
|
135
136
|
}
|
|
136
137
|
|
|
@@ -146,7 +147,7 @@ export class ResultPoolColumnsProviderImpl
|
|
|
146
147
|
extends ResultPoolEntriesProvider<TreeNodeAccessor>
|
|
147
148
|
implements ColumnsProvider
|
|
148
149
|
{
|
|
149
|
-
private cachedColumns?:
|
|
150
|
+
private cachedColumns?: DataColumnRecipe<PObjectId>[];
|
|
150
151
|
|
|
151
152
|
constructor(
|
|
152
153
|
rawPool: ReadonlyArray<
|
|
@@ -170,11 +171,11 @@ export class ResultPoolColumnsProviderImpl
|
|
|
170
171
|
super(blocks);
|
|
171
172
|
}
|
|
172
173
|
|
|
173
|
-
getColumns():
|
|
174
|
+
getColumns(): DataColumnRecipe<PObjectId>[] {
|
|
174
175
|
if (this.cachedColumns !== undefined) return this.cachedColumns;
|
|
175
176
|
return (this.cachedColumns = Array.from(this.getPObjectEntries().values())
|
|
176
|
-
.map((e) =>
|
|
177
|
-
.filter((v): v is
|
|
177
|
+
.map((e) => DataColumn.fromAccessor(e))
|
|
178
|
+
.filter((v): v is DataColumnRecipe<PObjectId> => !isNil(v)));
|
|
178
179
|
}
|
|
179
180
|
}
|
|
180
181
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PColumn } from "@milaboratories/pl-model-common";
|
|
2
2
|
import { TreeNodeAccessor } from "../../render";
|
|
3
3
|
import type { PColumnDataUniversal } from "../../render/internal";
|
|
4
|
-
import type {
|
|
4
|
+
import type { DataColumnRecipe } from "../data_column";
|
|
5
5
|
import type { ColumnRecipe } from "../column_recipes";
|
|
6
6
|
import type { ColumnsProvider } from "./providers";
|
|
7
7
|
|
|
@@ -10,7 +10,7 @@ import type { ColumnsProvider } from "./providers";
|
|
|
10
10
|
* Includes TreeNodeAccessor, ColumnsProvider, and arrays of columns.
|
|
11
11
|
*
|
|
12
12
|
* The array form accepts plain {@link PColumn}s (materialized snapshots),
|
|
13
|
-
* {@link
|
|
13
|
+
* {@link DataColumnRecipe} leaves, or any {@link ColumnRecipe} — builders only
|
|
14
14
|
* need each entry's `id` for serialization.
|
|
15
15
|
*/
|
|
16
16
|
export type ColumnsSource =
|
|
@@ -18,7 +18,7 @@ export type ColumnsSource =
|
|
|
18
18
|
| TreeNodeAccessor
|
|
19
19
|
| {
|
|
20
20
|
readonly columns: ReadonlyArray<
|
|
21
|
-
PColumn<undefined | PColumnDataUniversal> |
|
|
21
|
+
PColumn<undefined | PColumnDataUniversal> | DataColumnRecipe | ColumnRecipe
|
|
22
22
|
>;
|
|
23
23
|
readonly isFinal: boolean;
|
|
24
24
|
};
|
|
@@ -37,7 +37,7 @@ import { throwError } from "@milaboratories/helpers";
|
|
|
37
37
|
export class ColumnDiscoveredRecipe implements ColumnRecipe<ColumnDiscoveredId> {
|
|
38
38
|
/**
|
|
39
39
|
* Validate the key + resolve every referenced column via
|
|
40
|
-
* {@link
|
|
40
|
+
* {@link DataColumnRecipe.fromId} (which itself checks the leaf accessor reports
|
|
41
41
|
* `hasData()`). Returns `undefined` if the key is malformed or any
|
|
42
42
|
* referenced column is not yet spec-resolvable.
|
|
43
43
|
*
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
type SpecQuery,
|
|
12
12
|
} from "@milaboratories/pl-model-common";
|
|
13
13
|
import type { GlobalCfgRenderCtx } from "../../render/internal";
|
|
14
|
+
import { type DataColumnRecipe, type ColumnData, isDataColumn } from "../data_column";
|
|
14
15
|
import type { ColumnFieldStatus, ColumnResolutionStatus } from "./types";
|
|
15
16
|
import { ColumnRecipe } from "./index";
|
|
16
17
|
import { Column } from "../column";
|
|
@@ -33,7 +34,7 @@ type NonOverriddenColumn = Column<Exclude<ColumnUniversalId, ColumnOverriddenId>
|
|
|
33
34
|
* This invariant matches the one enforced inside `unwrapOverrides` from
|
|
34
35
|
* pl-model-common: it explicitly throws on a nested override-wrap.
|
|
35
36
|
*/
|
|
36
|
-
export class ColumnOverriddenRecipe implements
|
|
37
|
+
export class ColumnOverriddenRecipe implements ColumnRecipe<ColumnOverriddenId> {
|
|
37
38
|
/**
|
|
38
39
|
* Wrap any recipe with overrides. If `inner` is already a
|
|
39
40
|
* {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones
|
|
@@ -42,12 +43,41 @@ export class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {
|
|
|
42
43
|
*/
|
|
43
44
|
static wrap(col: Column, overrides: SpecOverrides): ColumnOverriddenRecipe {
|
|
44
45
|
if (col instanceof ColumnOverriddenRecipe) {
|
|
45
|
-
return
|
|
46
|
+
return ColumnOverriddenRecipe.build(col.inner, mergeSpecOverrides(col.overrides, overrides));
|
|
46
47
|
}
|
|
47
48
|
// `inner` is not an Overridden wrap (the `instanceof` branch above handles
|
|
48
49
|
// that). Narrow the id union here so the constructor parameter stays
|
|
49
50
|
// honest with `ColumnOverriddenKey.source`.
|
|
50
|
-
return
|
|
51
|
+
return ColumnOverriddenRecipe.build(col as NonOverriddenColumn, overrides);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Pick the variant from the inner recipe: data-bearing inner →
|
|
56
|
+
* {@link DataColumnOverriddenRecipe}, otherwise the plain wrapper.
|
|
57
|
+
*
|
|
58
|
+
* The choice is **structural**, not a readiness check — it follows from
|
|
59
|
+
* which kind of recipe `inner` is, which in turn follows from the id alone
|
|
60
|
+
* (a bare `PObjectId` source is a leaf, anything else is not). So the same
|
|
61
|
+
* id always yields the same class, whether it was built via `withSpecs` or
|
|
62
|
+
* parsed from a string, and recipes stay value-objects that are equal iff
|
|
63
|
+
* their ids match.
|
|
64
|
+
*
|
|
65
|
+
* Re-deriving from `inner` on every build is also what keeps the merge path
|
|
66
|
+
* honest: `overridden.withSpecs(a).withSpecs(b)` cannot silently drop the
|
|
67
|
+
* data-bearing variant.
|
|
68
|
+
*
|
|
69
|
+
* Discriminated by method presence rather than `instanceof DataColumnImpl`
|
|
70
|
+
* to keep this module free of a runtime import cycle with `../data_column`.
|
|
71
|
+
* By the flat-merge invariant `inner` is never an Overridden, so the only
|
|
72
|
+
* recipe kind reaching here that carries `getData` is the leaf.
|
|
73
|
+
*/
|
|
74
|
+
private static build(
|
|
75
|
+
inner: NonOverriddenColumn,
|
|
76
|
+
overrides: SpecOverrides,
|
|
77
|
+
): ColumnOverriddenRecipe {
|
|
78
|
+
return isDataColumn(inner)
|
|
79
|
+
? new DataColumnOverriddenRecipe(inner, overrides)
|
|
80
|
+
: new ColumnOverriddenRecipe(inner, overrides);
|
|
51
81
|
}
|
|
52
82
|
|
|
53
83
|
/**
|
|
@@ -67,7 +97,7 @@ export class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {
|
|
|
67
97
|
private queryCache?: { readonly value: SpecQuery };
|
|
68
98
|
private dataStatusCache?: { readonly value: ColumnFieldStatus };
|
|
69
99
|
|
|
70
|
-
|
|
100
|
+
protected constructor(
|
|
71
101
|
private readonly inner: NonOverriddenColumn,
|
|
72
102
|
private readonly overrides: SpecOverrides,
|
|
73
103
|
) {
|
|
@@ -144,3 +174,27 @@ export class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {
|
|
|
144
174
|
return ColumnOverriddenRecipe.wrap(this, overrides);
|
|
145
175
|
}
|
|
146
176
|
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The variant produced when the wrapped recipe is itself data-bearing.
|
|
180
|
+
*
|
|
181
|
+
* Overrides are a pure spec patch — they never reshape the data — so the inner
|
|
182
|
+
* column's data stays consistent with this recipe's spec and is passed
|
|
183
|
+
* straight through. Which variant you get is decided once, at construction:
|
|
184
|
+
* see {@link build}.
|
|
185
|
+
*
|
|
186
|
+
* Not something callers name. Narrow with `hasReachableData(recipe)`, which
|
|
187
|
+
* yields the {@link DataColumnRecipe} interface.
|
|
188
|
+
*/
|
|
189
|
+
export class DataColumnOverriddenRecipe
|
|
190
|
+
extends ColumnOverriddenRecipe
|
|
191
|
+
implements DataColumnRecipe<ColumnOverriddenId>
|
|
192
|
+
{
|
|
193
|
+
/**
|
|
194
|
+
* Safe by construction: {@link build} only picks this class when the inner
|
|
195
|
+
* recipe exposes `getData`.
|
|
196
|
+
*/
|
|
197
|
+
getData(): ColumnData {
|
|
198
|
+
return (this.getInner() as DataColumnRecipe).getData();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
@@ -24,7 +24,7 @@ import { ColumnDiscoveredRecipe } from "./column_discovered_recipe";
|
|
|
24
24
|
import { ColumnOverriddenRecipe } from "./column_overrided_recipe";
|
|
25
25
|
import { ColumnFilteredRecipe } from "./column_filtered_recipe";
|
|
26
26
|
import { ColumnRecipe } from "./index";
|
|
27
|
-
import { ColumnAbsentError } from "../
|
|
27
|
+
import { ColumnAbsentError } from "../data_column";
|
|
28
28
|
import type { ColumnFieldStatus } from "./types";
|
|
29
29
|
import { installStubRegistry } from "../__test_helpers__/stub_registry";
|
|
30
30
|
import { throwError } from "@milaboratories/helpers";
|
|
@@ -581,7 +581,7 @@ describe("Wrapper getStatusByKey delegates to source", () => {
|
|
|
581
581
|
});
|
|
582
582
|
|
|
583
583
|
describe("ColumnRecipe.getStatus (top-level dispatcher)", () => {
|
|
584
|
-
test("routes bare PObjectId to
|
|
584
|
+
test("routes bare PObjectId to DataColumnImpl.getStatusById", () => {
|
|
585
585
|
setupCtx({ [baseLeaf]: stubSpec() });
|
|
586
586
|
expect(ColumnRecipe.getStatus(baseLeaf)).toBe("present");
|
|
587
587
|
});
|