@milaboratories/graph-maker 1.1.158 → 1.1.161

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.
@@ -1,25 +1,25 @@
1
- import { AxisId as w, isColumnId as C, ColumnId as S } from "../spec.js";
2
- import I from "../_virtual/lodash.js";
1
+ import { AxisId as g, isColumnId as D, ColumnId as I } from "../spec.js";
2
+ import E from "../_virtual/lodash.js";
3
3
  import "../node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
4
- import { pTableValue as $ } from "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/data_types.js";
4
+ import { pTableValue as M } from "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/data_types.js";
5
5
  import "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
6
6
  import "../_virtual/canonicalize.js";
7
7
  import "../node_modules/@milaboratories/pl-model-common/dist/plid.js";
8
8
  import "../node_modules/@milaboratories/pl-model-common/dist/ref.js";
9
- import { IS_DENSE_AXIS as b, TREAT_ABSENT_VALUE_AS as F } from "../constants.js";
10
- var H = Object.defineProperty, B = (h, e, t) => e in h ? H(h, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : h[e] = t, P = (h, e, t) => B(h, typeof e != "symbol" ? e + "" : e, t);
11
- const q = 1e6;
12
- function x(h, e, t = null) {
13
- if (h === "String")
9
+ import { IS_DENSE_AXIS as T, TREAT_ABSENT_VALUE_AS as V } from "../constants.js";
10
+ var N = Object.defineProperty, R = (S, e, t) => e in S ? N(S, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : S[e] = t, H = (S, e, t) => R(S, typeof e != "symbol" ? e + "" : e, t);
11
+ const B = 1e6;
12
+ function A(S, e, t = null) {
13
+ if (S === "String")
14
14
  return e.data;
15
15
  const a = new Array(e.data.length);
16
- for (let r = 0; r < e.data.length; r++)
17
- a[r] = $(e, r, { absent: t, na: null });
16
+ for (let n = 0; n < e.data.length; n++)
17
+ a[n] = M(e, n, { absent: t, na: null });
18
18
  return a;
19
19
  }
20
20
  class G {
21
21
  constructor(e, t) {
22
- P(this, "pframeHandle"), P(this, "pframeDriver"), this.pframeHandle = e, this.pframeDriver = t;
22
+ H(this, "pframeHandle"), H(this, "pframeDriver"), this.pframeHandle = e, this.pframeDriver = t;
23
23
  }
24
24
  async isColumnExisted(e) {
25
25
  return !!await this.getColumnSpecById(e);
@@ -31,70 +31,70 @@ class G {
31
31
  data: []
32
32
  };
33
33
  try {
34
- const a = Date.now(), r = await this.pframeDriver.calculateTableData(this.pframeHandle, {
34
+ const a = Date.now(), n = await this.pframeDriver.calculateTableData(this.pframeHandle, {
35
35
  src: {
36
36
  type: "column",
37
37
  column: e.name
38
38
  },
39
39
  filters: t,
40
40
  sorting: []
41
- }), n = r.filter((s) => s.spec.type === "axis"), o = r.filter((s) => s.spec.type === "column");
41
+ }), r = n.filter((s) => s.spec.type === "axis"), o = n.filter((s) => s.spec.type === "column");
42
42
  return {
43
- axesData: n.reduce((s, l) => {
44
- const c = w.fromAxisSpec(l.spec.spec);
45
- return s[c.toCanonicalString()] = x(c.type, l.data), s;
43
+ axesData: r.reduce((s, u) => {
44
+ const c = g.fromAxisSpec(u.spec.spec);
45
+ return s[c.toCanonicalString()] = A(c.type, u.data), s;
46
46
  }, {}),
47
- data: o.length ? x(e.type, o[0].data) : []
47
+ data: o.length ? A(e.type, o[0].data) : []
48
48
  };
49
49
  } catch (a) {
50
50
  throw console.error("PFrame: calculateTableData error"), a;
51
51
  }
52
52
  }
53
- async getColumnUniqueValues(e, t = q, a = []) {
53
+ async getColumnUniqueValues(e, t = B, a = []) {
54
54
  if (!await this.isColumnExisted(e))
55
55
  return { values: [], overflow: !1 };
56
- const r = {
56
+ const n = {
57
57
  columnId: e.name,
58
58
  filters: a,
59
59
  limit: t
60
60
  };
61
61
  try {
62
- const n = Date.now(), o = await this.pframeDriver.getUniqueValues(this.pframeHandle, r);
62
+ const r = Date.now(), o = await this.pframeDriver.getUniqueValues(this.pframeHandle, n);
63
63
  let s = !1;
64
64
  return o.overflow && (s = !0, console.warn(`More than ${t} values for ${e.name} column`)), {
65
65
  values: Array.from(o.values.data).map(String),
66
66
  overflow: s
67
67
  };
68
- } catch (n) {
69
- throw console.error("PFrame: getUniqueValues for column error"), n;
68
+ } catch (r) {
69
+ throw console.error("PFrame: getUniqueValues for column error"), r;
70
70
  }
71
71
  }
72
- async getAxisUniqueValues(e, t, a = q, r = []) {
73
- const n = t.filter(C), o = await Promise.all(n.map((c) => this.getColumnSpecById(c))), s = e.toCanonicalString(), l = n.filter((c, i) => {
74
- const m = o[i];
75
- return m !== null && m.axesSpec.some((p) => w.fromAxisSpec(p).toCanonicalString() === s);
72
+ async getAxisUniqueValues(e, t, a = B, n = []) {
73
+ const r = t.filter(D), o = await Promise.all(r.map((c) => this.getColumnSpecById(c))), s = e.toCanonicalString(), u = r.filter((c, h) => {
74
+ const p = o[h];
75
+ return p !== null && p.axesSpec.some((f) => g.fromAxisSpec(f).toCanonicalString() === s);
76
76
  });
77
- if (l.length === 0)
77
+ if (u.length === 0)
78
78
  return console.warn("Axis unique values requested without parent columns"), { values: [], overflow: !1 };
79
79
  try {
80
- const c = Date.now(), i = await Promise.all(
81
- l.map(
82
- (p) => this.pframeDriver.getUniqueValues(this.pframeHandle, {
83
- columnId: p.name,
80
+ const c = Date.now(), h = await Promise.all(
81
+ u.map(
82
+ (f) => this.pframeDriver.getUniqueValues(this.pframeHandle, {
83
+ columnId: f.name,
84
84
  axis: e.toPFrameId(),
85
- filters: r,
85
+ filters: n,
86
86
  limit: a
87
87
  })
88
88
  )
89
89
  );
90
- let m = !1;
91
- return i.forEach((p, g) => {
92
- p.overflow && (m = !0, console.warn(`More than ${a} values for ${l[g].name} column`));
90
+ let p = !1;
91
+ return h.forEach((f, F) => {
92
+ f.overflow && (p = !0, console.warn(`More than ${a} values for ${u[F].name} column`));
93
93
  }), {
94
- values: I.uniq(
95
- I.flatten(i.map((p) => Array.from(p.values.data).map(String)))
94
+ values: E.uniq(
95
+ E.flatten(h.map((f) => Array.from(f.values.data).map(String)))
96
96
  ),
97
- overflow: m
97
+ overflow: p
98
98
  };
99
99
  } catch (c) {
100
100
  return console.error("PFrame: getUniqueValues for axis error", c), { values: [], overflow: !1 };
@@ -102,80 +102,111 @@ class G {
102
102
  }
103
103
  // Special fake columns that are created basing on some existing column marked with special annotation;
104
104
  // these columns contain all the combination of its axes by ids;
105
- async getArtificialColumns(e) {
106
- return (await Promise.all(e.map((t) => this.getColumnSpecById(t)))).reduce((t, a, r) => {
107
- if (!a)
108
- return t;
109
- const n = [];
110
- return a.axesSpec.forEach((o, s) => {
111
- var l;
112
- ((l = o.annotations) == null ? void 0 : l[b]) === "true" && n.push(s);
113
- }), n.length && t.push({
105
+ getArtificialColumns(e, t) {
106
+ return t.reduce((a, n, r) => {
107
+ if (!n)
108
+ return a;
109
+ const o = [];
110
+ return n.axesSpec.forEach((s, u) => {
111
+ var c;
112
+ ((c = s.annotations) == null ? void 0 : c[T]) === "true" && o.push(u);
113
+ }), o.length && a.push({
114
114
  type: "artificialColumn",
115
115
  column: e[r].name,
116
116
  newId: e[r].name + "1",
117
- axesIndices: n
118
- }), t;
117
+ axesIndices: o
118
+ }), a;
119
119
  }, []);
120
120
  }
121
- async getTableOuterJoin(e, t, a = [], r = !0) {
122
- const n = e.filter(C), o = t.filter(C), s = await this.getArtificialColumns(n), l = await this.getArtificialColumns(o), c = {
121
+ async getTableOuterJoin(e, t, a = [], n = !0) {
122
+ var r;
123
+ const o = e.filter(D), s = t.filter(D), u = await Promise.all(e.map((l) => this.getColumnSpecById(l))), c = await Promise.all(t.map((l) => this.getColumnSpecById(l))), h = this.getArtificialColumns(o, u), p = [], f = {}, F = new Set(u.flatMap((l) => ((l == null ? void 0 : l.axesSpec) ?? []).map((v) => g.fromAxisSpec(v).toCanonicalString())));
124
+ for (const l of a) {
125
+ if (!(l.predicate.operator === "Or" && l.column.type === "axis")) {
126
+ p.push(l);
127
+ continue;
128
+ }
129
+ const v = new g(l.column.id).toCanonicalString();
130
+ if (F.has(v))
131
+ p.push(l);
132
+ else {
133
+ const y = s.findIndex((w, i) => {
134
+ var m;
135
+ return (m = c[i]) == null ? void 0 : m.axesSpec.some((d) => g.fromAxisSpec(d).toCanonicalString() === v);
136
+ });
137
+ if (y !== -1) {
138
+ const w = s[y].name;
139
+ f[w] || (f[w] = {
140
+ type: "slicedColumn",
141
+ newId: w,
142
+ column: w,
143
+ axisFilters: []
144
+ });
145
+ const i = (r = c[y]) == null ? void 0 : r.axesSpec.findIndex((m) => g.fromAxisSpec(m).toCanonicalString() === v);
146
+ l.predicate.operands[0].operator === "Equal" && l.predicate.operands[0].reference !== void 0 && f[w].axisFilters.push({
147
+ type: "constant",
148
+ axisIndex: i ?? 0,
149
+ constant: l.predicate.operands[0].reference
150
+ });
151
+ }
152
+ }
153
+ }
154
+ const b = {
123
155
  src: {
124
156
  type: "outer",
125
157
  primary: {
126
158
  type: "full",
127
- //primaryInnerJoin ? 'inner' : 'full',
128
159
  entries: [
129
- ...n.map((i) => ({
160
+ ...o.map((l) => ({
130
161
  type: "column",
131
- column: i.name
162
+ column: l.name
132
163
  })),
133
- ...s
164
+ ...h
134
165
  ]
135
166
  },
136
- secondary: [
137
- ...o.map((i) => ({
167
+ secondary: s.map((l, v) => {
168
+ const y = f[l.name];
169
+ return y && y.axisFilters.length ? y : {
138
170
  type: "column",
139
- column: i.name
140
- })),
141
- ...l
142
- ]
171
+ column: l.name
172
+ };
173
+ })
143
174
  },
144
- filters: a,
175
+ filters: p,
145
176
  sorting: []
146
177
  };
147
178
  try {
148
- const i = Date.now(), m = await this.pframeDriver.calculateTableData(this.pframeHandle, c), p = m.filter((u) => u.spec.type === "axis"), g = m.filter((u) => u.spec.type === "column");
179
+ const l = Date.now(), v = await this.pframeDriver.calculateTableData(this.pframeHandle, b), y = v.filter((i) => i.spec.type === "axis"), w = v.filter((i) => i.spec.type === "column");
149
180
  return {
150
- axesData: p.reduce((u, f) => {
151
- const d = w.fromAxisSpec(f.spec.spec);
152
- return u[d.toCanonicalString()] = x(d.type, f.data), u;
181
+ axesData: y.reduce((i, m) => {
182
+ const d = g.fromAxisSpec(m.spec.spec);
183
+ return i[d.toCanonicalString()] = A(d.type, m.data), i;
153
184
  }, {}),
154
- columnsData: g.reduce((u, f) => {
155
- var d, y;
156
- const v = f.spec.spec, D = new S({
157
- name: f.spec.id,
158
- type: v.valueType
159
- }), E = v.axesSpec.some((V) => {
160
- var A;
161
- return ((A = V.annotations) == null ? void 0 : A[b]) === "true";
162
- }), T = (d = v.annotations) != null && d[F] ? Number((y = v.annotations) == null ? void 0 : y[F]) : E ? 0 : null;
163
- return u[D.toCanonicalString()] = x(D.type, f.data, T), u;
185
+ columnsData: w.reduce((i, m) => {
186
+ var d, C;
187
+ const x = m.spec.spec, P = new I({
188
+ name: m.spec.id,
189
+ type: x.valueType
190
+ }), $ = x.axesSpec.some((_) => {
191
+ var q;
192
+ return ((q = _.annotations) == null ? void 0 : q[T]) === "true";
193
+ }), U = (d = x.annotations) != null && d[V] ? Number((C = x.annotations) == null ? void 0 : C[V]) : $ ? 0 : null;
194
+ return i[P.toCanonicalString()] = A(P.type, m.data, U), i;
164
195
  }, {}),
165
- columnSpecs: g.reduce((u, f) => {
166
- const d = f.spec.spec, y = new S({
167
- name: f.spec.id,
196
+ columnSpecs: w.reduce((i, m) => {
197
+ const d = m.spec.spec, C = new I({
198
+ name: m.spec.id,
168
199
  type: d.valueType
169
200
  });
170
- return u[y.toCanonicalString()] = d, u;
201
+ return i[C.toCanonicalString()] = d, i;
171
202
  }, {}),
172
- axesSpecs: p.reduce((u, f) => {
173
- const d = f.spec.spec, y = w.fromAxisSpec(d);
174
- return u[y.toCanonicalString()] = d, u;
203
+ axesSpecs: y.reduce((i, m) => {
204
+ const d = m.spec.spec, C = g.fromAxisSpec(d);
205
+ return i[C.toCanonicalString()] = d, i;
175
206
  }, {})
176
207
  };
177
- } catch (i) {
178
- throw console.error("PFrame: table outer join error"), console.info("error with request: ", c), i;
208
+ } catch (l) {
209
+ throw console.error("PFrame: table outer join error"), console.info("error with request: ", b), l;
179
210
  }
180
211
  }
181
212
  async getColumnSpecById(e) {
@@ -188,66 +219,66 @@ class G {
188
219
  }
189
220
  async getColumnAxesIds(e) {
190
221
  var t;
191
- return ((t = await this.getColumnSpecById(e)) == null ? void 0 : t.axesSpec.map((a) => w.fromAxisSpec(a))) ?? [];
222
+ return ((t = await this.getColumnSpecById(e)) == null ? void 0 : t.axesSpec.map((a) => g.fromAxisSpec(a))) ?? [];
192
223
  }
193
224
  async getRequestColumnsFromSelectedSources(e) {
194
225
  var t;
195
226
  const a = [];
196
- for (const r of e)
197
- if (C(r)) {
198
- const n = ((t = await this.getColumnSpecById(r)) == null ? void 0 : t.axesSpec) ?? [];
199
- a.push(...n.map((o) => w.fromAxisSpec(o).toPFrameId()));
227
+ for (const n of e)
228
+ if (D(n)) {
229
+ const r = ((t = await this.getColumnSpecById(n)) == null ? void 0 : t.axesSpec) ?? [];
230
+ a.push(...r.map((o) => g.fromAxisSpec(o).toPFrameId()));
200
231
  }
201
232
  return a;
202
233
  }
203
234
  async getColumnsList() {
204
235
  return this.pframeDriver.listColumns(this.pframeHandle);
205
236
  }
206
- async getColumnsFull(e, t, a, r, n, o) {
237
+ async getColumnsFull(e, t, a, n, r, o) {
207
238
  try {
208
239
  const s = {
209
240
  columnFilter: {
210
241
  type: a,
211
- name: r,
212
- annotationValue: n,
213
- annotationPattern: o == null ? void 0 : o.reduce((m, p) => (m[p] = ".+", m), {})
242
+ name: n,
243
+ annotationValue: r,
244
+ annotationPattern: o == null ? void 0 : o.reduce((p, f) => (p[f] = ".+", p), {})
214
245
  },
215
246
  compatibleWith: await this.getRequestColumnsFromSelectedSources(e),
216
247
  strictlyCompatible: t
217
248
  // should be true if we want to get meta and false if X/Y
218
- }, l = Date.now(), c = await this.pframeDriver.findColumns(this.pframeHandle, s), i = [];
219
- return c.hits.forEach((m) => {
220
- i.push(m);
221
- }), i;
249
+ }, u = Date.now(), c = await this.pframeDriver.findColumns(this.pframeHandle, s), h = [];
250
+ return c.hits.forEach((p) => {
251
+ h.push(p);
252
+ }), h;
222
253
  } catch (s) {
223
254
  throw console.error("PFrame: findColumns error"), s;
224
255
  }
225
256
  }
226
- async getColumns(e, t, a, r, n) {
227
- return (await this.getColumnsFull(e, t, a, r, n)).map(
228
- (o) => new S({
257
+ async getColumns(e, t, a, n, r) {
258
+ return (await this.getColumnsFull(e, t, a, n, r)).map(
259
+ (o) => new I({
229
260
  name: o.columnId,
230
261
  type: o.spec.valueType
231
262
  })
232
263
  );
233
264
  }
234
- async findColumnBy(e, t, a, r) {
265
+ async findColumnBy(e, t, a, n) {
235
266
  try {
236
- const n = {
267
+ const r = {
237
268
  columnFilter: {
238
269
  name: [e],
239
270
  ...t ? { type: [t] } : {},
240
271
  ...a ? { annotationValue: a } : {},
241
- ...r ? { domainValue: r } : {}
272
+ ...n ? { domainValue: n } : {}
242
273
  },
243
274
  compatibleWith: [],
244
275
  strictlyCompatible: !1
245
- }, o = Date.now(), s = await this.pframeDriver.findColumns(this.pframeHandle, n), l = [];
246
- return s.hits.forEach(({ columnId: c, spec: i }) => {
247
- l.push(new S({ name: c, type: i.valueType }));
248
- }), l.length > 1 && console.warn(`More than 1 column found for ${e}}`), l.length === 0 ? (console.warn(`No columns found for ${e}}`), null) : l[0];
249
- } catch (n) {
250
- throw console.error("PFrame: findColumns error"), n;
276
+ }, o = Date.now(), s = await this.pframeDriver.findColumns(this.pframeHandle, r), u = [];
277
+ return s.hits.forEach(({ columnId: c, spec: h }) => {
278
+ u.push(new I({ name: c, type: h.valueType }));
279
+ }), u.length > 1 && console.warn(`More than 1 column found for ${e}}`), u.length === 0 ? (console.warn(`No columns found for ${e}}`), null) : u[0];
280
+ } catch (r) {
281
+ throw console.error("PFrame: findColumns error"), r;
251
282
  }
252
283
  }
253
284
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnsProvider.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/pframe/ColumnsProvider.ts"],"sourcesContent":["import { AxisId, ColumnId, isColumnId } from '../spec';\nimport type { PValue } from '../store';\nimport lodash from 'lodash';\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n FindColumnsRequest,\n FindColumnsResponse,\n PColumnSpec,\n AxisId as PFrameAxisId,\n PFrameDriver,\n PFrameHandle,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n PTableVector,\n UniqueValuesRequest,\n ValueType,\n FullPTableColumnData,\n PColumnIdAndSpec,\n ArtificialColumnJoinEntry,\n} from '@milaboratories/pl-model-common';\nimport { pTableValue } from '@milaboratories/pl-model-common';\nimport { IS_DENSE_AXIS, TREAT_ABSENT_VALUE_AS } from '../constants';\n\nexport type TableOuterJoinResult = {\n axesData: Record<string, PValue[]>;\n columnsData: Record<string, PValue[]>;\n columnSpecs: Record<string, PColumnSpec>;\n axesSpecs: Record<string, AxisSpec>;\n}\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\nfunction convertColumnData(type: ValueType, response: PTableVector, absentValue: number | null = null): PValue[] {\n if (type === 'String') {\n return response.data as PValue[];\n }\n const res: PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, { absent: absentValue, na: null }) as PValue;\n }\n return res;\n}\n\nconst debug = false;\nconst LONG_REQUEST = 100;\n\nif (debug) {\n console.log('debug!');\n}\n\nexport class ColumnsProvider {\n pframeHandle: PFrameHandle;\n pframeDriver: PFrameDriver;\n\n constructor(pframeHandle: PFrameHandle, pframeDriver: PFrameDriver) {\n this.pframeHandle = pframeHandle;\n this.pframeDriver = pframeDriver;\n }\n\n async isColumnExisted(id: ColumnId) {\n const spec = await this.getColumnSpecById(id);\n return spec ? true : false;\n }\n\n async getSingleColumnData(id: ColumnId, filters: PTableRecordSingleValueFilterV2[] = []) {\n if (!(await this.isColumnExisted(id))) {\n return {\n axesData: {},\n data: [],\n };\n }\n try {\n const start = Date.now();\n const response: FullPTableColumnData[] = await this.pframeDriver.calculateTableData(this.pframeHandle, {\n src: {\n type: 'column',\n column: id.name as PObjectId,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getSingleColumnData', time);\n }\n const axes = response.filter(item => item.spec.type === 'axis');\n const columns = response.filter(item => item.spec.type === 'column');\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = AxisId.fromAxisSpec(item.spec.spec as AxisSpec);\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(id.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error('PFrame: calculateTableData error');\n throw err;\n }\n }\n\n async getColumnUniqueValues(\n id: ColumnId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = []\n ) {\n if (!(await this.isColumnExisted(id))) {\n return { values: [], overflow: false };\n }\n const request: UniqueValuesRequest = {\n columnId: id.name as PObjectId,\n filters,\n limit,\n };\n try {\n const start = Date.now();\n const response = await this.pframeDriver.getUniqueValues(this.pframeHandle, request);\n let overflow = false;\n if (response.overflow) {\n overflow = true;\n console.warn(`More than ${limit} values for ${id.name} column`);\n }\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST)\n console.log('getColumnUniqueValues', time, id.type, `${response.values.data.length} items`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for column error');\n throw err;\n }\n }\n\n async getAxisUniqueValues(\n axisId: AxisId,\n parents: ColumnId[],\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = []\n ) {\n const columnParents = parents.filter(isColumnId);\n\n const specs: (PColumnSpec | null)[] = await Promise.all(columnParents.map(c => this.getColumnSpecById(c)));\n const axisIdStr = axisId.toCanonicalString();\n // realParents - parent columns that has axisId in its spec\n const realParents = columnParents.filter((c, idx) => {\n const columnSpec = specs[idx];\n return (\n columnSpec !== null &&\n columnSpec.axesSpec.some(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString() === axisIdStr)\n );\n });\n if (realParents.length === 0) {\n console.warn('Axis unique values requested without parent columns')\n return { values: [], overflow: false };\n }\n try {\n const start = Date.now();\n const responses = await Promise.all(\n realParents.map(p =>\n this.pframeDriver.getUniqueValues(this.pframeHandle, {\n columnId: p.name as PObjectId,\n axis: axisId.toPFrameId(),\n filters,\n limit,\n })\n )\n );\n let overflow = false;\n responses.forEach((response, idx) => {\n if (response.overflow) {\n overflow = true;\n console.warn(`More than ${limit} values for ${realParents[idx].name} column`);\n }\n })\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getAxisUniqueValues', time);\n }\n return {\n values: lodash.uniq(\n lodash.flatten(responses.map(r => {\n return Array.from(r.values.data as ArrayLike<unknown>).map(String);\n })) as string[]\n ),\n overflow\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for axis error', err);\n return { values: [], overflow: false };\n }\n }\n\n // Special fake columns that are created basing on some existing column marked with special annotation;\n // these columns contain all the combination of its axes by ids;\n async getArtificialColumns(columnIds: ColumnId[]) {\n const specs = await Promise.all(columnIds.map((id) => this.getColumnSpecById(id)));\n return specs.reduce((res, spec, idx) => {\n if (!spec) {\n return res;\n }\n const denseAxes: number[] = [];\n spec.axesSpec.forEach((axisSpec, idx) => {\n if (axisSpec.annotations?.[IS_DENSE_AXIS] === 'true') {\n denseAxes.push(idx);\n }\n });\n if (denseAxes.length) {\n res.push({\n type: 'artificialColumn',\n column: columnIds[idx].name as PObjectId,\n newId: columnIds[idx].name + '1' as PObjectId,\n axesIndices: denseAxes\n })\n }\n return res;\n }, [] as ArtificialColumnJoinEntry<PObjectId>[]);\n\n }\n async getTableOuterJoin(\n primaryIds: (ColumnId | AxisId)[],\n secondaryIds: (ColumnId | AxisId)[],\n filters: PTableRecordSingleValueFilterV2[] = [],\n primaryInnerJoin = true\n ): Promise<TableOuterJoinResult> {\n const primaryColumns = primaryIds.filter(isColumnId);\n const secondaryColumns = secondaryIds.filter(isColumnId);\n\n const primaryArtificial = await this.getArtificialColumns(primaryColumns);\n const secondaryArtificial = await this.getArtificialColumns(secondaryColumns);\n\n const request = {\n src: {\n type: 'outer',\n primary: {\n type: 'full',//primaryInnerJoin ? 'inner' : 'full',\n entries: [\n ...primaryColumns.map((item) => ({\n type: 'column',\n column: item.name as PObjectId,\n })),\n ...primaryArtificial\n ],\n },\n secondary: [\n ...secondaryColumns.map((item) => ({\n type: 'column',\n column: item.name as PObjectId,\n })),\n ...secondaryArtificial\n ],\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>;\n try {\n const start = Date.now();\n const response = await this.pframeDriver.calculateTableData(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getTableOuterJoin', time);\n }\n\n const axes = response.filter(item => item.spec.type === 'axis');\n const columns = response.filter(item => item.spec.type === 'column');\n if (debug) {\n console.log('getTableOuterJoin', `${response[0].data.data.length} items`);\n }\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = AxisId.fromAxisSpec(item.spec.spec as AxisSpec);\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n columnsData: columns.reduce((res: Record<string, PValue[]>, item) => {\n const spec = item.spec.spec as PColumnSpec;\n const id = new ColumnId({\n name: item.spec.id as PObjectId,\n type: spec.valueType,\n });\n const hasDenseAxis = spec.axesSpec.some((axisSpec) => axisSpec.annotations?.[IS_DENSE_AXIS] === 'true');\n const absentValue = spec.annotations?.[TREAT_ABSENT_VALUE_AS] ? Number(spec.annotations?.[TREAT_ABSENT_VALUE_AS]) : hasDenseAxis ? 0 : null;\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data, absentValue);\n return res;\n }, {}),\n columnSpecs: columns.reduce((res: Record<string, PColumnSpec>, item) => {\n const spec = item.spec.spec as PColumnSpec;\n const id = new ColumnId({\n name: item.spec.id as PObjectId,\n type: spec.valueType,\n });\n res[id.toCanonicalString()] = spec;\n return res;\n }, {}),\n axesSpecs: axes.reduce((res: Record<string, AxisSpec>, item) => {\n const spec = item.spec.spec as AxisSpec;\n const id = AxisId.fromAxisSpec(spec);\n res[id.toCanonicalString()] = spec;\n return res;\n }, {}),\n };\n } catch (err) {\n console.error('PFrame: table outer join error');\n console.info('error with request: ', request);\n throw err;\n }\n }\n\n async getColumnSpecById(id: ColumnId): Promise<PColumnSpec | null> {\n try {\n const start = Date.now();\n const response = await this.pframeDriver.getColumnSpec(this.pframeHandle, id.name as PObjectId);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getColumnSpecById', time, response);\n }\n return response ?? null;\n } catch (err) {\n console.error('PFrame: get single column error');\n return null;\n }\n }\n\n async getColumnAxesIds(id: ColumnId): Promise<AxisId[]> {\n return (await this.getColumnSpecById(id))?.axesSpec.map(axisSpec => AxisId.fromAxisSpec(axisSpec)) ?? [];\n }\n\n async getRequestColumnsFromSelectedSources(sources: (ColumnId | AxisId)[]): Promise<PFrameAxisId[]> {\n const result: PFrameAxisId[] = [];\n //NB: we don't need to add axes in request because axes are already in columns\n for (const item of sources) {\n if (isColumnId(item)) {\n const axesSpec = (await this.getColumnSpecById(item))?.axesSpec ?? [];\n result.push(...axesSpec.map(spec => AxisId.fromAxisSpec(spec).toPFrameId()));\n }\n }\n return result;\n }\n\n async getColumnsList() {\n return this.pframeDriver.listColumns(this.pframeHandle);\n }\n\n async getColumnsFull(\n selectedSources: (ColumnId | AxisId)[],\n strictlyCompatible: boolean,\n types?: ValueType[],\n names?: string[],\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'],\n annotationsNotEmpty?: string[]\n ): Promise<PColumnIdAndSpec[]> {\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n annotationPattern: annotationsNotEmpty?.reduce((res, v) => {\n res[v] = '.+'\n return res;\n }, {} as Record<string, string>)\n },\n compatibleWith: await this.getRequestColumnsFromSelectedSources(selectedSources),\n strictlyCompatible, // should be true if we want to get meta and false if X/Y\n };\n const start = Date.now();\n const response: FindColumnsResponse = await this.pframeDriver.findColumns(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getColumnsFull', time);\n }\n const result: PColumnIdAndSpec[] = [];\n response.hits.forEach(item => {\n // ***\n // consider mapping variants in qualifications\n // ***\n\n result.push(item);\n });\n return result;\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n }\n\n async getColumns(\n selectedSources: (ColumnId | AxisId)[],\n strictlyCompatible: boolean,\n types?: ValueType[],\n names?: string[],\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'],\n ): Promise<ColumnId[]> {\n return (await this.getColumnsFull(selectedSources, strictlyCompatible, types, names, annotations)).map(\n item =>\n new ColumnId({\n name: item.columnId,\n type: item.spec.valueType,\n })\n );\n }\n\n async findColumnBy(\n name: string,\n type?: ValueType,\n annotationValue?: FindColumnsRequest['columnFilter']['annotationValue'],\n domainValue?: FindColumnsRequest['columnFilter']['domainValue']\n ): Promise<ColumnId | null> {\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n name: [name],\n ...(type ? { type: [type] } : {}),\n ...(annotationValue ? { annotationValue } : {}),\n ...(domainValue ? { domainValue } : {}),\n },\n compatibleWith: [] as AxisId[],\n strictlyCompatible: false,\n };\n const start = Date.now();\n const response: FindColumnsResponse = await this.pframeDriver.findColumns(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('findColumnBy', time);\n }\n const result: ColumnId[] = [];\n response.hits.forEach(({ columnId, spec }) => {\n // ***\n // consider mapping variants in qualifications\n // ***\n\n result.push(new ColumnId({ name: columnId, type: spec.valueType }));\n });\n if (result.length > 1) {\n console.warn(`More than 1 column found for ${name}}`);\n }\n if (result.length === 0) {\n console.warn(`No columns found for ${name}}`);\n return null;\n }\n return result[0];\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n }\n}\n"],"names":["UNIQUE_VALUES_LIMIT","convertColumnData","type","response","absentValue","res","i","pTableValue","ColumnsProvider","pframeHandle","pframeDriver","__publicField","id","filters","start","axes","o","item","columns","AxisId","err","limit","request","overflow","axisId","parents","columnParents","isColumnId","specs","axisIdStr","realParents","idx","columnSpec","axisSpec","responses","p","lodash","r","columnIds","spec","denseAxes","_a","IS_DENSE_AXIS","primaryIds","secondaryIds","primaryInnerJoin","primaryColumns","secondaryColumns","primaryArtificial","secondaryArtificial","ColumnId","hasDenseAxis","TREAT_ABSENT_VALUE_AS","_b","sources","result","axesSpec","selectedSources","strictlyCompatible","types","names","annotations","annotationsNotEmpty","v","name","annotationValue","domainValue","columnId"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ColumnsProvider.js","sources":["../../../../../../node_modules/@milaboratories/pf-plots/src/pframe/ColumnsProvider.ts"],"sourcesContent":["import { AxisId, ColumnId, isColumnId } from '../spec';\nimport type { PValue } from '../store';\nimport lodash from 'lodash';\nimport type {\n AxisSpec,\n CalculateTableDataRequest,\n FindColumnsRequest,\n FindColumnsResponse,\n PColumnSpec,\n AxisId as PFrameAxisId,\n PFrameDriver,\n PFrameHandle,\n PObjectId,\n PTableRecordSingleValueFilterV2,\n PTableVector,\n UniqueValuesRequest,\n ValueType,\n FullPTableColumnData,\n PColumnIdAndSpec,\n ArtificialColumnJoinEntry,\n SlicedColumnJoinEntry,\n} from '@milaboratories/pl-model-common';\nimport { pTableValue } from '@milaboratories/pl-model-common';\nimport { IS_DENSE_AXIS, TREAT_ABSENT_VALUE_AS } from '../constants';\n\nexport type TableOuterJoinResult = {\n axesData: Record<string, PValue[]>;\n columnsData: Record<string, PValue[]>;\n columnSpecs: Record<string, PColumnSpec>;\n axesSpecs: Record<string, AxisSpec>;\n}\nconst UNIQUE_VALUES_LIMIT = 1000000;\n\nfunction convertColumnData(type: ValueType, response: PTableVector, absentValue: number | null = null): PValue[] {\n if (type === 'String') {\n return response.data as PValue[];\n }\n const res: PValue[] = new Array(response.data.length);\n for (let i = 0; i < response.data.length; i++) {\n res[i] = pTableValue(response, i, { absent: absentValue, na: null }) as PValue;\n }\n return res;\n}\n\nconst debug = false;\nconst LONG_REQUEST = 100;\n\nif (debug) {\n console.log('debug!');\n}\n\nexport class ColumnsProvider {\n pframeHandle: PFrameHandle;\n pframeDriver: PFrameDriver;\n\n constructor(pframeHandle: PFrameHandle, pframeDriver: PFrameDriver) {\n this.pframeHandle = pframeHandle;\n this.pframeDriver = pframeDriver;\n }\n\n async isColumnExisted(id: ColumnId) {\n const spec = await this.getColumnSpecById(id);\n return spec ? true : false;\n }\n\n async getSingleColumnData(id: ColumnId, filters: PTableRecordSingleValueFilterV2[] = []) {\n if (!(await this.isColumnExisted(id))) {\n return {\n axesData: {},\n data: [],\n };\n }\n try {\n const start = Date.now();\n const response: FullPTableColumnData[] = await this.pframeDriver.calculateTableData(this.pframeHandle, {\n src: {\n type: 'column',\n column: id.name as PObjectId,\n },\n filters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getSingleColumnData', time);\n }\n const axes = response.filter(item => item.spec.type === 'axis');\n const columns = response.filter(item => item.spec.type === 'column');\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = AxisId.fromAxisSpec(item.spec.spec as AxisSpec);\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n data: columns.length ? convertColumnData(id.type, columns[0].data) : [],\n };\n } catch (err) {\n console.error('PFrame: calculateTableData error');\n throw err;\n }\n }\n\n async getColumnUniqueValues(\n id: ColumnId,\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = []\n ) {\n if (!(await this.isColumnExisted(id))) {\n return { values: [], overflow: false };\n }\n const request: UniqueValuesRequest = {\n columnId: id.name as PObjectId,\n filters,\n limit,\n };\n try {\n const start = Date.now();\n const response = await this.pframeDriver.getUniqueValues(this.pframeHandle, request);\n let overflow = false;\n if (response.overflow) {\n overflow = true;\n console.warn(`More than ${limit} values for ${id.name} column`);\n }\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST)\n console.log('getColumnUniqueValues', time, id.type, `${response.values.data.length} items`);\n }\n return {\n values: Array.from(response.values.data as ArrayLike<unknown>).map(String),\n overflow\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for column error');\n throw err;\n }\n }\n\n async getAxisUniqueValues(\n axisId: AxisId,\n parents: ColumnId[],\n limit = UNIQUE_VALUES_LIMIT,\n filters: PTableRecordSingleValueFilterV2[] = []\n ) {\n const columnParents = parents.filter(isColumnId);\n\n const specs: (PColumnSpec | null)[] = await Promise.all(columnParents.map(c => this.getColumnSpecById(c)));\n const axisIdStr = axisId.toCanonicalString();\n // realParents - parent columns that has axisId in its spec\n const realParents = columnParents.filter((c, idx) => {\n const columnSpec = specs[idx];\n return (\n columnSpec !== null &&\n columnSpec.axesSpec.some(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString() === axisIdStr)\n );\n });\n if (realParents.length === 0) {\n console.warn('Axis unique values requested without parent columns')\n return { values: [], overflow: false };\n }\n try {\n const start = Date.now();\n const responses = await Promise.all(\n realParents.map(p =>\n this.pframeDriver.getUniqueValues(this.pframeHandle, {\n columnId: p.name as PObjectId,\n axis: axisId.toPFrameId(),\n filters,\n limit,\n })\n )\n );\n let overflow = false;\n responses.forEach((response, idx) => {\n if (response.overflow) {\n overflow = true;\n console.warn(`More than ${limit} values for ${realParents[idx].name} column`);\n }\n })\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getAxisUniqueValues', time);\n }\n return {\n values: lodash.uniq(\n lodash.flatten(responses.map(r => {\n return Array.from(r.values.data as ArrayLike<unknown>).map(String);\n })) as string[]\n ),\n overflow\n };\n } catch (err) {\n console.error('PFrame: getUniqueValues for axis error', err);\n return { values: [], overflow: false };\n }\n }\n\n // Special fake columns that are created basing on some existing column marked with special annotation;\n // these columns contain all the combination of its axes by ids;\n getArtificialColumns(columnIds: ColumnId[], specs: (PColumnSpec | null)[]) {\n return specs.reduce((res, spec, idx) => {\n if (!spec) {\n return res;\n }\n const denseAxes: number[] = [];\n spec.axesSpec.forEach((axisSpec, idx) => {\n if (axisSpec.annotations?.[IS_DENSE_AXIS] === 'true') {\n denseAxes.push(idx);\n }\n });\n if (denseAxes.length) {\n res.push({\n type: 'artificialColumn',\n column: columnIds[idx].name as PObjectId,\n newId: columnIds[idx].name + '1' as PObjectId,\n axesIndices: denseAxes\n })\n }\n return res;\n }, [] as ArtificialColumnJoinEntry<PObjectId>[]);\n\n }\n async getTableOuterJoin(\n primaryIds: (ColumnId | AxisId)[],\n secondaryIds: (ColumnId | AxisId)[],\n filters: PTableRecordSingleValueFilterV2[] = [],\n primaryInnerJoin = true\n ): Promise<TableOuterJoinResult> {\n const primaryColumns = primaryIds.filter(isColumnId);\n const secondaryColumns = secondaryIds.filter(isColumnId);\n\n const primarySpecs = await Promise.all(primaryIds.map((id) => this.getColumnSpecById(id)));\n const secondarySpecs = await Promise.all(secondaryIds.map((id) => this.getColumnSpecById(id)));\n\n const primaryArtificial = this.getArtificialColumns(primaryColumns, primarySpecs);\n\n const regularFilters: PTableRecordSingleValueFilterV2[] = [];\n\n // if we have \"fixed axis\" in filters, we should use this filter as \"sliced column\"\n const secondarySliced: Record<string, SlicedColumnJoinEntry<PObjectId>> = {};\n const primarySpecsSet = new Set(primarySpecs.flatMap((s) => (s?.axesSpec ?? []).map((axisSpec) => AxisId.fromAxisSpec(axisSpec).toCanonicalString())));\n for (const filter of filters) {\n if (!(filter.predicate.operator === 'Or' && filter.column.type === 'axis')) {\n regularFilters.push(filter);\n continue;\n }\n const axisIdStr = new AxisId(filter.column.id).toCanonicalString();\n if (!primarySpecsSet.has(axisIdStr)) {\n const columnIdx = secondaryColumns.findIndex((c_, idx) => secondarySpecs[idx]?.axesSpec.some((axisSpec) => AxisId.fromAxisSpec(axisSpec).toCanonicalString() === axisIdStr));\n if (columnIdx !== -1) {\n const name = secondaryColumns[columnIdx].name as PObjectId;\n if (!secondarySliced[name]) {\n secondarySliced[name] = {\n type: 'slicedColumn',\n newId: name,\n column: name,\n axisFilters: []\n };\n }\n const axisIndex = secondarySpecs[columnIdx]?.axesSpec.findIndex((s) => AxisId.fromAxisSpec(s).toCanonicalString() === axisIdStr);\n if (filter.predicate.operands[0].operator === 'Equal' && filter.predicate.operands[0].reference !== undefined) {\n secondarySliced[name].axisFilters.push({\n type: 'constant',\n axisIndex: axisIndex ?? 0,\n constant: filter.predicate.operands[0].reference\n });\n }\n }\n } else {\n regularFilters.push(filter);\n };\n }\n const request = {\n src: {\n type: 'outer',\n primary: {\n type: 'full',\n entries: [\n ...primaryColumns.map((item) => ({\n type: 'column',\n column: item.name as PObjectId,\n })),\n ...primaryArtificial\n ],\n },\n secondary: secondaryColumns.map((item, idx) => {\n const axisFilter = secondarySliced[item.name];\n return axisFilter && axisFilter.axisFilters.length\n ? axisFilter : {\n type: 'column',\n column: item.name as PObjectId,\n }\n }),\n },\n filters: regularFilters,\n sorting: [],\n } as CalculateTableDataRequest<PObjectId>;\n try {\n const start = Date.now();\n //console.log('request', request)\n const response = await this.pframeDriver.calculateTableData(this.pframeHandle, request);\n //console.log('response', response);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getTableOuterJoin', time);\n }\n\n const axes = response.filter(item => item.spec.type === 'axis');\n const columns = response.filter(item => item.spec.type === 'column');\n if (debug) {\n console.log('getTableOuterJoin', `${response[0].data.data.length} items`);\n }\n\n return {\n axesData: axes.reduce((res: Record<string, PValue[]>, item) => {\n const id = AxisId.fromAxisSpec(item.spec.spec as AxisSpec);\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\n return res;\n }, {}),\n columnsData: columns.reduce((res: Record<string, PValue[]>, item) => {\n const spec = item.spec.spec as PColumnSpec;\n const id = new ColumnId({\n name: item.spec.id as PObjectId,\n type: spec.valueType,\n });\n const hasDenseAxis = spec.axesSpec.some((axisSpec) => axisSpec.annotations?.[IS_DENSE_AXIS] === 'true');\n const absentValue = spec.annotations?.[TREAT_ABSENT_VALUE_AS] ? Number(spec.annotations?.[TREAT_ABSENT_VALUE_AS]) : hasDenseAxis ? 0 : null;\n res[id.toCanonicalString()] = convertColumnData(id.type, item.data, absentValue);\n return res;\n }, {}),\n columnSpecs: columns.reduce((res: Record<string, PColumnSpec>, item) => {\n const spec = item.spec.spec as PColumnSpec;\n const id = new ColumnId({\n name: item.spec.id as PObjectId,\n type: spec.valueType,\n });\n res[id.toCanonicalString()] = spec;\n return res;\n }, {}),\n axesSpecs: axes.reduce((res: Record<string, AxisSpec>, item) => {\n const spec = item.spec.spec as AxisSpec;\n const id = AxisId.fromAxisSpec(spec);\n res[id.toCanonicalString()] = spec;\n return res;\n }, {}),\n };\n } catch (err) {\n console.error('PFrame: table outer join error');\n console.info('error with request: ', request);\n throw err;\n }\n }\n\n async getColumnSpecById(id: ColumnId): Promise<PColumnSpec | null> {\n try {\n const start = Date.now();\n const response = await this.pframeDriver.getColumnSpec(this.pframeHandle, id.name as PObjectId);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getColumnSpecById', time, response);\n }\n return response ?? null;\n } catch (err) {\n console.error('PFrame: get single column error');\n return null;\n }\n }\n\n async getColumnAxesIds(id: ColumnId): Promise<AxisId[]> {\n return (await this.getColumnSpecById(id))?.axesSpec.map(axisSpec => AxisId.fromAxisSpec(axisSpec)) ?? [];\n }\n\n async getRequestColumnsFromSelectedSources(sources: (ColumnId | AxisId)[]): Promise<PFrameAxisId[]> {\n const result: PFrameAxisId[] = [];\n //NB: we don't need to add axes in request because axes are already in columns\n for (const item of sources) {\n if (isColumnId(item)) {\n const axesSpec = (await this.getColumnSpecById(item))?.axesSpec ?? [];\n result.push(...axesSpec.map(spec => AxisId.fromAxisSpec(spec).toPFrameId()));\n }\n }\n return result;\n }\n\n async getColumnsList() {\n return this.pframeDriver.listColumns(this.pframeHandle);\n }\n\n async getColumnsFull(\n selectedSources: (ColumnId | AxisId)[],\n strictlyCompatible: boolean,\n types?: ValueType[],\n names?: string[],\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'],\n annotationsNotEmpty?: string[]\n ): Promise<PColumnIdAndSpec[]> {\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n type: types,\n name: names,\n annotationValue: annotations,\n annotationPattern: annotationsNotEmpty?.reduce((res, v) => {\n res[v] = '.+'\n return res;\n }, {} as Record<string, string>)\n },\n compatibleWith: await this.getRequestColumnsFromSelectedSources(selectedSources),\n strictlyCompatible, // should be true if we want to get meta and false if X/Y\n };\n const start = Date.now();\n const response: FindColumnsResponse = await this.pframeDriver.findColumns(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('getColumnsFull', time);\n }\n const result: PColumnIdAndSpec[] = [];\n response.hits.forEach(item => {\n // ***\n // consider mapping variants in qualifications\n // ***\n\n result.push(item);\n });\n return result;\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n }\n\n async getColumns(\n selectedSources: (ColumnId | AxisId)[],\n strictlyCompatible: boolean,\n types?: ValueType[],\n names?: string[],\n annotations?: FindColumnsRequest['columnFilter']['annotationValue'],\n ): Promise<ColumnId[]> {\n return (await this.getColumnsFull(selectedSources, strictlyCompatible, types, names, annotations)).map(\n item =>\n new ColumnId({\n name: item.columnId,\n type: item.spec.valueType,\n })\n );\n }\n\n async findColumnBy(\n name: string,\n type?: ValueType,\n annotationValue?: FindColumnsRequest['columnFilter']['annotationValue'],\n domainValue?: FindColumnsRequest['columnFilter']['domainValue']\n ): Promise<ColumnId | null> {\n try {\n const request: FindColumnsRequest = {\n columnFilter: {\n name: [name],\n ...(type ? { type: [type] } : {}),\n ...(annotationValue ? { annotationValue } : {}),\n ...(domainValue ? { domainValue } : {}),\n },\n compatibleWith: [] as AxisId[],\n strictlyCompatible: false,\n };\n const start = Date.now();\n const response: FindColumnsResponse = await this.pframeDriver.findColumns(this.pframeHandle, request);\n if (debug) {\n const time = Date.now() - start;\n if (time > LONG_REQUEST) console.log('findColumnBy', time);\n }\n const result: ColumnId[] = [];\n response.hits.forEach(({ columnId, spec }) => {\n // ***\n // consider mapping variants in qualifications\n // ***\n\n result.push(new ColumnId({ name: columnId, type: spec.valueType }));\n });\n if (result.length > 1) {\n console.warn(`More than 1 column found for ${name}}`);\n }\n if (result.length === 0) {\n console.warn(`No columns found for ${name}}`);\n return null;\n }\n return result[0];\n } catch (err) {\n console.error('PFrame: findColumns error');\n throw err;\n }\n }\n}\n"],"names":["UNIQUE_VALUES_LIMIT","convertColumnData","type","response","absentValue","res","i","pTableValue","ColumnsProvider","pframeHandle","pframeDriver","__publicField","id","filters","start","axes","c","item","columns","AxisId","err","limit","request","overflow","axisId","parents","columnParents","isColumnId","specs","axisIdStr","realParents","idx","columnSpec","axisSpec","responses","p","lodash","r","columnIds","spec","denseAxes","_a","IS_DENSE_AXIS","primaryIds","secondaryIds","primaryInnerJoin","primaryColumns","secondaryColumns","primarySpecs","secondarySpecs","primaryArtificial","regularFilters","secondarySliced","primarySpecsSet","s","filter","columnIdx","c_","name","axisIndex","axisFilter","l","ColumnId","hasDenseAxis","TREAT_ABSENT_VALUE_AS","_b","sources","result","axesSpec","selectedSources","strictlyCompatible","types","names","annotations","annotationsNotEmpty","v","annotationValue","domainValue","columnId"],"mappings":"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","x_google_ignoreList":[0]}
@@ -40,8 +40,7 @@ function Z(t) {
40
40
  };
41
41
  }
42
42
  function L(t, n) {
43
- if (n === "Int" || n === "Long")
44
- return Math.floor(t);
43
+ return n === "Int" || n === "Long" ? Math.floor(t) : t;
45
44
  }
46
45
  function B(t) {
47
46
  const { selectedSource: n, type: a, selectedFilterRange: o, selectedFilterValues: i } = t, e = S(n);
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../node_modules/@milaboratories/pf-plots/src/utils.ts"],"sourcesContent":["import { getNormalizedAxesList, LinkerMap, SingleValuePredicateV2, ValueType } from '@milaboratories/pl-model-common';\nimport { TableOuterJoinResult } from './pframe/ColumnsProvider';\nimport type { DataStore, PValue } from './store';\nimport type { ColumnOrAxisIdString } from './spec';\nimport { isAxisId } from './spec';\nimport { AxisId, ColumnId, columnOrAxisIdFromString, isColumnId } from './spec';\nimport type { AxisData, ColumnData, InputState, SelectorStateFilter } from './common';\nimport {\n AXIS_NATURE_KEY,\n COLUMN_DOMAIN_KEY,\n COLUMN_LABEL_KEY,\n COLUMN_NAME_KEY, IS_LINKER_COLUMN,\n IS_VIRTUAL_COLUMN,\n MULTIPLIES_BY,\n SUBSET_FILTER_KEY,\n} from './constants';\nimport {\n AxisSpec,\n type PColumnSpec,\n type PObjectId,\n type PTableRecordSingleValueFilterV2,\n} from '@milaboratories/pl-model-common';\nimport canonicalize from 'canonicalize';\nimport { DemoDataStore } from './demoStore';\n\nexport type OptionsInfo = Map<ColumnOrAxisIdString, ColumnData | AxisData>;\nexport function getDefaultInfo(sourceIdStr: ColumnOrAxisIdString): ColumnData | AxisData {\n const item = columnOrAxisIdFromString(sourceIdStr);\n const { name, type } = item;\n if (isColumnId(item)) {\n return {\n kind: 'column',\n name: '',\n label: ' ',\n type: item.type,\n spec: { axesSpec: [], kind: 'PColumn', valueType: item.type, name },\n annotations: undefined,\n isSubsetFilter: false,\n isDiscreteFilter: item.type === 'String'\n };\n }\n return {\n kind: 'axis',\n name: '',\n label: ' ',\n type: type,\n spec: { type, name },\n mustBeConsumed: false,\n dividable: false,\n annotations: undefined,\n isSubsetFilter: false,\n isDiscreteFilter: type === 'String',\n isNonHomogenous: false,\n parentSources: [],\n };\n}\n\nexport function getStateCopy<State extends InputState>(state: State): State {\n return {\n type: state.type,\n components: { ...state.components },\n dividedAxes: { ...state.dividedAxes },\n } as State;\n}\n\nfunction normalizeFilterReference(v: number, valueType: ValueType) {\n if (valueType === 'Int' || valueType === 'Long') {\n return Math.floor(v);\n }\n return\n}\nexport function getFilterFromState(state: SelectorStateFilter): PTableRecordSingleValueFilterV2[] {\n const { selectedSource, type, selectedFilterRange, selectedFilterValues } = state;\n const id = columnOrAxisIdFromString(selectedSource);\n if (!id) {\n throw Error('Empty source selected');\n }\n if (type === 'range') {\n const rangeFilters = [];\n if (selectedFilterRange?.max !== undefined) {\n rangeFilters.push({\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'LessOrEqual',\n reference: normalizeFilterReference(selectedFilterRange.max, id.type)\n } as SingleValuePredicateV2,\n })\n }\n if (selectedFilterRange?.min !== undefined) {\n rangeFilters.push({\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'GreaterOrEqual',\n reference: normalizeFilterReference(selectedFilterRange.min, id.type)\n } as SingleValuePredicateV2,\n })\n }\n return rangeFilters;\n } else if (type === 'subset') {\n return [\n {\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'Not',\n operand: { operator: 'IsNA' }\n } as SingleValuePredicateV2,\n },\n ]\n }\n if (typeof selectedFilterValues === 'undefined' || !selectedFilterValues.length) {\n return [];\n }\n return [\n {\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : {\n type: 'column' as const,\n id: id.name as PObjectId,\n },\n predicate: {\n operator: 'Or',\n operands: selectedFilterValues.map((v) => {\n const reference = id.type === 'String'\n ? String(v)\n : (Number(v) as string | number);\n return {\n operator: 'Equal',\n reference\n } as SingleValuePredicateV2\n })\n }\n },\n ];\n}\n\nexport function getFiltersFromStates(states: SelectorStateFilter[]): PTableRecordSingleValueFilterV2[] {\n const result: PTableRecordSingleValueFilterV2[] = [];\n for (const state of states) {\n result.push(...getFilterFromState(state));\n }\n return result;\n}\n\nexport function getGlobalId(spec: PColumnSpec): string;\nexport function getGlobalId(spec: AxisSpec): string;\nexport function getGlobalId(spec: AxisSpec | PColumnSpec): string {\n if ('kind' in spec && spec.kind === 'PColumn') {\n const name = spec.name ?? spec.annotations?.[COLUMN_NAME_KEY];\n const domain = spec.domain ?? spec.annotations?.[COLUMN_DOMAIN_KEY];\n return canonicalize({ name, domain })!;\n }\n const name = spec.name;\n const domain = spec.domain;\n return canonicalize({ name, domain })!;\n}\n\nasync function getAxisSpecFromParents(store: DataStore, axisId: AxisId, parentSources: ColumnOrAxisIdString[]) {\n for (const parentSource of parentSources) {\n const parentId = columnOrAxisIdFromString(parentSource);\n if (isColumnId(parentId)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(parentId);\n const spec = (columnSpec?.axesSpec ?? []).find(\n s => AxisId.fromAxisSpec(s).toCanonicalString() === axisId.toCanonicalString(),\n );\n if (spec) {\n return spec;\n }\n }\n }\n return null;\n}\n\nconst LABEL_COLUMN_NAME = 'pl7.app/label';\n\nexport async function getColumnOrAxisValueLabelsId(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n): Promise<ColumnId | undefined> {\n const id = columnOrAxisIdFromString(selectedSource);\n if (isColumnId(id)) {\n return undefined;\n }\n async function getAxisGlobalId(axisId: AxisId) {\n const spec = await getAxisSpecFromParents(store, axisId, parentSources);\n return spec ? getGlobalId(spec) : null;\n }\n const labelColumns = await store.pFrameProvider.getColumnsFull([], false, undefined, [LABEL_COLUMN_NAME]);\n const sourceGlobalId = await getAxisGlobalId(id);\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && getGlobalId(spec.axesSpec[0]) === sourceGlobalId;\n });\n return labelColumn ? new ColumnId({ name: labelColumn.columnId, type: labelColumn.spec.valueType }) : undefined;\n}\n\nexport async function getColumnOrAxisSpec(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n) {\n const selectedId = columnOrAxisIdFromString(selectedSource);\n const labelsColumn = await getColumnOrAxisValueLabelsId(store, selectedSource, parentSources);\n\n let spec: AxisSpec | PColumnSpec | null;\n if (isColumnId(selectedId)) {\n spec = await store.pFrameProvider.getColumnSpecById(labelsColumn ?? selectedId);\n } else {\n spec = labelsColumn\n ? await store.pFrameProvider.getColumnSpecById(labelsColumn)\n : await getAxisSpecFromParents(store, selectedId, parentSources);\n }\n return spec;\n}\n\nexport async function getColumnOrAxisLabel(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n) {\n const spec = await getColumnOrAxisSpec(store, selectedSource, parentSources);\n if (!spec) {\n return '';\n }\n const label = spec.annotations?.[COLUMN_LABEL_KEY] ?? spec.name;\n return store.labelsModifier(spec.name, label);\n}\n\nexport function axisIsNonHomogenous(spec: AxisSpec) {\n const axisNature = spec.annotations?.[AXIS_NATURE_KEY]?.toLowerCase();\n return Boolean(axisNature) && axisNature !== 'homogenous' && axisNature !== 'homogeneous';\n}\n\nexport function dataColumnPredicateDefault(spec: PColumnSpec) {\n return !spec.name.includes('metadata') && !(spec.annotations?.[IS_VIRTUAL_COLUMN] === 'true') && !(spec.annotations?.[SUBSET_FILTER_KEY] === 'true');\n}\n\nexport async function getAxesSpecsFromSources(store: DataStore, idStrs: ColumnOrAxisIdString[]): Promise<AxisSpec[]> {\n const set = new Set<ColumnOrAxisIdString>();\n const result: AxisSpec[] = [];\n for (const idStr of idStrs) {\n const id = columnOrAxisIdFromString(idStr);\n if (isColumnId(id)) {\n const spec = await store.pFrameProvider.getColumnSpecById(id);\n if (!spec) {\n continue;\n }\n spec.axesSpec.forEach(axisSpec => {\n const id = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (!set.has(id)) {\n set.add(id);\n result.push(axisSpec);\n }\n })\n }\n }\n return result;\n}\n\nexport async function createLinkerMap(store: DemoDataStore) {\n const allLinkerColumns = await store.pFrameProvider.getColumnsFull(\n [], false, undefined, undefined,\n { [IS_LINKER_COLUMN]: 'true' },\n );\n\n return LinkerMap.fromColumns(allLinkerColumns);\n}\n\nexport type MultipliesByMap = Map<ColumnOrAxisIdString, Map<ColumnOrAxisIdString, { parentSource: ColumnOrAxisIdString, spec: AxisSpec }>>;\nexport async function createMultipliesByMap(store: DemoDataStore): Promise<MultipliesByMap> {\n const allMultiplyingColumns = await store.pFrameProvider.getColumnsFull(\n [], false, undefined, undefined, undefined, [MULTIPLIES_BY]\n );\n\n const result: MultipliesByMap = new Map();\n\n for (const multiplyingColumn of allMultiplyingColumns) {\n const axes = multiplyingColumn.spec.axesSpec;\n const annotationData = multiplyingColumn.spec?.annotations?.[MULTIPLIES_BY];\n if (axes.length !== 2 || !annotationData) {\n continue;\n }\n const columnIdStr = new ColumnId({ name: multiplyingColumn.columnId, type: multiplyingColumn.spec.valueType }).toCanonicalString();\n try {\n const [multipliesBy] = JSON.parse(annotationData);\n const [axis1, axis2] = axes;\n const id1 = AxisId.fromAxisSpec(axis1).toCanonicalString();\n const id2 = AxisId.fromAxisSpec(axis2).toCanonicalString();\n if (axis1.name === multipliesBy) {\n if (!result.get(id2)) {\n result.set(id2, new Map());\n }\n result.get(id2)!.set(id1, { parentSource: columnIdStr, spec: axis1 })\n } else if (axis2.name === multipliesBy) {\n if (!result.get(id1)) {\n result.set(id1, new Map());\n }\n result.get(id1)!.set(id2, { parentSource: columnIdStr, spec: axis2 });\n }\n } catch (e) {\n console.error(`Wrong format for annotation ${MULTIPLIES_BY}: ${multiplyingColumn.spec?.annotations?.[MULTIPLIES_BY]}`);\n }\n }\n return result;\n}\n\nfunction getLinkerColumnsForAxis(\n secondaryAxisId: AxisId,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n) {\n const axisIdStr = secondaryAxisId.toCanonicalString();\n const dataInputAxesSet = new Set(dataInputAxes.map(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString()));\n const dataInputAxesIds = [...dataInputAxesSet];\n\n // check multipliesBy columns\n const dataAxesIdWithLink = dataInputAxesIds.find((dataInputId) => multipliesByMap.get(dataInputId)?.get(axisIdStr));\n const linkerEl = dataAxesIdWithLink ? multipliesByMap.get(dataAxesIdWithLink)?.get(axisIdStr) : null;\n if (linkerEl) {\n // we need only 1 multipliesBy column to link single axis\n return [columnOrAxisIdFromString(linkerEl.parentSource)];\n }\n\n const normalizedDataAxes = getNormalizedAxesList(dataInputAxes);\n // else check regular linkers\n const axesAvailableWithLinkers = getNormalizedAxesList(\n linkerMap.getReachableByLinkersAxesFromAxes(normalizedDataAxes)\n );\n const axisSpec = axesAvailableWithLinkers.find((spec) => AxisId.fromAxisSpec(spec).toCanonicalString() === axisIdStr);\n\n if (!axisSpec) {\n return [];\n }\n return linkerMap.getLinkerColumnsForAxes({ from: normalizedDataAxes, to: [axisSpec], throwWhenNoLinkExists: false }).map(v => new ColumnId({ name: v.columnId, type: v.spec.valueType }));\n}\nasync function getLinkerColumnsForColumn(\n secondaryColumnId: ColumnId,\n store: DataStore,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n) {\n const secondaryColumnSpec = await store.pFrameProvider.getColumnSpecById(secondaryColumnId);\n if (!secondaryColumnSpec) {\n return [];\n }\n let linkers: ColumnId[] = [];\n const dataInputAxesSet = new Set(dataInputAxes.map(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString()));\n const dataInputAxesIds = [...dataInputAxesSet];\n const rightPartAxes = secondaryColumnSpec.axesSpec.filter((axisSpec) => { // right part from column minus 'fixedAxes'\n const axisId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (dataInputAxesSet.has(axisId)) {\n return false;\n }\n const dataAxesIdWithLink = dataInputAxesIds.find((dataInputId) => multipliesByMap.get(dataInputId)?.get(axisId));\n const linkerEl = dataAxesIdWithLink ? multipliesByMap.get(dataAxesIdWithLink)?.get(axisId) : null;\n if (linkerEl) {\n linkers.push(columnOrAxisIdFromString(linkerEl.parentSource));\n return false;\n }\n return true;\n });\n\n const from = getNormalizedAxesList(dataInputAxes);\n const to = getNormalizedAxesList(rightPartAxes);\n\n linkers = linkers.concat(linkerMap.getLinkerColumnsForAxes({ from, to, throwWhenNoLinkExists: false }).map(v => new ColumnId({ name: v.columnId, type: v.spec.valueType })));\n return linkers;\n}\nexport async function getLinkerColumnsForSource(\n store: DataStore,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n secondarySource: ColumnOrAxisIdString,\n): Promise<ColumnId[]> {\n const columnOrAxisId = columnOrAxisIdFromString(secondarySource);\n return isColumnId(columnOrAxisId)\n ? getLinkerColumnsForColumn(columnOrAxisId, store, linkerMap, multipliesByMap, dataInputAxes)\n : getLinkerColumnsForAxis(columnOrAxisId, linkerMap, multipliesByMap, dataInputAxes);\n}\n\nexport function getNotAllowedAxes(\n columnSpec: PColumnSpec,\n dataInputAxesList: AxisSpec[], // axes from data-input\n linkerMap: LinkerMap, // composite linkers, without chains\n multipliesByMap: MultipliesByMap,\n): AxisSpec[] {\n const dataInputAxesSet = new Set(dataInputAxesList.map((v) => AxisId.fromAxisSpec(v).toCanonicalString()))\n const dataInputAxesIds = [...dataInputAxesSet];\n\n // check non-linkable axes only from this column\n const allColumnAxes = getNormalizedAxesList(columnSpec.axesSpec);\n // remove from the column axes - axes from data inputs\n const rightPartAxes = allColumnAxes.filter( // axes in data axes list are allowed, check the rest\n (axisSpec: AxisSpec) => !dataInputAxesSet.has(AxisId.fromAxisSpec(axisSpec).toCanonicalString())\n );\n\n const sourceAxes = getNormalizedAxesList(dataInputAxesList);\n const targetAxes = LinkerMap.getAxesRoots(rightPartAxes);\n\n const nonLinkableByLinkerMap = linkerMap.getNonLinkableAxes(sourceAxes, targetAxes); // rest probably reduced\n const filtered = nonLinkableByLinkerMap.filter((axisSpec) => {\n const freeId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n return !dataInputAxesIds.some((id) => multipliesByMap.get(id)?.get(freeId) !== undefined);\n });\n return filtered;\n}\n\nexport function createHighlightColumn(highlightSelectedStates: SelectorStateFilter[], data: TableOuterJoinResult) {\n const dataLength = data.columnsData[Object.keys(data.columnsData)[0]].length;\n const highlightColumn = new Int32Array(dataLength).fill(0);\n const notEmptyHighlightStates = highlightSelectedStates.filter(s =>\n s.selectedFilterRange && (s.selectedFilterRange.min !== undefined || s.selectedFilterRange.max !== undefined) ||\n s.selectedFilterValues && s.selectedFilterValues.length\n )\n for (let rowIdx = 0; rowIdx < dataLength; rowIdx++) {\n let res = notEmptyHighlightStates.length === 0; // fill with 1 if nothing selected in highlighting filters\n for (let i = 0; i < notEmptyHighlightStates.length; i++) {\n const { selectedSource, selectedFilterValues, selectedFilterRange, type } = highlightSelectedStates[i];\n const sourceId = columnOrAxisIdFromString(selectedSource);\n const value = (isColumnId(sourceId) ? data.columnsData[selectedSource] : data.axesData[selectedSource])[rowIdx];\n if (selectedFilterValues !== undefined && selectedFilterValues.length) {\n res = res || selectedFilterValues.includes(String(value));\n }\n if (selectedFilterRange !== undefined && (selectedFilterRange.min !== undefined || selectedFilterRange.max !== undefined) && typeof value === 'number') {\n let rangeResult = true;\n if (selectedFilterRange.min !== undefined) {\n rangeResult = rangeResult && value >= selectedFilterRange.min;\n }\n if (selectedFilterRange.max !== undefined) {\n rangeResult = rangeResult && value <= selectedFilterRange.max;\n }\n res = res || rangeResult;\n }\n if (type === 'subset') {\n res = res || (value !== null && value !== undefined);\n }\n }\n if (res) {\n highlightColumn[rowIdx] = 1;\n }\n }\n return highlightColumn as unknown as PValue[];\n}\n"],"names":["getDefaultInfo","sourceIdStr","item","columnOrAxisIdFromString","name","type","isColumnId","getStateCopy","state","normalizeFilterReference","v","valueType","getFilterFromState","selectedSource","selectedFilterRange","selectedFilterValues","id","rangeFilters","isAxisId","getFiltersFromStates","states","result","getGlobalId","spec","_a","COLUMN_NAME_KEY","domain","_b","COLUMN_DOMAIN_KEY","canonicalize","getAxisSpecFromParents","store","axisId","parentSources","parentSource","parentId","columnSpec","AxisId","LABEL_COLUMN_NAME","getColumnOrAxisValueLabelsId","getAxisGlobalId","labelColumns","sourceGlobalId","labelColumn","ColumnId","getColumnOrAxisSpec","selectedId","labelsColumn","getColumnOrAxisLabel","label","COLUMN_LABEL_KEY","axisIsNonHomogenous","axisNature","AXIS_NATURE_KEY","dataColumnPredicateDefault","IS_VIRTUAL_COLUMN","SUBSET_FILTER_KEY","getAxesSpecsFromSources","idStrs","set","idStr","axisSpec","createLinkerMap","allLinkerColumns","IS_LINKER_COLUMN","LinkerMap","createMultipliesByMap","allMultiplyingColumns","MULTIPLIES_BY","multiplyingColumn","axes","annotationData","columnIdStr","multipliesBy","axis1","axis2","id1","id2","_d","_c","getLinkerColumnsForAxis","secondaryAxisId","linkerMap","multipliesByMap","dataInputAxes","axisIdStr","dataAxesIdWithLink","dataInputId","linkerEl","normalizedDataAxes","getNormalizedAxesList","getLinkerColumnsForColumn","secondaryColumnId","secondaryColumnSpec","linkers","dataInputAxesSet","dataInputAxesIds","rightPartAxes","from","to","u","getLinkerColumnsForSource","secondarySource","columnOrAxisId","getNotAllowedAxes","dataInputAxesList","sourceAxes","targetAxes","freeId","createHighlightColumn","highlightSelectedStates","data","dataLength","highlightColumn","notEmptyHighlightStates","s","rowIdx","res","i","sourceId","value","rangeResult"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../node_modules/@milaboratories/pf-plots/src/utils.ts"],"sourcesContent":["import { getNormalizedAxesList, LinkerMap, SingleValuePredicateV2, ValueType } from '@milaboratories/pl-model-common';\nimport { TableOuterJoinResult } from './pframe/ColumnsProvider';\nimport type { DataStore, PValue } from './store';\nimport type { ColumnOrAxisIdString } from './spec';\nimport { isAxisId } from './spec';\nimport { AxisId, ColumnId, columnOrAxisIdFromString, isColumnId } from './spec';\nimport type { AxisData, ColumnData, InputState, SelectorStateFilter } from './common';\nimport {\n AXIS_NATURE_KEY,\n COLUMN_DOMAIN_KEY,\n COLUMN_LABEL_KEY,\n COLUMN_NAME_KEY, IS_LINKER_COLUMN,\n IS_VIRTUAL_COLUMN,\n MULTIPLIES_BY,\n SUBSET_FILTER_KEY,\n} from './constants';\nimport {\n AxisSpec,\n type PColumnSpec,\n type PObjectId,\n type PTableRecordSingleValueFilterV2,\n} from '@milaboratories/pl-model-common';\nimport canonicalize from 'canonicalize';\nimport { DemoDataStore } from './demoStore';\n\nexport type OptionsInfo = Map<ColumnOrAxisIdString, ColumnData | AxisData>;\nexport function getDefaultInfo(sourceIdStr: ColumnOrAxisIdString): ColumnData | AxisData {\n const item = columnOrAxisIdFromString(sourceIdStr);\n const { name, type } = item;\n if (isColumnId(item)) {\n return {\n kind: 'column',\n name: '',\n label: ' ',\n type: item.type,\n spec: { axesSpec: [], kind: 'PColumn', valueType: item.type, name },\n annotations: undefined,\n isSubsetFilter: false,\n isDiscreteFilter: item.type === 'String'\n };\n }\n return {\n kind: 'axis',\n name: '',\n label: ' ',\n type: type,\n spec: { type, name },\n mustBeConsumed: false,\n dividable: false,\n annotations: undefined,\n isSubsetFilter: false,\n isDiscreteFilter: type === 'String',\n isNonHomogenous: false,\n parentSources: [],\n };\n}\n\nexport function getStateCopy<State extends InputState>(state: State): State {\n return {\n type: state.type,\n components: { ...state.components },\n dividedAxes: { ...state.dividedAxes },\n } as State;\n}\n\nfunction normalizeFilterReference(v: number, valueType: ValueType): number {\n if (valueType === 'Int' || valueType === 'Long') {\n return Math.floor(v);\n }\n return v;\n}\nexport function getFilterFromState(state: SelectorStateFilter): PTableRecordSingleValueFilterV2[] {\n const { selectedSource, type, selectedFilterRange, selectedFilterValues } = state;\n const id = columnOrAxisIdFromString(selectedSource);\n if (!id) {\n throw Error('Empty source selected');\n }\n if (type === 'range') {\n const rangeFilters: PTableRecordSingleValueFilterV2[] = [];\n if (selectedFilterRange?.max !== undefined) {\n rangeFilters.push({\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'LessOrEqual',\n reference: normalizeFilterReference(selectedFilterRange.max, id.type)\n },\n })\n }\n if (selectedFilterRange?.min !== undefined) {\n rangeFilters.push({\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'GreaterOrEqual',\n reference: normalizeFilterReference(selectedFilterRange.min, id.type)\n },\n })\n }\n return rangeFilters;\n } else if (type === 'subset') {\n return [\n {\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : { type: 'column' as const, id: id.name as PObjectId },\n predicate: {\n operator: 'Not',\n operand: { operator: 'IsNA' }\n },\n },\n ]\n }\n if (typeof selectedFilterValues === 'undefined' || !selectedFilterValues.length) {\n return [];\n }\n return [\n {\n type: 'bySingleColumnV2' as const,\n column: isAxisId(id) ? { type: 'axis' as const, id: id.toPFrameId() } : {\n type: 'column' as const,\n id: id.name as PObjectId,\n },\n predicate: {\n operator: 'Or',\n operands: selectedFilterValues.map((v) => {\n const reference = id.type === 'String'\n ? String(v)\n : (Number(v) as string | number);\n return {\n operator: 'Equal',\n reference\n }\n })\n }\n },\n ];\n}\n\nexport function getFiltersFromStates(states: SelectorStateFilter[]): PTableRecordSingleValueFilterV2[] {\n const result: PTableRecordSingleValueFilterV2[] = [];\n for (const state of states) {\n result.push(...getFilterFromState(state));\n }\n return result;\n}\n\nexport function getGlobalId(spec: PColumnSpec): string;\nexport function getGlobalId(spec: AxisSpec): string;\nexport function getGlobalId(spec: AxisSpec | PColumnSpec): string {\n if ('kind' in spec && spec.kind === 'PColumn') {\n const name = spec.name ?? spec.annotations?.[COLUMN_NAME_KEY];\n const domain = spec.domain ?? spec.annotations?.[COLUMN_DOMAIN_KEY];\n return canonicalize({ name, domain })!;\n }\n const name = spec.name;\n const domain = spec.domain;\n return canonicalize({ name, domain })!;\n}\n\nasync function getAxisSpecFromParents(store: DataStore, axisId: AxisId, parentSources: ColumnOrAxisIdString[]) {\n for (const parentSource of parentSources) {\n const parentId = columnOrAxisIdFromString(parentSource);\n if (isColumnId(parentId)) {\n const columnSpec = await store.pFrameProvider.getColumnSpecById(parentId);\n const spec = (columnSpec?.axesSpec ?? []).find(\n s => AxisId.fromAxisSpec(s).toCanonicalString() === axisId.toCanonicalString(),\n );\n if (spec) {\n return spec;\n }\n }\n }\n return null;\n}\n\nconst LABEL_COLUMN_NAME = 'pl7.app/label';\n\nexport async function getColumnOrAxisValueLabelsId(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n): Promise<ColumnId | undefined> {\n const id = columnOrAxisIdFromString(selectedSource);\n if (isColumnId(id)) {\n return undefined;\n }\n async function getAxisGlobalId(axisId: AxisId) {\n const spec = await getAxisSpecFromParents(store, axisId, parentSources);\n return spec ? getGlobalId(spec) : null;\n }\n const labelColumns = await store.pFrameProvider.getColumnsFull([], false, undefined, [LABEL_COLUMN_NAME]);\n const sourceGlobalId = await getAxisGlobalId(id);\n const labelColumn = labelColumns.find(({ spec }) => {\n return spec && spec.axesSpec.length === 1 && getGlobalId(spec.axesSpec[0]) === sourceGlobalId;\n });\n return labelColumn ? new ColumnId({ name: labelColumn.columnId, type: labelColumn.spec.valueType }) : undefined;\n}\n\nexport async function getColumnOrAxisSpec(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n) {\n const selectedId = columnOrAxisIdFromString(selectedSource);\n const labelsColumn = await getColumnOrAxisValueLabelsId(store, selectedSource, parentSources);\n\n let spec: AxisSpec | PColumnSpec | null;\n if (isColumnId(selectedId)) {\n spec = await store.pFrameProvider.getColumnSpecById(labelsColumn ?? selectedId);\n } else {\n spec = labelsColumn\n ? await store.pFrameProvider.getColumnSpecById(labelsColumn)\n : await getAxisSpecFromParents(store, selectedId, parentSources);\n }\n return spec;\n}\n\nexport async function getColumnOrAxisLabel(\n store: DataStore,\n selectedSource: ColumnOrAxisIdString,\n parentSources: ColumnOrAxisIdString[],\n) {\n const spec = await getColumnOrAxisSpec(store, selectedSource, parentSources);\n if (!spec) {\n return '';\n }\n const label = spec.annotations?.[COLUMN_LABEL_KEY] ?? spec.name;\n return store.labelsModifier(spec.name, label);\n}\n\nexport function axisIsNonHomogenous(spec: AxisSpec) {\n const axisNature = spec.annotations?.[AXIS_NATURE_KEY]?.toLowerCase();\n return Boolean(axisNature) && axisNature !== 'homogenous' && axisNature !== 'homogeneous';\n}\n\nexport function dataColumnPredicateDefault(spec: PColumnSpec) {\n return !spec.name.includes('metadata') && !(spec.annotations?.[IS_VIRTUAL_COLUMN] === 'true') && !(spec.annotations?.[SUBSET_FILTER_KEY] === 'true');\n}\n\nexport async function getAxesSpecsFromSources(store: DataStore, idStrs: ColumnOrAxisIdString[]): Promise<AxisSpec[]> {\n const set = new Set<ColumnOrAxisIdString>();\n const result: AxisSpec[] = [];\n for (const idStr of idStrs) {\n const id = columnOrAxisIdFromString(idStr);\n if (isColumnId(id)) {\n const spec = await store.pFrameProvider.getColumnSpecById(id);\n if (!spec) {\n continue;\n }\n spec.axesSpec.forEach(axisSpec => {\n const id = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (!set.has(id)) {\n set.add(id);\n result.push(axisSpec);\n }\n })\n }\n }\n return result;\n}\n\nexport async function createLinkerMap(store: DemoDataStore) {\n const allLinkerColumns = await store.pFrameProvider.getColumnsFull(\n [], false, undefined, undefined,\n { [IS_LINKER_COLUMN]: 'true' },\n );\n\n return LinkerMap.fromColumns(allLinkerColumns);\n}\n\nexport type MultipliesByMap = Map<ColumnOrAxisIdString, Map<ColumnOrAxisIdString, { parentSource: ColumnOrAxisIdString, spec: AxisSpec }>>;\nexport async function createMultipliesByMap(store: DemoDataStore): Promise<MultipliesByMap> {\n const allMultiplyingColumns = await store.pFrameProvider.getColumnsFull(\n [], false, undefined, undefined, undefined, [MULTIPLIES_BY]\n );\n\n const result: MultipliesByMap = new Map();\n\n for (const multiplyingColumn of allMultiplyingColumns) {\n const axes = multiplyingColumn.spec.axesSpec;\n const annotationData = multiplyingColumn.spec?.annotations?.[MULTIPLIES_BY];\n if (axes.length !== 2 || !annotationData) {\n continue;\n }\n const columnIdStr = new ColumnId({ name: multiplyingColumn.columnId, type: multiplyingColumn.spec.valueType }).toCanonicalString();\n try {\n const [multipliesBy] = JSON.parse(annotationData);\n const [axis1, axis2] = axes;\n const id1 = AxisId.fromAxisSpec(axis1).toCanonicalString();\n const id2 = AxisId.fromAxisSpec(axis2).toCanonicalString();\n if (axis1.name === multipliesBy) {\n if (!result.get(id2)) {\n result.set(id2, new Map());\n }\n result.get(id2)!.set(id1, { parentSource: columnIdStr, spec: axis1 })\n } else if (axis2.name === multipliesBy) {\n if (!result.get(id1)) {\n result.set(id1, new Map());\n }\n result.get(id1)!.set(id2, { parentSource: columnIdStr, spec: axis2 });\n }\n } catch (e) {\n console.error(`Wrong format for annotation ${MULTIPLIES_BY}: ${multiplyingColumn.spec?.annotations?.[MULTIPLIES_BY]}`);\n }\n }\n return result;\n}\n\nfunction getLinkerColumnsForAxis(\n secondaryAxisId: AxisId,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n) {\n const axisIdStr = secondaryAxisId.toCanonicalString();\n const dataInputAxesSet = new Set(dataInputAxes.map(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString()));\n const dataInputAxesIds = [...dataInputAxesSet];\n\n // check multipliesBy columns\n const dataAxesIdWithLink = dataInputAxesIds.find((dataInputId) => multipliesByMap.get(dataInputId)?.get(axisIdStr));\n const linkerEl = dataAxesIdWithLink ? multipliesByMap.get(dataAxesIdWithLink)?.get(axisIdStr) : null;\n if (linkerEl) {\n // we need only 1 multipliesBy column to link single axis\n return [columnOrAxisIdFromString(linkerEl.parentSource)];\n }\n\n const normalizedDataAxes = getNormalizedAxesList(dataInputAxes);\n // else check regular linkers\n const axesAvailableWithLinkers = getNormalizedAxesList(\n linkerMap.getReachableByLinkersAxesFromAxes(normalizedDataAxes)\n );\n const axisSpec = axesAvailableWithLinkers.find((spec) => AxisId.fromAxisSpec(spec).toCanonicalString() === axisIdStr);\n\n if (!axisSpec) {\n return [];\n }\n return linkerMap.getLinkerColumnsForAxes({ from: normalizedDataAxes, to: [axisSpec], throwWhenNoLinkExists: false }).map(v => new ColumnId({ name: v.columnId, type: v.spec.valueType }));\n}\nasync function getLinkerColumnsForColumn(\n secondaryColumnId: ColumnId,\n store: DataStore,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n) {\n const secondaryColumnSpec = await store.pFrameProvider.getColumnSpecById(secondaryColumnId);\n if (!secondaryColumnSpec) {\n return [];\n }\n let linkers: ColumnId[] = [];\n const dataInputAxesSet = new Set(dataInputAxes.map(axisSpec => AxisId.fromAxisSpec(axisSpec).toCanonicalString()));\n const dataInputAxesIds = [...dataInputAxesSet];\n const rightPartAxes = secondaryColumnSpec.axesSpec.filter((axisSpec) => { // right part from column minus 'fixedAxes'\n const axisId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n if (dataInputAxesSet.has(axisId)) {\n return false;\n }\n const dataAxesIdWithLink = dataInputAxesIds.find((dataInputId) => multipliesByMap.get(dataInputId)?.get(axisId));\n const linkerEl = dataAxesIdWithLink ? multipliesByMap.get(dataAxesIdWithLink)?.get(axisId) : null;\n if (linkerEl) {\n linkers.push(columnOrAxisIdFromString(linkerEl.parentSource));\n return false;\n }\n return true;\n });\n\n const from = getNormalizedAxesList(dataInputAxes);\n const to = getNormalizedAxesList(rightPartAxes);\n\n linkers = linkers.concat(linkerMap.getLinkerColumnsForAxes({ from, to, throwWhenNoLinkExists: false }).map(v => new ColumnId({ name: v.columnId, type: v.spec.valueType })));\n return linkers;\n}\nexport async function getLinkerColumnsForSource(\n store: DataStore,\n linkerMap: LinkerMap,\n multipliesByMap: MultipliesByMap,\n dataInputAxes: AxisSpec[],\n secondarySource: ColumnOrAxisIdString,\n): Promise<ColumnId[]> {\n const columnOrAxisId = columnOrAxisIdFromString(secondarySource);\n return isColumnId(columnOrAxisId)\n ? getLinkerColumnsForColumn(columnOrAxisId, store, linkerMap, multipliesByMap, dataInputAxes)\n : getLinkerColumnsForAxis(columnOrAxisId, linkerMap, multipliesByMap, dataInputAxes);\n}\n\nexport function getNotAllowedAxes(\n columnSpec: PColumnSpec,\n dataInputAxesList: AxisSpec[], // axes from data-input\n linkerMap: LinkerMap, // composite linkers, without chains\n multipliesByMap: MultipliesByMap,\n): AxisSpec[] {\n const dataInputAxesSet = new Set(dataInputAxesList.map((v) => AxisId.fromAxisSpec(v).toCanonicalString()))\n const dataInputAxesIds = [...dataInputAxesSet];\n\n // check non-linkable axes only from this column\n const allColumnAxes = getNormalizedAxesList(columnSpec.axesSpec);\n // remove from the column axes - axes from data inputs\n const rightPartAxes = allColumnAxes.filter( // axes in data axes list are allowed, check the rest\n (axisSpec: AxisSpec) => !dataInputAxesSet.has(AxisId.fromAxisSpec(axisSpec).toCanonicalString())\n );\n\n const sourceAxes = getNormalizedAxesList(dataInputAxesList);\n const targetAxes = LinkerMap.getAxesRoots(rightPartAxes);\n\n const nonLinkableByLinkerMap = linkerMap.getNonLinkableAxes(sourceAxes, targetAxes); // rest probably reduced\n const filtered = nonLinkableByLinkerMap.filter((axisSpec) => {\n const freeId = AxisId.fromAxisSpec(axisSpec).toCanonicalString();\n return !dataInputAxesIds.some((id) => multipliesByMap.get(id)?.get(freeId) !== undefined);\n });\n return filtered;\n}\n\nexport function createHighlightColumn(highlightSelectedStates: SelectorStateFilter[], data: TableOuterJoinResult) {\n const dataLength = data.columnsData[Object.keys(data.columnsData)[0]].length;\n const highlightColumn = new Int32Array(dataLength).fill(0);\n const notEmptyHighlightStates = highlightSelectedStates.filter(s =>\n s.selectedFilterRange && (s.selectedFilterRange.min !== undefined || s.selectedFilterRange.max !== undefined) ||\n s.selectedFilterValues && s.selectedFilterValues.length\n )\n for (let rowIdx = 0; rowIdx < dataLength; rowIdx++) {\n let res = notEmptyHighlightStates.length === 0; // fill with 1 if nothing selected in highlighting filters\n for (let i = 0; i < notEmptyHighlightStates.length; i++) {\n const { selectedSource, selectedFilterValues, selectedFilterRange, type } = highlightSelectedStates[i];\n const sourceId = columnOrAxisIdFromString(selectedSource);\n const value = (isColumnId(sourceId) ? data.columnsData[selectedSource] : data.axesData[selectedSource])[rowIdx];\n if (selectedFilterValues !== undefined && selectedFilterValues.length) {\n res = res || selectedFilterValues.includes(String(value));\n }\n if (selectedFilterRange !== undefined && (selectedFilterRange.min !== undefined || selectedFilterRange.max !== undefined) && typeof value === 'number') {\n let rangeResult = true;\n if (selectedFilterRange.min !== undefined) {\n rangeResult = rangeResult && value >= selectedFilterRange.min;\n }\n if (selectedFilterRange.max !== undefined) {\n rangeResult = rangeResult && value <= selectedFilterRange.max;\n }\n res = res || rangeResult;\n }\n if (type === 'subset') {\n res = res || (value !== null && value !== undefined);\n }\n }\n if (res) {\n highlightColumn[rowIdx] = 1;\n }\n }\n return highlightColumn as unknown as PValue[];\n}\n"],"names":["getDefaultInfo","sourceIdStr","item","columnOrAxisIdFromString","name","type","isColumnId","getStateCopy","state","normalizeFilterReference","v","valueType","getFilterFromState","selectedSource","selectedFilterRange","selectedFilterValues","id","rangeFilters","isAxisId","getFiltersFromStates","states","result","getGlobalId","spec","_a","COLUMN_NAME_KEY","domain","_b","COLUMN_DOMAIN_KEY","canonicalize","getAxisSpecFromParents","store","axisId","parentSources","parentSource","parentId","columnSpec","AxisId","LABEL_COLUMN_NAME","getColumnOrAxisValueLabelsId","getAxisGlobalId","labelColumns","sourceGlobalId","labelColumn","ColumnId","getColumnOrAxisSpec","selectedId","labelsColumn","getColumnOrAxisLabel","label","COLUMN_LABEL_KEY","axisIsNonHomogenous","axisNature","AXIS_NATURE_KEY","dataColumnPredicateDefault","IS_VIRTUAL_COLUMN","SUBSET_FILTER_KEY","getAxesSpecsFromSources","idStrs","set","idStr","axisSpec","createLinkerMap","allLinkerColumns","IS_LINKER_COLUMN","LinkerMap","createMultipliesByMap","allMultiplyingColumns","MULTIPLIES_BY","multiplyingColumn","axes","annotationData","columnIdStr","multipliesBy","axis1","axis2","id1","id2","_d","_c","getLinkerColumnsForAxis","secondaryAxisId","linkerMap","multipliesByMap","dataInputAxes","axisIdStr","dataAxesIdWithLink","dataInputId","linkerEl","normalizedDataAxes","getNormalizedAxesList","getLinkerColumnsForColumn","secondaryColumnId","secondaryColumnSpec","linkers","dataInputAxesSet","dataInputAxesIds","rightPartAxes","from","to","u","getLinkerColumnsForSource","secondarySource","columnOrAxisId","getNotAllowedAxes","dataInputAxesList","sourceAxes","targetAxes","freeId","createHighlightColumn","highlightSelectedStates","data","dataLength","highlightColumn","notEmptyHighlightStates","s","rowIdx","res","i","sourceId","value","rangeResult"],"mappings":"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","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/graph-maker",
3
- "version": "1.1.158",
3
+ "version": "1.1.161",
4
4
  "type": "module",
5
5
  "main": "dist/lib.js",
6
6
  "types": "dist/lib.d.ts",
@@ -38,7 +38,7 @@
38
38
  "@ag-grid-community/core": "^32.3.3",
39
39
  "@milaboratories/helpers": "^1.6.15",
40
40
  "@milaboratories/miplots4": "^1.0.146",
41
- "@milaboratories/pf-plots": "^1.1.34",
41
+ "@milaboratories/pf-plots": "^1.1.37",
42
42
  "@platforma-sdk/model": "^1.42.36",
43
43
  "@platforma-sdk/ui-vue": "^1.42.36",
44
44
  "@types/d3-hierarchy": "^3.1.7",