@milaboratories/pl-model-middle-layer 1.14.0 → 1.16.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.
@@ -1,68 +1,63 @@
1
1
  import { FindColumnsRequest, FindColumnsResponse } from "./find_columns.js";
2
2
  import { DeleteColumnFromColumnsRequest, DeleteColumnFromColumnsResponse } from "./delete_column.js";
3
- import { DiscoverColumnsRequest, DiscoverColumnsResponse } from "./discover_columns.js";
3
+ import { DiscoverColumnsRequestV2, DiscoverColumnsResponse } from "./discover_columns.js";
4
4
  import { AxesId, AxesSpec, DataQuery, JoinEntry, PColumnSpec, PObjectId, PTableColumnId, PTableColumnSpec, PTableRecordFilter, PTableSorting, SingleAxisSelector, SpecQuery } from "@milaboratories/pl-model-common";
5
5
 
6
6
  //#region src/pframe/internal_api/api_wasm.d.ts
7
- interface PFrameWasmAPI {
7
+ /**
8
+ * V2 PFrame interface with include/exclude column filtering in discoverColumns.
9
+ */
10
+ interface PFrameWasmV2 extends Disposable {
8
11
  /**
9
- * Creates a new PFrame from a map of column IDs to column specifications.
12
+ * Deletes columns from a columns specification.
10
13
  */
11
- createPFrame(spec: Record<string, PColumnSpec>): PFrameWasm;
14
+ deleteColumns(request: DeleteColumnFromColumnsRequest): DeleteColumnFromColumnsResponse;
12
15
  /**
13
- * Expands an {@link AxesSpec} into {@link AxesId}s with parent information
14
- * resolved.
16
+ * Discovers columns compatible with a given axes integration,
17
+ * with separate include and exclude filters.
18
+ * Exclude filter is applied after include, removing matching columns from results.
15
19
  */
16
- expandAxes(spec: AxesSpec): AxesId;
20
+ discoverColumns(request: DiscoverColumnsRequestV2): DiscoverColumnsResponse;
17
21
  /**
18
- * Collapses {@link AxesId} into {@link AxesSpec}.
22
+ * Finds columns in the PFrame matching the given filter criteria.
19
23
  */
20
- collapseAxes(ids: AxesId): AxesSpec;
24
+ findColumns(request: FindColumnsRequest): FindColumnsResponse;
21
25
  /**
22
- * Finds the index of an axis matching the given selector.
23
- * Returns -1 if no matching axis is found.
26
+ * Evaluates a query specification against this PFrame.
24
27
  */
25
- findAxis(spec: AxesSpec, selector: SingleAxisSelector): number;
28
+ evaluateQuery(request: SpecQuery): EvaluateQueryResponse;
26
29
  /**
27
- * Finds the flat index of a table column matching the given
28
- * selector within a table spec. Returns -1 if not found.
30
+ * Rewrites a legacy query format (V4) to the current SpecQuery format.
29
31
  */
30
- findTableColumn(tableSpec: PTableColumnSpec[], selector: PTableColumnId): number;
32
+ rewriteLegacyQuery(request: LegacyQuery): SpecQuery;
31
33
  }
32
34
  /**
33
- * A PFrame represents a collection of columns that can be queried and joined.
35
+ * V2 PFrame API factory with createPFrame returning PFrameWasmV2.
34
36
  */
35
- interface PFrameWasm extends Disposable {
37
+ interface PFrameWasmAPIV2 {
36
38
  /**
37
- * Deletes columns from a columns specification.
39
+ * Creates a new V2 PFrame from a map of column IDs to column specifications.
38
40
  */
39
- deleteColumns(request: DeleteColumnFromColumnsRequest): DeleteColumnFromColumnsResponse;
41
+ createPFrame(spec: Record<string, PColumnSpec>): PFrameWasmV2;
40
42
  /**
41
- * Discovers columns compatible with a given axes integration.
42
- * Returns columns that could be integrated with the provided column set,
43
- * along with possible mapping variants describing how to integrate them.
43
+ * Expands an {@link AxesSpec} into {@link AxesId}s with parent information
44
+ * resolved.
44
45
  */
45
- discoverColumns(request: DiscoverColumnsRequest): DiscoverColumnsResponse;
46
+ expandAxes(spec: AxesSpec): AxesId;
46
47
  /**
47
- * Finds columns in the PFrame matching the given filter criteria.
48
+ * Collapses {@link AxesId} into {@link AxesSpec}.
48
49
  */
49
- findColumns(request: FindColumnsRequest): FindColumnsResponse;
50
+ collapseAxes(ids: AxesId): AxesSpec;
50
51
  /**
51
- * Evaluates a query specification against this PFrame.
52
- *
53
- * Takes a SpecQuery (which can represent columns, joins, filters, sorts,
54
- * etc.) and returns the resulting table specification along with the data
55
- * layer query representation.
52
+ * Finds the index of an axis matching the given selector.
53
+ * Returns -1 if no matching axis is found.
56
54
  */
57
- evaluateQuery(request: SpecQuery): EvaluateQueryResponse;
55
+ findAxis(spec: AxesSpec, selector: SingleAxisSelector): number;
58
56
  /**
59
- * Rewrites a legacy query format (V4) to the current SpecQuery format.
60
- *
61
- * This method upgrades older query structures that use JoinEntryV4, filters,
62
- * and sorting into the new unified SpecQuery format with proper filter and
63
- * sort query nodes.
57
+ * Finds the flat index of a table column matching the given
58
+ * selector within a table spec. Returns -1 if not found.
64
59
  */
65
- rewriteLegacyQuery(request: LegacyQuery): SpecQuery;
60
+ findTableColumn(tableSpec: PTableColumnSpec[], selector: PTableColumnId): number;
66
61
  }
67
62
  /**
68
63
  * Response from evaluating a query against a PFrame.
@@ -82,7 +77,7 @@ type EvaluateQueryResponse = {
82
77
  /**
83
78
  * Represents a legacy (V4) query format used before the unified SpecQuery.
84
79
  *
85
- * This type is used with {@link PFrameWasm.rewriteLegacyQuery} to upgrade
80
+ * This type is used with {@link PFrameWasmV2.rewriteLegacyQuery} to upgrade
86
81
  * older query structures to the current {@link SpecQuery} format.
87
82
  */
88
83
  type LegacyQuery = {
@@ -91,5 +86,5 @@ type LegacyQuery = {
91
86
  sorting?: PTableSorting[];
92
87
  };
93
88
  //#endregion
94
- export { EvaluateQueryResponse, LegacyQuery, PFrameWasm, PFrameWasmAPI };
89
+ export { EvaluateQueryResponse, LegacyQuery, PFrameWasmAPIV2, PFrameWasmV2 };
95
90
  //# sourceMappingURL=api_wasm.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { AxisQualification, ColumnAxesWithQualifications } from "./common.js";
2
- import { PColumnIdAndSpec } from "@milaboratories/pl-model-common";
2
+ import { AxisValueType, ColumnValueType, DiscoverColumnsLinkerStep, DiscoverColumnsStepInfo, PColumnIdAndSpec } from "@milaboratories/pl-model-common";
3
3
 
4
4
  //#region src/pframe/internal_api/discover_columns.d.ts
5
5
  /** Matches a string value either exactly or by regex pattern */
@@ -15,7 +15,7 @@ type MatcherMap = Record<string, StringMatcher[]>;
15
15
  /** Selector for matching axes by various criteria */
16
16
  interface MultiAxisSelector {
17
17
  /** Match any of the axis types listed here */
18
- readonly type?: string[];
18
+ readonly type?: AxisValueType[];
19
19
  /** Match any of the axis names listed here */
20
20
  readonly name?: StringMatcher[];
21
21
  /** Match requires all the domains listed here */
@@ -29,7 +29,7 @@ interface MultiAxisSelector {
29
29
  * Multiple selectors are OR-ed: a column matches if it satisfies any selector. */
30
30
  interface MultiColumnSelector {
31
31
  /** Match any of the value types listed here */
32
- readonly type?: string[];
32
+ readonly type?: ColumnValueType[];
33
33
  /** Match any of the names listed here */
34
34
  readonly name?: StringMatcher[];
35
35
  /** Match requires all the domains listed here */
@@ -54,12 +54,16 @@ interface DiscoverColumnsConstraints {
54
54
  /** Allow hit column axes to be qualified (contextDomain extended) */
55
55
  allowHitQualifications: boolean;
56
56
  }
57
- /** Request for discovering columns compatible with a given axes integration */
58
- interface DiscoverColumnsRequest {
59
- /** Column filters (OR-ed); empty array matches all columns */
60
- columnFilter?: MultiColumnSelector[];
57
+ /** V2 request with separate include/exclude filters */
58
+ interface DiscoverColumnsRequestV2 {
59
+ /** Include columns matching these selectors (OR-ed); empty or omitted matches all columns */
60
+ includeColumns?: MultiColumnSelector[];
61
+ /** Exclude columns matching these selectors (OR-ed); applied after include filter */
62
+ excludeColumns?: MultiColumnSelector[];
61
63
  /** Already integrated axes with qualifications */
62
64
  axes: ColumnAxesWithQualifications[];
65
+ /** Maximum number of hops allowed between provided axes integration and returned hits (0 = direct only) */
66
+ maxHops?: number;
63
67
  /** Constraints controlling axes matching and qualification behavior */
64
68
  constraints: DiscoverColumnsConstraints;
65
69
  }
@@ -83,6 +87,8 @@ interface DiscoverColumnsResponseHit {
83
87
  hit: PColumnIdAndSpec;
84
88
  /** Possible ways to integrate this column with the existing set */
85
89
  mappingVariants: DiscoverColumnsMappingVariant[];
90
+ /** Linker steps traversed to reach this hit; empty for direct matches */
91
+ path: DiscoverColumnsStepInfo[];
86
92
  }
87
93
  /** Response from discover columns */
88
94
  interface DiscoverColumnsResponse {
@@ -90,5 +96,5 @@ interface DiscoverColumnsResponse {
90
96
  hits: DiscoverColumnsResponseHit[];
91
97
  }
92
98
  //#endregion
93
- export { DiscoverColumnsConstraints, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, MatcherMap, MultiAxisSelector, MultiColumnSelector, StringMatcher };
99
+ export { DiscoverColumnsConstraints, type DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequestV2, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, type DiscoverColumnsStepInfo, MatcherMap, MultiAxisSelector, MultiColumnSelector, StringMatcher };
94
100
  //# sourceMappingURL=discover_columns.d.ts.map
@@ -6,14 +6,14 @@ import { PTableV8 } from "./table.js";
6
6
  import { PFrameReadAPIV11 } from "./api_read.js";
7
7
  import { BaseObjectStore, FileRange, FsStoreOptions, HttpAuthorizationToken, HttpHelpers, HttpMethod, HttpRange, HttpServer, HttpServerInfo, HttpServerOptions, ObjectStore, ObjectStoreOptions, ObjectStoreResponse, ObjectStoreUrl, ParquetExtension, ParquetFileName, PemCertificate, RequestHandlerOptions } from "./http_helpers.js";
8
8
  import { DataInfo, DataInfoExtension, FilePath, PFrameBlobId, PFrameDataSourceV2, PFrameFactoryAPIV4, SpecExtension } from "./api_factory.js";
9
- import { DiscoverColumnsConstraints, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, MatcherMap, MultiAxisSelector, MultiColumnSelector, StringMatcher } from "./discover_columns.js";
10
- import { EvaluateQueryResponse, LegacyQuery, PFrameWasm, PFrameWasmAPI } from "./api_wasm.js";
9
+ import { DiscoverColumnsConstraints, DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequestV2, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, DiscoverColumnsStepInfo, MatcherMap, MultiAxisSelector, MultiColumnSelector, StringMatcher } from "./discover_columns.js";
10
+ import { EvaluateQueryResponse, LegacyQuery, PFrameWasmAPIV2, PFrameWasmV2 } from "./api_wasm.js";
11
11
  import { PFrameFactoryV4, PFrameOptionsV2, PFrameV13 } from "./pframe.js";
12
12
  import { SingleAxisSelector as SingleAxisSelector$1 } from "@milaboratories/pl-model-common";
13
13
 
14
14
  //#region src/pframe/internal_api/index.d.ts
15
15
  declare namespace index_d_exports {
16
- export { ArtificialColumnJoinEntry, AxisQualification, BaseObjectStore, ColumnAxesWithQualifications, ColumnJoinEntry, ConstantAxisFilter, CreateTableRequestV4, DataInfo, DataInfoExtension, DeleteColumnFromColumnsRequest, DeleteColumnFromColumnsResponse, DiscoverColumnsConstraints, DiscoverColumnsMappingVariant, DiscoverColumnsRequest, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, EvaluateQueryResponse, FilePath, FileRange, FindColumnResponseQualifications, FindColumnsMappingVariant, FindColumnsRequest, FindColumnsResponse, FindColumnsResponseHit, FsStoreOptions, FullJoinV4, HttpAuthorizationToken, HttpHelpers, HttpMethod, HttpRange, HttpServer, HttpServerInfo, HttpServerOptions, InlineColumnJoinEntry, InnerJoinV4, JoinEntryV4, LegacyQuery, Logger, MatcherMap, MultiAxisSelector, MultiColumnSelector, ObjectStore, ObjectStoreOptions, ObjectStoreResponse, ObjectStoreUrl, OuterJoinV4, PFrameBlobId, PFrameDataSourceV2, PFrameFactoryAPIV4, PFrameFactoryV4, PFrameId, PFrameOptionsV2, PFrameReadAPIV11, PFrameV13, PFrameWasm, PFrameWasmAPI, PTableId, PTableV8, ParquetExtension, ParquetFileName, PemCertificate, RequestHandlerOptions, SingleAxisSelector$1 as SingleAxisSelector, SlicedColumnJoinEntry, SpecExtension, StringMatcher };
16
+ export { ArtificialColumnJoinEntry, AxisQualification, BaseObjectStore, ColumnAxesWithQualifications, ColumnJoinEntry, ConstantAxisFilter, CreateTableRequestV4, DataInfo, DataInfoExtension, DeleteColumnFromColumnsRequest, DeleteColumnFromColumnsResponse, DiscoverColumnsConstraints, DiscoverColumnsLinkerStep, DiscoverColumnsMappingVariant, DiscoverColumnsRequestV2, DiscoverColumnsResponse, DiscoverColumnsResponseHit, DiscoverColumnsResponseQualifications, DiscoverColumnsStepInfo, EvaluateQueryResponse, FilePath, FileRange, FindColumnResponseQualifications, FindColumnsMappingVariant, FindColumnsRequest, FindColumnsResponse, FindColumnsResponseHit, FsStoreOptions, FullJoinV4, HttpAuthorizationToken, HttpHelpers, HttpMethod, HttpRange, HttpServer, HttpServerInfo, HttpServerOptions, InlineColumnJoinEntry, InnerJoinV4, JoinEntryV4, LegacyQuery, Logger, MatcherMap, MultiAxisSelector, MultiColumnSelector, ObjectStore, ObjectStoreOptions, ObjectStoreResponse, ObjectStoreUrl, OuterJoinV4, PFrameBlobId, PFrameDataSourceV2, PFrameFactoryAPIV4, PFrameFactoryV4, PFrameId, PFrameOptionsV2, PFrameReadAPIV11, PFrameV13, PFrameWasmAPIV2, PFrameWasmV2, PTableId, PTableV8, ParquetExtension, ParquetFileName, PemCertificate, RequestHandlerOptions, SingleAxisSelector$1 as SingleAxisSelector, SlicedColumnJoinEntry, SpecExtension, StringMatcher };
17
17
  }
18
18
  //#endregion
19
19
  export { index_d_exports };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-model-middle-layer",
3
- "version": "1.14.0",
3
+ "version": "1.16.0",
4
4
  "description": "Common model between middle layer and non-block UI code",
5
5
  "files": [
6
6
  "./dist/**/*",
@@ -21,13 +21,13 @@
21
21
  "utility-types": "^3.11.0",
22
22
  "zod": "~3.23.8",
23
23
  "@milaboratories/helpers": "1.14.0",
24
- "@milaboratories/pl-model-common": "1.27.0"
24
+ "@milaboratories/pl-model-common": "1.29.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "~24.5.2",
28
28
  "typescript": "~5.9.3",
29
- "@milaboratories/ts-configs": "1.2.2",
30
29
  "@milaboratories/build-configs": "1.5.2",
30
+ "@milaboratories/ts-configs": "1.2.2",
31
31
  "@milaboratories/ts-builder": "1.3.0"
32
32
  },
33
33
  "scripts": {
@@ -16,76 +16,72 @@ import type {
16
16
  DeleteColumnFromColumnsRequest,
17
17
  DeleteColumnFromColumnsResponse,
18
18
  } from "./delete_column";
19
- import type { DiscoverColumnsRequest, DiscoverColumnsResponse } from "./discover_columns";
19
+ import type { DiscoverColumnsRequestV2, DiscoverColumnsResponse } from "./discover_columns";
20
20
  import type { FindColumnsRequest, FindColumnsResponse } from "./find_columns";
21
21
 
22
- export interface PFrameWasmAPI {
22
+ /**
23
+ * V2 PFrame interface with include/exclude column filtering in discoverColumns.
24
+ */
25
+ export interface PFrameWasmV2 extends Disposable {
23
26
  /**
24
- * Creates a new PFrame from a map of column IDs to column specifications.
27
+ * Deletes columns from a columns specification.
25
28
  */
26
- createPFrame(spec: Record<string, PColumnSpec>): PFrameWasm;
29
+ deleteColumns(request: DeleteColumnFromColumnsRequest): DeleteColumnFromColumnsResponse;
27
30
 
28
31
  /**
29
- * Expands an {@link AxesSpec} into {@link AxesId}s with parent information
30
- * resolved.
32
+ * Discovers columns compatible with a given axes integration,
33
+ * with separate include and exclude filters.
34
+ * Exclude filter is applied after include, removing matching columns from results.
31
35
  */
32
- expandAxes(spec: AxesSpec): AxesId;
36
+ discoverColumns(request: DiscoverColumnsRequestV2): DiscoverColumnsResponse;
33
37
 
34
38
  /**
35
- * Collapses {@link AxesId} into {@link AxesSpec}.
39
+ * Finds columns in the PFrame matching the given filter criteria.
36
40
  */
37
- collapseAxes(ids: AxesId): AxesSpec;
41
+ findColumns(request: FindColumnsRequest): FindColumnsResponse;
38
42
 
39
43
  /**
40
- * Finds the index of an axis matching the given selector.
41
- * Returns -1 if no matching axis is found.
44
+ * Evaluates a query specification against this PFrame.
42
45
  */
43
- findAxis(spec: AxesSpec, selector: SingleAxisSelector): number;
46
+ evaluateQuery(request: SpecQuery): EvaluateQueryResponse;
44
47
 
45
48
  /**
46
- * Finds the flat index of a table column matching the given
47
- * selector within a table spec. Returns -1 if not found.
49
+ * Rewrites a legacy query format (V4) to the current SpecQuery format.
48
50
  */
49
- findTableColumn(tableSpec: PTableColumnSpec[], selector: PTableColumnId): number;
51
+ rewriteLegacyQuery(request: LegacyQuery): SpecQuery;
50
52
  }
51
53
 
52
54
  /**
53
- * A PFrame represents a collection of columns that can be queried and joined.
55
+ * V2 PFrame API factory with createPFrame returning PFrameWasmV2.
54
56
  */
55
- export interface PFrameWasm extends Disposable {
57
+ export interface PFrameWasmAPIV2 {
56
58
  /**
57
- * Deletes columns from a columns specification.
59
+ * Creates a new V2 PFrame from a map of column IDs to column specifications.
58
60
  */
59
- deleteColumns(request: DeleteColumnFromColumnsRequest): DeleteColumnFromColumnsResponse;
61
+ createPFrame(spec: Record<string, PColumnSpec>): PFrameWasmV2;
60
62
 
61
63
  /**
62
- * Discovers columns compatible with a given axes integration.
63
- * Returns columns that could be integrated with the provided column set,
64
- * along with possible mapping variants describing how to integrate them.
64
+ * Expands an {@link AxesSpec} into {@link AxesId}s with parent information
65
+ * resolved.
65
66
  */
66
- discoverColumns(request: DiscoverColumnsRequest): DiscoverColumnsResponse;
67
+ expandAxes(spec: AxesSpec): AxesId;
67
68
 
68
69
  /**
69
- * Finds columns in the PFrame matching the given filter criteria.
70
+ * Collapses {@link AxesId} into {@link AxesSpec}.
70
71
  */
71
- findColumns(request: FindColumnsRequest): FindColumnsResponse;
72
+ collapseAxes(ids: AxesId): AxesSpec;
73
+
72
74
  /**
73
- * Evaluates a query specification against this PFrame.
74
- *
75
- * Takes a SpecQuery (which can represent columns, joins, filters, sorts,
76
- * etc.) and returns the resulting table specification along with the data
77
- * layer query representation.
75
+ * Finds the index of an axis matching the given selector.
76
+ * Returns -1 if no matching axis is found.
78
77
  */
79
- evaluateQuery(request: SpecQuery): EvaluateQueryResponse;
78
+ findAxis(spec: AxesSpec, selector: SingleAxisSelector): number;
80
79
 
81
80
  /**
82
- * Rewrites a legacy query format (V4) to the current SpecQuery format.
83
- *
84
- * This method upgrades older query structures that use JoinEntryV4, filters,
85
- * and sorting into the new unified SpecQuery format with proper filter and
86
- * sort query nodes.
81
+ * Finds the flat index of a table column matching the given
82
+ * selector within a table spec. Returns -1 if not found.
87
83
  */
88
- rewriteLegacyQuery(request: LegacyQuery): SpecQuery;
84
+ findTableColumn(tableSpec: PTableColumnSpec[], selector: PTableColumnId): number;
89
85
  }
90
86
 
91
87
  /**
@@ -107,7 +103,7 @@ export type EvaluateQueryResponse = {
107
103
  /**
108
104
  * Represents a legacy (V4) query format used before the unified SpecQuery.
109
105
  *
110
- * This type is used with {@link PFrameWasm.rewriteLegacyQuery} to upgrade
106
+ * This type is used with {@link PFrameWasmV2.rewriteLegacyQuery} to upgrade
111
107
  * older query structures to the current {@link SpecQuery} format.
112
108
  */
113
109
  export type LegacyQuery = {
@@ -1,6 +1,14 @@
1
- import type { PColumnIdAndSpec } from "@milaboratories/pl-model-common";
1
+ import type {
2
+ AxisValueType,
3
+ ColumnValueType,
4
+ DiscoverColumnsLinkerStep,
5
+ DiscoverColumnsStepInfo,
6
+ PColumnIdAndSpec,
7
+ } from "@milaboratories/pl-model-common";
2
8
  import type { AxisQualification, ColumnAxesWithQualifications } from "./common";
3
9
 
10
+ export type { DiscoverColumnsLinkerStep, DiscoverColumnsStepInfo };
11
+
4
12
  /** Matches a string value either exactly or by regex pattern */
5
13
  export type StringMatcher = { type: "exact"; value: string } | { type: "regex"; value: string };
6
14
 
@@ -10,7 +18,7 @@ export type MatcherMap = Record<string, StringMatcher[]>;
10
18
  /** Selector for matching axes by various criteria */
11
19
  export interface MultiAxisSelector {
12
20
  /** Match any of the axis types listed here */
13
- readonly type?: string[];
21
+ readonly type?: AxisValueType[];
14
22
  /** Match any of the axis names listed here */
15
23
  readonly name?: StringMatcher[];
16
24
  /** Match requires all the domains listed here */
@@ -25,7 +33,7 @@ export interface MultiAxisSelector {
25
33
  * Multiple selectors are OR-ed: a column matches if it satisfies any selector. */
26
34
  export interface MultiColumnSelector {
27
35
  /** Match any of the value types listed here */
28
- readonly type?: string[];
36
+ readonly type?: ColumnValueType[];
29
37
  /** Match any of the names listed here */
30
38
  readonly name?: StringMatcher[];
31
39
  /** Match requires all the domains listed here */
@@ -52,12 +60,16 @@ export interface DiscoverColumnsConstraints {
52
60
  allowHitQualifications: boolean;
53
61
  }
54
62
 
55
- /** Request for discovering columns compatible with a given axes integration */
56
- export interface DiscoverColumnsRequest {
57
- /** Column filters (OR-ed); empty array matches all columns */
58
- columnFilter?: MultiColumnSelector[];
63
+ /** V2 request with separate include/exclude filters */
64
+ export interface DiscoverColumnsRequestV2 {
65
+ /** Include columns matching these selectors (OR-ed); empty or omitted matches all columns */
66
+ includeColumns?: MultiColumnSelector[];
67
+ /** Exclude columns matching these selectors (OR-ed); applied after include filter */
68
+ excludeColumns?: MultiColumnSelector[];
59
69
  /** Already integrated axes with qualifications */
60
70
  axes: ColumnAxesWithQualifications[];
71
+ /** Maximum number of hops allowed between provided axes integration and returned hits (0 = direct only) */
72
+ maxHops?: number;
61
73
  /** Constraints controlling axes matching and qualification behavior */
62
74
  constraints: DiscoverColumnsConstraints;
63
75
  }
@@ -84,6 +96,8 @@ export interface DiscoverColumnsResponseHit {
84
96
  hit: PColumnIdAndSpec;
85
97
  /** Possible ways to integrate this column with the existing set */
86
98
  mappingVariants: DiscoverColumnsMappingVariant[];
99
+ /** Linker steps traversed to reach this hit; empty for direct matches */
100
+ path: DiscoverColumnsStepInfo[];
87
101
  }
88
102
 
89
103
  /** Response from discover columns */