@platforma-sdk/model 1.31.16 → 1.32.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.
@@ -176,6 +176,9 @@ export declare class RenderCtx<Args, UiState> {
176
176
  /** @deprecated scheduled for removal from SDK */
177
177
  getBlockLabel(blockId: string): string;
178
178
  getCurrentUnstableMarker(): string | undefined;
179
+ logInfo(msg: string): void;
180
+ logWarn(msg: string): void;
181
+ logError(msg: string): void;
179
182
  }
180
183
  export type RenderFunction<Args = unknown, UiState = unknown, Ret = unknown> = (rCtx: RenderCtx<Args, UiState>) => Ret;
181
184
  export type UnwrapFutureRef<K> = K extends FutureRef<infer T> ? T : K extends bigint | boolean | null | number | string | symbol | undefined ? K : {
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/render/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,WAAW,EACX,MAAM,EACN,QAAQ,EACR,MAAM,EACN,OAAO,EACP,eAAe,EACf,WAAW,EACX,aAAa,EACb,SAAS,EACT,YAAY,EACZ,OAAO,EAEP,WAAW,EACX,cAAc,EACd,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,KAAK,EACL,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,iBAAiB,EAalB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAS,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EAAqB,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAiBxE,MAAM,MAAM,qBAAqB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAoBlF,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC;CAC/D,GAAG,qBAAqB,CAAC;AAE1B,KAAK,cAAc,GAAG;IACpB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,KAAK,MAAM,CAAC,GAAG,kBAAkB,CAAC;CAC1E,CAAC;AAEF,qBAAa,UAAW,YAAW,cAAc,EAAE,iBAAiB;IAClE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyC;IAE7D;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,EAAE;IAIrD,UAAU,CACf,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,eAAe,GAAG,eAAe,EAAE,EAC3F,IAAI,CAAC,EAAE,cAAc,GACpB,MAAM,EAAE;IACX,uDAAuD;IAChD,UAAU,CACf,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,eAAe,GAAG,eAAe,EAAE,EAC3F,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,KAAK,MAAM,CAAC,GAAG,kBAAkB,GACvE,MAAM,EAAE;IAsCJ,gBAAgB,CAAC,YAAY,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,GAAG,iBAAiB,GAAG,SAAS;IAgB7H;;;;;;;OAOG;IACI,mBAAmB,CACxB,YAAY,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,EACrE,oBAAoB,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,yBAAyB,GAAG,yBAAyB,EAAE,EAChH,IAAI,CAAC,EAAE,oBAAoB,GAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC,EAAE,GAAG,SAAS;IAYvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,mBAAmB,CACjB,YAAY,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,EACrE,oBAAoB,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,yBAAyB,GAAG,yBAAyB,EAAE,EAChH,IAAI,CAAC,EAAE,oBAAoB,GAC1B;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,mBAAmB,CAAA;KAAE,EAAE,GAAG,SAAS;IAiB9D;;OAEG;IACI,qBAAqB,IAAI,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAIpE,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAc7D;;OAEG;IACI,+BAA+B,IAAI,gBAAgB,CACxD,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAC/D;IAIM,iBAAiB,IAAI,gBAAgB,CAC1C,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAC/D;IAiBD;;OAEG;IACI,sBAAsB,IAAI,gBAAgB,CAAC,WAAW,CAAC;IAIvD,QAAQ,IAAI,gBAAgB,CAAC,WAAW,CAAC;IAIhD;;;OAGG;IACI,YAAY,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS;IAetE;;;;OAIG;IACI,eAAe,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS;IAMzE;;;;OAIG;IACI,mBAAmB,CAAC,GAAG,EAAE,KAAK,GAAG,WAAW,GAAG,SAAS;IAO/D;;;OAGG;IACI,YAAY,CAAC,GAAG,EAAE,KAAK,GAAG,WAAW,GAAG,SAAS;IAIxD;;;;OAIG;IACI,0BAA0B,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,EAAE;IA6CjF;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IA8B5E;;;;;;OAMG;IACI,aAAa,CAClB,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,eAAe,GAAG,eAAe,EAAE,GAChF,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAAE;IA+B1C;;;OAGG;IACI,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;CAalH;AAED,iGAAiG;AACjG,qBAAa,SAAS,CAAC,IAAI,EAAE,OAAO;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IAEzC,SAAgB,IAAI,EAAE,IAAI,CAAC;IAC3B,SAAgB,OAAO,EAAE,OAAO,CAAC;;IASjC,OAAO,CAAC,gBAAgB,CAAC,CAAe;IAExC;;;SAGK;IACL,IAAW,UAAU,IAAI,IAAI,GAAG,SAAS,CAMxC;IAOD,OAAO,CAAC,gBAAgB;IAOxB,IAAW,MAAM,IAAI,gBAAgB,GAAG,SAAS,CAEhD;IAED,IAAW,OAAO,IAAI,gBAAgB,GAAG,SAAS,CAEjD;IAED,SAAgB,UAAU,aAAoB;IAE9C;;;;OAIG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IAI5E,OAAO,CAAC,qCAAqC;IAStC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,gBAAgB,GAAG,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,GAAG,YAAY;IAQzG,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,gBAAgB,GAAG,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,YAAY;IAClH,YAAY,CAAC,GAAG,EAAE;QACvB,OAAO,EAAE,OAAO,CAAC,gBAAgB,GAAG,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;QAClF,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAC/B,oBAAoB;QACpB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;KAC3B,GAAG,YAAY;IA8BhB,iDAAiD;IAC1C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC,wBAAwB,IAAI,MAAM,GAAG,SAAS;CAGtD;AAED,MAAM,MAAM,cAAc,CAAC,IAAI,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,CAC7E,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,KAC3B,GAAG,CAAC;AAET,MAAM,MAAM,eAAe,CAAC,CAAC,IAC3B,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,GACxB,CAAC,GACD,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GACtE,CAAC,GACD;KAAG,GAAG,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAAE,CAAC;AAEtD,MAAM,MAAM,yBAAyB,CAAC,EAAE,SAAS,WAAW,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC,GAChG,eAAe,CAAC,CAAC,CAAC,GAClB,KAAK,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/render/api.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,9 @@ export interface GlobalCfgRenderCtxMethods<AHandle = AccessorHandle, FHandle = F
45
45
  createPFrame(def: PFrameDef<AHandle | PColumnValues | DataInfo<AHandle>>): PFrameHandle;
46
46
  createPTable(def: PTableDef<PColumn<AHandle | PColumnValues | DataInfo<AHandle>>>): PTableHandle;
47
47
  getCurrentUnstableMarker(): string | undefined;
48
+ logInfo(message: string): void;
49
+ logWarn(message: string): void;
50
+ logError(message: string): void;
48
51
  }
49
52
  export declare const GlobalCfgRenderCtxFeatureFlags: {
50
53
  explicitColumnsSupport: true;
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/render/internal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/render/internal.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const PlatformaSDKVersion = "1.31.16";
1
+ export declare const PlatformaSDKVersion = "1.32.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,YAAY,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/model",
3
- "version": "1.31.16",
3
+ "version": "1.32.1",
4
4
  "description": "Platforma.bio SDK / Block Model",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",
@@ -21,8 +21,8 @@
21
21
  "utility-types": "^3.11.0",
22
22
  "canonicalize": "~2.1.0",
23
23
  "zod": "~3.23.8",
24
- "@milaboratories/pl-error-like": "^1.12.1",
25
- "@milaboratories/pl-model-common": "^1.15.2"
24
+ "@milaboratories/pl-model-common": "^1.15.2",
25
+ "@milaboratories/pl-error-like": "^1.12.1"
26
26
  },
27
27
  "devDependencies": {
28
28
  "typescript": "~5.5.4",
@@ -31,8 +31,8 @@
31
31
  "jest": "^29.7.0",
32
32
  "@jest/globals": "^29.7.0",
33
33
  "ts-jest": "^29.2.6",
34
- "@milaboratories/platforma-build-configs": "1.0.3",
35
- "@platforma-sdk/eslint-config": "1.0.3"
34
+ "@platforma-sdk/eslint-config": "1.0.3",
35
+ "@milaboratories/platforma-build-configs": "1.0.3"
36
36
  },
37
37
  "scripts": {
38
38
  "type-check": "node ./scripts/save-package-version.cjs && tsc --noEmit --composite false",
@@ -2,6 +2,8 @@ import {test, expect, describe} from '@jest/globals';
2
2
  import {
3
3
  enrichColumnsWithCompatible,
4
4
  getAdditionalColumns,
5
+ getLinkerColumnsMap,
6
+ LINKER_COLUMN_ANNOTATION,
5
7
  IS_VIRTUAL_COLUMN,
6
8
  LABEL_ANNOTATION
7
9
  } from './PFrameForGraphs';
@@ -223,7 +225,6 @@ describe('PFrameForGraph', () => {
223
225
  expect(enrichedColumns.map((c) => c.id)).toEqual(['id1', 'id3', 'id4'])
224
226
  })
225
227
 
226
-
227
228
  test('Labels of added columns include added domains, but not include common domains', () => {
228
229
  const columnSpec1: PColumnSpec = {
229
230
  kind: 'PColumn',
@@ -250,4 +251,125 @@ describe('PFrameForGraph', () => {
250
251
  expect(additionalColumns[0].spec.annotations?.[LABEL_ANNOTATION]).toEqual('Label of column2 / a');
251
252
  expect(additionalColumns[1].spec.annotations?.[LABEL_ANNOTATION]).toEqual('Label of column2 / b');
252
253
  })
254
+
255
+ test('Column added from upstream with linker column', () => {
256
+ const columnSpec1: PColumnSpec = {
257
+ kind: 'PColumn',
258
+ name: 'column1',
259
+ valueType: 'Int',
260
+ axesSpec: [
261
+ {type: 'String', name: 'axis1', domain: {key1: 'a'}},
262
+ {type: 'String', name: 'axis2', domain: {key1: 'b'}},
263
+ ]
264
+ };
265
+ const metaColumnSpec1: PColumnSpec = {
266
+ kind: 'PColumn',
267
+ name: 'metadata1',
268
+ valueType: 'Int',
269
+ axesSpec: [{type: 'String', name: 'axis1'}]
270
+ };
271
+ const metaColumnSpec2: PColumnSpec = {
272
+ kind: 'PColumn',
273
+ name: 'metadata2',
274
+ valueType: 'String',
275
+ axesSpec: [{type: 'String', name: 'axis1', domain: {key1: 'a'}}]
276
+ };
277
+ const metaColumnSpec3: PColumnSpec = {
278
+ kind: 'PColumn',
279
+ name: 'metadata2',
280
+ valueType: 'String',
281
+ axesSpec: [{type: 'String', name: 'axis3'}]
282
+ };
283
+ const linkerColumn13: PColumnSpec = {
284
+ kind: 'PColumn',
285
+ name: 'linker13',
286
+ valueType: 'String',
287
+ annotations: {[LINKER_COLUMN_ANNOTATION]: 'true'},
288
+ axesSpec: [
289
+ {type: 'String', name: 'axis1'},
290
+ {type: 'String', name: 'axis3'}
291
+ ]
292
+ }
293
+
294
+ const columns: PColumn<TreeNodeAccessor | PColumnValues>[] = [
295
+ {id: 'id1' as PObjectId, spec: columnSpec1, data: []},
296
+ ] as PColumn<PColumnValues>[];
297
+ const upstream: PColumn<TreeNodeAccessor | PColumnValues>[] = [
298
+ {id: 'id1' as PObjectId, spec: columnSpec1, data: []},
299
+ {id: 'id2' as PObjectId, spec: metaColumnSpec1, data: []},
300
+ {id: 'id3' as PObjectId, spec: metaColumnSpec2, data: []},
301
+ {id: 'id4' as PObjectId, spec: metaColumnSpec3, data: []},
302
+ {id: 'id5' as PObjectId, spec: linkerColumn13, data: []},
303
+ ] as PColumn<PColumnValues>[];
304
+
305
+ const linkerColumns = [{id: 'id5' as PObjectId, spec: linkerColumn13, data: []}];
306
+ const linkerColumnsMap = getLinkerColumnsMap(linkerColumns);
307
+ const enrichedColumns = enrichColumnsWithCompatible(columns, upstream, linkerColumns, linkerColumnsMap);
308
+ expect(enrichedColumns.map((c) => c.id)).toEqual(['id1', 'id2', 'id3', 'id4', 'id5'])
309
+ })
310
+
311
+ test('Column added from upstream with linker columns chain', () => {
312
+ const columnSpec1: PColumnSpec = {
313
+ kind: 'PColumn',
314
+ name: 'column1',
315
+ valueType: 'Int',
316
+ axesSpec: [{type: 'String', name: 'axis1'}]
317
+ };
318
+ const metaColumnSpec1: PColumnSpec = {
319
+ kind: 'PColumn',
320
+ name: 'metadata1',
321
+ valueType: 'Int',
322
+ axesSpec: [{type: 'String', name: 'axis4'}]
323
+ };
324
+ const linkerColumn12: PColumnSpec = {
325
+ kind: 'PColumn',
326
+ name: 'linker12',
327
+ valueType: 'String',
328
+ annotations: {[LINKER_COLUMN_ANNOTATION]: 'true'},
329
+ axesSpec: [
330
+ {type: 'String', name: 'axis1'},
331
+ {type: 'String', name: 'axis2'}
332
+ ]
333
+ }
334
+ const linkerColumn23: PColumnSpec = {
335
+ kind: 'PColumn',
336
+ name: 'linker23',
337
+ valueType: 'String',
338
+ annotations: {[LINKER_COLUMN_ANNOTATION]: 'true'},
339
+ axesSpec: [
340
+ {type: 'String', name: 'axis2'},
341
+ {type: 'String', name: 'axis3'}
342
+ ]
343
+ }
344
+ const linkerColumn34: PColumnSpec = {
345
+ kind: 'PColumn',
346
+ name: 'linker34',
347
+ valueType: 'String',
348
+ annotations: {[LINKER_COLUMN_ANNOTATION]: 'true'},
349
+ axesSpec: [
350
+ {type: 'String', name: 'axis3'},
351
+ {type: 'String', name: 'axis4'}
352
+ ]
353
+ }
354
+
355
+ const columns: PColumn<TreeNodeAccessor | PColumnValues>[] = [
356
+ {id: 'id1' as PObjectId, spec: columnSpec1, data: []},
357
+ ] as PColumn<PColumnValues>[];
358
+ const upstream: PColumn<TreeNodeAccessor | PColumnValues>[] = [
359
+ {id: 'id1' as PObjectId, spec: columnSpec1, data: []},
360
+ {id: 'id2' as PObjectId, spec: metaColumnSpec1, data: []},
361
+ {id: 'id3' as PObjectId, spec: linkerColumn12, data: []},
362
+ {id: 'id4' as PObjectId, spec: linkerColumn23, data: []},
363
+ {id: 'id5' as PObjectId, spec: linkerColumn34, data: []},
364
+ ] as PColumn<PColumnValues>[];
365
+
366
+ const linkerColumns = [
367
+ {id: 'id3' as PObjectId, spec: linkerColumn12, data: []},
368
+ {id: 'id4' as PObjectId, spec: linkerColumn23, data: []},
369
+ {id: 'id5' as PObjectId, spec: linkerColumn34, data: []},
370
+ ];
371
+ const linkerColumnsMap = getLinkerColumnsMap(linkerColumns);
372
+ const enrichedColumns = enrichColumnsWithCompatible(columns, upstream, linkerColumns, linkerColumnsMap);
373
+ expect(enrichedColumns.map((c) => c.id)).toEqual(['id1', 'id2', 'id3', 'id4', 'id5'])
374
+ })
253
375
  })
@@ -3,6 +3,7 @@ import type {
3
3
  CanonicalizedJson,
4
4
  DataInfo,
5
5
  PColumn,
6
+ PColumnIdAndSpec,
6
7
  PColumnSpec,
7
8
  PColumnSpecId,
8
9
  PColumnValues,
@@ -15,6 +16,7 @@ import {
15
16
  getPColumnSpecId,
16
17
  isPColumn,
17
18
  matchAxisId,
19
+ parseJson,
18
20
  } from '@milaboratories/pl-model-common';
19
21
  import type { RenderCtx } from '../render';
20
22
  import { TreeNodeAccessor } from '../render';
@@ -49,43 +51,103 @@ function getKeysCombinations(idsLists: AxisId[][]) {
49
51
  return result;
50
52
  }
51
53
 
54
+ /** Check if column is a linker column */
55
+ export function isLinkerColumn(column: PColumnSpec) {
56
+ return column.axesSpec.length === 2 && column.annotations?.[LINKER_COLUMN_ANNOTATION] === 'true';
57
+ }
58
+
59
+ export type LinkerColumnsMap = Map<CanonicalizedJson<AxisId>, Map<CanonicalizedJson<AxisId>, PColumnIdAndSpec>>;
60
+ export function getLinkerColumnsMap(linkerColumns: PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>[]) {
61
+ const resultMap: LinkerColumnsMap = new Map();
62
+ for (const { id, spec } of linkerColumns) {
63
+ const [idA, idB] = spec.axesSpec.map(getAxisId).map(canonicalizeJson);
64
+ if (!resultMap.has(idA)) {
65
+ resultMap.set(idA, new Map());
66
+ }
67
+ if (!resultMap.has(idB)) {
68
+ resultMap.set(idB, new Map());
69
+ }
70
+ resultMap.get(idA)?.set(idB, { columnId: id, spec })
71
+ resultMap.get(idB)?.set(idA, { columnId: id, spec })
72
+ }
73
+ return resultMap;
74
+ }
75
+
76
+ export function hasPathWithLinkerColumns(
77
+ linkerColumnsMap: LinkerColumnsMap,
78
+ startId: AxisId,
79
+ endId: AxisId,
80
+ ): boolean {
81
+ const linkerColumnsMapIds = [...linkerColumnsMap.keys()].map(parseJson);
82
+ const startIdMatched = linkerColumnsMapIds.find((id) => matchAxisId(startId, id));
83
+ if (!startIdMatched) return false;
84
+
85
+ const startKey = canonicalizeJson(getAxisId(startIdMatched));
86
+ const visited = new Set([startKey]);
87
+ let nextKeys = [startKey];
88
+
89
+ while (nextKeys.length) {
90
+ const next: CanonicalizedJson<AxisId>[] = [];
91
+ for (const nextKey of nextKeys) {
92
+ for (const availableKey of linkerColumnsMap.get(nextKey)?.keys() ?? []) {
93
+ const availableId = parseJson(availableKey);
94
+ if (matchAxisId(endId, availableId)) return true;
95
+ if (!visited.has(availableKey)) {
96
+ next.push(availableKey);
97
+ visited.add(availableKey);
98
+ }
99
+ }
100
+ }
101
+ nextKeys = next;
102
+ }
103
+ return false;
104
+ }
105
+
52
106
  /** Check if axes of secondary column are exactly in axes of main column */
53
107
  function checkFullCompatibility(
54
108
  mainColumn: PColumnSpec,
55
109
  secondaryColumn: PColumnSpec,
110
+ linkerColumnsMap?: LinkerColumnsMap,
56
111
  ): boolean {
57
112
  const mainAxesIds = mainColumn.axesSpec.map(getAxisId);
58
113
  const secondaryAxesIds = secondaryColumn.axesSpec.map(getAxisId);
59
- return secondaryAxesIds.every((id) => mainAxesIds.some((mainId) => matchAxisId(mainId, id) && matchAxisId(id, mainId)));
114
+ // with fixed axes (sliced columns) in data-mapping there is enough to have only one axis in intersection
115
+ return secondaryAxesIds.some((id) => mainAxesIds.some((mainId) => matchAxisId(mainId, id) && matchAxisId(id, mainId)))
116
+ || (!!linkerColumnsMap && secondaryAxesIds.some((id) => mainAxesIds.some((mainId) => hasPathWithLinkerColumns(linkerColumnsMap, mainId, id))));
60
117
  }
61
118
 
62
119
  /** Check if axes of secondary column are in axes of main column, but they can have compatible difference in domains */
63
120
  function checkCompatibility(
64
121
  mainColumn: PColumnSpec,
65
122
  secondaryColumn: PColumnSpec,
123
+ linkerColumnsMap?: LinkerColumnsMap,
66
124
  ): boolean {
67
125
  const mainAxesIds = mainColumn.axesSpec.map(getAxisId);
68
126
  const secondaryAxesIds = secondaryColumn.axesSpec.map(getAxisId);
69
- return secondaryAxesIds.every((id) => mainAxesIds.some((mainId) => matchAxisId(mainId, id)));
127
+ // with fixed axes (sliced columns) in data-mapping there is enough to have only one axis in intersection
128
+ return secondaryAxesIds.some((id) => mainAxesIds.some((mainId) => matchAxisId(mainId, id)))
129
+ || (!!linkerColumnsMap && secondaryAxesIds.some((id) => mainAxesIds.some((mainId) => hasPathWithLinkerColumns(linkerColumnsMap, mainId, id))));
70
130
  }
71
131
 
72
132
  export const IS_VIRTUAL_COLUMN = 'pl7.app/graph/isVirtual'; // annotation for column duplicates with extended domains
73
133
  export const LABEL_ANNOTATION = 'pl7.app/label';
134
+ export const LINKER_COLUMN_ANNOTATION = 'pl7.app/isLinkerColumn';
74
135
 
75
136
  /** Main column can have additional domains, if secondary column (meta-column) has all axes match main column axes
76
137
  we can add its copy with missed domain fields for compatibility */
77
138
  function getAdditionalColumnsForPair(
78
139
  mainColumn: PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>,
79
140
  secondaryColumn: PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>,
141
+ linkerColumnsMap?: LinkerColumnsMap,
80
142
  ): PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>[] {
81
143
  const mainAxesIds = mainColumn.spec.axesSpec.map(getAxisId);
82
144
  const secondaryAxesIds = secondaryColumn.spec.axesSpec.map(getAxisId);
83
145
 
84
- const isFullCompatible = checkFullCompatibility(mainColumn.spec, secondaryColumn.spec);
146
+ const isFullCompatible = checkFullCompatibility(mainColumn.spec, secondaryColumn.spec, linkerColumnsMap);
85
147
  if (isFullCompatible) { // in this case it isn't necessary to add more columns
86
148
  return [];
87
149
  }
88
- const isCompatible = checkCompatibility(mainColumn.spec, secondaryColumn.spec);
150
+ const isCompatible = checkCompatibility(mainColumn.spec, secondaryColumn.spec, linkerColumnsMap);
89
151
  if (!isCompatible) { // in this case it is impossible to add some compatible column
90
152
  return [];
91
153
  }
@@ -159,6 +221,7 @@ function getAdditionalColumnsForPair(
159
221
 
160
222
  export function getAdditionalColumns(
161
223
  columns: PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>[],
224
+ linkerColumnsMap: LinkerColumnsMap = new Map(),
162
225
  ): PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>[] {
163
226
  const additionalColumns: PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>[] = [];
164
227
  for (let i = 0; i < columns.length; i++) {
@@ -168,8 +231,8 @@ export function getAdditionalColumns(
168
231
 
169
232
  // check if column 1 is meta for column 2 or backward
170
233
  additionalColumns.push(
171
- ...getAdditionalColumnsForPair(column1, column2),
172
- ...getAdditionalColumnsForPair(column2, column1),
234
+ ...getAdditionalColumnsForPair(column1, column2, linkerColumnsMap),
235
+ ...getAdditionalColumnsForPair(column2, column1, linkerColumnsMap),
173
236
  );
174
237
  }
175
238
  }
@@ -179,6 +242,8 @@ export function getAdditionalColumns(
179
242
  export function enrichColumnsWithCompatible(
180
243
  mainColumns: PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>[],
181
244
  secondaryColumns: PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>[],
245
+ linkerColumns: PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>[] = [],
246
+ linkerColumnsMap: LinkerColumnsMap = new Map(),
182
247
  ): PColumn<TreeNodeAccessor | DataInfo<TreeNodeAccessor> | PColumnValues>[] {
183
248
  const mainColumnsIds = new Set<PObjectId>();
184
249
  const mainColumnsBySpec = new Map<CanonicalizedJson<PColumnSpecId>, typeof mainColumns[number]>();
@@ -195,13 +260,24 @@ export function enrichColumnsWithCompatible(
195
260
  if (mainColumnsBySpec.has(spec)) continue;
196
261
 
197
262
  for (const mainColumn of mainColumnsBySpec.values()) {
198
- if (checkCompatibility(mainColumn.spec, secondaryColumn.spec)) {
263
+ if (checkCompatibility(mainColumn.spec, secondaryColumn.spec, linkerColumnsMap)) {
199
264
  secondaryColumnsBySpec.set(spec, secondaryColumn);
200
265
  break;
201
266
  }
202
267
  }
203
268
  }
204
269
 
270
+ for (const linkerColumn of linkerColumns) {
271
+ if (mainColumnsIds.has(linkerColumn.id)) continue;
272
+
273
+ const spec = canonicalizeJson(getPColumnSpecId(linkerColumn.spec));
274
+ if (mainColumnsBySpec.has(spec)) continue;
275
+ if (secondaryColumnsBySpec.has(spec)) continue;
276
+
277
+ mainColumnsIds.add(linkerColumn.id);
278
+ mainColumnsBySpec.set(spec, linkerColumn);
279
+ }
280
+
205
281
  return [...mainColumnsBySpec.values(), ...secondaryColumnsBySpec.values()];
206
282
  }
207
283
 
@@ -216,10 +292,15 @@ export function createPFrameForGraphs<A, U>(
216
292
  .entries.map((v) => v.obj)
217
293
  .filter(isPColumn);
218
294
 
219
- const columnsWithCompatibleFromUpstream = enrichColumnsWithCompatible(blockColumns, upstreamColumns);
295
+ const allAvailableColumns = [...blockColumns, ...upstreamColumns];
296
+ // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden
297
+ const linkerColumns = allAvailableColumns.filter((col) => isLinkerColumn(col.spec));
298
+
299
+ const linkerColumnsMap = getLinkerColumnsMap(linkerColumns);
300
+ const columnsWithCompatibleFromUpstream = enrichColumnsWithCompatible(blockColumns, upstreamColumns, linkerColumns, linkerColumnsMap);
220
301
 
221
302
  // additional columns are duplicates with extra fields in domains for compatibility in all possible pairs of columns set
222
- const extendedColumns = [...columnsWithCompatibleFromUpstream, ...getAdditionalColumns(columnsWithCompatibleFromUpstream)];
303
+ const extendedColumns = [...columnsWithCompatibleFromUpstream, ...getAdditionalColumns(columnsWithCompatibleFromUpstream, linkerColumnsMap)];
223
304
 
224
305
  // if at least one column is not yet ready, we can't show the table
225
306
  if (
package/src/render/api.ts CHANGED
@@ -626,6 +626,18 @@ export class RenderCtx<Args, UiState> {
626
626
  public getCurrentUnstableMarker(): string | undefined {
627
627
  return this.ctx.getCurrentUnstableMarker();
628
628
  }
629
+
630
+ public logInfo(msg: string): void {
631
+ this.ctx.logInfo(msg);
632
+ }
633
+
634
+ public logWarn(msg: string): void {
635
+ this.ctx.logWarn(msg);
636
+ }
637
+
638
+ public logError(msg: string): void {
639
+ this.ctx.logError(msg);
640
+ }
629
641
  }
630
642
 
631
643
  export type RenderFunction<Args = unknown, UiState = unknown, Ret = unknown> = (
@@ -151,6 +151,16 @@ export interface GlobalCfgRenderCtxMethods<AHandle = AccessorHandle, FHandle = F
151
151
  //
152
152
 
153
153
  getCurrentUnstableMarker(): string | undefined;
154
+
155
+ //
156
+ // Logging
157
+ //
158
+
159
+ logInfo(message: string): void;
160
+
161
+ logWarn(message: string): void;
162
+
163
+ logError(message: string): void;
154
164
  }
155
165
 
156
166
  export const GlobalCfgRenderCtxFeatureFlags = {