@milaboratories/graph-maker 1.1.166 → 1.1.168
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/GraphMaker/constantsCommon.d.ts +2 -9
- package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
- package/dist/GraphMaker/constantsCommon.js +78 -83
- package/dist/GraphMaker/constantsCommon.js.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js +8 -2
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/DiscreteForm.vue.js +26 -20
- package/dist/GraphMaker/forms/DataMappingForm/DiscreteForm.vue.js.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedArea.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedArea.vue.js +56 -38
- package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedArea.vue.js.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedBar.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedBar.vue.js +48 -30
- package/dist/GraphMaker/forms/LayersForm/Layer/discrete/StackedBar.vue.js.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot/Scatter.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot/Scatter.vue.js +37 -31
- package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot/Scatter.vue.js.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot-umap/Scatter.vue.js +30 -24
- package/dist/GraphMaker/forms/LayersForm/Layer/scatterplot-umap/Scatter.vue.js.map +1 -1
- package/dist/GraphMaker/forms/StatisticsForm/DiscreteStatisticsForm.vue.js +33 -27
- package/dist/GraphMaker/forms/StatisticsForm/DiscreteStatisticsForm.vue.js.map +1 -1
- package/dist/GraphMaker/index.vue.js +8 -2
- package/dist/GraphMaker/index.vue.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js +22 -16
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeBubbleSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts +2 -0
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.js +17 -11
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js +26 -20
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHeatmapSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.js +29 -23
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeHistogramSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js +83 -68
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js +25 -19
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeScatterplotUmapSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/getLayersDataFromForms.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/getLayersDataFromForms.js +7 -5
- package/dist/GraphMaker/utils/createChartSettingsForRender/getLayersDataFromForms.js.map +1 -1
- package/dist/GraphMaker/utils/getUsedAesInMapping.js +37 -31
- package/dist/GraphMaker/utils/getUsedAesInMapping.js.map +1 -1
- package/dist/GraphMaker/utils/loadDefaultSources.d.ts.map +1 -1
- package/dist/GraphMaker/utils/loadDefaultSources.js +36 -31
- package/dist/GraphMaker/utils/loadDefaultSources.js.map +1 -1
- package/dist/_virtual/stringify.js +5 -0
- package/dist/_virtual/stringify.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js +8 -8
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/DiscreteSettingsImpl.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +8 -8
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js +54 -29
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/layers/stackedBar.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js +12 -6
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/d3-array/src/min.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js +2 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/types/discrete.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +106 -107
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js +120 -121
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js +83 -84
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/dendro.js +4 -4
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/discrete.js +11 -11
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js +123 -124
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/histogram.js +8 -8
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +116 -117
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +100 -102
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +148 -119
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/components/PlDataTable.js +4 -4
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js +5 -5
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js +8 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +182 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/errors.js +18 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/errors.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/json.js +12 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/json.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/plid.js +7 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/plid.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/ref.js +8 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/node_modules/@platforma-sdk/model/node_modules/@milaboratories/pl-model-common/dist/ref.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js +105 -111
- package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js +158 -163
- package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js.map +1 -1
- package/dist/node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js +36 -0
- package/dist/node_modules/@milaboratories/pl-error-like/dist/error_like_shape.js.map +1 -0
- package/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js +8 -0
- package/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js.map +1 -0
- package/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js +52 -0
- package/dist/node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js.map +1 -0
- package/dist/node_modules/@milaboratories/pl-model-common/dist/plid.js +7 -0
- package/dist/node_modules/@milaboratories/pl-model-common/dist/plid.js.map +1 -0
- package/dist/node_modules/@milaboratories/pl-model-common/dist/ref.js +8 -0
- package/dist/node_modules/@milaboratories/pl-model-common/dist/ref.js.map +1 -0
- package/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js +16 -0
- package/dist/node_modules/@platforma-sdk/model/dist/render/util/label.js.map +1 -0
- package/dist/node_modules/json-stringify-safe/stringify.js +20 -0
- package/dist/node_modules/json-stringify-safe/stringify.js.map +1 -0
- package/dist/node_modules/zod/lib/index.js +2978 -0
- package/dist/node_modules/zod/lib/index.js.map +1 -0
- package/package.json +4 -4
- package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js +0 -18
- package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js.map +0 -1
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import { AxisId as g, isColumnId as
|
|
2
|
-
import
|
|
1
|
+
import { AxisId as g, isColumnId as S, ColumnId as D } from "../spec.js";
|
|
2
|
+
import V from "../_virtual/lodash.js";
|
|
3
3
|
import "../node_modules/@milaboratories/pl-model-common/dist/drivers/blob.js";
|
|
4
4
|
import { pTableValue as M } from "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/data_types.js";
|
|
5
|
-
import "../node_modules/@milaboratories/pl-model-common/dist/drivers/pframe/spec/spec.js";
|
|
5
|
+
import { readAnnotation as F, Annotation as b } from "../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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (S === "String")
|
|
9
|
+
var $ = Object.defineProperty, G = (x, e, t) => e in x ? $(x, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : x[e] = t, H = (x, e, t) => G(x, typeof e != "symbol" ? e + "" : e, t);
|
|
10
|
+
const T = 1e6;
|
|
11
|
+
function A(x, e, t = null) {
|
|
12
|
+
if (x === "String")
|
|
14
13
|
return e.data;
|
|
15
14
|
const a = new Array(e.data.length);
|
|
16
|
-
for (let
|
|
17
|
-
a[
|
|
15
|
+
for (let r = 0; r < e.data.length; r++)
|
|
16
|
+
a[r] = M(e, r, { absent: t, na: null });
|
|
18
17
|
return a;
|
|
19
18
|
}
|
|
20
|
-
class
|
|
19
|
+
class k {
|
|
21
20
|
constructor(e, t) {
|
|
22
21
|
H(this, "pframeHandle"), H(this, "pframeDriver"), this.pframeHandle = e, this.pframeDriver = t;
|
|
23
22
|
}
|
|
@@ -31,18 +30,18 @@ class G {
|
|
|
31
30
|
data: []
|
|
32
31
|
};
|
|
33
32
|
try {
|
|
34
|
-
const a = Date.now(),
|
|
33
|
+
const a = Date.now(), r = await this.pframeDriver.calculateTableData(this.pframeHandle, {
|
|
35
34
|
src: {
|
|
36
35
|
type: "column",
|
|
37
36
|
column: e.name
|
|
38
37
|
},
|
|
39
38
|
filters: t,
|
|
40
39
|
sorting: []
|
|
41
|
-
}),
|
|
40
|
+
}), n = r.filter((s) => s.spec.type === "axis"), o = r.filter((s) => s.spec.type === "column");
|
|
42
41
|
return {
|
|
43
|
-
axesData:
|
|
44
|
-
const
|
|
45
|
-
return s[
|
|
42
|
+
axesData: n.reduce((s, c) => {
|
|
43
|
+
const m = g.fromAxisSpec(c.spec.spec);
|
|
44
|
+
return s[m.toCanonicalString()] = A(m.type, c.data), s;
|
|
46
45
|
}, {}),
|
|
47
46
|
data: o.length ? A(e.type, o[0].data) : []
|
|
48
47
|
};
|
|
@@ -50,125 +49,124 @@ class G {
|
|
|
50
49
|
throw console.error("PFrame: calculateTableData error"), a;
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
|
-
async getColumnUniqueValues(e, t =
|
|
52
|
+
async getColumnUniqueValues(e, t = T, a = []) {
|
|
54
53
|
if (!await this.isColumnExisted(e))
|
|
55
54
|
return { values: [], overflow: !1 };
|
|
56
|
-
const
|
|
55
|
+
const r = {
|
|
57
56
|
columnId: e.name,
|
|
58
57
|
filters: a,
|
|
59
58
|
limit: t
|
|
60
59
|
};
|
|
61
60
|
try {
|
|
62
|
-
const
|
|
61
|
+
const n = Date.now(), o = await this.pframeDriver.getUniqueValues(this.pframeHandle, r);
|
|
63
62
|
let s = !1;
|
|
64
63
|
return o.overflow && (s = !0, console.warn(`More than ${t} values for ${e.name} column`)), {
|
|
65
64
|
values: Array.from(o.values.data).map(String),
|
|
66
65
|
overflow: s
|
|
67
66
|
};
|
|
68
|
-
} catch (
|
|
69
|
-
throw console.error("PFrame: getUniqueValues for column error"),
|
|
67
|
+
} catch (n) {
|
|
68
|
+
throw console.error("PFrame: getUniqueValues for column error"), n;
|
|
70
69
|
}
|
|
71
70
|
}
|
|
72
|
-
async getAxisUniqueValues(e, t, a =
|
|
73
|
-
const
|
|
71
|
+
async getAxisUniqueValues(e, t, a = T, r = []) {
|
|
72
|
+
const n = t.filter(S), o = await Promise.all(n.map((m) => this.getColumnSpecById(m))), s = e.toCanonicalString(), c = n.filter((m, h) => {
|
|
74
73
|
const p = o[h];
|
|
75
74
|
return p !== null && p.axesSpec.some((f) => g.fromAxisSpec(f).toCanonicalString() === s);
|
|
76
75
|
});
|
|
77
|
-
if (
|
|
76
|
+
if (c.length === 0)
|
|
78
77
|
return console.warn("Axis unique values requested without parent columns"), { values: [], overflow: !1 };
|
|
79
78
|
try {
|
|
80
|
-
const
|
|
81
|
-
|
|
79
|
+
const m = Date.now(), h = await Promise.all(
|
|
80
|
+
c.map(
|
|
82
81
|
(f) => this.pframeDriver.getUniqueValues(this.pframeHandle, {
|
|
83
82
|
columnId: f.name,
|
|
84
83
|
axis: e.toPFrameId(),
|
|
85
|
-
filters:
|
|
84
|
+
filters: r,
|
|
86
85
|
limit: a
|
|
87
86
|
})
|
|
88
87
|
)
|
|
89
88
|
);
|
|
90
89
|
let p = !1;
|
|
91
|
-
return h.forEach((f,
|
|
92
|
-
f.overflow && (p = !0, console.warn(`More than ${a} values for ${
|
|
90
|
+
return h.forEach((f, I) => {
|
|
91
|
+
f.overflow && (p = !0, console.warn(`More than ${a} values for ${c[I].name} column`));
|
|
93
92
|
}), {
|
|
94
|
-
values:
|
|
95
|
-
|
|
93
|
+
values: V.uniq(
|
|
94
|
+
V.flatten(h.map((f) => Array.from(f.values.data).map(String)))
|
|
96
95
|
),
|
|
97
96
|
overflow: p
|
|
98
97
|
};
|
|
99
|
-
} catch (
|
|
100
|
-
return console.error("PFrame: getUniqueValues for axis error",
|
|
98
|
+
} catch (m) {
|
|
99
|
+
return console.error("PFrame: getUniqueValues for axis error", m), { values: [], overflow: !1 };
|
|
101
100
|
}
|
|
102
101
|
}
|
|
103
102
|
// Special fake columns that are created basing on some existing column marked with special annotation;
|
|
104
103
|
// these columns contain all the combination of its axes by ids;
|
|
105
104
|
getArtificialColumns(e, t) {
|
|
106
|
-
return t.reduce((a,
|
|
107
|
-
if (!
|
|
105
|
+
return t.reduce((a, r, n) => {
|
|
106
|
+
if (!r)
|
|
108
107
|
return a;
|
|
109
108
|
const o = [];
|
|
110
|
-
return
|
|
111
|
-
|
|
112
|
-
((c = s.annotations) == null ? void 0 : c[T]) === "true" && o.push(u);
|
|
109
|
+
return r.axesSpec.forEach((s, c) => {
|
|
110
|
+
F(s, b.Graph.IsDenseAxis) === "true" && o.push(c);
|
|
113
111
|
}), o.length && a.push({
|
|
114
112
|
type: "artificialColumn",
|
|
115
|
-
column: e[
|
|
116
|
-
newId: e[
|
|
113
|
+
column: e[n].name,
|
|
114
|
+
newId: e[n].name + "1",
|
|
117
115
|
axesIndices: o
|
|
118
116
|
}), a;
|
|
119
117
|
}, []);
|
|
120
118
|
}
|
|
121
|
-
async getTableOuterJoin(e, t, a = [],
|
|
122
|
-
var
|
|
123
|
-
const o = e.filter(
|
|
124
|
-
for (const
|
|
125
|
-
if (!(
|
|
126
|
-
p.push(
|
|
119
|
+
async getTableOuterJoin(e, t, a = [], r = !0) {
|
|
120
|
+
var n;
|
|
121
|
+
const o = e.filter(S), s = t.filter(S), c = await Promise.all(e.map((i) => this.getColumnSpecById(i))), m = await Promise.all(t.map((i) => this.getColumnSpecById(i))), h = this.getArtificialColumns(o, c), p = [], f = {}, I = new Set(c.flatMap((i) => ((i == null ? void 0 : i.axesSpec) ?? []).map((w) => g.fromAxisSpec(w).toCanonicalString())));
|
|
122
|
+
for (const i of a) {
|
|
123
|
+
if (!(i.predicate.operator === "Or" && i.column.type === "axis")) {
|
|
124
|
+
p.push(i);
|
|
127
125
|
continue;
|
|
128
126
|
}
|
|
129
|
-
const
|
|
130
|
-
if (
|
|
131
|
-
p.push(
|
|
127
|
+
const w = new g(i.column.id).toCanonicalString();
|
|
128
|
+
if (I.has(w))
|
|
129
|
+
p.push(i);
|
|
132
130
|
else {
|
|
133
|
-
const y = s.findIndex((
|
|
134
|
-
var
|
|
135
|
-
return (
|
|
131
|
+
const y = s.findIndex((v, l) => {
|
|
132
|
+
var u;
|
|
133
|
+
return (u = m[l]) == null ? void 0 : u.axesSpec.some((d) => g.fromAxisSpec(d).toCanonicalString() === w);
|
|
136
134
|
});
|
|
137
135
|
if (y !== -1) {
|
|
138
|
-
const
|
|
139
|
-
f[
|
|
136
|
+
const v = s[y].name;
|
|
137
|
+
f[v] || (f[v] = {
|
|
140
138
|
type: "slicedColumn",
|
|
141
|
-
newId:
|
|
142
|
-
column:
|
|
139
|
+
newId: v,
|
|
140
|
+
column: v,
|
|
143
141
|
axisFilters: []
|
|
144
142
|
});
|
|
145
|
-
const
|
|
146
|
-
|
|
143
|
+
const l = (n = m[y]) == null ? void 0 : n.axesSpec.findIndex((u) => g.fromAxisSpec(u).toCanonicalString() === w);
|
|
144
|
+
i.predicate.operands[0].operator === "Equal" && i.predicate.operands[0].reference !== void 0 && f[v].axisFilters.push({
|
|
147
145
|
type: "constant",
|
|
148
|
-
axisIndex:
|
|
149
|
-
constant:
|
|
146
|
+
axisIndex: l ?? 0,
|
|
147
|
+
constant: i.predicate.operands[0].reference
|
|
150
148
|
});
|
|
151
149
|
}
|
|
152
150
|
}
|
|
153
151
|
}
|
|
154
|
-
const
|
|
152
|
+
const P = {
|
|
155
153
|
src: {
|
|
156
154
|
type: "outer",
|
|
157
155
|
primary: {
|
|
158
156
|
type: "full",
|
|
159
157
|
entries: [
|
|
160
|
-
...o.map((
|
|
158
|
+
...o.map((i) => ({
|
|
161
159
|
type: "column",
|
|
162
|
-
column:
|
|
160
|
+
column: i.name
|
|
163
161
|
})),
|
|
164
162
|
...h
|
|
165
163
|
]
|
|
166
164
|
},
|
|
167
|
-
secondary: s.map((
|
|
168
|
-
const y = f[
|
|
165
|
+
secondary: s.map((i, w) => {
|
|
166
|
+
const y = f[i.name];
|
|
169
167
|
return y && y.axisFilters.length ? y : {
|
|
170
168
|
type: "column",
|
|
171
|
-
column:
|
|
169
|
+
column: i.name
|
|
172
170
|
};
|
|
173
171
|
})
|
|
174
172
|
},
|
|
@@ -176,37 +174,33 @@ class G {
|
|
|
176
174
|
sorting: []
|
|
177
175
|
};
|
|
178
176
|
try {
|
|
179
|
-
const
|
|
177
|
+
const i = Date.now(), w = await this.pframeDriver.calculateTableData(this.pframeHandle, P), y = w.filter((l) => l.spec.type === "axis"), v = w.filter((l) => l.spec.type === "column");
|
|
180
178
|
return {
|
|
181
|
-
axesData: y.reduce((
|
|
182
|
-
const d = g.fromAxisSpec(
|
|
183
|
-
return
|
|
179
|
+
axesData: y.reduce((l, u) => {
|
|
180
|
+
const d = g.fromAxisSpec(u.spec.spec);
|
|
181
|
+
return l[d.toCanonicalString()] = A(d.type, u.data), l;
|
|
184
182
|
}, {}),
|
|
185
|
-
columnsData:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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;
|
|
183
|
+
columnsData: v.reduce((l, u) => {
|
|
184
|
+
const d = u.spec.spec, C = new D({
|
|
185
|
+
name: u.spec.id,
|
|
186
|
+
type: d.valueType
|
|
187
|
+
}), B = d.axesSpec.some((U) => F(U, b.Graph.IsDenseAxis) === "true"), q = F(d, b.Graph.TreatAbsentValuesAs), E = q ? Number(q) : B ? 0 : null;
|
|
188
|
+
return l[C.toCanonicalString()] = A(C.type, u.data, E), l;
|
|
195
189
|
}, {}),
|
|
196
|
-
columnSpecs:
|
|
197
|
-
const d =
|
|
198
|
-
name:
|
|
190
|
+
columnSpecs: v.reduce((l, u) => {
|
|
191
|
+
const d = u.spec.spec, C = new D({
|
|
192
|
+
name: u.spec.id,
|
|
199
193
|
type: d.valueType
|
|
200
194
|
});
|
|
201
|
-
return
|
|
195
|
+
return l[C.toCanonicalString()] = d, l;
|
|
202
196
|
}, {}),
|
|
203
|
-
axesSpecs: y.reduce((
|
|
204
|
-
const d =
|
|
205
|
-
return
|
|
197
|
+
axesSpecs: y.reduce((l, u) => {
|
|
198
|
+
const d = u.spec.spec, C = g.fromAxisSpec(d);
|
|
199
|
+
return l[C.toCanonicalString()] = d, l;
|
|
206
200
|
}, {})
|
|
207
201
|
};
|
|
208
|
-
} catch (
|
|
209
|
-
throw console.error("PFrame: table outer join error"), console.info("error with request: ",
|
|
202
|
+
} catch (i) {
|
|
203
|
+
throw console.error("PFrame: table outer join error"), console.info("error with request: ", P), i;
|
|
210
204
|
}
|
|
211
205
|
}
|
|
212
206
|
async getColumnSpecById(e) {
|
|
@@ -224,65 +218,65 @@ class G {
|
|
|
224
218
|
async getRequestColumnsFromSelectedSources(e) {
|
|
225
219
|
var t;
|
|
226
220
|
const a = [];
|
|
227
|
-
for (const
|
|
228
|
-
if (
|
|
229
|
-
const
|
|
230
|
-
a.push(...
|
|
221
|
+
for (const r of e)
|
|
222
|
+
if (S(r)) {
|
|
223
|
+
const n = ((t = await this.getColumnSpecById(r)) == null ? void 0 : t.axesSpec) ?? [];
|
|
224
|
+
a.push(...n.map((o) => g.fromAxisSpec(o).toPFrameId()));
|
|
231
225
|
}
|
|
232
226
|
return a;
|
|
233
227
|
}
|
|
234
228
|
async getColumnsList() {
|
|
235
229
|
return this.pframeDriver.listColumns(this.pframeHandle);
|
|
236
230
|
}
|
|
237
|
-
async getColumnsFull(e, t, a,
|
|
231
|
+
async getColumnsFull(e, t, a, r, n, o) {
|
|
238
232
|
try {
|
|
239
233
|
const s = {
|
|
240
234
|
columnFilter: {
|
|
241
235
|
type: a,
|
|
242
|
-
name:
|
|
243
|
-
annotationValue:
|
|
236
|
+
name: r,
|
|
237
|
+
annotationValue: n,
|
|
244
238
|
annotationPattern: o == null ? void 0 : o.reduce((p, f) => (p[f] = ".+", p), {})
|
|
245
239
|
},
|
|
246
240
|
compatibleWith: await this.getRequestColumnsFromSelectedSources(e),
|
|
247
241
|
strictlyCompatible: t
|
|
248
242
|
// should be true if we want to get meta and false if X/Y
|
|
249
|
-
},
|
|
250
|
-
return
|
|
243
|
+
}, c = Date.now(), m = await this.pframeDriver.findColumns(this.pframeHandle, s), h = [];
|
|
244
|
+
return m.hits.forEach((p) => {
|
|
251
245
|
h.push(p);
|
|
252
246
|
}), h;
|
|
253
247
|
} catch (s) {
|
|
254
248
|
throw console.error("PFrame: findColumns error"), s;
|
|
255
249
|
}
|
|
256
250
|
}
|
|
257
|
-
async getColumns(e, t, a,
|
|
258
|
-
return (await this.getColumnsFull(e, t, a,
|
|
259
|
-
(o) => new
|
|
251
|
+
async getColumns(e, t, a, r, n) {
|
|
252
|
+
return (await this.getColumnsFull(e, t, a, r, n)).map(
|
|
253
|
+
(o) => new D({
|
|
260
254
|
name: o.columnId,
|
|
261
255
|
type: o.spec.valueType
|
|
262
256
|
})
|
|
263
257
|
);
|
|
264
258
|
}
|
|
265
|
-
async findColumnBy(e, t, a,
|
|
259
|
+
async findColumnBy(e, t, a, r) {
|
|
266
260
|
try {
|
|
267
|
-
const
|
|
261
|
+
const n = {
|
|
268
262
|
columnFilter: {
|
|
269
263
|
name: [e],
|
|
270
264
|
...t ? { type: [t] } : {},
|
|
271
265
|
...a ? { annotationValue: a } : {},
|
|
272
|
-
...
|
|
266
|
+
...r ? { domainValue: r } : {}
|
|
273
267
|
},
|
|
274
268
|
compatibleWith: [],
|
|
275
269
|
strictlyCompatible: !1
|
|
276
|
-
}, o = Date.now(), s = await this.pframeDriver.findColumns(this.pframeHandle,
|
|
277
|
-
return s.hits.forEach(({ columnId:
|
|
278
|
-
|
|
279
|
-
}),
|
|
280
|
-
} catch (
|
|
281
|
-
throw console.error("PFrame: findColumns error"),
|
|
270
|
+
}, o = Date.now(), s = await this.pframeDriver.findColumns(this.pframeHandle, n), c = [];
|
|
271
|
+
return s.hits.forEach(({ columnId: m, spec: h }) => {
|
|
272
|
+
c.push(new D({ name: m, type: h.valueType }));
|
|
273
|
+
}), c.length > 1 && console.warn(`More than 1 column found for ${e}}`), c.length === 0 ? (console.warn(`No columns found for ${e}}`), null) : c[0];
|
|
274
|
+
} catch (n) {
|
|
275
|
+
throw console.error("PFrame: findColumns error"), n;
|
|
282
276
|
}
|
|
283
277
|
}
|
|
284
278
|
}
|
|
285
279
|
export {
|
|
286
|
-
|
|
280
|
+
k as ColumnsProvider
|
|
287
281
|
};
|
|
288
282
|
//# 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 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]}
|
|
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 { Annotation, pTableValue, readAnnotation } 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, 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 (readAnnotation(axisSpec, Annotation.Graph.IsDenseAxis) === '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) => readAnnotation(axisSpec, Annotation.Graph.IsDenseAxis) === 'true');\n const treatAbsentValueAs = readAnnotation(spec, Annotation.Graph.TreatAbsentValuesAs)\n const absentValue = treatAbsentValueAs ? Number(treatAbsentValueAs) : 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","readAnnotation","Annotation","primaryIds","secondaryIds","primaryInnerJoin","primaryColumns","secondaryColumns","primarySpecs","secondarySpecs","primaryArtificial","regularFilters","secondarySliced","primarySpecsSet","s","filter","columnIdx","c_","_a","name","axisIndex","axisFilter","ColumnId","hasDenseAxis","treatAbsentValueAs","sources","result","axesSpec","selectedSources","strictlyCompatible","types","names","annotations","annotationsNotEmpty","v","annotationValue","domainValue","columnId"],"mappings":";;;;;;;;;AA8BA,MAAMA,IAAsB;AAE5B,SAASC,EAAkBC,GAAiBC,GAAwBC,IAA6B,MAAgB;AAC7G,MAAIF,MAAS;AACT,WAAOC,EAAS;AAEpB,QAAME,IAAgB,IAAI,MAAMF,EAAS,KAAK,MAAM;AACpD,WAASG,IAAI,GAAGA,IAAIH,EAAS,KAAK,QAAQG;AAClCD,IAAAA,EAAAC,CAAC,IAAIC,EAAYJ,GAAUG,GAAG,EAAE,QAAQF,GAAa,IAAI,MAAM;AAEhE,SAAAC;AACX;AASO,MAAMG,EAAgB;AAAA,EAIzB,YAAYC,GAA4BC,GAA4B;AAHpEC,IAAAA,EAAA,MAAA,cAAA,GACAA,EAAA,MAAA,cAAA,GAGI,KAAK,eAAeF,GACpB,KAAK,eAAeC;AAAAA,EAAA;AAAA,EAGxB,MAAM,gBAAgBE,GAAc;AAEhC,WAAO,CAAA,CADM,MAAM,KAAK,kBAAkBA,CAAE;AAAA,EACvB;AAAA,EAGzB,MAAM,oBAAoBA,GAAcC,IAA6C,IAAI;AACrF,QAAI,CAAE,MAAM,KAAK,gBAAgBD,CAAE;AACxB,aAAA;AAAA,QACH,UAAU,CAAA;AAAA,QACV,MAAM,CAAA;AAAA,MAAA;AAGV,QAAA;AACM,YAAAE,IAAQ,KAAK,IAAA,GACbX,IAAmC,MAAM,KAAK,aAAa,mBAAmB,KAAK,cAAc;AAAA,QACnG,KAAK;AAAA,UACD,MAAM;AAAA,UACN,QAAQS,EAAG;AAAA,QAAA;AAAA,QAEf,SAAAC;AAAAA,QACA,SAAS,CAAA;AAAA,MAAA,CAC4B,GAKnCE,IAAOZ,EAAS,OAAO,CAAAa,MAAQC,EAAK,KAAK,SAAS,MAAM,GACxDC,IAAUf,EAAS,OAAO,OAAQc,EAAK,KAAK,SAAS,QAAQ;AAC5D,aAAA;AAAA,QACH,UAAUF,EAAK,OAAO,CAACV,GAA+BY,MAAS;AAC3D,gBAAML,IAAKO,EAAO,aAAaF,EAAK,KAAK,IAAgB;AACrDL,iBAAAA,EAAAA,EAAG,kBAAA,CAAmB,IAAIX,EAAkBW,EAAG,MAAMK,EAAK,IAAI,GAC3DZ;AAAAA,QACX,GAAG,CAAA,CAAE;AAAA,QACL,MAAMa,EAAQ,SAASjB,EAAkBW,EAAG,MAAMM,EAAQ,CAAC,EAAE,IAAI,IAAI,CAAA;AAAA,MAAA;AAAA,IACzE,SACKE,GAAK;AACV,YAAA,QAAQ,MAAM,kCAAkC,GAC1CA;AAAAA,IAAA;AAAA,EACV;AAAA,EAGJ,MAAM,sBACFR,GACAS,IAAQrB,GACRa,IAA6C,CAAA,GAC/C;AACE,QAAI,CAAE,MAAM,KAAK,gBAAgBD,CAAE;AAC/B,aAAO,EAAE,QAAQ,IAAI,UAAU,GAAA;AAEnC,UAAMU,IAA+B;AAAA,MACjC,UAAUV,EAAG;AAAA,MACb,SAAAC;AAAAA,MACA,OAAAQ;AAAAA,IAAA;AAEA,QAAA;AACM,YAAAP,IAAQ,KAAK,IAAA,GACbX,IAAW,MAAM,KAAK,aAAa,gBAAgB,KAAK,cAAcmB,CAAO;AACnF,UAAIC,IAAW;AACf,aAAIpB,EAAS,aACEoB,IAAA,IACX,QAAQ,KAAK,aAAaF,CAAK,eAAeT,EAAG,IAAI,SAAS,IAO3D;AAAA,QACH,QAAQ,MAAM,KAAKT,EAAS,OAAO,IAA0B,EAAE,IAAI,MAAM;AAAA,QACzE,UAAAoB;AAAAA,MAAA;AAAA,IACJ,SACKH,GAAK;AACV,YAAA,QAAQ,MAAM,0CAA0C,GAClDA;AAAAA,IAAA;AAAA,EACV;AAAA,EAGJ,MAAM,oBACFI,GACAC,GACAJ,IAAQrB,GACRa,IAA6C,IAC/C;AACQ,UAAAa,IAAgBD,EAAQ,OAAOE,CAAU,GAEzCC,IAAgC,MAAM,QAAQ,IAAIF,EAAc,IAAI,CAAAV,MAAK,KAAK,kBAAkBA,CAAC,CAAC,CAAC,GACnGa,IAAYL,EAAO,qBAEnBM,IAAcJ,EAAc,OAAO,CAACV,GAAGe,MAAQ;AAC3C,YAAAC,IAAaJ,EAAMG,CAAG;AAC5B,aACIC,MAAe,QACfA,EAAW,SAAS,KAAK,CAAAC,MAAYd,EAAO,aAAac,CAAQ,EAAE,kBAAA,MAAwBJ,CAAS;AAAA,IAAA,CAE3G;AACG,QAAAC,EAAY,WAAW;AACvB,aAAA,QAAQ,KAAK,qDAAqD,GAC3D,EAAE,QAAQ,CAAA,GAAI,UAAU,GAAA;AAE/B,QAAA;AACM,YAAAhB,IAAQ,KAAK,IAAA,GACboB,IAAY,MAAM,QAAQ;AAAA,QAC5BJ,EAAY;AAAA,UAAI,CACZK,MAAA,KAAK,aAAa,gBAAgB,KAAK,cAAc;AAAA,YACjD,UAAUA,EAAE;AAAA,YACZ,MAAMX,EAAO,WAAA;AAAA,YACb,SAAAX;AAAAA,YACA,OAAAQ;AAAAA,UAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAGT,UAAIE,IAAW;AACL,aAAAW,EAAA,QAAQ,CAAC/B,GAAU4B,MAAQ;AAC7B5B,QAAAA,EAAS,aACEoB,IAAA,IACH,QAAA,KAAK,aAAaF,CAAK,eAAeS,EAAYC,CAAG,EAAE,IAAI,SAAS;AAAA,MAChF,CACH,GAKM;AAAA,QACH,QAAQK,EAAO;AAAA,UACXA,EAAO,QAAQF,EAAU,IAAI,CAAKG,MACvB,MAAM,KAAKA,EAAE,OAAO,IAA0B,EAAE,IAAI,MAAM,CACpE,CAAC;AAAA,QAAA;AAAA,QAEN,UAAAd;AAAAA,MAAA;AAAA,IACJ,SACKH,GAAK;AACF,aAAA,QAAA,MAAM,0CAA0CA,CAAG,GACpD,EAAE,QAAQ,CAAA,GAAI,UAAU,GAAA;AAAA,IAAM;AAAA,EACzC;AAAA;AAAA;AAAA,EAKJ,qBAAqBkB,GAAuBV,GAA+B;AACvE,WAAOA,EAAM,OAAO,CAACvB,GAAKkC,GAAMR,MAAQ;AACpC,UAAI,CAACQ;AACM,eAAAlC;AAEX,YAAMmC,IAAsB,CAAA;AAC5B,aAAAD,EAAK,SAAS,QAAQ,CAACN,GAAUF,MAAQ;AACjCU,QAAAA,EAAeR,GAAUS,EAAW,MAAM,WAAW,MAAM,UAC3DF,EAAU,KAAKT,CAAG;AAAA,MACtB,CACH,GACGS,EAAU,UACVnC,EAAI,KAAK;AAAA,QACL,MAAM;AAAA,QACN,QAAQiC,EAAUP,CAAG,EAAE;AAAA,QACvB,OAAOO,EAAUP,CAAG,EAAE,OAAO;AAAA,QAC7B,aAAaS;AAAAA,MAAA,CAChB,GAEEnC;AAAAA,IACX,GAAG,CAAA,CAA4C;AAAA,EAAA;AAAA,EAGnD,MAAM,kBACFsC,GACAC,GACA/B,IAA6C,CAAA,GAC7CgC,IAAmB,IACU;;AACvB,UAAAC,IAAiBH,EAAW,OAAOhB,CAAU,GAC7CoB,IAAmBH,EAAa,OAAOjB,CAAU,GAEjDqB,IAAe,MAAM,QAAQ,IAAIL,EAAW,IAAI,CAAC/B,MAAO,KAAK,kBAAkBA,CAAE,CAAC,CAAC,GACnFqC,IAAiB,MAAM,QAAQ,IAAIL,EAAa,IAAI,CAAChC,MAAO,KAAK,kBAAkBA,CAAE,CAAC,CAAC,GAEvFsC,IAAoB,KAAK,qBAAqBJ,GAAgBE,CAAY,GAE1EG,IAAoD,CAAA,GAGpDC,IAAoE,CAAA,GACpEC,IAAkB,IAAI,IAAIL,EAAa,QAAQ,CAACM,QAAOA,KAAA,OAAA,SAAAA,EAAG,aAAY,CAAA,GAAI,IAAI,CAACrB,MAAad,EAAO,aAAac,CAAQ,EAAE,kBAAA,CAAmB,CAAC,CAAC;AACrJ,eAAWsB,KAAU1C,GAAS;AACtB,UAAA,EAAE0C,EAAO,UAAU,aAAa,QAAQA,EAAO,OAAO,SAAS,SAAS;AACxEJ,QAAAA,EAAe,KAAKI,CAAM;AAC1B;AAAA,MAAA;AAEJ,YAAM1B,IAAY,IAAIV,EAAOoC,EAAO,OAAO,EAAE,EAAE,kBAAA;AAC/C,UAAKF,EAAgB,IAAIxB,CAAS;AAsB9BsB,QAAAA,EAAe,KAAKI,CAAM;AAAA,WAtBO;AAC3B,cAAAC,IAAYT,EAAiB,UAAU,CAACU,GAAI1B,MAAQ;;AAAA,kBAAA2B,IAAAT,EAAelB,CAAG,MAAlB,gBAAA2B,EAAqB,SAAS,KAAK,CAACzB,MAAad,EAAO,aAAac,CAAQ,EAAE,wBAAwBJ,CAAAA;AAAAA,QAAA,CAAU;AAC3K,YAAI2B,MAAc,IAAI;AACZ,gBAAAG,IAAOZ,EAAiBS,CAAS,EAAE;AACpCJ,UAAAA,EAAgBO,CAAI,MACrBP,EAAgBO,CAAI,IAAI;AAAA,YACpB,MAAM;AAAA,YACN,OAAOA;AAAAA,YACP,QAAQA;AAAAA,YACR,aAAa,CAAA;AAAA,UAAA;AAGrB,gBAAMC,KAAYF,IAAAT,EAAeO,CAAS,MAAxB,gBAAAE,EAA2B,SAAS,UAAU,CAACJ,MAAMnC,EAAO,aAAamC,CAAC,EAAE,wBAAwBzB,CAAAA;AAClH0B,UAAAA,EAAO,UAAU,SAAS,CAAC,EAAE,aAAa,WAAWA,EAAO,UAAU,SAAS,CAAC,EAAE,cAAc,UAChFH,EAAAO,CAAI,EAAE,YAAY,KAAK;AAAA,YACnC,MAAM;AAAA,YACN,WAAWC,KAAa;AAAA,YACxB,UAAUL,EAAO,UAAU,SAAS,CAAC,EAAE;AAAA,UAAA,CAC1C;AAAA,QACL;AAAA,MACJ;AAAA,IAGH;AAEL,UAAMjC,IAAU;AAAA,MACZ,KAAK;AAAA,QACD,MAAM;AAAA,QACN,SAAS;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,YACL,GAAGwB,EAAe,IAAI,CAAC7B,OAAU;AAAA,cAC7B,MAAM;AAAA,cACN,QAAQA,EAAK;AAAA,YAAA,EACf;AAAA,YACF,GAAGiC;AAAAA,UAAA;AAAA,QAAA;AAAA,QAGX,WAAWH,EAAiB,IAAI,CAAC9B,GAAMc,MAAQ;AACrC,gBAAA8B,IAAaT,EAAgBnC,EAAK,IAAI;AAC5C,iBAAO4C,KAAcA,EAAW,YAAY,SACtCA,IAAa;AAAA,YACX,MAAM;AAAA,YACN,QAAQ5C,EAAK;AAAA,UAAA;AAAA,QAExB,CAAA;AAAA,MAAA;AAAA,MAEL,SAASkC;AAAAA,MACT,SAAS,CAAA;AAAA,IAAA;AAET,QAAA;AACM,YAAArC,IAAQ,KAAK,IAAA,GAEbX,IAAW,MAAM,KAAK,aAAa,mBAAmB,KAAK,cAAcmB,CAAO,GAOhFP,IAAOZ,EAAS,OAAO,CAAA,MAAQc,EAAK,KAAK,SAAS,MAAM,GACxDC,IAAUf,EAAS,OAAO,CAAA,MAAQc,EAAK,KAAK,SAAS,QAAQ;AAK5D,aAAA;AAAA,QACH,UAAUF,EAAK,OAAO,CAACV,GAA+BY,MAAS;AAC3D,gBAAML,IAAKO,EAAO,aAAaF,EAAK,KAAK,IAAgB;AACrD,iBAAAZ,EAAAO,EAAG,kBAAA,CAAmB,IAAIX,EAAkBW,EAAG,MAAMK,EAAK,IAAI,GAC3DZ;AAAAA,QACX,GAAG,CAAA,CAAE;AAAA,QACL,aAAaa,EAAQ,OAAO,CAACb,GAA+BY,MAAS;AAC3D,gBAAAsB,IAAOtB,EAAK,KAAK,MACjBL,IAAK,IAAIkD,EAAS;AAAA,YACpB,MAAM7C,EAAK,KAAK;AAAA,YAChB,MAAMsB,EAAK;AAAA,UAAA,CACd,GACKwB,IAAexB,EAAK,SAAS,KAAK,CAACN,MAAaQ,EAAeR,GAAUS,EAAW,MAAM,WAAW,MAAM,MAAM,GACjHsB,IAAqBvB,EAAeF,GAAMG,EAAW,MAAM,mBAAmB,GAC9EtC,IAAe4D,IAAqB,OAAOA,CAAkB,IAAID,IAAe,IAAI;AACtF,iBAAA1D,EAAAO,EAAG,kBAAA,CAAmB,IAAIX,EAAkBW,EAAG,MAAMK,EAAK,MAAMb,CAAW,GACxEC;AAAAA,QACX,GAAG,CAAA,CAAE;AAAA,QACL,aAAaa,EAAQ,OAAO,CAACb,GAAkCY,MAAS;AAC9D,gBAAAsB,IAAOtB,EAAK,KAAK,MACjBL,IAAK,IAAIkD,EAAS;AAAA,YACpB,MAAM7C,EAAK,KAAK;AAAA,YAChB,MAAMsB,EAAK;AAAA,UAAA,CACd;AACG,iBAAAlC,EAAAO,EAAG,kBAAA,CAAmB,IAAI2B,GACvBlC;AAAAA,QACX,GAAG,CAAA,CAAE;AAAA,QACL,WAAWU,EAAK,OAAO,CAACV,GAA+BY,MAAS;AACtD,gBAAAsB,IAAOtB,EAAK,KAAK,MACjBL,IAAKO,EAAO,aAAaoB,CAAI;AAC/B,iBAAAlC,EAAAO,EAAG,kBAAA,CAAmB,IAAI2B,GACvBlC;AAAAA,QAAA,GACR,CAAA,CAAE;AAAA,MAAA;AAAA,IACT,SACKe,GAAK;AACV,YAAA,QAAQ,MAAM,gCAAgC,GACtC,QAAA,KAAK,wBAAwBE,CAAO,GACtCF;AAAAA,IAAA;AAAA,EACV;AAAA,EAGJ,MAAM,kBAAkBR,GAA2C;AAC3D,QAAA;AACM,YAAAE,IAAQ,KAAK,IAAA;AAMnB,aALiB,MAAM,KAAK,aAAa,cAAc,KAAK,cAAcF,EAAG,IAAiB,KAK3E;AAAA,IAAA,QACT;AACV,aAAA,QAAQ,MAAM,iCAAiC,GACxC;AAAA,IAAA;AAAA,EACX;AAAA,EAGJ,MAAM,iBAAiBA,GAAiC;;AACpD,aAAQ8C,IAAA,MAAM,KAAK,kBAAkB9C,CAAE,MAA/B,OAAA,SAAA8C,EAAmC,SAAS,IAAI,CAAAzB,MAAYd,EAAO,aAAac,CAAQ,OAAM,CAAA;AAAA,EAAC;AAAA,EAG3G,MAAM,qCAAqCgC,GAAyD;;AAChG,UAAMC,IAAyB,CAAA;AAE/B,eAAWjD,KAAQgD;AACX,UAAAtC,EAAWV,CAAI,GAAG;AAClB,cAAMkD,MAAYT,IAAA,MAAM,KAAK,kBAAkBzC,CAAI,MAAjC,OAAA,SAAAyC,EAAqC,aAAY,CAAA;AAC5DQ,QAAAA,EAAA,KAAK,GAAGC,EAAS,IAAI,CAAA5B,MAAQpB,EAAO,aAAaoB,CAAI,EAAE,WAAA,CAAY,CAAC;AAAA,MAAA;AAG5E,WAAA2B;AAAAA,EAAA;AAAA,EAGX,MAAM,iBAAiB;AACnB,WAAO,KAAK,aAAa,YAAY,KAAK,YAAY;AAAA,EAAA;AAAA,EAG1D,MAAM,eACFE,GACAC,GACAC,GACAC,GACAC,GACAC,GAC2B;AACvB,QAAA;AACA,YAAMnD,IAA8B;AAAA,QAChC,cAAc;AAAA,UACV,MAAMgD;AAAAA,UACN,MAAMC;AAAAA,UACN,iBAAiBC;AAAAA,UACjB,mBAAmBC,KAAA,OAAA,SAAAA,EAAqB,OAAO,CAACpE,GAAKqE,OACjDrE,EAAIqE,CAAC,IAAI,MACFrE,IACR,CAAA,CAA4B;AAAA,QAAA;AAAA,QAEnC,gBAAgB,MAAM,KAAK,qCAAqC+D,CAAe;AAAA,QAC/E,oBAAAC;AAAAA;AAAAA,MAAA,GAEEvD,IAAQ,KAAK,IAAA,GACbX,IAAgC,MAAM,KAAK,aAAa,YAAY,KAAK,cAAcmB,CAAO,GAK9F4C,IAA6B,CAAA;AAC1B,aAAA/D,EAAA,KAAK,QAAQ,CAAQc,MAAA;AAK1BiD,QAAAA,EAAO,KAAKjD,CAAI;AAAA,MAAA,CACnB,GACMiD;AAAAA,IAAA,SACF9C,GAAK;AACV,YAAA,QAAQ,MAAM,2BAA2B,GACnCA;AAAAA,IAAA;AAAA,EACV;AAAA,EAGJ,MAAM,WACFgD,GACAC,GACAC,GACAC,GACAC,GACmB;AACX,YAAA,MAAM,KAAK,eAAeJ,GAAiBC,GAAoBC,GAAOC,GAAOC,CAAW,GAAG;AAAA,MAC/F,CAAAvD,MACI,IAAI6C,EAAS;AAAA,QACT,MAAM7C,EAAK;AAAA,QACX,MAAMA,EAAK,KAAK;AAAA,MAAA,CACnB;AAAA,IAAA;AAAA,EACT;AAAA,EAGJ,MAAM,aACF0C,GACAzD,GACAyE,GACAC,GACwB;AACpB,QAAA;AACA,YAAMtD,IAA8B;AAAA,QAChC,cAAc;AAAA,UACV,MAAM,CAACqC,CAAI;AAAA,UACX,GAAIzD,IAAO,EAAE,MAAM,CAACA,CAAI,MAAM,CAAA;AAAA,UAC9B,GAAIyE,IAAkB,EAAE,iBAAAA,EAAAA,IAAoB,CAAA;AAAA,UAC5C,GAAIC,IAAc,EAAE,aAAAA,MAAgB,CAAA;AAAA,QAAA;AAAA,QAExC,gBAAgB,CAAA;AAAA,QAChB,oBAAoB;AAAA,MAAA,GAElB9D,IAAQ,KAAK,IAAA,GACbX,IAAgC,MAAM,KAAK,aAAa,YAAY,KAAK,cAAcmB,CAAO,GAK9F4C,IAAqB,CAAA;AAWvB,aAVJ/D,EAAS,KAAK,QAAQ,CAAC,EAAE,UAAA0E,GAAU,MAAAtC,QAAW;AAKnC2B,QAAAA,EAAA,KAAK,IAAIJ,EAAS,EAAE,MAAMe,GAAU,MAAMtC,EAAK,UAAA,CAAW,CAAC;AAAA,MAAA,CACrE,GACG2B,EAAO,SAAS,KACR,QAAA,KAAK,gCAAgCP,CAAI,GAAG,GAEpDO,EAAO,WAAW,KACV,QAAA,KAAK,wBAAwBP,CAAI,GAAG,GACrC,QAEJO,EAAO,CAAC;AAAA,IAAA,SACV9C,GAAK;AACV,YAAA,QAAQ,MAAM,2BAA2B,GACnCA;AAAAA,IAAA;AAAA,EACV;AAER;","x_google_ignoreList":[0]}
|