@milaboratories/graph-maker 1.1.173 → 1.1.175
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/components/LassoControls/index.vue.js +3 -2
- package/dist/GraphMaker/components/LassoControls/index.vue.js.map +1 -1
- package/dist/GraphMaker/index.vue.d.ts.map +1 -1
- package/dist/GraphMaker/index.vue.js +139 -133
- package/dist/GraphMaker/index.vue.js.map +1 -1
- package/dist/GraphMaker/store.d.ts +1 -0
- package/dist/GraphMaker/store.d.ts.map +1 -1
- package/dist/GraphMaker/store.js +30 -29
- package/dist/GraphMaker/store.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/MiPlots.js +4 -4
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js +214 -214
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getClusters.js +20 -163
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getClusters.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js +47 -35
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/getDendrograms.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js +82 -79
- package/dist/node_modules/@milaboratories/miplots4/dist/heatmap/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/comlink/dist/esm/comlink.js +259 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/comlink/dist/esm/comlink.js.map +1 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +52 -50
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/types/common.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/WorkerFactory.js +14 -0
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/WorkerFactory.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDendrograms.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/getDendrograms.ts"],"sourcesContent":["import type { Cluster } from './components/types';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport {
|
|
1
|
+
{"version":3,"file":"getDendrograms.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/getDendrograms.ts"],"sourcesContent":["import type { Cluster } from './components/types';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport type { HierarchyNode } from 'd3-hierarchy';\nimport { hierarchy } from 'd3-hierarchy';\nimport type { getClustersApproximate } from './getClusters';\nimport { WorkerFactory } from '../utils/WorkerFactory';\nimport GetClustersWorker from './getClusters?worker&inline';\n\nexport type DendrogramsData = Record<string, {\n hierarchyByGroupX: Record<string, HierarchyNode<Cluster>>;\n hierarchyByGroupY: Record<string, HierarchyNode<Cluster>>;\n}>\n\nconst workerWrapper = new WorkerFactory<{ getClustersApproximate: typeof getClustersApproximate }>(() => new GetClustersWorker());\n\nexport async function getDendrograms(\n groupedCellsData: GroupedCellsHeatmap,\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n facetSettings: HeatmapSettingsImpl['facetSettings']\n): Promise<DendrogramsData> {\n const { facetKeys, xGroupKeys, yGroupKeys } = groupedCellsData.meta;\n const result: DendrogramsData = {};\n\n if (!dendrogramX && !dendrogramY) {\n return result;\n }\n if (dendrogramX && facetSettings.sharedX) {\n throw Error('Dendrogram on X axis is not available with shared by facets X axis');\n }\n if (dendrogramY && facetSettings.sharedY) {\n throw Error('Dendrogram on Y axis is not available with shared by facets Y axis');\n }\n workerWrapper.reset();\n await Promise.all(facetKeys.map(async facetKey => {\n const facetResult: DendrogramsData[string] = {\n hierarchyByGroupX: {},\n hierarchyByGroupY: {},\n };\n const cellsGroup = groupedCellsData.facets[facetKey];\n if (dendrogramX) {\n const updatedXKeys: string[] = [];\n const rootClusters = await Promise.all(xGroupKeys.map(async xGroupKey => {\n const xKeys = cellsGroup.xKeysByGroups[xGroupKey];\n const yKeys = cellsGroup.yKeys;\n return workerWrapper.wrapper.getClustersApproximate(\n xKeys.map(x => yKeys.map(y => (cellsGroup.cells[x][y]?.normalizedValue.dataSource ?? dendrogramX.fillNA) as number)),\n dendrogramX.distance,\n dendrogramX.linkage\n ); \n }));\n xGroupKeys.forEach((xGroupKey, idx) => {\n //set sorted group keys\n const rootCluster = rootClusters[idx];\n const newXKeys = rootCluster.indexes.map(i => cellsGroup.xKeysByGroups[xGroupKey][i]);\n groupedCellsData.facets[facetKey].xKeysByGroups[xGroupKey] = newXKeys;\n updatedXKeys.push(...newXKeys);\n facetResult.hierarchyByGroupX[xGroupKey] = hierarchy(rootCluster);\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].xKeys = updatedXKeys;\n }\n if (dendrogramY) {\n const updatedYKeys: string[] = [];\n const rootClusters = await Promise.all(yGroupKeys.map(async yGroupKey => {\n const yKeys = cellsGroup.yKeysByGroups[yGroupKey];\n const xKeys = cellsGroup.xKeys;\n return workerWrapper.wrapper.getClustersApproximate(\n yKeys.map(y => xKeys.map(x => (cellsGroup.cells[x][y]?.normalizedValue.dataSource ?? dendrogramY.fillNA) as number)),\n dendrogramY.distance,\n dendrogramY.linkage\n );\n }));\n yGroupKeys.forEach((yGroupKey, idx) => {\n const rootCluster = rootClusters[idx];\n const newYKeys = rootCluster.indexes.map(i => cellsGroup.yKeysByGroups[yGroupKey][i]);\n groupedCellsData.facets[facetKey].yKeysByGroups[yGroupKey] = newYKeys;\n updatedYKeys.push(...newYKeys);\n facetResult.hierarchyByGroupY[yGroupKey] = hierarchy(rootCluster);\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].yKeys = updatedYKeys;\n }\n result[facetKey] = facetResult;\n }));\n\n return result;\n}\n"],"names":["workerWrapper","WorkerFactory","GetClustersWorker","getDendrograms","groupedCellsData","dendrogramX","dendrogramY","facetSettings","facetKeys","xGroupKeys","yGroupKeys","result","facetKey","facetResult","cellsGroup","updatedXKeys","rootClusters","xGroupKey","xKeys","yKeys","x","a","_a","y","idx","rootCluster","newXKeys","i","hierarchy","updatedYKeys","yGroupKey","newYKeys"],"mappings":";;;AAcA,MAAMA,IAAgB,IAAIC,EAAyE,MAAM,IAAIC,EAAAA,CAAmB;AAEhI,eAAsBC,EAClBC,GACAC,GACAC,GACAC,GACwB;AACxB,QAAM,EAAE,WAAAC,GAAW,YAAAC,GAAY,YAAAC,MAAeN,EAAiB,MACzDO,IAA0B,CAAA;AAEhC,MAAI,CAACN,KAAe,CAACC;AACjB,WAAOK;AAEX,MAAIN,KAAeE,EAAc;AAC7B,UAAM,MAAM,oEAAoE;AAEpF,MAAID,KAAeC,EAAc;AAC7B,UAAM,MAAM,oEAAoE;AAEpF,SAAAP,EAAc,SACd,MAAM,QAAQ,IAAIQ,EAAU,IAAI,OAAMI,MAAY;AAC9C,UAAMC,IAAuC;AAAA,MACzC,mBAAmB,CAAA;AAAA,MACnB,mBAAmB,CAAA;AAAA,IAAA,GAEjBC,IAAaV,EAAiB,OAAOQ,CAAQ;AACnD,QAAIP,GAAa;AACb,YAAMU,IAAyB,IACzBC,IAAe,MAAM,QAAQ,IAAIP,EAAW,IAAI,OAAMQ,MAAa;AACrE,cAAMC,IAAQJ,EAAW,cAAcG,CAAS,GAC1CE,IAAQL,EAAW;AACzB,eAAOd,EAAc,QAAQ;AAAA,UACzBkB,EAAM,IAAI,CAAAE,MAAKD,EAAM,IAAI,CAAAE,MAAA;;AAAM,qBAAAC,IAAAR,EAAW,MAAMM,CAAC,EAAEG,CAAC,MAArB,OAAA,SAAAD,EAAwB,gBAAgB,eAAcjB,EAAY;AAAA,UAAA,CAAiB,CAAC;AAAA,UACnHA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA;AAAA,MAEpB,CAAC,CAAC;AACFI,MAAAA,EAAW,QAAQ,CAACQ,GAAWO,MAAQ;AAEnC,cAAMC,IAAcT,EAAaQ,CAAG,GAC9BE,IAAWD,EAAY,QAAQ,IAAI,CAAAE,MAAKb,EAAW,cAAcG,CAAS,EAAEU,CAAC,CAAC;AACpFvB,UAAiB,OAAOQ,CAAQ,EAAE,cAAcK,CAAS,IAAIS,GAC7DX,EAAa,KAAK,GAAGW,CAAQ,GAC7Bb,EAAY,kBAAkBI,CAAS,IAAIW,EAAUH,CAAW;AAAA,MACpE,CAAC,GAEDrB,EAAiB,OAAOQ,CAAQ,EAAE,QAAQG;AAAAA,IAC9C;AACA,QAAIT,GAAa;AACb,YAAMuB,IAAyB,IACzBb,IAAe,MAAM,QAAQ,IAAIN,EAAW,IAAI,OAAMoB,MAAa;AACrE,cAAMX,IAAQL,EAAW,cAAcgB,CAAS,GAC1CZ,IAAQJ,EAAW;AACzB,eAAOd,EAAc,QAAQ;AAAA,UACzBmB,EAAM,IAAI,CAAAI,MAAKL,EAAM,IAAI,CAAAG,MAAA;;AAAM,qBAAAC,IAAAR,EAAW,MAAMM,CAAC,EAAEG,CAAC,MAArB,OAAA,SAAAD,EAAwB,gBAAgB,eAAchB,EAAY;AAAA,UAAA,CAAiB,CAAC;AAAA,UACnHA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA;AAAA,MAEpB,CAAC,CAAC;AACFI,QAAW,QAAQ,CAACoB,GAAWN,MAAQ;AACnC,cAAMC,IAAcT,EAAaQ,CAAG,GAC9BO,IAAWN,EAAY,QAAQ,IAAI,CAAAE,MAAKb,EAAW,cAAcgB,CAAS,EAAEH,CAAC,CAAC;AACpFvB,UAAiB,OAAOQ,CAAQ,EAAE,cAAckB,CAAS,IAAIC,GAC7DF,EAAa,KAAK,GAAGE,CAAQ,GAC7BlB,EAAY,kBAAkBiB,CAAS,IAAIF,EAAUH,CAAW;AAAA,MACpE,CAAC,GAEDrB,EAAiB,OAAOQ,CAAQ,EAAE,QAAQiB;AAAAA,IAC9C;AACAlB,IAAAA,EAAOC,CAAQ,IAAIC;AAAAA,EACvB,CAAC,CAAC,GAEKF;AACX;","x_google_ignoreList":[0]}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { renderToString as q } from "../node_modules/react-dom/server.browser.js";
|
|
2
|
-
import { AbstractChart as
|
|
3
|
-
import { isColumnName as
|
|
4
|
-
import
|
|
5
|
-
import { getCells as
|
|
6
|
-
import { getDendrograms as
|
|
7
|
-
import { HeatmapSettingsImpl as
|
|
8
|
-
import { MAX_SVG_RENDERED_CELLS_COUNT as
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
import { AbstractChart as M } from "../AbstractChart.js";
|
|
3
|
+
import { isColumnName as X } from "../utils/index.js";
|
|
4
|
+
import $ from "./ChartRenderer.js";
|
|
5
|
+
import { getCells as F } from "./getCells.js";
|
|
6
|
+
import { getDendrograms as J } from "./getDendrograms.js";
|
|
7
|
+
import { HeatmapSettingsImpl as T } from "./HeatmapSettingsImpl.js";
|
|
8
|
+
import { MAX_SVG_RENDERED_CELLS_COUNT as K } from "./constants.js";
|
|
9
|
+
import { l as b } from "../node_modules/lodash/lodash.js";
|
|
10
|
+
var W = Object.defineProperty, Q = (h, t, e) => t in h ? W(h, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : h[t] = e, x = (h, t, e) => Q(h, typeof t != "symbol" ? t + "" : t, e);
|
|
11
|
+
class st extends M {
|
|
11
12
|
constructor(t, e, a) {
|
|
12
|
-
super(t, e),
|
|
13
|
-
}), X(this, "calculatedData", null), this.settings = new k(e), a && (this.onTooltipHintSwitch = a[0]);
|
|
13
|
+
super(t, e), x(this, "settings"), x(this, "chartRenderer", new $()), x(this, "onTooltipHintSwitch", b.noop), x(this, "onLoadingChange", b.noop), x(this, "calculatedData", null), x(this, "clusteringCalculationsInProgress", !1), this.settings = new T(e), a && (this.onTooltipHintSwitch = a.onTooltipHintSwitch ?? b.noop, this.onLoadingChange = a.onLoadingChange ?? b.noop);
|
|
14
14
|
}
|
|
15
15
|
mount(t) {
|
|
16
16
|
try {
|
|
17
|
-
this.chartRenderer.init(t), this._updateData(), this.
|
|
17
|
+
this.chartRenderer.init(t), this._updateData(), this.hasError = !1;
|
|
18
18
|
} catch (e) {
|
|
19
19
|
this.hasError = !0, e instanceof Error && (this.chartRenderer.renderError(e.message), console.error(e));
|
|
20
20
|
}
|
|
@@ -24,8 +24,8 @@ class lt extends F {
|
|
|
24
24
|
}
|
|
25
25
|
updateSettingsAndData(t, e) {
|
|
26
26
|
try {
|
|
27
|
-
const a = this.settings,
|
|
28
|
-
this.settings = new
|
|
27
|
+
const a = this.settings, n = this.data;
|
|
28
|
+
this.settings = new T(e), this.data = t, this._needUpdateCalculatedDataBySettings(a, this.settings) || this._needUpdateCalculatedDataByData(n, this.data) ? this._updateData() : this._updateAesInData();
|
|
29
29
|
} catch (a) {
|
|
30
30
|
a instanceof Error && (this.chartRenderer.renderError(a.message), console.error(a));
|
|
31
31
|
}
|
|
@@ -37,139 +37,142 @@ class lt extends F {
|
|
|
37
37
|
return this._updateChart(), q(this.chartRenderer.component);
|
|
38
38
|
}
|
|
39
39
|
_needUpdateCalculatedDataBySettings(t, e) {
|
|
40
|
-
var a,
|
|
40
|
+
var a, n, r, o, i, c, m, s, d, v, l, p, y, u, C;
|
|
41
41
|
const {
|
|
42
|
-
xColumn:
|
|
43
|
-
yColumn:
|
|
44
|
-
valueColumn:
|
|
45
|
-
xGroupBy:
|
|
46
|
-
yGroupBy:
|
|
47
|
-
facetBy:
|
|
42
|
+
xColumn: _,
|
|
43
|
+
yColumn: G,
|
|
44
|
+
valueColumn: Y,
|
|
45
|
+
xGroupBy: B,
|
|
46
|
+
yGroupBy: g,
|
|
47
|
+
facetBy: k,
|
|
48
48
|
annotations: N,
|
|
49
|
-
chartSettings:
|
|
50
|
-
facetSettings:
|
|
49
|
+
chartSettings: j,
|
|
50
|
+
facetSettings: w,
|
|
51
51
|
dendrogramX: E,
|
|
52
52
|
dendrogramY: O,
|
|
53
|
-
normalization:
|
|
54
|
-
aggregation:
|
|
55
|
-
NAValueAs:
|
|
56
|
-
} = e,
|
|
57
|
-
|
|
58
|
-
),
|
|
59
|
-
|
|
60
|
-
),
|
|
61
|
-
function
|
|
62
|
-
return
|
|
53
|
+
normalization: A,
|
|
54
|
+
aggregation: f,
|
|
55
|
+
NAValueAs: I
|
|
56
|
+
} = e, L = Object.values(((a = t.dendrogramX) == null ? void 0 : a.aes) || {}).filter(
|
|
57
|
+
X
|
|
58
|
+
), U = Object.values((E == null ? void 0 : E.aes) || {}).filter(X), H = Object.values(((n = t.dendrogramY) == null ? void 0 : n.aes) || {}).filter(
|
|
59
|
+
X
|
|
60
|
+
), V = Object.values((O == null ? void 0 : O.aes) || {}).filter(X);
|
|
61
|
+
function D(S, R) {
|
|
62
|
+
return S.length !== R.length || S.some((z, P) => z.value !== R[P].value);
|
|
63
63
|
}
|
|
64
|
-
return t.xColumn.value !==
|
|
65
|
-
t.annotations.map((
|
|
66
|
-
N.map((
|
|
67
|
-
) ||
|
|
64
|
+
return t.xColumn.value !== _.value || t.yColumn.value !== G.value || t.valueColumn.value !== Y.value || D(t.xGroupBy, B) || D(t.yGroupBy, g) || D(t.facetBy, k) || D(
|
|
65
|
+
t.annotations.map((S) => S.valueColumn),
|
|
66
|
+
N.map((S) => S.valueColumn)
|
|
67
|
+
) || D(L, U) || D(H, V) || (e.dendrogramX || t.dendrogramX) && (((r = t.dendrogramX) == null ? void 0 : r.distance) !== ((o = e.dendrogramX) == null ? void 0 : o.distance) || ((i = t.dendrogramX) == null ? void 0 : i.linkage) !== ((c = e.dendrogramX) == null ? void 0 : c.linkage)) || (e.dendrogramY || t.dendrogramY) && (((m = t.dendrogramY) == null ? void 0 : m.distance) !== ((s = e.dendrogramY) == null ? void 0 : s.distance) || ((d = t.dendrogramY) == null ? void 0 : d.linkage) !== ((v = e.dendrogramY) == null ? void 0 : v.linkage)) || t.chartSettings.valueType !== j.valueType || t.facetSettings.sharedX !== w.sharedX || t.facetSettings.sharedY !== w.sharedY || ((l = t.normalization) == null ? void 0 : l.method) !== (A == null ? void 0 : A.method) || ((p = t.normalization) == null ? void 0 : p.direction) !== (A == null ? void 0 : A.direction) || t.NAValueAs !== I || ((y = t.aggregation) == null ? void 0 : y.method) !== (f == null ? void 0 : f.method) || ((u = t.aggregation) == null ? void 0 : u.x) !== (f == null ? void 0 : f.x) || ((C = t.aggregation) == null ? void 0 : C.y) !== (f == null ? void 0 : f.y);
|
|
68
68
|
}
|
|
69
69
|
_needUpdateCalculatedDataByData(t, e) {
|
|
70
|
-
const a = Object.keys(t.data),
|
|
71
|
-
return t.id !== e.id || a.length !==
|
|
70
|
+
const a = Object.keys(t.data), n = Object.keys(e.data);
|
|
71
|
+
return t.id !== e.id || a.length !== n.length || a.some((r) => {
|
|
72
72
|
var o;
|
|
73
|
-
return t.data[
|
|
73
|
+
return t.data[r].length !== ((o = e.data[r]) == null ? void 0 : o.length);
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
|
-
_updateData() {
|
|
76
|
+
async _updateData() {
|
|
77
77
|
const {
|
|
78
78
|
xColumn: t,
|
|
79
79
|
yColumn: e,
|
|
80
80
|
valueColumn: a,
|
|
81
|
-
xGroupBy:
|
|
82
|
-
yGroupBy:
|
|
81
|
+
xGroupBy: n,
|
|
82
|
+
yGroupBy: r,
|
|
83
83
|
facetBy: o,
|
|
84
84
|
chartSettings: i,
|
|
85
|
-
facetSettings:
|
|
86
|
-
annotations:
|
|
87
|
-
dendrogramX:
|
|
88
|
-
dendrogramY:
|
|
85
|
+
facetSettings: c,
|
|
86
|
+
annotations: m,
|
|
87
|
+
dendrogramX: s,
|
|
88
|
+
dendrogramY: d,
|
|
89
89
|
normalization: v,
|
|
90
90
|
NAValueAs: l,
|
|
91
91
|
keysOrder: p,
|
|
92
92
|
aggregation: y
|
|
93
|
-
} = this.settings, u =
|
|
93
|
+
} = this.settings, u = F(
|
|
94
94
|
this.data,
|
|
95
95
|
t,
|
|
96
96
|
e,
|
|
97
97
|
{ dataSource: a },
|
|
98
98
|
o,
|
|
99
|
-
r,
|
|
100
99
|
n,
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
r,
|
|
101
|
+
m,
|
|
103
102
|
s,
|
|
103
|
+
d,
|
|
104
104
|
v,
|
|
105
105
|
l,
|
|
106
106
|
p,
|
|
107
107
|
i.xAxis,
|
|
108
108
|
i.yAxis,
|
|
109
109
|
y
|
|
110
|
-
), C =
|
|
111
|
-
this.
|
|
110
|
+
), C = i.valueType === "discrete" ? this.data.getColumnCategories(a.value) : [];
|
|
111
|
+
this.clusteringCalculationsInProgress = !0, this.onLoadingChange(!0);
|
|
112
|
+
const _ = await J(u, s, d, c);
|
|
113
|
+
this.clusteringCalculationsInProgress = !1, this.onLoadingChange(!1), this.calculatedData = {
|
|
112
114
|
groupedCellsData: u,
|
|
113
|
-
dendrogramsData:
|
|
114
|
-
cellUniqValues:
|
|
115
|
-
};
|
|
115
|
+
dendrogramsData: _,
|
|
116
|
+
cellUniqValues: C
|
|
117
|
+
}, this._updateChart();
|
|
116
118
|
}
|
|
117
119
|
_updateAesInData() {
|
|
120
|
+
this._updateChart();
|
|
118
121
|
}
|
|
119
122
|
_updateChart() {
|
|
120
123
|
var t, e;
|
|
121
|
-
if (!this.calculatedData)
|
|
124
|
+
if (!this.calculatedData || this.clusteringCalculationsInProgress)
|
|
122
125
|
return;
|
|
123
126
|
const {
|
|
124
127
|
id: a,
|
|
125
|
-
valueColumn:
|
|
126
|
-
chartSettings:
|
|
128
|
+
valueColumn: n,
|
|
129
|
+
chartSettings: r,
|
|
127
130
|
facetSettings: o,
|
|
128
131
|
aes: i,
|
|
129
|
-
annotations:
|
|
130
|
-
dendrogramX:
|
|
131
|
-
dendrogramY:
|
|
132
|
-
inheritedDendrogramAes:
|
|
132
|
+
annotations: c,
|
|
133
|
+
dendrogramX: m,
|
|
134
|
+
dendrogramY: s,
|
|
135
|
+
inheritedDendrogramAes: d,
|
|
133
136
|
normalization: v,
|
|
134
137
|
keysOrder: l,
|
|
135
138
|
xColumn: p,
|
|
136
139
|
yColumn: y,
|
|
137
140
|
xGroupBy: u,
|
|
138
141
|
yGroupBy: C
|
|
139
|
-
} = this.settings,
|
|
142
|
+
} = this.settings, _ = {
|
|
140
143
|
x: ((t = l[p.value]) == null ? void 0 : t.length) > 0,
|
|
141
144
|
y: ((e = l[y.value]) == null ? void 0 : e.length) > 0,
|
|
142
|
-
xGroup: u.some((
|
|
143
|
-
var
|
|
144
|
-
return ((
|
|
145
|
+
xGroup: u.some((B) => {
|
|
146
|
+
var g;
|
|
147
|
+
return ((g = l[B.value]) == null ? void 0 : g.length) > 0;
|
|
145
148
|
}),
|
|
146
|
-
yGroup: C.some((
|
|
147
|
-
var
|
|
148
|
-
return ((
|
|
149
|
+
yGroup: C.some((B) => {
|
|
150
|
+
var g;
|
|
151
|
+
return ((g = l[B.value]) == null ? void 0 : g.length) > 0;
|
|
149
152
|
})
|
|
150
|
-
},
|
|
153
|
+
}, G = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0, Y = this.settings.cellsRenderingMode ?? (G > K ? "canvas" : "svg");
|
|
151
154
|
this.chartRenderer.render(
|
|
152
155
|
this.data,
|
|
153
156
|
a,
|
|
154
|
-
|
|
157
|
+
r,
|
|
155
158
|
o,
|
|
156
159
|
i,
|
|
157
160
|
this.calculatedData.groupedCellsData,
|
|
158
|
-
m,
|
|
159
|
-
r,
|
|
160
161
|
c,
|
|
161
|
-
|
|
162
|
-
|
|
162
|
+
n,
|
|
163
|
+
m,
|
|
163
164
|
s,
|
|
165
|
+
this.calculatedData.dendrogramsData,
|
|
166
|
+
d,
|
|
164
167
|
this.calculatedData.cellUniqValues,
|
|
165
168
|
v,
|
|
166
169
|
this.onTooltipHintSwitch,
|
|
167
|
-
|
|
168
|
-
|
|
170
|
+
_,
|
|
171
|
+
Y
|
|
169
172
|
);
|
|
170
173
|
}
|
|
171
174
|
}
|
|
172
175
|
export {
|
|
173
|
-
|
|
176
|
+
st as ChartHeatmap
|
|
174
177
|
};
|
|
175
178
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue, HeatmapEventHandlers, HeatmapSettings } from '../types';\nimport { isColumnName } from '../utils';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport { getCells } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport { getDendrograms } from './getDendrograms';\nimport { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { MAX_SVG_RENDERED_CELLS_COUNT } from './constants';\n\nexport class ChartHeatmap extends AbstractChart {\n settings: HeatmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n groupedCellsData: GroupedCellsHeatmap;\n dendrogramsData: DendrogramsData;\n cellUniqValues: DataValue[];\n } | null = null;\n\n constructor(data: DataFrame, settings: HeatmapSettings, eventHandlers?:HeatmapEventHandlers) {\n super(data, settings);\n\n this.settings = new HeatmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HeatmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HeatmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for heatmap');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HeatmapSettingsImpl, settings: HeatmapSettingsImpl) {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n annotations,\n chartSettings,\n facetSettings,\n dendrogramX,\n dendrogramY,\n normalization,\n aggregation,\n NAValueAs,\n } = settings;\n\n const prevDendrogramXColumns: ColumnName[] = Object.values(prevSettings.dendrogramX?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramXColumns: ColumnName[] = Object.values(dendrogramX?.aes || {}).filter(isColumnName);\n const prevDendrogramYColumns: ColumnName[] = Object.values(prevSettings.dendrogramY?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramYColumns: ColumnName[] = Object.values(dendrogramY?.aes || {}).filter(isColumnName);\n\n function compareColumnGroups(columns1: ColumnName[], columns2: ColumnName[]) {\n return (\n columns1.length !== columns2.length ||\n columns1.some((column, idx) => column.value !== columns2[idx].value)\n );\n }\n\n return (\n prevSettings.xColumn.value !== xColumn.value ||\n prevSettings.yColumn.value !== yColumn.value ||\n prevSettings.valueColumn.value !== valueColumn.value ||\n compareColumnGroups(prevSettings.xGroupBy, xGroupBy) ||\n compareColumnGroups(prevSettings.yGroupBy, yGroupBy) ||\n compareColumnGroups(prevSettings.facetBy, facetBy) ||\n compareColumnGroups(\n prevSettings.annotations.map(a => a.valueColumn),\n annotations.map(a => a.valueColumn)\n ) ||\n compareColumnGroups(prevDendrogramXColumns, currentDendrogramXColumns) ||\n compareColumnGroups(prevDendrogramYColumns, currentDendrogramYColumns) ||\n ((settings.dendrogramX || prevSettings.dendrogramX) &&\n (prevSettings.dendrogramX?.distance !== settings.dendrogramX?.distance ||\n prevSettings.dendrogramX?.linkage !== settings.dendrogramX?.linkage)) ||\n ((settings.dendrogramY || prevSettings.dendrogramY) &&\n (prevSettings.dendrogramY?.distance !== settings.dendrogramY?.distance ||\n prevSettings.dendrogramY?.linkage !== settings.dendrogramY?.linkage)) ||\n prevSettings.chartSettings.valueType !== chartSettings.valueType ||\n prevSettings.facetSettings.sharedX !== facetSettings.sharedX ||\n prevSettings.facetSettings.sharedY !== facetSettings.sharedY ||\n prevSettings.normalization?.method !== normalization?.method ||\n prevSettings.normalization?.direction !== normalization?.direction ||\n prevSettings.NAValueAs !== NAValueAs ||\n prevSettings.aggregation?.method !== aggregation?.method ||\n prevSettings.aggregation?.x !== aggregation?.x ||\n prevSettings.aggregation?.y !== aggregation?.y\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n chartSettings,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n aggregation\n } = this.settings;\n\n const groupedCellsData = getCells(\n this.data,\n xColumn,\n yColumn,\n {dataSource: valueColumn},\n facetBy,\n xGroupBy,\n yGroupBy,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n chartSettings.xAxis,\n chartSettings.yAxis,\n aggregation\n );\n const dendrogramsData = getDendrograms(groupedCellsData, dendrogramX, dendrogramY, facetSettings);\n const cellUniqValues =\n chartSettings.valueType === 'discrete' ? this.data.getColumnCategories(valueColumn.value) : [];\n\n this.calculatedData = {\n groupedCellsData,\n dendrogramsData,\n cellUniqValues,\n };\n }\n\n _updateAesInData() {\n return;\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {\n id,\n valueColumn,\n chartSettings,\n facetSettings,\n aes,\n annotations,\n dendrogramX,\n dendrogramY,\n inheritedDendrogramAes,\n normalization,\n keysOrder,\n xColumn,\n yColumn,\n xGroupBy,\n yGroupBy,\n } = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n const dataSize = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0;\n const cellsRenderingMode = this.settings.cellsRenderingMode ?? (dataSize > MAX_SVG_RENDERED_CELLS_COUNT ? 'canvas' : 'svg');\n \n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n aes,\n this.calculatedData.groupedCellsData,\n annotations,\n valueColumn,\n dendrogramX,\n dendrogramY,\n this.calculatedData.dendrogramsData,\n inheritedDendrogramAes,\n this.calculatedData.cellUniqValues,\n normalization,\n this.onTooltipHintSwitch,\n customOrder,\n cellsRenderingMode\n );\n }\n}\n"],"names":["ChartHeatmap","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","HeatmapSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","xColumn","yColumn","valueColumn","xGroupBy","yGroupBy","facetBy","annotations","chartSettings","facetSettings","dendrogramX","dendrogramY","normalization","aggregation","NAValueAs","prevDendrogramXColumns","_a","isColumnName","currentDendrogramXColumns","prevDendrogramYColumns","_b","currentDendrogramYColumns","compareColumnGroups","columns1","columns2","column","idx","a","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","prevData","prevKeys","keys","u","key","keysOrder","groupedCellsData","getCells","dendrogramsData","getDendrograms","cellUniqValues","id","aes","inheritedDendrogramAes","customOrder","v","dataSize","cellsRenderingMode","MAX_SVG_RENDERED_CELLS_COUNT"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/heatmap/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue, HeatmapEventHandlers, HeatmapSettings } from '../types';\nimport { isColumnName } from '../utils';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport { getCells } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport { getDendrograms } from './getDendrograms';\nimport { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { MAX_SVG_RENDERED_CELLS_COUNT } from './constants';\nimport { noop } from 'lodash';\n\nexport class ChartHeatmap extends AbstractChart {\n settings: HeatmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = noop;\n onLoadingChange: (v:boolean) => void = noop;\n\n calculatedData: {\n groupedCellsData: GroupedCellsHeatmap;\n dendrogramsData: DendrogramsData;\n cellUniqValues: DataValue[];\n } | null = null;\n\n clusteringCalculationsInProgress = false;\n\n constructor(data: DataFrame, settings: HeatmapSettings, eventHandlers?:HeatmapEventHandlers) {\n super(data, settings);\n\n this.settings = new HeatmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch ?? noop;\n this.onLoadingChange = eventHandlers.onLoadingChange ?? noop;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HeatmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HeatmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for heatmap');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HeatmapSettingsImpl, settings: HeatmapSettingsImpl) {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n annotations,\n chartSettings,\n facetSettings,\n dendrogramX,\n dendrogramY,\n normalization,\n aggregation,\n NAValueAs,\n } = settings;\n\n const prevDendrogramXColumns: ColumnName[] = Object.values(prevSettings.dendrogramX?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramXColumns: ColumnName[] = Object.values(dendrogramX?.aes || {}).filter(isColumnName);\n const prevDendrogramYColumns: ColumnName[] = Object.values(prevSettings.dendrogramY?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramYColumns: ColumnName[] = Object.values(dendrogramY?.aes || {}).filter(isColumnName);\n\n function compareColumnGroups(columns1: ColumnName[], columns2: ColumnName[]) {\n return (\n columns1.length !== columns2.length ||\n columns1.some((column, idx) => column.value !== columns2[idx].value)\n );\n }\n\n return (\n prevSettings.xColumn.value !== xColumn.value ||\n prevSettings.yColumn.value !== yColumn.value ||\n prevSettings.valueColumn.value !== valueColumn.value ||\n compareColumnGroups(prevSettings.xGroupBy, xGroupBy) ||\n compareColumnGroups(prevSettings.yGroupBy, yGroupBy) ||\n compareColumnGroups(prevSettings.facetBy, facetBy) ||\n compareColumnGroups(\n prevSettings.annotations.map(a => a.valueColumn),\n annotations.map(a => a.valueColumn)\n ) ||\n compareColumnGroups(prevDendrogramXColumns, currentDendrogramXColumns) ||\n compareColumnGroups(prevDendrogramYColumns, currentDendrogramYColumns) ||\n ((settings.dendrogramX || prevSettings.dendrogramX) &&\n (prevSettings.dendrogramX?.distance !== settings.dendrogramX?.distance ||\n prevSettings.dendrogramX?.linkage !== settings.dendrogramX?.linkage)) ||\n ((settings.dendrogramY || prevSettings.dendrogramY) &&\n (prevSettings.dendrogramY?.distance !== settings.dendrogramY?.distance ||\n prevSettings.dendrogramY?.linkage !== settings.dendrogramY?.linkage)) ||\n prevSettings.chartSettings.valueType !== chartSettings.valueType ||\n prevSettings.facetSettings.sharedX !== facetSettings.sharedX ||\n prevSettings.facetSettings.sharedY !== facetSettings.sharedY ||\n prevSettings.normalization?.method !== normalization?.method ||\n prevSettings.normalization?.direction !== normalization?.direction ||\n prevSettings.NAValueAs !== NAValueAs ||\n prevSettings.aggregation?.method !== aggregation?.method ||\n prevSettings.aggregation?.x !== aggregation?.x ||\n prevSettings.aggregation?.y !== aggregation?.y\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n async _updateData() {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n chartSettings,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n aggregation\n } = this.settings;\n\n const groupedCellsData = getCells(\n this.data,\n xColumn,\n yColumn,\n {dataSource: valueColumn},\n facetBy,\n xGroupBy,\n yGroupBy,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n chartSettings.xAxis,\n chartSettings.yAxis,\n aggregation\n );\n const cellUniqValues = chartSettings.valueType === 'discrete' ? this.data.getColumnCategories(valueColumn.value) : [];\n \n this.clusteringCalculationsInProgress = true;\n this.onLoadingChange(true);\n const dendrogramsData = await getDendrograms(groupedCellsData, dendrogramX, dendrogramY, facetSettings);\n this.clusteringCalculationsInProgress = false;\n this.onLoadingChange(false);\n\n this.calculatedData = {\n groupedCellsData,\n dendrogramsData,\n cellUniqValues,\n };\n \n this._updateChart();\n }\n\n _updateAesInData() {\n this._updateChart();\n }\n\n _updateChart() {\n if (!this.calculatedData || this.clusteringCalculationsInProgress) {\n return;\n }\n const {\n id,\n valueColumn,\n chartSettings,\n facetSettings,\n aes,\n annotations,\n dendrogramX,\n dendrogramY,\n inheritedDendrogramAes,\n normalization,\n keysOrder,\n xColumn,\n yColumn,\n xGroupBy,\n yGroupBy,\n } = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n const dataSize = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0;\n const cellsRenderingMode = this.settings.cellsRenderingMode ?? (dataSize > MAX_SVG_RENDERED_CELLS_COUNT ? 'canvas' : 'svg');\n \n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n aes,\n this.calculatedData.groupedCellsData,\n annotations,\n valueColumn,\n dendrogramX,\n dendrogramY,\n this.calculatedData.dendrogramsData,\n inheritedDendrogramAes,\n this.calculatedData.cellUniqValues,\n normalization,\n this.onTooltipHintSwitch,\n customOrder,\n cellsRenderingMode\n );\n }\n}\n"],"names":["ChartHeatmap","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","noop","HeatmapSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","xColumn","yColumn","valueColumn","xGroupBy","yGroupBy","facetBy","annotations","chartSettings","facetSettings","dendrogramX","dendrogramY","normalization","aggregation","NAValueAs","prevDendrogramXColumns","_a","isColumnName","currentDendrogramXColumns","prevDendrogramYColumns","_b","currentDendrogramYColumns","compareColumnGroups","columns1","columns2","column","idx","a","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","prevData","prevKeys","keys","i","key","keysOrder","groupedCellsData","getCells","cellUniqValues","dendrogramsData","getDendrograms","id","aes","inheritedDendrogramAes","customOrder","v","dataSize","cellsRenderingMode","MAX_SVG_RENDERED_CELLS_COUNT"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/node_modules/@milaboratories/miplots4/dist/node_modules/comlink/dist/esm/comlink.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2019 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
const M = Symbol("Comlink.proxy"), O = Symbol("Comlink.endpoint"), z = Symbol("Comlink.releaseProxy"), v = Symbol("Comlink.finalizer"), h = Symbol("Comlink.thrown"), T = (e) => typeof e == "object" && e !== null || typeof e == "function", C = {
|
|
7
|
+
canHandle: (e) => T(e) && e[M],
|
|
8
|
+
serialize(e) {
|
|
9
|
+
const { port1: t, port2: n } = new MessageChannel();
|
|
10
|
+
return L(e, t), [n, [n]];
|
|
11
|
+
},
|
|
12
|
+
deserialize(e) {
|
|
13
|
+
return e.start(), D(e);
|
|
14
|
+
}
|
|
15
|
+
}, j = {
|
|
16
|
+
canHandle: (e) => T(e) && h in e,
|
|
17
|
+
serialize({ value: e }) {
|
|
18
|
+
let t;
|
|
19
|
+
return e instanceof Error ? t = {
|
|
20
|
+
isError: !0,
|
|
21
|
+
value: {
|
|
22
|
+
message: e.message,
|
|
23
|
+
name: e.name,
|
|
24
|
+
stack: e.stack
|
|
25
|
+
}
|
|
26
|
+
} : t = { isError: !1, value: e }, [t, []];
|
|
27
|
+
},
|
|
28
|
+
deserialize(e) {
|
|
29
|
+
throw e.isError ? Object.assign(new Error(e.value.message), e.value) : e.value;
|
|
30
|
+
}
|
|
31
|
+
}, A = /* @__PURE__ */ new Map([
|
|
32
|
+
["proxy", C],
|
|
33
|
+
["throw", j]
|
|
34
|
+
]);
|
|
35
|
+
function N(e, t) {
|
|
36
|
+
for (const n of e)
|
|
37
|
+
if (t === n || n === "*" || n instanceof RegExp && n.test(t))
|
|
38
|
+
return !0;
|
|
39
|
+
return !1;
|
|
40
|
+
}
|
|
41
|
+
function L(e, t = globalThis, n = ["*"]) {
|
|
42
|
+
t.addEventListener("message", function f(r) {
|
|
43
|
+
if (!r || !r.data)
|
|
44
|
+
return;
|
|
45
|
+
if (!N(n, r.origin)) {
|
|
46
|
+
console.warn(`Invalid origin '${r.origin}' for comlink proxy`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const { id: i, type: g, path: c } = Object.assign({ path: [] }, r.data), u = (r.data.argumentList || []).map(p);
|
|
50
|
+
let a;
|
|
51
|
+
try {
|
|
52
|
+
const s = c.slice(0, -1).reduce((o, y) => o[y], e), l = c.reduce((o, y) => o[y], e);
|
|
53
|
+
switch (g) {
|
|
54
|
+
case "GET":
|
|
55
|
+
a = l;
|
|
56
|
+
break;
|
|
57
|
+
case "SET":
|
|
58
|
+
s[c.slice(-1)[0]] = p(r.data.value), a = !0;
|
|
59
|
+
break;
|
|
60
|
+
case "APPLY":
|
|
61
|
+
a = l.apply(s, u);
|
|
62
|
+
break;
|
|
63
|
+
case "CONSTRUCT":
|
|
64
|
+
{
|
|
65
|
+
const o = new l(...u);
|
|
66
|
+
a = U(o);
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
case "ENDPOINT":
|
|
70
|
+
{
|
|
71
|
+
const { port1: o, port2: y } = new MessageChannel();
|
|
72
|
+
L(e, y), a = G(o, [o]);
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
case "RELEASE":
|
|
76
|
+
a = void 0;
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
} catch (s) {
|
|
82
|
+
a = { value: s, [h]: 0 };
|
|
83
|
+
}
|
|
84
|
+
Promise.resolve(a).catch((s) => ({ value: s, [h]: 0 })).then((s) => {
|
|
85
|
+
const [l, o] = w(s);
|
|
86
|
+
t.postMessage(Object.assign(Object.assign({}, l), { id: i }), o), g === "RELEASE" && (t.removeEventListener("message", f), P(t), v in e && typeof e[v] == "function" && e[v]());
|
|
87
|
+
}).catch((s) => {
|
|
88
|
+
const [l, o] = w({
|
|
89
|
+
value: new TypeError("Unserializable return value"),
|
|
90
|
+
[h]: 0
|
|
91
|
+
});
|
|
92
|
+
t.postMessage(Object.assign(Object.assign({}, l), { id: i }), o);
|
|
93
|
+
});
|
|
94
|
+
}), t.start && t.start();
|
|
95
|
+
}
|
|
96
|
+
function H(e) {
|
|
97
|
+
return e.constructor.name === "MessagePort";
|
|
98
|
+
}
|
|
99
|
+
function P(e) {
|
|
100
|
+
H(e) && e.close();
|
|
101
|
+
}
|
|
102
|
+
function D(e, t) {
|
|
103
|
+
const n = /* @__PURE__ */ new Map();
|
|
104
|
+
return e.addEventListener("message", function(f) {
|
|
105
|
+
const { data: r } = f;
|
|
106
|
+
if (!r || !r.id)
|
|
107
|
+
return;
|
|
108
|
+
const i = n.get(r.id);
|
|
109
|
+
if (i)
|
|
110
|
+
try {
|
|
111
|
+
i(r);
|
|
112
|
+
} finally {
|
|
113
|
+
n.delete(r.id);
|
|
114
|
+
}
|
|
115
|
+
}), S(e, n, [], t);
|
|
116
|
+
}
|
|
117
|
+
function d(e) {
|
|
118
|
+
if (e)
|
|
119
|
+
throw new Error("Proxy has been released and is not useable");
|
|
120
|
+
}
|
|
121
|
+
function R(e) {
|
|
122
|
+
return m(e, /* @__PURE__ */ new Map(), {
|
|
123
|
+
type: "RELEASE"
|
|
124
|
+
}).then(() => {
|
|
125
|
+
P(e);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
const E = /* @__PURE__ */ new WeakMap(), b = "FinalizationRegistry" in globalThis && new FinalizationRegistry((e) => {
|
|
129
|
+
const t = (E.get(e) || 0) - 1;
|
|
130
|
+
E.set(e, t), t === 0 && R(e);
|
|
131
|
+
});
|
|
132
|
+
function I(e, t) {
|
|
133
|
+
const n = (E.get(t) || 0) + 1;
|
|
134
|
+
E.set(t, n), b && b.register(e, t, e);
|
|
135
|
+
}
|
|
136
|
+
function W(e) {
|
|
137
|
+
b && b.unregister(e);
|
|
138
|
+
}
|
|
139
|
+
function S(e, t, n = [], f = function() {
|
|
140
|
+
}) {
|
|
141
|
+
let r = !1;
|
|
142
|
+
const i = new Proxy(f, {
|
|
143
|
+
get(g, c) {
|
|
144
|
+
if (d(r), c === z)
|
|
145
|
+
return () => {
|
|
146
|
+
W(i), R(e), t.clear(), r = !0;
|
|
147
|
+
};
|
|
148
|
+
if (c === "then") {
|
|
149
|
+
if (n.length === 0)
|
|
150
|
+
return { then: () => i };
|
|
151
|
+
const u = m(e, t, {
|
|
152
|
+
type: "GET",
|
|
153
|
+
path: n.map((a) => a.toString())
|
|
154
|
+
}).then(p);
|
|
155
|
+
return u.then.bind(u);
|
|
156
|
+
}
|
|
157
|
+
return S(e, t, [...n, c]);
|
|
158
|
+
},
|
|
159
|
+
set(g, c, u) {
|
|
160
|
+
d(r);
|
|
161
|
+
const [a, s] = w(u);
|
|
162
|
+
return m(e, t, {
|
|
163
|
+
type: "SET",
|
|
164
|
+
path: [...n, c].map((l) => l.toString()),
|
|
165
|
+
value: a
|
|
166
|
+
}, s).then(p);
|
|
167
|
+
},
|
|
168
|
+
apply(g, c, u) {
|
|
169
|
+
d(r);
|
|
170
|
+
const a = n[n.length - 1];
|
|
171
|
+
if (a === O)
|
|
172
|
+
return m(e, t, {
|
|
173
|
+
type: "ENDPOINT"
|
|
174
|
+
}).then(p);
|
|
175
|
+
if (a === "bind")
|
|
176
|
+
return S(e, t, n.slice(0, -1));
|
|
177
|
+
const [s, l] = k(u);
|
|
178
|
+
return m(e, t, {
|
|
179
|
+
type: "APPLY",
|
|
180
|
+
path: n.map((o) => o.toString()),
|
|
181
|
+
argumentList: s
|
|
182
|
+
}, l).then(p);
|
|
183
|
+
},
|
|
184
|
+
construct(g, c) {
|
|
185
|
+
d(r);
|
|
186
|
+
const [u, a] = k(c);
|
|
187
|
+
return m(e, t, {
|
|
188
|
+
type: "CONSTRUCT",
|
|
189
|
+
path: n.map((s) => s.toString()),
|
|
190
|
+
argumentList: u
|
|
191
|
+
}, a).then(p);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
return I(i, e), i;
|
|
195
|
+
}
|
|
196
|
+
function F(e) {
|
|
197
|
+
return Array.prototype.concat.apply([], e);
|
|
198
|
+
}
|
|
199
|
+
function k(e) {
|
|
200
|
+
const t = e.map(w);
|
|
201
|
+
return [t.map((n) => n[0]), F(t.map((n) => n[1]))];
|
|
202
|
+
}
|
|
203
|
+
const x = /* @__PURE__ */ new WeakMap();
|
|
204
|
+
function G(e, t) {
|
|
205
|
+
return x.set(e, t), e;
|
|
206
|
+
}
|
|
207
|
+
function U(e) {
|
|
208
|
+
return Object.assign(e, { [M]: !0 });
|
|
209
|
+
}
|
|
210
|
+
function w(e) {
|
|
211
|
+
for (const [t, n] of A)
|
|
212
|
+
if (n.canHandle(e)) {
|
|
213
|
+
const [f, r] = n.serialize(e);
|
|
214
|
+
return [
|
|
215
|
+
{
|
|
216
|
+
type: "HANDLER",
|
|
217
|
+
name: t,
|
|
218
|
+
value: f
|
|
219
|
+
},
|
|
220
|
+
r
|
|
221
|
+
];
|
|
222
|
+
}
|
|
223
|
+
return [
|
|
224
|
+
{
|
|
225
|
+
type: "RAW",
|
|
226
|
+
value: e
|
|
227
|
+
},
|
|
228
|
+
x.get(e) || []
|
|
229
|
+
];
|
|
230
|
+
}
|
|
231
|
+
function p(e) {
|
|
232
|
+
switch (e.type) {
|
|
233
|
+
case "HANDLER":
|
|
234
|
+
return A.get(e.name).deserialize(e.value);
|
|
235
|
+
case "RAW":
|
|
236
|
+
return e.value;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
function m(e, t, n, f) {
|
|
240
|
+
return new Promise((r) => {
|
|
241
|
+
const i = _();
|
|
242
|
+
t.set(i, r), e.start && e.start(), e.postMessage(Object.assign({ id: i }, n), f);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
function _() {
|
|
246
|
+
return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join("-");
|
|
247
|
+
}
|
|
248
|
+
export {
|
|
249
|
+
O as createEndpoint,
|
|
250
|
+
L as expose,
|
|
251
|
+
v as finalizer,
|
|
252
|
+
U as proxy,
|
|
253
|
+
M as proxyMarker,
|
|
254
|
+
z as releaseProxy,
|
|
255
|
+
G as transfer,
|
|
256
|
+
A as transferHandlers,
|
|
257
|
+
D as wrap
|
|
258
|
+
};
|
|
259
|
+
//# sourceMappingURL=comlink.js.map
|