@milaboratories/pl-model-common 1.46.4 → 1.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/columns/accessor_traversal.cjs +119 -0
- package/dist/columns/accessor_traversal.cjs.map +1 -0
- package/dist/columns/accessor_traversal.d.ts +52 -0
- package/dist/columns/accessor_traversal.d.ts.map +1 -0
- package/dist/columns/accessor_traversal.js +114 -0
- package/dist/columns/accessor_traversal.js.map +1 -0
- package/dist/columns/column_registry.cjs +40 -0
- package/dist/columns/column_registry.cjs.map +1 -0
- package/dist/columns/column_registry.d.ts +31 -0
- package/dist/columns/column_registry.d.ts.map +1 -0
- package/dist/columns/column_registry.js +40 -0
- package/dist/columns/column_registry.js.map +1 -0
- package/dist/columns/column_selector.cjs +49 -0
- package/dist/columns/column_selector.cjs.map +1 -0
- package/dist/columns/column_selector.d.ts +33 -0
- package/dist/columns/column_selector.d.ts.map +1 -0
- package/dist/columns/column_selector.js +47 -0
- package/dist/columns/column_selector.js.map +1 -0
- package/dist/columns/dedup.cjs +47 -0
- package/dist/columns/dedup.cjs.map +1 -0
- package/dist/columns/dedup.d.ts +27 -0
- package/dist/columns/dedup.d.ts.map +1 -0
- package/dist/columns/dedup.js +47 -0
- package/dist/columns/dedup.js.map +1 -0
- package/dist/columns/index.cjs +18 -0
- package/dist/columns/index.d.ts +8 -0
- package/dist/columns/index.js +6 -0
- package/dist/columns/providers.cjs +62 -0
- package/dist/columns/providers.cjs.map +1 -0
- package/dist/columns/providers.d.ts +39 -0
- package/dist/columns/providers.d.ts.map +1 -0
- package/dist/columns/providers.js +61 -0
- package/dist/columns/providers.js.map +1 -0
- package/dist/columns/types.d.ts +108 -0
- package/dist/columns/types.d.ts.map +1 -0
- package/dist/driver_kit.d.ts +1 -2
- package/dist/driver_kit.d.ts.map +1 -1
- package/dist/drivers/columns/columns_collection_driver.d.ts +124 -0
- package/dist/drivers/columns/columns_collection_driver.d.ts.map +1 -0
- package/dist/drivers/columns/discover_columns_options.cjs +28 -0
- package/dist/drivers/columns/discover_columns_options.cjs.map +1 -0
- package/dist/drivers/columns/discover_columns_options.d.ts +64 -0
- package/dist/drivers/columns/discover_columns_options.d.ts.map +1 -0
- package/dist/drivers/columns/discover_columns_options.js +28 -0
- package/dist/drivers/columns/discover_columns_options.js.map +1 -0
- package/dist/drivers/columns/index.d.ts +3 -0
- package/dist/drivers/index.cjs +32 -7
- package/dist/drivers/index.d.ts +12 -9
- package/dist/drivers/index.js +6 -4
- package/dist/drivers/pframe/driver.d.ts +1 -2
- package/dist/drivers/pframe/driver.d.ts.map +1 -1
- package/dist/drivers/pframe/index.cjs +30 -7
- package/dist/drivers/pframe/index.d.ts +9 -8
- package/dist/drivers/pframe/index.js +5 -4
- package/dist/drivers/pframe/query/index.d.ts +2 -2
- package/dist/drivers/pframe/query/query_common.d.ts +24 -1
- package/dist/drivers/pframe/query/query_common.d.ts.map +1 -1
- package/dist/drivers/pframe/query/query_spec.d.ts +25 -24
- package/dist/drivers/pframe/query/query_spec.d.ts.map +1 -1
- package/dist/drivers/pframe/query/utils.cjs +18 -8
- package/dist/drivers/pframe/query/utils.cjs.map +1 -1
- package/dist/drivers/pframe/query/utils.d.ts +5 -1
- package/dist/drivers/pframe/query/utils.d.ts.map +1 -1
- package/dist/drivers/pframe/query/utils.js +18 -8
- package/dist/drivers/pframe/query/utils.js.map +1 -1
- package/dist/drivers/pframe/spec/anchored.d.ts +2 -2
- package/dist/drivers/pframe/spec/discovered_column.cjs +31 -15
- package/dist/drivers/pframe/spec/discovered_column.cjs.map +1 -1
- package/dist/drivers/pframe/spec/discovered_column.d.ts +23 -13
- package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/discovered_column.js +26 -12
- package/dist/drivers/pframe/spec/discovered_column.js.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.cjs +46 -0
- package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.d.ts +39 -1
- package/dist/drivers/pframe/spec/filtered_column.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.js +41 -1
- package/dist/drivers/pframe/spec/filtered_column.js.map +1 -1
- package/dist/drivers/pframe/spec/ids.cjs +62 -10
- package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
- package/dist/drivers/pframe/spec/ids.d.ts +48 -15
- package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/ids.js +60 -9
- package/dist/drivers/pframe/spec/ids.js.map +1 -1
- package/dist/drivers/pframe/spec/index.cjs +30 -7
- package/dist/drivers/pframe/spec/index.d.ts +6 -5
- package/dist/drivers/pframe/spec/index.js +5 -4
- package/dist/drivers/pframe/spec/native_id.cjs +1 -0
- package/dist/drivers/pframe/spec/native_id.cjs.map +1 -1
- package/dist/drivers/pframe/spec/native_id.js +1 -0
- package/dist/drivers/pframe/spec/native_id.js.map +1 -1
- package/dist/drivers/pframe/spec/overridden.cjs +212 -0
- package/dist/drivers/pframe/spec/overridden.cjs.map +1 -0
- package/dist/drivers/pframe/spec/overridden.d.ts +67 -0
- package/dist/drivers/pframe/spec/overridden.d.ts.map +1 -0
- package/dist/drivers/pframe/spec/overridden.js +202 -0
- package/dist/drivers/pframe/spec/overridden.js.map +1 -0
- package/dist/drivers/pframe/spec/selectors.cjs +1 -0
- package/dist/drivers/pframe/spec/selectors.cjs.map +1 -1
- package/dist/drivers/pframe/spec/selectors.d.ts +3 -0
- package/dist/drivers/pframe/spec/selectors.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/selectors.js +1 -0
- package/dist/drivers/pframe/spec/selectors.js.map +1 -1
- package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
- package/dist/drivers/pframe/spec/spec.d.ts +2 -3
- package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/spec.js.map +1 -1
- package/dist/drivers/pframe/spec_driver.d.ts +2 -2
- package/dist/drivers/pframe/spec_driver.d.ts.map +1 -1
- package/dist/drivers/pframe/table_calculate.cjs +2 -2
- package/dist/drivers/pframe/table_calculate.cjs.map +1 -1
- package/dist/drivers/pframe/table_calculate.d.ts +6 -2
- package/dist/drivers/pframe/table_calculate.d.ts.map +1 -1
- package/dist/drivers/pframe/table_calculate.js +2 -2
- package/dist/drivers/pframe/table_calculate.js.map +1 -1
- package/dist/drivers/pframe/table_common.cjs.map +1 -1
- package/dist/drivers/pframe/table_common.d.ts +11 -4
- package/dist/drivers/pframe/table_common.d.ts.map +1 -1
- package/dist/drivers/pframe/table_common.js.map +1 -1
- package/dist/index.cjs +63 -10
- package/dist/index.d.ts +20 -11
- package/dist/index.js +15 -6
- package/dist/pool/index.cjs +18 -0
- package/dist/pool/index.d.ts +2 -2
- package/dist/pool/index.js +3 -0
- package/dist/pool/spec.cjs +59 -11
- package/dist/pool/spec.cjs.map +1 -1
- package/dist/pool/spec.d.ts +24 -9
- package/dist/pool/spec.d.ts.map +1 -1
- package/dist/pool/spec.js +50 -10
- package/dist/pool/spec.js.map +1 -1
- package/dist/services/index.d.ts +2 -2
- package/dist/services/service_declarations.cjs +22 -0
- package/dist/services/service_declarations.cjs.map +1 -1
- package/dist/services/service_declarations.d.ts +5 -3
- package/dist/services/service_declarations.d.ts.map +1 -1
- package/dist/services/service_declarations.js +22 -0
- package/dist/services/service_declarations.js.map +1 -1
- package/dist/services/service_registry.cjs.map +1 -1
- package/dist/services/service_registry.d.ts +3 -3
- package/dist/services/service_registry.d.ts.map +1 -1
- package/dist/services/service_registry.js.map +1 -1
- package/dist/services/service_types.cjs.map +1 -1
- package/dist/services/service_types.d.ts +25 -9
- package/dist/services/service_types.d.ts.map +1 -1
- package/dist/services/service_types.js.map +1 -1
- package/package.json +2 -1
- package/src/columns/accessor_traversal.ts +139 -0
- package/src/columns/column_registry.ts +41 -0
- package/src/columns/column_selector.ts +100 -0
- package/src/columns/dedup.ts +49 -0
- package/src/columns/index.ts +6 -0
- package/src/columns/providers.ts +74 -0
- package/src/columns/types.ts +116 -0
- package/src/drivers/columns/columns_collection_driver.ts +146 -0
- package/src/drivers/columns/discover_columns_options.ts +91 -0
- package/src/drivers/columns/index.ts +2 -0
- package/src/drivers/index.ts +1 -0
- package/src/drivers/pframe/index.ts +0 -1
- package/src/drivers/pframe/query/query_common.ts +24 -0
- package/src/drivers/pframe/query/query_spec.ts +38 -25
- package/src/drivers/pframe/query/utils.test.ts +6 -6
- package/src/drivers/pframe/query/utils.ts +27 -7
- package/src/drivers/pframe/spec/discovered_column.ts +43 -28
- package/src/drivers/pframe/spec/filtered_column.ts +66 -0
- package/src/drivers/pframe/spec/ids.ts +142 -17
- package/src/drivers/pframe/spec/index.ts +1 -0
- package/src/drivers/pframe/spec/overridden.ts +285 -0
- package/src/drivers/pframe/spec/selectors.ts +3 -0
- package/src/drivers/pframe/spec/spec.ts +7 -3
- package/src/drivers/pframe/spec_driver.ts +3 -3
- package/src/drivers/pframe/table_calculate.ts +13 -3
- package/src/drivers/pframe/table_common.ts +10 -3
- package/src/index.ts +1 -0
- package/src/pool/spec.ts +69 -23
- package/src/services/service_declarations.ts +31 -0
- package/src/services/service_registry.ts +8 -4
- package/src/services/service_types.ts +35 -9
|
@@ -174,7 +174,13 @@ export const Annotation = {
|
|
|
174
174
|
},
|
|
175
175
|
} as const;
|
|
176
176
|
|
|
177
|
-
export type AnnotationDataStatus =
|
|
177
|
+
export type AnnotationDataStatus =
|
|
178
|
+
| "missing"
|
|
179
|
+
| "resolving"
|
|
180
|
+
| "absent"
|
|
181
|
+
| "computing"
|
|
182
|
+
| "ready"
|
|
183
|
+
| "error";
|
|
178
184
|
|
|
179
185
|
export type Annotation = Metadata &
|
|
180
186
|
Partial<{
|
|
@@ -710,8 +716,6 @@ export interface PColumn<Data> extends PObject<Data> {
|
|
|
710
716
|
readonly spec: PColumnSpec;
|
|
711
717
|
}
|
|
712
718
|
|
|
713
|
-
export type PColumnLazy<T> = PColumn<() => T>;
|
|
714
|
-
|
|
715
719
|
/** Columns in a PFrame also have internal identifier, this object represents
|
|
716
720
|
* combination of specs and such id */
|
|
717
721
|
export interface PColumnIdAndSpec {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Branded } from "@milaboratories/helpers";
|
|
2
2
|
import type { PoolEntry } from "../../pool_entry";
|
|
3
|
-
import type { PObjectId } from "../../pool";
|
|
4
3
|
import type {
|
|
5
4
|
AxisSpec,
|
|
6
5
|
AxesSpec,
|
|
@@ -15,6 +14,7 @@ import type {
|
|
|
15
14
|
import type { PTableColumnId, PTableColumnSpec } from "./table_common";
|
|
16
15
|
import type { PTableRecordFilter } from "./table_calculate";
|
|
17
16
|
import { DataQuery, DataQueryBooleanExpression, SpecQuery, SpecQueryJoinEntry } from "./query";
|
|
17
|
+
import { PObjectId } from "../..";
|
|
18
18
|
|
|
19
19
|
/** Matches a string value either exactly or by regex pattern */
|
|
20
20
|
export type StringMatcher =
|
|
@@ -167,10 +167,10 @@ export interface DiscoverColumnsMappingVariant {
|
|
|
167
167
|
export interface DiscoverColumnsResponseHit {
|
|
168
168
|
/** The column that was found compatible */
|
|
169
169
|
hit: PColumnIdAndSpec;
|
|
170
|
-
/** Possible ways to integrate this column with the existing set */
|
|
171
|
-
mappingVariants: DiscoverColumnsMappingVariant[];
|
|
172
170
|
/** Linker steps traversed to reach this hit; empty for direct matches */
|
|
173
171
|
path: DiscoverColumnsStepInfo[];
|
|
172
|
+
/** Possible ways to integrate this column with the existing set */
|
|
173
|
+
mappingVariants: DiscoverColumnsMappingVariant[];
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
/** Response from discover columns */
|
|
@@ -4,7 +4,7 @@ import type { PObjectId } from "../../pool";
|
|
|
4
4
|
import { assertNever } from "../../util";
|
|
5
5
|
import { getAxisId, type PColumn } from "./spec/spec";
|
|
6
6
|
import type { PColumnValues } from "./data_info";
|
|
7
|
-
import type { SpecQuery } from "./query/query_spec";
|
|
7
|
+
import type { SpecQuery, SpecQueryJoinEntry } from "./query/query_spec";
|
|
8
8
|
import { canonicalizeJson } from "../../json";
|
|
9
9
|
import { mapSpecQueryColumns } from "./query";
|
|
10
10
|
|
|
@@ -422,8 +422,18 @@ export function sortPTableDef(def: PTableDef<PObjectId>): PTableDef<PObjectId> {
|
|
|
422
422
|
};
|
|
423
423
|
}
|
|
424
424
|
|
|
425
|
-
export function mapPTableDefV2<C1, C2>(
|
|
426
|
-
|
|
425
|
+
export function mapPTableDefV2<C1, C2>(
|
|
426
|
+
def: PTableDefV2<C1>,
|
|
427
|
+
visitor: {
|
|
428
|
+
/** Transform column references in leaf nodes (column, sparseToDenseColumn). */
|
|
429
|
+
column: (c: C1) => C2;
|
|
430
|
+
/** Visit a node after its children have been traversed. */
|
|
431
|
+
node?: (node: SpecQuery<C2>) => SpecQuery<C2>;
|
|
432
|
+
/** Visit a join entry after its inner query has been traversed. */
|
|
433
|
+
joinEntry?: (entry: SpecQueryJoinEntry<C2>) => SpecQueryJoinEntry<C2>;
|
|
434
|
+
},
|
|
435
|
+
): PTableDefV2<C2> {
|
|
436
|
+
return { query: mapSpecQueryColumns(def.query, visitor) };
|
|
427
437
|
}
|
|
428
438
|
|
|
429
439
|
export function mapJoinEntry<C1, C2>(entry: JoinEntry<C1>, cb: (c: C1) => C2): JoinEntry<C2> {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { PObjectId } from "../../pool";
|
|
2
1
|
import type { AxisId, AxisSpec, PColumnSpec } from "./spec/spec";
|
|
2
|
+
import type { ColumnUniversalId } from "./spec/ids";
|
|
3
3
|
|
|
4
4
|
export type PTableColumnSpecAxis = {
|
|
5
5
|
type: "axis";
|
|
@@ -9,7 +9,13 @@ export type PTableColumnSpecAxis = {
|
|
|
9
9
|
|
|
10
10
|
export type PTableColumnSpecColumn = {
|
|
11
11
|
type: "column";
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Leaf column id as it appears in the SpecQuery — may be a rich
|
|
14
|
+
* {@link ColumnUniversalId} (Discovered / Overridden / Filtered) or a bare
|
|
15
|
+
* {@link PObjectId}. The host resolver strips to bare via `extractPObjectId`
|
|
16
|
+
* before physical lookup.
|
|
17
|
+
*/
|
|
18
|
+
id: ColumnUniversalId;
|
|
13
19
|
spec: PColumnSpec;
|
|
14
20
|
};
|
|
15
21
|
|
|
@@ -23,7 +29,8 @@ export type PTableColumnIdAxis = {
|
|
|
23
29
|
|
|
24
30
|
export type PTableColumnIdColumn = {
|
|
25
31
|
type: "column";
|
|
26
|
-
id
|
|
32
|
+
/** @see PTableColumnSpecColumn.id */
|
|
33
|
+
id: ColumnUniversalId;
|
|
27
34
|
};
|
|
28
35
|
|
|
29
36
|
/** Unified PTable column identifier */
|
package/src/index.ts
CHANGED
package/src/pool/spec.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { JoinEntry, PColumn, PColumnLazy, PColumnSpec } from "../drivers";
|
|
1
|
+
import type { JoinEntry, PColumn, PColumnSpec } from "../drivers";
|
|
3
2
|
import { assertNever } from "../util";
|
|
4
|
-
import
|
|
3
|
+
import { PlRef } from "../ref";
|
|
4
|
+
import { CanonicalizedJson, canonicalizeJson, parseJsonSafely } from "../json";
|
|
5
|
+
import { Branded } from "@milaboratories/helpers";
|
|
5
6
|
|
|
6
7
|
/** Any object exported into the result pool by the block always have spec attached to it */
|
|
7
8
|
export type PObjectSpec = {
|
|
@@ -22,8 +23,65 @@ export type PObjectSpec = {
|
|
|
22
23
|
readonly annotations?: Record<string, string>;
|
|
23
24
|
};
|
|
24
25
|
|
|
26
|
+
export type LocalPObjectKey = { resolvePath: string[]; name: string };
|
|
27
|
+
export type LocalPObjectId = Branded<CanonicalizedJson<LocalPObjectKey>, "LocalPObjectId">;
|
|
28
|
+
export type GlobalPObjectKey = PlRef;
|
|
29
|
+
export type GlobalPObjectId = Branded<CanonicalizedJson<GlobalPObjectKey>, "GlobalPObjectId">;
|
|
25
30
|
/** Stable PObject id */
|
|
26
|
-
export type PObjectId =
|
|
31
|
+
export type PObjectId = LocalPObjectId | GlobalPObjectId;
|
|
32
|
+
|
|
33
|
+
export function isPObjectId(value: unknown): value is PObjectId {
|
|
34
|
+
if (typeof value !== "string") return false;
|
|
35
|
+
return isPObjectKey(parseJsonSafely(value));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function isPObjectKey(value: unknown): value is LocalPObjectKey | GlobalPObjectKey {
|
|
39
|
+
return isLocalPObjectKey(value) || isGlobalPObjectKey(value);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function createPObjectId(obj: LocalPObjectKey | GlobalPObjectKey): PObjectId {
|
|
43
|
+
if (isLocalPObjectKey(obj)) {
|
|
44
|
+
return createLocalPObjectId(obj.resolvePath, obj.name);
|
|
45
|
+
}
|
|
46
|
+
if (isGlobalPObjectKey(obj)) {
|
|
47
|
+
return createGlobalPObjectId(obj.blockId, obj.name);
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`createPObjectId: unrecognized object key structure: ${JSON.stringify(obj)}`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function createLocalPObjectId(resolvePath: string[], name: string): PObjectId {
|
|
53
|
+
return canonicalizeJson({ resolvePath, name }) as PObjectId;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function isLocalPObjectId(value: unknown): value is LocalPObjectId {
|
|
57
|
+
if (typeof value !== "string") return false;
|
|
58
|
+
return isLocalPObjectKey(parseJsonSafely<LocalPObjectKey>(value));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function isLocalPObjectKey(value: unknown): value is LocalPObjectKey {
|
|
62
|
+
if (typeof value !== "object" || value === null) return false;
|
|
63
|
+
const v = value as LocalPObjectKey;
|
|
64
|
+
return Array.isArray(v.resolvePath) && typeof v.name === "string";
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function createGlobalPObjectId(blockId: string, exportName: string): PObjectId {
|
|
68
|
+
return canonicalizeJson({
|
|
69
|
+
__isRef: true,
|
|
70
|
+
blockId,
|
|
71
|
+
name: exportName,
|
|
72
|
+
} satisfies PlRef) as PObjectId;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function isGlobalPObjectKey(value: unknown): value is GlobalPObjectKey {
|
|
76
|
+
if (typeof value !== "object" || value === null) return false;
|
|
77
|
+
return "__isRef" in value && "blockId" in value && "name" in value;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function isGlobalPObjectId(value: unknown): value is GlobalPObjectId {
|
|
81
|
+
if (typeof value !== "string") return false;
|
|
82
|
+
const parsed = parseJsonSafely<GlobalPObjectKey>(value);
|
|
83
|
+
return isGlobalPObjectKey(parsed);
|
|
84
|
+
}
|
|
27
85
|
|
|
28
86
|
/**
|
|
29
87
|
* Full PObject representation.
|
|
@@ -41,24 +99,16 @@ export interface PObject<Data> {
|
|
|
41
99
|
readonly data: Data;
|
|
42
100
|
}
|
|
43
101
|
|
|
44
|
-
export function
|
|
45
|
-
return
|
|
102
|
+
export function isPObject<Data>(obj: unknown): obj is PObject<Data> {
|
|
103
|
+
return typeof obj === "object" && obj !== null && "id" in obj && "spec" in obj && "data" in obj;
|
|
46
104
|
}
|
|
47
105
|
|
|
48
|
-
export function isPColumn<T>(obj:
|
|
49
|
-
return isPColumnSpec(obj.spec);
|
|
106
|
+
export function isPColumn<T>(obj: unknown): obj is PColumn<T> {
|
|
107
|
+
return isPObject(obj) && isPColumnSpec(obj.spec);
|
|
50
108
|
}
|
|
51
109
|
|
|
52
|
-
export function
|
|
53
|
-
|
|
54
|
-
): r is ResultPoolEntry<PColumnSpec> {
|
|
55
|
-
return isPColumnSpec(r.obj);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export function isPColumnResult<T>(
|
|
59
|
-
r: ResultPoolEntry<PObject<T>>,
|
|
60
|
-
): r is ResultPoolEntry<PColumn<T>> {
|
|
61
|
-
return isPColumnSpec(r.obj.spec);
|
|
110
|
+
export function isPColumnSpec(spec: PObjectSpec): spec is PColumnSpec {
|
|
111
|
+
return spec.kind === "PColumn";
|
|
62
112
|
}
|
|
63
113
|
|
|
64
114
|
export function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {
|
|
@@ -66,10 +116,6 @@ export function ensurePColumn<T>(obj: PObject<T>): PColumn<T> {
|
|
|
66
116
|
return obj;
|
|
67
117
|
}
|
|
68
118
|
|
|
69
|
-
export function mapPObjectData<D1, D2>(
|
|
70
|
-
pObj: PColumn<D1> | PColumnLazy<D1>,
|
|
71
|
-
cb: (d: D1) => D2,
|
|
72
|
-
): PColumn<D2>;
|
|
73
119
|
export function mapPObjectData<D1, D2>(pObj: PColumn<D1>, cb: (d: D1) => D2): PColumn<D2>;
|
|
74
120
|
export function mapPObjectData<D1, D2>(
|
|
75
121
|
pObj: PColumn<D1> | undefined,
|
|
@@ -88,7 +134,7 @@ export function mapPObjectData<D1, D2>(
|
|
|
88
134
|
? undefined
|
|
89
135
|
: {
|
|
90
136
|
...pObj,
|
|
91
|
-
data: cb(
|
|
137
|
+
data: cb(pObj.data),
|
|
92
138
|
};
|
|
93
139
|
}
|
|
94
140
|
|
|
@@ -24,6 +24,10 @@
|
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
26
|
import type { DialogService } from "../dialog";
|
|
27
|
+
import type {
|
|
28
|
+
ColumnsCollectionDriver,
|
|
29
|
+
ColumnsCollectionDriverModel,
|
|
30
|
+
} from "../drivers/columns/columns_collection_driver";
|
|
27
31
|
import type { PFrameDriver, PFrameModelDriver } from "../drivers/pframe/driver";
|
|
28
32
|
import type { PFrameSpecDriver } from "../drivers/pframe/spec_driver";
|
|
29
33
|
import { service } from "./service_types";
|
|
@@ -82,4 +86,31 @@ export const Services = {
|
|
|
82
86
|
modelMethods: [] as const,
|
|
83
87
|
uiMethods: ["showSaveDialog"] as const,
|
|
84
88
|
}),
|
|
89
|
+
ColumnsCollection: service<
|
|
90
|
+
ColumnsCollectionDriverModel,
|
|
91
|
+
ColumnsCollectionDriverModel,
|
|
92
|
+
ColumnsCollectionDriver,
|
|
93
|
+
ColumnsCollectionDriver
|
|
94
|
+
>()({
|
|
95
|
+
type: "wasm",
|
|
96
|
+
name: "columnsCollection",
|
|
97
|
+
modelMethods: [
|
|
98
|
+
"create",
|
|
99
|
+
"isEmpty",
|
|
100
|
+
"isFinal",
|
|
101
|
+
"getColumns",
|
|
102
|
+
"addSource",
|
|
103
|
+
"discover",
|
|
104
|
+
"filter",
|
|
105
|
+
] as const,
|
|
106
|
+
uiMethods: [
|
|
107
|
+
"create",
|
|
108
|
+
"isEmpty",
|
|
109
|
+
"isFinal",
|
|
110
|
+
"getColumns",
|
|
111
|
+
"addSource",
|
|
112
|
+
"discover",
|
|
113
|
+
"filter",
|
|
114
|
+
] as const,
|
|
115
|
+
}),
|
|
85
116
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
ServiceTypesLike,
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
InferServiceModelHost,
|
|
4
|
+
InferServiceUiHost,
|
|
5
5
|
ServiceName,
|
|
6
6
|
ModelServiceFactoryMap,
|
|
7
7
|
UiServiceFactoryMap,
|
|
@@ -71,7 +71,9 @@ export class ModelServiceRegistry<
|
|
|
71
71
|
get<S extends ServiceTypesLike>(
|
|
72
72
|
id: ServiceName<S>,
|
|
73
73
|
):
|
|
74
|
-
| ([unknown] extends [
|
|
74
|
+
| ([unknown] extends [InferServiceModelHost<S>]
|
|
75
|
+
? Record<string, Function>
|
|
76
|
+
: InferServiceModelHost<S>)
|
|
75
77
|
| null;
|
|
76
78
|
get(id: ServiceName): Record<string, Function> | null {
|
|
77
79
|
return this.getById(id);
|
|
@@ -87,7 +89,9 @@ export class UiServiceRegistry<
|
|
|
87
89
|
|
|
88
90
|
get<S extends ServiceTypesLike>(
|
|
89
91
|
id: ServiceName<S>,
|
|
90
|
-
):
|
|
92
|
+
):
|
|
93
|
+
| ([unknown] extends [InferServiceUiHost<S>] ? Record<string, Function> : InferServiceUiHost<S>)
|
|
94
|
+
| null;
|
|
91
95
|
get(id: ServiceName): Record<string, Function> | null {
|
|
92
96
|
return this.getById(id);
|
|
93
97
|
}
|
|
@@ -7,18 +7,44 @@ export type ServiceTypesLike<
|
|
|
7
7
|
Model = unknown,
|
|
8
8
|
Ui = unknown,
|
|
9
9
|
Kind extends ServiceType = ServiceType,
|
|
10
|
+
ModelHost = Model,
|
|
11
|
+
UiHost = Ui,
|
|
10
12
|
> = {
|
|
11
|
-
readonly __types?: {
|
|
13
|
+
readonly __types?: {
|
|
14
|
+
model: Model;
|
|
15
|
+
ui: Ui;
|
|
16
|
+
kind: Kind;
|
|
17
|
+
modelHost: ModelHost;
|
|
18
|
+
uiHost: UiHost;
|
|
19
|
+
};
|
|
12
20
|
};
|
|
13
21
|
|
|
14
22
|
export type InferServiceModel<S extends ServiceTypesLike> =
|
|
15
|
-
S extends ServiceTypesLike<infer M, unknown, ServiceType> ? M : unknown;
|
|
23
|
+
S extends ServiceTypesLike<infer M, unknown, ServiceType, unknown, unknown> ? M : unknown;
|
|
16
24
|
|
|
17
25
|
export type InferServiceUi<S extends ServiceTypesLike> =
|
|
18
|
-
S extends ServiceTypesLike<unknown, infer U, ServiceType> ? U : unknown;
|
|
26
|
+
S extends ServiceTypesLike<unknown, infer U, ServiceType, unknown, unknown> ? U : unknown;
|
|
19
27
|
|
|
20
28
|
export type InferServiceKind<S extends ServiceTypesLike> =
|
|
21
|
-
S extends ServiceTypesLike<unknown, unknown, infer K> ? K : ServiceType;
|
|
29
|
+
S extends ServiceTypesLike<unknown, unknown, infer K, unknown, unknown> ? K : ServiceType;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Host-side shape stored in the model service registry. Differs from
|
|
33
|
+
* {@link InferServiceModel} only when the registered impl carries extra
|
|
34
|
+
* parameters (e.g. per-call `host` bindings) that the sandbox-view does
|
|
35
|
+
* not expose. Defaults to {@link InferServiceModel}.
|
|
36
|
+
*/
|
|
37
|
+
export type InferServiceModelHost<S extends ServiceTypesLike> =
|
|
38
|
+
S extends ServiceTypesLike<unknown, unknown, ServiceType, infer MH, unknown> ? MH : unknown;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Host-side shape stored in the UI service registry. Differs from
|
|
42
|
+
* {@link InferServiceUi} only when the registered impl carries extra
|
|
43
|
+
* parameters that the UI-proxy view does not expose. Defaults to
|
|
44
|
+
* {@link InferServiceUi}.
|
|
45
|
+
*/
|
|
46
|
+
export type InferServiceUiHost<S extends ServiceTypesLike> =
|
|
47
|
+
S extends ServiceTypesLike<unknown, unknown, ServiceType, unknown, infer UH> ? UH : unknown;
|
|
22
48
|
|
|
23
49
|
export type ServiceName<S extends ServiceTypesLike = ServiceTypesLike> = Branded<string, S>;
|
|
24
50
|
|
|
@@ -39,7 +65,7 @@ export const {
|
|
|
39
65
|
const modelMethodsMap = new Map<string, readonly string[]>();
|
|
40
66
|
const uiMethodsMap = new Map<string, readonly string[]>();
|
|
41
67
|
return {
|
|
42
|
-
service<Model, Ui>() {
|
|
68
|
+
service<Model, Ui, ModelHost = Model, UiHost = Ui>() {
|
|
43
69
|
return <
|
|
44
70
|
K extends ServiceType,
|
|
45
71
|
N extends string,
|
|
@@ -50,7 +76,7 @@ export const {
|
|
|
50
76
|
readonly name: N;
|
|
51
77
|
readonly modelMethods: MM;
|
|
52
78
|
readonly uiMethods: UM;
|
|
53
|
-
}): Branded<N, ServiceTypesLike<Model, Ui, K>> => {
|
|
79
|
+
}): Branded<N, ServiceTypesLike<Model, Ui, K, ModelHost, UiHost>> => {
|
|
54
80
|
const { name, type, modelMethods, uiMethods } = options;
|
|
55
81
|
if (!SERVICE_ID_PATTERN.test(name)) {
|
|
56
82
|
throw new ServiceInvalidIdError(
|
|
@@ -63,7 +89,7 @@ export const {
|
|
|
63
89
|
typeMap.set(name, type);
|
|
64
90
|
modelMethodsMap.set(name, modelMethods);
|
|
65
91
|
uiMethodsMap.set(name, uiMethods);
|
|
66
|
-
return name as Branded<N, ServiceTypesLike<Model, Ui, K>>;
|
|
92
|
+
return name as Branded<N, ServiceTypesLike<Model, Ui, K, ModelHost, UiHost>>;
|
|
67
93
|
};
|
|
68
94
|
},
|
|
69
95
|
isNodeService(id: ServiceName): boolean {
|
|
@@ -95,11 +121,11 @@ export type ServiceBrand<T> =
|
|
|
95
121
|
T extends Branded<string, infer S extends ServiceTypesLike> ? S : never;
|
|
96
122
|
|
|
97
123
|
export type ModelServiceFactoryMap<SMap extends Record<string, ServiceName>> = {
|
|
98
|
-
[K in keyof SMap]: (() =>
|
|
124
|
+
[K in keyof SMap]: (() => InferServiceModelHost<ServiceBrand<SMap[K]>>) | null;
|
|
99
125
|
};
|
|
100
126
|
|
|
101
127
|
export type UiServiceFactoryMap<SMap extends Record<string, ServiceName>> = {
|
|
102
|
-
[K in keyof SMap]: (() =>
|
|
128
|
+
[K in keyof SMap]: (() => InferServiceUiHost<ServiceBrand<SMap[K]>>) | null;
|
|
103
129
|
};
|
|
104
130
|
|
|
105
131
|
/** Contract between any service provider and any service consumer. */
|