@platforma-sdk/model 1.66.2 → 1.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/block_state_util.cjs +2 -1
- package/dist/block_state_util.cjs.map +1 -1
- package/dist/block_state_util.js +2 -1
- package/dist/block_state_util.js.map +1 -1
- package/dist/columns/column_collection_builder.cjs +1 -1
- package/dist/columns/column_collection_builder.d.ts +1 -1
- package/dist/columns/column_collection_builder.js +1 -1
- package/dist/columns/index.cjs +2 -2
- package/dist/columns/index.d.ts +1 -1
- package/dist/columns/index.js +2 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +3 -3
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs +41 -0
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -0
- package/dist/components/PlDatasetSelector/build_dataset_options.d.ts +19 -0
- package/dist/components/PlDatasetSelector/build_dataset_options.d.ts.map +1 -0
- package/dist/components/PlDatasetSelector/build_dataset_options.js +41 -0
- package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -0
- package/dist/components/PlDatasetSelector/filter_discovery.cjs +60 -0
- package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -0
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts +31 -0
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -0
- package/dist/components/PlDatasetSelector/filter_discovery.js +56 -0
- package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -0
- package/dist/components/PlDatasetSelector/index.cjs +2 -0
- package/dist/components/PlDatasetSelector/index.d.ts +2 -0
- package/dist/components/PlDatasetSelector/index.js +2 -0
- package/dist/components/index.cjs +3 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +3 -0
- package/dist/index.cjs +10 -4
- package/dist/index.d.ts +7 -5
- package/dist/index.js +7 -5
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/package.json +7 -7
- package/src/block_state_util.ts +2 -1
- package/src/components/PlDatasetSelector/build_dataset_options.ts +56 -0
- package/src/components/PlDatasetSelector/filter_discovery.test.ts +156 -0
- package/src/components/PlDatasetSelector/filter_discovery.ts +77 -0
- package/src/components/PlDatasetSelector/index.ts +2 -0
- package/src/components/index.ts +1 -0
|
@@ -11,7 +11,8 @@ function readOutput(outputValue) {
|
|
|
11
11
|
return outputValue.value;
|
|
12
12
|
}
|
|
13
13
|
function wrapOutputs(outputs) {
|
|
14
|
-
return new Proxy(outputs, { get(target, key) {
|
|
14
|
+
return new Proxy(outputs, { get(target, key, receiver) {
|
|
15
|
+
if (typeof key === "symbol" || !(key in target)) return Reflect.get(target, key, receiver);
|
|
15
16
|
return readOutput(target[key]);
|
|
16
17
|
} });
|
|
17
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_state_util.cjs","names":[],"sources":["../src/block_state_util.ts"],"sourcesContent":["import type { BlockOutputsBase, OutputWithStatus } from \"@milaboratories/pl-model-common\";\nimport type { ErrorLike } from \"@milaboratories/pl-error-like\";\n\nexport class OutputError extends Error {\n constructor(\n public readonly errors: ErrorLike[],\n public readonly moreErrors: boolean,\n ) {\n super(`${errors.length}${moreErrors ? \"+\" : \"\"} errors, first error: ` + errors[0].message);\n }\n}\n\nexport function readOutput<T>(outputValue: OutputWithStatus<T>): T {\n if (!outputValue.ok) throw new OutputError(outputValue.errors, outputValue.moreErrors);\n return outputValue.value;\n}\n\ntype ExtractValueType<V extends OutputWithStatus<unknown>> = Extract<V, { ok: true }>[\"value\"];\ntype SimpleOutputs<Outputs extends BlockOutputsBase> = {\n [Key in keyof Outputs]: ExtractValueType<Outputs[Key]>;\n};\n\nexport function wrapOutputs<Outputs extends BlockOutputsBase>(\n outputs: Outputs,\n): SimpleOutputs<Outputs> {\n return new Proxy(outputs, {\n get(target, key
|
|
1
|
+
{"version":3,"file":"block_state_util.cjs","names":[],"sources":["../src/block_state_util.ts"],"sourcesContent":["import type { BlockOutputsBase, OutputWithStatus } from \"@milaboratories/pl-model-common\";\nimport type { ErrorLike } from \"@milaboratories/pl-error-like\";\n\nexport class OutputError extends Error {\n constructor(\n public readonly errors: ErrorLike[],\n public readonly moreErrors: boolean,\n ) {\n super(`${errors.length}${moreErrors ? \"+\" : \"\"} errors, first error: ` + errors[0].message);\n }\n}\n\nexport function readOutput<T>(outputValue: OutputWithStatus<T>): T {\n if (!outputValue.ok) throw new OutputError(outputValue.errors, outputValue.moreErrors);\n return outputValue.value;\n}\n\ntype ExtractValueType<V extends OutputWithStatus<unknown>> = Extract<V, { ok: true }>[\"value\"];\ntype SimpleOutputs<Outputs extends BlockOutputsBase> = {\n [Key in keyof Outputs]: ExtractValueType<Outputs[Key]>;\n};\n\nexport function wrapOutputs<Outputs extends BlockOutputsBase>(\n outputs: Outputs,\n): SimpleOutputs<Outputs> {\n return new Proxy(outputs, {\n get(target, key, receiver) {\n if (typeof key === \"symbol\" || !(key in target)) return Reflect.get(target, key, receiver);\n return readOutput(target[key]);\n },\n }) as SimpleOutputs<Outputs>;\n}\n"],"mappings":";AAGA,IAAa,cAAb,cAAiC,MAAM;CACrC,YACE,QACA,YACA;AACA,QAAM,GAAG,OAAO,SAAS,aAAa,MAAM,GAAG,0BAA0B,OAAO,GAAG,QAAQ;AAH3E,OAAA,SAAA;AACA,OAAA,aAAA;;;AAMpB,SAAgB,WAAc,aAAqC;AACjE,KAAI,CAAC,YAAY,GAAI,OAAM,IAAI,YAAY,YAAY,QAAQ,YAAY,WAAW;AACtF,QAAO,YAAY;;AAQrB,SAAgB,YACd,SACwB;AACxB,QAAO,IAAI,MAAM,SAAS,EACxB,IAAI,QAAQ,KAAK,UAAU;AACzB,MAAI,OAAO,QAAQ,YAAY,EAAE,OAAO,QAAS,QAAO,QAAQ,IAAI,QAAQ,KAAK,SAAS;AAC1F,SAAO,WAAW,OAAO,KAAK;IAEjC,CAAC"}
|
package/dist/block_state_util.js
CHANGED
|
@@ -11,7 +11,8 @@ function readOutput(outputValue) {
|
|
|
11
11
|
return outputValue.value;
|
|
12
12
|
}
|
|
13
13
|
function wrapOutputs(outputs) {
|
|
14
|
-
return new Proxy(outputs, { get(target, key) {
|
|
14
|
+
return new Proxy(outputs, { get(target, key, receiver) {
|
|
15
|
+
if (typeof key === "symbol" || !(key in target)) return Reflect.get(target, key, receiver);
|
|
15
16
|
return readOutput(target[key]);
|
|
16
17
|
} });
|
|
17
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_state_util.js","names":[],"sources":["../src/block_state_util.ts"],"sourcesContent":["import type { BlockOutputsBase, OutputWithStatus } from \"@milaboratories/pl-model-common\";\nimport type { ErrorLike } from \"@milaboratories/pl-error-like\";\n\nexport class OutputError extends Error {\n constructor(\n public readonly errors: ErrorLike[],\n public readonly moreErrors: boolean,\n ) {\n super(`${errors.length}${moreErrors ? \"+\" : \"\"} errors, first error: ` + errors[0].message);\n }\n}\n\nexport function readOutput<T>(outputValue: OutputWithStatus<T>): T {\n if (!outputValue.ok) throw new OutputError(outputValue.errors, outputValue.moreErrors);\n return outputValue.value;\n}\n\ntype ExtractValueType<V extends OutputWithStatus<unknown>> = Extract<V, { ok: true }>[\"value\"];\ntype SimpleOutputs<Outputs extends BlockOutputsBase> = {\n [Key in keyof Outputs]: ExtractValueType<Outputs[Key]>;\n};\n\nexport function wrapOutputs<Outputs extends BlockOutputsBase>(\n outputs: Outputs,\n): SimpleOutputs<Outputs> {\n return new Proxy(outputs, {\n get(target, key
|
|
1
|
+
{"version":3,"file":"block_state_util.js","names":[],"sources":["../src/block_state_util.ts"],"sourcesContent":["import type { BlockOutputsBase, OutputWithStatus } from \"@milaboratories/pl-model-common\";\nimport type { ErrorLike } from \"@milaboratories/pl-error-like\";\n\nexport class OutputError extends Error {\n constructor(\n public readonly errors: ErrorLike[],\n public readonly moreErrors: boolean,\n ) {\n super(`${errors.length}${moreErrors ? \"+\" : \"\"} errors, first error: ` + errors[0].message);\n }\n}\n\nexport function readOutput<T>(outputValue: OutputWithStatus<T>): T {\n if (!outputValue.ok) throw new OutputError(outputValue.errors, outputValue.moreErrors);\n return outputValue.value;\n}\n\ntype ExtractValueType<V extends OutputWithStatus<unknown>> = Extract<V, { ok: true }>[\"value\"];\ntype SimpleOutputs<Outputs extends BlockOutputsBase> = {\n [Key in keyof Outputs]: ExtractValueType<Outputs[Key]>;\n};\n\nexport function wrapOutputs<Outputs extends BlockOutputsBase>(\n outputs: Outputs,\n): SimpleOutputs<Outputs> {\n return new Proxy(outputs, {\n get(target, key, receiver) {\n if (typeof key === \"symbol\" || !(key in target)) return Reflect.get(target, key, receiver);\n return readOutput(target[key]);\n },\n }) as SimpleOutputs<Outputs>;\n}\n"],"mappings":";AAGA,IAAa,cAAb,cAAiC,MAAM;CACrC,YACE,QACA,YACA;AACA,QAAM,GAAG,OAAO,SAAS,aAAa,MAAM,GAAG,0BAA0B,OAAO,GAAG,QAAQ;AAH3E,OAAA,SAAA;AACA,OAAA,aAAA;;;AAMpB,SAAgB,WAAc,aAAqC;AACjE,KAAI,CAAC,YAAY,GAAI,OAAM,IAAI,YAAY,YAAY,QAAQ,YAAY,WAAW;AACtF,QAAO,YAAY;;AAQrB,SAAgB,YACd,SACwB;AACxB,QAAO,IAAI,MAAM,SAAS,EACxB,IAAI,QAAQ,KAAK,UAAU;AACzB,MAAI,OAAO,QAAQ,YAAY,EAAE,OAAO,QAAS,QAAO,QAAQ,IAAI,QAAQ,KAAK,SAAS;AAC1F,SAAO,WAAW,OAAO,KAAK;IAEjC,CAAC"}
|
|
@@ -2,8 +2,8 @@ require("../_virtual/_rolldown/runtime.cjs");
|
|
|
2
2
|
const require_accessor = require("../render/accessor.cjs");
|
|
3
3
|
const require_get_services = require("../services/get_services.cjs");
|
|
4
4
|
require("../services/index.cjs");
|
|
5
|
-
const require_column_snapshot_provider = require("./column_snapshot_provider.cjs");
|
|
6
5
|
const require_column_selector = require("./column_selector.cjs");
|
|
6
|
+
const require_column_snapshot_provider = require("./column_snapshot_provider.cjs");
|
|
7
7
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
8
8
|
let _milaboratories_helpers = require("@milaboratories/helpers");
|
|
9
9
|
//#region src/columns/column_collection_builder.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TreeNodeAccessor } from "../render/accessor.js";
|
|
2
|
+
import { ColumnSelector, RelaxedColumnSelector } from "./column_selector.js";
|
|
2
3
|
import { ColumnSnapshot } from "./column_snapshot.js";
|
|
3
4
|
import { ColumnSource } from "./column_snapshot_provider.js";
|
|
4
|
-
import { ColumnSelector, RelaxedColumnSelector } from "./column_selector.js";
|
|
5
5
|
import { AxisQualification, PColumnSpec, PFrameSpecDriver, PObjectId } from "@milaboratories/pl-model-common";
|
|
6
6
|
|
|
7
7
|
//#region src/columns/column_collection_builder.d.ts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { TreeNodeAccessor } from "../render/accessor.js";
|
|
2
2
|
import { getService } from "../services/get_services.js";
|
|
3
3
|
import "../services/index.js";
|
|
4
|
-
import { ArrayColumnProvider, toColumnSnapshotProvider } from "./column_snapshot_provider.js";
|
|
5
4
|
import { convertColumnSelectorToMultiColumnSelector } from "./column_selector.js";
|
|
5
|
+
import { ArrayColumnProvider, toColumnSnapshotProvider } from "./column_snapshot_provider.js";
|
|
6
6
|
import { deriveNativeId, isPColumnSpec } from "@milaboratories/pl-model-common";
|
|
7
7
|
import { throwError } from "@milaboratories/helpers";
|
|
8
8
|
//#region src/columns/column_collection_builder.ts
|
package/dist/columns/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require("./column_snapshot.cjs");
|
|
2
|
-
require("./column_snapshot_provider.cjs");
|
|
3
1
|
require("./column_selector.cjs");
|
|
2
|
+
require("./column_snapshot_provider.cjs");
|
|
4
3
|
require("./column_collection_builder.cjs");
|
|
5
4
|
require("./ctx_column_sources.cjs");
|
|
5
|
+
require("./column_snapshot.cjs");
|
|
6
6
|
require("./expand_by_partition.cjs");
|
package/dist/columns/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { ColumnSelector, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, StringMatcher, convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector } from "./column_selector.js";
|
|
1
2
|
import { ColumnData, ColumnDataStatus, ColumnSnapshot, createColumnSnapshot, createReadyColumnData } from "./column_snapshot.js";
|
|
2
3
|
import { ArrayColumnProvider, ColumnSnapshotProvider, ColumnSource, OutputColumnProvider, OutputColumnProviderOpts, SnapshotColumnProvider, isColumnSnapshotProvider, toColumnSnapshotProvider } from "./column_snapshot_provider.js";
|
|
3
|
-
import { ColumnSelector, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, StringMatcher, convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector } from "./column_selector.js";
|
|
4
4
|
import { AnchorEntry, AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, BuildOptions, ColumnCollection, ColumnCollectionBuilder, ColumnMatch, FindColumnsOptions, MatchQualifications, MatchVariant, MatchingMode } from "./column_collection_builder.js";
|
|
5
5
|
import { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders } from "./ctx_column_sources.js";
|
|
6
6
|
import { ExpandByPartitionOpts, ExpandByPartitionResult, SplitAxis, expandByPartition } from "./expand_by_partition.js";
|
package/dist/columns/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "./column_snapshot.js";
|
|
2
|
-
import "./column_snapshot_provider.js";
|
|
3
1
|
import "./column_selector.js";
|
|
2
|
+
import "./column_snapshot_provider.js";
|
|
4
3
|
import "./column_collection_builder.js";
|
|
5
4
|
import "./ctx_column_sources.js";
|
|
5
|
+
import "./column_snapshot.js";
|
|
6
6
|
import "./expand_by_partition.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DeriveLabelsOptions } from "../../../labels/derive_distinct_labels.js";
|
|
2
2
|
import { RenderCtxBase } from "../../../render/api.js";
|
|
3
|
-
import { PlDataTableFilters, PlDataTableModel } from "../typesV5.js";
|
|
4
|
-
import { PlDataTableStateV2 } from "../state-migration.js";
|
|
5
|
-
import { ColumnSnapshot } from "../../../columns/column_snapshot.js";
|
|
6
3
|
import { ColumnSelector } from "../../../columns/column_selector.js";
|
|
4
|
+
import { ColumnSnapshot } from "../../../columns/column_snapshot.js";
|
|
7
5
|
import { MatchQualifications, MatchVariant, MatchingMode } from "../../../columns/column_collection_builder.js";
|
|
6
|
+
import { PlDataTableFilters, PlDataTableModel } from "../typesV5.js";
|
|
7
|
+
import { PlDataTableStateV2 } from "../state-migration.js";
|
|
8
8
|
import { DiscoverTableColumnOptions } from "./discoverColumns.js";
|
|
9
9
|
import { DiscoveredPColumnId, MultiColumnSelector, PColumnSpec, PObjectId, PTableSorting } from "@milaboratories/pl-model-common";
|
|
10
10
|
import { Nil } from "@milaboratories/helpers";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RenderCtxBase } from "../../../render/api.js";
|
|
2
|
-
import { ColumnSource } from "../../../columns/column_snapshot_provider.js";
|
|
3
2
|
import { RelaxedColumnSelector } from "../../../columns/column_selector.js";
|
|
3
|
+
import { ColumnSource } from "../../../columns/column_snapshot_provider.js";
|
|
4
4
|
import { ColumnsSelectorConfig, TableColumnSnapshot } from "./createPlDataTableV3.js";
|
|
5
5
|
import { PColumnSpec, PObjectId, PlRef } from "@milaboratories/pl-model-common";
|
|
6
6
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const require_filter_discovery = require("./filter_discovery.cjs");
|
|
2
|
+
const require_column_collection_builder = require("../../columns/column_collection_builder.cjs");
|
|
3
|
+
const require_ctx_column_sources = require("../../columns/ctx_column_sources.cjs");
|
|
4
|
+
//#region src/components/PlDatasetSelector/build_dataset_options.ts
|
|
5
|
+
/**
|
|
6
|
+
* Usage:
|
|
7
|
+
* ```ts
|
|
8
|
+
* .output("datasetOptions", (ctx) => buildDatasetOptions(ctx))
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
function buildDatasetOptions(ctx, opts) {
|
|
12
|
+
const predicate = opts?.selector ?? (() => true);
|
|
13
|
+
const options = ctx.resultPool.getOptions(predicate, { refsWithEnrichments: true });
|
|
14
|
+
if (options.length === 0) return [];
|
|
15
|
+
const columnSources = require_ctx_column_sources.collectCtxColumnSnapshotProviders(ctx);
|
|
16
|
+
const refMap = require_filter_discovery.buildRefMap(ctx.resultPool.getSpecs().entries);
|
|
17
|
+
const pframeSpec = ctx.getService("pframeSpec");
|
|
18
|
+
return options.map((o) => {
|
|
19
|
+
const datasetSpec = ctx.resultPool.getPColumnSpecByRef(o.ref);
|
|
20
|
+
if (!datasetSpec) return o;
|
|
21
|
+
const builder = new require_column_collection_builder.ColumnCollectionBuilder(pframeSpec);
|
|
22
|
+
for (const src of columnSources) builder.addSource(src);
|
|
23
|
+
const collection = builder.build({ anchors: { main: datasetSpec } });
|
|
24
|
+
if (!collection) return o;
|
|
25
|
+
try {
|
|
26
|
+
const matches = require_filter_discovery.findFilterColumns(collection);
|
|
27
|
+
if (matches.length === 0) return o;
|
|
28
|
+
const filters = require_filter_discovery.filterMatchesToOptions(matches, refMap, opts?.labelOptions);
|
|
29
|
+
return {
|
|
30
|
+
...o,
|
|
31
|
+
filters
|
|
32
|
+
};
|
|
33
|
+
} finally {
|
|
34
|
+
collection.dispose();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
exports.buildDatasetOptions = buildDatasetOptions;
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=build_dataset_options.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build_dataset_options.cjs","names":["collectCtxColumnSnapshotProviders","buildRefMap","ColumnCollectionBuilder","findFilterColumns","filterMatchesToOptions"],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type {\n DatasetOption,\n Option,\n PColumnSelector,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport { ColumnCollectionBuilder } from \"../../columns/column_collection_builder\";\nimport { collectCtxColumnSnapshotProviders } from \"../../columns/ctx_column_sources\";\nimport { buildRefMap, filterMatchesToOptions, findFilterColumns } from \"./filter_discovery\";\n\nexport type BuildDatasetOptions = {\n /** Which result pool columns qualify as datasets. Defaults to all. */\n selector?: PColumnSelector | PColumnSelector[] | ((spec: PObjectSpec) => boolean);\n /** Formatting options for filter labels. */\n labelOptions?: DeriveLabelsOptions;\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 predicate = opts?.selector ?? (() => true);\n const options = ctx.resultPool.getOptions(predicate, { refsWithEnrichments: true });\n if (options.length === 0) return [];\n\n const columnSources = collectCtxColumnSnapshotProviders(ctx);\n const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);\n const pframeSpec = ctx.getService(\"pframeSpec\");\n\n return options.map((o: Option): DatasetOption => {\n const datasetSpec = ctx.resultPool.getPColumnSpecByRef(o.ref);\n if (!datasetSpec) return o;\n\n const builder = new ColumnCollectionBuilder(pframeSpec);\n for (const src of columnSources) builder.addSource(src);\n const collection = builder.build({ anchors: { main: datasetSpec } });\n if (!collection) return o;\n\n try {\n const matches = findFilterColumns(collection);\n if (matches.length === 0) return o;\n const filters = filterMatchesToOptions(matches, refMap, opts?.labelOptions);\n return { ...o, filters };\n } finally {\n collection.dispose();\n }\n });\n}\n"],"mappings":";;;;;;;;;;AAyBA,SAAgB,oBACd,KACA,MAC6B;CAC7B,MAAM,YAAY,MAAM,mBAAmB;CAC3C,MAAM,UAAU,IAAI,WAAW,WAAW,WAAW,EAAE,qBAAqB,MAAM,CAAC;AACnF,KAAI,QAAQ,WAAW,EAAG,QAAO,EAAE;CAEnC,MAAM,gBAAgBA,2BAAAA,kCAAkC,IAAI;CAC5D,MAAM,SAASC,yBAAAA,YAAY,IAAI,WAAW,UAAU,CAAC,QAAQ;CAC7D,MAAM,aAAa,IAAI,WAAW,aAAa;AAE/C,QAAO,QAAQ,KAAK,MAA6B;EAC/C,MAAM,cAAc,IAAI,WAAW,oBAAoB,EAAE,IAAI;AAC7D,MAAI,CAAC,YAAa,QAAO;EAEzB,MAAM,UAAU,IAAIC,kCAAAA,wBAAwB,WAAW;AACvD,OAAK,MAAM,OAAO,cAAe,SAAQ,UAAU,IAAI;EACvD,MAAM,aAAa,QAAQ,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,EAAE,CAAC;AACpE,MAAI,CAAC,WAAY,QAAO;AAExB,MAAI;GACF,MAAM,UAAUC,yBAAAA,kBAAkB,WAAW;AAC7C,OAAI,QAAQ,WAAW,EAAG,QAAO;GACjC,MAAM,UAAUC,yBAAAA,uBAAuB,SAAS,QAAQ,MAAM,aAAa;AAC3E,UAAO;IAAE,GAAG;IAAG;IAAS;YAChB;AACR,cAAW,SAAS;;GAEtB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DeriveLabelsOptions } from "../../labels/derive_distinct_labels.js";
|
|
2
|
+
import { RenderCtxBase } from "../../render/api.js";
|
|
3
|
+
import { DatasetOption, PColumnSelector, PObjectSpec } from "@milaboratories/pl-model-common";
|
|
4
|
+
|
|
5
|
+
//#region src/components/PlDatasetSelector/build_dataset_options.d.ts
|
|
6
|
+
type BuildDatasetOptions = {
|
|
7
|
+
/** Which result pool columns qualify as datasets. Defaults to all. */selector?: PColumnSelector | PColumnSelector[] | ((spec: PObjectSpec) => boolean); /** Formatting options for filter labels. */
|
|
8
|
+
labelOptions?: DeriveLabelsOptions;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```ts
|
|
13
|
+
* .output("datasetOptions", (ctx) => buildDatasetOptions(ctx))
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function buildDatasetOptions(ctx: RenderCtxBase, opts?: BuildDatasetOptions): DatasetOption[] | undefined;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { BuildDatasetOptions, buildDatasetOptions };
|
|
19
|
+
//# sourceMappingURL=build_dataset_options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build_dataset_options.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"mappings":";;;;;KAYY,mBAAA;wEAEV,QAAA,GAAW,eAAA,GAAkB,eAAA,OAAsB,IAAA,EAAM,WAAA,eAF/C;EAIV,YAAA,GAAe,mBAAA;AAAA;;;;;;;iBASD,mBAAA,CACd,GAAA,EAAK,aAAA,EACL,IAAA,GAAO,mBAAA,GACN,aAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./filter_discovery.js";
|
|
2
|
+
import { ColumnCollectionBuilder } from "../../columns/column_collection_builder.js";
|
|
3
|
+
import { collectCtxColumnSnapshotProviders } from "../../columns/ctx_column_sources.js";
|
|
4
|
+
//#region src/components/PlDatasetSelector/build_dataset_options.ts
|
|
5
|
+
/**
|
|
6
|
+
* Usage:
|
|
7
|
+
* ```ts
|
|
8
|
+
* .output("datasetOptions", (ctx) => buildDatasetOptions(ctx))
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
function buildDatasetOptions(ctx, opts) {
|
|
12
|
+
const predicate = opts?.selector ?? (() => true);
|
|
13
|
+
const options = ctx.resultPool.getOptions(predicate, { refsWithEnrichments: true });
|
|
14
|
+
if (options.length === 0) return [];
|
|
15
|
+
const columnSources = collectCtxColumnSnapshotProviders(ctx);
|
|
16
|
+
const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);
|
|
17
|
+
const pframeSpec = ctx.getService("pframeSpec");
|
|
18
|
+
return options.map((o) => {
|
|
19
|
+
const datasetSpec = ctx.resultPool.getPColumnSpecByRef(o.ref);
|
|
20
|
+
if (!datasetSpec) return o;
|
|
21
|
+
const builder = new ColumnCollectionBuilder(pframeSpec);
|
|
22
|
+
for (const src of columnSources) builder.addSource(src);
|
|
23
|
+
const collection = builder.build({ anchors: { main: datasetSpec } });
|
|
24
|
+
if (!collection) return o;
|
|
25
|
+
try {
|
|
26
|
+
const matches = findFilterColumns(collection);
|
|
27
|
+
if (matches.length === 0) return o;
|
|
28
|
+
const filters = filterMatchesToOptions(matches, refMap, opts?.labelOptions);
|
|
29
|
+
return {
|
|
30
|
+
...o,
|
|
31
|
+
filters
|
|
32
|
+
};
|
|
33
|
+
} finally {
|
|
34
|
+
collection.dispose();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { buildDatasetOptions };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=build_dataset_options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build_dataset_options.js","names":[],"sources":["../../../src/components/PlDatasetSelector/build_dataset_options.ts"],"sourcesContent":["import type {\n DatasetOption,\n Option,\n PColumnSelector,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type { DeriveLabelsOptions } from \"../../labels/derive_distinct_labels\";\nimport type { RenderCtxBase } from \"../../render\";\nimport { ColumnCollectionBuilder } from \"../../columns/column_collection_builder\";\nimport { collectCtxColumnSnapshotProviders } from \"../../columns/ctx_column_sources\";\nimport { buildRefMap, filterMatchesToOptions, findFilterColumns } from \"./filter_discovery\";\n\nexport type BuildDatasetOptions = {\n /** Which result pool columns qualify as datasets. Defaults to all. */\n selector?: PColumnSelector | PColumnSelector[] | ((spec: PObjectSpec) => boolean);\n /** Formatting options for filter labels. */\n labelOptions?: DeriveLabelsOptions;\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 predicate = opts?.selector ?? (() => true);\n const options = ctx.resultPool.getOptions(predicate, { refsWithEnrichments: true });\n if (options.length === 0) return [];\n\n const columnSources = collectCtxColumnSnapshotProviders(ctx);\n const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);\n const pframeSpec = ctx.getService(\"pframeSpec\");\n\n return options.map((o: Option): DatasetOption => {\n const datasetSpec = ctx.resultPool.getPColumnSpecByRef(o.ref);\n if (!datasetSpec) return o;\n\n const builder = new ColumnCollectionBuilder(pframeSpec);\n for (const src of columnSources) builder.addSource(src);\n const collection = builder.build({ anchors: { main: datasetSpec } });\n if (!collection) return o;\n\n try {\n const matches = findFilterColumns(collection);\n if (matches.length === 0) return o;\n const filters = filterMatchesToOptions(matches, refMap, opts?.labelOptions);\n return { ...o, filters };\n } finally {\n collection.dispose();\n }\n });\n}\n"],"mappings":";;;;;;;;;;AAyBA,SAAgB,oBACd,KACA,MAC6B;CAC7B,MAAM,YAAY,MAAM,mBAAmB;CAC3C,MAAM,UAAU,IAAI,WAAW,WAAW,WAAW,EAAE,qBAAqB,MAAM,CAAC;AACnF,KAAI,QAAQ,WAAW,EAAG,QAAO,EAAE;CAEnC,MAAM,gBAAgB,kCAAkC,IAAI;CAC5D,MAAM,SAAS,YAAY,IAAI,WAAW,UAAU,CAAC,QAAQ;CAC7D,MAAM,aAAa,IAAI,WAAW,aAAa;AAE/C,QAAO,QAAQ,KAAK,MAA6B;EAC/C,MAAM,cAAc,IAAI,WAAW,oBAAoB,EAAE,IAAI;AAC7D,MAAI,CAAC,YAAa,QAAO;EAEzB,MAAM,UAAU,IAAI,wBAAwB,WAAW;AACvD,OAAK,MAAM,OAAO,cAAe,SAAQ,UAAU,IAAI;EACvD,MAAM,aAAa,QAAQ,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,EAAE,CAAC;AACpE,MAAI,CAAC,WAAY,QAAO;AAExB,MAAI;GACF,MAAM,UAAU,kBAAkB,WAAW;AAC7C,OAAI,QAAQ,WAAW,EAAG,QAAO;GACjC,MAAM,UAAU,uBAAuB,SAAS,QAAQ,MAAM,aAAa;AAC3E,UAAO;IAAE,GAAG;IAAG;IAAS;YAChB;AACR,cAAW,SAAS;;GAEtB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_derive_distinct_labels = require("../../labels/derive_distinct_labels.cjs");
|
|
3
|
+
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
4
|
+
let canonicalize = require("canonicalize");
|
|
5
|
+
canonicalize = require_runtime.__toESM(canonicalize);
|
|
6
|
+
//#region src/components/PlDatasetSelector/filter_discovery.ts
|
|
7
|
+
/**
|
|
8
|
+
* Matches columns annotated `pl7.app/isSubset: "true"` whose axes ⊆ anchor axes.
|
|
9
|
+
*
|
|
10
|
+
* The axes-subset constraint is enforced by `mode: "enrichment"`, which sets
|
|
11
|
+
* `allowFloatingHitAxes: false` — every axis of the matched column must be
|
|
12
|
+
* present in the anchor's axes. See `matchingModeToConstraints()` in
|
|
13
|
+
* `column_collection_builder.ts`.
|
|
14
|
+
*/
|
|
15
|
+
function findFilterColumns(collection) {
|
|
16
|
+
return collection.findColumns({
|
|
17
|
+
mode: "enrichment",
|
|
18
|
+
include: { annotations: { [_milaboratories_pl_model_common.Annotation.IsSubset]: "true" } }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Derive labeled options from filter column matches, for use in DatasetOption.filters.
|
|
23
|
+
*
|
|
24
|
+
* @param matches - from findFilterColumns()
|
|
25
|
+
* @param refsByObjectId - from {@link buildRefMap}
|
|
26
|
+
* @param labelOptions - forwarded to deriveDistinctLabels()
|
|
27
|
+
*/
|
|
28
|
+
function filterMatchesToOptions(matches, refsByObjectId, labelOptions) {
|
|
29
|
+
if (matches.length === 0) return [];
|
|
30
|
+
const flattened = matches.flatMap((m) => m.variants.map((v) => ({
|
|
31
|
+
match: m,
|
|
32
|
+
variant: v
|
|
33
|
+
})));
|
|
34
|
+
const labels = require_derive_distinct_labels.deriveDistinctLabels(flattened.map(({ match, variant }) => ({
|
|
35
|
+
spec: match.column.spec,
|
|
36
|
+
linkerPath: variant.path.map((p) => ({ spec: p.linker.spec }))
|
|
37
|
+
})), labelOptions);
|
|
38
|
+
return flattened.map(({ match }, i) => {
|
|
39
|
+
const ref = refsByObjectId.get(match.column.id);
|
|
40
|
+
if (ref === void 0) throw new Error(`no PlRef found for filter column ${match.column.spec.name} (id: ${match.column.id})`);
|
|
41
|
+
return {
|
|
42
|
+
ref,
|
|
43
|
+
label: labels[i]
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Usage: `buildRefMap(ctx.resultPool.getSpecs().entries)`
|
|
49
|
+
*/
|
|
50
|
+
function buildRefMap(entries) {
|
|
51
|
+
const map = /* @__PURE__ */ new Map();
|
|
52
|
+
for (const entry of entries) map.set((0, canonicalize.default)(entry.ref), entry.ref);
|
|
53
|
+
return map;
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
exports.buildRefMap = buildRefMap;
|
|
57
|
+
exports.filterMatchesToOptions = filterMatchesToOptions;
|
|
58
|
+
exports.findFilterColumns = findFilterColumns;
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=filter_discovery.cjs.map
|
|
@@ -0,0 +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 } 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 * Matches columns annotated `pl7.app/isSubset: \"true\"` whose axes ⊆ anchor axes.\n *\n * The axes-subset constraint is enforced by `mode: \"enrichment\"`, which sets\n * `allowFloatingHitAxes: false` — every axis of the matched column must be\n * present in the anchor's axes. See `matchingModeToConstraints()` in\n * `column_collection_builder.ts`.\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\n/**\n * Derive labeled options from filter column matches, for use in DatasetOption.filters.\n *\n * @param matches - from findFilterColumns()\n * @param refsByObjectId - from {@link buildRefMap}\n * @param labelOptions - forwarded to deriveDistinctLabels()\n */\nexport function filterMatchesToOptions(\n matches: ColumnMatch[],\n refsByObjectId: ReadonlyMap<PObjectId, PlRef>,\n labelOptions?: DeriveLabelsOptions,\n): Option[] {\n if (matches.length === 0) return [];\n\n // Each ColumnMatch can be reached via multiple variants (different linker\n // paths / qualifications). We emit one Option per variant so the user can\n // pick a specific path — `deriveDistinctLabels` disambiguates labels by\n // path.\n const flattened = matches.flatMap((m) => m.variants.map((v) => ({ match: m, variant: v })));\n\n const entries: Entry[] = flattened.map(({ match, variant }) => ({\n spec: match.column.spec,\n linkerPath: variant.path.map((p) => ({ spec: p.linker.spec })),\n }));\n\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return flattened.map(({ match }, i) => {\n const ref = refsByObjectId.get(match.column.id);\n if (ref === undefined)\n throw new Error(\n `no PlRef found for filter column ${match.column.spec.name} (id: ${match.column.id})`,\n );\n return { ref, label: labels[i] };\n });\n}\n\n/**\n * Usage: `buildRefMap(ctx.resultPool.getSpecs().entries)`\n */\nexport function buildRefMap(entries: readonly { readonly ref: PlRef }[]): Map<PObjectId, PlRef> {\n const map = new Map<PObjectId, PlRef>();\n for (const entry of entries) {\n map.set(canonicalize(entry.ref)! as PObjectId, entry.ref);\n }\n return map;\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,SAAgB,kBAAkB,YAAqD;AACrF,QAAO,WAAW,YAAY;EAC5B,MAAM;EACN,SAAS,EACP,aAAa,GAAGA,gCAAAA,WAAW,WAAW,QAAQ,EAC/C;EACF,CAAC;;;;;;;;;AAUJ,SAAgB,uBACd,SACA,gBACA,cACU;AACV,KAAI,QAAQ,WAAW,EAAG,QAAO,EAAE;CAMnC,MAAM,YAAY,QAAQ,SAAS,MAAM,EAAE,SAAS,KAAK,OAAO;EAAE,OAAO;EAAG,SAAS;EAAG,EAAE,CAAC;CAO3F,MAAM,SAASC,+BAAAA,qBALU,UAAU,KAAK,EAAE,OAAO,eAAe;EAC9D,MAAM,MAAM,OAAO;EACnB,YAAY,QAAQ,KAAK,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,MAAM,EAAE;EAC/D,EAAE,EAE0C,aAAa;AAE1D,QAAO,UAAU,KAAK,EAAE,SAAS,MAAM;EACrC,MAAM,MAAM,eAAe,IAAI,MAAM,OAAO,GAAG;AAC/C,MAAI,QAAQ,KAAA,EACV,OAAM,IAAI,MACR,oCAAoC,MAAM,OAAO,KAAK,KAAK,QAAQ,MAAM,OAAO,GAAG,GACpF;AACH,SAAO;GAAE;GAAK,OAAO,OAAO;GAAI;GAChC;;;;;AAMJ,SAAgB,YAAY,SAAoE;CAC9F,MAAM,sBAAM,IAAI,KAAuB;AACvC,MAAK,MAAM,SAAS,QAClB,KAAI,KAAA,GAAA,aAAA,SAAiB,MAAM,IAAI,EAAgB,MAAM,IAAI;AAE3D,QAAO"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { DeriveLabelsOptions } from "../../labels/derive_distinct_labels.js";
|
|
2
|
+
import { AnchoredColumnCollection, ColumnMatch } from "../../columns/column_collection_builder.js";
|
|
3
|
+
import { Option, PObjectId, PlRef } from "@milaboratories/pl-model-common";
|
|
4
|
+
|
|
5
|
+
//#region src/components/PlDatasetSelector/filter_discovery.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Matches columns annotated `pl7.app/isSubset: "true"` whose axes ⊆ anchor axes.
|
|
8
|
+
*
|
|
9
|
+
* The axes-subset constraint is enforced by `mode: "enrichment"`, which sets
|
|
10
|
+
* `allowFloatingHitAxes: false` — every axis of the matched column must be
|
|
11
|
+
* present in the anchor's axes. See `matchingModeToConstraints()` in
|
|
12
|
+
* `column_collection_builder.ts`.
|
|
13
|
+
*/
|
|
14
|
+
declare function findFilterColumns(collection: AnchoredColumnCollection): ColumnMatch[];
|
|
15
|
+
/**
|
|
16
|
+
* Derive labeled options from filter column matches, for use in DatasetOption.filters.
|
|
17
|
+
*
|
|
18
|
+
* @param matches - from findFilterColumns()
|
|
19
|
+
* @param refsByObjectId - from {@link buildRefMap}
|
|
20
|
+
* @param labelOptions - forwarded to deriveDistinctLabels()
|
|
21
|
+
*/
|
|
22
|
+
declare function filterMatchesToOptions(matches: ColumnMatch[], refsByObjectId: ReadonlyMap<PObjectId, PlRef>, labelOptions?: DeriveLabelsOptions): Option[];
|
|
23
|
+
/**
|
|
24
|
+
* Usage: `buildRefMap(ctx.resultPool.getSpecs().entries)`
|
|
25
|
+
*/
|
|
26
|
+
declare function buildRefMap(entries: readonly {
|
|
27
|
+
readonly ref: PlRef;
|
|
28
|
+
}[]): Map<PObjectId, PlRef>;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { buildRefMap, filterMatchesToOptions, findFilterColumns };
|
|
31
|
+
//# sourceMappingURL=filter_discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter_discovery.d.ts","names":[],"sources":["../../../src/components/PlDatasetSelector/filter_discovery.ts"],"mappings":";;;;;;;AAqBA;;;;;;iBAAgB,iBAAA,CAAkB,UAAA,EAAY,wBAAA,GAA2B,WAAA;;;AAgBzE;;;;;iBAAgB,sBAAA,CACd,OAAA,EAAS,WAAA,IACT,cAAA,EAAgB,WAAA,CAAY,SAAA,EAAW,KAAA,GACvC,YAAA,GAAe,mBAAA,GACd,MAAA;;;;iBA6Ba,WAAA,CAAY,OAAA;EAAA,SAA6B,GAAA,EAAK,KAAA;AAAA,MAAY,GAAA,CAAI,SAAA,EAAW,KAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { deriveDistinctLabels } from "../../labels/derive_distinct_labels.js";
|
|
2
|
+
import { Annotation } from "@milaboratories/pl-model-common";
|
|
3
|
+
import canonicalize from "canonicalize";
|
|
4
|
+
//#region src/components/PlDatasetSelector/filter_discovery.ts
|
|
5
|
+
/**
|
|
6
|
+
* Matches columns annotated `pl7.app/isSubset: "true"` whose axes ⊆ anchor axes.
|
|
7
|
+
*
|
|
8
|
+
* The axes-subset constraint is enforced by `mode: "enrichment"`, which sets
|
|
9
|
+
* `allowFloatingHitAxes: false` — every axis of the matched column must be
|
|
10
|
+
* present in the anchor's axes. See `matchingModeToConstraints()` in
|
|
11
|
+
* `column_collection_builder.ts`.
|
|
12
|
+
*/
|
|
13
|
+
function findFilterColumns(collection) {
|
|
14
|
+
return collection.findColumns({
|
|
15
|
+
mode: "enrichment",
|
|
16
|
+
include: { annotations: { [Annotation.IsSubset]: "true" } }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Derive labeled options from filter column matches, for use in DatasetOption.filters.
|
|
21
|
+
*
|
|
22
|
+
* @param matches - from findFilterColumns()
|
|
23
|
+
* @param refsByObjectId - from {@link buildRefMap}
|
|
24
|
+
* @param labelOptions - forwarded to deriveDistinctLabels()
|
|
25
|
+
*/
|
|
26
|
+
function filterMatchesToOptions(matches, refsByObjectId, labelOptions) {
|
|
27
|
+
if (matches.length === 0) return [];
|
|
28
|
+
const flattened = matches.flatMap((m) => m.variants.map((v) => ({
|
|
29
|
+
match: m,
|
|
30
|
+
variant: v
|
|
31
|
+
})));
|
|
32
|
+
const labels = deriveDistinctLabels(flattened.map(({ match, variant }) => ({
|
|
33
|
+
spec: match.column.spec,
|
|
34
|
+
linkerPath: variant.path.map((p) => ({ spec: p.linker.spec }))
|
|
35
|
+
})), labelOptions);
|
|
36
|
+
return flattened.map(({ match }, i) => {
|
|
37
|
+
const ref = refsByObjectId.get(match.column.id);
|
|
38
|
+
if (ref === void 0) throw new Error(`no PlRef found for filter column ${match.column.spec.name} (id: ${match.column.id})`);
|
|
39
|
+
return {
|
|
40
|
+
ref,
|
|
41
|
+
label: labels[i]
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Usage: `buildRefMap(ctx.resultPool.getSpecs().entries)`
|
|
47
|
+
*/
|
|
48
|
+
function buildRefMap(entries) {
|
|
49
|
+
const map = /* @__PURE__ */ new Map();
|
|
50
|
+
for (const entry of entries) map.set(canonicalize(entry.ref), entry.ref);
|
|
51
|
+
return map;
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { buildRefMap, filterMatchesToOptions, findFilterColumns };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=filter_discovery.js.map
|
|
@@ -0,0 +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 } 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 * Matches columns annotated `pl7.app/isSubset: \"true\"` whose axes ⊆ anchor axes.\n *\n * The axes-subset constraint is enforced by `mode: \"enrichment\"`, which sets\n * `allowFloatingHitAxes: false` — every axis of the matched column must be\n * present in the anchor's axes. See `matchingModeToConstraints()` in\n * `column_collection_builder.ts`.\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\n/**\n * Derive labeled options from filter column matches, for use in DatasetOption.filters.\n *\n * @param matches - from findFilterColumns()\n * @param refsByObjectId - from {@link buildRefMap}\n * @param labelOptions - forwarded to deriveDistinctLabels()\n */\nexport function filterMatchesToOptions(\n matches: ColumnMatch[],\n refsByObjectId: ReadonlyMap<PObjectId, PlRef>,\n labelOptions?: DeriveLabelsOptions,\n): Option[] {\n if (matches.length === 0) return [];\n\n // Each ColumnMatch can be reached via multiple variants (different linker\n // paths / qualifications). We emit one Option per variant so the user can\n // pick a specific path — `deriveDistinctLabels` disambiguates labels by\n // path.\n const flattened = matches.flatMap((m) => m.variants.map((v) => ({ match: m, variant: v })));\n\n const entries: Entry[] = flattened.map(({ match, variant }) => ({\n spec: match.column.spec,\n linkerPath: variant.path.map((p) => ({ spec: p.linker.spec })),\n }));\n\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return flattened.map(({ match }, i) => {\n const ref = refsByObjectId.get(match.column.id);\n if (ref === undefined)\n throw new Error(\n `no PlRef found for filter column ${match.column.spec.name} (id: ${match.column.id})`,\n );\n return { ref, label: labels[i] };\n });\n}\n\n/**\n * Usage: `buildRefMap(ctx.resultPool.getSpecs().entries)`\n */\nexport function buildRefMap(entries: readonly { readonly ref: PlRef }[]): Map<PObjectId, PlRef> {\n const map = new Map<PObjectId, PlRef>();\n for (const entry of entries) {\n map.set(canonicalize(entry.ref)! as PObjectId, entry.ref);\n }\n return map;\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,SAAgB,kBAAkB,YAAqD;AACrF,QAAO,WAAW,YAAY;EAC5B,MAAM;EACN,SAAS,EACP,aAAa,GAAG,WAAW,WAAW,QAAQ,EAC/C;EACF,CAAC;;;;;;;;;AAUJ,SAAgB,uBACd,SACA,gBACA,cACU;AACV,KAAI,QAAQ,WAAW,EAAG,QAAO,EAAE;CAMnC,MAAM,YAAY,QAAQ,SAAS,MAAM,EAAE,SAAS,KAAK,OAAO;EAAE,OAAO;EAAG,SAAS;EAAG,EAAE,CAAC;CAO3F,MAAM,SAAS,qBALU,UAAU,KAAK,EAAE,OAAO,eAAe;EAC9D,MAAM,MAAM,OAAO;EACnB,YAAY,QAAQ,KAAK,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,MAAM,EAAE;EAC/D,EAAE,EAE0C,aAAa;AAE1D,QAAO,UAAU,KAAK,EAAE,SAAS,MAAM;EACrC,MAAM,MAAM,eAAe,IAAI,MAAM,OAAO,GAAG;AAC/C,MAAI,QAAQ,KAAA,EACV,OAAM,IAAI,MACR,oCAAoC,MAAM,OAAO,KAAK,KAAK,QAAQ,MAAM,OAAO,GAAG,GACpF;AACH,SAAO;GAAE;GAAK,OAAO,OAAO;GAAI;GAChC;;;;;AAMJ,SAAgB,YAAY,SAAoE;CAC9F,MAAM,sBAAM,IAAI,KAAuB;AACvC,MAAK,MAAM,SAAS,QAClB,KAAI,IAAI,aAAa,MAAM,IAAI,EAAgB,MAAM,IAAI;AAE3D,QAAO"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
require("../pframe_utils/axes.cjs");
|
|
2
2
|
require("./PFrameForGraphs.cjs");
|
|
3
3
|
require("./PlAnnotations/filters_ui.cjs");
|
|
4
|
+
require("./PlDatasetSelector/filter_discovery.cjs");
|
|
5
|
+
require("./PlDatasetSelector/build_dataset_options.cjs");
|
|
6
|
+
require("./PlDatasetSelector/index.cjs");
|
|
4
7
|
require("./PlDataTable/state-migration.cjs");
|
|
5
8
|
require("./PlDataTable/createPlDataTableSheet.cjs");
|
|
6
9
|
require("./PlDataTable/createPlDataTable/utils.cjs");
|
|
@@ -2,6 +2,8 @@ import { AxesVault, enrichCompatible, getAvailableWithLinkersAxes } from "../pfr
|
|
|
2
2
|
import { createPFrameForGraphs, isHiddenFromGraphColumn, isHiddenFromUIColumn } from "./PFrameForGraphs.js";
|
|
3
3
|
import { AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationStep, IsNA, Log10, NotFilter, NumericalComparisonFilter, OrFilter, PatternFilter, PatternPredicate, PatternPredicateContainSubsequence, PatternPredicateEquals, SortedCumulativeSum, TransformedColumn, ValueRank } from "./PlAnnotations/filter.js";
|
|
4
4
|
import { AnnotationScriptUi, AnnotationStepUi, AnyForm, FilterUi, FilterUiOfType, FilterUiType, FormField, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, compileAnnotationScript, compileFilter, compileFilters, unreachable } from "./PlAnnotations/filters_ui.js";
|
|
5
|
+
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./PlDatasetSelector/filter_discovery.js";
|
|
6
|
+
import { BuildDatasetOptions, buildDatasetOptions } from "./PlDatasetSelector/build_dataset_options.js";
|
|
5
7
|
import { PTableParamsV2, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnId, PlTableColumnIdJson } from "./PlDataTable/typesV5.js";
|
|
6
8
|
import { PlDataTableStateV2, createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./PlDataTable/state-migration.js";
|
|
7
9
|
import { createPlDataTableSheet } from "./PlDataTable/createPlDataTableSheet.js";
|
package/dist/components/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import "../pframe_utils/axes.js";
|
|
2
2
|
import "./PFrameForGraphs.js";
|
|
3
3
|
import "./PlAnnotations/filters_ui.js";
|
|
4
|
+
import "./PlDatasetSelector/filter_discovery.js";
|
|
5
|
+
import "./PlDatasetSelector/build_dataset_options.js";
|
|
6
|
+
import "./PlDatasetSelector/index.js";
|
|
4
7
|
import "./PlDataTable/state-migration.js";
|
|
5
8
|
import "./PlDataTable/createPlDataTableSheet.js";
|
|
6
9
|
import "./PlDataTable/createPlDataTable/utils.js";
|
package/dist/index.cjs
CHANGED
|
@@ -31,6 +31,12 @@ const require_axes = require("./pframe_utils/axes.cjs");
|
|
|
31
31
|
const require_columns = require("./pframe_utils/columns.cjs");
|
|
32
32
|
const require_PFrameForGraphs = require("./components/PFrameForGraphs.cjs");
|
|
33
33
|
const require_filters_ui = require("./components/PlAnnotations/filters_ui.cjs");
|
|
34
|
+
const require_filter_discovery = require("./components/PlDatasetSelector/filter_discovery.cjs");
|
|
35
|
+
const require_column_selector = require("./columns/column_selector.cjs");
|
|
36
|
+
const require_column_snapshot_provider = require("./columns/column_snapshot_provider.cjs");
|
|
37
|
+
const require_column_collection_builder = require("./columns/column_collection_builder.cjs");
|
|
38
|
+
const require_ctx_column_sources = require("./columns/ctx_column_sources.cjs");
|
|
39
|
+
const require_build_dataset_options = require("./components/PlDatasetSelector/build_dataset_options.cjs");
|
|
34
40
|
const require_filterToQuery = require("./filters/converters/filterToQuery.cjs");
|
|
35
41
|
const require_filterUiToExpressionImpl = require("./filters/converters/filterUiToExpressionImpl.cjs");
|
|
36
42
|
const require_distill = require("./filters/distill.cjs");
|
|
@@ -38,10 +44,6 @@ require("./filters/index.cjs");
|
|
|
38
44
|
const require_state_migration = require("./components/PlDataTable/state-migration.cjs");
|
|
39
45
|
const require_createPlDataTableSheet = require("./components/PlDataTable/createPlDataTableSheet.cjs");
|
|
40
46
|
const require_column_snapshot = require("./columns/column_snapshot.cjs");
|
|
41
|
-
const require_column_snapshot_provider = require("./columns/column_snapshot_provider.cjs");
|
|
42
|
-
const require_column_selector = require("./columns/column_selector.cjs");
|
|
43
|
-
const require_column_collection_builder = require("./columns/column_collection_builder.cjs");
|
|
44
|
-
const require_ctx_column_sources = require("./columns/ctx_column_sources.cjs");
|
|
45
47
|
const require_expand_by_partition = require("./columns/expand_by_partition.cjs");
|
|
46
48
|
require("./columns/index.cjs");
|
|
47
49
|
const require_derive_distinct_tooltips = require("./labels/derive_distinct_tooltips.cjs");
|
|
@@ -112,6 +114,8 @@ exports.UiState = require_actions.UiState;
|
|
|
112
114
|
exports.allPColumnsReady = require_pcolumn_data.allPColumnsReady;
|
|
113
115
|
exports.and = require_actions.and;
|
|
114
116
|
exports.blockServiceNames = require_block_services.blockServiceNames;
|
|
117
|
+
exports.buildDatasetOptions = require_build_dataset_options.buildDatasetOptions;
|
|
118
|
+
exports.buildRefMap = require_filter_discovery.buildRefMap;
|
|
115
119
|
exports.buildServices = require_service_bridge.buildServices;
|
|
116
120
|
exports.collectCtxColumnSnapshotProviders = require_ctx_column_sources.collectCtxColumnSnapshotProviders;
|
|
117
121
|
exports.compileAnnotationScript = require_filters_ui.compileAnnotationScript;
|
|
@@ -149,7 +153,9 @@ exports.expandByPartition = require_expand_by_partition.expandByPartition;
|
|
|
149
153
|
exports.extractArchiveAndGetURL = require_actions.extractArchiveAndGetURL;
|
|
150
154
|
exports.extractConfig = require_normalization.extractConfig;
|
|
151
155
|
exports.filterDataInfoEntries = require_axis_filtering.filterDataInfoEntries;
|
|
156
|
+
exports.filterMatchesToOptions = require_filter_discovery.filterMatchesToOptions;
|
|
152
157
|
exports.filterSpecToSpecQueryExpr = require_filterToQuery.filterSpecToSpecQueryExpr;
|
|
158
|
+
exports.findFilterColumns = require_filter_discovery.findFilterColumns;
|
|
153
159
|
exports.flatten = require_actions.flatten;
|
|
154
160
|
exports.fromPlOption = require_ref_util.fromPlOption;
|
|
155
161
|
exports.fromPlRef = require_ref_util.fromPlRef;
|
package/dist/index.d.ts
CHANGED
|
@@ -44,14 +44,16 @@ import { distillFilterSpec } from "./filters/distill.js";
|
|
|
44
44
|
import { AnnotationSpec, AnnotationSpecUi, ExpressionSpec, FilterSpecUi } from "./annotations/types.js";
|
|
45
45
|
import { convertFilterSpecsToExpressionSpecs } from "./annotations/converter.js";
|
|
46
46
|
import { AnnotationScriptUi, AnnotationStepUi, AnyForm, FilterUi, FilterUiOfType, FilterUiType, FormField, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, compileAnnotationScript, compileFilter, compileFilters, unreachable } from "./components/PlAnnotations/filters_ui.js";
|
|
47
|
+
import { ColumnSelector, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, StringMatcher, convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector } from "./columns/column_selector.js";
|
|
48
|
+
import { ColumnData, ColumnDataStatus, ColumnSnapshot, createColumnSnapshot, createReadyColumnData } from "./columns/column_snapshot.js";
|
|
49
|
+
import { ArrayColumnProvider, ColumnSnapshotProvider, ColumnSource, OutputColumnProvider, OutputColumnProviderOpts, SnapshotColumnProvider, isColumnSnapshotProvider, toColumnSnapshotProvider } from "./columns/column_snapshot_provider.js";
|
|
50
|
+
import { AnchorEntry, AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, BuildOptions, ColumnCollection, ColumnCollectionBuilder, ColumnMatch, FindColumnsOptions, MatchQualifications, MatchVariant, MatchingMode } from "./columns/column_collection_builder.js";
|
|
51
|
+
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./components/PlDatasetSelector/filter_discovery.js";
|
|
52
|
+
import { BuildDatasetOptions, buildDatasetOptions } from "./components/PlDatasetSelector/build_dataset_options.js";
|
|
47
53
|
import { PTableParamsV2, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnId, PlTableColumnIdJson } from "./components/PlDataTable/typesV5.js";
|
|
48
54
|
import { PlDataTableStateV2, createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./components/PlDataTable/state-migration.js";
|
|
49
55
|
import { createPlDataTableSheet } from "./components/PlDataTable/createPlDataTableSheet.js";
|
|
50
56
|
import { createPlDataTableV2 } from "./components/PlDataTable/createPlDataTable/createPlDataTableV2.js";
|
|
51
|
-
import { ColumnData, ColumnDataStatus, ColumnSnapshot, createColumnSnapshot, createReadyColumnData } from "./columns/column_snapshot.js";
|
|
52
|
-
import { ArrayColumnProvider, ColumnSnapshotProvider, ColumnSource, OutputColumnProvider, OutputColumnProviderOpts, SnapshotColumnProvider, isColumnSnapshotProvider, toColumnSnapshotProvider } from "./columns/column_snapshot_provider.js";
|
|
53
|
-
import { ColumnSelector, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, StringMatcher, convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector } from "./columns/column_selector.js";
|
|
54
|
-
import { AnchorEntry, AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, BuildOptions, ColumnCollection, ColumnCollectionBuilder, ColumnMatch, FindColumnsOptions, MatchQualifications, MatchVariant, MatchingMode } from "./columns/column_collection_builder.js";
|
|
55
57
|
import { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders } from "./columns/ctx_column_sources.js";
|
|
56
58
|
import { ExpandByPartitionOpts, ExpandByPartitionResult, SplitAxis, expandByPartition } from "./columns/expand_by_partition.js";
|
|
57
59
|
import { discoverTableColumnSnaphots } from "./components/PlDataTable/createPlDataTable/discoverColumns.js";
|
|
@@ -71,4 +73,4 @@ import { getService } from "./services/get_services.js";
|
|
|
71
73
|
import { getEnvironmentValue } from "./env_value.js";
|
|
72
74
|
export * from "@milaboratories/pl-model-common";
|
|
73
75
|
export * from "@milaboratories/pl-error-like";
|
|
74
|
-
export { ActAnd, ActExtractArchiveAndGetURL, ActFlatten, ActGetBlobContent, ActGetBlobContentAsJson, ActGetBlobContentAsString, ActGetDownloadedBlobContent, ActGetField, ActGetFromCtx, ActGetImmediate, ActGetLastLogs, ActGetLogHandle, ActGetOnDemandBlobContent, ActGetProgressLog, ActGetProgressLogWithInfo, ActGetResourceField, ActGetResourceValueAsJson, ActImportProgress, ActIsEmpty, ActIsolate, ActMakeArray, ActMakeObject, ActMapArrayValues, ActMapRecordValues, ActMapResourceFields, ActNot, ActOr, ActionResult, AnchorEntry, AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationScriptUi, AnnotationSpec, AnnotationSpecUi, AnnotationStep, AnnotationStepUi, AnyForm, Args, ArrayColumnProvider, AxesVault, AxisLabelProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockApiV1, BlockApiV2, BlockConfig, BlockConfigV3, BlockConfigV4, BlockDefaultModelServices, BlockDefaultUiServices, BlockModel, BlockModelInfo, BlockModelV3, BlockRenderCtx, BlockServiceFlags, BlockStatePatch, type BlockStorage, BlockStorageFacade, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, type BlockStorageSchemaVersion, BuildOptions, CancelSubscription, Cfg, CfgAnd, CfgBlobContent, CfgBlobContentAsJson, CfgBlobContentAsString, CfgDownloadedBlobContent, CfgExtractArchiveAndGetURL, CfgFlatten, CfgGetFromCtx, CfgGetJsonField, CfgGetResourceField, CfgImmediate, CfgImportProgress, CfgIsEmpty, CfgIsolate, CfgLastLogs, CfgLogHandle, CfgMakeArray, CfgMakeObject, CfgMapArrayValues, CfgMapRecordValues, CfgMapResourceFields, CfgNot, CfgOnDemandBlobContent, CfgOr, CfgProgressLog, CfgProgressLogWithInfo, CfgRenderingMode, CfgResourceValueAsJson, Checked, ColumnCollection, ColumnCollectionBuilder, ColumnData, ColumnDataStatus, ColumnMatch, ColumnMatcher, ColumnOrderRule, ColumnProvider, ColumnSelector, ColumnSnapshot, ColumnSnapshotProvider, ColumnSource, ColumnVisibilityRule, ColumnsDisplayOptions, ColumnsSelectorConfig, CommonFieldTraverseOps, CommonTraversalOps, ConfAction, ConfigRenderLambda, ConfigRenderLambdaFlags, ConfigResult, CurrentSdkInfo, DataModel, DataModelBuilder, DeriveHref, DeriveLabelsOptions, Entry, ExpandByPartitionOpts, ExpandByPartitionResult, ExpressionSpec, ExtractAction, ExtractFunctionHandleReturn, ExtractFutureRefType, FieldTraversalStep, FieldType, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilterSpecUi, FilterUi, FilterUiOfType, FilterUiType, FindColumnsOptions, FormField, FutureRef, GetFieldStep, InferArgsType, InferBlockState, InferBlockStatePatch, InferDataType, InferFactoryData, InferFactoryModelServices, InferFactoryOutputs, InferFactoryParams, InferFactoryUiServices, InferHrefType, InferOutputType, InferOutputsFromConfigs, InferOutputsFromLambdas, InferOutputsType, InferPluginData, InferPluginHandle, InferPluginHandles, InferPluginNames, InferRenderFunctionReturn, InferUiState, InferVarTypeSafe, IsNA, It, internal_d_exports as JsRenderInternal, DeriveLabelsOptions as LabelDerivationOps, Log10, MainOutputs, MatchQualifications, MatchVariant, MatchingMode, type MigrateBlockStorageConfig, type MigrationFailure, type MigrationResult, type MigrationSuccess, ModelServices, type MutateStoragePayload, NotFilter, NumericalComparisonFilter, OptionalPlResourceEntry, OrFilter, OutputColumnProvider, OutputColumnProviderOpts, OutputError, PColumnCollection, PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, PColumnKeyList, PColumnLazyUniversal, PColumnLazyWithLabel, PColumnPredicate, PColumnResourceMapData, PColumnResourceMapEntry, PFrameImpl, POCExtractAction, PTableKey, PTableParamsV2, type ParamsInput, Patch, PatternFilter, PatternPredicate, PatternPredicateContainSubsequence, PatternPredicateEquals, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentModel, PlMultiSequenceAlignmentSettings, PlMultiSequenceAlignmentWidget, PlResourceEntry, PlSelectionModel, PlTableColumnId, PlTableColumnIdJson, Platforma, PlatformaApiVersion, PlatformaExtended, PlatformaFactory, PlatformaSDKVersion, PlatformaV1, PlatformaV2, PlatformaV3, type PluginConfig, type PluginData, PluginDataModel, PluginDataModelBuilder, type PluginDataModelVersions, type PluginFactory, PluginFactoryLike, PluginHandle, PluginInstance, PluginModel, type PluginName, type PluginOutputs, type PluginParams, type PluginRecord, type PluginRegistry, PluginRenderCtx, PrimitiveOrConfig, PrimitiveToCfg, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, RenderCtx, RenderCtxBase, RenderCtxLegacy, RenderFunction, RenderFunctionLegacy, ResolveCfgType, ResolveModelServices, ResolveUiServices, ResourceTraversalOps, ResourceType, ResultPool, ResultPoolColumnSnapshotProvider, SdkInfo, ServiceProxy, SimplifiedPColumnSpec, SimplifiedUniversalPColumnEntry, SnapshotColumnProvider, SortedCumulativeSum, Entry as SpecExtractorResult, SplitAxis, StagingOutputs, StdCtx, StdCtxArgsOnly, StringMatcher, TooltipEntry, Trace, TraceEntry, TransformedColumn, TreeNodeAccessor, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, TypedConfig, TypedConfigOrConfigLambda, TypedConfigOrString, UiServices, UiState, Unionize, UniversalColumnOption, UnwrapFutureRef, ValueRank, type VersionedData, allPColumnsReady, and, blockServiceNames, buildServices, collectCtxColumnSnapshotProviders, compileAnnotationScript, compileFilter, compileFilters, convertColumnSelectorToMultiColumnSelector, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector, createBlockStorage, createColumnSnapshot, createDefaultPTableParams, createPFrameForGraphs, createPlDataTable, createPlDataTableOptionsV3, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, createPlSelectionModel, createReadyColumnData, createRowSelectionColumn, createServiceProxy, deriveDataFromStorage, deriveDistinctLabels, deriveDistinctTooltips, deriveLabels, discoverTableColumnSnaphots, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, expandByPartition, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterSpecToSpecQueryExpr, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getDownloadedBlobContent, getEffectiveVisibility, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getOnDemandBlobContent, getOrderPriority, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getService, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, ifDef, isBlockStorage, isColumnHidden, isColumnOptional, isColumnSnapshotProvider, isConfigLambda, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, migrateBlockStorage, normalizeBlockStorage, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, readOutput, registerFacadeCallbacks, toColumnSnapshotProvider, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs };
|
|
76
|
+
export { ActAnd, ActExtractArchiveAndGetURL, ActFlatten, ActGetBlobContent, ActGetBlobContentAsJson, ActGetBlobContentAsString, ActGetDownloadedBlobContent, ActGetField, ActGetFromCtx, ActGetImmediate, ActGetLastLogs, ActGetLogHandle, ActGetOnDemandBlobContent, ActGetProgressLog, ActGetProgressLogWithInfo, ActGetResourceField, ActGetResourceValueAsJson, ActImportProgress, ActIsEmpty, ActIsolate, ActMakeArray, ActMakeObject, ActMapArrayValues, ActMapRecordValues, ActMapResourceFields, ActNot, ActOr, ActionResult, AnchorEntry, AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationScriptUi, AnnotationSpec, AnnotationSpecUi, AnnotationStep, AnnotationStepUi, AnyForm, Args, ArrayColumnProvider, AxesVault, AxisLabelProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockApiV1, BlockApiV2, BlockConfig, BlockConfigV3, BlockConfigV4, BlockDefaultModelServices, BlockDefaultUiServices, BlockModel, BlockModelInfo, BlockModelV3, BlockRenderCtx, BlockServiceFlags, BlockStatePatch, type BlockStorage, BlockStorageFacade, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, type BlockStorageSchemaVersion, BuildDatasetOptions, BuildOptions, CancelSubscription, Cfg, CfgAnd, CfgBlobContent, CfgBlobContentAsJson, CfgBlobContentAsString, CfgDownloadedBlobContent, CfgExtractArchiveAndGetURL, CfgFlatten, CfgGetFromCtx, CfgGetJsonField, CfgGetResourceField, CfgImmediate, CfgImportProgress, CfgIsEmpty, CfgIsolate, CfgLastLogs, CfgLogHandle, CfgMakeArray, CfgMakeObject, CfgMapArrayValues, CfgMapRecordValues, CfgMapResourceFields, CfgNot, CfgOnDemandBlobContent, CfgOr, CfgProgressLog, CfgProgressLogWithInfo, CfgRenderingMode, CfgResourceValueAsJson, Checked, ColumnCollection, ColumnCollectionBuilder, ColumnData, ColumnDataStatus, ColumnMatch, ColumnMatcher, ColumnOrderRule, ColumnProvider, ColumnSelector, ColumnSnapshot, ColumnSnapshotProvider, ColumnSource, ColumnVisibilityRule, ColumnsDisplayOptions, ColumnsSelectorConfig, CommonFieldTraverseOps, CommonTraversalOps, ConfAction, ConfigRenderLambda, ConfigRenderLambdaFlags, ConfigResult, CurrentSdkInfo, DataModel, DataModelBuilder, DeriveHref, DeriveLabelsOptions, Entry, ExpandByPartitionOpts, ExpandByPartitionResult, ExpressionSpec, ExtractAction, ExtractFunctionHandleReturn, ExtractFutureRefType, FieldTraversalStep, FieldType, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilterSpecUi, FilterUi, FilterUiOfType, FilterUiType, FindColumnsOptions, FormField, FutureRef, GetFieldStep, InferArgsType, InferBlockState, InferBlockStatePatch, InferDataType, InferFactoryData, InferFactoryModelServices, InferFactoryOutputs, InferFactoryParams, InferFactoryUiServices, InferHrefType, InferOutputType, InferOutputsFromConfigs, InferOutputsFromLambdas, InferOutputsType, InferPluginData, InferPluginHandle, InferPluginHandles, InferPluginNames, InferRenderFunctionReturn, InferUiState, InferVarTypeSafe, IsNA, It, internal_d_exports as JsRenderInternal, DeriveLabelsOptions as LabelDerivationOps, Log10, MainOutputs, MatchQualifications, MatchVariant, MatchingMode, type MigrateBlockStorageConfig, type MigrationFailure, type MigrationResult, type MigrationSuccess, ModelServices, type MutateStoragePayload, NotFilter, NumericalComparisonFilter, OptionalPlResourceEntry, OrFilter, OutputColumnProvider, OutputColumnProviderOpts, OutputError, PColumnCollection, PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, PColumnKeyList, PColumnLazyUniversal, PColumnLazyWithLabel, PColumnPredicate, PColumnResourceMapData, PColumnResourceMapEntry, PFrameImpl, POCExtractAction, PTableKey, PTableParamsV2, type ParamsInput, Patch, PatternFilter, PatternPredicate, PatternPredicateContainSubsequence, PatternPredicateEquals, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentModel, PlMultiSequenceAlignmentSettings, PlMultiSequenceAlignmentWidget, PlResourceEntry, PlSelectionModel, PlTableColumnId, PlTableColumnIdJson, Platforma, PlatformaApiVersion, PlatformaExtended, PlatformaFactory, PlatformaSDKVersion, PlatformaV1, PlatformaV2, PlatformaV3, type PluginConfig, type PluginData, PluginDataModel, PluginDataModelBuilder, type PluginDataModelVersions, type PluginFactory, PluginFactoryLike, PluginHandle, PluginInstance, PluginModel, type PluginName, type PluginOutputs, type PluginParams, type PluginRecord, type PluginRegistry, PluginRenderCtx, PrimitiveOrConfig, PrimitiveToCfg, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, RenderCtx, RenderCtxBase, RenderCtxLegacy, RenderFunction, RenderFunctionLegacy, ResolveCfgType, ResolveModelServices, ResolveUiServices, ResourceTraversalOps, ResourceType, ResultPool, ResultPoolColumnSnapshotProvider, SdkInfo, ServiceProxy, SimplifiedPColumnSpec, SimplifiedUniversalPColumnEntry, SnapshotColumnProvider, SortedCumulativeSum, Entry as SpecExtractorResult, SplitAxis, StagingOutputs, StdCtx, StdCtxArgsOnly, StringMatcher, TooltipEntry, Trace, TraceEntry, TransformedColumn, TreeNodeAccessor, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, TypedConfig, TypedConfigOrConfigLambda, TypedConfigOrString, UiServices, UiState, Unionize, UniversalColumnOption, UnwrapFutureRef, ValueRank, type VersionedData, allPColumnsReady, and, blockServiceNames, buildDatasetOptions, buildRefMap, buildServices, collectCtxColumnSnapshotProviders, compileAnnotationScript, compileFilter, compileFilters, convertColumnSelectorToMultiColumnSelector, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector, createBlockStorage, createColumnSnapshot, createDefaultPTableParams, createPFrameForGraphs, createPlDataTable, createPlDataTableOptionsV3, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, createPlSelectionModel, createReadyColumnData, createRowSelectionColumn, createServiceProxy, deriveDataFromStorage, deriveDistinctLabels, deriveDistinctTooltips, deriveLabels, discoverTableColumnSnaphots, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, expandByPartition, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterMatchesToOptions, filterSpecToSpecQueryExpr, findFilterColumns, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getDownloadedBlobContent, getEffectiveVisibility, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getOnDemandBlobContent, getOrderPriority, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getService, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, ifDef, isBlockStorage, isColumnHidden, isColumnOptional, isColumnSnapshotProvider, isConfigLambda, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, migrateBlockStorage, normalizeBlockStorage, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, readOutput, registerFacadeCallbacks, toColumnSnapshotProvider, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs };
|
package/dist/index.js
CHANGED
|
@@ -30,6 +30,12 @@ import { enrichCompatible, getAvailableWithLinkersAxes } from "./pframe_utils/ax
|
|
|
30
30
|
import { getAllRelatedColumns, getRelatedColumns } from "./pframe_utils/columns.js";
|
|
31
31
|
import { createPFrameForGraphs, isHiddenFromGraphColumn, isHiddenFromUIColumn } from "./components/PFrameForGraphs.js";
|
|
32
32
|
import { compileAnnotationScript, compileFilter, compileFilters, unreachable } from "./components/PlAnnotations/filters_ui.js";
|
|
33
|
+
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./components/PlDatasetSelector/filter_discovery.js";
|
|
34
|
+
import { convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector } from "./columns/column_selector.js";
|
|
35
|
+
import { ArrayColumnProvider, OutputColumnProvider, SnapshotColumnProvider, isColumnSnapshotProvider, toColumnSnapshotProvider } from "./columns/column_snapshot_provider.js";
|
|
36
|
+
import { ColumnCollectionBuilder } from "./columns/column_collection_builder.js";
|
|
37
|
+
import { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders } from "./columns/ctx_column_sources.js";
|
|
38
|
+
import { buildDatasetOptions } from "./components/PlDatasetSelector/build_dataset_options.js";
|
|
33
39
|
import { filterSpecToSpecQueryExpr } from "./filters/converters/filterToQuery.js";
|
|
34
40
|
import { convertFilterUiToExpressionImpl, convertFilterUiToExpressions } from "./filters/converters/filterUiToExpressionImpl.js";
|
|
35
41
|
import { distillFilterSpec } from "./filters/distill.js";
|
|
@@ -37,10 +43,6 @@ import "./filters/index.js";
|
|
|
37
43
|
import { createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./components/PlDataTable/state-migration.js";
|
|
38
44
|
import { createPlDataTableSheet } from "./components/PlDataTable/createPlDataTableSheet.js";
|
|
39
45
|
import { createColumnSnapshot, createReadyColumnData } from "./columns/column_snapshot.js";
|
|
40
|
-
import { ArrayColumnProvider, OutputColumnProvider, SnapshotColumnProvider, isColumnSnapshotProvider, toColumnSnapshotProvider } from "./columns/column_snapshot_provider.js";
|
|
41
|
-
import { convertColumnSelectorToMultiColumnSelector, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector } from "./columns/column_selector.js";
|
|
42
|
-
import { ColumnCollectionBuilder } from "./columns/column_collection_builder.js";
|
|
43
|
-
import { ResultPoolColumnSnapshotProvider, collectCtxColumnSnapshotProviders } from "./columns/ctx_column_sources.js";
|
|
44
46
|
import { expandByPartition } from "./columns/expand_by_partition.js";
|
|
45
47
|
import "./columns/index.js";
|
|
46
48
|
import { deriveDistinctTooltips } from "./labels/derive_distinct_tooltips.js";
|
|
@@ -62,4 +64,4 @@ import { getAxisUniqueValues, getColumnOrAxisValueLabelsId, getColumnSpecById, g
|
|
|
62
64
|
import { getEnvironmentValue } from "./env_value.js";
|
|
63
65
|
export * from "@milaboratories/pl-model-common";
|
|
64
66
|
export * from "@milaboratories/pl-error-like";
|
|
65
|
-
export { Args, ArrayColumnProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockModel, BlockModelV3, BlockRenderCtx, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, ColumnCollectionBuilder, CurrentSdkInfo, DataModel, DataModelBuilder, FutureRef, It, internal_exports as JsRenderInternal, MainOutputs, OutputColumnProvider, OutputError, PColumnCollection, PFrameImpl, PlatformaSDKVersion, PluginDataModel, PluginDataModelBuilder, PluginInstance, PluginModel, PluginRenderCtx, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RenderCtxBase, RenderCtxLegacy, ResultPool, ResultPoolColumnSnapshotProvider, SnapshotColumnProvider, StagingOutputs, TreeNodeAccessor, UiState, allPColumnsReady, and, blockServiceNames, buildServices, collectCtxColumnSnapshotProviders, compileAnnotationScript, compileFilter, compileFilters, convertColumnSelectorToMultiColumnSelector, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector, createBlockStorage, createColumnSnapshot, createDefaultPTableParams, createPFrameForGraphs, createPlDataTable, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, createPlSelectionModel, createReadyColumnData, createRowSelectionColumn, createServiceProxy, deriveDataFromStorage, deriveDistinctLabels, deriveDistinctTooltips, deriveLabels, discoverTableColumnSnaphots, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, expandByPartition, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterSpecToSpecQueryExpr, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getDownloadedBlobContent, getEffectiveVisibility, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getOnDemandBlobContent, getOrderPriority, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getService, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, ifDef, isBlockStorage, isColumnHidden, isColumnOptional, isColumnSnapshotProvider, isConfigLambda, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, migrateBlockStorage, normalizeBlockStorage, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, readOutput, registerFacadeCallbacks, toColumnSnapshotProvider, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs };
|
|
67
|
+
export { Args, ArrayColumnProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockModel, BlockModelV3, BlockRenderCtx, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, ColumnCollectionBuilder, CurrentSdkInfo, DataModel, DataModelBuilder, FutureRef, It, internal_exports as JsRenderInternal, MainOutputs, OutputColumnProvider, OutputError, PColumnCollection, PFrameImpl, PlatformaSDKVersion, PluginDataModel, PluginDataModelBuilder, PluginInstance, PluginModel, PluginRenderCtx, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RenderCtxBase, RenderCtxLegacy, ResultPool, ResultPoolColumnSnapshotProvider, SnapshotColumnProvider, StagingOutputs, TreeNodeAccessor, UiState, allPColumnsReady, and, blockServiceNames, buildDatasetOptions, buildRefMap, buildServices, collectCtxColumnSnapshotProviders, compileAnnotationScript, compileFilter, compileFilters, convertColumnSelectorToMultiColumnSelector, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector, createBlockStorage, createColumnSnapshot, createDefaultPTableParams, createPFrameForGraphs, createPlDataTable, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, createPlSelectionModel, createReadyColumnData, createRowSelectionColumn, createServiceProxy, deriveDataFromStorage, deriveDistinctLabels, deriveDistinctTooltips, deriveLabels, discoverTableColumnSnaphots, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, expandByPartition, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterMatchesToOptions, filterSpecToSpecQueryExpr, findFilterColumns, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getDownloadedBlobContent, getEffectiveVisibility, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getOnDemandBlobContent, getOrderPriority, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getService, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, ifDef, isBlockStorage, isColumnHidden, isColumnOptional, isColumnSnapshotProvider, isConfigLambda, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, migrateBlockStorage, normalizeBlockStorage, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, readOutput, registerFacadeCallbacks, toColumnSnapshotProvider, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs };
|
package/dist/package.cjs
CHANGED
package/dist/package.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-sdk/model",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.67.0",
|
|
4
4
|
"description": "Platforma.bio SDK / Block Model",
|
|
5
5
|
"files": [
|
|
6
6
|
"./dist/**/*",
|
|
@@ -30,20 +30,20 @@
|
|
|
30
30
|
"fast-json-patch": "^3.1.1",
|
|
31
31
|
"utility-types": "^3.11.0",
|
|
32
32
|
"zod": "~3.25.76",
|
|
33
|
-
"@milaboratories/pl-error-like": "1.12.9",
|
|
34
33
|
"@milaboratories/helpers": "1.14.1",
|
|
35
|
-
"@milaboratories/pl-model-common": "1.
|
|
36
|
-
"@milaboratories/pl-model-middle-layer": "1.18.
|
|
37
|
-
"@milaboratories/
|
|
34
|
+
"@milaboratories/pl-model-common": "1.35.0",
|
|
35
|
+
"@milaboratories/pl-model-middle-layer": "1.18.4",
|
|
36
|
+
"@milaboratories/pl-error-like": "1.12.9",
|
|
37
|
+
"@milaboratories/ptabler-expression-js": "1.2.14"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@vitest/coverage-istanbul": "^4.1.3",
|
|
41
41
|
"fast-json-patch": "^3.1.1",
|
|
42
42
|
"typescript": "~5.9.3",
|
|
43
43
|
"vitest": "^4.1.3",
|
|
44
|
-
"@milaboratories/pf-driver": "1.3.
|
|
44
|
+
"@milaboratories/pf-driver": "1.3.11",
|
|
45
45
|
"@milaboratories/build-configs": "2.0.0",
|
|
46
|
-
"@milaboratories/pf-spec-driver": "1.3.
|
|
46
|
+
"@milaboratories/pf-spec-driver": "1.3.3",
|
|
47
47
|
"@milaboratories/ts-builder": "1.3.2",
|
|
48
48
|
"@milaboratories/ts-configs": "1.2.3"
|
|
49
49
|
},
|
package/src/block_state_util.ts
CHANGED
|
@@ -24,7 +24,8 @@ export function wrapOutputs<Outputs extends BlockOutputsBase>(
|
|
|
24
24
|
outputs: Outputs,
|
|
25
25
|
): SimpleOutputs<Outputs> {
|
|
26
26
|
return new Proxy(outputs, {
|
|
27
|
-
get(target, key
|
|
27
|
+
get(target, key, receiver) {
|
|
28
|
+
if (typeof key === "symbol" || !(key in target)) return Reflect.get(target, key, receiver);
|
|
28
29
|
return readOutput(target[key]);
|
|
29
30
|
},
|
|
30
31
|
}) as SimpleOutputs<Outputs>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DatasetOption,
|
|
3
|
+
Option,
|
|
4
|
+
PColumnSelector,
|
|
5
|
+
PObjectSpec,
|
|
6
|
+
} from "@milaboratories/pl-model-common";
|
|
7
|
+
import type { DeriveLabelsOptions } from "../../labels/derive_distinct_labels";
|
|
8
|
+
import type { RenderCtxBase } from "../../render";
|
|
9
|
+
import { ColumnCollectionBuilder } from "../../columns/column_collection_builder";
|
|
10
|
+
import { collectCtxColumnSnapshotProviders } from "../../columns/ctx_column_sources";
|
|
11
|
+
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./filter_discovery";
|
|
12
|
+
|
|
13
|
+
export type BuildDatasetOptions = {
|
|
14
|
+
/** Which result pool columns qualify as datasets. Defaults to all. */
|
|
15
|
+
selector?: PColumnSelector | PColumnSelector[] | ((spec: PObjectSpec) => boolean);
|
|
16
|
+
/** Formatting options for filter labels. */
|
|
17
|
+
labelOptions?: DeriveLabelsOptions;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Usage:
|
|
22
|
+
* ```ts
|
|
23
|
+
* .output("datasetOptions", (ctx) => buildDatasetOptions(ctx))
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function buildDatasetOptions(
|
|
27
|
+
ctx: RenderCtxBase,
|
|
28
|
+
opts?: BuildDatasetOptions,
|
|
29
|
+
): DatasetOption[] | undefined {
|
|
30
|
+
const predicate = opts?.selector ?? (() => true);
|
|
31
|
+
const options = ctx.resultPool.getOptions(predicate, { refsWithEnrichments: true });
|
|
32
|
+
if (options.length === 0) return [];
|
|
33
|
+
|
|
34
|
+
const columnSources = collectCtxColumnSnapshotProviders(ctx);
|
|
35
|
+
const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);
|
|
36
|
+
const pframeSpec = ctx.getService("pframeSpec");
|
|
37
|
+
|
|
38
|
+
return options.map((o: Option): DatasetOption => {
|
|
39
|
+
const datasetSpec = ctx.resultPool.getPColumnSpecByRef(o.ref);
|
|
40
|
+
if (!datasetSpec) return o;
|
|
41
|
+
|
|
42
|
+
const builder = new ColumnCollectionBuilder(pframeSpec);
|
|
43
|
+
for (const src of columnSources) builder.addSource(src);
|
|
44
|
+
const collection = builder.build({ anchors: { main: datasetSpec } });
|
|
45
|
+
if (!collection) return o;
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
const matches = findFilterColumns(collection);
|
|
49
|
+
if (matches.length === 0) return o;
|
|
50
|
+
const filters = filterMatchesToOptions(matches, refMap, opts?.labelOptions);
|
|
51
|
+
return { ...o, filters };
|
|
52
|
+
} finally {
|
|
53
|
+
collection.dispose();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Annotation, createPlRef } from "@milaboratories/pl-model-common";
|
|
2
|
+
import type { AxisSpec, PColumnSpec, PlRef, PObjectId } from "@milaboratories/pl-model-common";
|
|
3
|
+
import { SpecDriver } from "@milaboratories/pf-spec-driver";
|
|
4
|
+
import canonicalize from "canonicalize";
|
|
5
|
+
import { afterEach, describe, expect, test } from "vitest";
|
|
6
|
+
import type { ColumnSnapshot } from "../../columns/column_snapshot";
|
|
7
|
+
import { ColumnCollectionBuilder } from "../../columns/column_collection_builder";
|
|
8
|
+
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./filter_discovery";
|
|
9
|
+
|
|
10
|
+
const drivers: SpecDriver[] = [];
|
|
11
|
+
|
|
12
|
+
function createSpecFrameCtx() {
|
|
13
|
+
const driver = new SpecDriver();
|
|
14
|
+
drivers.push(driver);
|
|
15
|
+
return driver;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
afterEach(async () => {
|
|
19
|
+
for (const driver of drivers) await driver.dispose();
|
|
20
|
+
drivers.length = 0;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
function axis(name: string): AxisSpec {
|
|
24
|
+
return { name, type: "String" } as AxisSpec;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function spec(
|
|
28
|
+
name: string,
|
|
29
|
+
axesSpec: AxisSpec[],
|
|
30
|
+
annotations: Record<string, string> = {},
|
|
31
|
+
): PColumnSpec {
|
|
32
|
+
return { kind: "PColumn", name, valueType: "Int", axesSpec, annotations } as PColumnSpec;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function snap(id: string, s: PColumnSpec): ColumnSnapshot<PObjectId> {
|
|
36
|
+
return { id: id as PObjectId, spec: s, dataStatus: "ready", data: { get: () => ({}) as never } };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// anchor defines the key space: [sample, gene]
|
|
40
|
+
const anchorAxes = [axis("sample"), axis("gene")];
|
|
41
|
+
const anchorSpec = spec("anchor", anchorAxes);
|
|
42
|
+
const anchorSnap = snap("anchor-id", anchorSpec);
|
|
43
|
+
|
|
44
|
+
describe("findFilterColumns", () => {
|
|
45
|
+
test("returns columns with pl7.app/isSubset annotation", () => {
|
|
46
|
+
const filter = snap("f1", spec("filter1", [axis("sample")], { [Annotation.IsSubset]: "true" }));
|
|
47
|
+
const regular = snap("r1", spec("regular1", [axis("sample")]));
|
|
48
|
+
|
|
49
|
+
const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
|
|
50
|
+
builder.addSource([filter, regular, anchorSnap]);
|
|
51
|
+
const collection = builder.build({ anchors: { main: anchorSpec } })!;
|
|
52
|
+
|
|
53
|
+
const results = findFilterColumns(collection);
|
|
54
|
+
expect(results.every((m) => m.column.spec.name !== "regular1")).toBe(true);
|
|
55
|
+
expect(results.some((m) => m.column.spec.name === "filter1")).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test("axes subset: excludes filter whose axes are not a subset of anchor axes", () => {
|
|
59
|
+
// filter with axis "other" — not a subset of anchor axes [sample, gene]
|
|
60
|
+
const badFilter = snap(
|
|
61
|
+
"f2",
|
|
62
|
+
spec("bad-filter", [axis("other")], { [Annotation.IsSubset]: "true" }),
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
|
|
66
|
+
builder.addSource([badFilter, anchorSnap]);
|
|
67
|
+
const collection = builder.build({ anchors: { main: anchorSpec } })!;
|
|
68
|
+
|
|
69
|
+
const results = findFilterColumns(collection);
|
|
70
|
+
expect(results.every((m) => m.column.spec.name !== "bad-filter")).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("empty result when no filters exist", () => {
|
|
74
|
+
const regular = snap("r1", spec("regular1", [axis("sample")]));
|
|
75
|
+
|
|
76
|
+
const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
|
|
77
|
+
builder.addSource([regular, anchorSnap]);
|
|
78
|
+
const collection = builder.build({ anchors: { main: anchorSpec } })!;
|
|
79
|
+
|
|
80
|
+
expect(findFilterColumns(collection)).toHaveLength(0);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
describe("buildRefMap", () => {
|
|
85
|
+
test("maps canonicalized PlRef to original ref", () => {
|
|
86
|
+
const ref1 = createPlRef("b1", "out1");
|
|
87
|
+
const ref2 = createPlRef("b2", "out2", true);
|
|
88
|
+
const entries = [{ ref: ref1 }, { ref: ref2 }];
|
|
89
|
+
|
|
90
|
+
const map = buildRefMap(entries);
|
|
91
|
+
|
|
92
|
+
expect(map.get(canonicalize(ref1)! as PObjectId)).toBe(ref1);
|
|
93
|
+
expect(map.get(canonicalize(ref2)! as PObjectId)).toBe(ref2);
|
|
94
|
+
expect(map.size).toBe(2);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("returns empty map for empty entries", () => {
|
|
98
|
+
expect(buildRefMap([]).size).toBe(0);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
describe("filterMatchesToOptions", () => {
|
|
103
|
+
test("converts filter matches to Option[] with derived labels", () => {
|
|
104
|
+
const filterRef1 = createPlRef("b1", "filter-top1000");
|
|
105
|
+
const filterRef2 = createPlRef("b1", "filter-highconf");
|
|
106
|
+
|
|
107
|
+
// Build ref map from entries (simulating result pool)
|
|
108
|
+
const refMap = buildRefMap([
|
|
109
|
+
{ ref: anchorSnap.id as unknown as PlRef }, // anchor — won't be looked up
|
|
110
|
+
{ ref: filterRef1 },
|
|
111
|
+
{ ref: filterRef2 },
|
|
112
|
+
]);
|
|
113
|
+
|
|
114
|
+
// Build filter specs with isSubset annotation
|
|
115
|
+
const filterSpec1 = spec("filter1", [axis("sample")], { [Annotation.IsSubset]: "true" });
|
|
116
|
+
const filterSpec2 = spec("filter2", [axis("sample")], { [Annotation.IsSubset]: "true" });
|
|
117
|
+
|
|
118
|
+
// Use the canonical PlRef as the PObjectId (matches how result pool works)
|
|
119
|
+
const f1Snap = snap(canonicalize(filterRef1)! as string, filterSpec1);
|
|
120
|
+
const f2Snap = snap(canonicalize(filterRef2)! as string, filterSpec2);
|
|
121
|
+
|
|
122
|
+
const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
|
|
123
|
+
builder.addSource([f1Snap, f2Snap, anchorSnap]);
|
|
124
|
+
const collection = builder.build({ anchors: { main: anchorSpec } })!;
|
|
125
|
+
|
|
126
|
+
const matches = findFilterColumns(collection);
|
|
127
|
+
expect(matches.length).toBe(2);
|
|
128
|
+
|
|
129
|
+
const options = filterMatchesToOptions(matches, refMap);
|
|
130
|
+
expect(options).toHaveLength(2);
|
|
131
|
+
// Each option has a ref and label
|
|
132
|
+
for (const opt of options) {
|
|
133
|
+
expect(opt.ref).toBeDefined();
|
|
134
|
+
expect(opt.label).toBeDefined();
|
|
135
|
+
expect(typeof opt.label).toBe("string");
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
test("returns empty array for empty matches", () => {
|
|
140
|
+
expect(filterMatchesToOptions([], new Map())).toEqual([]);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test("throws when ref not found in map", () => {
|
|
144
|
+
const filterSpec1 = spec("orphan", [axis("sample")], { [Annotation.IsSubset]: "true" });
|
|
145
|
+
const f1Snap = snap("orphan-id", filterSpec1);
|
|
146
|
+
|
|
147
|
+
const builder = new ColumnCollectionBuilder(createSpecFrameCtx());
|
|
148
|
+
builder.addSource([f1Snap, anchorSnap]);
|
|
149
|
+
const collection = builder.build({ anchors: { main: anchorSpec } })!;
|
|
150
|
+
|
|
151
|
+
const matches = findFilterColumns(collection);
|
|
152
|
+
expect(matches.length).toBe(1);
|
|
153
|
+
|
|
154
|
+
expect(() => filterMatchesToOptions(matches, new Map())).toThrow(/no PlRef found/);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Annotation } from "@milaboratories/pl-model-common";
|
|
2
|
+
import type { Option, PlRef, PObjectId } from "@milaboratories/pl-model-common";
|
|
3
|
+
import canonicalize from "canonicalize";
|
|
4
|
+
import type {
|
|
5
|
+
AnchoredColumnCollection,
|
|
6
|
+
ColumnMatch,
|
|
7
|
+
} from "../../columns/column_collection_builder";
|
|
8
|
+
import {
|
|
9
|
+
deriveDistinctLabels,
|
|
10
|
+
type DeriveLabelsOptions,
|
|
11
|
+
type Entry,
|
|
12
|
+
} from "../../labels/derive_distinct_labels";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Matches columns annotated `pl7.app/isSubset: "true"` whose axes ⊆ anchor axes.
|
|
16
|
+
*
|
|
17
|
+
* The axes-subset constraint is enforced by `mode: "enrichment"`, which sets
|
|
18
|
+
* `allowFloatingHitAxes: false` — every axis of the matched column must be
|
|
19
|
+
* present in the anchor's axes. See `matchingModeToConstraints()` in
|
|
20
|
+
* `column_collection_builder.ts`.
|
|
21
|
+
*/
|
|
22
|
+
export function findFilterColumns(collection: AnchoredColumnCollection): ColumnMatch[] {
|
|
23
|
+
return collection.findColumns({
|
|
24
|
+
mode: "enrichment",
|
|
25
|
+
include: {
|
|
26
|
+
annotations: { [Annotation.IsSubset]: "true" },
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Derive labeled options from filter column matches, for use in DatasetOption.filters.
|
|
33
|
+
*
|
|
34
|
+
* @param matches - from findFilterColumns()
|
|
35
|
+
* @param refsByObjectId - from {@link buildRefMap}
|
|
36
|
+
* @param labelOptions - forwarded to deriveDistinctLabels()
|
|
37
|
+
*/
|
|
38
|
+
export function filterMatchesToOptions(
|
|
39
|
+
matches: ColumnMatch[],
|
|
40
|
+
refsByObjectId: ReadonlyMap<PObjectId, PlRef>,
|
|
41
|
+
labelOptions?: DeriveLabelsOptions,
|
|
42
|
+
): Option[] {
|
|
43
|
+
if (matches.length === 0) return [];
|
|
44
|
+
|
|
45
|
+
// Each ColumnMatch can be reached via multiple variants (different linker
|
|
46
|
+
// paths / qualifications). We emit one Option per variant so the user can
|
|
47
|
+
// pick a specific path — `deriveDistinctLabels` disambiguates labels by
|
|
48
|
+
// path.
|
|
49
|
+
const flattened = matches.flatMap((m) => m.variants.map((v) => ({ match: m, variant: v })));
|
|
50
|
+
|
|
51
|
+
const entries: Entry[] = flattened.map(({ match, variant }) => ({
|
|
52
|
+
spec: match.column.spec,
|
|
53
|
+
linkerPath: variant.path.map((p) => ({ spec: p.linker.spec })),
|
|
54
|
+
}));
|
|
55
|
+
|
|
56
|
+
const labels = deriveDistinctLabels(entries, labelOptions);
|
|
57
|
+
|
|
58
|
+
return flattened.map(({ match }, i) => {
|
|
59
|
+
const ref = refsByObjectId.get(match.column.id);
|
|
60
|
+
if (ref === undefined)
|
|
61
|
+
throw new Error(
|
|
62
|
+
`no PlRef found for filter column ${match.column.spec.name} (id: ${match.column.id})`,
|
|
63
|
+
);
|
|
64
|
+
return { ref, label: labels[i] };
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Usage: `buildRefMap(ctx.resultPool.getSpecs().entries)`
|
|
70
|
+
*/
|
|
71
|
+
export function buildRefMap(entries: readonly { readonly ref: PlRef }[]): Map<PObjectId, PlRef> {
|
|
72
|
+
const map = new Map<PObjectId, PlRef>();
|
|
73
|
+
for (const entry of entries) {
|
|
74
|
+
map.set(canonicalize(entry.ref)! as PObjectId, entry.ref);
|
|
75
|
+
}
|
|
76
|
+
return map;
|
|
77
|
+
}
|