@platforma-sdk/model 1.65.9 → 1.66.2

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 (121) hide show
  1. package/dist/block_model.cjs +8 -11
  2. package/dist/block_model.cjs.map +1 -1
  3. package/dist/block_model.d.ts.map +1 -1
  4. package/dist/block_model.js +8 -10
  5. package/dist/block_model.js.map +1 -1
  6. package/dist/columns/column_collection_builder.cjs +61 -74
  7. package/dist/columns/column_collection_builder.cjs.map +1 -1
  8. package/dist/columns/column_collection_builder.d.ts +16 -22
  9. package/dist/columns/column_collection_builder.d.ts.map +1 -1
  10. package/dist/columns/column_collection_builder.js +62 -75
  11. package/dist/columns/column_collection_builder.js.map +1 -1
  12. package/dist/columns/column_selector.cjs.map +1 -1
  13. package/dist/columns/column_selector.d.ts +1 -1
  14. package/dist/columns/column_selector.js.map +1 -1
  15. package/dist/columns/column_snapshot.cjs.map +1 -1
  16. package/dist/columns/column_snapshot.d.ts +4 -4
  17. package/dist/columns/column_snapshot.d.ts.map +1 -1
  18. package/dist/columns/column_snapshot.js.map +1 -1
  19. package/dist/columns/ctx_column_sources.cjs.map +1 -1
  20. package/dist/columns/ctx_column_sources.d.ts +1 -1
  21. package/dist/columns/ctx_column_sources.d.ts.map +1 -1
  22. package/dist/columns/ctx_column_sources.js.map +1 -1
  23. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +2 -2
  24. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
  25. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +2 -2
  26. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
  27. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +17 -18
  28. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
  29. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +17 -18
  30. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
  31. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +99 -91
  32. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
  33. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +16 -16
  34. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
  35. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +102 -94
  36. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
  37. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +32 -23
  38. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
  39. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +5 -5
  40. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -1
  41. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +33 -24
  42. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
  43. package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
  44. package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -3
  45. package/dist/components/PlDataTable/createPlDataTable/index.d.ts.map +1 -1
  46. package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
  47. package/dist/components/PlDataTable/createPlDataTable/utils.cjs +133 -16
  48. package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
  49. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +8 -6
  50. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -1
  51. package/dist/components/PlDataTable/createPlDataTable/utils.js +130 -17
  52. package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
  53. package/dist/components/PlDataTable/labels.cjs +1 -2
  54. package/dist/components/PlDataTable/labels.cjs.map +1 -1
  55. package/dist/components/PlDataTable/labels.js +1 -2
  56. package/dist/components/PlDataTable/labels.js.map +1 -1
  57. package/dist/filters/distill.cjs +73 -30
  58. package/dist/filters/distill.cjs.map +1 -1
  59. package/dist/filters/distill.d.ts.map +1 -1
  60. package/dist/filters/distill.js +73 -30
  61. package/dist/filters/distill.js.map +1 -1
  62. package/dist/index.cjs +19 -15
  63. package/dist/index.d.ts +4 -2
  64. package/dist/index.js +6 -4
  65. package/dist/labels/derive_distinct_tooltips.cjs +85 -0
  66. package/dist/labels/derive_distinct_tooltips.cjs.map +1 -0
  67. package/dist/labels/derive_distinct_tooltips.d.ts +17 -0
  68. package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -0
  69. package/dist/labels/derive_distinct_tooltips.js +84 -0
  70. package/dist/labels/derive_distinct_tooltips.js.map +1 -0
  71. package/dist/labels/index.cjs +1 -0
  72. package/dist/labels/index.d.ts +2 -1
  73. package/dist/labels/index.js +1 -0
  74. package/dist/package.cjs +1 -1
  75. package/dist/package.js +1 -1
  76. package/dist/render/api.cjs +8 -13
  77. package/dist/render/api.cjs.map +1 -1
  78. package/dist/render/api.d.ts +8 -11
  79. package/dist/render/api.d.ts.map +1 -1
  80. package/dist/render/api.js +8 -13
  81. package/dist/render/api.js.map +1 -1
  82. package/dist/services/get_services.cjs +19 -0
  83. package/dist/services/get_services.cjs.map +1 -0
  84. package/dist/services/get_services.d.ts +7 -0
  85. package/dist/services/get_services.d.ts.map +1 -0
  86. package/dist/services/get_services.js +19 -0
  87. package/dist/services/get_services.js.map +1 -0
  88. package/dist/services/index.cjs +1 -0
  89. package/dist/services/index.d.ts +2 -1
  90. package/dist/services/index.js +1 -0
  91. package/dist/services/service_bridge.cjs +4 -4
  92. package/dist/services/service_bridge.cjs.map +1 -1
  93. package/dist/services/service_bridge.d.ts +4 -4
  94. package/dist/services/service_bridge.d.ts.map +1 -1
  95. package/dist/services/service_bridge.js +4 -4
  96. package/dist/services/service_bridge.js.map +1 -1
  97. package/package.json +6 -6
  98. package/src/block_model.ts +8 -11
  99. package/src/columns/column_collection_builder.test.ts +75 -30
  100. package/src/columns/column_collection_builder.ts +96 -133
  101. package/src/columns/column_selector.ts +1 -1
  102. package/src/columns/column_snapshot.ts +7 -4
  103. package/src/columns/ctx_column_sources.ts +1 -3
  104. package/src/components/PFrameForGraphs.test.ts +4 -4
  105. package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +2 -2
  106. package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +44 -21
  107. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +202 -218
  108. package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +69 -56
  109. package/src/components/PlDataTable/createPlDataTable/index.ts +6 -7
  110. package/src/components/PlDataTable/createPlDataTable/utils.test.ts +97 -1
  111. package/src/components/PlDataTable/createPlDataTable/utils.ts +190 -35
  112. package/src/components/PlDataTable/labels.ts +3 -7
  113. package/src/filters/distill.test.ts +91 -0
  114. package/src/filters/distill.ts +102 -46
  115. package/src/labels/derive_distinct_tooltips.test.ts +233 -0
  116. package/src/labels/derive_distinct_tooltips.ts +130 -0
  117. package/src/labels/index.ts +1 -0
  118. package/src/render/api.ts +15 -50
  119. package/src/services/get_services.ts +28 -0
  120. package/src/services/index.ts +1 -0
  121. package/src/services/service_bridge.ts +5 -5
package/src/render/api.ts CHANGED
@@ -3,6 +3,7 @@ import type {
3
3
  AnyFunction,
4
4
  AxisId,
5
5
  DataInfo,
6
+ ModelServices,
6
7
  Option,
7
8
  PColumn,
8
9
  PColumnLazy,
@@ -23,7 +24,6 @@ import type {
23
24
  PlRef,
24
25
  ResolveAnchorsOptions,
25
26
  ResultCollection,
26
- ServiceName,
27
27
  SUniversalPColumnId,
28
28
  ValueOrError,
29
29
  } from "@milaboratories/pl-model-common";
@@ -55,11 +55,8 @@ import type {
55
55
  PluginHandle,
56
56
  PluginFactoryLike,
57
57
  InferFactoryData,
58
- InferFactoryModelServices,
59
58
  InferFactoryParams,
60
59
  } from "../plugin_handle";
61
- import type { BlockDefaultModelServices } from "../services/service_resolve";
62
- import type { ModelServices as AllModelServices } from "@milaboratories/pl-model-common";
63
60
  import { TreeNodeAccessor, ifDef } from "./accessor";
64
61
  import type { FutureRef } from "./future";
65
62
  import type { AccessorHandle, GlobalCfgRenderCtx } from "./internal";
@@ -75,6 +72,7 @@ import type { APColumnSelectorWithSplit } from "./util/split_selectors";
75
72
  import { patchInSetFilters } from "./util/pframe_upgraders";
76
73
  import { allPColumnsReady } from "./util/pcolumn_data";
77
74
  import type { PColumnDataUniversal } from "./internal";
75
+ import { getService } from "../services";
78
76
 
79
77
  /**
80
78
  * Helper function to match domain objects
@@ -554,40 +552,11 @@ export class ResultPool implements ColumnProvider, AxisLabelProvider {
554
552
  }
555
553
 
556
554
  /** Main entry point to the API available within model lambdas (like outputs, sections, etc..) */
557
- export abstract class RenderCtxBase<
558
- Args = unknown,
559
- Data = unknown,
560
- ModelServices = Partial<AllModelServices>,
561
- > {
555
+ export abstract class RenderCtxBase<Args = unknown, Data = unknown> {
562
556
  protected readonly ctx: GlobalCfgRenderCtx;
563
- private readonly requiredServiceNames: ServiceName[];
564
- private cachedServices?: ModelServices;
565
557
 
566
- constructor(requiredServiceNames: ServiceName[] = []) {
558
+ constructor() {
567
559
  this.ctx = getCfgRenderCtx();
568
- this.requiredServiceNames = requiredServiceNames;
569
- }
570
-
571
- get services(): ModelServices {
572
- if (this.cachedServices) return this.cachedServices;
573
- const ctx = this.ctx;
574
- const services = Object.freeze(
575
- Object.fromEntries(
576
- this.requiredServiceNames.map((id) => [
577
- id,
578
- Object.freeze(
579
- Object.fromEntries(
580
- (ctx.getServiceMethods(id) as string[]).map((method) => [
581
- method,
582
- (...args: unknown[]) => ctx.callServiceMethod(id, method, ...args),
583
- ]),
584
- ),
585
- ),
586
- ]),
587
- ),
588
- ) as ModelServices;
589
- this.cachedServices = services;
590
- return services;
591
560
  }
592
561
 
593
562
  private dataCache?: { v: Data };
@@ -619,6 +588,10 @@ export abstract class RenderCtxBase<
619
588
  return this.activeArgsCache.v;
620
589
  }
621
590
 
591
+ public getService<T extends keyof ModelServices>(name: T): ModelServices[T] {
592
+ return getService(name);
593
+ }
594
+
622
595
  // /** Can be used to determine features provided by the desktop instance. */
623
596
  // public get featureFlags() {
624
597
  // return this.ctx.featureFlags;
@@ -771,11 +744,7 @@ export abstract class RenderCtxBase<
771
744
  }
772
745
 
773
746
  /** Main entry point to the API available within model lambdas (like outputs, sections, etc..) for v3+ blocks */
774
- export class BlockRenderCtx<
775
- Args = unknown,
776
- Data = unknown,
777
- ModelServices = BlockDefaultModelServices,
778
- > extends RenderCtxBase<Args, Data, ModelServices> {
747
+ export class BlockRenderCtx<Args = unknown, Data = unknown> extends RenderCtxBase<Args, Data> {
779
748
  private argsCache?: { v: Args | undefined };
780
749
  public get args(): Args | undefined {
781
750
  if (this.argsCache === undefined) {
@@ -824,19 +793,15 @@ export class RenderCtxLegacy<Args = unknown, UiState = unknown> extends RenderCt
824
793
  *
825
794
  * @typeParam F - PluginFactoryLike phantom carrying data/params/outputs types
826
795
  */
827
- export class PluginRenderCtx<
828
- F extends PluginFactoryLike = PluginFactoryLike,
829
- ModelServices = InferFactoryModelServices<F>,
830
- > extends RenderCtxBase<unknown, InferFactoryData<F>, ModelServices> {
796
+ export class PluginRenderCtx<F extends PluginFactoryLike = PluginFactoryLike> extends RenderCtxBase<
797
+ unknown,
798
+ InferFactoryData<F>
799
+ > {
831
800
  private readonly handle: PluginHandle<F>;
832
801
  private readonly wrappedInputs: Record<string, () => unknown>;
833
802
 
834
- constructor(
835
- handle: PluginHandle<F>,
836
- wrappedInputs: Record<string, () => unknown>,
837
- requiredServiceNames: ServiceName[] = [],
838
- ) {
839
- super(requiredServiceNames);
803
+ constructor(handle: PluginHandle<F>, wrappedInputs: Record<string, () => unknown>) {
804
+ super();
840
805
  this.handle = handle;
841
806
  this.wrappedInputs = wrappedInputs;
842
807
  }
@@ -0,0 +1,28 @@
1
+ import { ModelServices, ServiceName } from "@milaboratories/pl-model-common";
2
+ import { getCfgRenderCtx } from "../internal";
3
+ import { ValueOf } from "@milaboratories/helpers";
4
+ import { createServiceProxy } from "./service_bridge";
5
+ import { GlobalCfgRenderCtx } from "../render/internal";
6
+
7
+ const cachedServices = new WeakMap<
8
+ GlobalCfgRenderCtx,
9
+ Map<keyof ModelServices, ValueOf<ModelServices>>
10
+ >();
11
+
12
+ export function getService<T extends keyof ModelServices>(name: T): ModelServices[T] {
13
+ const ctx = getCfgRenderCtx();
14
+
15
+ const map = cachedServices.has(ctx)
16
+ ? cachedServices.get(ctx)!
17
+ : (() => {
18
+ cachedServices.set(ctx, new Map());
19
+ return cachedServices.get(ctx)!;
20
+ })();
21
+
22
+ return map.has(name)
23
+ ? (map.get(name) as ModelServices[T])
24
+ : (() => {
25
+ map.set(name, createServiceProxy(ctx)(name as ServiceName) as ModelServices[T]);
26
+ return map.get(name) as ModelServices[T];
27
+ })();
28
+ }
@@ -1,3 +1,4 @@
1
1
  export * from "./block_services";
2
2
  export * from "./service_resolve";
3
3
  export * from "./service_bridge";
4
+ export * from "./get_services";
@@ -15,7 +15,7 @@ import { UiServiceRegistry } from "@milaboratories/pl-model-common";
15
15
  // Makes a remote node service appear local.
16
16
  // Given a service ID, returns an object implementing the service's UI interface.
17
17
  // Provided by the desktop app (e.g. backed by Electron IPC).
18
- export type NodeServiceProxy = <S extends ServiceTypesLike>(
18
+ export type ServiceProxy = <S extends ServiceTypesLike>(
19
19
  serviceId: ServiceName<S>,
20
20
  ) => InferServiceUi<S>;
21
21
 
@@ -53,10 +53,10 @@ export function buildServices<S extends Partial<AllUiServices> = Partial<AllUiSe
53
53
  }
54
54
 
55
55
  /**
56
- * Builds a NodeServiceProxy from a ServiceDispatch.
56
+ * Builds a ServiceProxy from a ServiceDispatch.
57
57
  * Each service method call is forwarded to dispatch.callServiceMethod.
58
58
  */
59
- export function createNodeServiceProxy(dispatch: ServiceDispatch): NodeServiceProxy {
59
+ export function createServiceProxy(dispatch: ServiceDispatch): ServiceProxy {
60
60
  return ((serviceId: ServiceName) =>
61
61
  Object.freeze(
62
62
  Object.fromEntries(
@@ -64,8 +64,8 @@ export function createNodeServiceProxy(dispatch: ServiceDispatch): NodeServicePr
64
64
  .getServiceMethods(serviceId)
65
65
  .map((method) => [
66
66
  method,
67
- async (...args: unknown[]) => dispatch.callServiceMethod(serviceId, method, ...args),
67
+ (...args: unknown[]) => dispatch.callServiceMethod(serviceId, method, ...args),
68
68
  ]),
69
69
  ),
70
- )) as NodeServiceProxy;
70
+ )) as ServiceProxy;
71
71
  }