@milaboratories/pl-model-common 1.34.0 → 1.35.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.
Files changed (57) 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/spec/anchored.cjs +2 -1
  9. package/dist/drivers/pframe/spec/anchored.cjs.map +1 -1
  10. package/dist/drivers/pframe/spec/anchored.d.ts +2 -1
  11. package/dist/drivers/pframe/spec/anchored.d.ts.map +1 -1
  12. package/dist/drivers/pframe/spec/anchored.js +2 -1
  13. package/dist/drivers/pframe/spec/anchored.js.map +1 -1
  14. package/dist/drivers/pframe/spec/discovered_column.cjs +32 -0
  15. package/dist/drivers/pframe/spec/discovered_column.cjs.map +1 -0
  16. package/dist/drivers/pframe/spec/discovered_column.d.ts +35 -0
  17. package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -0
  18. package/dist/drivers/pframe/spec/discovered_column.js +27 -0
  19. package/dist/drivers/pframe/spec/discovered_column.js.map +1 -0
  20. package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
  21. package/dist/drivers/pframe/spec/ids.d.ts +2 -1
  22. package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
  23. package/dist/drivers/pframe/spec/ids.js.map +1 -1
  24. package/dist/drivers/pframe/spec/index.cjs +1 -0
  25. package/dist/drivers/pframe/spec/index.d.ts +3 -2
  26. package/dist/drivers/pframe/spec/index.js +1 -0
  27. package/dist/drivers/pframe/spec/spec.cjs +2 -1
  28. package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
  29. package/dist/drivers/pframe/spec/spec.d.ts +2 -0
  30. package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
  31. package/dist/drivers/pframe/spec/spec.js +2 -1
  32. package/dist/drivers/pframe/spec/spec.js.map +1 -1
  33. package/dist/drivers/pframe/spec_driver.d.ts +1 -1
  34. package/dist/drivers/pframe/table.d.ts +1 -1
  35. package/dist/drivers/pframe/table_calculate.d.ts +1 -1
  36. package/dist/index.cjs +8 -0
  37. package/dist/index.d.ts +11 -10
  38. package/dist/index.js +3 -2
  39. package/dist/ref.cjs +16 -0
  40. package/dist/ref.cjs.map +1 -1
  41. package/dist/ref.d.ts +16 -12
  42. package/dist/ref.d.ts.map +1 -1
  43. package/dist/ref.js +15 -1
  44. package/dist/ref.js.map +1 -1
  45. package/dist/services/service_types.cjs.map +1 -1
  46. package/dist/services/service_types.d.ts +5 -5
  47. package/dist/services/service_types.d.ts.map +1 -1
  48. package/dist/services/service_types.js.map +1 -1
  49. package/package.json +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/ref.test.ts +37 -0
  56. package/src/ref.ts +34 -1
  57. package/src/services/service_types.ts +9 -5
package/src/ref.ts CHANGED
@@ -60,7 +60,11 @@ export type Option = {
60
60
  * @param name - The name of the reference.
61
61
  * @param requireEnrichments - Whether the reference requires enrichments.
62
62
  */
63
- export function createPlRef(blockId: string, name: string, requireEnrichments: boolean = false) {
63
+ export function createPlRef(
64
+ blockId: string,
65
+ name: string,
66
+ requireEnrichments: boolean = false,
67
+ ): PlRef {
64
68
  if (requireEnrichments)
65
69
  return {
66
70
  __isRef: true,
@@ -97,6 +101,35 @@ export function withEnrichments(ref: PlRef, requireEnrichments: boolean = true):
97
101
  }
98
102
  }
99
103
 
104
+ /** Primary dataset reference with an optional filter. */
105
+ export type PrimaryRef = {
106
+ readonly __isPrimaryRef: "v1";
107
+ readonly column: PlRef;
108
+ readonly filter?: PlRef;
109
+ };
110
+
111
+ export function isPrimaryRef(value: unknown): value is PrimaryRef {
112
+ return (
113
+ typeof value === "object" &&
114
+ value !== null &&
115
+ (value as { __isPrimaryRef?: unknown }).__isPrimaryRef === "v1" &&
116
+ "column" in value
117
+ );
118
+ }
119
+
120
+ export function createPrimaryRef(column: PlRef, filter?: PlRef): PrimaryRef {
121
+ if (filter !== undefined) return { __isPrimaryRef: "v1", column, filter };
122
+ else return { __isPrimaryRef: "v1", column };
123
+ }
124
+
125
+ /** Block args accept either form — backward compatible. */
126
+ export type DatasetInput = PlRef | PrimaryRef;
127
+
128
+ /** Dataset option with optional filter choices. */
129
+ export type DatasetOption = Option & {
130
+ readonly filters?: readonly Option[];
131
+ };
132
+
100
133
  /** Compare two PlRefs and returns true if they are qual */
101
134
  export function plRefsEqual(ref1: PlRef, ref2: PlRef, ignoreEnrichments: boolean = false) {
102
135
  return (
@@ -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<