@platforma-sdk/model 1.23.0 → 1.24.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.
- package/dist/components/PFrameForGraphs.d.ts +1 -0
- package/dist/components/PFrameForGraphs.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +372 -348
- package/dist/index.mjs.map +1 -1
- package/dist/render/api.d.ts +9 -8
- package/dist/render/api.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/components/PFrameForGraphs.test.ts +33 -1
- package/src/components/PFrameForGraphs.ts +47 -5
- package/src/render/api.ts +13 -11
package/dist/render/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { APColumnSelector, AxisId, Option, PColumn, PColumnSelector, PColumnSpec, PColumnValues, PFrameDef, PFrameHandle, PObject, PObjectSpec, PSpecPredicate, PTableDef, PTableHandle, PTableRecordFilter, PTableSorting, PlRef, ResultCollection, ValueOrError, AnchorIdDeriver } from '@milaboratories/pl-model-common';
|
|
1
|
+
import { APColumnSelector, AxisId, CanonicalPColumnId, Option, PColumn, PColumnSelector, PColumnSpec, PColumnValues, PFrameDef, PFrameHandle, PObject, PObjectSpec, PSpecPredicate, PTableDef, PTableHandle, PTableRecordFilter, PTableSorting, PlRef, ResultCollection, ValueOrError, AnchorIdDeriver } from '@milaboratories/pl-model-common';
|
|
2
2
|
import { Optional } from 'utility-types';
|
|
3
3
|
import { TreeNodeAccessor } from './accessor';
|
|
4
4
|
import { FutureRef } from './future';
|
|
@@ -12,7 +12,8 @@ export declare class ResultPool {
|
|
|
12
12
|
private defaultLabelFn;
|
|
13
13
|
getOptions(predicateOrSelector: ((spec: PObjectSpec) => boolean) | PColumnSelector | PColumnSelector[], label?: ((spec: PObjectSpec, ref: PlRef) => string) | LabelDerivationOps): Option[];
|
|
14
14
|
/**
|
|
15
|
-
* Calculates anchored identifier options for columns matching a given predicate
|
|
15
|
+
* Calculates anchored identifier options for columns matching a given predicate and returns their
|
|
16
|
+
* canonicalized representations.
|
|
16
17
|
*
|
|
17
18
|
* This function filters column specifications from the result pool that match the provided predicate,
|
|
18
19
|
* creates a standardized AnchorCtx from the provided anchors, and generates a list of label-value
|
|
@@ -36,17 +37,17 @@ export declare class ResultPool {
|
|
|
36
37
|
* @returns An array of objects with `label` (display text) and `value` (anchored ID string) properties,
|
|
37
38
|
* or undefined if any PlRef resolution fails.
|
|
38
39
|
*/
|
|
39
|
-
|
|
40
|
+
getCanonicalOptions(anchorsOrCtx: AnchorIdDeriver, predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelector | APColumnSelector[], labelOps?: LabelDerivationOps): {
|
|
40
41
|
label: string;
|
|
41
|
-
value:
|
|
42
|
+
value: CanonicalPColumnId;
|
|
42
43
|
}[];
|
|
43
|
-
|
|
44
|
+
getCanonicalOptions(anchorsOrCtx: Record<string, PColumnSpec>, predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelector | APColumnSelector[], labelOps?: LabelDerivationOps): {
|
|
44
45
|
label: string;
|
|
45
|
-
value:
|
|
46
|
+
value: CanonicalPColumnId;
|
|
46
47
|
}[];
|
|
47
|
-
|
|
48
|
+
getCanonicalOptions(anchorsOrCtx: Record<string, PColumnSpec | PlRef>, predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelector | APColumnSelector[], labelOps?: LabelDerivationOps): {
|
|
48
49
|
label: string;
|
|
49
|
-
value:
|
|
50
|
+
value: CanonicalPColumnId;
|
|
50
51
|
}[] | undefined;
|
|
51
52
|
/**
|
|
52
53
|
* @deprecated use getData()
|
package/dist/render/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/render/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,MAAM,EACN,MAAM,EACN,OAAO,EACP,eAAe,EACf,WAAW,EACX,aAAa,EACb,SAAS,EACT,YAAY,EACZ,OAAO,EACP,WAAW,EACX,cAAc,EACd,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACxD,OAAO,EACL,eAAe,EACC,MAAM,iCAAiC,CAAC;AAY1D,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,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyC;IAE7D;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,EAAE;IAI5D,OAAO,CAAC,cAAc,CACgC;IAE/C,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;IAiBX
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/render/api.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PlatformaSDKVersion = "1.
|
|
1
|
+
export declare const PlatformaSDKVersion = "1.24.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-sdk/model",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.24.0",
|
|
4
4
|
"description": "Platforma.bio SDK / Block Model",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"utility-types": "^3.11.0",
|
|
22
22
|
"zod": "~3.23.8",
|
|
23
|
-
"@milaboratories/pl-model-common": "^1.11.
|
|
23
|
+
"@milaboratories/pl-model-common": "^1.11.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"typescript": "~5.5.4",
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import {test, expect, describe} from '@jest/globals';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
enrichColumnsWithCompatible,
|
|
4
|
+
getAdditionalColumns,
|
|
5
|
+
IS_VIRTUAL_COLUMN,
|
|
6
|
+
LABEL_ANNOTATION
|
|
7
|
+
} from './PFrameForGraphs';
|
|
3
8
|
import {PColumn, PColumnSpec, PColumnValues, PObjectId} from "@milaboratories/pl-model-common";
|
|
4
9
|
import {TreeNodeAccessor} from "../render";
|
|
5
10
|
|
|
@@ -181,4 +186,31 @@ describe('PFrameForGraph', () => {
|
|
|
181
186
|
const enrichedColumns = enrichColumnsWithCompatible(columns, upstream);
|
|
182
187
|
expect(enrichedColumns.map((c) => c.id)).toEqual(['id1', 'id2', 'id3'])
|
|
183
188
|
})
|
|
189
|
+
|
|
190
|
+
test('Labels of added columns include added domains, but not include common domains', () => {
|
|
191
|
+
const columnSpec1: PColumnSpec = {
|
|
192
|
+
kind: 'PColumn',
|
|
193
|
+
name: 'column1',
|
|
194
|
+
valueType: 'Int',
|
|
195
|
+
axesSpec: [
|
|
196
|
+
{type: 'String', name: 'axis1', domain: {key0: 'commonDomain', key1: 'a', key2: 'c'}},
|
|
197
|
+
{type: 'String', name: 'axis1', domain: {key0: 'commonDomain', key1: 'b', key2: 'c'}},
|
|
198
|
+
]
|
|
199
|
+
}
|
|
200
|
+
const columnSpec2: PColumnSpec = {
|
|
201
|
+
kind: 'PColumn',
|
|
202
|
+
name: 'column2',
|
|
203
|
+
valueType: 'Int',
|
|
204
|
+
annotations: {[LABEL_ANNOTATION]: 'Label of column2'},
|
|
205
|
+
axesSpec: [{type: 'String', name: 'axis1', domain: {key0: 'commonDomain'}}]
|
|
206
|
+
}
|
|
207
|
+
const columns: PColumn<TreeNodeAccessor | PColumnValues>[] = [
|
|
208
|
+
{id: 'id1' as PObjectId, spec: columnSpec1, data: []},
|
|
209
|
+
{id: 'id2' as PObjectId, spec: columnSpec2, data: []}
|
|
210
|
+
] as PColumn<PColumnValues>[]
|
|
211
|
+
|
|
212
|
+
const additionalColumns = getAdditionalColumns(columns);
|
|
213
|
+
expect(additionalColumns[0].spec.annotations?.[LABEL_ANNOTATION]).toEqual('Label of column2 / a');
|
|
214
|
+
expect(additionalColumns[1].spec.annotations?.[LABEL_ANNOTATION]).toEqual('Label of column2 / b');
|
|
215
|
+
})
|
|
184
216
|
})
|
|
@@ -62,6 +62,7 @@ function checkCompatibility(
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
export const IS_VIRTUAL_COLUMN = 'pl7.app/graph/isVirtual'; // annotation for column duplicates with extended domains
|
|
65
|
+
export const LABEL_ANNOTATION = 'pl7.app/label';
|
|
65
66
|
|
|
66
67
|
/** Main column can have additional domains, if secondary column (meta-column) has all axes match main column axes
|
|
67
68
|
we can add its copy with missed domain fields for compatibility */
|
|
@@ -87,8 +88,52 @@ function getAdditionalColumnsForPair(
|
|
|
87
88
|
// all possible combinations of axes with added domains
|
|
88
89
|
const secondaryIdsVariants = getKeysCombinations(secondaryIdsOptions);
|
|
89
90
|
|
|
90
|
-
|
|
91
|
+
// sets of added to column domain fields
|
|
92
|
+
const allAddedDomainValues = new Set<string>();
|
|
93
|
+
const addedNotToAllVariantsDomainValues = new Set<string>();
|
|
94
|
+
const addedByVariantsDomainValues = secondaryIdsVariants.map(idsList => {
|
|
95
|
+
const addedSet = new Set<string>();
|
|
96
|
+
idsList.map((axisId, idx) => {
|
|
97
|
+
const d1 = secondaryColumn.spec.axesSpec[idx].domain;
|
|
98
|
+
const d2 = axisId.domain;
|
|
99
|
+
Object.entries(d2 ?? {}).forEach(([key, value]) => {
|
|
100
|
+
if (d1?.[key] === undefined) {
|
|
101
|
+
const item = JSON.stringify([key, value]);
|
|
102
|
+
addedSet.add(item);
|
|
103
|
+
allAddedDomainValues.add(item);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
return ({
|
|
107
|
+
...axisId,
|
|
108
|
+
annotations: secondaryColumn.spec.axesSpec[idx].annotations
|
|
109
|
+
})
|
|
110
|
+
});
|
|
111
|
+
return addedSet;
|
|
112
|
+
});
|
|
113
|
+
[...allAddedDomainValues].forEach(addedPart => {
|
|
114
|
+
if (addedByVariantsDomainValues.some(s => !s.has(addedPart))) {
|
|
115
|
+
addedNotToAllVariantsDomainValues.add(addedPart);
|
|
116
|
+
}
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
return secondaryIdsVariants.map((idsList, idx) => {
|
|
91
120
|
const id = colId(secondaryColumn.id, idsList.map(id => id.domain));
|
|
121
|
+
|
|
122
|
+
const label = secondaryColumn.spec.annotations?.[LABEL_ANNOTATION] ?? '';
|
|
123
|
+
const labelDomainPart = ([...addedByVariantsDomainValues[idx]])
|
|
124
|
+
.filter(str => addedNotToAllVariantsDomainValues.has(str))
|
|
125
|
+
.sort()
|
|
126
|
+
.map((v) => JSON.parse(v)?.[1]) // use in labels only domain values, but sort them by key to save the same order in all column variants
|
|
127
|
+
.join(' / ');
|
|
128
|
+
|
|
129
|
+
const annotations:Record<string, string> = {
|
|
130
|
+
...secondaryColumn.spec.annotations,
|
|
131
|
+
[IS_VIRTUAL_COLUMN]: 'true'
|
|
132
|
+
}
|
|
133
|
+
if (label || labelDomainPart) {
|
|
134
|
+
annotations[LABEL_ANNOTATION] = label && labelDomainPart ? label + ' / ' + labelDomainPart : label + labelDomainPart;
|
|
135
|
+
}
|
|
136
|
+
|
|
92
137
|
return {
|
|
93
138
|
id: id as PObjectId,
|
|
94
139
|
spec: {
|
|
@@ -97,10 +142,7 @@ function getAdditionalColumnsForPair(
|
|
|
97
142
|
...axisId,
|
|
98
143
|
annotations: secondaryColumn.spec.axesSpec[idx].annotations
|
|
99
144
|
})),
|
|
100
|
-
annotations
|
|
101
|
-
...secondaryColumn.spec.annotations,
|
|
102
|
-
[IS_VIRTUAL_COLUMN]: 'true'
|
|
103
|
-
}
|
|
145
|
+
annotations
|
|
104
146
|
},
|
|
105
147
|
data: secondaryColumn.data
|
|
106
148
|
};
|
package/src/render/api.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
APColumnSelector,
|
|
3
3
|
AxisId,
|
|
4
|
+
CanonicalPColumnId,
|
|
4
5
|
Option,
|
|
5
6
|
PColumn,
|
|
6
7
|
PColumnSelector,
|
|
@@ -75,7 +76,8 @@ export class ResultPool {
|
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
/**
|
|
78
|
-
* Calculates anchored identifier options for columns matching a given predicate
|
|
79
|
+
* Calculates anchored identifier options for columns matching a given predicate and returns their
|
|
80
|
+
* canonicalized representations.
|
|
79
81
|
*
|
|
80
82
|
* This function filters column specifications from the result pool that match the provided predicate,
|
|
81
83
|
* creates a standardized AnchorCtx from the provided anchors, and generates a list of label-value
|
|
@@ -100,33 +102,33 @@ export class ResultPool {
|
|
|
100
102
|
* or undefined if any PlRef resolution fails.
|
|
101
103
|
*/
|
|
102
104
|
// Overload for AnchorCtx - guaranteed to never return undefined
|
|
103
|
-
|
|
105
|
+
getCanonicalOptions(
|
|
104
106
|
anchorsOrCtx: AnchorIdDeriver,
|
|
105
107
|
predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelector | APColumnSelector[],
|
|
106
108
|
labelOps?: LabelDerivationOps,
|
|
107
|
-
): { label: string; value:
|
|
109
|
+
): { label: string; value: CanonicalPColumnId }[];
|
|
108
110
|
|
|
109
111
|
// Overload for Record<string, PColumnSpec> - guaranteed to never return undefined
|
|
110
|
-
|
|
112
|
+
getCanonicalOptions(
|
|
111
113
|
anchorsOrCtx: Record<string, PColumnSpec>,
|
|
112
114
|
predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelector | APColumnSelector[],
|
|
113
115
|
labelOps?: LabelDerivationOps,
|
|
114
|
-
): { label: string; value:
|
|
116
|
+
): { label: string; value: CanonicalPColumnId }[];
|
|
115
117
|
|
|
116
118
|
// Overload for Record<string, PColumnSpec | PlRef> - may return undefined if PlRef resolution fails
|
|
117
|
-
|
|
119
|
+
getCanonicalOptions(
|
|
118
120
|
anchorsOrCtx: Record<string, PColumnSpec | PlRef>,
|
|
119
121
|
predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelector | APColumnSelector[],
|
|
120
122
|
labelOps?: LabelDerivationOps,
|
|
121
|
-
): { label: string; value:
|
|
123
|
+
): { label: string; value: CanonicalPColumnId }[] | undefined;
|
|
122
124
|
|
|
123
125
|
// Implementation
|
|
124
|
-
|
|
126
|
+
getCanonicalOptions(
|
|
125
127
|
anchorsOrCtx: AnchorIdDeriver | Record<string, PColumnSpec | PlRef>,
|
|
126
128
|
predicateOrSelectors: ((spec: PColumnSpec) => boolean) | APColumnSelector | APColumnSelector[],
|
|
127
129
|
labelOps?: LabelDerivationOps,
|
|
128
|
-
): { label: string; value:
|
|
129
|
-
|
|
130
|
+
): { label: string; value: CanonicalPColumnId }[] | undefined {
|
|
131
|
+
// Handle PlRef objects by resolving them to PColumnSpec
|
|
130
132
|
const resolvedAnchors: Record<string, PColumnSpec> = {};
|
|
131
133
|
|
|
132
134
|
if (!(anchorsOrCtx instanceof AnchorIdDeriver)) {
|
|
@@ -160,7 +162,7 @@ export class ResultPool {
|
|
|
160
162
|
: new AnchorIdDeriver(resolvedAnchors);
|
|
161
163
|
|
|
162
164
|
return deriveLabels(filtered, (o) => o.obj, labelOps ?? {}).map(({ value: { obj: spec }, label }) => ({
|
|
163
|
-
value: anchorIdDeriver.
|
|
165
|
+
value: anchorIdDeriver.deriveCanonical(spec as PColumnSpec),
|
|
164
166
|
label,
|
|
165
167
|
}));
|
|
166
168
|
}
|