@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.
Files changed (55) hide show
  1. package/dist/drivers/index.cjs +1 -0
  2. package/dist/drivers/index.d.ts +8 -7
  3. package/dist/drivers/index.js +1 -0
  4. package/dist/drivers/pframe/driver.d.ts +1 -1
  5. package/dist/drivers/pframe/index.cjs +1 -0
  6. package/dist/drivers/pframe/index.d.ts +8 -7
  7. package/dist/drivers/pframe/index.js +1 -0
  8. package/dist/drivers/pframe/linker_columns.cjs +1 -1
  9. package/dist/drivers/pframe/linker_columns.cjs.map +1 -1
  10. package/dist/drivers/pframe/linker_columns.js +1 -1
  11. package/dist/drivers/pframe/linker_columns.js.map +1 -1
  12. package/dist/drivers/pframe/spec/anchored.cjs +2 -1
  13. package/dist/drivers/pframe/spec/anchored.cjs.map +1 -1
  14. package/dist/drivers/pframe/spec/anchored.d.ts +2 -1
  15. package/dist/drivers/pframe/spec/anchored.d.ts.map +1 -1
  16. package/dist/drivers/pframe/spec/anchored.js +2 -1
  17. package/dist/drivers/pframe/spec/anchored.js.map +1 -1
  18. package/dist/drivers/pframe/spec/discovered_column.cjs +32 -0
  19. package/dist/drivers/pframe/spec/discovered_column.cjs.map +1 -0
  20. package/dist/drivers/pframe/spec/discovered_column.d.ts +35 -0
  21. package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -0
  22. package/dist/drivers/pframe/spec/discovered_column.js +27 -0
  23. package/dist/drivers/pframe/spec/discovered_column.js.map +1 -0
  24. package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
  25. package/dist/drivers/pframe/spec/ids.d.ts +2 -1
  26. package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
  27. package/dist/drivers/pframe/spec/ids.js.map +1 -1
  28. package/dist/drivers/pframe/spec/index.cjs +1 -0
  29. package/dist/drivers/pframe/spec/index.d.ts +3 -2
  30. package/dist/drivers/pframe/spec/index.js +1 -0
  31. package/dist/drivers/pframe/spec/spec.cjs +2 -1
  32. package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
  33. package/dist/drivers/pframe/spec/spec.d.ts +2 -0
  34. package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
  35. package/dist/drivers/pframe/spec/spec.js +2 -1
  36. package/dist/drivers/pframe/spec/spec.js.map +1 -1
  37. package/dist/drivers/pframe/spec_driver.d.ts +1 -1
  38. package/dist/drivers/pframe/table.d.ts +1 -1
  39. package/dist/drivers/pframe/table_calculate.d.ts +1 -1
  40. package/dist/index.cjs +6 -0
  41. package/dist/index.d.ts +10 -9
  42. package/dist/index.js +2 -1
  43. package/dist/services/service_types.cjs.map +1 -1
  44. package/dist/services/service_types.d.ts +5 -5
  45. package/dist/services/service_types.d.ts.map +1 -1
  46. package/dist/services/service_types.js.map +1 -1
  47. package/package.json +3 -3
  48. package/src/drivers/pframe/linker_columns.test.ts +17 -13
  49. package/src/drivers/pframe/linker_columns.ts +3 -3
  50. package/src/drivers/pframe/spec/anchored.ts +2 -1
  51. package/src/drivers/pframe/spec/discovered_column.ts +65 -0
  52. package/src/drivers/pframe/spec/ids.ts +3 -1
  53. package/src/drivers/pframe/spec/index.ts +1 -0
  54. package/src/drivers/pframe/spec/spec.ts +2 -0
  55. 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}.
@@ -4,3 +4,4 @@ export * from "./filtered_column";
4
4
  export * from "./spec";
5
5
  export * from "./selectors";
6
6
  export * from "./native_id";
7
+ export * from "./discovered_column";
@@ -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 SMap = typeof Services;
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 SMap as ExtractServiceName<SMap[K]>]: InferServiceModel<ServiceBrand<SMap[K]>>;
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 SMap as ExtractServiceName<SMap[K]>]: InferServiceUi<ServiceBrand<SMap[K]>>;
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 SMap]: ExtractServiceName<SMap[K]>;
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 SMap as `requires${K & string}`]?: boolean;
106
+ [K in keyof TServices as `requires${K & string}`]?: boolean;
103
107
  };
104
108
 
105
109
  export type RequireServices<T extends ServiceName> = UnionToIntersection<