@milaboratories/pl-model-common 1.33.0 → 1.34.1
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/drivers/index.cjs +1 -0
- package/dist/drivers/index.d.ts +8 -7
- package/dist/drivers/index.js +1 -0
- package/dist/drivers/pframe/driver.d.ts +1 -1
- package/dist/drivers/pframe/index.cjs +1 -0
- package/dist/drivers/pframe/index.d.ts +8 -7
- package/dist/drivers/pframe/index.js +1 -0
- package/dist/drivers/pframe/linker_columns.cjs +1 -1
- package/dist/drivers/pframe/linker_columns.cjs.map +1 -1
- package/dist/drivers/pframe/linker_columns.js +1 -1
- package/dist/drivers/pframe/linker_columns.js.map +1 -1
- package/dist/drivers/pframe/spec/anchored.cjs +2 -1
- package/dist/drivers/pframe/spec/anchored.cjs.map +1 -1
- package/dist/drivers/pframe/spec/anchored.d.ts +2 -1
- package/dist/drivers/pframe/spec/anchored.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/anchored.js +2 -1
- package/dist/drivers/pframe/spec/anchored.js.map +1 -1
- package/dist/drivers/pframe/spec/discovered_column.cjs +32 -0
- package/dist/drivers/pframe/spec/discovered_column.cjs.map +1 -0
- package/dist/drivers/pframe/spec/discovered_column.d.ts +35 -0
- package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -0
- package/dist/drivers/pframe/spec/discovered_column.js +27 -0
- package/dist/drivers/pframe/spec/discovered_column.js.map +1 -0
- package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
- package/dist/drivers/pframe/spec/ids.d.ts +2 -1
- package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/ids.js.map +1 -1
- package/dist/drivers/pframe/spec/index.cjs +1 -0
- package/dist/drivers/pframe/spec/index.d.ts +3 -2
- package/dist/drivers/pframe/spec/index.js +1 -0
- package/dist/drivers/pframe/spec/spec.cjs +2 -1
- package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
- package/dist/drivers/pframe/spec/spec.d.ts +2 -0
- package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/spec.js +2 -1
- package/dist/drivers/pframe/spec/spec.js.map +1 -1
- package/dist/drivers/pframe/spec_driver.d.ts +1 -1
- package/dist/drivers/pframe/table.d.ts +1 -1
- package/dist/drivers/pframe/table_calculate.d.ts +1 -1
- package/dist/index.cjs +6 -0
- package/dist/index.d.ts +10 -9
- package/dist/index.js +2 -1
- package/dist/services/service_types.cjs.map +1 -1
- package/dist/services/service_types.d.ts +5 -5
- package/dist/services/service_types.d.ts.map +1 -1
- package/dist/services/service_types.js.map +1 -1
- package/package.json +3 -3
- package/src/drivers/pframe/linker_columns.test.ts +17 -13
- package/src/drivers/pframe/linker_columns.ts +3 -3
- package/src/drivers/pframe/spec/anchored.ts +2 -1
- package/src/drivers/pframe/spec/discovered_column.ts +65 -0
- package/src/drivers/pframe/spec/ids.ts +3 -1
- package/src/drivers/pframe/spec/index.ts +1 -0
- package/src/drivers/pframe/spec/spec.ts +2 -0
- package/src/services/service_types.ts +9 -5
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Branded, throwError } from "@milaboratories/helpers";
|
|
2
|
+
import { PObjectId } from "../../../pool";
|
|
3
|
+
import { AxisQualification } from "../spec_driver";
|
|
4
|
+
import { canonicalizeJson } from "../../../json";
|
|
5
|
+
|
|
6
|
+
export type DiscoveredPColumn = {
|
|
7
|
+
path: PathItem[];
|
|
8
|
+
column: PObjectId;
|
|
9
|
+
columnQualifications: AxisQualification[];
|
|
10
|
+
queriesQualifications: Record<PObjectId, AxisQualification[]>;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type DiscoveredPColumnId = Branded<PObjectId, "DiscoveredPColumnId">; // CanonicalizedJson<DiscoveredPColumn>;
|
|
14
|
+
|
|
15
|
+
type PathItem = {
|
|
16
|
+
type: "linker";
|
|
17
|
+
column: PObjectId;
|
|
18
|
+
qualifications: AxisQualification[];
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export function isDiscoveredPColumn(obj: unknown): obj is DiscoveredPColumn {
|
|
22
|
+
return (
|
|
23
|
+
typeof obj === "object" &&
|
|
24
|
+
obj !== null &&
|
|
25
|
+
"path" in obj &&
|
|
26
|
+
"column" in obj &&
|
|
27
|
+
"columnQualifications" in obj &&
|
|
28
|
+
"queriesQualifications" in obj
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function createDiscoveredPColumn(props: {
|
|
33
|
+
column: PObjectId;
|
|
34
|
+
path: PathItem[];
|
|
35
|
+
columnQualifications: AxisQualification[];
|
|
36
|
+
queriesQualifications: Record<PObjectId, AxisQualification[]>;
|
|
37
|
+
}): DiscoveredPColumn {
|
|
38
|
+
return JSON.parse(JSON.stringify(props));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function createDiscoveredPColumnId(props: {
|
|
42
|
+
column: PObjectId;
|
|
43
|
+
path: PathItem[];
|
|
44
|
+
columnQualifications: AxisQualification[];
|
|
45
|
+
queriesQualifications: Record<PObjectId, AxisQualification[]>;
|
|
46
|
+
}): DiscoveredPColumnId {
|
|
47
|
+
return stringifyDiscoveredPColumnId(createDiscoveredPColumn(props));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function parseDiscoveredPColumnId(id: DiscoveredPColumnId): DiscoveredPColumn {
|
|
51
|
+
try {
|
|
52
|
+
const parsed = JSON.parse(id);
|
|
53
|
+
return isDiscoveredPColumn(parsed)
|
|
54
|
+
? parsed
|
|
55
|
+
: throwError("Parsed object is not a valid DiscoveredPColumn");
|
|
56
|
+
} catch {
|
|
57
|
+
throw new Error(
|
|
58
|
+
"Invalid DiscoveredPColumnId: not a valid JSON or does not conform to DiscoveredPColumn structure",
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function stringifyDiscoveredPColumnId(id: DiscoveredPColumn) {
|
|
64
|
+
return canonicalizeJson<DiscoveredPColumn>(id) as string as DiscoveredPColumnId;
|
|
65
|
+
}
|
|
@@ -3,10 +3,12 @@ import type { AnchoredPColumnId } from "./selectors";
|
|
|
3
3
|
import type { FilteredPColumnId } from "./filtered_column";
|
|
4
4
|
import canonicalize from "canonicalize";
|
|
5
5
|
import type { PObjectId } from "../../../pool";
|
|
6
|
+
import { DiscoveredPColumn } from "./discovered_column";
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
9
|
* Universal column identifier optionally anchored and optionally filtered.
|
|
8
10
|
*/
|
|
9
|
-
export type UniversalPColumnId = AnchoredPColumnId | FilteredPColumnId;
|
|
11
|
+
export type UniversalPColumnId = AnchoredPColumnId | FilteredPColumnId | DiscoveredPColumn;
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
14
|
* Canonically serialized {@link UniversalPColumnId}.
|
|
@@ -164,6 +164,7 @@ export const Annotation = {
|
|
|
164
164
|
FontFamily: "pl7.app/table/fontFamily",
|
|
165
165
|
OrderPriority: "pl7.app/table/orderPriority",
|
|
166
166
|
Visibility: "pl7.app/table/visibility",
|
|
167
|
+
Info: "pl7.app/table/info",
|
|
167
168
|
},
|
|
168
169
|
Trace: "pl7.app/trace",
|
|
169
170
|
VDJ: {
|
|
@@ -205,6 +206,7 @@ export type Annotation = Metadata &
|
|
|
205
206
|
[Annotation.Table.FontFamily]: string;
|
|
206
207
|
[Annotation.Table.OrderPriority]: StringifiedJson<number>;
|
|
207
208
|
[Annotation.Table.Visibility]: "hidden" | "optional" | (string & {});
|
|
209
|
+
[Annotation.Table.Info]: string;
|
|
208
210
|
[Annotation.Trace]: StringifiedJson<Trace>;
|
|
209
211
|
[Annotation.VDJ.IsAssemblingFeature]: StringifiedJson<boolean>;
|
|
210
212
|
}>;
|
|
@@ -78,28 +78,32 @@ export interface ServiceDispatch {
|
|
|
78
78
|
// Auto-derived types from the Services const in service_declarations.ts.
|
|
79
79
|
// Adding a service to Services automatically updates all of these.
|
|
80
80
|
|
|
81
|
-
type
|
|
81
|
+
type TServices = typeof Services;
|
|
82
82
|
|
|
83
83
|
type ExtractServiceName<T> = T extends Branded<infer N extends string, any> ? N : never;
|
|
84
84
|
|
|
85
85
|
/** Model-side service interfaces keyed by service name literal. */
|
|
86
86
|
export type ModelServices = {
|
|
87
|
-
[K in keyof
|
|
87
|
+
[K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceModel<
|
|
88
|
+
ServiceBrand<TServices[K]>
|
|
89
|
+
>;
|
|
88
90
|
};
|
|
89
91
|
|
|
90
92
|
/** UI-side service interfaces keyed by service name literal. */
|
|
91
93
|
export type UiServices = {
|
|
92
|
-
[K in keyof
|
|
94
|
+
[K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceUi<
|
|
95
|
+
ServiceBrand<TServices[K]>
|
|
96
|
+
>;
|
|
93
97
|
};
|
|
94
98
|
|
|
95
99
|
/** Map from Services keys to their unbranded string name literals. */
|
|
96
100
|
export type ServiceNameLiterals = {
|
|
97
|
-
[K in keyof
|
|
101
|
+
[K in keyof TServices]: ExtractServiceName<TServices[K]>;
|
|
98
102
|
};
|
|
99
103
|
|
|
100
104
|
/** Auto-derived requires* feature flags from Services keys. */
|
|
101
105
|
export type ServiceRequireFlags = {
|
|
102
|
-
[K in keyof
|
|
106
|
+
[K in keyof TServices as `requires${K & string}`]?: boolean;
|
|
103
107
|
};
|
|
104
108
|
|
|
105
109
|
export type RequireServices<T extends ServiceName> = UnionToIntersection<
|