@platforma-sdk/model 1.79.15 → 1.79.20
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/annotations/converter.cjs +0 -1
- package/dist/annotations/converter.cjs.map +1 -1
- package/dist/annotations/converter.d.ts.map +1 -1
- package/dist/annotations/converter.js.map +1 -1
- package/dist/annotations/index.cjs +2 -1
- package/dist/annotations/index.d.ts +2 -1
- package/dist/annotations/index.js +2 -1
- package/dist/bconfig/index.cjs +5 -2
- package/dist/bconfig/index.d.ts +2 -1
- package/dist/bconfig/index.js +3 -2
- package/dist/bconfig/lambdas.d.ts.map +1 -1
- package/dist/bconfig/normalization.cjs +0 -1
- package/dist/bconfig/normalization.cjs.map +1 -1
- package/dist/bconfig/normalization.d.ts.map +1 -1
- package/dist/bconfig/normalization.js.map +1 -1
- package/dist/bconfig/types.cjs.map +1 -1
- package/dist/bconfig/types.d.ts.map +1 -1
- package/dist/bconfig/types.js.map +1 -1
- package/dist/bconfig/util.d.ts.map +1 -1
- package/dist/bconfig/v3.d.ts.map +1 -1
- package/dist/block_api_v1.d.ts.map +1 -1
- package/dist/block_migrations.cjs +3 -0
- package/dist/block_migrations.cjs.map +1 -1
- package/dist/block_migrations.d.ts +1 -1
- package/dist/block_migrations.d.ts.map +1 -1
- package/dist/block_migrations.js +1 -1
- package/dist/block_migrations.js.map +1 -1
- package/dist/block_model.cjs +1 -1
- package/dist/block_model.cjs.map +1 -1
- package/dist/block_model.d.ts.map +1 -1
- package/dist/block_model.js +1 -0
- package/dist/block_model.js.map +1 -1
- package/dist/block_model_legacy.cjs +1 -1
- package/dist/block_model_legacy.cjs.map +1 -1
- package/dist/block_model_legacy.d.ts.map +1 -1
- package/dist/block_model_legacy.js +1 -0
- package/dist/block_model_legacy.js.map +1 -1
- package/dist/block_state_patch.d.ts.map +1 -1
- package/dist/block_state_util.cjs +2 -0
- package/dist/block_state_util.cjs.map +1 -1
- package/dist/block_state_util.d.ts.map +1 -1
- package/dist/block_state_util.js +2 -0
- package/dist/block_state_util.js.map +1 -1
- package/dist/block_storage.cjs.map +1 -1
- package/dist/block_storage.d.ts +1 -1
- package/dist/block_storage.d.ts.map +1 -1
- package/dist/block_storage.js.map +1 -1
- package/dist/block_storage_callbacks.cjs +1 -1
- package/dist/block_storage_callbacks.cjs.map +1 -1
- package/dist/block_storage_callbacks.js +1 -1
- package/dist/block_storage_callbacks.js.map +1 -1
- package/dist/block_storage_facade.cjs.map +1 -1
- package/dist/block_storage_facade.d.ts.map +1 -1
- package/dist/block_storage_facade.js.map +1 -1
- package/dist/columns/column_collection_builder.cjs +3 -1
- package/dist/columns/column_collection_builder.cjs.map +1 -1
- package/dist/columns/column_collection_builder.d.ts.map +1 -1
- package/dist/columns/column_collection_builder.js +3 -0
- package/dist/columns/column_collection_builder.js.map +1 -1
- package/dist/columns/column_selector.cjs.map +1 -1
- package/dist/columns/column_selector.d.ts.map +1 -1
- package/dist/columns/column_selector.js.map +1 -1
- package/dist/columns/column_snapshot.cjs.map +1 -1
- package/dist/columns/column_snapshot.d.ts.map +1 -1
- package/dist/columns/column_snapshot.js.map +1 -1
- package/dist/columns/column_snapshot_provider.cjs +3 -1
- package/dist/columns/column_snapshot_provider.cjs.map +1 -1
- package/dist/columns/column_snapshot_provider.d.ts.map +1 -1
- package/dist/columns/column_snapshot_provider.js +3 -0
- package/dist/columns/column_snapshot_provider.js.map +1 -1
- package/dist/columns/ctx_column_sources.cjs +1 -1
- package/dist/columns/ctx_column_sources.cjs.map +1 -1
- package/dist/columns/ctx_column_sources.d.ts.map +1 -1
- package/dist/columns/ctx_column_sources.js +1 -0
- package/dist/columns/ctx_column_sources.js.map +1 -1
- package/dist/columns/expand_by_partition.cjs +0 -1
- package/dist/columns/expand_by_partition.cjs.map +1 -1
- package/dist/columns/expand_by_partition.d.ts.map +1 -1
- package/dist/columns/expand_by_partition.js.map +1 -1
- package/dist/columns/index.cjs +20 -6
- package/dist/columns/index.d.ts +2 -1
- package/dist/columns/index.js +7 -6
- package/dist/components/PFrameForGraphs.cjs +3 -2
- 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 +2 -2
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlAnnotations/filter.d.ts.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.d.ts.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
- package/dist/components/PlAnnotations/index.d.ts +2 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +1 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs +2 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts.map +1 -1
- 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 +0 -1
- 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.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
- package/dist/components/PlDataTable/index.cjs +19 -7
- package/dist/components/PlDataTable/index.d.ts +2 -1
- package/dist/components/PlDataTable/index.js +8 -7
- package/dist/components/PlDataTable/labels.cjs +0 -1
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +0 -1
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV4.d.ts +1 -1
- package/dist/components/PlDataTable/typesV4.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV5.d.ts +1 -1
- package/dist/components/PlDataTable/typesV5.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV6.d.ts +1 -1
- package/dist/components/PlDataTable/typesV6.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs +0 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
- package/dist/components/PlDatasetSelector/dataset_selection.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/dataset_selection.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/dataset_selection.js.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +0 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/index.cjs +9 -3
- package/dist/components/PlDatasetSelector/index.d.ts +2 -1
- package/dist/components/PlDatasetSelector/index.js +4 -3
- package/dist/components/PlMultiSequenceAlignment.cjs +0 -1
- package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
- package/dist/components/PlMultiSequenceAlignment.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
- package/dist/components/PlSelectionModel.cjs.map +1 -1
- package/dist/components/PlSelectionModel.d.ts.map +1 -1
- package/dist/components/PlSelectionModel.js.map +1 -1
- package/dist/components/index.cjs +44 -15
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +16 -15
- package/dist/config/actions.cjs.map +1 -1
- package/dist/config/actions.d.ts.map +1 -1
- package/dist/config/actions.js.map +1 -1
- package/dist/config/actions_kinds.d.ts.map +1 -1
- package/dist/config/index.cjs +33 -1
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.js +2 -1
- package/dist/config/model.d.ts.map +1 -1
- package/dist/config/type_engine.d.ts.map +1 -1
- package/dist/config/type_util.d.ts +1 -1
- package/dist/config/type_util.d.ts.map +1 -1
- package/dist/env_value.cjs.map +1 -1
- package/dist/env_value.d.ts.map +1 -1
- package/dist/env_value.js.map +1 -1
- package/dist/filters/converters/filterToQuery.cjs +0 -1
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.cjs +0 -1
- package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
- package/dist/filters/converters/index.cjs +5 -2
- package/dist/filters/converters/index.d.ts +2 -1
- package/dist/filters/converters/index.js +3 -2
- package/dist/filters/distill.cjs +1 -2
- package/dist/filters/distill.cjs.map +1 -1
- package/dist/filters/distill.d.ts.map +1 -1
- package/dist/filters/distill.js +1 -1
- package/dist/filters/distill.js.map +1 -1
- package/dist/filters/index.cjs +7 -3
- package/dist/filters/index.d.ts +2 -1
- package/dist/filters/index.js +4 -3
- package/dist/filters/traverse.cjs.map +1 -1
- package/dist/filters/traverse.js.map +1 -1
- package/dist/filters/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/internal.cjs +2 -0
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/labels/derive_distinct_labels.cjs +2 -3
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
- package/dist/labels/derive_distinct_labels.js +2 -2
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs +0 -1
- package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
- package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
- package/dist/labels/derive_distinct_tooltips.js.map +1 -1
- package/dist/labels/index.cjs +4 -2
- package/dist/labels/index.d.ts +2 -1
- package/dist/labels/index.js +3 -2
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/dist/pframe.cjs +1 -0
- package/dist/pframe.cjs.map +1 -1
- package/dist/pframe.d.ts.map +1 -1
- package/dist/pframe.js +1 -0
- package/dist/pframe.js.map +1 -1
- package/dist/pframe_utils/axes.cjs +0 -1
- package/dist/pframe_utils/axes.cjs.map +1 -1
- 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 +0 -1
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts.map +1 -1
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs +3 -2
- 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 +2 -2
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/platforma.d.ts.map +1 -1
- package/dist/plugin_handle.cjs.map +1 -1
- package/dist/plugin_handle.d.ts.map +1 -1
- package/dist/plugin_handle.js.map +1 -1
- package/dist/plugin_model.cjs +5 -0
- package/dist/plugin_model.cjs.map +1 -1
- package/dist/plugin_model.d.ts +1 -1
- package/dist/plugin_model.d.ts.map +1 -1
- package/dist/plugin_model.js +3 -1
- package/dist/plugin_model.js.map +1 -1
- package/dist/raw_globals.cjs.map +1 -1
- package/dist/raw_globals.d.ts.map +1 -1
- package/dist/raw_globals.js.map +1 -1
- package/dist/ref_util.cjs.map +1 -1
- package/dist/ref_util.d.ts.map +1 -1
- package/dist/ref_util.js.map +1 -1
- package/dist/render/accessor.cjs +2 -1
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts.map +1 -1
- package/dist/render/accessor.js +2 -0
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +5 -2
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts.map +1 -1
- package/dist/render/api.js +4 -1
- package/dist/render/api.js.map +1 -1
- package/dist/render/future.cjs +2 -0
- package/dist/render/future.cjs.map +1 -1
- package/dist/render/future.d.ts.map +1 -1
- package/dist/render/future.js +2 -0
- package/dist/render/future.js.map +1 -1
- package/dist/render/index.cjs +34 -7
- package/dist/render/index.d.ts +2 -1
- package/dist/render/index.js +8 -7
- package/dist/render/internal.cjs +3 -0
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts +1 -1
- package/dist/render/internal.d.ts.map +1 -1
- package/dist/render/internal.js +1 -1
- package/dist/render/internal.js.map +1 -1
- package/dist/render/traversal_ops.d.ts.map +1 -1
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.d.ts.map +1 -1
- package/dist/render/util/axis_filtering.js.map +1 -1
- package/dist/render/util/column_collection.cjs +2 -1
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts.map +1 -1
- package/dist/render/util/column_collection.js +1 -0
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.cjs +23 -4
- package/dist/render/util/index.d.ts +2 -1
- package/dist/render/util/index.js +5 -4
- package/dist/render/util/label.cjs.map +1 -1
- package/dist/render/util/label.d.ts +1 -1
- package/dist/render/util/label.d.ts.map +1 -1
- package/dist/render/util/label.js.map +1 -1
- package/dist/render/util/pcolumn_data.cjs +8 -11
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts.map +1 -1
- package/dist/render/util/pcolumn_data.js +8 -10
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/render/util/pframe_upgraders.cjs.map +1 -1
- package/dist/render/util/pframe_upgraders.js.map +1 -1
- package/dist/render/util/split_selectors.d.ts +1 -1
- package/dist/render/util/split_selectors.d.ts.map +1 -1
- package/dist/services/block_services.cjs +0 -1
- package/dist/services/block_services.cjs.map +1 -1
- package/dist/services/block_services.d.ts +1 -3
- package/dist/services/block_services.d.ts.map +1 -1
- package/dist/services/block_services.js.map +1 -1
- package/dist/services/get_services.cjs.map +1 -1
- package/dist/services/get_services.d.ts.map +1 -1
- package/dist/services/get_services.js.map +1 -1
- package/dist/services/index.cjs +8 -3
- package/dist/services/index.d.ts +2 -1
- package/dist/services/index.js +4 -3
- package/dist/services/service_bridge.cjs.map +1 -1
- package/dist/services/service_bridge.d.ts.map +1 -1
- package/dist/services/service_bridge.js.map +1 -1
- package/dist/services/service_resolve.d.ts.map +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-migration.cjs","names":["distillFilterSpec"],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport {\n canonicalizeJson,\n getPTableColumnId,\n parseJsonSafely,\n} from \"@milaboratories/pl-model-common\";\nimport { distillFilterSpec } from \"../../filters\";\nimport type { PlDataTableFilterState, PlTableFilter } from \"./typesV4\";\nimport type {\n PlDataTableFiltersWithMeta,\n PlDataTableGridStateCore,\n PlDataTableSheetState,\n PlDataTableStateV2CacheEntry,\n PlDataTableStateV2Normalized,\n PlTableColumnIdJson,\n PTableParamsV2,\n} from \"./typesV7\";\nimport type {\n PlDataTableGridStateV6,\n PlDataTableStateV2V6,\n PlDataTableStateV2V6CacheEntry,\n PlDataTableV6ColIdJson,\n} from \"./typesV6\";\nimport type {\n PlDataTableGridStateV5,\n PlDataTableV5ColIdJson,\n PlDataTableV5ColIdWrapper,\n} from \"./typesV5\";\nimport { isNil } from \"es-toolkit\";\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2;\n }\n | {\n version: 4;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV6;\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n /** Old format; only fields used in migration are typed */\n pTableParams: {\n sourceId: string | null;\n hiddenColIds: PObjectId[] | null;\n sorting: PTableSorting[];\n };\n }\n // v5 stored colIds as `{source, labeled}` wrappers; only the gridState shape differs.\n | {\n version: 5;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV5;\n sheetsState: PlDataTableSheetState[];\n filtersState: null | PlDataTableFiltersWithMeta;\n defaultFiltersState: null | PlDataTableFiltersWithMeta;\n searchString?: string;\n }[];\n pTableParams: PTableParamsV2;\n }\n // v6 stored colIds as canonicalized full `PTableColumnSpec` (including\n // annotations + `pl7.app/trace`). v7 strips down to `PTableColumnId`.\n | PlDataTableStateV2V6\n // Normalized state\n | PlDataTableStateV2Normalized;\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(\n state: PlDataTableStateV2 | undefined,\n): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!(\"version\" in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: createDefaultPTableParams(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v4 -> v6: migrate per-column filters to tree-based format (skips v5).\n // v4 gridState already used bare PTableColumnSpec colIds, so we jump\n // straight to v6 without going through the v5 wrapper format.\n if (state.version === 4) {\n state = migrateV4toV6(state);\n }\n // v5 -> v6: unwrap `{source, labeled}` colIds in gridState back to bare PTableColumnSpec.\n if (state.version === 5) {\n state = migrateV5toV6(state);\n }\n // v6 -> v7: shrink colIds from full PTableColumnSpec to PTableColumnId.\n if (state.version === 6) {\n state = migrateV6toV7(state);\n }\n return state;\n}\n\n/** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */\nfunction migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDataTableStateV2V6 {\n // pTableParams reset: v5 stored DiscoveredPColumnId-based hiddenColIds with\n // empty-array fields (e.g. `{column, path: [], columnQualifications: [], ...}`).\n // v6 distills empty fields, so the same logical column serialises differently\n // and lookups would silently miss every previously-hidden discovered column.\n // gridState colIds are derived from PTableColumnSpec and unaffected.\n return {\n version: 6,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n gridState: unwrapV5GridState(entry.gridState),\n })),\n pTableParams: createDefaultPTableParams(),\n };\n}\n\n/** Convert v5 wrapped colId JSON to bare PTableColumnSpec JSON, taking `.source`.\n * gridState colIds may include the row-number sentinel (a JSON-stringified\n * literal, not a wrapped spec) — those pass through unchanged. */\nfunction unwrapV5ColId(json: string): string {\n const parsed: unknown = parseJsonSafely(json as CanonicalizedJson<unknown>);\n return !isNil(parsed) && typeof parsed === \"object\" && \"source\" in parsed\n ? canonicalizeJson((parsed as PlDataTableV5ColIdWrapper).source)\n : json;\n}\n\nfunction unwrapV5GridState(gridState: PlDataTableGridStateV5): PlDataTableGridStateV6 {\n const unwrapAs = (json: PlDataTableV5ColIdJson) => unwrapV5ColId(json) as PlDataTableV6ColIdJson;\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(unwrapAs) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: unwrapAs(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(unwrapAs) }\n : undefined,\n };\n}\n\n/** Migrate v6 to v7: rewrite each colId from a full PTableColumnSpec to its\n * compact PTableColumnId (drops annotations/spec body, ~16× smaller per column). */\nfunction migrateV6toV7(state: PlDataTableStateV2V6): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: state.stateCache.map(\n (entry): PlDataTableStateV2CacheEntry => ({\n ...entry,\n gridState: shrinkV6GridState(entry.gridState),\n }),\n ),\n pTableParams: state.pTableParams,\n };\n}\n\n/** Convert a v6 fat colId (canonicalized PTableColumnSpec) to a v7 compact colId\n * (canonicalized PTableColumnId). The row-number sentinel is a string literal,\n * not a spec — pass it through unchanged. */\nfunction shrinkV6ColId(json: PlDataTableV6ColIdJson): PlTableColumnIdJson {\n const parsed: unknown = parseJsonSafely(json);\n if (!isNil(parsed) && typeof parsed === \"object\" && \"type\" in parsed && \"id\" in parsed) {\n return canonicalizeJson(getPTableColumnId(parsed as PTableColumnSpec));\n }\n return json as unknown as PlTableColumnIdJson;\n}\n\nfunction shrinkV6GridState(gridState: PlDataTableGridStateV6): PlDataTableGridStateCore {\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(shrinkV6ColId) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: shrinkV6ColId(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(shrinkV6ColId) }\n : undefined,\n };\n}\n\n/** Migrate v4 state to v6: convert per-column filters to tree-based format (skips v5). */\nfunction migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDataTableStateV2V6 {\n let idCounter = 0;\n const nextId = () => ++idCounter;\n\n const migratedCache: PlDataTableStateV2V6CacheEntry[] = state.stateCache.map((entry) => {\n const leaves: PlDataTableFiltersWithMeta[\"filters\"] = [];\n for (const f of entry.filtersState) {\n if (f.filter !== null && !f.filter.disabled) {\n const column = canonicalizeJson(f.id);\n leaves.push(migrateTableFilter(column, f.filter.value, nextId));\n }\n }\n const filtersState: PlDataTableFiltersWithMeta | null =\n leaves.length > 0 ? { id: nextId(), type: \"and\", filters: leaves } : null;\n\n return {\n sourceId: entry.sourceId,\n gridState: entry.gridState,\n sheetsState: entry.sheetsState,\n filtersState,\n defaultFiltersState: null,\n };\n });\n\n const oldSourceId = state.pTableParams.sourceId;\n const currentCache = oldSourceId\n ? migratedCache.find((e) => e.sourceId === oldSourceId)\n : undefined;\n\n return {\n version: 6,\n stateCache: migratedCache,\n pTableParams:\n currentCache && oldSourceId\n ? {\n sourceId: oldSourceId,\n hiddenColIds:\n state.pTableParams.hiddenColIds?.map((id) => ({ type: \"column\" as const, id })) ??\n null,\n filters: distillFilterSpec(currentCache.filtersState),\n defaultFilters: null,\n sorting: state.pTableParams.sorting,\n }\n : createDefaultPTableParams(),\n };\n}\n\n/** Migrate a single per-column PlTableFilter to a tree-based FilterSpec node */\nfunction migrateTableFilter(\n column: CanonicalizedJson<PTableColumnId>,\n filter: PlTableFilter,\n nextId: () => number,\n): PlDataTableFiltersWithMeta[\"filters\"][number] {\n const id = nextId();\n switch (filter.type) {\n case \"isNA\":\n return { id, type: \"isNA\", column };\n case \"isNotNA\":\n return { id, type: \"isNotNA\", column };\n case \"number_equals\":\n return { id, type: \"equal\", column, x: filter.reference };\n case \"number_notEquals\":\n return { id, type: \"notEqual\", column, x: filter.reference };\n case \"number_greaterThan\":\n return { id, type: \"greaterThan\", column, x: filter.reference };\n case \"number_greaterThanOrEqualTo\":\n return { id, type: \"greaterThanOrEqual\", column, x: filter.reference };\n case \"number_lessThan\":\n return { id, type: \"lessThan\", column, x: filter.reference };\n case \"number_lessThanOrEqualTo\":\n return { id, type: \"lessThanOrEqual\", column, x: filter.reference };\n case \"number_between\":\n return {\n id,\n type: \"and\",\n filters: [\n filter.includeLowerBound\n ? { id: nextId(), type: \"greaterThanOrEqual\" as const, column, x: filter.lowerBound }\n : { id: nextId(), type: \"greaterThan\" as const, column, x: filter.lowerBound },\n filter.includeUpperBound\n ? { id: nextId(), type: \"lessThanOrEqual\" as const, column, x: filter.upperBound }\n : { id: nextId(), type: \"lessThan\" as const, column, x: filter.upperBound },\n ],\n };\n case \"string_equals\":\n return { id, type: \"patternEquals\", column, value: filter.reference };\n case \"string_notEquals\":\n return { id, type: \"patternNotEquals\", column, value: filter.reference };\n case \"string_contains\":\n return { id, type: \"patternContainSubsequence\", column, value: filter.reference };\n case \"string_doesNotContain\":\n return { id, type: \"patternNotContainSubsequence\", column, value: filter.reference };\n case \"string_matches\":\n return { id, type: \"patternMatchesRegularExpression\", column, value: filter.reference };\n case \"string_doesNotMatch\":\n return {\n id,\n type: \"not\",\n filter: {\n id: nextId(),\n type: \"patternMatchesRegularExpression\",\n column,\n value: filter.reference,\n },\n };\n case \"string_containsFuzzyMatch\":\n return {\n id,\n type: \"patternFuzzyContainSubsequence\",\n column,\n value: filter.reference,\n maxEdits: filter.maxEdits,\n substitutionsOnly: filter.substitutionsOnly,\n ...(filter.wildcard !== undefined ? { wildcard: filter.wildcard } : {}),\n };\n }\n}\n\nexport function createDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n filters: null,\n defaultFilters: null,\n sorting: [],\n };\n}\n\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: [],\n pTableParams: createDefaultPTableParams(),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state-migration.cjs","names":["distillFilterSpec"],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport {\n canonicalizeJson,\n getPTableColumnId,\n parseJsonSafely,\n} from \"@milaboratories/pl-model-common\";\nimport { distillFilterSpec } from \"../../filters\";\nimport type { PlDataTableFilterState, PlTableFilter } from \"./typesV4\";\nimport type {\n PlDataTableFiltersWithMeta,\n PlDataTableGridStateCore,\n PlDataTableSheetState,\n PlDataTableStateV2CacheEntry,\n PlDataTableStateV2Normalized,\n PlTableColumnIdJson,\n PTableParamsV2,\n} from \"./typesV7\";\nimport type {\n PlDataTableGridStateV6,\n PlDataTableStateV2V6,\n PlDataTableStateV2V6CacheEntry,\n PlDataTableV6ColIdJson,\n} from \"./typesV6\";\nimport type {\n PlDataTableGridStateV5,\n PlDataTableV5ColIdJson,\n PlDataTableV5ColIdWrapper,\n} from \"./typesV5\";\nimport { isNil } from \"es-toolkit\";\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2;\n }\n | {\n version: 4;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV6;\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n /** Old format; only fields used in migration are typed */\n pTableParams: {\n sourceId: string | null;\n hiddenColIds: PObjectId[] | null;\n sorting: PTableSorting[];\n };\n }\n // v5 stored colIds as `{source, labeled}` wrappers; only the gridState shape differs.\n | {\n version: 5;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV5;\n sheetsState: PlDataTableSheetState[];\n filtersState: null | PlDataTableFiltersWithMeta;\n defaultFiltersState: null | PlDataTableFiltersWithMeta;\n searchString?: string;\n }[];\n pTableParams: PTableParamsV2;\n }\n // v6 stored colIds as canonicalized full `PTableColumnSpec` (including\n // annotations + `pl7.app/trace`). v7 strips down to `PTableColumnId`.\n | PlDataTableStateV2V6\n // Normalized state\n | PlDataTableStateV2Normalized;\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(\n state: PlDataTableStateV2 | undefined,\n): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!(\"version\" in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: createDefaultPTableParams(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v4 -> v6: migrate per-column filters to tree-based format (skips v5).\n // v4 gridState already used bare PTableColumnSpec colIds, so we jump\n // straight to v6 without going through the v5 wrapper format.\n if (state.version === 4) {\n state = migrateV4toV6(state);\n }\n // v5 -> v6: unwrap `{source, labeled}` colIds in gridState back to bare PTableColumnSpec.\n if (state.version === 5) {\n state = migrateV5toV6(state);\n }\n // v6 -> v7: shrink colIds from full PTableColumnSpec to PTableColumnId.\n if (state.version === 6) {\n state = migrateV6toV7(state);\n }\n return state;\n}\n\n/** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */\nfunction migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDataTableStateV2V6 {\n // pTableParams reset: v5 stored DiscoveredPColumnId-based hiddenColIds with\n // empty-array fields (e.g. `{column, path: [], columnQualifications: [], ...}`).\n // v6 distills empty fields, so the same logical column serialises differently\n // and lookups would silently miss every previously-hidden discovered column.\n // gridState colIds are derived from PTableColumnSpec and unaffected.\n return {\n version: 6,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n gridState: unwrapV5GridState(entry.gridState),\n })),\n pTableParams: createDefaultPTableParams(),\n };\n}\n\n/** Convert v5 wrapped colId JSON to bare PTableColumnSpec JSON, taking `.source`.\n * gridState colIds may include the row-number sentinel (a JSON-stringified\n * literal, not a wrapped spec) — those pass through unchanged. */\nfunction unwrapV5ColId(json: string): string {\n const parsed: unknown = parseJsonSafely(json as CanonicalizedJson<unknown>);\n return !isNil(parsed) && typeof parsed === \"object\" && \"source\" in parsed\n ? canonicalizeJson((parsed as PlDataTableV5ColIdWrapper).source)\n : json;\n}\n\nfunction unwrapV5GridState(gridState: PlDataTableGridStateV5): PlDataTableGridStateV6 {\n const unwrapAs = (json: PlDataTableV5ColIdJson) => unwrapV5ColId(json) as PlDataTableV6ColIdJson;\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(unwrapAs) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: unwrapAs(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(unwrapAs) }\n : undefined,\n };\n}\n\n/** Migrate v6 to v7: rewrite each colId from a full PTableColumnSpec to its\n * compact PTableColumnId (drops annotations/spec body, ~16× smaller per column). */\nfunction migrateV6toV7(state: PlDataTableStateV2V6): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: state.stateCache.map(\n (entry): PlDataTableStateV2CacheEntry => ({\n ...entry,\n gridState: shrinkV6GridState(entry.gridState),\n }),\n ),\n pTableParams: state.pTableParams,\n };\n}\n\n/** Convert a v6 fat colId (canonicalized PTableColumnSpec) to a v7 compact colId\n * (canonicalized PTableColumnId). The row-number sentinel is a string literal,\n * not a spec — pass it through unchanged. */\nfunction shrinkV6ColId(json: PlDataTableV6ColIdJson): PlTableColumnIdJson {\n const parsed: unknown = parseJsonSafely(json);\n if (!isNil(parsed) && typeof parsed === \"object\" && \"type\" in parsed && \"id\" in parsed) {\n return canonicalizeJson(getPTableColumnId(parsed as PTableColumnSpec));\n }\n return json as unknown as PlTableColumnIdJson;\n}\n\nfunction shrinkV6GridState(gridState: PlDataTableGridStateV6): PlDataTableGridStateCore {\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(shrinkV6ColId) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: shrinkV6ColId(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(shrinkV6ColId) }\n : undefined,\n };\n}\n\n/** Migrate v4 state to v6: convert per-column filters to tree-based format (skips v5). */\nfunction migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDataTableStateV2V6 {\n let idCounter = 0;\n const nextId = () => ++idCounter;\n\n const migratedCache: PlDataTableStateV2V6CacheEntry[] = state.stateCache.map((entry) => {\n const leaves: PlDataTableFiltersWithMeta[\"filters\"] = [];\n for (const f of entry.filtersState) {\n if (f.filter !== null && !f.filter.disabled) {\n const column = canonicalizeJson(f.id);\n leaves.push(migrateTableFilter(column, f.filter.value, nextId));\n }\n }\n const filtersState: PlDataTableFiltersWithMeta | null =\n leaves.length > 0 ? { id: nextId(), type: \"and\", filters: leaves } : null;\n\n return {\n sourceId: entry.sourceId,\n gridState: entry.gridState,\n sheetsState: entry.sheetsState,\n filtersState,\n defaultFiltersState: null,\n };\n });\n\n const oldSourceId = state.pTableParams.sourceId;\n const currentCache = oldSourceId\n ? migratedCache.find((e) => e.sourceId === oldSourceId)\n : undefined;\n\n return {\n version: 6,\n stateCache: migratedCache,\n pTableParams:\n currentCache && oldSourceId\n ? {\n sourceId: oldSourceId,\n hiddenColIds:\n state.pTableParams.hiddenColIds?.map((id) => ({ type: \"column\" as const, id })) ??\n null,\n filters: distillFilterSpec(currentCache.filtersState),\n defaultFilters: null,\n sorting: state.pTableParams.sorting,\n }\n : createDefaultPTableParams(),\n };\n}\n\n/** Migrate a single per-column PlTableFilter to a tree-based FilterSpec node */\nfunction migrateTableFilter(\n column: CanonicalizedJson<PTableColumnId>,\n filter: PlTableFilter,\n nextId: () => number,\n): PlDataTableFiltersWithMeta[\"filters\"][number] {\n const id = nextId();\n switch (filter.type) {\n case \"isNA\":\n return { id, type: \"isNA\", column };\n case \"isNotNA\":\n return { id, type: \"isNotNA\", column };\n case \"number_equals\":\n return { id, type: \"equal\", column, x: filter.reference };\n case \"number_notEquals\":\n return { id, type: \"notEqual\", column, x: filter.reference };\n case \"number_greaterThan\":\n return { id, type: \"greaterThan\", column, x: filter.reference };\n case \"number_greaterThanOrEqualTo\":\n return { id, type: \"greaterThanOrEqual\", column, x: filter.reference };\n case \"number_lessThan\":\n return { id, type: \"lessThan\", column, x: filter.reference };\n case \"number_lessThanOrEqualTo\":\n return { id, type: \"lessThanOrEqual\", column, x: filter.reference };\n case \"number_between\":\n return {\n id,\n type: \"and\",\n filters: [\n filter.includeLowerBound\n ? { id: nextId(), type: \"greaterThanOrEqual\" as const, column, x: filter.lowerBound }\n : { id: nextId(), type: \"greaterThan\" as const, column, x: filter.lowerBound },\n filter.includeUpperBound\n ? { id: nextId(), type: \"lessThanOrEqual\" as const, column, x: filter.upperBound }\n : { id: nextId(), type: \"lessThan\" as const, column, x: filter.upperBound },\n ],\n };\n case \"string_equals\":\n return { id, type: \"patternEquals\", column, value: filter.reference };\n case \"string_notEquals\":\n return { id, type: \"patternNotEquals\", column, value: filter.reference };\n case \"string_contains\":\n return { id, type: \"patternContainSubsequence\", column, value: filter.reference };\n case \"string_doesNotContain\":\n return { id, type: \"patternNotContainSubsequence\", column, value: filter.reference };\n case \"string_matches\":\n return { id, type: \"patternMatchesRegularExpression\", column, value: filter.reference };\n case \"string_doesNotMatch\":\n return {\n id,\n type: \"not\",\n filter: {\n id: nextId(),\n type: \"patternMatchesRegularExpression\",\n column,\n value: filter.reference,\n },\n };\n case \"string_containsFuzzyMatch\":\n return {\n id,\n type: \"patternFuzzyContainSubsequence\",\n column,\n value: filter.reference,\n maxEdits: filter.maxEdits,\n substitutionsOnly: filter.substitutionsOnly,\n ...(filter.wildcard !== undefined ? { wildcard: filter.wildcard } : {}),\n };\n }\n}\n\nexport function createDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n filters: null,\n defaultFilters: null,\n sorting: [],\n };\n}\n\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: [],\n pTableParams: createDefaultPTableParams(),\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-migration.d.ts","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"mappings":";;;;;;;;;AAyCA;KAAY,kBAAA;EAIN,SAAA;IACE,WAAA;MACE,aAAA,EAAe,iBAAA,CAAkB,gBAAA;IAAA;IAEnC,IAAA;MACE,SAAA;QACE,KAAA,EAAO,iBAAA,CAAkB,gBAAA;QACzB,IAAA;MAAA;IAAA;IAGJ,gBAAA;MACE,YAAA,EAAc,iBAAA,CAAkB,gBAAA;IAAA;IAElC,QAAA;IACA,MAAA,GAAS,MAAA,CAAO,iBAAA,CAAkB,MAAA;EAAA;EAEpC,YAAA;IACE,OAAA,GAAU,aAAA;IACV,OAAA,GAAU,kBAAA;EAAA;AAAA;EAIZ,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA;MACE,WAAA;QACE,aAAA,EAAe,iBAAA,CAAkB,gBAAA;MAAA;MAEnC,IAAA;QACE,SAAA;UACE,KAAA,EAAO,iBAAA,CAAkB,gBAAA;UACzB,IAAA;QAAA;MAAA;MAGJ,gBAAA;QACE,YAAA,EAAc,iBAAA,CAAkB,gBAAA;MAAA;IAAA;IAGpC,WAAA,EAAa,qBAAA;EAAA;EAEf,YAAA;IACE,YAAA,EAAc,SAAA;IACd,OAAA,EAAS,kBAAA;IACT,OAAA,EAAS,aAAA;EAAA;AAAA;EAIX,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA;MACE,WAAA;QACE,aAAA,EAAe,iBAAA,CAAkB,gBAAA;MAAA;MAEnC,IAAA;QACE,SAAA;UACE,KAAA,EAAO,iBAAA,CAAkB,gBAAA;UACzB,IAAA;QAAA;MAAA;MAGJ,gBAAA;QACE,YAAA,EAAc,iBAAA,CAAkB,gBAAA;MAAA;IAAA;IAGpC,WAAA,EAAa,qBAAA;IACb,YAAA,EAAc,sBAAA;EAAA;EAEhB,YAAA,EAAc,cAAA;AAAA;EAGd,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA,EAAW,sBAAA;IACX,WAAA,EAAa,qBAAA;IACb,YAAA,EAAc,sBAAA;EAAA,KAjDV;EAoDN,YAAA;IACE,QAAA;IACA,YAAA,EAAc,SAAA;IACd,OAAA,EAAS,aAAA;EAAA;AAAA;EAKX,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA,EAAW,sBAAA;IACX,WAAA,EAAa,qBAAA;IACb,YAAA,SAAqB,0BAAA;IACrB,mBAAA,SAA4B,0BAAA;IAC5B,YAAA;EAAA;EAEF,YAAA,EAAc,cAAA;AAAA,IAIhB,oBAAA,GAEA,4BAAA;;iBAGY,yBAAA,CACd,KAAA,EAAO,kBAAA,eACN,
|
|
1
|
+
{"version":3,"file":"state-migration.d.ts","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"mappings":";;;;;;;;;AAyCA;KAAY,kBAAA;EAIN,SAAA;IACE,WAAA;MACE,aAAA,EAAe,iBAAA,CAAkB,gBAAA;IAAA;IAEnC,IAAA;MACE,SAAA;QACE,KAAA,EAAO,iBAAA,CAAkB,gBAAA;QACzB,IAAA;MAAA;IAAA;IAGJ,gBAAA;MACE,YAAA,EAAc,iBAAA,CAAkB,gBAAA;IAAA;IAElC,QAAA;IACA,MAAA,GAAS,MAAA,CAAO,iBAAA,CAAkB,MAAA;EAAA;EAEpC,YAAA;IACE,OAAA,GAAU,aAAA;IACV,OAAA,GAAU,kBAAA;EAAA;AAAA;EAIZ,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA;MACE,WAAA;QACE,aAAA,EAAe,iBAAA,CAAkB,gBAAA;MAAA;MAEnC,IAAA;QACE,SAAA;UACE,KAAA,EAAO,iBAAA,CAAkB,gBAAA;UACzB,IAAA;QAAA;MAAA;MAGJ,gBAAA;QACE,YAAA,EAAc,iBAAA,CAAkB,gBAAA;MAAA;IAAA;IAGpC,WAAA,EAAa,qBAAA;EAAA;EAEf,YAAA;IACE,YAAA,EAAc,SAAA;IACd,OAAA,EAAS,kBAAA;IACT,OAAA,EAAS,aAAA;EAAA;AAAA;EAIX,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA;MACE,WAAA;QACE,aAAA,EAAe,iBAAA,CAAkB,gBAAA;MAAA;MAEnC,IAAA;QACE,SAAA;UACE,KAAA,EAAO,iBAAA,CAAkB,gBAAA;UACzB,IAAA;QAAA;MAAA;MAGJ,gBAAA;QACE,YAAA,EAAc,iBAAA,CAAkB,gBAAA;MAAA;IAAA;IAGpC,WAAA,EAAa,qBAAA;IACb,YAAA,EAAc,sBAAA;EAAA;EAEhB,YAAA,EAAc,cAAA;AAAA;EAGd,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA,EAAW,sBAAA;IACX,WAAA,EAAa,qBAAA;IACb,YAAA,EAAc,sBAAA;EAAA,KAjDV;EAoDN,YAAA;IACE,QAAA;IACA,YAAA,EAAc,SAAA;IACd,OAAA,EAAS,aAAA;EAAA;AAAA;EAKX,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA,EAAW,sBAAA;IACX,WAAA,EAAa,qBAAA;IACb,YAAA,SAAqB,0BAAA;IACrB,mBAAA,SAA4B,0BAAA;IAC5B,YAAA;EAAA;EAEF,YAAA,EAAc,cAAA;AAAA,IAIhB,oBAAA,GAEA,4BAAA;;iBAGY,yBAAA,CACd,KAAA,EAAO,kBAAA,eACN,4BAA4B;AAAA,iBA8Pf,yBAAA,IAA6B,cAAc;AAAA,iBAU3C,wBAAA,IAA4B,4BAA4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-migration.js","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport {\n canonicalizeJson,\n getPTableColumnId,\n parseJsonSafely,\n} from \"@milaboratories/pl-model-common\";\nimport { distillFilterSpec } from \"../../filters\";\nimport type { PlDataTableFilterState, PlTableFilter } from \"./typesV4\";\nimport type {\n PlDataTableFiltersWithMeta,\n PlDataTableGridStateCore,\n PlDataTableSheetState,\n PlDataTableStateV2CacheEntry,\n PlDataTableStateV2Normalized,\n PlTableColumnIdJson,\n PTableParamsV2,\n} from \"./typesV7\";\nimport type {\n PlDataTableGridStateV6,\n PlDataTableStateV2V6,\n PlDataTableStateV2V6CacheEntry,\n PlDataTableV6ColIdJson,\n} from \"./typesV6\";\nimport type {\n PlDataTableGridStateV5,\n PlDataTableV5ColIdJson,\n PlDataTableV5ColIdWrapper,\n} from \"./typesV5\";\nimport { isNil } from \"es-toolkit\";\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2;\n }\n | {\n version: 4;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV6;\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n /** Old format; only fields used in migration are typed */\n pTableParams: {\n sourceId: string | null;\n hiddenColIds: PObjectId[] | null;\n sorting: PTableSorting[];\n };\n }\n // v5 stored colIds as `{source, labeled}` wrappers; only the gridState shape differs.\n | {\n version: 5;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV5;\n sheetsState: PlDataTableSheetState[];\n filtersState: null | PlDataTableFiltersWithMeta;\n defaultFiltersState: null | PlDataTableFiltersWithMeta;\n searchString?: string;\n }[];\n pTableParams: PTableParamsV2;\n }\n // v6 stored colIds as canonicalized full `PTableColumnSpec` (including\n // annotations + `pl7.app/trace`). v7 strips down to `PTableColumnId`.\n | PlDataTableStateV2V6\n // Normalized state\n | PlDataTableStateV2Normalized;\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(\n state: PlDataTableStateV2 | undefined,\n): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!(\"version\" in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: createDefaultPTableParams(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v4 -> v6: migrate per-column filters to tree-based format (skips v5).\n // v4 gridState already used bare PTableColumnSpec colIds, so we jump\n // straight to v6 without going through the v5 wrapper format.\n if (state.version === 4) {\n state = migrateV4toV6(state);\n }\n // v5 -> v6: unwrap `{source, labeled}` colIds in gridState back to bare PTableColumnSpec.\n if (state.version === 5) {\n state = migrateV5toV6(state);\n }\n // v6 -> v7: shrink colIds from full PTableColumnSpec to PTableColumnId.\n if (state.version === 6) {\n state = migrateV6toV7(state);\n }\n return state;\n}\n\n/** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */\nfunction migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDataTableStateV2V6 {\n // pTableParams reset: v5 stored DiscoveredPColumnId-based hiddenColIds with\n // empty-array fields (e.g. `{column, path: [], columnQualifications: [], ...}`).\n // v6 distills empty fields, so the same logical column serialises differently\n // and lookups would silently miss every previously-hidden discovered column.\n // gridState colIds are derived from PTableColumnSpec and unaffected.\n return {\n version: 6,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n gridState: unwrapV5GridState(entry.gridState),\n })),\n pTableParams: createDefaultPTableParams(),\n };\n}\n\n/** Convert v5 wrapped colId JSON to bare PTableColumnSpec JSON, taking `.source`.\n * gridState colIds may include the row-number sentinel (a JSON-stringified\n * literal, not a wrapped spec) — those pass through unchanged. */\nfunction unwrapV5ColId(json: string): string {\n const parsed: unknown = parseJsonSafely(json as CanonicalizedJson<unknown>);\n return !isNil(parsed) && typeof parsed === \"object\" && \"source\" in parsed\n ? canonicalizeJson((parsed as PlDataTableV5ColIdWrapper).source)\n : json;\n}\n\nfunction unwrapV5GridState(gridState: PlDataTableGridStateV5): PlDataTableGridStateV6 {\n const unwrapAs = (json: PlDataTableV5ColIdJson) => unwrapV5ColId(json) as PlDataTableV6ColIdJson;\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(unwrapAs) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: unwrapAs(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(unwrapAs) }\n : undefined,\n };\n}\n\n/** Migrate v6 to v7: rewrite each colId from a full PTableColumnSpec to its\n * compact PTableColumnId (drops annotations/spec body, ~16× smaller per column). */\nfunction migrateV6toV7(state: PlDataTableStateV2V6): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: state.stateCache.map(\n (entry): PlDataTableStateV2CacheEntry => ({\n ...entry,\n gridState: shrinkV6GridState(entry.gridState),\n }),\n ),\n pTableParams: state.pTableParams,\n };\n}\n\n/** Convert a v6 fat colId (canonicalized PTableColumnSpec) to a v7 compact colId\n * (canonicalized PTableColumnId). The row-number sentinel is a string literal,\n * not a spec — pass it through unchanged. */\nfunction shrinkV6ColId(json: PlDataTableV6ColIdJson): PlTableColumnIdJson {\n const parsed: unknown = parseJsonSafely(json);\n if (!isNil(parsed) && typeof parsed === \"object\" && \"type\" in parsed && \"id\" in parsed) {\n return canonicalizeJson(getPTableColumnId(parsed as PTableColumnSpec));\n }\n return json as unknown as PlTableColumnIdJson;\n}\n\nfunction shrinkV6GridState(gridState: PlDataTableGridStateV6): PlDataTableGridStateCore {\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(shrinkV6ColId) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: shrinkV6ColId(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(shrinkV6ColId) }\n : undefined,\n };\n}\n\n/** Migrate v4 state to v6: convert per-column filters to tree-based format (skips v5). */\nfunction migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDataTableStateV2V6 {\n let idCounter = 0;\n const nextId = () => ++idCounter;\n\n const migratedCache: PlDataTableStateV2V6CacheEntry[] = state.stateCache.map((entry) => {\n const leaves: PlDataTableFiltersWithMeta[\"filters\"] = [];\n for (const f of entry.filtersState) {\n if (f.filter !== null && !f.filter.disabled) {\n const column = canonicalizeJson(f.id);\n leaves.push(migrateTableFilter(column, f.filter.value, nextId));\n }\n }\n const filtersState: PlDataTableFiltersWithMeta | null =\n leaves.length > 0 ? { id: nextId(), type: \"and\", filters: leaves } : null;\n\n return {\n sourceId: entry.sourceId,\n gridState: entry.gridState,\n sheetsState: entry.sheetsState,\n filtersState,\n defaultFiltersState: null,\n };\n });\n\n const oldSourceId = state.pTableParams.sourceId;\n const currentCache = oldSourceId\n ? migratedCache.find((e) => e.sourceId === oldSourceId)\n : undefined;\n\n return {\n version: 6,\n stateCache: migratedCache,\n pTableParams:\n currentCache && oldSourceId\n ? {\n sourceId: oldSourceId,\n hiddenColIds:\n state.pTableParams.hiddenColIds?.map((id) => ({ type: \"column\" as const, id })) ??\n null,\n filters: distillFilterSpec(currentCache.filtersState),\n defaultFilters: null,\n sorting: state.pTableParams.sorting,\n }\n : createDefaultPTableParams(),\n };\n}\n\n/** Migrate a single per-column PlTableFilter to a tree-based FilterSpec node */\nfunction migrateTableFilter(\n column: CanonicalizedJson<PTableColumnId>,\n filter: PlTableFilter,\n nextId: () => number,\n): PlDataTableFiltersWithMeta[\"filters\"][number] {\n const id = nextId();\n switch (filter.type) {\n case \"isNA\":\n return { id, type: \"isNA\", column };\n case \"isNotNA\":\n return { id, type: \"isNotNA\", column };\n case \"number_equals\":\n return { id, type: \"equal\", column, x: filter.reference };\n case \"number_notEquals\":\n return { id, type: \"notEqual\", column, x: filter.reference };\n case \"number_greaterThan\":\n return { id, type: \"greaterThan\", column, x: filter.reference };\n case \"number_greaterThanOrEqualTo\":\n return { id, type: \"greaterThanOrEqual\", column, x: filter.reference };\n case \"number_lessThan\":\n return { id, type: \"lessThan\", column, x: filter.reference };\n case \"number_lessThanOrEqualTo\":\n return { id, type: \"lessThanOrEqual\", column, x: filter.reference };\n case \"number_between\":\n return {\n id,\n type: \"and\",\n filters: [\n filter.includeLowerBound\n ? { id: nextId(), type: \"greaterThanOrEqual\" as const, column, x: filter.lowerBound }\n : { id: nextId(), type: \"greaterThan\" as const, column, x: filter.lowerBound },\n filter.includeUpperBound\n ? { id: nextId(), type: \"lessThanOrEqual\" as const, column, x: filter.upperBound }\n : { id: nextId(), type: \"lessThan\" as const, column, x: filter.upperBound },\n ],\n };\n case \"string_equals\":\n return { id, type: \"patternEquals\", column, value: filter.reference };\n case \"string_notEquals\":\n return { id, type: \"patternNotEquals\", column, value: filter.reference };\n case \"string_contains\":\n return { id, type: \"patternContainSubsequence\", column, value: filter.reference };\n case \"string_doesNotContain\":\n return { id, type: \"patternNotContainSubsequence\", column, value: filter.reference };\n case \"string_matches\":\n return { id, type: \"patternMatchesRegularExpression\", column, value: filter.reference };\n case \"string_doesNotMatch\":\n return {\n id,\n type: \"not\",\n filter: {\n id: nextId(),\n type: \"patternMatchesRegularExpression\",\n column,\n value: filter.reference,\n },\n };\n case \"string_containsFuzzyMatch\":\n return {\n id,\n type: \"patternFuzzyContainSubsequence\",\n column,\n value: filter.reference,\n maxEdits: filter.maxEdits,\n substitutionsOnly: filter.substitutionsOnly,\n ...(filter.wildcard !== undefined ? { wildcard: filter.wildcard } : {}),\n };\n }\n}\n\nexport function createDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n filters: null,\n defaultFilters: null,\n sorting: [],\n };\n}\n\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: [],\n pTableParams: createDefaultPTableParams(),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state-migration.js","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport {\n canonicalizeJson,\n getPTableColumnId,\n parseJsonSafely,\n} from \"@milaboratories/pl-model-common\";\nimport { distillFilterSpec } from \"../../filters\";\nimport type { PlDataTableFilterState, PlTableFilter } from \"./typesV4\";\nimport type {\n PlDataTableFiltersWithMeta,\n PlDataTableGridStateCore,\n PlDataTableSheetState,\n PlDataTableStateV2CacheEntry,\n PlDataTableStateV2Normalized,\n PlTableColumnIdJson,\n PTableParamsV2,\n} from \"./typesV7\";\nimport type {\n PlDataTableGridStateV6,\n PlDataTableStateV2V6,\n PlDataTableStateV2V6CacheEntry,\n PlDataTableV6ColIdJson,\n} from \"./typesV6\";\nimport type {\n PlDataTableGridStateV5,\n PlDataTableV5ColIdJson,\n PlDataTableV5ColIdWrapper,\n} from \"./typesV5\";\nimport { isNil } from \"es-toolkit\";\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2;\n }\n | {\n version: 4;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV6;\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n /** Old format; only fields used in migration are typed */\n pTableParams: {\n sourceId: string | null;\n hiddenColIds: PObjectId[] | null;\n sorting: PTableSorting[];\n };\n }\n // v5 stored colIds as `{source, labeled}` wrappers; only the gridState shape differs.\n | {\n version: 5;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV5;\n sheetsState: PlDataTableSheetState[];\n filtersState: null | PlDataTableFiltersWithMeta;\n defaultFiltersState: null | PlDataTableFiltersWithMeta;\n searchString?: string;\n }[];\n pTableParams: PTableParamsV2;\n }\n // v6 stored colIds as canonicalized full `PTableColumnSpec` (including\n // annotations + `pl7.app/trace`). v7 strips down to `PTableColumnId`.\n | PlDataTableStateV2V6\n // Normalized state\n | PlDataTableStateV2Normalized;\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(\n state: PlDataTableStateV2 | undefined,\n): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!(\"version\" in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: createDefaultPTableParams(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v4 -> v6: migrate per-column filters to tree-based format (skips v5).\n // v4 gridState already used bare PTableColumnSpec colIds, so we jump\n // straight to v6 without going through the v5 wrapper format.\n if (state.version === 4) {\n state = migrateV4toV6(state);\n }\n // v5 -> v6: unwrap `{source, labeled}` colIds in gridState back to bare PTableColumnSpec.\n if (state.version === 5) {\n state = migrateV5toV6(state);\n }\n // v6 -> v7: shrink colIds from full PTableColumnSpec to PTableColumnId.\n if (state.version === 6) {\n state = migrateV6toV7(state);\n }\n return state;\n}\n\n/** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */\nfunction migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDataTableStateV2V6 {\n // pTableParams reset: v5 stored DiscoveredPColumnId-based hiddenColIds with\n // empty-array fields (e.g. `{column, path: [], columnQualifications: [], ...}`).\n // v6 distills empty fields, so the same logical column serialises differently\n // and lookups would silently miss every previously-hidden discovered column.\n // gridState colIds are derived from PTableColumnSpec and unaffected.\n return {\n version: 6,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n gridState: unwrapV5GridState(entry.gridState),\n })),\n pTableParams: createDefaultPTableParams(),\n };\n}\n\n/** Convert v5 wrapped colId JSON to bare PTableColumnSpec JSON, taking `.source`.\n * gridState colIds may include the row-number sentinel (a JSON-stringified\n * literal, not a wrapped spec) — those pass through unchanged. */\nfunction unwrapV5ColId(json: string): string {\n const parsed: unknown = parseJsonSafely(json as CanonicalizedJson<unknown>);\n return !isNil(parsed) && typeof parsed === \"object\" && \"source\" in parsed\n ? canonicalizeJson((parsed as PlDataTableV5ColIdWrapper).source)\n : json;\n}\n\nfunction unwrapV5GridState(gridState: PlDataTableGridStateV5): PlDataTableGridStateV6 {\n const unwrapAs = (json: PlDataTableV5ColIdJson) => unwrapV5ColId(json) as PlDataTableV6ColIdJson;\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(unwrapAs) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: unwrapAs(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(unwrapAs) }\n : undefined,\n };\n}\n\n/** Migrate v6 to v7: rewrite each colId from a full PTableColumnSpec to its\n * compact PTableColumnId (drops annotations/spec body, ~16× smaller per column). */\nfunction migrateV6toV7(state: PlDataTableStateV2V6): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: state.stateCache.map(\n (entry): PlDataTableStateV2CacheEntry => ({\n ...entry,\n gridState: shrinkV6GridState(entry.gridState),\n }),\n ),\n pTableParams: state.pTableParams,\n };\n}\n\n/** Convert a v6 fat colId (canonicalized PTableColumnSpec) to a v7 compact colId\n * (canonicalized PTableColumnId). The row-number sentinel is a string literal,\n * not a spec — pass it through unchanged. */\nfunction shrinkV6ColId(json: PlDataTableV6ColIdJson): PlTableColumnIdJson {\n const parsed: unknown = parseJsonSafely(json);\n if (!isNil(parsed) && typeof parsed === \"object\" && \"type\" in parsed && \"id\" in parsed) {\n return canonicalizeJson(getPTableColumnId(parsed as PTableColumnSpec));\n }\n return json as unknown as PlTableColumnIdJson;\n}\n\nfunction shrinkV6GridState(gridState: PlDataTableGridStateV6): PlDataTableGridStateCore {\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(shrinkV6ColId) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: shrinkV6ColId(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(shrinkV6ColId) }\n : undefined,\n };\n}\n\n/** Migrate v4 state to v6: convert per-column filters to tree-based format (skips v5). */\nfunction migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDataTableStateV2V6 {\n let idCounter = 0;\n const nextId = () => ++idCounter;\n\n const migratedCache: PlDataTableStateV2V6CacheEntry[] = state.stateCache.map((entry) => {\n const leaves: PlDataTableFiltersWithMeta[\"filters\"] = [];\n for (const f of entry.filtersState) {\n if (f.filter !== null && !f.filter.disabled) {\n const column = canonicalizeJson(f.id);\n leaves.push(migrateTableFilter(column, f.filter.value, nextId));\n }\n }\n const filtersState: PlDataTableFiltersWithMeta | null =\n leaves.length > 0 ? { id: nextId(), type: \"and\", filters: leaves } : null;\n\n return {\n sourceId: entry.sourceId,\n gridState: entry.gridState,\n sheetsState: entry.sheetsState,\n filtersState,\n defaultFiltersState: null,\n };\n });\n\n const oldSourceId = state.pTableParams.sourceId;\n const currentCache = oldSourceId\n ? migratedCache.find((e) => e.sourceId === oldSourceId)\n : undefined;\n\n return {\n version: 6,\n stateCache: migratedCache,\n pTableParams:\n currentCache && oldSourceId\n ? {\n sourceId: oldSourceId,\n hiddenColIds:\n state.pTableParams.hiddenColIds?.map((id) => ({ type: \"column\" as const, id })) ??\n null,\n filters: distillFilterSpec(currentCache.filtersState),\n defaultFilters: null,\n sorting: state.pTableParams.sorting,\n }\n : createDefaultPTableParams(),\n };\n}\n\n/** Migrate a single per-column PlTableFilter to a tree-based FilterSpec node */\nfunction migrateTableFilter(\n column: CanonicalizedJson<PTableColumnId>,\n filter: PlTableFilter,\n nextId: () => number,\n): PlDataTableFiltersWithMeta[\"filters\"][number] {\n const id = nextId();\n switch (filter.type) {\n case \"isNA\":\n return { id, type: \"isNA\", column };\n case \"isNotNA\":\n return { id, type: \"isNotNA\", column };\n case \"number_equals\":\n return { id, type: \"equal\", column, x: filter.reference };\n case \"number_notEquals\":\n return { id, type: \"notEqual\", column, x: filter.reference };\n case \"number_greaterThan\":\n return { id, type: \"greaterThan\", column, x: filter.reference };\n case \"number_greaterThanOrEqualTo\":\n return { id, type: \"greaterThanOrEqual\", column, x: filter.reference };\n case \"number_lessThan\":\n return { id, type: \"lessThan\", column, x: filter.reference };\n case \"number_lessThanOrEqualTo\":\n return { id, type: \"lessThanOrEqual\", column, x: filter.reference };\n case \"number_between\":\n return {\n id,\n type: \"and\",\n filters: [\n filter.includeLowerBound\n ? { id: nextId(), type: \"greaterThanOrEqual\" as const, column, x: filter.lowerBound }\n : { id: nextId(), type: \"greaterThan\" as const, column, x: filter.lowerBound },\n filter.includeUpperBound\n ? { id: nextId(), type: \"lessThanOrEqual\" as const, column, x: filter.upperBound }\n : { id: nextId(), type: \"lessThan\" as const, column, x: filter.upperBound },\n ],\n };\n case \"string_equals\":\n return { id, type: \"patternEquals\", column, value: filter.reference };\n case \"string_notEquals\":\n return { id, type: \"patternNotEquals\", column, value: filter.reference };\n case \"string_contains\":\n return { id, type: \"patternContainSubsequence\", column, value: filter.reference };\n case \"string_doesNotContain\":\n return { id, type: \"patternNotContainSubsequence\", column, value: filter.reference };\n case \"string_matches\":\n return { id, type: \"patternMatchesRegularExpression\", column, value: filter.reference };\n case \"string_doesNotMatch\":\n return {\n id,\n type: \"not\",\n filter: {\n id: nextId(),\n type: \"patternMatchesRegularExpression\",\n column,\n value: filter.reference,\n },\n };\n case \"string_containsFuzzyMatch\":\n return {\n id,\n type: \"patternFuzzyContainSubsequence\",\n column,\n value: filter.reference,\n maxEdits: filter.maxEdits,\n substitutionsOnly: filter.substitutionsOnly,\n ...(filter.wildcard !== undefined ? { wildcard: filter.wildcard } : {}),\n };\n }\n}\n\nexport function createDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n filters: null,\n defaultFilters: null,\n sorting: [],\n };\n}\n\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 7,\n stateCache: [],\n pTableParams: createDefaultPTableParams(),\n };\n}\n"],"mappings":"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"}
|
|
@@ -118,5 +118,5 @@ type PlTableFilterString = PlTableFilterCommon | PlTableFilterStringEquals | PlT
|
|
|
118
118
|
/** All PlTableFilters filter entries */
|
|
119
119
|
type PlTableFilter = PlTableFilterNumber | PlTableFilterString;
|
|
120
120
|
//#endregion
|
|
121
|
-
export { PlDataTableFilterState };
|
|
121
|
+
export { PlDataTableFilterState, PlTableFilter, PlTableFilterCommon, PlTableFilterIsNA, PlTableFilterIsNotNA, PlTableFilterNumber, PlTableFilterNumberBetween, PlTableFilterNumberEquals, PlTableFilterNumberGreaterThan, PlTableFilterNumberGreaterThanOrEqualTo, PlTableFilterNumberLessThan, PlTableFilterNumberLessThanOrEqualTo, PlTableFilterNumberNotEquals, PlTableFilterString, PlTableFilterStringContains, PlTableFilterStringContainsFuzzyMatch, PlTableFilterStringDoesNotContain, PlTableFilterStringDoesNotMatch, PlTableFilterStringEquals, PlTableFilterStringMatches, PlTableFilterStringNotEquals };
|
|
122
122
|
//# sourceMappingURL=typesV4.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesV4.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV4.ts"],"mappings":";;;KAEY,sBAAA;EACV,EAAA,EAAI,cAAA;EACJ,UAAA;EACA,MAAA;IACE,KAAA,EAAO,
|
|
1
|
+
{"version":3,"file":"typesV4.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV4.ts"],"mappings":";;;KAEY,sBAAA;EACV,EAAA,EAAI,cAAA;EACJ,UAAA;EACA,MAAA;IACE,KAAA,EAAO,aAAa;IACpB,QAAA;EAAA;AAAA;;KAKQ,oBAAA;EANR,qBAQF,IAAI;AAAA;;KAIM,iBAAA;EANA,qBAQV,IAAI;AAAA;;KAIM,mBAAA,GAAsB,oBAAA,GAAuB,iBAAiB;AAN1E;AAAA,KASY,yBAAA;uBAEV,IAAA,mBATI;EAWJ,SAAS;AAAA;;KAIC,4BAAA;EAX8D,qBAaxE,IAAA,sBAVmC;EAYnC,SAAS;AAAA;AARA;AAAA,KAYC,8BAAA;EAR4B,qBAUtC,IAAA,wBARA;EAUA,SAAS;AAAA;;KAIC,uCAAA;EANV,qBAQA,IAAA,iCAFU;EAIV,SAAS;AAAA;;KAIC,2BAAA;EAAA,qBAEV,IAAA;EAEA,SAAS;AAAA;AAIX;AAAA,KAAY,oCAAA;uBAEV,IAAA,8BAES;EAAT,SAAS;AAAA;;KAIC,0BAAA;EAEV,qBAAA,IAAA,oBAIA;EAFA,UAAA,UAMA;EAJA,iBAAA,WAIiB;EAFjB,UAAA,UAM6B;EAJ7B,iBAAA;AAAA;;KAIU,mBAAA,GACR,mBAAA,GACA,yBAAA,GACA,4BAAA,GACA,8BAAA,GACA,uCAAA,GACA,2BAAA,GACA,oCAAA,GACA,0BAAA;;KAKQ,yBAAA;EALR,qBAOF,IAAA,mBAP4B;EAS5B,SAAS;AAAA;;KAIC,4BAAA;EAhBR,qBAkBF,IAAA,sBAhBE;EAkBF,SAAS;AAAA;AAjBmB;AAAA,KAqBlB,2BAAA;EAhByB,qBAkBnC,IAAA,qBAhBA;EAkBA,SAAS;AAAA;;KAIC,iCAAA;EAdV,qBAgBA,IAAA,2BAVU;EAYV,SAAS;AAAA;;KAIC,0BAAA;EARA,qBAUV,IAAA;EAEA,SAAS;AAAA;AAJX;AAAA,KAQY,+BAAA;uBAEV,IAAA,yBANS;EAQT,SAAS;AAAA;;KAIC,qCAAA;EAJD,qBAMT,IAAA,+BAF+C;EAI/C,SAAA;EAJ+C;;;;EAS/C,QAAA;EAcA;;AAAQ;AAIV;;;;;EATE,iBAAA;EAaE;;;;EARF,QAAA;AAAA;;KAIU,mBAAA,GACR,mBAAA,GACA,yBAAA,GACA,4BAAA,GACA,2BAAA,GACA,iCAAA,GACA,0BAAA,GACA,+BAAA,GACA,qCAAA;;KAKQ,aAAA,GAAgB,mBAAA,GAAsB,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesV5.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV5.ts"],"mappings":";;;;;AAQA;;;;KAAY,yBAAA;EACV,MAAA,EAAQ,gBAAA;EACR,OAAA,EAAS,
|
|
1
|
+
{"version":3,"file":"typesV5.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV5.ts"],"mappings":";;;;;AAQA;;;;KAAY,yBAAA;EACV,MAAA,EAAQ,gBAAA;EACR,OAAA,EAAS,gBAAgB;AAAA;AAAA,KAGf,sBAAA,GAAyB,iBAAiB,CAAC,yBAAA;AAAA,KAE3C,sBAAA;EACV,WAAA;IAAgB,aAAA,EAAe,sBAAA;EAAA;EAC/B,IAAA;IAAS,SAAA;MAAa,KAAA,EAAO,sBAAA;MAAwB,IAAA;IAAA;EAAA;EACrD,gBAAA;IAAqB,YAAA,EAAc,sBAAA;EAAA;AAAA"}
|
|
@@ -36,5 +36,5 @@ type PlDataTableStateV2V6 = {
|
|
|
36
36
|
pTableParams: PTableParamsV2;
|
|
37
37
|
};
|
|
38
38
|
//#endregion
|
|
39
|
-
export { PlDataTableGridStateV6, PlDataTableStateV2V6 };
|
|
39
|
+
export { PlDataTableGridStateV6, PlDataTableStateV2V6, PlDataTableStateV2V6CacheEntry, PlDataTableV6ColIdJson };
|
|
40
40
|
//# sourceMappingURL=typesV6.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesV6.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV6.ts"],"mappings":";;;;;;AAQA;;;KAAY,sBAAA,GAAyB,
|
|
1
|
+
{"version":3,"file":"typesV6.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV6.ts"],"mappings":";;;;;;AAQA;;;KAAY,sBAAA,GAAyB,iBAAiB,CAAC,gBAAA;AAAA,KAE3C,sBAAA;EACV,WAAA;IAAgB,aAAA,EAAe,sBAAA;EAAA;EAC/B,IAAA;IAAS,SAAA;MAAa,KAAA,EAAO,sBAAA;MAAwB,IAAA;IAAA;EAAA;EACrD,gBAAA;IAAqB,YAAA,EAAc,sBAAA;EAAA;AAAA;AAAA,KAGzB,8BAAA;EACV,QAAA;EACA,SAAA,EAAW,sBAAA;EACX,WAAA,EAAa,qBAAA;EACb,YAAA,SAAqB,0BAAA;EACrB,mBAAA,SAA4B,0BAAA;EAC5B,YAAA;AAAA;AAAA,KAGU,oBAAA;EACV,OAAA;EACA,UAAA,EAAY,8BAAA;EACZ,YAAA,EAAc,cAAc;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesV7.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV7.ts"],"mappings":";;;;;KAeY,mBAAA,GAAsB,
|
|
1
|
+
{"version":3,"file":"typesV7.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV7.ts"],"mappings":";;;;;KAeY,mBAAA,GAAsB,iBAAiB,CAAC,cAAA;AAAA,KAExC,wBAAA;iCAEV,WAAA;IAJ6B,0BAM3B,aAAA,EAAe,mBAAA;EAAA,GAN+C;EAShE,IAAA;IAPkC,6CAShC,SAAA;MALe,sCAOb,KAAA,EAAO,mBAAA,EAQK;MANZ,IAAA;IAAA;EAAA,GATF;EAaF,gBAAA;IAVA,mCAYE,YAAA,EAAc,mBAAA;EAAA;AAAA;AAAA,KAIN,gBAAA;EANV,8BAQA,IAAA,EAAM,QAAA,EANU;EAQhB,OAAA,EAAS,cAAc,qBARY;EAUnC,YAAA;AAAA;AAAA,KAGU,qBAAA;EALa,qBAOvB,MAAA,EAAQ,MAAM,EATR;EAWN,KAAA;AAAA;;KAIU,qBAAA;EACV,EAAA;EACA,MAAA;EACA,UAAA;EACA,YAAA;AAAA;AAAA,KAEU,yBAAA,GAA4B,gBAAA,CAAe,iBAAA,CAAkB,cAAA;AAAA,KAC7D,kBAAA,GAAqB,cAAc,CAAC,yBAAA;AAAA,KACpC,0BAAA,GAA6B,cAAA,CACvC,yBAAA,EACA,qBAAA;AAAA,KAGU,4BAAA;EAjBL,iDAmBL,QAAA,UAf+B;EAiB/B,SAAA,EAAW,wBAAA,EAjBoB;EAmB/B,WAAA,EAAa,qBAAA,IAjBb;EAmBA,YAAA,SAAqB,0BAAA,EAjBrB;EAmBA,mBAAA,SAA4B,0BAAA,EAnBhB;EAqBZ,YAAA;AAAA;AAAA,KAGU,cAAA;EAEN,QAAA;EACA,YAAA;EACA,OAAA;EACA,OAAA;EACA,cAAA;AAAA;EAGA,QAAA;EACA,YAAA,SAAqB,cAAA;EACrB,OAAA,EAAS,aAAA;EACT,OAAA,SAAgB,kBAAA;EAChB,cAAA,SAAuB,kBAAA;AAAA;AAAA,KAGjB,4BAAA;EArCqB,2BAuC/B,OAAA,KAtCU;EAwCV,UAAA,EAAY,4BAAA;EAEZ,YAAA,EAAc,cAAc;AAAA;;KAIlB,gBAAA;EA9C2C,iDAgDrD,QAAA,iBA/CA;EAiDA,eAAA,GAAkB,YAAA,EAhDG;EAkDrB,gBAAA,GAAmB,YAAA,EA/CT;EAiDV,kBAAA,GAAqB,YAAA;EAErB,cAAA,GAAiB,GAAA,GAAM,kBAAA;AAAA;AAAA,KAGb,oBAAA;EA5CkB,mDA8C5B,OAAA,GAAU,kBAAA,EA9C4C;EAiDtD,OAAA,GAAU,aAAA;EAvDV;;;;;EA8DA,mBAAA,IAAuB,IAAA,EAAM,gBAAA;EAxD7B;;;;AAEY;AAGd;;;;;;EAgEE,YAAA;AAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
const require_column_collection_builder = require("../../columns/column_collection_builder.cjs");
|
|
3
2
|
const require_ctx_column_sources = require("../../columns/ctx_column_sources.cjs");
|
|
4
3
|
const require_filter_discovery = require("./filter_discovery.cjs");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build_dataset_options.cjs","names":["buildRefMap","ResultPoolColumnSnapshotProvider","collectCtxColumnSnapshotProviders","ColumnCollectionBuilder","findFilterColumns","filterMatchesToOptions","findEnrichmentColumns","enrichmentVariantsToRefs"],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type { MultiColumnSelector, Option, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport { multiColumnSelectorsToPredicate } from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { AnchoredColumnCollection } from \"../../columns/column_collection_builder\";\nimport { ColumnCollectionBuilder } from \"../../columns/column_collection_builder\";\nimport {\n ResultPoolColumnSnapshotProvider,\n collectCtxColumnSnapshotProviders,\n} from \"../../columns/ctx_column_sources\";\nimport type { DatasetOption } from \"./dataset_selection\";\nimport { buildRefMap, filterMatchesToOptions, findFilterColumns } from \"./filter_discovery\";\nimport { enrichmentVariantsToRefs, findEnrichmentColumns } from \"./enrichment_discovery\";\n\ntype SpecPredicateOption =\n | MultiColumnSelector\n | MultiColumnSelector[]\n | ((spec: PObjectSpec) => boolean);\n\nfunction toPredicate(opt: SpecPredicateOption | undefined): (spec: PObjectSpec) => boolean {\n if (opt === undefined) return () => true;\n return typeof opt === \"function\" ? opt : multiColumnSelectorsToPredicate(opt);\n}\n\nexport type BuildDatasetOptions = {\n /** Which result pool columns qualify as datasets. Defaults to all. */\n primary?: SpecPredicateOption;\n /**\n * Restricts which result pool columns are considered as filters. Intersected\n * with the built-in `pl7.app/isSubset: \"true\"` constraint. Defaults to\n * accept-all.\n */\n filter?: SpecPredicateOption;\n /**\n * Formatting options forwarded to label derivation for both filter and\n * enrichment rows. `formatters.native` on the filter path is overridden\n * — see `FilterMatchOptions.labelOptions`.\n */\n labelOptions?: DeriveLabelsOptions;\n /**\n * Enables enrichment discovery and filters hits attached to\n * `DatasetOption.enrichments`. Use `() => true` to accept all; omit to disable.\n */\n withEnrichments?: SpecPredicateOption;\n /** Maximum linker hops considered. Only used when `withEnrichments` is set. */\n enrichmentMaxHops?: number;\n};\n\n/**\n * Usage:\n * ```ts\n * .output(\"datasetOptions\", (ctx) => buildDatasetOptions(ctx))\n * ```\n */\nexport function buildDatasetOptions(\n ctx: RenderCtxBase,\n opts?: BuildDatasetOptions,\n): DatasetOption[] | undefined {\n const primaryPredicate = toPredicate(opts?.primary);\n const filterPredicate = toPredicate(opts?.filter);\n\n const options = ctx.resultPool.getOptions(primaryPredicate, { refsWithEnrichments: true });\n if (options.length === 0) return [];\n\n const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);\n const pframeSpec = ctx.getService(\"pframeSpec\");\n\n const withEnrichments = opts?.withEnrichments ?? false;\n const filterSource = new ResultPoolColumnSnapshotProvider(ctx.resultPool);\n // Hoisted out of the per-option loop: collectCtxColumnSnapshotProviders\n // walks the entire output tree, so calling it once per dataset option would\n // be O(N × tree).\n const enrichmentSources = withEnrichments ? collectCtxColumnSnapshotProviders(ctx) : undefined;\n\n return options.map((primary: Option): DatasetOption => {\n const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);\n if (!datasetSpec) return { primary };\n\n // Allocations happen inside try so a throw on the second build()\n // still disposes the first collection.\n let filterCollection: AnchoredColumnCollection | undefined;\n let enrichmentCollection: AnchoredColumnCollection | undefined;\n try {\n // ResultPoolColumnSnapshotProvider is always complete;\n // allowPartialColumnList narrows the return type to non-undefined.\n filterCollection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(filterSource)\n .build({ anchors: { main: datasetSpec }, allowPartialColumnList: true });\n\n enrichmentCollection =\n enrichmentSources !== undefined\n ? new ColumnCollectionBuilder(pframeSpec)\n .addSources(enrichmentSources)\n .build({ anchors: { main: datasetSpec } })\n : undefined;\n\n const filterMatches = findFilterColumns(filterCollection).filter((m) =>\n filterPredicate(m.column.spec),\n );\n const filters =\n filterMatches.length === 0\n ? undefined\n : filterMatchesToOptions(filterMatches, {\n refsByObjectId: refMap,\n datasetSpec,\n labelOptions: opts?.labelOptions,\n });\n\n let enrichments;\n if (enrichmentCollection && withEnrichments) {\n const enrichmentVariants = findEnrichmentColumns(enrichmentCollection, {\n maxHops: opts?.enrichmentMaxHops,\n ...(typeof withEnrichments === \"function\"\n ? { predicate: withEnrichments }\n : { include: withEnrichments }),\n });\n if (enrichmentVariants.length > 0) {\n enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);\n }\n }\n\n return {\n primary,\n ...(filters !== undefined && filters.length > 0 ? { filters } : {}),\n ...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),\n };\n } finally {\n filterCollection?.dispose();\n enrichmentCollection?.dispose();\n }\n });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"build_dataset_options.cjs","names":["buildRefMap","ResultPoolColumnSnapshotProvider","collectCtxColumnSnapshotProviders","ColumnCollectionBuilder","findFilterColumns","filterMatchesToOptions","findEnrichmentColumns","enrichmentVariantsToRefs"],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type { MultiColumnSelector, Option, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport { multiColumnSelectorsToPredicate } from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { AnchoredColumnCollection } from \"../../columns/column_collection_builder\";\nimport { ColumnCollectionBuilder } from \"../../columns/column_collection_builder\";\nimport {\n ResultPoolColumnSnapshotProvider,\n collectCtxColumnSnapshotProviders,\n} from \"../../columns/ctx_column_sources\";\nimport type { DatasetOption } from \"./dataset_selection\";\nimport { buildRefMap, filterMatchesToOptions, findFilterColumns } from \"./filter_discovery\";\nimport { enrichmentVariantsToRefs, findEnrichmentColumns } from \"./enrichment_discovery\";\n\ntype SpecPredicateOption =\n | MultiColumnSelector\n | MultiColumnSelector[]\n | ((spec: PObjectSpec) => boolean);\n\nfunction toPredicate(opt: SpecPredicateOption | undefined): (spec: PObjectSpec) => boolean {\n if (opt === undefined) return () => true;\n return typeof opt === \"function\" ? opt : multiColumnSelectorsToPredicate(opt);\n}\n\nexport type BuildDatasetOptions = {\n /** Which result pool columns qualify as datasets. Defaults to all. */\n primary?: SpecPredicateOption;\n /**\n * Restricts which result pool columns are considered as filters. Intersected\n * with the built-in `pl7.app/isSubset: \"true\"` constraint. Defaults to\n * accept-all.\n */\n filter?: SpecPredicateOption;\n /**\n * Formatting options forwarded to label derivation for both filter and\n * enrichment rows. `formatters.native` on the filter path is overridden\n * — see `FilterMatchOptions.labelOptions`.\n */\n labelOptions?: DeriveLabelsOptions;\n /**\n * Enables enrichment discovery and filters hits attached to\n * `DatasetOption.enrichments`. Use `() => true` to accept all; omit to disable.\n */\n withEnrichments?: SpecPredicateOption;\n /** Maximum linker hops considered. Only used when `withEnrichments` is set. */\n enrichmentMaxHops?: number;\n};\n\n/**\n * Usage:\n * ```ts\n * .output(\"datasetOptions\", (ctx) => buildDatasetOptions(ctx))\n * ```\n */\nexport function buildDatasetOptions(\n ctx: RenderCtxBase,\n opts?: BuildDatasetOptions,\n): DatasetOption[] | undefined {\n const primaryPredicate = toPredicate(opts?.primary);\n const filterPredicate = toPredicate(opts?.filter);\n\n const options = ctx.resultPool.getOptions(primaryPredicate, { refsWithEnrichments: true });\n if (options.length === 0) return [];\n\n const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);\n const pframeSpec = ctx.getService(\"pframeSpec\");\n\n const withEnrichments = opts?.withEnrichments ?? false;\n const filterSource = new ResultPoolColumnSnapshotProvider(ctx.resultPool);\n // Hoisted out of the per-option loop: collectCtxColumnSnapshotProviders\n // walks the entire output tree, so calling it once per dataset option would\n // be O(N × tree).\n const enrichmentSources = withEnrichments ? collectCtxColumnSnapshotProviders(ctx) : undefined;\n\n return options.map((primary: Option): DatasetOption => {\n const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);\n if (!datasetSpec) return { primary };\n\n // Allocations happen inside try so a throw on the second build()\n // still disposes the first collection.\n let filterCollection: AnchoredColumnCollection | undefined;\n let enrichmentCollection: AnchoredColumnCollection | undefined;\n try {\n // ResultPoolColumnSnapshotProvider is always complete;\n // allowPartialColumnList narrows the return type to non-undefined.\n filterCollection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(filterSource)\n .build({ anchors: { main: datasetSpec }, allowPartialColumnList: true });\n\n enrichmentCollection =\n enrichmentSources !== undefined\n ? new ColumnCollectionBuilder(pframeSpec)\n .addSources(enrichmentSources)\n .build({ anchors: { main: datasetSpec } })\n : undefined;\n\n const filterMatches = findFilterColumns(filterCollection).filter((m) =>\n filterPredicate(m.column.spec),\n );\n const filters =\n filterMatches.length === 0\n ? undefined\n : filterMatchesToOptions(filterMatches, {\n refsByObjectId: refMap,\n datasetSpec,\n labelOptions: opts?.labelOptions,\n });\n\n let enrichments;\n if (enrichmentCollection && withEnrichments) {\n const enrichmentVariants = findEnrichmentColumns(enrichmentCollection, {\n maxHops: opts?.enrichmentMaxHops,\n ...(typeof withEnrichments === \"function\"\n ? { predicate: withEnrichments }\n : { include: withEnrichments }),\n });\n if (enrichmentVariants.length > 0) {\n enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);\n }\n }\n\n return {\n primary,\n ...(filters !== undefined && filters.length > 0 ? { filters } : {}),\n ...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),\n };\n } finally {\n filterCollection?.dispose();\n enrichmentCollection?.dispose();\n }\n });\n}\n"],"mappings":";;;;;;AAmBA,SAAS,YAAY,KAAsE;CACzF,IAAI,QAAQ,KAAA,GAAW,aAAa;CACpC,OAAO,OAAO,QAAQ,aAAa,OAAA,GAAA,gCAAA,gCAAA,CAAsC,GAAG;AAC9E;;;;;;;AAgCA,SAAgB,oBACd,KACA,MAC6B;CAC7B,MAAM,mBAAmB,YAAY,MAAM,OAAO;CAClD,MAAM,kBAAkB,YAAY,MAAM,MAAM;CAEhD,MAAM,UAAU,IAAI,WAAW,WAAW,kBAAkB,EAAE,qBAAqB,KAAK,CAAC;CACzF,IAAI,QAAQ,WAAW,GAAG,OAAO,CAAC;CAElC,MAAM,SAASA,yBAAAA,YAAY,IAAI,WAAW,SAAS,CAAC,CAAC,OAAO;CAC5D,MAAM,aAAa,IAAI,WAAW,YAAY;CAE9C,MAAM,kBAAkB,MAAM,mBAAmB;CACjD,MAAM,eAAe,IAAIC,2BAAAA,iCAAiC,IAAI,UAAU;CAIxE,MAAM,oBAAoB,kBAAkBC,2BAAAA,kCAAkC,GAAG,IAAI,KAAA;CAErF,OAAO,QAAQ,KAAK,YAAmC;EACrD,MAAM,cAAc,IAAI,WAAW,oBAAoB,QAAQ,GAAG;EAClE,IAAI,CAAC,aAAa,OAAO,EAAE,QAAQ;EAInC,IAAI;EACJ,IAAI;EACJ,IAAI;GAGF,mBAAmB,IAAIC,kCAAAA,wBAAwB,UAAU,CAAC,CACvD,UAAU,YAAY,CAAC,CACvB,MAAM;IAAE,SAAS,EAAE,MAAM,YAAY;IAAG,wBAAwB;GAAK,CAAC;GAEzE,uBACE,sBAAsB,KAAA,IAClB,IAAIA,kCAAAA,wBAAwB,UAAU,CAAC,CACpC,WAAW,iBAAiB,CAAC,CAC7B,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,EAAE,CAAC,IAC3C,KAAA;GAEN,MAAM,gBAAgBC,yBAAAA,kBAAkB,gBAAgB,CAAC,CAAC,QAAQ,MAChE,gBAAgB,EAAE,OAAO,IAAI,CAC/B;GACA,MAAM,UACJ,cAAc,WAAW,IACrB,KAAA,IACAC,yBAAAA,uBAAuB,eAAe;IACpC,gBAAgB;IAChB;IACA,cAAc,MAAM;GACtB,CAAC;GAEP,IAAI;GACJ,IAAI,wBAAwB,iBAAiB;IAC3C,MAAM,qBAAqBC,6BAAAA,sBAAsB,sBAAsB;KACrE,SAAS,MAAM;KACf,GAAI,OAAO,oBAAoB,aAC3B,EAAE,WAAW,gBAAgB,IAC7B,EAAE,SAAS,gBAAgB;IACjC,CAAC;IACD,IAAI,mBAAmB,SAAS,GAC9B,cAAcC,6BAAAA,yBAAyB,oBAAoB,MAAM,YAAY;GAEjF;GAEA,OAAO;IACL;IACA,GAAI,YAAY,KAAA,KAAa,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;IACjE,GAAI,gBAAgB,KAAA,KAAa,YAAY,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;GAC/E;EACF,UAAU;GACR,kBAAkB,QAAQ;GAC1B,sBAAsB,QAAQ;EAChC;CACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build_dataset_options.js","names":[],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type { MultiColumnSelector, Option, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport { multiColumnSelectorsToPredicate } from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { AnchoredColumnCollection } from \"../../columns/column_collection_builder\";\nimport { ColumnCollectionBuilder } from \"../../columns/column_collection_builder\";\nimport {\n ResultPoolColumnSnapshotProvider,\n collectCtxColumnSnapshotProviders,\n} from \"../../columns/ctx_column_sources\";\nimport type { DatasetOption } from \"./dataset_selection\";\nimport { buildRefMap, filterMatchesToOptions, findFilterColumns } from \"./filter_discovery\";\nimport { enrichmentVariantsToRefs, findEnrichmentColumns } from \"./enrichment_discovery\";\n\ntype SpecPredicateOption =\n | MultiColumnSelector\n | MultiColumnSelector[]\n | ((spec: PObjectSpec) => boolean);\n\nfunction toPredicate(opt: SpecPredicateOption | undefined): (spec: PObjectSpec) => boolean {\n if (opt === undefined) return () => true;\n return typeof opt === \"function\" ? opt : multiColumnSelectorsToPredicate(opt);\n}\n\nexport type BuildDatasetOptions = {\n /** Which result pool columns qualify as datasets. Defaults to all. */\n primary?: SpecPredicateOption;\n /**\n * Restricts which result pool columns are considered as filters. Intersected\n * with the built-in `pl7.app/isSubset: \"true\"` constraint. Defaults to\n * accept-all.\n */\n filter?: SpecPredicateOption;\n /**\n * Formatting options forwarded to label derivation for both filter and\n * enrichment rows. `formatters.native` on the filter path is overridden\n * — see `FilterMatchOptions.labelOptions`.\n */\n labelOptions?: DeriveLabelsOptions;\n /**\n * Enables enrichment discovery and filters hits attached to\n * `DatasetOption.enrichments`. Use `() => true` to accept all; omit to disable.\n */\n withEnrichments?: SpecPredicateOption;\n /** Maximum linker hops considered. Only used when `withEnrichments` is set. */\n enrichmentMaxHops?: number;\n};\n\n/**\n * Usage:\n * ```ts\n * .output(\"datasetOptions\", (ctx) => buildDatasetOptions(ctx))\n * ```\n */\nexport function buildDatasetOptions(\n ctx: RenderCtxBase,\n opts?: BuildDatasetOptions,\n): DatasetOption[] | undefined {\n const primaryPredicate = toPredicate(opts?.primary);\n const filterPredicate = toPredicate(opts?.filter);\n\n const options = ctx.resultPool.getOptions(primaryPredicate, { refsWithEnrichments: true });\n if (options.length === 0) return [];\n\n const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);\n const pframeSpec = ctx.getService(\"pframeSpec\");\n\n const withEnrichments = opts?.withEnrichments ?? false;\n const filterSource = new ResultPoolColumnSnapshotProvider(ctx.resultPool);\n // Hoisted out of the per-option loop: collectCtxColumnSnapshotProviders\n // walks the entire output tree, so calling it once per dataset option would\n // be O(N × tree).\n const enrichmentSources = withEnrichments ? collectCtxColumnSnapshotProviders(ctx) : undefined;\n\n return options.map((primary: Option): DatasetOption => {\n const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);\n if (!datasetSpec) return { primary };\n\n // Allocations happen inside try so a throw on the second build()\n // still disposes the first collection.\n let filterCollection: AnchoredColumnCollection | undefined;\n let enrichmentCollection: AnchoredColumnCollection | undefined;\n try {\n // ResultPoolColumnSnapshotProvider is always complete;\n // allowPartialColumnList narrows the return type to non-undefined.\n filterCollection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(filterSource)\n .build({ anchors: { main: datasetSpec }, allowPartialColumnList: true });\n\n enrichmentCollection =\n enrichmentSources !== undefined\n ? new ColumnCollectionBuilder(pframeSpec)\n .addSources(enrichmentSources)\n .build({ anchors: { main: datasetSpec } })\n : undefined;\n\n const filterMatches = findFilterColumns(filterCollection).filter((m) =>\n filterPredicate(m.column.spec),\n );\n const filters =\n filterMatches.length === 0\n ? undefined\n : filterMatchesToOptions(filterMatches, {\n refsByObjectId: refMap,\n datasetSpec,\n labelOptions: opts?.labelOptions,\n });\n\n let enrichments;\n if (enrichmentCollection && withEnrichments) {\n const enrichmentVariants = findEnrichmentColumns(enrichmentCollection, {\n maxHops: opts?.enrichmentMaxHops,\n ...(typeof withEnrichments === \"function\"\n ? { predicate: withEnrichments }\n : { include: withEnrichments }),\n });\n if (enrichmentVariants.length > 0) {\n enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);\n }\n }\n\n return {\n primary,\n ...(filters !== undefined && filters.length > 0 ? { filters } : {}),\n ...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),\n };\n } finally {\n filterCollection?.dispose();\n enrichmentCollection?.dispose();\n }\n });\n}\n"],"mappings":";;;;;;AAmBA,SAAS,YAAY,KAAsE;
|
|
1
|
+
{"version":3,"file":"build_dataset_options.js","names":[],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type { MultiColumnSelector, Option, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport { multiColumnSelectorsToPredicate } from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport type { AnchoredColumnCollection } from \"../../columns/column_collection_builder\";\nimport { ColumnCollectionBuilder } from \"../../columns/column_collection_builder\";\nimport {\n ResultPoolColumnSnapshotProvider,\n collectCtxColumnSnapshotProviders,\n} from \"../../columns/ctx_column_sources\";\nimport type { DatasetOption } from \"./dataset_selection\";\nimport { buildRefMap, filterMatchesToOptions, findFilterColumns } from \"./filter_discovery\";\nimport { enrichmentVariantsToRefs, findEnrichmentColumns } from \"./enrichment_discovery\";\n\ntype SpecPredicateOption =\n | MultiColumnSelector\n | MultiColumnSelector[]\n | ((spec: PObjectSpec) => boolean);\n\nfunction toPredicate(opt: SpecPredicateOption | undefined): (spec: PObjectSpec) => boolean {\n if (opt === undefined) return () => true;\n return typeof opt === \"function\" ? opt : multiColumnSelectorsToPredicate(opt);\n}\n\nexport type BuildDatasetOptions = {\n /** Which result pool columns qualify as datasets. Defaults to all. */\n primary?: SpecPredicateOption;\n /**\n * Restricts which result pool columns are considered as filters. Intersected\n * with the built-in `pl7.app/isSubset: \"true\"` constraint. Defaults to\n * accept-all.\n */\n filter?: SpecPredicateOption;\n /**\n * Formatting options forwarded to label derivation for both filter and\n * enrichment rows. `formatters.native` on the filter path is overridden\n * — see `FilterMatchOptions.labelOptions`.\n */\n labelOptions?: DeriveLabelsOptions;\n /**\n * Enables enrichment discovery and filters hits attached to\n * `DatasetOption.enrichments`. Use `() => true` to accept all; omit to disable.\n */\n withEnrichments?: SpecPredicateOption;\n /** Maximum linker hops considered. Only used when `withEnrichments` is set. */\n enrichmentMaxHops?: number;\n};\n\n/**\n * Usage:\n * ```ts\n * .output(\"datasetOptions\", (ctx) => buildDatasetOptions(ctx))\n * ```\n */\nexport function buildDatasetOptions(\n ctx: RenderCtxBase,\n opts?: BuildDatasetOptions,\n): DatasetOption[] | undefined {\n const primaryPredicate = toPredicate(opts?.primary);\n const filterPredicate = toPredicate(opts?.filter);\n\n const options = ctx.resultPool.getOptions(primaryPredicate, { refsWithEnrichments: true });\n if (options.length === 0) return [];\n\n const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);\n const pframeSpec = ctx.getService(\"pframeSpec\");\n\n const withEnrichments = opts?.withEnrichments ?? false;\n const filterSource = new ResultPoolColumnSnapshotProvider(ctx.resultPool);\n // Hoisted out of the per-option loop: collectCtxColumnSnapshotProviders\n // walks the entire output tree, so calling it once per dataset option would\n // be O(N × tree).\n const enrichmentSources = withEnrichments ? collectCtxColumnSnapshotProviders(ctx) : undefined;\n\n return options.map((primary: Option): DatasetOption => {\n const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);\n if (!datasetSpec) return { primary };\n\n // Allocations happen inside try so a throw on the second build()\n // still disposes the first collection.\n let filterCollection: AnchoredColumnCollection | undefined;\n let enrichmentCollection: AnchoredColumnCollection | undefined;\n try {\n // ResultPoolColumnSnapshotProvider is always complete;\n // allowPartialColumnList narrows the return type to non-undefined.\n filterCollection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(filterSource)\n .build({ anchors: { main: datasetSpec }, allowPartialColumnList: true });\n\n enrichmentCollection =\n enrichmentSources !== undefined\n ? new ColumnCollectionBuilder(pframeSpec)\n .addSources(enrichmentSources)\n .build({ anchors: { main: datasetSpec } })\n : undefined;\n\n const filterMatches = findFilterColumns(filterCollection).filter((m) =>\n filterPredicate(m.column.spec),\n );\n const filters =\n filterMatches.length === 0\n ? undefined\n : filterMatchesToOptions(filterMatches, {\n refsByObjectId: refMap,\n datasetSpec,\n labelOptions: opts?.labelOptions,\n });\n\n let enrichments;\n if (enrichmentCollection && withEnrichments) {\n const enrichmentVariants = findEnrichmentColumns(enrichmentCollection, {\n maxHops: opts?.enrichmentMaxHops,\n ...(typeof withEnrichments === \"function\"\n ? { predicate: withEnrichments }\n : { include: withEnrichments }),\n });\n if (enrichmentVariants.length > 0) {\n enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);\n }\n }\n\n return {\n primary,\n ...(filters !== undefined && filters.length > 0 ? { filters } : {}),\n ...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),\n };\n } finally {\n filterCollection?.dispose();\n enrichmentCollection?.dispose();\n }\n });\n}\n"],"mappings":";;;;;;AAmBA,SAAS,YAAY,KAAsE;CACzF,IAAI,QAAQ,KAAA,GAAW,aAAa;CACpC,OAAO,OAAO,QAAQ,aAAa,MAAM,gCAAgC,GAAG;AAC9E;;;;;;;AAgCA,SAAgB,oBACd,KACA,MAC6B;CAC7B,MAAM,mBAAmB,YAAY,MAAM,OAAO;CAClD,MAAM,kBAAkB,YAAY,MAAM,MAAM;CAEhD,MAAM,UAAU,IAAI,WAAW,WAAW,kBAAkB,EAAE,qBAAqB,KAAK,CAAC;CACzF,IAAI,QAAQ,WAAW,GAAG,OAAO,CAAC;CAElC,MAAM,SAAS,YAAY,IAAI,WAAW,SAAS,CAAC,CAAC,OAAO;CAC5D,MAAM,aAAa,IAAI,WAAW,YAAY;CAE9C,MAAM,kBAAkB,MAAM,mBAAmB;CACjD,MAAM,eAAe,IAAI,iCAAiC,IAAI,UAAU;CAIxE,MAAM,oBAAoB,kBAAkB,kCAAkC,GAAG,IAAI,KAAA;CAErF,OAAO,QAAQ,KAAK,YAAmC;EACrD,MAAM,cAAc,IAAI,WAAW,oBAAoB,QAAQ,GAAG;EAClE,IAAI,CAAC,aAAa,OAAO,EAAE,QAAQ;EAInC,IAAI;EACJ,IAAI;EACJ,IAAI;GAGF,mBAAmB,IAAI,wBAAwB,UAAU,CAAC,CACvD,UAAU,YAAY,CAAC,CACvB,MAAM;IAAE,SAAS,EAAE,MAAM,YAAY;IAAG,wBAAwB;GAAK,CAAC;GAEzE,uBACE,sBAAsB,KAAA,IAClB,IAAI,wBAAwB,UAAU,CAAC,CACpC,WAAW,iBAAiB,CAAC,CAC7B,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,EAAE,CAAC,IAC3C,KAAA;GAEN,MAAM,gBAAgB,kBAAkB,gBAAgB,CAAC,CAAC,QAAQ,MAChE,gBAAgB,EAAE,OAAO,IAAI,CAC/B;GACA,MAAM,UACJ,cAAc,WAAW,IACrB,KAAA,IACA,uBAAuB,eAAe;IACpC,gBAAgB;IAChB;IACA,cAAc,MAAM;GACtB,CAAC;GAEP,IAAI;GACJ,IAAI,wBAAwB,iBAAiB;IAC3C,MAAM,qBAAqB,sBAAsB,sBAAsB;KACrE,SAAS,MAAM;KACf,GAAI,OAAO,oBAAoB,aAC3B,EAAE,WAAW,gBAAgB,IAC7B,EAAE,SAAS,gBAAgB;IACjC,CAAC;IACD,IAAI,mBAAmB,SAAS,GAC9B,cAAc,yBAAyB,oBAAoB,MAAM,YAAY;GAEjF;GAEA,OAAO;IACL;IACA,GAAI,YAAY,KAAA,KAAa,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;IACjE,GAAI,gBAAgB,KAAA,KAAa,YAAY,SAAS,IAAI,EAAE,YAAY,IAAI,CAAC;GAC/E;EACF,UAAU;GACR,kBAAkB,QAAQ;GAC1B,sBAAsB,QAAQ;EAChC;CACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset_selection.cjs","names":[],"sources":["../../../src/components/PlDatasetSelector/dataset_selection.ts"],"sourcesContent":["import type { LabeledEnrichmentRefs, Option, PrimaryRef } from \"@milaboratories/pl-model-common\";\n\n/** Dataset picker entry: user picks {@link primary}, gets {@link enrichments} attached. */\nexport type DatasetOption = {\n readonly primary: Option;\n readonly filters?: readonly Option[];\n readonly enrichments?: LabeledEnrichmentRefs;\n};\n\n/**\n * Picked dataset bundle emitted by `PlDatasetSelector`. Stored opaquely in\n * block data; block authors unbundle inside their args resolver.\n */\nexport type DatasetSelection = {\n readonly __isDatasetSelection: \"v1\";\n readonly primary: PrimaryRef;\n readonly enrichments?: LabeledEnrichmentRefs;\n};\n\nexport function isDatasetSelection(value: unknown): value is DatasetSelection {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __isDatasetSelection?: unknown }).__isDatasetSelection === \"v1\" &&\n \"primary\" in value\n );\n}\n\nexport function createDatasetSelection(\n primary: PrimaryRef,\n enrichments?: LabeledEnrichmentRefs,\n): DatasetSelection {\n if (enrichments !== undefined && enrichments.length > 0) {\n return { __isDatasetSelection: \"v1\", primary, enrichments };\n }\n return { __isDatasetSelection: \"v1\", primary };\n}\n"],"mappings":";AAmBA,SAAgB,mBAAmB,OAA2C;
|
|
1
|
+
{"version":3,"file":"dataset_selection.cjs","names":[],"sources":["../../../src/components/PlDatasetSelector/dataset_selection.ts"],"sourcesContent":["import type { LabeledEnrichmentRefs, Option, PrimaryRef } from \"@milaboratories/pl-model-common\";\n\n/** Dataset picker entry: user picks {@link primary}, gets {@link enrichments} attached. */\nexport type DatasetOption = {\n readonly primary: Option;\n readonly filters?: readonly Option[];\n readonly enrichments?: LabeledEnrichmentRefs;\n};\n\n/**\n * Picked dataset bundle emitted by `PlDatasetSelector`. Stored opaquely in\n * block data; block authors unbundle inside their args resolver.\n */\nexport type DatasetSelection = {\n readonly __isDatasetSelection: \"v1\";\n readonly primary: PrimaryRef;\n readonly enrichments?: LabeledEnrichmentRefs;\n};\n\nexport function isDatasetSelection(value: unknown): value is DatasetSelection {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __isDatasetSelection?: unknown }).__isDatasetSelection === \"v1\" &&\n \"primary\" in value\n );\n}\n\nexport function createDatasetSelection(\n primary: PrimaryRef,\n enrichments?: LabeledEnrichmentRefs,\n): DatasetSelection {\n if (enrichments !== undefined && enrichments.length > 0) {\n return { __isDatasetSelection: \"v1\", primary, enrichments };\n }\n return { __isDatasetSelection: \"v1\", primary };\n}\n"],"mappings":";AAmBA,SAAgB,mBAAmB,OAA2C;CAC5E,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAA6C,yBAAyB,QACvE,aAAa;AAEjB;AAEA,SAAgB,uBACd,SACA,aACkB;CAClB,IAAI,gBAAgB,KAAA,KAAa,YAAY,SAAS,GACpD,OAAO;EAAE,sBAAsB;EAAM;EAAS;CAAY;CAE5D,OAAO;EAAE,sBAAsB;EAAM;CAAQ;AAC/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset_selection.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/dataset_selection.ts"],"mappings":";;;;KAGY,aAAA;EAAA,SACD,OAAA,EAAS,MAAA;EAAA,SACT,OAAA,YAAmB,MAAA;EAAA,SACnB,WAAA,GAAc,qBAAA;AAAA;;;;;KAOb,gBAAA;EAAA,SACD,oBAAA;EAAA,SACA,OAAA,EAAS,UAAA;EAAA,SACT,WAAA,GAAc,
|
|
1
|
+
{"version":3,"file":"dataset_selection.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/dataset_selection.ts"],"mappings":";;;;KAGY,aAAA;EAAA,SACD,OAAA,EAAS,MAAA;EAAA,SACT,OAAA,YAAmB,MAAA;EAAA,SACnB,WAAA,GAAc,qBAAA;AAAA;;;;;KAOb,gBAAA;EAAA,SACD,oBAAA;EAAA,SACA,OAAA,EAAS,UAAA;EAAA,SACT,WAAA,GAAc,qBAAqB;AAAA;AAAA,iBAG9B,kBAAA,CAAmB,KAAA,YAAiB,KAAA,IAAS,gBAAgB;AAAA,iBAS7D,sBAAA,CACd,OAAA,EAAS,UAAA,EACT,WAAA,GAAc,qBAAA,GACb,gBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset_selection.js","names":[],"sources":["../../../src/components/PlDatasetSelector/dataset_selection.ts"],"sourcesContent":["import type { LabeledEnrichmentRefs, Option, PrimaryRef } from \"@milaboratories/pl-model-common\";\n\n/** Dataset picker entry: user picks {@link primary}, gets {@link enrichments} attached. */\nexport type DatasetOption = {\n readonly primary: Option;\n readonly filters?: readonly Option[];\n readonly enrichments?: LabeledEnrichmentRefs;\n};\n\n/**\n * Picked dataset bundle emitted by `PlDatasetSelector`. Stored opaquely in\n * block data; block authors unbundle inside their args resolver.\n */\nexport type DatasetSelection = {\n readonly __isDatasetSelection: \"v1\";\n readonly primary: PrimaryRef;\n readonly enrichments?: LabeledEnrichmentRefs;\n};\n\nexport function isDatasetSelection(value: unknown): value is DatasetSelection {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __isDatasetSelection?: unknown }).__isDatasetSelection === \"v1\" &&\n \"primary\" in value\n );\n}\n\nexport function createDatasetSelection(\n primary: PrimaryRef,\n enrichments?: LabeledEnrichmentRefs,\n): DatasetSelection {\n if (enrichments !== undefined && enrichments.length > 0) {\n return { __isDatasetSelection: \"v1\", primary, enrichments };\n }\n return { __isDatasetSelection: \"v1\", primary };\n}\n"],"mappings":";AAmBA,SAAgB,mBAAmB,OAA2C;
|
|
1
|
+
{"version":3,"file":"dataset_selection.js","names":[],"sources":["../../../src/components/PlDatasetSelector/dataset_selection.ts"],"sourcesContent":["import type { LabeledEnrichmentRefs, Option, PrimaryRef } from \"@milaboratories/pl-model-common\";\n\n/** Dataset picker entry: user picks {@link primary}, gets {@link enrichments} attached. */\nexport type DatasetOption = {\n readonly primary: Option;\n readonly filters?: readonly Option[];\n readonly enrichments?: LabeledEnrichmentRefs;\n};\n\n/**\n * Picked dataset bundle emitted by `PlDatasetSelector`. Stored opaquely in\n * block data; block authors unbundle inside their args resolver.\n */\nexport type DatasetSelection = {\n readonly __isDatasetSelection: \"v1\";\n readonly primary: PrimaryRef;\n readonly enrichments?: LabeledEnrichmentRefs;\n};\n\nexport function isDatasetSelection(value: unknown): value is DatasetSelection {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __isDatasetSelection?: unknown }).__isDatasetSelection === \"v1\" &&\n \"primary\" in value\n );\n}\n\nexport function createDatasetSelection(\n primary: PrimaryRef,\n enrichments?: LabeledEnrichmentRefs,\n): DatasetSelection {\n if (enrichments !== undefined && enrichments.length > 0) {\n return { __isDatasetSelection: \"v1\", primary, enrichments };\n }\n return { __isDatasetSelection: \"v1\", primary };\n}\n"],"mappings":";AAmBA,SAAgB,mBAAmB,OAA2C;CAC5E,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAA6C,yBAAyB,QACvE,aAAa;AAEjB;AAEA,SAAgB,uBACd,SACA,aACkB;CAClB,IAAI,gBAAgB,KAAA,KAAa,YAAY,SAAS,GACpD,OAAO;EAAE,sBAAsB;EAAM;EAAS;CAAY;CAE5D,OAAO;EAAE,sBAAsB;EAAM;CAAQ;AAC/C"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
const require_derive_distinct_labels = require("../../labels/derive_distinct_labels.cjs");
|
|
3
2
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
4
3
|
//#region src/components/PlDatasetSelector/enrichment_discovery.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrichment_discovery.cjs","names":["Annotation","deriveDistinctLabels"],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import { Annotation, createEnrichmentRef } from \"@milaboratories/pl-model-common\";\nimport type {\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PObjectId,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AnchoredColumnCollection,\n ColumnVariant,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —\n * which the workflow can resolve via bquery. Local-form ids (`resolvePath`)\n * fail this check and are excluded from auto-discovery; prerun/outputs hops\n * must be supplied as resolved `{spec, data}` instead.\n */\nfunction isGloballyAddressable(id: PObjectId): boolean {\n try {\n const decoded = JSON.parse(id);\n return (\n typeof decoded === \"object\" &&\n decoded !== null &&\n decoded.__isRef === true &&\n typeof decoded.blockId === \"string\" &&\n typeof decoded.name === \"string\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(\n collection: AnchoredColumnCollection,\n options?: {\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n },\n): ColumnVariant[] {\n const include =\n options?.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n const variants = collection.findColumnVariants({\n mode: \"enrichment\",\n maxHops: options?.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n });\n const predicate = options?.predicate;\n return variants.filter((v) => {\n if ((v.path?.length ?? 0) === 0) return false;\n if (predicate !== undefined && !predicate(v.column.spec)) return false;\n if (!isGloballyAddressable(v.column.id)) return false;\n if (v.path?.some((p) => !isGloballyAddressable(p.linker.id))) return false;\n return true;\n });\n}\n\n/**\n * Pair each variant with a path-disambiguated label (so export headers stay\n * unique) and carry hit/linker `PObjectId`s through verbatim. Propagates\n * `qualifications.forHit`; `forQueries` is re-derived by the table builder.\n */\nexport function enrichmentVariantsToRefs(\n variants: ColumnVariant[],\n labelOptions?: DeriveLabelsOptions,\n): LabeledEnrichmentRefs {\n if (variants.length === 0) return [];\n\n const entries: Entry[] = variants.map((variant) => ({\n spec: variant.column.spec,\n linkerPath: variant.path?.map((p) => ({ spec: p.linker.spec })),\n qualifications: variant.qualifications,\n }));\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return variants.map((variant, i): LabeledEnrichmentRef => {\n const path: undefined | EnrichmentStep[] = variant.path?.map((step) => ({\n type: \"linker\",\n linker: step.linker.id,\n }));\n return {\n ref: createEnrichmentRef(variant.column.id, {\n path,\n qualifications: variant.qualifications?.forHit,\n }),\n label: labels[i],\n };\n });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"enrichment_discovery.cjs","names":["Annotation","deriveDistinctLabels"],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import { Annotation, createEnrichmentRef } from \"@milaboratories/pl-model-common\";\nimport type {\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PObjectId,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AnchoredColumnCollection,\n ColumnVariant,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —\n * which the workflow can resolve via bquery. Local-form ids (`resolvePath`)\n * fail this check and are excluded from auto-discovery; prerun/outputs hops\n * must be supplied as resolved `{spec, data}` instead.\n */\nfunction isGloballyAddressable(id: PObjectId): boolean {\n try {\n const decoded = JSON.parse(id);\n return (\n typeof decoded === \"object\" &&\n decoded !== null &&\n decoded.__isRef === true &&\n typeof decoded.blockId === \"string\" &&\n typeof decoded.name === \"string\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(\n collection: AnchoredColumnCollection,\n options?: {\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n },\n): ColumnVariant[] {\n const include =\n options?.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n const variants = collection.findColumnVariants({\n mode: \"enrichment\",\n maxHops: options?.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n });\n const predicate = options?.predicate;\n return variants.filter((v) => {\n if ((v.path?.length ?? 0) === 0) return false;\n if (predicate !== undefined && !predicate(v.column.spec)) return false;\n if (!isGloballyAddressable(v.column.id)) return false;\n if (v.path?.some((p) => !isGloballyAddressable(p.linker.id))) return false;\n return true;\n });\n}\n\n/**\n * Pair each variant with a path-disambiguated label (so export headers stay\n * unique) and carry hit/linker `PObjectId`s through verbatim. Propagates\n * `qualifications.forHit`; `forQueries` is re-derived by the table builder.\n */\nexport function enrichmentVariantsToRefs(\n variants: ColumnVariant[],\n labelOptions?: DeriveLabelsOptions,\n): LabeledEnrichmentRefs {\n if (variants.length === 0) return [];\n\n const entries: Entry[] = variants.map((variant) => ({\n spec: variant.column.spec,\n linkerPath: variant.path?.map((p) => ({ spec: p.linker.spec })),\n qualifications: variant.qualifications,\n }));\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return variants.map((variant, i): LabeledEnrichmentRef => {\n const path: undefined | EnrichmentStep[] = variant.path?.map((step) => ({\n type: \"linker\",\n linker: step.linker.id,\n }));\n return {\n ref: createEnrichmentRef(variant.column.id, {\n path,\n qualifications: variant.qualifications?.forHit,\n }),\n label: labels[i],\n };\n });\n}\n"],"mappings":";;;;;;;;;AAyBA,SAAS,sBAAsB,IAAwB;CACrD,IAAI;EACF,MAAM,UAAU,KAAK,MAAM,EAAE;EAC7B,OACE,OAAO,YAAY,YACnB,YAAY,QACZ,QAAQ,YAAY,QACpB,OAAO,QAAQ,YAAY,YAC3B,OAAO,QAAQ,SAAS;CAE5B,QAAQ;EACN,OAAO;CACT;AACF;;;;;;AAOA,SAAgB,sBACd,YACA,SAKiB;CACjB,MAAM,UACJ,SAAS,YAAY,KAAA,IACjB,KAAA,IACA,MAAM,QAAQ,QAAQ,OAAO,IAC3B,QAAQ,UACR,CAAC,QAAQ,OAAO;CACxB,MAAM,WAAW,WAAW,mBAAmB;EAC7C,MAAM;EACN,SAAS,SAAS,WAAW;EAC7B;EACA,SAAS;GACP,EAAE,aAAa,GAAGA,gCAAAA,WAAW,WAAW,OAAO,EAAE;GACjD,EAAE,aAAa,GAAGA,gCAAAA,WAAW,iBAAiB,OAAO,EAAE;GACvD,EAAE,MAAMA,gCAAAA,WAAW,MAAM;EAC3B;CACF,CAAC;CACD,MAAM,YAAY,SAAS;CAC3B,OAAO,SAAS,QAAQ,MAAM;EAC5B,KAAK,EAAE,MAAM,UAAU,OAAO,GAAG,OAAO;EACxC,IAAI,cAAc,KAAA,KAAa,CAAC,UAAU,EAAE,OAAO,IAAI,GAAG,OAAO;EACjE,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,OAAO;EAChD,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC,sBAAsB,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO;EACrE,OAAO;CACT,CAAC;AACH;;;;;;AAOA,SAAgB,yBACd,UACA,cACuB;CACvB,IAAI,SAAS,WAAW,GAAG,OAAO,CAAC;CAOnC,MAAM,SAASC,+BAAAA,qBALU,SAAS,KAAK,aAAa;EAClD,MAAM,QAAQ,OAAO;EACrB,YAAY,QAAQ,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,EAAE;EAC9D,gBAAgB,QAAQ;CAC1B,EAC0C,GAAG,YAAY;CAEzD,OAAO,SAAS,KAAK,SAAS,MAA4B;EACxD,MAAM,OAAqC,QAAQ,MAAM,KAAK,UAAU;GACtE,MAAM;GACN,QAAQ,KAAK,OAAO;EACtB,EAAE;EACF,OAAO;GACL,MAAA,GAAA,gCAAA,oBAAA,CAAyB,QAAQ,OAAO,IAAI;IAC1C;IACA,gBAAgB,QAAQ,gBAAgB;GAC1C,CAAC;GACD,OAAO,OAAO;EAChB;CACF,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrichment_discovery.js","names":[],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import { Annotation, createEnrichmentRef } from \"@milaboratories/pl-model-common\";\nimport type {\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PObjectId,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AnchoredColumnCollection,\n ColumnVariant,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —\n * which the workflow can resolve via bquery. Local-form ids (`resolvePath`)\n * fail this check and are excluded from auto-discovery; prerun/outputs hops\n * must be supplied as resolved `{spec, data}` instead.\n */\nfunction isGloballyAddressable(id: PObjectId): boolean {\n try {\n const decoded = JSON.parse(id);\n return (\n typeof decoded === \"object\" &&\n decoded !== null &&\n decoded.__isRef === true &&\n typeof decoded.blockId === \"string\" &&\n typeof decoded.name === \"string\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(\n collection: AnchoredColumnCollection,\n options?: {\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n },\n): ColumnVariant[] {\n const include =\n options?.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n const variants = collection.findColumnVariants({\n mode: \"enrichment\",\n maxHops: options?.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n });\n const predicate = options?.predicate;\n return variants.filter((v) => {\n if ((v.path?.length ?? 0) === 0) return false;\n if (predicate !== undefined && !predicate(v.column.spec)) return false;\n if (!isGloballyAddressable(v.column.id)) return false;\n if (v.path?.some((p) => !isGloballyAddressable(p.linker.id))) return false;\n return true;\n });\n}\n\n/**\n * Pair each variant with a path-disambiguated label (so export headers stay\n * unique) and carry hit/linker `PObjectId`s through verbatim. Propagates\n * `qualifications.forHit`; `forQueries` is re-derived by the table builder.\n */\nexport function enrichmentVariantsToRefs(\n variants: ColumnVariant[],\n labelOptions?: DeriveLabelsOptions,\n): LabeledEnrichmentRefs {\n if (variants.length === 0) return [];\n\n const entries: Entry[] = variants.map((variant) => ({\n spec: variant.column.spec,\n linkerPath: variant.path?.map((p) => ({ spec: p.linker.spec })),\n qualifications: variant.qualifications,\n }));\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return variants.map((variant, i): LabeledEnrichmentRef => {\n const path: undefined | EnrichmentStep[] = variant.path?.map((step) => ({\n type: \"linker\",\n linker: step.linker.id,\n }));\n return {\n ref: createEnrichmentRef(variant.column.id, {\n path,\n qualifications: variant.qualifications?.forHit,\n }),\n label: labels[i],\n };\n });\n}\n"],"mappings":";;;;;;;;;AAyBA,SAAS,sBAAsB,IAAwB;
|
|
1
|
+
{"version":3,"file":"enrichment_discovery.js","names":[],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import { Annotation, createEnrichmentRef } from \"@milaboratories/pl-model-common\";\nimport type {\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PObjectId,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AnchoredColumnCollection,\n ColumnVariant,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —\n * which the workflow can resolve via bquery. Local-form ids (`resolvePath`)\n * fail this check and are excluded from auto-discovery; prerun/outputs hops\n * must be supplied as resolved `{spec, data}` instead.\n */\nfunction isGloballyAddressable(id: PObjectId): boolean {\n try {\n const decoded = JSON.parse(id);\n return (\n typeof decoded === \"object\" &&\n decoded !== null &&\n decoded.__isRef === true &&\n typeof decoded.blockId === \"string\" &&\n typeof decoded.name === \"string\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(\n collection: AnchoredColumnCollection,\n options?: {\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n },\n): ColumnVariant[] {\n const include =\n options?.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n const variants = collection.findColumnVariants({\n mode: \"enrichment\",\n maxHops: options?.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n });\n const predicate = options?.predicate;\n return variants.filter((v) => {\n if ((v.path?.length ?? 0) === 0) return false;\n if (predicate !== undefined && !predicate(v.column.spec)) return false;\n if (!isGloballyAddressable(v.column.id)) return false;\n if (v.path?.some((p) => !isGloballyAddressable(p.linker.id))) return false;\n return true;\n });\n}\n\n/**\n * Pair each variant with a path-disambiguated label (so export headers stay\n * unique) and carry hit/linker `PObjectId`s through verbatim. Propagates\n * `qualifications.forHit`; `forQueries` is re-derived by the table builder.\n */\nexport function enrichmentVariantsToRefs(\n variants: ColumnVariant[],\n labelOptions?: DeriveLabelsOptions,\n): LabeledEnrichmentRefs {\n if (variants.length === 0) return [];\n\n const entries: Entry[] = variants.map((variant) => ({\n spec: variant.column.spec,\n linkerPath: variant.path?.map((p) => ({ spec: p.linker.spec })),\n qualifications: variant.qualifications,\n }));\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return variants.map((variant, i): LabeledEnrichmentRef => {\n const path: undefined | EnrichmentStep[] = variant.path?.map((step) => ({\n type: \"linker\",\n linker: step.linker.id,\n }));\n return {\n ref: createEnrichmentRef(variant.column.id, {\n path,\n qualifications: variant.qualifications?.forHit,\n }),\n label: labels[i],\n };\n });\n}\n"],"mappings":";;;;;;;;;AAyBA,SAAS,sBAAsB,IAAwB;CACrD,IAAI;EACF,MAAM,UAAU,KAAK,MAAM,EAAE;EAC7B,OACE,OAAO,YAAY,YACnB,YAAY,QACZ,QAAQ,YAAY,QACpB,OAAO,QAAQ,YAAY,YAC3B,OAAO,QAAQ,SAAS;CAE5B,QAAQ;EACN,OAAO;CACT;AACF;;;;;;AAOA,SAAgB,sBACd,YACA,SAKiB;CACjB,MAAM,UACJ,SAAS,YAAY,KAAA,IACjB,KAAA,IACA,MAAM,QAAQ,QAAQ,OAAO,IAC3B,QAAQ,UACR,CAAC,QAAQ,OAAO;CACxB,MAAM,WAAW,WAAW,mBAAmB;EAC7C,MAAM;EACN,SAAS,SAAS,WAAW;EAC7B;EACA,SAAS;GACP,EAAE,aAAa,GAAG,WAAW,WAAW,OAAO,EAAE;GACjD,EAAE,aAAa,GAAG,WAAW,iBAAiB,OAAO,EAAE;GACvD,EAAE,MAAM,WAAW,MAAM;EAC3B;CACF,CAAC;CACD,MAAM,YAAY,SAAS;CAC3B,OAAO,SAAS,QAAQ,MAAM;EAC5B,KAAK,EAAE,MAAM,UAAU,OAAO,GAAG,OAAO;EACxC,IAAI,cAAc,KAAA,KAAa,CAAC,UAAU,EAAE,OAAO,IAAI,GAAG,OAAO;EACjE,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,OAAO;EAChD,IAAI,EAAE,MAAM,MAAM,MAAM,CAAC,sBAAsB,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO;EACrE,OAAO;CACT,CAAC;AACH;;;;;;AAOA,SAAgB,yBACd,UACA,cACuB;CACvB,IAAI,SAAS,WAAW,GAAG,OAAO,CAAC;CAOnC,MAAM,SAAS,qBALU,SAAS,KAAK,aAAa;EAClD,MAAM,QAAQ,OAAO;EACrB,YAAY,QAAQ,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,EAAE;EAC9D,gBAAgB,QAAQ;CAC1B,EAC0C,GAAG,YAAY;CAEzD,OAAO,SAAS,KAAK,SAAS,MAA4B;EACxD,MAAM,OAAqC,QAAQ,MAAM,KAAK,UAAU;GACtE,MAAM;GACN,QAAQ,KAAK,OAAO;EACtB,EAAE;EACF,OAAO;GACL,KAAK,oBAAoB,QAAQ,OAAO,IAAI;IAC1C;IACA,gBAAgB,QAAQ,gBAAgB;GAC1C,CAAC;GACD,OAAO,OAAO;EAChB;CACF,CAAC;AACH"}
|
|
@@ -2,7 +2,7 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
|
2
2
|
const require_derive_distinct_labels = require("../../labels/derive_distinct_labels.cjs");
|
|
3
3
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
4
4
|
let canonicalize = require("canonicalize");
|
|
5
|
-
canonicalize = require_runtime.__toESM(canonicalize);
|
|
5
|
+
canonicalize = require_runtime.__toESM(canonicalize, 1);
|
|
6
6
|
//#region src/components/PlDatasetSelector/filter_discovery.ts
|
|
7
7
|
/**
|
|
8
8
|
* Columns annotated `pl7.app/isSubset: "true"` whose axes ⊆ anchor axes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_discovery.cjs","names":["Annotation","deriveDistinctLabels"],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"sourcesContent":["import { Annotation } from \"@milaboratories/pl-model-common\";\nimport type { Option, PlRef, PObjectId, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport canonicalize from \"canonicalize\";\nimport type {\n AnchoredColumnCollection,\n ColumnMatch,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * Columns annotated `pl7.app/isSubset: \"true\"` whose axes ⊆ anchor axes.\n * The axes-subset constraint comes from `mode: \"enrichment\"`.\n */\nexport function findFilterColumns(collection: AnchoredColumnCollection): ColumnMatch[] {\n return collection.findColumns({\n mode: \"enrichment\",\n include: {\n annotations: { [Annotation.IsSubset]: \"true\" },\n },\n });\n}\n\nexport type FilterMatchOptions = {\n /** Maps result-pool column id back to its source PlRef (see {@link buildRefMap}). */\n refsByObjectId: ReadonlyMap<PObjectId, PlRef>;\n /** Spec of the dataset the filters are subsets of. */\n datasetSpec: PObjectSpec;\n /**\n * Forwarded to `deriveDistinctLabels`. Any `formatters.native` caller\n * sets is silently overridden — the function relies on a no-op native\n * formatter to keep the algorithm from short-circuiting on filters'\n * inherited `pl7.app/label`.\n */\n labelOptions?: DeriveLabelsOptions;\n};\n\n/**\n * Derive labels for filter column matches (for `DatasetOption.filters`).\n * Matches whose column id is missing from `refsByObjectId` are silently\n * dropped — they cannot be exposed as selectable options.\n */\nexport function filterMatchesToOptions(\n matches: ColumnMatch[],\n options: FilterMatchOptions,\n): Option[] {\n if (matches.length === 0) return [];\n\n const { refsByObjectId, datasetSpec, labelOptions } = options;\n\n // One entry per match-variant (different paths to the same column are\n // exposed as separate Options). The `ref` field rides along on the\n // Entry-shaped objects via structural typing; `deriveDistinctLabels`\n // ignores extra fields.\n const entries = matches.flatMap((match): (Entry & { ref: PlRef })[] => {\n const ref = refsByObjectId.get(match.column.id);\n if (ref === undefined) return [];\n return match.variants.map((variant) => ({\n ref,\n spec: match.column.spec,\n linkerPath: variant.path.map((p) => ({ spec: p.linker.spec })),\n }));\n });\n\n // Appending the dataset forces a discriminating trace step into every\n // filter label (yielding e.g. \"Bulk / Top 10\"); the dataset's own label\n // is dropped because we only zip `entries`. Native label is force-\n // suppressed (the override sits after caller's spread) — filters\n // inherit the dataset's `pl7.app/label` and would otherwise satisfy\n // uniqueness before any trace step is consulted.\n const labels = deriveDistinctLabels([...entries, { spec: datasetSpec }], {\n ...labelOptions,\n formatters: { ...labelOptions?.formatters, native: () => undefined },\n });\n\n return entries.map(({ ref }, i) => ({ ref, label: labels[i] }));\n}\n\n/** Build the `refsByObjectId` map from `ctx.resultPool.getSpecs().entries`. */\nexport function buildRefMap(entries: readonly { readonly ref: PlRef }[]): Map<PObjectId, PlRef> {\n return new Map(entries.map((e) => [canonicalize(e.ref)! as PObjectId, e.ref]));\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,kBAAkB,YAAqD;
|
|
1
|
+
{"version":3,"file":"filter_discovery.cjs","names":["Annotation","deriveDistinctLabels"],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"sourcesContent":["import { Annotation } from \"@milaboratories/pl-model-common\";\nimport type { Option, PlRef, PObjectId, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport canonicalize from \"canonicalize\";\nimport type {\n AnchoredColumnCollection,\n ColumnMatch,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * Columns annotated `pl7.app/isSubset: \"true\"` whose axes ⊆ anchor axes.\n * The axes-subset constraint comes from `mode: \"enrichment\"`.\n */\nexport function findFilterColumns(collection: AnchoredColumnCollection): ColumnMatch[] {\n return collection.findColumns({\n mode: \"enrichment\",\n include: {\n annotations: { [Annotation.IsSubset]: \"true\" },\n },\n });\n}\n\nexport type FilterMatchOptions = {\n /** Maps result-pool column id back to its source PlRef (see {@link buildRefMap}). */\n refsByObjectId: ReadonlyMap<PObjectId, PlRef>;\n /** Spec of the dataset the filters are subsets of. */\n datasetSpec: PObjectSpec;\n /**\n * Forwarded to `deriveDistinctLabels`. Any `formatters.native` caller\n * sets is silently overridden — the function relies on a no-op native\n * formatter to keep the algorithm from short-circuiting on filters'\n * inherited `pl7.app/label`.\n */\n labelOptions?: DeriveLabelsOptions;\n};\n\n/**\n * Derive labels for filter column matches (for `DatasetOption.filters`).\n * Matches whose column id is missing from `refsByObjectId` are silently\n * dropped — they cannot be exposed as selectable options.\n */\nexport function filterMatchesToOptions(\n matches: ColumnMatch[],\n options: FilterMatchOptions,\n): Option[] {\n if (matches.length === 0) return [];\n\n const { refsByObjectId, datasetSpec, labelOptions } = options;\n\n // One entry per match-variant (different paths to the same column are\n // exposed as separate Options). The `ref` field rides along on the\n // Entry-shaped objects via structural typing; `deriveDistinctLabels`\n // ignores extra fields.\n const entries = matches.flatMap((match): (Entry & { ref: PlRef })[] => {\n const ref = refsByObjectId.get(match.column.id);\n if (ref === undefined) return [];\n return match.variants.map((variant) => ({\n ref,\n spec: match.column.spec,\n linkerPath: variant.path.map((p) => ({ spec: p.linker.spec })),\n }));\n });\n\n // Appending the dataset forces a discriminating trace step into every\n // filter label (yielding e.g. \"Bulk / Top 10\"); the dataset's own label\n // is dropped because we only zip `entries`. Native label is force-\n // suppressed (the override sits after caller's spread) — filters\n // inherit the dataset's `pl7.app/label` and would otherwise satisfy\n // uniqueness before any trace step is consulted.\n const labels = deriveDistinctLabels([...entries, { spec: datasetSpec }], {\n ...labelOptions,\n formatters: { ...labelOptions?.formatters, native: () => undefined },\n });\n\n return entries.map(({ ref }, i) => ({ ref, label: labels[i] }));\n}\n\n/** Build the `refsByObjectId` map from `ctx.resultPool.getSpecs().entries`. */\nexport function buildRefMap(entries: readonly { readonly ref: PlRef }[]): Map<PObjectId, PlRef> {\n return new Map(entries.map((e) => [canonicalize(e.ref)! as PObjectId, e.ref]));\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,kBAAkB,YAAqD;CACrF,OAAO,WAAW,YAAY;EAC5B,MAAM;EACN,SAAS,EACP,aAAa,GAAGA,gCAAAA,WAAW,WAAW,OAAO,EAC/C;CACF,CAAC;AACH;;;;;;AAqBA,SAAgB,uBACd,SACA,SACU;CACV,IAAI,QAAQ,WAAW,GAAG,OAAO,CAAC;CAElC,MAAM,EAAE,gBAAgB,aAAa,iBAAiB;CAMtD,MAAM,UAAU,QAAQ,SAAS,UAAsC;EACrE,MAAM,MAAM,eAAe,IAAI,MAAM,OAAO,EAAE;EAC9C,IAAI,QAAQ,KAAA,GAAW,OAAO,CAAC;EAC/B,OAAO,MAAM,SAAS,KAAK,aAAa;GACtC;GACA,MAAM,MAAM,OAAO;GACnB,YAAY,QAAQ,KAAK,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,EAAE;EAC/D,EAAE;CACJ,CAAC;CAQD,MAAM,SAASC,+BAAAA,qBAAqB,CAAC,GAAG,SAAS,EAAE,MAAM,YAAY,CAAC,GAAG;EACvE,GAAG;EACH,YAAY;GAAE,GAAG,cAAc;GAAY,cAAc,KAAA;EAAU;CACrE,CAAC;CAED,OAAO,QAAQ,KAAK,EAAE,OAAO,OAAO;EAAE;EAAK,OAAO,OAAO;CAAG,EAAE;AAChE;;AAGA,SAAgB,YAAY,SAAoE;CAC9F,OAAO,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAA,GAAA,aAAA,QAAA,CAAc,EAAE,GAAG,GAAiB,EAAE,GAAG,CAAC,CAAC;AAC/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_discovery.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"mappings":";;;;;;;AAiBA;;iBAAgB,iBAAA,CAAkB,UAAA,EAAY,wBAAA,GAA2B,
|
|
1
|
+
{"version":3,"file":"filter_discovery.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"mappings":";;;;;;;AAiBA;;iBAAgB,iBAAA,CAAkB,UAAA,EAAY,wBAAA,GAA2B,WAAW;AAAA,KASxE,kBAAA;EATkC,qFAW5C,cAAA,EAAgB,WAAA,CAAY,SAAA,EAAW,KAAA,GAXgC;EAavE,WAAA,EAAa,WAAA;EAbqE;AASpF;;;;;EAWE,YAAA,GAAe,mBAAA;AAAA;;;;;;iBAQD,sBAAA,CACd,OAAA,EAAS,WAAA,IACT,OAAA,EAAS,kBAAA,GACR,MAAA;;iBAkCa,WAAA,CAAY,OAAA;EAAA,SAA6B,GAAA,EAAK,KAAA;AAAA,MAAY,GAAA,CAAI,SAAA,EAAW,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_discovery.js","names":[],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"sourcesContent":["import { Annotation } from \"@milaboratories/pl-model-common\";\nimport type { Option, PlRef, PObjectId, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport canonicalize from \"canonicalize\";\nimport type {\n AnchoredColumnCollection,\n ColumnMatch,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * Columns annotated `pl7.app/isSubset: \"true\"` whose axes ⊆ anchor axes.\n * The axes-subset constraint comes from `mode: \"enrichment\"`.\n */\nexport function findFilterColumns(collection: AnchoredColumnCollection): ColumnMatch[] {\n return collection.findColumns({\n mode: \"enrichment\",\n include: {\n annotations: { [Annotation.IsSubset]: \"true\" },\n },\n });\n}\n\nexport type FilterMatchOptions = {\n /** Maps result-pool column id back to its source PlRef (see {@link buildRefMap}). */\n refsByObjectId: ReadonlyMap<PObjectId, PlRef>;\n /** Spec of the dataset the filters are subsets of. */\n datasetSpec: PObjectSpec;\n /**\n * Forwarded to `deriveDistinctLabels`. Any `formatters.native` caller\n * sets is silently overridden — the function relies on a no-op native\n * formatter to keep the algorithm from short-circuiting on filters'\n * inherited `pl7.app/label`.\n */\n labelOptions?: DeriveLabelsOptions;\n};\n\n/**\n * Derive labels for filter column matches (for `DatasetOption.filters`).\n * Matches whose column id is missing from `refsByObjectId` are silently\n * dropped — they cannot be exposed as selectable options.\n */\nexport function filterMatchesToOptions(\n matches: ColumnMatch[],\n options: FilterMatchOptions,\n): Option[] {\n if (matches.length === 0) return [];\n\n const { refsByObjectId, datasetSpec, labelOptions } = options;\n\n // One entry per match-variant (different paths to the same column are\n // exposed as separate Options). The `ref` field rides along on the\n // Entry-shaped objects via structural typing; `deriveDistinctLabels`\n // ignores extra fields.\n const entries = matches.flatMap((match): (Entry & { ref: PlRef })[] => {\n const ref = refsByObjectId.get(match.column.id);\n if (ref === undefined) return [];\n return match.variants.map((variant) => ({\n ref,\n spec: match.column.spec,\n linkerPath: variant.path.map((p) => ({ spec: p.linker.spec })),\n }));\n });\n\n // Appending the dataset forces a discriminating trace step into every\n // filter label (yielding e.g. \"Bulk / Top 10\"); the dataset's own label\n // is dropped because we only zip `entries`. Native label is force-\n // suppressed (the override sits after caller's spread) — filters\n // inherit the dataset's `pl7.app/label` and would otherwise satisfy\n // uniqueness before any trace step is consulted.\n const labels = deriveDistinctLabels([...entries, { spec: datasetSpec }], {\n ...labelOptions,\n formatters: { ...labelOptions?.formatters, native: () => undefined },\n });\n\n return entries.map(({ ref }, i) => ({ ref, label: labels[i] }));\n}\n\n/** Build the `refsByObjectId` map from `ctx.resultPool.getSpecs().entries`. */\nexport function buildRefMap(entries: readonly { readonly ref: PlRef }[]): Map<PObjectId, PlRef> {\n return new Map(entries.map((e) => [canonicalize(e.ref)! as PObjectId, e.ref]));\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,kBAAkB,YAAqD;
|
|
1
|
+
{"version":3,"file":"filter_discovery.js","names":[],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"sourcesContent":["import { Annotation } from \"@milaboratories/pl-model-common\";\nimport type { Option, PlRef, PObjectId, PObjectSpec } from \"@milaboratories/pl-model-common\";\nimport canonicalize from \"canonicalize\";\nimport type {\n AnchoredColumnCollection,\n ColumnMatch,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * Columns annotated `pl7.app/isSubset: \"true\"` whose axes ⊆ anchor axes.\n * The axes-subset constraint comes from `mode: \"enrichment\"`.\n */\nexport function findFilterColumns(collection: AnchoredColumnCollection): ColumnMatch[] {\n return collection.findColumns({\n mode: \"enrichment\",\n include: {\n annotations: { [Annotation.IsSubset]: \"true\" },\n },\n });\n}\n\nexport type FilterMatchOptions = {\n /** Maps result-pool column id back to its source PlRef (see {@link buildRefMap}). */\n refsByObjectId: ReadonlyMap<PObjectId, PlRef>;\n /** Spec of the dataset the filters are subsets of. */\n datasetSpec: PObjectSpec;\n /**\n * Forwarded to `deriveDistinctLabels`. Any `formatters.native` caller\n * sets is silently overridden — the function relies on a no-op native\n * formatter to keep the algorithm from short-circuiting on filters'\n * inherited `pl7.app/label`.\n */\n labelOptions?: DeriveLabelsOptions;\n};\n\n/**\n * Derive labels for filter column matches (for `DatasetOption.filters`).\n * Matches whose column id is missing from `refsByObjectId` are silently\n * dropped — they cannot be exposed as selectable options.\n */\nexport function filterMatchesToOptions(\n matches: ColumnMatch[],\n options: FilterMatchOptions,\n): Option[] {\n if (matches.length === 0) return [];\n\n const { refsByObjectId, datasetSpec, labelOptions } = options;\n\n // One entry per match-variant (different paths to the same column are\n // exposed as separate Options). The `ref` field rides along on the\n // Entry-shaped objects via structural typing; `deriveDistinctLabels`\n // ignores extra fields.\n const entries = matches.flatMap((match): (Entry & { ref: PlRef })[] => {\n const ref = refsByObjectId.get(match.column.id);\n if (ref === undefined) return [];\n return match.variants.map((variant) => ({\n ref,\n spec: match.column.spec,\n linkerPath: variant.path.map((p) => ({ spec: p.linker.spec })),\n }));\n });\n\n // Appending the dataset forces a discriminating trace step into every\n // filter label (yielding e.g. \"Bulk / Top 10\"); the dataset's own label\n // is dropped because we only zip `entries`. Native label is force-\n // suppressed (the override sits after caller's spread) — filters\n // inherit the dataset's `pl7.app/label` and would otherwise satisfy\n // uniqueness before any trace step is consulted.\n const labels = deriveDistinctLabels([...entries, { spec: datasetSpec }], {\n ...labelOptions,\n formatters: { ...labelOptions?.formatters, native: () => undefined },\n });\n\n return entries.map(({ ref }, i) => ({ ref, label: labels[i] }));\n}\n\n/** Build the `refsByObjectId` map from `ctx.resultPool.getSpecs().entries`. */\nexport function buildRefMap(entries: readonly { readonly ref: PlRef }[]): Map<PObjectId, PlRef> {\n return new Map(entries.map((e) => [canonicalize(e.ref)! as PObjectId, e.ref]));\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,kBAAkB,YAAqD;CACrF,OAAO,WAAW,YAAY;EAC5B,MAAM;EACN,SAAS,EACP,aAAa,GAAG,WAAW,WAAW,OAAO,EAC/C;CACF,CAAC;AACH;;;;;;AAqBA,SAAgB,uBACd,SACA,SACU;CACV,IAAI,QAAQ,WAAW,GAAG,OAAO,CAAC;CAElC,MAAM,EAAE,gBAAgB,aAAa,iBAAiB;CAMtD,MAAM,UAAU,QAAQ,SAAS,UAAsC;EACrE,MAAM,MAAM,eAAe,IAAI,MAAM,OAAO,EAAE;EAC9C,IAAI,QAAQ,KAAA,GAAW,OAAO,CAAC;EAC/B,OAAO,MAAM,SAAS,KAAK,aAAa;GACtC;GACA,MAAM,MAAM,OAAO;GACnB,YAAY,QAAQ,KAAK,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,EAAE;EAC/D,EAAE;CACJ,CAAC;CAQD,MAAM,SAAS,qBAAqB,CAAC,GAAG,SAAS,EAAE,MAAM,YAAY,CAAC,GAAG;EACvE,GAAG;EACH,YAAY;GAAE,GAAG,cAAc;GAAY,cAAc,KAAA;EAAU;CACrE,CAAC;CAED,OAAO,QAAQ,KAAK,EAAE,OAAO,OAAO;EAAE;EAAK,OAAO,OAAO;CAAG,EAAE;AAChE;;AAGA,SAAgB,YAAY,SAAoE;CAC9F,OAAO,IAAI,IAAI,QAAQ,KAAK,MAAM,CAAC,aAAa,EAAE,GAAG,GAAiB,EAAE,GAAG,CAAC,CAAC;AAC/E"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
require("./dataset_selection.cjs");
|
|
2
|
-
require("./filter_discovery.cjs");
|
|
3
|
-
require("./build_dataset_options.cjs");
|
|
1
|
+
const require_dataset_selection = require("./dataset_selection.cjs");
|
|
2
|
+
const require_filter_discovery = require("./filter_discovery.cjs");
|
|
3
|
+
const require_build_dataset_options = require("./build_dataset_options.cjs");
|
|
4
|
+
exports.buildDatasetOptions = require_build_dataset_options.buildDatasetOptions;
|
|
5
|
+
exports.buildRefMap = require_filter_discovery.buildRefMap;
|
|
6
|
+
exports.createDatasetSelection = require_dataset_selection.createDatasetSelection;
|
|
7
|
+
exports.filterMatchesToOptions = require_filter_discovery.filterMatchesToOptions;
|
|
8
|
+
exports.findFilterColumns = require_filter_discovery.findFilterColumns;
|
|
9
|
+
exports.isDatasetSelection = require_dataset_selection.isDatasetSelection;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { DatasetOption, DatasetSelection, createDatasetSelection, isDatasetSelection } from "./dataset_selection.js";
|
|
2
2
|
import { FilterMatchOptions, buildRefMap, filterMatchesToOptions, findFilterColumns } from "./filter_discovery.js";
|
|
3
|
-
import { BuildDatasetOptions, buildDatasetOptions } from "./build_dataset_options.js";
|
|
3
|
+
import { BuildDatasetOptions, buildDatasetOptions } from "./build_dataset_options.js";
|
|
4
|
+
export { BuildDatasetOptions, DatasetOption, DatasetSelection, FilterMatchOptions, buildDatasetOptions, buildRefMap, createDatasetSelection, filterMatchesToOptions, findFilterColumns, isDatasetSelection };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import "./dataset_selection.js";
|
|
2
|
-
import "./filter_discovery.js";
|
|
3
|
-
import "./build_dataset_options.js";
|
|
1
|
+
import { createDatasetSelection, isDatasetSelection } from "./dataset_selection.js";
|
|
2
|
+
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./filter_discovery.js";
|
|
3
|
+
import { buildDatasetOptions } from "./build_dataset_options.js";
|
|
4
|
+
export { buildDatasetOptions, buildRefMap, createDatasetSelection, filterMatchesToOptions, findFilterColumns, isDatasetSelection };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
3
2
|
//#region src/components/PlMultiSequenceAlignment.ts
|
|
4
3
|
function createRowSelectionColumn({ selection, columnId = (0, _milaboratories_pl_model_common.uniquePlId)(), label = "Selection marker", domain }) {
|