@milaboratories/graph-maker 1.1.157 → 1.1.158

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/GraphMaker/constantsCommon.d.ts +1 -0
  2. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  3. package/dist/GraphMaker/constantsCommon.js +17 -16
  4. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  5. package/dist/GraphMaker/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.d.ts.map +1 -1
  6. package/dist/GraphMaker/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js +104 -93
  7. package/dist/GraphMaker/forms/AxesSettingsForm/HeatmapAxesSettingsForm.vue.js.map +1 -1
  8. package/dist/GraphMaker/index.vue.js +33 -33
  9. package/dist/GraphMaker/index.vue.js.map +1 -1
  10. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts +1 -0
  11. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.d.ts.map +1 -1
  12. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js +11 -11
  13. package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
  14. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +136 -135
  15. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
  16. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js +2 -2
  17. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/HeatmapSettingsImpl.js.map +1 -1
  18. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js +115 -107
  19. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/Annotation.js.map +1 -1
  20. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsCanvas.js +99 -0
  21. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsCanvas.js.map +1 -0
  22. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsSvg.js +57 -0
  23. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/AnnotationCellsSvg.js.map +1 -0
  24. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/index.js +43 -43
  25. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Annotations/index.js.map +1 -1
  26. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js +85 -0
  27. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/CanvasCells.js.map +1 -0
  28. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Captions/AxisCaptions.js +5 -5
  29. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Captions/GroupCaptions.js +16 -16
  30. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js +191 -197
  31. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/Chart.js.map +1 -1
  32. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js +29 -27
  33. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/ChartsGroup.js.map +1 -1
  34. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js +38 -0
  35. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/SvgCells.js.map +1 -0
  36. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js +44 -0
  37. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/components/tooltipUtils.js.map +1 -0
  38. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/constants.js +16 -15
  39. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/constants.js.map +1 -1
  40. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js +63 -66
  41. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getCells.js.map +1 -1
  42. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +64 -62
  43. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
  44. package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/utils/calculateChartSideElementSizes.js +9 -9
  45. package/dist/node_modules/@milaboratories/miplots4/dist/histogram/components/ChartsGroup.js +14 -14
  46. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js +5 -4
  47. package/dist/node_modules/@milaboratories/miplots4/dist/types/heatmap.js.map +1 -1
  48. package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js +10 -8
  49. package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js.map +1 -1
  50. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +21 -21
  51. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js +19 -19
  52. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js +8 -8
  53. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +9 -9
  54. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +7 -7
  55. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js +2 -2
  56. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js.map +1 -1
  57. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +59 -57
  58. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -1
  59. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/components/PlDataTable.js.map +1 -1
  60. package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js +13 -13
  61. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js +137 -133
  62. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js.map +1 -1
  63. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js +74 -74
  64. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js.map +1 -1
  65. package/package.json +3 -3
@@ -1,24 +1,25 @@
1
- import { AxisId as v, isColumnId as w, ColumnId as C } from "../spec.js";
2
- import S from "../_virtual/lodash.js";
1
+ import { AxisId as w, isColumnId as C, ColumnId as S } from "../spec.js";
2
+ import I from "../_virtual/lodash.js";
3
3
  import "../node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
4
- import { pTableValue as F } from "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/data_types.js";
4
+ import { pTableValue as $ } 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
- var b = Object.defineProperty, P = (y, e, t) => e in y ? b(y, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : y[e] = t, D = (y, e, t) => P(y, typeof e != "symbol" ? e + "" : e, t);
10
- const I = 1e6;
11
- function x(y, e) {
12
- if (y === "String")
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")
13
14
  return e.data;
14
- const t = new Array(e.data.length);
15
- for (let a = 0; a < e.data.length; a++)
16
- t[a] = F(e, a, { absent: null, na: null });
17
- return t;
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 });
18
+ return a;
18
19
  }
19
- class U {
20
+ class G {
20
21
  constructor(e, t) {
21
- D(this, "pframeHandle"), D(this, "pframeDriver"), this.pframeHandle = e, this.pframeDriver = t;
22
+ P(this, "pframeHandle"), P(this, "pframeDriver"), this.pframeHandle = e, this.pframeDriver = t;
22
23
  }
23
24
  async isColumnExisted(e) {
24
25
  return !!await this.getColumnSpecById(e);
@@ -30,148 +31,151 @@ class U {
30
31
  data: []
31
32
  };
32
33
  try {
33
- const a = Date.now(), s = await this.pframeDriver.calculateTableData(this.pframeHandle, {
34
+ const a = Date.now(), r = await this.pframeDriver.calculateTableData(this.pframeHandle, {
34
35
  src: {
35
36
  type: "column",
36
37
  column: e.name
37
38
  },
38
39
  filters: t,
39
40
  sorting: []
40
- }), o = s.filter((l) => l.spec.type === "axis"), i = s.filter((l) => l.spec.type === "column");
41
+ }), n = r.filter((s) => s.spec.type === "axis"), o = r.filter((s) => s.spec.type === "column");
41
42
  return {
42
- axesData: o.reduce((l, p) => {
43
- const m = v.fromAxisSpec(p.spec.spec);
44
- return l[m.toCanonicalString()] = x(m.type, p.data), l;
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;
45
46
  }, {}),
46
- data: i.length ? x(e.type, i[0].data) : []
47
+ data: o.length ? x(e.type, o[0].data) : []
47
48
  };
48
49
  } catch (a) {
49
50
  throw console.error("PFrame: calculateTableData error"), a;
50
51
  }
51
52
  }
52
- async getColumnUniqueValues(e, t = I, a = []) {
53
+ async getColumnUniqueValues(e, t = q, a = []) {
53
54
  if (!await this.isColumnExisted(e))
54
55
  return { values: [], overflow: !1 };
55
- const s = {
56
+ const r = {
56
57
  columnId: e.name,
57
58
  filters: a,
58
59
  limit: t
59
60
  };
60
61
  try {
61
- const o = Date.now(), i = await this.pframeDriver.getUniqueValues(this.pframeHandle, s);
62
- let l = !1;
63
- return i.overflow && (l = !0, console.warn(`More than ${t} values for ${e.name} column`)), {
64
- values: Array.from(i.values.data).map(String),
65
- overflow: l
62
+ const n = Date.now(), o = await this.pframeDriver.getUniqueValues(this.pframeHandle, r);
63
+ let s = !1;
64
+ return o.overflow && (s = !0, console.warn(`More than ${t} values for ${e.name} column`)), {
65
+ values: Array.from(o.values.data).map(String),
66
+ overflow: s
66
67
  };
67
- } catch (o) {
68
- throw console.error("PFrame: getUniqueValues for column error"), o;
68
+ } catch (n) {
69
+ throw console.error("PFrame: getUniqueValues for column error"), n;
69
70
  }
70
71
  }
71
- async getAxisUniqueValues(e, t, a = I, s = []) {
72
- const o = t.filter(w), i = await Promise.all(o.map((m) => this.getColumnSpecById(m))), l = e.toCanonicalString(), p = o.filter((m, n) => {
73
- const u = i[n];
74
- return u !== null && u.axesSpec.some((c) => v.fromAxisSpec(c).toCanonicalString() === l);
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);
75
76
  });
76
- if (p.length === 0)
77
- return { values: [], overflow: !1 };
77
+ if (l.length === 0)
78
+ return console.warn("Axis unique values requested without parent columns"), { values: [], overflow: !1 };
78
79
  try {
79
- const m = Date.now(), n = await Promise.all(
80
- p.map(
81
- (c) => this.pframeDriver.getUniqueValues(this.pframeHandle, {
82
- columnId: c.name,
80
+ const c = Date.now(), i = await Promise.all(
81
+ l.map(
82
+ (p) => this.pframeDriver.getUniqueValues(this.pframeHandle, {
83
+ columnId: p.name,
83
84
  axis: e.toPFrameId(),
84
- filters: s,
85
+ filters: r,
85
86
  limit: a
86
87
  })
87
88
  )
88
89
  );
89
- let u = !1;
90
- return n.forEach((c, f) => {
91
- c.overflow && (u = !0, console.warn(`More than ${a} values for ${p[f].name} column`));
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`));
92
93
  }), {
93
- values: S.uniq(
94
- S.flatten(n.map((c) => Array.from(c.values.data).map(String)))
94
+ values: I.uniq(
95
+ I.flatten(i.map((p) => Array.from(p.values.data).map(String)))
95
96
  ),
96
- overflow: u
97
+ overflow: m
97
98
  };
98
- } catch (m) {
99
- return console.error("PFrame: getUniqueValues for axis error", m), { values: [], overflow: !1 };
99
+ } catch (c) {
100
+ return console.error("PFrame: getUniqueValues for axis error", c), { values: [], overflow: !1 };
100
101
  }
101
102
  }
102
- async getTableOuterJoin(e, t, a = [], s = !0, o = [], i = []) {
103
- const l = e.filter(w), p = t.filter(w), m = {
103
+ // Special fake columns that are created basing on some existing column marked with special annotation;
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({
114
+ type: "artificialColumn",
115
+ column: e[r].name,
116
+ newId: e[r].name + "1",
117
+ axesIndices: n
118
+ }), t;
119
+ }, []);
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 = {
104
123
  src: {
105
124
  type: "outer",
106
125
  primary: {
107
- type: s ? "inner" : "full",
108
- entries: l.map((n, u) => {
109
- var c;
110
- const f = (c = o[u]) == null ? void 0 : c.map((r) => ({
111
- type: "constant",
112
- axisIndex: r.idx,
113
- constant: r.value
114
- })).filter((r) => r.constant !== void 0);
115
- return f != null && f.length ? {
116
- type: "slicedColumn",
117
- newId: n.name,
118
- column: n.name,
119
- axisFilters: f
120
- } : {
126
+ type: "full",
127
+ //primaryInnerJoin ? 'inner' : 'full',
128
+ entries: [
129
+ ...n.map((i) => ({
121
130
  type: "column",
122
- column: n.name
123
- };
124
- })
131
+ column: i.name
132
+ })),
133
+ ...s
134
+ ]
125
135
  },
126
- secondary: p.map((n, u) => {
127
- var c;
128
- const f = (c = i[u]) == null ? void 0 : c.map((r) => ({
129
- type: "constant",
130
- axisIndex: r.idx,
131
- constant: r.value
132
- })).filter((r) => r.constant !== void 0);
133
- return f != null && f.length ? {
134
- type: "slicedColumn",
135
- newId: n.name,
136
- column: n.name,
137
- axisFilters: f
138
- } : {
136
+ secondary: [
137
+ ...o.map((i) => ({
139
138
  type: "column",
140
- column: n.name
141
- };
142
- })
139
+ column: i.name
140
+ })),
141
+ ...l
142
+ ]
143
143
  },
144
144
  filters: a,
145
145
  sorting: []
146
146
  };
147
147
  try {
148
- const n = Date.now(), u = await this.pframeDriver.calculateTableData(this.pframeHandle, m), c = u.filter((r) => r.spec.type === "axis"), f = u.filter((r) => r.spec.type === "column");
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");
149
149
  return {
150
- axesData: c.reduce((r, d) => {
151
- const h = v.fromAxisSpec(d.spec.spec);
152
- return r[h.toCanonicalString()] = x(h.type, d.data), r;
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;
153
153
  }, {}),
154
- columnsData: f.reduce((r, d) => {
155
- const h = d.spec.spec, g = new C({
156
- name: d.spec.id,
157
- type: h.valueType
158
- });
159
- return r[g.toCanonicalString()] = x(g.type, d.data), r;
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;
160
164
  }, {}),
161
- columnSpecs: f.reduce((r, d) => {
162
- const h = d.spec.spec, g = new C({
163
- name: d.spec.id,
164
- type: h.valueType
165
+ columnSpecs: g.reduce((u, f) => {
166
+ const d = f.spec.spec, y = new S({
167
+ name: f.spec.id,
168
+ type: d.valueType
165
169
  });
166
- return r[g.toCanonicalString()] = h, r;
170
+ return u[y.toCanonicalString()] = d, u;
167
171
  }, {}),
168
- axesSpecs: c.reduce((r, d) => {
169
- const h = d.spec.spec, g = v.fromAxisSpec(h);
170
- return r[g.toCanonicalString()] = h, r;
172
+ axesSpecs: p.reduce((u, f) => {
173
+ const d = f.spec.spec, y = w.fromAxisSpec(d);
174
+ return u[y.toCanonicalString()] = d, u;
171
175
  }, {})
172
176
  };
173
- } catch (n) {
174
- throw console.error("PFrame: table outer join error"), console.info("error with request: ", m), n;
177
+ } catch (i) {
178
+ throw console.error("PFrame: table outer join error"), console.info("error with request: ", c), i;
175
179
  }
176
180
  }
177
181
  async getColumnSpecById(e) {
@@ -184,70 +188,70 @@ class U {
184
188
  }
185
189
  async getColumnAxesIds(e) {
186
190
  var t;
187
- return ((t = await this.getColumnSpecById(e)) == null ? void 0 : t.axesSpec.map((a) => v.fromAxisSpec(a))) ?? [];
191
+ return ((t = await this.getColumnSpecById(e)) == null ? void 0 : t.axesSpec.map((a) => w.fromAxisSpec(a))) ?? [];
188
192
  }
189
193
  async getRequestColumnsFromSelectedSources(e) {
190
194
  var t;
191
195
  const a = [];
192
- for (const s of e)
193
- if (w(s)) {
194
- const o = ((t = await this.getColumnSpecById(s)) == null ? void 0 : t.axesSpec) ?? [];
195
- a.push(...o.map((i) => v.fromAxisSpec(i).toPFrameId()));
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()));
196
200
  }
197
201
  return a;
198
202
  }
199
203
  async getColumnsList() {
200
204
  return this.pframeDriver.listColumns(this.pframeHandle);
201
205
  }
202
- async getColumnsFull(e, t, a, s, o, i) {
206
+ async getColumnsFull(e, t, a, r, n, o) {
203
207
  try {
204
- const l = {
208
+ const s = {
205
209
  columnFilter: {
206
210
  type: a,
207
- name: s,
208
- annotationValue: o,
209
- annotationPattern: i == null ? void 0 : i.reduce((u, c) => (u[c] = ".+", u), {})
211
+ name: r,
212
+ annotationValue: n,
213
+ annotationPattern: o == null ? void 0 : o.reduce((m, p) => (m[p] = ".+", m), {})
210
214
  },
211
215
  compatibleWith: await this.getRequestColumnsFromSelectedSources(e),
212
216
  strictlyCompatible: t
213
217
  // should be true if we want to get meta and false if X/Y
214
- }, p = Date.now(), m = await this.pframeDriver.findColumns(this.pframeHandle, l), n = [];
215
- return m.hits.forEach((u) => {
216
- n.push(u);
217
- }), n;
218
- } catch (l) {
219
- throw console.error("PFrame: findColumns error"), l;
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;
222
+ } catch (s) {
223
+ throw console.error("PFrame: findColumns error"), s;
220
224
  }
221
225
  }
222
- async getColumns(e, t, a, s, o) {
223
- return (await this.getColumnsFull(e, t, a, s, o)).map(
224
- (i) => new C({
225
- name: i.columnId,
226
- type: i.spec.valueType
226
+ async getColumns(e, t, a, r, n) {
227
+ return (await this.getColumnsFull(e, t, a, r, n)).map(
228
+ (o) => new S({
229
+ name: o.columnId,
230
+ type: o.spec.valueType
227
231
  })
228
232
  );
229
233
  }
230
- async findColumnBy(e, t, a, s) {
234
+ async findColumnBy(e, t, a, r) {
231
235
  try {
232
- const o = {
236
+ const n = {
233
237
  columnFilter: {
234
238
  name: [e],
235
239
  ...t ? { type: [t] } : {},
236
240
  ...a ? { annotationValue: a } : {},
237
- ...s ? { domainValue: s } : {}
241
+ ...r ? { domainValue: r } : {}
238
242
  },
239
243
  compatibleWith: [],
240
244
  strictlyCompatible: !1
241
- }, i = Date.now(), l = await this.pframeDriver.findColumns(this.pframeHandle, o), p = [];
242
- return l.hits.forEach(({ columnId: m, spec: n }) => {
243
- p.push(new C({ name: m, type: n.valueType }));
244
- }), p.length > 1 && console.warn(`More than 1 column found for ${e}}`), p.length === 0 ? (console.warn(`No columns found for ${e}}`), null) : p[0];
245
- } catch (o) {
246
- throw console.error("PFrame: findColumns error"), o;
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;
247
251
  }
248
252
  }
249
253
  }
250
254
  export {
251
- U as ColumnsProvider
255
+ G as ColumnsProvider
252
256
  };
253
257
  //# sourceMappingURL=ColumnsProvider.js.map
@@ -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} from '@milaboratories/pl-model-common';\nimport {pTableValue} from '@milaboratories/pl-model-common';\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): 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: null, 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 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 async getTableOuterJoin(\n primaryIds: (ColumnId | AxisId)[],\n secondaryIds: (ColumnId | AxisId)[],\n filters: PTableRecordSingleValueFilterV2[] = [],\n primaryInnerJoin = true,\n primarySourcesFixedAxes:{idx:number, value:PValue}[][] = [],\n secondarySourcesFixedAxes:{idx:number, value:PValue}[][] = []\n ): Promise<TableOuterJoinResult> {\n const primaryColumns = primaryIds.filter(isColumnId);\n const secondaryColumns = secondaryIds.filter(isColumnId);\n const request = {\n src: {\n type: 'outer',\n primary: {\n type: primaryInnerJoin ? 'inner' : 'full',\n entries: primaryColumns.map((item, idx) => {\n const axisFilters = primarySourcesFixedAxes[idx]?.map(v => ({\n type: 'constant',\n axisIndex: v.idx,\n constant: v.value\n })).filter((v) => v.constant !== undefined);\n return axisFilters?.length\n ? {\n type: 'slicedColumn',\n newId: item.name,\n column: item.name as PObjectId,\n axisFilters\n } : {\n type: 'column',\n column: item.name as PObjectId,\n }\n })\n },\n secondary: secondaryColumns.map((item, idx) => {\n const axisFilters = secondarySourcesFixedAxes[idx]?.map(v => ({\n type: 'constant',\n axisIndex: v.idx,\n constant: v.value\n })).filter((v) => v.constant !== undefined);\n return axisFilters?.length\n ? {\n type: 'slicedColumn',\n newId: item.name,\n column: item.name as PObjectId,\n axisFilters\n } : {\n type: 'column',\n column: item.name as PObjectId,\n }\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 res[id.toCanonicalString()] = convertColumnData(id.type, item.data);\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","res","i","pTableValue","ColumnsProvider","pframeHandle","pframeDriver","__publicField","id","filters","start","axes","item","columns","AxisId","err","limit","request","overflow","axisId","parents","columnParents","isColumnId","specs","c","axisIdStr","realParents","idx","columnSpec","axisSpec","responses","p","lodash","r","primaryIds","secondaryIds","primaryInnerJoin","primarySourcesFixedAxes","secondarySourcesFixedAxes","primaryColumns","secondaryColumns","axisFilters","_a","v","n","spec","ColumnId","sources","result","axesSpec","selectedSources","strictlyCompatible","types","names","annotations","annotationsNotEmpty","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} 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]}